package api type ChatMessage struct { Role string `json:"role"` Content []ContentBlock `json:"content"` } // MessageRequest is generalizes across OpenAI, Anthropic, etc. type MessagesRequest struct { Model string `json:"model"` Messages []ChatMessage `json:"messages"` MaxTokens int `json:"max_tokens"` System string `json:"system,omitempty"` Temperature float64 `json:"temperature"` Tools []Tool `json:"tools,omitempty"` } type ContentBlock struct { // Type is "text", "image", "tool_use", or "tool_result". Type string `json:"type"` // Text is for Type="text" Text string `json:"text,omitempty"` // Source is for Type="image" Source *ContentSource `json:"source,omitempty"` // Id, Name, and Input are for Type="tool_use". ID string `json:"id,omitempty"` Name string `json:"name,omitempty"` Input interface{} `json:"input,omitempty"` Output string `json:"output,omitempty"` } type ContentSource struct { // Type can only be "base64". Type string `json:"type"` // MediaType can be one of: // - "image/jpeg", // - "image/png", // - "image/gif", or // - "image/webp". MediaType string `json:"media_type,omitempty"` Data string `json:"data,omitempty"` } type Usage struct { InputTokens int `json:"input_tokens,omitempty"` CacheCreationInputTokens *int `json:"cache_creation_input_tokens,omitempty"` CacheReadInputTokens *int `json:"cache_read_input_tokens,omitempty"` OutputTokens int `json:"output_tokens,omitempty"` } type ErrorResponse struct { Type string `json:"type"` Message string `json:"message"` } type MessagesResponse struct { Id string `json:"id"` Type string `json:"type"` Role string `json:"role"` Content []ContentBlock `json:"content"` Model string `json:"model"` StopReason *string `json:"stop_reason,omitempty"` StopSequence *string `json:"stop_sequence,omitempty"` Usage Usage `json:"usage"` Error *ErrorResponse `json:"error,omitempty"` } type Tool struct { Type string `json:"type"` Function *ToolFunction `json:"function"` } type ToolFunction struct { Name string `json:"name"` Description string `json:"description"` InputSchema interface{} `json:"input_schema"` }