providers

package
v1.5.7 Latest Latest
Warning

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

Go to latest
Published: Feb 12, 2026 License: Apache-2.0 Imports: 17 Imported by: 0

Documentation

Index

Constants

View Source
const (
	FinishReasonStop     = "stop"
	FinishReasonLength   = "length"
	FinishReasonToolCall = "tool_calls"
	FinishReasonError    = "error"
	FinishReasonSafety   = "safety"
)

Variables

This section is empty.

Functions

func ConvertMessagesToOpenAI added in v1.5.1

func ConvertMessagesToOpenAI(messages []Message) []openaiMessage

ConvertMessagesToOpenAI converts generic Message into native OpenAI format (string content or parts) Used internally by OpenAI provider

func ConvertTools added in v1.5.1

func ConvertTools(tools []Tool) []openaiTool

ConvertTools converts generic Tool into OpenAI format; shared by all OpenAI-compatible providers

func GetDefaultURL added in v1.5.2

func GetDefaultURL(name string) string

GetDefaultURL returns the default base URL for a provider. Returns empty string if the provider is not registered.

func GetRetryAfter added in v1.5.3

func GetRetryAfter(err error) int

func IsAuthError added in v1.5.3

func IsAuthError(err error) bool

func IsBuiltinRegistered added in v1.5.2

func IsBuiltinRegistered(name string) bool

IsBuiltinRegistered checks if a provider is registered as a builtin.

func IsModelError added in v1.5.3

func IsModelError(err error) bool

func IsNetworkError added in v1.5.3

func IsNetworkError(err error) bool

func IsRateLimitError added in v1.5.3

func IsRateLimitError(err error) bool

func IsRetryableError added in v1.5.3

func IsRetryableError(err error) bool

func IsValidationError added in v1.5.3

func IsValidationError(err error) bool

func ListBuiltins added in v1.5.2

func ListBuiltins() []string

ListBuiltins returns a list of all registered builtin provider names.

func NormalizeFinishReason added in v1.5.7

func NormalizeFinishReason(raw string) string

NormalizeFinishReason maps provider-specific stop reasons to canonical constants. Unknown values pass through unchanged.

func RegisterBuiltin added in v1.5.2

func RegisterBuiltin(name string, factory BuiltinFactory, defaultURL string)

RegisterBuiltin registers a builtin provider with its factory and default URL. This should be called in each provider's init() function.

func WrapError added in v1.5.3

func WrapError(err error, provider string) error

WrapError wraps any error into LiteLLMError (and fills Provider if already wrapped).

Types

type AnthropicProvider

type AnthropicProvider struct {
	*BaseProvider
}

AnthropicProvider implements Anthropic Claude API integration

func NewAnthropic

func NewAnthropic(config ProviderConfig) *AnthropicProvider

NewAnthropic creates a new Anthropic provider

func (*AnthropicProvider) Chat

func (p *AnthropicProvider) Chat(ctx context.Context, req *Request) (*Response, error)

func (*AnthropicProvider) ListModels added in v1.5.5

func (p *AnthropicProvider) ListModels(ctx context.Context) ([]ModelInfo, error)

ListModels returns available models for Anthropic.

func (*AnthropicProvider) Stream

func (p *AnthropicProvider) Stream(ctx context.Context, req *Request) (StreamReader, error)

type BaseProvider

type BaseProvider struct {
	// contains filtered or unexported fields
}

BaseProvider provides common functionality for all providers

func NewBaseProvider

func NewBaseProvider(name string, config ProviderConfig) *BaseProvider

NewBaseProvider creates a new base provider with resilience

func (*BaseProvider) Config

func (p *BaseProvider) Config() ProviderConfig

func (*BaseProvider) HTTPClient

func (p *BaseProvider) HTTPClient() HTTPDoer

func (*BaseProvider) Name

func (p *BaseProvider) Name() string

func (*BaseProvider) ResilienceConfig

func (p *BaseProvider) ResilienceConfig() ResilienceConfig

func (*BaseProvider) Validate

