← All source files

V18 / 8d896b8a86e5

ChatMessageExtensions.cs

Lilith/Core/Chat/ChatMessageExtensions.cs

Unchanged from the preceding version
CS
namespace Lilith.Core.Chat;

public static class ChatMessageExtensions
{
    public static ChatMessage Snapshot(this ChatMessage message) =>
        message with
        {
            Images = message.Images is null ? null : [.. message.Images],
            ToolCalls = message.ToolCalls?.Select(c => c with { Function = c.Function with { Arguments = c.Function.Arguments.Clone() } }).ToList()
        };

    public static SavedChatMessage ToSavedMessage(this ChatMessage message) => new()
    {
        Role = message.Role,
        Content = message.Content ?? string.Empty,
        Tokens = message.Tokens,
        Images = message.Images is { Count: > 0 } ? [.. message.Images] : null,
        ToolCalls = message.Snapshot().ToolCalls, ToolName = message.ToolName, ToolCallId = message.ToolCallId
    };

    public static ChatMessage ToChatMessage(this SavedChatMessage message) =>
        new ChatMessage(message.Role, message.Content, message.Images, message.Tokens,
            message.ToolCalls, message.ToolName, message.ToolCallId).Snapshot();
}