using Luna.Shared; using Microsoft.Extensions.AI; namespace Luna.Core.Services; public class ChatStreamUpdateBuilder : IChatStreamUpdateBuilder { public ChatStreamUpdate FromAiContent(AIContent content, string messageId) => content switch { TextReasoningContent reasoning => new ChatStreamUpdate(ChatStreamUpdateType.Text, reasoning.Text, "assistant", false, messageId), TextContent text => new ChatStreamUpdate(ChatStreamUpdateType.Text, text.Text, "assistant", false, messageId), ToolCallContent toolCall => new ChatStreamUpdate(ChatStreamUpdateType.ToolCall, toolCall.ToString(), "assistant", false, messageId), ToolResultContent toolResult => new ChatStreamUpdate(ChatStreamUpdateType.ToolResult, toolResult.ToString(), "assistant", false, messageId), UsageContent usage => new ChatStreamUpdate(ChatStreamUpdateType.Usage, usage.ToString(), "system", false, messageId), _ => throw new NotSupportedException($"Unsupported content type: {content.GetType().Name}") }; public ChatStreamUpdate FromString(string content, string messageId) => new(ChatStreamUpdateType.Text, content, "assistant", false, messageId); public ChatStreamUpdate CreateCompleteUpdate(string messageId) => new(ChatStreamUpdateType.Complete, null, null, true, messageId); }