func (p *BaseProvider) Validate() error

func (*BaseProvider) ValidateExtra added in v1.5.4

func (p *BaseProvider) ValidateExtra(extra map[string]any, allowedKeys []string) error

ValidateExtra validates request-level extra parameters for a provider.

func (*BaseProvider) ValidateRequest

func (p *BaseProvider) ValidateRequest(req *Request) error

ValidateRequest validates common request parameters This should be called by all provider implementations before processing requests

type BedrockProvider added in v1.5.2

type BedrockProvider struct {
	*BaseProvider
	// contains filtered or unexported fields
}

func NewBedrock added in v1.5.2

func NewBedrock(config ProviderConfig) *BedrockProvider

func (*BedrockProvider) Chat added in v1.5.2

func (p *BedrockProvider) Chat(ctx context.Context, req *Request) (*Response, error)

func (*BedrockProvider) ListModels added in v1.5.5

func (p *BedrockProvider) ListModels(ctx context.Context) ([]ModelInfo, error)

ListModels returns available foundation models for Bedrock.

func (*BedrockProvider) Stream added in v1.5.2

func (p *BedrockProvider) Stream(ctx context.Context, req *Request) (StreamReader, error)

func (*BedrockProvider) Validate added in v1.5.2

func (p *BedrockProvider) Validate() error

type BuiltinFactory added in v1.5.2

type BuiltinFactory func(ProviderConfig) Provider

BuiltinFactory is a function that creates a Provider instance

func GetBuiltin added in v1.5.2

func GetBuiltin(name string) (BuiltinFactory, bool)

GetBuiltin returns the factory function for a builtin provider. Returns nil and false if the provider is not registered.

type CacheControl

type CacheControl struct {
	Type string `json:"type"`          // "ephemeral" or "persistent"
	TTL  *int   `json:"ttl,omitempty"` // TTL in seconds (optional)
}

CacheControl defines prompt caching behavior for providers

type DeepSeekProvider

type DeepSeekProvider struct {
	*BaseProvider
}

DeepSeekProvider implements DeepSeek API integration

func NewDeepSeek

func NewDeepSeek(config ProviderConfig) *DeepSeekProvider

NewDeepSeek creates a new DeepSeek provider

func (*DeepSeekProvider) Chat

func (p *DeepSeekProvider) Chat(ctx context.Context, req *Request) (*Response, error)

func (*DeepSeekProvider) ListModels added in v1.5.5

func (p *DeepSeekProvider) ListModels(ctx context.Context) ([]ModelInfo, error)

ListModels returns available models for DeepSeek.

func (*DeepSeekProvider) Stream

func (p *DeepSeekProvider) Stream(ctx context.Context, req *Request) (StreamReader, error)

type ErrorType added in v1.5.3

type ErrorType string

ErrorType categorizes errors.

const (
	ErrorTypeAuth       ErrorType = "auth"       // Auth/authorization errors
	ErrorTypeRateLimit  ErrorType = "rate_limit" // Rate limit errors
	ErrorTypeNetwork    ErrorType = "network"    // Network connectivity errors
	ErrorTypeValidation ErrorType = "validation" // Request validation errors
	ErrorTypeProvider   ErrorType = "provider"   // Upstream provider errors
	ErrorTypeTimeout    ErrorType = "timeout"    // Timeout errors
	ErrorTypeQuota      ErrorType = "quota"      // Quota/billing errors
	ErrorTypeModel      ErrorType = "model"      // Model not found/unsupported errors
	ErrorTypeInternal   ErrorType = "internal"   // Internal library errors
)

type FunctionCall

type FunctionCall struct {
	Name      string `json:"name"`
	Arguments string `json:"arguments"`
}

type FunctionDef

type FunctionDef struct {
	Name        string `json:"name"`
	Description string `json:"description"`
	Parameters  any    `json:"parameters"`
}

type GLMProvider

type GLMProvider struct {
	*BaseProvider
}

GLMProvider implements GLM/ZhiPu AI API integration

func NewGLM

