// Package chatcmpl describes the OpenAI-compatible Chat Completions // protocol spoken by upstream providers. package chatcmpl import "encoding/json" // Request is a Chat Completions request body. type Request struct { Model string `json:"model"` Messages []Message `json:"messages"` MaxTokens int `json:"max_tokens,omitempty"` Temperature *float64 `json:"temperature,omitempty"` TopP *float64 `json:"top_p,omitempty"` Stop []string `json:"stop,omitempty"` Stream bool `json:"stream,omitempty"` StreamOptions *StreamOptions `json:"stream_options,omitempty"` Tools []Tool `json:"tools,omitempty"` ToolChoice any `json:"tool_choice,omitempty"` } // StreamOptions toggles the usage chunk at the end of a stream. type StreamOptions struct { IncludeUsage bool `json:"include_usage"` } // Message is one Chat Completions message. Content is either a string or // a []ContentPart. type Message struct { Role string `json:"role"` Content any `json:"content"` ToolCalls []ToolCall `json:"tool_calls,omitempty"` ToolCallID string `json:"tool_call_id,omitempty"` } // ContentPart is one part of a multi-modal message. type ContentPart struct { Type string `json:"type"` Text string `json:"text,omitempty"` ImageURL *ImageURL `json:"image_url,omitempty"` } // ImageURL references an image, usually as a data URL. type ImageURL struct { URL string `json:"url"` } // Tool is a function tool definition. type Tool struct { Type string `json:"type"` Function ToolFunction `json:"function"` } // ToolFunction is the payload of a function tool. type ToolFunction struct { Name string `json:"name"` Description string `json:"description,omitempty"` Parameters json.RawMessage `json:"parameters,omitempty"` } // ToolCall is a function call requested by the model. type ToolCall struct { ID string `json:"id"` Type string `json:"type"` Function ToolCallFunction `json:"function"` Index int `json:"index,omitempty"` } // ToolCallFunction holds the name and the accumulated JSON arguments. type ToolCallFunction struct { Name string `json:"name"` Arguments string `json:"arguments"` } // Response is a non-streaming Chat Completions response body. type Response struct { ID string `json:"id"` Object string `json:"object"` Model string `json:"model"` Choices []Choice `json:"choices"` Usage *Usage `json:"usage,omitempty"` Error *Error `json:"error,omitempty"` } // Choice is one completion choice. type Choice struct { Index int `json:"index"` Message Message `json:"message"` FinishReason string `json:"finish_reason"` } // Usage reports token counts. type Usage struct { PromptTokens int `json:"prompt_tokens"` CompletionTokens int `json:"completion_tokens"` TotalTokens int `json:"total_tokens"` } // Error is an upstream error payload. type Error struct { Message string `json:"message"` Type string `json:"type"` Code any `json:"code,omitempty"` } // StreamChunk is one SSE data payload of a streaming response. type StreamChunk struct { ID string `json:"id"` Choices []ChunkChoice `json:"choices"` Usage *Usage `json:"usage,omitempty"` } // ChunkChoice is one choice inside a stream chunk. type ChunkChoice struct { Index int `json:"index"` Delta Delta `json:"delta"` FinishReason *string `json:"finish_reason"` } // Delta is the incremental payload of a stream chunk. type Delta struct { Role string `json:"role,omitempty"` Content *string `json:"content,omitempty"` ToolCalls []ToolCall `json:"tool_calls,omitempty"` }