using System.Text.Json; using System.Text.Json.Serialization; namespace OpenQuery.Models; public record ChatCompletionRequest( [property: JsonPropertyName("model")] string Model, [property: JsonPropertyName("messages")] List Messages, [property: JsonPropertyName("tools")] List? Tools = null, [property: JsonPropertyName("stream")] bool Stream = false ); public record Message( [property: JsonPropertyName("role")] string Role, [property: JsonPropertyName("content")] string? Content = null, [property: JsonPropertyName("tool_calls")] List? ToolCalls = null, [property: JsonPropertyName("tool_call_id")] string? ToolCallId = null ) { public static Message FromTool(string content, string toolCallId) => new Message("tool", content, null, toolCallId); } public record ToolDefinition( [property: JsonPropertyName("type")] string Type, [property: JsonPropertyName("function")] ToolFunction Function ); public record ToolFunction( [property: JsonPropertyName("name")] string Name, [property: JsonPropertyName("description")] string Description, [property: JsonPropertyName("parameters")] JsonElement Parameters ); public record ToolCall( [property: JsonPropertyName("id")] string Id, [property: JsonPropertyName("type")] string Type, [property: JsonPropertyName("function")] FunctionCall Function ); public record FunctionCall( [property: JsonPropertyName("name")] string Name, [property: JsonPropertyName("arguments")] string Arguments ); public record ChatCompletionResponse( [property: JsonPropertyName("choices")] List Choices, [property: JsonPropertyName("usage")] Usage? Usage = null ); public record Choice( [property: JsonPropertyName("message")] Message Message, [property: JsonPropertyName("finish_reason")] string? FinishReason = null ); public record Usage( [property: JsonPropertyName("prompt_tokens")] int PromptTokens, [property: JsonPropertyName("completion_tokens")] int CompletionTokens, [property: JsonPropertyName("total_tokens")] int TotalTokens ); public record EmbeddingRequest( [property: JsonPropertyName("model")] string Model, [property: JsonPropertyName("input")] List Input ); public record EmbeddingResponse( [property: JsonPropertyName("data")] List Data, [property: JsonPropertyName("usage")] Usage Usage ); public record EmbeddingData( [property: JsonPropertyName("embedding")] float[] Embedding, [property: JsonPropertyName("index")] int Index );