func NewGLM(config ProviderConfig) *GLMProvider

NewGLM creates a new GLM provider

func (*GLMProvider) Chat

func (p *GLMProvider) Chat(ctx context.Context, req *Request) (*Response, error)

func (*GLMProvider) Stream

func (p *GLMProvider) Stream(ctx context.Context, req *Request) (StreamReader, error)

type GeminiProvider

type GeminiProvider struct {
	*BaseProvider
}

GeminiProvider implements Google Gemini API integration

func NewGemini

func NewGemini(config ProviderConfig) *GeminiProvider

NewGemini creates a new Gemini provider

func (*GeminiProvider) Chat

func (p *GeminiProvider) Chat(ctx context.Context, req *Request) (*Response, error)

func (*GeminiProvider) ListModels added in v1.5.5

func (p *GeminiProvider) ListModels(ctx context.Context) ([]ModelInfo, error)

ListModels returns available models for Gemini.

func (*GeminiProvider) Stream

func (p *GeminiProvider) Stream(ctx context.Context, req *Request) (StreamReader, error)

type HTTPDoer

type HTTPDoer interface {
	Do(req *http.Request) (*http.Response, error)
}

type JSONSchema

type JSONSchema struct {
	Name        string `json:"name"`
	Description string `json:"description,omitempty"`
	Schema      any    `json:"schema"`
	Strict      *bool  `json:"strict,omitempty"`
}

type LiteLLMError added in v1.5.3

type LiteLLMError struct {
	Type     ErrorType `json:"type"`
	Code     string    `json:"code,omitempty"`
	Message  string    `json:"message"`
	Provider string    `json:"provider,omitempty"`
	Model    string    `json:"model,omitempty"`
	Cause    error     `json:"-"` // Original error, not serialized.

	// HTTP details (if applicable).
	StatusCode int               `json:"status_code,omitempty"`
	Headers    map[string]string `json:"headers,omitempty"`

	// Retry hints.
	Retryable  bool `json:"retryable"`
	RetryAfter int  `json:"retry_after,omitempty"` // seconds
}

LiteLLMError is a structured error with categorization and retry hints.

func NewAuthError added in v1.5.3

func NewAuthError(provider, message string) *LiteLLMError

func NewError added in v1.5.3

func NewError(errorType ErrorType, message string) *LiteLLMError

func NewErrorWithCause added in v1.5.3

func NewErrorWithCause(errorType ErrorType, message string, cause error) *LiteLLMError

func NewHTTPError added in v1.5.3

func NewHTTPError(provider string, statusCode int, message string) *LiteLLMError

func NewModelError added in v1.5.3

func NewModelError(provider, model, message string) *LiteLLMError

func NewNetworkError added in v1.5.3

func NewNetworkError(provider, message string, cause error) *LiteLLMError

func NewProviderError added in v1.5.3

func NewProviderError(provider string, errorType ErrorType, message string) *LiteLLMError

func NewRateLimitError added in v1.5.3

func NewRateLimitError(provider, message string, retryAfter int) *LiteLLMError

func NewTimeoutError added in v1.5.3

func NewTimeoutError(provider, message string) *LiteLLMError

func NewValidationError added in v1.5.3

func NewValidationError(provider, message string) *LiteLLMError

func (*LiteLLMError) Error added in v1.5.3

func (e *LiteLLMError) Error() string

func (*LiteLLMError) Is added in v1.5.3

func (e *LiteLLMError) Is(target error) bool

func (*LiteLLMError) IsRetryable added in v1.5.3

func (e *LiteLLMError) IsRetryable() bool

func (*LiteLLMError) Unwrap added in v1.5.3

func (e *LiteLLMError) Unwrap() error

type Message

type Message struct {
	Role         string           `json:"role"`
	Content      string           `json:"content"`
	Contents     []MessageContent `json:"contents,omitempty"`
	ToolCalls    []ToolCall       `json:"tool_calls,omitempty"`
	ToolCallID   string           `json:"tool_call_id,omitempty"`
	CacheControl *CacheControl    `json:"cache_control,omitempty"`
}

