Documentation
¶
Index ¶
- type AnthropicProvider
- type ContentPart
- type ModelInfo
- type ModelMessage
- type ModelRefresher
- type OpenAIProvider
- type Provider
- type Registry
- func (r *Registry) Get(id string) Provider
- func (r *Registry) List() []string
- func (r *Registry) ListModels() []ModelInfo
- func (r *Registry) RefreshModels()
- func (r *Registry) Register(p Provider)
- func (r *Registry) RegisterCustomModel(modelID, providerID string)
- func (r *Registry) ResolveProvider(modelID string) Provider
- func (r *Registry) UnregisterCustomModel(modelID string)
- type StreamEvent
- type StreamEventType
- type StreamRequest
- type TokenUsage
- type ToolDefinition
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AnthropicProvider ¶
type AnthropicProvider struct {
// contains filtered or unexported fields
}
AnthropicProvider implements Provider for the Anthropic Messages API.
func NewAnthropicProvider ¶
func NewAnthropicProvider() *AnthropicProvider
func (*AnthropicProvider) ID ¶
func (p *AnthropicProvider) ID() string
func (*AnthropicProvider) Models ¶
func (p *AnthropicProvider) Models() []ModelInfo
func (*AnthropicProvider) StreamChat ¶
func (p *AnthropicProvider) StreamChat(ctx context.Context, req StreamRequest) (<-chan StreamEvent, error)
type ContentPart ¶
type ModelMessage ¶
type ModelMessage struct {
Role string `json:"role"`
Content json.RawMessage `json:"content,omitempty"`
ToolCalls json.RawMessage `json:"tool_calls,omitempty"`
ToolCallID string `json:"tool_call_id,omitempty"`
Name string `json:"name,omitempty"`
}
type ModelRefresher ¶ added in v0.1.3
type ModelRefresher interface {
RefreshModels()
}
ModelRefresher is an optional interface that providers can implement to support dynamic model list refreshing.
type OpenAIProvider ¶
type OpenAIProvider struct {
// contains filtered or unexported fields
}
OpenAIProvider implements Provider for the OpenAI Chat Completions API. Also used for OpenRouter and Ollama (same API format, different base URL).
func NewOllamaProvider ¶
func NewOllamaProvider() *OpenAIProvider
NewOllamaProvider creates an OpenAI-compatible provider for Ollama. When OLLAMA_BASE_URL points to a cloud endpoint (not localhost), the model list is fetched dynamically from /v1/models. For local Ollama, a static fallback list is used.
func NewOpenAIProvider ¶
func NewOpenAIProvider() *OpenAIProvider
func NewOpenRouterProvider ¶
func NewOpenRouterProvider() *OpenAIProvider
NewOpenRouterProvider creates an OpenAI-compatible provider for OpenRouter.
func (*OpenAIProvider) ID ¶
func (p *OpenAIProvider) ID() string
func (*OpenAIProvider) Models ¶
func (p *OpenAIProvider) Models() []ModelInfo
func (*OpenAIProvider) RefreshModels ¶ added in v0.1.3
func (p *OpenAIProvider) RefreshModels()
RefreshModels clears the cached model list so the next call to Models() will re-fetch from the endpoint (for cloud providers).
func (*OpenAIProvider) StreamChat ¶
func (p *OpenAIProvider) StreamChat(ctx context.Context, req StreamRequest) (<-chan StreamEvent, error)
type Provider ¶
type Provider interface {
ID() string
Models() []ModelInfo
StreamChat(ctx context.Context, req StreamRequest) (<-chan StreamEvent, error)
}
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
func NewRegistry ¶
func NewRegistry() *Registry
func (*Registry) ListModels ¶
func (*Registry) RefreshModels ¶ added in v0.1.3
func (r *Registry) RefreshModels()
RefreshModels clears cached model lists for all providers that support it, forcing re-fetch on next Models() call.
func (*Registry) RegisterCustomModel ¶
func (*Registry) ResolveProvider ¶
func (*Registry) UnregisterCustomModel ¶
type StreamEvent ¶
type StreamEvent struct {
Type StreamEventType `json:"type"`
Text string `json:"text,omitempty"`
ToolCallID string `json:"toolCallId,omitempty"`
ToolName string `json:"toolName,omitempty"`
ToolInput json.RawMessage `json:"toolInput,omitempty"`
FinishReason *string `json:"finishReason,omitempty"`
Usage *TokenUsage `json:"usage,omitempty"`
Error string `json:"error,omitempty"`
}
type StreamEventType ¶
type StreamEventType string
const ( EventTextDelta StreamEventType = "text-delta" EventToolCallStart StreamEventType = "tool-call-start" EventToolCallDelta StreamEventType = "tool-call-delta" EventToolCallEnd StreamEventType = "tool-call-end" EventReasoning StreamEventType = "reasoning" EventFinish StreamEventType = "finish" EventUsage StreamEventType = "usage" EventError StreamEventType = "error" )
type StreamRequest ¶
type StreamRequest struct {
Model string `json:"model"`
System []string `json:"system"`
Messages []ModelMessage `json:"messages"`
Tools []ToolDefinition `json:"tools"`
Temperature float64 `json:"temperature,omitempty"`
MaxTokens int `json:"maxTokens,omitempty"`
Abort context.Context `json:"-"`
}
type TokenUsage ¶
type TokenUsage struct {
InputTokens int `json:"inputTokens,omitempty"`
OutputTokens int `json:"outputTokens,omitempty"`
ReasoningTokens int `json:"reasoningTokens,omitempty"`
CacheReadTokens int `json:"cacheReadTokens,omitempty"`
CacheWriteTokens int `json:"cacheWriteTokens,omitempty"`
}
TokenUsage carries per-message token accounting from a provider. Fields are non-zero where the provider reports them.
type ToolDefinition ¶
type ToolDefinition struct {
Name string `json:"name"`
Description string `json:"description"`
Parameters json.RawMessage `json:"parameters"`
}