provider

package
v0.1.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 8, 2026 License: MIT Imports: 12 Imported by: 0

Documentation

Index

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 ContentPart struct {
	Type string `json:"type"`
	Text string `json:"text,omitempty"`
}

type ModelInfo

type ModelInfo struct {
	ID         string `json:"id"`
	Name       string `json:"name"`
	ProviderID string `json:"providerId"`
	Default    bool   `json:"default"`
}

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). Not safe to call concurrently with Models().

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) Get

func (r *Registry) Get(id string) Provider

func (*Registry) List

func (r *Registry) List() []string

func (*Registry) ListModels

func (r *Registry) ListModels() []ModelInfo

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) Register

func (r *Registry) Register(p Provider)

func (*Registry) RegisterCustomModel

func (r *Registry) RegisterCustomModel(modelID, providerID string)

func (*Registry) ResolveProvider

func (r *Registry) ResolveProvider(modelID string) Provider

func (*Registry) UnregisterCustomModel

func (r *Registry) UnregisterCustomModel(modelID string)

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"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL