package llm import ( "context" "io" ) type Role string const ( RoleSystem Role = "system" RoleUser Role = "user" RoleAssistant Role = "assistant" ) type Message struct { Role Role `json:"role"` Content string `json:"content"` } type ChatRequest struct { Model string `json:"model"` Messages []Message `json:"messages"` Temperature float64 `json:"temperature,omitempty"` MaxTokens int `json:"max_tokens,omitempty"` Stream bool `json:"stream"` } type ChatResponse struct { Content string `json:"content"` Model string `json:"model"` PromptTokens int `json:"prompt_tokens"` CompletionTokens int `json:"completion_tokens"` TotalTokens int `json:"total_tokens"` ConversationID string `json:"conversation_id,omitempty"` } type StreamDelta struct { Content string `json:"content"` FinishReason string `json:"finish_reason,omitempty"` } // Provider abstracts an LLM API (OpenAI, Anthropic, etc.) type Provider interface { ChatCompletion(ctx context.Context, req *ChatRequest) (*ChatResponse, error) ChatStream(ctx context.Context, req *ChatRequest) (io.ReadCloser, error) Name() string } type ProviderConfig struct { Type string `json:"type"` APIKey string `json:"api_key"` BaseURL string `json:"base_url,omitempty"` Model string `json:"model,omitempty"` }