type MessageContent added in v1.5.1

type MessageContent struct {
	Type        string           `json:"type"`
	Text        string           `json:"text,omitempty"`
	ImageURL    *MessageImageURL `json:"image_url,omitempty"`
	Annotations []map[string]any `json:"annotations,omitempty"`
	Logprobs    []map[string]any `json:"logprobs,omitempty"`
}

type MessageImageURL added in v1.5.1

type MessageImageURL struct {
	URL    string `json:"url"`
	Detail string `json:"detail,omitempty"` // "auto", "low", or "high"
}

type ModelInfo

type ModelInfo struct {
	ID               string `json:"id"`
	Name             string `json:"name,omitempty"`
	Provider         string `json:"provider,omitempty"`
	Description      string `json:"description,omitempty"`
	ContextLength    int    `json:"context_length,omitempty"`
	InputTokenLimit  int    `json:"input_token_limit,omitempty"`
	OutputTokenLimit int    `json:"output_token_limit,omitempty"`
	Created          int64  `json:"created,omitempty"`
	OwnedBy          string `json:"owned_by,omitempty"`

	// Capability flags (best-effort, may be zero-valued for unknown models)
	SupportsTools    bool `json:"supports_tools,omitempty"`
	SupportsVision   bool `json:"supports_vision,omitempty"`
	SupportsThinking bool `json:"supports_thinking,omitempty"`
}

ModelInfo provides a minimal, provider-agnostic model descriptor. Fields are best-effort and may be empty if a provider does not supply them.

type ModelLister added in v1.5.5

type ModelLister interface {
	ListModels(ctx context.Context) ([]ModelInfo, error)
}

ModelLister is an optional interface implemented by providers that support listing models.

type OpenAICompatMessage added in v1.5.1

type OpenAICompatMessage struct {
	Role             string           `json:"role"`
	Content          interface{}      `json:"content,omitempty"` // string or array (needed by OpenRouter)
	ToolCalls        []openaiToolCall `json:"tool_calls,omitempty"`
	ToolCallID       string           `json:"tool_call_id,omitempty"`
	ReasoningContent string           `json:"reasoning_content,omitempty"` // used by GLM/Qwen
}

OpenAICompatMessage is a generic OpenAI-compatible message format Used by DeepSeek/GLM/Qwen etc.; Content stays interface{} to allow flexible formats

func ConvertMessages added in v1.5.1

func ConvertMessages(messages []Message) []OpenAICompatMessage

ConvertMessages converts generic Message into OpenAI-compatible format (Content as interface{}) For DeepSeek/GLM/Qwen/OpenRouter etc.

type OpenAIProvider

type OpenAIProvider struct {
	*BaseProvider
}

OpenAIProvider implements OpenAI API integration

func NewOpenAI

func NewOpenAI(config ProviderConfig) *OpenAIProvider

NewOpenAI creates a new OpenAI provider

func (*OpenAIProvider) Chat

func (p *OpenAIProvider) Chat(ctx context.Context, req *Request) (*Response, error)

func (*OpenAIProvider) ListModels added in v1.5.5

func (p *OpenAIProvider) ListModels(ctx context.Context) ([]ModelInfo, error)

ListModels returns available models for OpenAI.

func (*OpenAIProvider) Responses added in v1.5.4

func (p *OpenAIProvider) Responses(ctx context.Context, req *OpenAIResponsesRequest) (*Response, error)

Responses executes a Responses API request for OpenAI.

func (*OpenAIProvider) ResponsesStream added in v1.5.4

func (p *OpenAIProvider) ResponsesStream(ctx context.Context, req *OpenAIResponsesRequest) (StreamReader, error)

ResponsesStream executes a streaming Responses API request for OpenAI.

func (*OpenAIProvider) Stream

func (p *OpenAIProvider) Stream(ctx context.Context, req *Request) (StreamReader, error)

type OpenAIResponsesRequest added in v1.5.4

