package main import "encoding/json" // OpenAI Types type ChatCompletionRequest struct { Model string `json:"model"` Messages []Message `json:"messages"` Temperature *float64 `json:"temperature,omitempty"` TopP *float64 `json:"top_p,omitempty"` MaxTokens *int `json:"max_tokens,omitempty"` Stream *bool `json:"stream,omitempty"` Stop []string `json:"stop,omitempty"` Tools []Tool `json:"tools,omitempty"` ToolChoices *ToolChoice `json:"tool_choice,omitempty"` PresencePenalty *float64 `json:"presence_penalty,omitempty"` FrequencyPenalty *float64 `json:"frequency_penalty,omitempty"` User string `json:"user,omitempty"` } type Message struct { Role string `json:"role"` Content interface{} `json:"content"` // string or []ContentPart Name string `json:"name,omitempty"` ToolCalls []ToolCall `json:"tool_calls,omitempty"` } type ContentPart struct { Type string `json:"type"` Text string `json:"text,omitempty"` Source *ImageSource `json:"source,omitempty"` } type ImageSource struct { Type string `json:"type"` MediaURL string `json:"media_url,omitempty"` Detail string `json:"detail,omitempty"` } type Tool struct { Type string `json:"type"` Function Function `json:"function"` } type Function struct { Name string `json:"name"` Description string `json:"description,omitempty"` Parameters map[string]interface{} `json:"parameters,omitempty"` } type ToolChoice struct { Type string `json:"type,omitempty"` // "auto", "none", "required" Function *FunctionRef `json:"function,omitempty"` } type FunctionRef struct { Name string `json:"name,omitempty"` } type Choice struct { Index int `json:"index"` Message Message `json:"message"` FinishReason string `json:"finish_reason,omitempty"` } type ChatCompletionResponse struct { ID string `json:"id"` Object string `json:"object"` Created int64 `json:"created"` Model string `json:"model"` Choices []Choice `json:"choices"` Usage Usage `json:"usage"` } type Usage struct { PromptTokens int `json:"prompt_tokens"` CompletionTokens int `json:"completion_tokens"` TotalTokens int `json:"total_tokens"` } type ToolCall struct { Index int `json:"index,omitempty"` ID string `json:"id,omitempty"` Type string `json:"type,omitempty"` Function FunctionCall `json:"function,omitempty"` } type FunctionCall struct { Name string `json:"name,omitempty"` Arguments string `json:"arguments,omitempty"` } // Anthropic Types type AnthropicRequest struct { Model string `json:"model"` Messages []AnthropicMessage `json:"messages"` System string `json:"system,omitempty"` MaxTokens int `json:"max_tokens"` Stream bool `json:"stream,omitempty"` Temperature *float64 `json:"temperature,omitempty"` TopP *float64 `json:"top_p,omitempty"` StopSequences []string `json:"stop_sequences,omitempty"` Tools []AnthropicTool `json:"tools,omitempty"` ToolChoice *AnthropicToolChoice `json:"tool_choice,omitempty"` Thinking *AnthropicThinking `json:"thinking,omitempty"` } type AnthropicThinking struct { Type string `json:"type"` BudgetTokens int `json:"budget_tokens,omitempty"` } type AnthropicMessage struct { Role string `json:"role"` Content interface{} `json:"content"` // string or []ContentBlock } type ContentBlock struct { Type string `json:"type,omitempty"` // "text", "tool_use", "tool_result" Text string `json:"text,omitempty"` Id string `json:"id,omitempty"` Name string `json:"name,omitempty"` Input map[string]interface{} `json:"input,omitempty"` ToolUseId string `json:"tool_use_id,omitempty"` Content string `json:"content,omitempty"` } type AnthropicTool struct { Name string `json:"name"` Description string `json:"description,omitempty"` InputSchema map[string]interface{} `json:"input_schema,omitempty"` } type AnthropicToolChoice struct { Type string `json:"type,omitempty"` // "auto", "none", "any" Name string `json:"name,omitempty"` } type AnthropicResponse struct { Type string `json:"type,omitempty"` Id string `json:"id"` Role string `json:"role,omitempty"` Model string `json:"model,omitempty"` Content []ContentBlock `json:"content,omitempty"` StopReason string `json:"stop_reason,omitempty"` StopSequence string `json:"stop_sequence,omitempty"` Usage AnthropicUsage `json:"usage,omitempty"` } type AnthropicUsage struct { InputTokens int `json:"input_tokens,omitempty"` OutputTokens int `json:"output_tokens,omitempty"` } // Streaming Types type StreamChunk struct { ID string `json:"id"` Object string `json:"object"` Created int64 `json:"created"` Model string `json:"model"` Choices []StreamChoice `json:"choices"` } type StreamChoice struct { Index int `json:"index"` Delta Delta `json:"delta"` FinishReason string `json:"finish_reason,omitempty"` } type Delta struct { Role string `json:"role,omitempty"` Content string `json:"content,omitempty"` ToolCalls []StreamToolCall `json:"tool_calls,omitempty"` } type StreamToolCall struct { Index int `json:"index,omitempty"` ID string `json:"id,omitempty"` Type string `json:"type,omitempty"` Function StreamFunction `json:"function,omitempty"` } type StreamFunction struct { Name string `json:"name,omitempty"` Arguments string `json:"arguments,omitempty"` } // SSE Event Types type SSEMessage struct { Type string `json:"type"` Data json.RawMessage `json:"data,omitempty"` } type AnthropicMessageStart struct { Type string `json:"type"` Message struct { Id string `json:"id"` Role string `json:"role"` Type string `json:"type"` } `json:"message"` } type AnthropicBlockStart struct { Type string `json:"type"` Index int `json:"index"` ContentBlock struct { Type string `json:"type"` Id string `json:"id"` Name string `json:"name,omitempty"` } `json:"content_block"` } type AnthropicDelta struct { Type string `json:"type"` Index int `json:"index"` Delta struct { Text string `json:"text,omitempty"` InputJSONDelta string `json:"input_json_delta,omitempty"` } `json:"delta"` } type AnthropicBlockStop struct { Type string `json:"type"` Index int `json:"index"` } type AnthropicMessageDelta struct { Type string `json:"type"` Delta struct { StopSequence string `json:"stop_sequence,omitempty"` } `json:"delta"` Usage *AnthropicUsage `json:"usage,omitempty"` StopReason string `json:"stop_reason,omitempty"` } type AnthropicMessageStop struct { Type string `json:"type"` }