using System.Text.Json.Serialization; namespace Purrse.Core.DTOs; // API DTOs public record SendChatMessageRequest(Guid? ConversationId, string Message); public record SendChatMessageResponse(Guid ConversationId, ChatMessageResponse AssistantMessage); public record ChatMessageResponse( Guid Id, string Role, string Content, string? ToolResultType, string? ToolResultJson, DateTime CreatedAt ); public record ChatConversationResponse( Guid Id, string? Title, DateTime CreatedAt, DateTime UpdatedAt ); public record ChatConversationDetailResponse( Guid Id, string? Title, List Messages, DateTime CreatedAt, DateTime UpdatedAt ); // Ollama tool-calling DTOs (separate from existing OllamaChatRequest to avoid breaking categorization) public class OllamaToolChatRequest { [JsonPropertyName("model")] public string Model { get; set; } = string.Empty; [JsonPropertyName("messages")] public List Messages { get; set; } = new(); [JsonPropertyName("stream")] public bool Stream { get; set; } [JsonPropertyName("tools")] public List? Tools { get; set; } } public class OllamaToolMessage { [JsonPropertyName("role")] public string Role { get; set; } = string.Empty; [JsonPropertyName("content")] public string Content { get; set; } = string.Empty; [JsonPropertyName("tool_calls")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public List? ToolCalls { get; set; } } public class OllamaTool { [JsonPropertyName("type")] public string Type { get; set; } = "function"; [JsonPropertyName("function")] public OllamaFunction Function { get; set; } = new(); } public class OllamaFunction { [JsonPropertyName("name")] public string Name { get; set; } = string.Empty; [JsonPropertyName("description")] public string Description { get; set; } = string.Empty; [JsonPropertyName("parameters")] public OllamaFunctionParameters Parameters { get; set; } = new(); } public class OllamaFunctionParameters { [JsonPropertyName("type")] public string Type { get; set; } = "object"; [JsonPropertyName("properties")] public Dictionary Properties { get; set; } = new(); [JsonPropertyName("required")] public List? Required { get; set; } } public class OllamaPropertySchema { [JsonPropertyName("type")] public string Type { get; set; } = "string"; [JsonPropertyName("description")] public string Description { get; set; } = string.Empty; [JsonPropertyName("enum")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public List? Enum { get; set; } } public class OllamaToolCall { [JsonPropertyName("function")] public OllamaToolCallFunction Function { get; set; } = new(); } public class OllamaToolCallFunction { [JsonPropertyName("name")] public string Name { get; set; } = string.Empty; [JsonPropertyName("arguments")] public Dictionary Arguments { get; set; } = new(); } public class OllamaToolChatResponse { [JsonPropertyName("message")] public OllamaToolResponseMessage? Message { get; set; } [JsonPropertyName("done")] public bool Done { get; set; } } public class OllamaToolResponseMessage { [JsonPropertyName("role")] public string Role { get; set; } = string.Empty; [JsonPropertyName("content")] public string Content { get; set; } = string.Empty; [JsonPropertyName("tool_calls")] public List? ToolCalls { get; set; } }