type OpenAIResponsesRequest struct {
	Model string `json:"model"`

	// Use standard messages to build input items for Responses API.
	Messages []Message `json:"messages"`

	// Output configuration
	MaxOutputTokens *int `json:"max_output_tokens,omitempty"`

	// Sampling parameters
	Temperature *float64 `json:"temperature,omitempty"`
	TopP        *float64 `json:"top_p,omitempty"`

	// Text format configuration (replaces response_format in Responses API)
	ResponseFormat *ResponseFormat `json:"response_format,omitempty"`

	// Tool configuration
	Tools      []Tool `json:"tools,omitempty"`
	ToolChoice any    `json:"tool_choice,omitempty"`

	// Reasoning configuration (for gpt-5 and o-series models)
	ReasoningEffort  string `json:"reasoning_effort,omitempty"`  // none, low, medium, high
	ReasoningSummary string `json:"reasoning_summary,omitempty"` // auto, concise, detailed

	// Unified thinking control (optional). If set, it maps to reasoning fields.
	Thinking *ThinkingConfig `json:"thinking,omitempty"`
}

OpenAIResponsesRequest is a dedicated request type for OpenAI Responses API. It avoids polluting the generic Request with OpenAI-only fields.

type OpenRouterProvider

type OpenRouterProvider struct {
	*BaseProvider
}

OpenRouterProvider implements OpenRouter API integration

func NewOpenRouter

func NewOpenRouter(config ProviderConfig) *OpenRouterProvider

NewOpenRouter creates a new OpenRouter provider

func (*OpenRouterProvider) Chat

func (p *OpenRouterProvider) Chat(ctx context.Context, req *Request) (*Response, error)

func (*OpenRouterProvider) ListModels added in v1.5.5

func (p *OpenRouterProvider) ListModels(ctx context.Context) ([]ModelInfo, error)

ListModels returns available models for OpenRouter.

func (*OpenRouterProvider) Stream

func (p *OpenRouterProvider) Stream(ctx context.Context, req *Request) (StreamReader, error)

type Provider

type Provider interface {
	Name() string
	Validate() error
	Chat(ctx context.Context, req *Request) (*Response, error)
	Stream(ctx context.Context, req *Request) (StreamReader, error)
}

Provider interface

type ProviderConfig

type ProviderConfig struct {
	APIKey     string           `json:"api_key"`
	BaseURL    string           `json:"base_url,omitempty"`
	Timeout    time.Duration    `json:"timeout,omitempty"`
	Extra      map[string]any   `json:"extra,omitempty"`
	Resilience ResilienceConfig `json:"resilience,omitempty"`
	HTTPClient HTTPDoer         `json:"-"`
}

ProviderConfig holds configuration for a provider

type QwenProvider

type QwenProvider struct {
	*BaseProvider
}

QwenProvider implements Qwen/DashScope API integration

func NewQwen

func NewQwen(config ProviderConfig) *QwenProvider

NewQwen creates a new Qwen provider

func (*QwenProvider) Chat

func (p *QwenProvider) Chat(ctx context.Context, req *Request) (*Response, error)

func (*QwenProvider) Stream

func (p *QwenProvider) Stream(ctx context.Context, req *Request) (StreamReader, error)

type ReasoningChunk

type ReasoningChunk struct {
	Summary string `json:"summary,omitempty"`
	Content string `json:"content,omitempty"`
	Done    bool   `json:"done,omitempty"`
}

type ReasoningData

type ReasoningData struct {
	Summary    string `json:"summary,omitempty"`
	Content    string `json:"content,omitempty"`
	TokensUsed int    `json:"tokens_used,omitempty"`
}

type Request

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"`
	Tools          []Tool          `json:"tools,omitempty"`
	ToolChoice     any             `json:"tool_choice,omitempty"`
	ResponseFormat *ResponseFormat `json:"response_format,omitempty"`
	Stop           []string        `json:"stop,omitempty"`
	Thinking       *ThinkingConfig `json:"thinking,omitempty"`

	// Provider-specific extensions
	Extra map[string]any `json:"extra,omitempty"`
}

