// Copyright (c) Microsoft. All rights reserved. using System.Text.Json; using System.Text.Json.Serialization; using Microsoft.Extensions.AI; namespace Microsoft.Agents.AI.DurableTask.State; /// /// Base class for durable agent state content types. /// [JsonPolymorphic(TypeDiscriminatorPropertyName = "$type")] [JsonDerivedType(typeof(DurableAgentStateDataContent), "data")] [JsonDerivedType(typeof(DurableAgentStateErrorContent), "error")] [JsonDerivedType(typeof(DurableAgentStateFunctionCallContent), "functionCall")] [JsonDerivedType(typeof(DurableAgentStateFunctionResultContent), "functionResult")] [JsonDerivedType(typeof(DurableAgentStateHostedFileContent), "hostedFile")] [JsonDerivedType(typeof(DurableAgentStateHostedVectorStoreContent), "hostedVectorStore")] [JsonDerivedType(typeof(DurableAgentStateTextContent), "text")] [JsonDerivedType(typeof(DurableAgentStateTextReasoningContent), "reasoning")] [JsonDerivedType(typeof(DurableAgentStateUriContent), "uri")] [JsonDerivedType(typeof(DurableAgentStateUsageContent), "usage")] [JsonDerivedType(typeof(DurableAgentStateUnknownContent), "unknown")] internal abstract class DurableAgentStateContent { /// /// Gets any additional data found during deserialization that does not map to known properties. /// [JsonExtensionData] public IDictionary? ExtensionData { get; set; } /// /// Converts this durable agent state content to an . /// /// A converted instance. public abstract AIContent ToAIContent(); /// /// Creates a from an . /// /// The to convert. /// A representing the original . public static DurableAgentStateContent FromAIContent(AIContent content) { return content switch { DataContent dataContent => DurableAgentStateDataContent.FromDataContent(dataContent), ErrorContent errorContent => DurableAgentStateErrorContent.FromErrorContent(errorContent), FunctionCallContent functionCallContent => DurableAgentStateFunctionCallContent.FromFunctionCallContent(functionCallContent), FunctionResultContent functionResultContent => DurableAgentStateFunctionResultContent.FromFunctionResultContent(functionResultContent), HostedFileContent hostedFileContent => DurableAgentStateHostedFileContent.FromHostedFileContent(hostedFileContent), HostedVectorStoreContent hostedVectorStoreContent => DurableAgentStateHostedVectorStoreContent.FromHostedVectorStoreContent(hostedVectorStoreContent), TextContent textContent => DurableAgentStateTextContent.FromTextContent(textContent), TextReasoningContent textReasoningContent => DurableAgentStateTextReasoningContent.FromTextReasoningContent(textReasoningContent), UriContent uriContent => DurableAgentStateUriContent.FromUriContent(uriContent), UsageContent usageContent => DurableAgentStateUsageContent.FromUsageContent(usageContent), _ => DurableAgentStateUnknownContent.FromUnknownContent(content) }; } }