// 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)
};
}
}