type ResilienceConfig

type ResilienceConfig struct {
	MaxRetries     int           `json:"max_retries"`
	InitialDelay   time.Duration `json:"initial_delay"`
	MaxDelay       time.Duration `json:"max_delay"`
	Multiplier     float64       `json:"multiplier"`
	Jitter         bool          `json:"jitter"`
	RequestTimeout time.Duration `json:"request_timeout"`
	ConnectTimeout time.Duration `json:"connect_timeout"`
}

ResilienceConfig holds network resilience configuration for providers

func DefaultResilienceConfig

func DefaultResilienceConfig() ResilienceConfig

DefaultResilienceConfig returns default resilience configuration for providers

func ResolveResilienceConfig added in v1.5.6

func ResolveResilienceConfig(config ResilienceConfig) ResilienceConfig

ResolveResilienceConfig applies defaults when config is empty.

type Response

type Response struct {
	Content      string           `json:"content"`
	Contents     []MessageContent `json:"contents,omitempty"`
	ToolCalls    []ToolCall       `json:"tool_calls,omitempty"`
	Usage        Usage            `json:"usage"`
	Model        string           `json:"model"`
	Provider     string           `json:"provider"`
	FinishReason string           `json:"finish_reason,omitempty"`
	Reasoning    *ReasoningData   `json:"reasoning,omitempty"`
}

type ResponseFormat

type ResponseFormat struct {
	Type       string      `json:"type"`
	JSONSchema *JSONSchema `json:"json_schema,omitempty"`
}

type StreamChunk

type StreamChunk struct {
	Type          string          `json:"type"`
	Content       string          `json:"content,omitempty"`
	ContentIndex  *int            `json:"content_index,omitempty"`
	OutputIndex   *int            `json:"output_index,omitempty"`
	ItemID        string          `json:"item_id,omitempty"`
	ToolCallDelta *ToolCallDelta  `json:"tool_call_delta,omitempty"`
	FinishReason  string          `json:"finish_reason,omitempty"`
	Model         string          `json:"model,omitempty"`
	Provider      string          `json:"provider"`
	Done          bool            `json:"done"`
	Reasoning     *ReasoningChunk `json:"reasoning,omitempty"`
	Usage         *Usage          `json:"usage,omitempty"`
}

type StreamReader

type StreamReader interface {
	Next() (*StreamChunk, error)
	Close() error
}

type ThinkingConfig added in v1.5.4

type ThinkingConfig struct {
	Type         string `json:"type"`            // "enabled" or "disabled"
	Level        string `json:"level,omitempty"` // "low", "medium", "high" — provider translates to API-specific param
	BudgetTokens *int   `json:"budget_tokens,omitempty"`
}

type Tool

type Tool struct {
	Type     string      `json:"type"`
	Function FunctionDef `json:"function"`
}

type ToolCall

type ToolCall struct {
	ID       string       `json:"id"`
	Type     string       `json:"type"`
	Function FunctionCall `json:"function"`
}

type ToolCallDelta

type ToolCallDelta struct {
	Index          int    `json:"index"`
	ID             string `json:"id,omitempty"`
	Type           string `json:"type,omitempty"`
	FunctionName   string `json:"function_name,omitempty"`
	ArgumentsDelta string `json:"arguments_delta,omitempty"`
	OutputIndex    *int   `json:"output_index,omitempty"`
	ItemID         string `json:"item_id,omitempty"`
}

type Usage

type Usage struct {
	PromptTokens     int `json:"prompt_tokens"`
	CompletionTokens int `json:"completion_tokens"`
	TotalTokens      int `json:"total_tokens"`
	ReasoningTokens  int `json:"reasoning_tokens,omitempty"`

	// Cache-related token statistics
	CacheCreationInputTokens int `json:"cache_creation_input_tokens,omitempty"` // Tokens written to cache
	CacheReadInputTokens     int `json:"cache_read_input_tokens,omitempty"`     // Tokens read from cache
}

Jump to

Keyboard shortcuts

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