package ai import ( "encoding/json" "time" ) // Message represents a single message in a conversation with Claude. type Message struct { Role string `json:"role"` // "user" or "assistant" Content []ContentBlock `json:"content"` // one or more content blocks } // ContentBlock is a polymorphic block within a Message. // Only one of the content fields will be populated depending on Type. type ContentBlock struct { Type string `json:"type"` // "text", "image", "tool_use", "tool_result" // text Text string `json:"text,omitempty"` // image (base64 source) Source *ImageSource `json:"source,omitempty"` // tool_use ID string `json:"id,omitempty"` Name string `json:"name,omitempty"` Input json.RawMessage `json:"input,omitempty"` // tool_result ToolUseID string `json:"tool_use_id,omitempty"` Content []ContentBlock `json:"content,omitempty"` IsError bool `json:"is_error,omitempty"` } // ImageSource holds a base64-encoded image for vision requests. type ImageSource struct { Type string `json:"type"` // "base64" MediaType string `json:"media_type"` // "image/jpeg", "image/png", etc. Data string `json:"data"` // base64-encoded image data } // Tool describes a tool available to the model. type Tool struct { Name string `json:"name"` Description string `json:"description"` InputSchema json.RawMessage `json:"input_schema"` } // StreamEvent represents a single event from the SSE stream. type StreamEvent struct { Type string `json:"type"` // "text_delta", "tool_use_start", "tool_use_delta", "tool_result", "done", "error" Data string `json:"data"` // event payload // Populated for tool_use_start events ToolName string `json:"tool_name,omitempty"` ToolID string `json:"tool_id,omitempty"` ToolInput string `json:"tool_input,omitempty"` } // Usage tracks token consumption for a request. type Usage struct { InputTokens int `json:"input_tokens"` OutputTokens int `json:"output_tokens"` } // ConversationSummary is a lightweight view of a conversation for listing. type ConversationSummary struct { ID string `json:"id"` Title string `json:"title"` Model string `json:"model"` CreatedAt time.Time `json:"createdAt"` TokensIn int `json:"tokensIn"` TokensOut int `json:"tokensOut"` }