Documentation
¶
Index ¶
- Variables
- func TokenCost(resp *ChatResponse, reg *pricing.Registry) (float64, string)
- type AgentStats
- type BalanceProvider
- type ChatRequest
- type ChatResponse
- type CostTracker
- func (ct *CostTracker) AgentCosts() []AgentStats
- func (ct *CostTracker) AllSessionCosts() map[string]float64
- func (ct *CostTracker) AllSessionStats() map[string]SessionStats
- func (ct *CostTracker) DefaultLimits() SessionLimits
- func (ct *CostTracker) ExceedsBudget(sessionID string) bool
- func (ct *CostTracker) ExceedsHardLimit(sessionID string) bool
- func (ct *CostTracker) ExceedsSoftLimit(sessionID string) bool
- func (ct *CostTracker) GlobalCost() float64
- func (ct *CostTracker) MaxBudgetPerSession() float64
- func (ct *CostTracker) Record(sessionID string, cost float64) bool
- func (ct *CostTracker) RecordWithTokens(sessionID string, cost float64, inputTokens, outputTokens int, ...) bool
- func (ct *CostTracker) SessionCost(sessionID string) float64
- func (ct *CostTracker) SetAgentLimits(agent string, limits SessionLimits)
- type FallbackRule
- type FunctionCall
- type FunctionDef
- type LLMError
- type Message
- type ModelLister
- type OAIPromptTokenDetail
- type OAIStreamResult
- type OAIStreamUsage
- type Provider
- type ProviderMetadata
- type Router
- func (r *Router) Complete(ctx context.Context, sessionID string, messages []Message) (*ChatResponse, error)
- func (r *Router) CompleteStream(ctx context.Context, sessionID string, messages []Message, ...) (*ChatResponse, error)
- func (r *Router) CostTracker() *CostTracker
- func (r *Router) DefaultModel() string
- func (r *Router) HealthCheck(ctx context.Context) error
- func (r *Router) ListModels(ctx context.Context) []string
- func (r *Router) RegisterProvider(p Provider)
- func (r *Router) SetDefaultModel(model string)
- func (r *Router) SetFallbacks(rules []FallbackRule)
- func (r *Router) SetPricing(reg *pricing.Registry)
- func (r *Router) SetTools(source func() []ToolDef)
- type SSEEvent
- type SSEScanner
- type SessionLimits
- type SessionStats
- type StreamCallback
- type StreamChunk
- type StreamingProvider
- type TokenUsage
- type ToolCall
- type ToolDef
Constants ¶
This section is empty.
Variables ¶
var ErrHardLimitExceeded = errors.New("session hard cost limit exceeded")
ErrHardLimitExceeded is returned when the session's hard cost limit is reached.
var ErrSoftLimitExceeded = errors.New("session soft cost limit exceeded")
ErrSoftLimitExceeded is returned when the session's soft cost limit is reached.
Functions ¶
func TokenCost ¶ added in v0.15.0
func TokenCost(resp *ChatResponse, reg *pricing.Registry) (float64, string)
TokenCost returns the USD cost for a chat response using the pricing registry. Priority: provider-reported cost > registry lookup > fallback rate > $0. Also returns a pricing source string ("provider"/"registry"/"fallback"/"unknown").
Types ¶
type AgentStats ¶ added in v0.12.0
type AgentStats struct {
Agent string `json:"agent"`
Cost float64 `json:"cost"`
InputTokens int `json:"input_tokens"`
OutputTokens int `json:"output_tokens"`
Messages int `json:"messages"`
Sessions int `json:"sessions"`
}
AgentStats holds aggregated per-agent cost and token data.
type BalanceProvider ¶
BalanceProvider is an optional interface implemented by providers that can report their remaining credit balance. Returns -1 if the balance is unlimited.
type ChatRequest ¶
type ChatResponse ¶
type CostTracker ¶
type CostTracker struct {
// contains filtered or unexported fields
}
CostTracker tracks token usage and estimated costs per session and globally.
func NewCostTracker ¶
func NewCostTracker(defaults SessionLimits, agentOverrides map[string]SessionLimits) *CostTracker
NewCostTracker creates a CostTracker with default limits and optional per-agent overrides.
func (*CostTracker) AgentCosts ¶ added in v0.12.0
func (ct *CostTracker) AgentCosts() []AgentStats
AgentCosts returns per-agent aggregated stats. Agent name is extracted from session IDs which have the format "agentname:adapter:externalid".
func (*CostTracker) AllSessionCosts ¶
func (ct *CostTracker) AllSessionCosts() map[string]float64
AllSessionCosts returns a copy of all session costs.
func (*CostTracker) AllSessionStats ¶ added in v0.12.0
func (ct *CostTracker) AllSessionStats() map[string]SessionStats
AllSessionStats returns a copy of all session stats.
func (*CostTracker) DefaultLimits ¶ added in v0.16.5
func (ct *CostTracker) DefaultLimits() SessionLimits
DefaultLimits returns the default cost limits.
func (*CostTracker) ExceedsBudget ¶
func (ct *CostTracker) ExceedsBudget(sessionID string) bool
ExceedsBudget checks if a session has exceeded its hard budget. Deprecated: use ExceedsHardLimit.
func (*CostTracker) ExceedsHardLimit ¶ added in v0.16.5
func (ct *CostTracker) ExceedsHardLimit(sessionID string) bool
ExceedsHardLimit checks if a session has exceeded its hard cost limit. Returns false if the hard limit is disabled (zero).
func (*CostTracker) ExceedsSoftLimit ¶ added in v0.16.5
func (ct *CostTracker) ExceedsSoftLimit(sessionID string) bool
ExceedsSoftLimit checks if a session has exceeded its soft cost limit. Returns false if the soft limit is disabled (zero).
func (*CostTracker) GlobalCost ¶
func (ct *CostTracker) GlobalCost() float64
GlobalCost returns the total cost across all sessions.
func (*CostTracker) MaxBudgetPerSession ¶
func (ct *CostTracker) MaxBudgetPerSession() float64
MaxBudgetPerSession returns the default hard cost cap. Deprecated: use DefaultLimits().Hard.
func (*CostTracker) Record ¶
func (ct *CostTracker) Record(sessionID string, cost float64) bool
Record adds cost for a session. Returns true if within hard budget.
func (*CostTracker) RecordWithTokens ¶ added in v0.12.0
func (ct *CostTracker) RecordWithTokens(sessionID string, cost float64, inputTokens, outputTokens int, pricingSource ...string) bool
RecordWithTokens adds cost and token usage for a session. Returns true if within budget. The optional pricingSource parameter records which pricing method was used.
func (*CostTracker) SessionCost ¶
func (ct *CostTracker) SessionCost(sessionID string) float64
SessionCost returns the total cost for a session.
func (*CostTracker) SetAgentLimits ¶ added in v0.16.5
func (ct *CostTracker) SetAgentLimits(agent string, limits SessionLimits)
SetAgentLimits sets per-agent cost limit overrides.
type FallbackRule ¶
type FallbackRule struct {
Trigger string // "error" | "rate_limit" | "low_funds"
Action string // "switch_provider" | "switch_model" | "wait_and_retry"
Provider string // provider name — for switch_provider
Model string // model name — for switch_model; optional for switch_provider
Threshold float64 // remaining credit threshold in USD — for low_funds
MaxRetries int // number of retry attempts — for wait_and_retry
Backoff string // "exponential" | "constant" — for wait_and_retry
}
FallbackRule describes a single fallback step the router will attempt.
type FunctionCall ¶
FunctionCall is the function name and JSON-encoded arguments within a ToolCall.
type FunctionDef ¶
type FunctionDef struct {
Name string `json:"name"`
Description string `json:"description"`
Parameters map[string]any `json:"parameters"` // JSON Schema object
}
FunctionDef describes the function signature within a ToolDef.
type LLMError ¶
LLMError is returned by providers for API-level failures. Use errors.As to unwrap from wrapped errors.
type ModelLister ¶ added in v0.15.1
ModelLister is an optional interface implemented by providers that can enumerate their available models.
type OAIPromptTokenDetail ¶ added in v0.16.9
type OAIPromptTokenDetail struct {
CachedTokens int `json:"cached_tokens"`
}
OAIPromptTokenDetail holds cached token info from the usage block.
type OAIStreamResult ¶ added in v0.16.9
type OAIStreamResult struct {
Content string
ToolCalls []ToolCall
Model string
FinishReason string
Usage *OAIStreamUsage
// ReasoningContent captures reasoning_content deltas (OpenRouter).
ReasoningContent string
}
OAIStreamResult holds the accumulated data from an OpenAI-compatible streaming response. Providers call ReadOAIStream to parse the SSE body and then convert this into an llm.ChatResponse.
func ReadOAIStream ¶ added in v0.16.9
func ReadOAIStream(body io.Reader, onStream StreamCallback) (*OAIStreamResult, error)
ReadOAIStream reads an OpenAI-compatible SSE stream body and calls onStream for each content/reasoning delta. It accumulates tool calls and usage and returns the full result. onStream may be nil.
type OAIStreamUsage ¶ added in v0.16.9
type OAIStreamUsage struct {
PromptTokens int `json:"prompt_tokens"`
CompletionTokens int `json:"completion_tokens"`
TotalTokens int `json:"total_tokens"`
PromptTokensDetails *OAIPromptTokenDetail `json:"prompt_tokens_details,omitempty"`
Cost float64 `json:"cost"` // OpenRouter reports cost here
}
OAIStreamUsage mirrors the usage block in the final SSE chunk.
type Provider ¶
type Provider interface {
ChatCompletion(ctx context.Context, req ChatRequest) (*ChatResponse, error)
Name() string
HealthCheck(ctx context.Context) error
}
Provider defines the interface for LLM backends.
type ProviderMetadata ¶
type Router ¶
type Router struct {
// contains filtered or unexported fields
}
Router selects the appropriate LLM provider for a request.
func NewRouter ¶
func NewRouter(defaultProvider, defaultModel string, costTracker *CostTracker) *Router
func (*Router) CompleteStream ¶ added in v0.16.9
func (r *Router) CompleteStream(ctx context.Context, sessionID string, messages []Message, onStream StreamCallback) (*ChatResponse, error)
CompleteStream is like Complete but enables real-time streaming of content chunks via the onStream callback. If the active provider does not support streaming, it falls back to the non-streaming path transparently.
func (*Router) CostTracker ¶ added in v0.16.5
func (r *Router) CostTracker() *CostTracker
CostTracker returns the router's cost tracker for soft-limit checks.
func (*Router) DefaultModel ¶
DefaultModel returns the router's default model name.
func (*Router) ListModels ¶ added in v0.15.1
ListModels queries all registered providers that implement ModelLister and returns a de-duplicated sorted list of available model names.
func (*Router) RegisterProvider ¶
func (*Router) SetDefaultModel ¶ added in v0.11.0
SetDefaultModel changes the router's default model for subsequent requests.
func (*Router) SetFallbacks ¶
func (r *Router) SetFallbacks(rules []FallbackRule)
SetFallbacks configures the ordered list of fallback rules.
func (*Router) SetPricing ¶ added in v0.15.1
SetPricing configures the model pricing registry used by TokenCost.
type SSEEvent ¶ added in v0.16.9
type SSEEvent struct {
Type string // the "event:" field (empty if not present)
Data string // the "data:" field payload
}
SSEEvent represents a single Server-Sent Event with an optional event type.
type SSEScanner ¶ added in v0.16.9
type SSEScanner struct {
// contains filtered or unexported fields
}
SSEScanner reads Server-Sent Events from an io.Reader. It yields one SSEEvent per event block, stopping when the reader is exhausted or a "data: [DONE]" sentinel is encountered.
func NewSSEScanner ¶ added in v0.16.9
func NewSSEScanner(r io.Reader) *SSEScanner
NewSSEScanner creates a scanner over the given reader.
func (*SSEScanner) Err ¶ added in v0.16.9
func (s *SSEScanner) Err() error
Err returns the first non-EOF error encountered by the scanner.
func (*SSEScanner) Event ¶ added in v0.16.9
func (s *SSEScanner) Event() SSEEvent
Event returns the most recently scanned SSE event.
func (*SSEScanner) Next ¶ added in v0.16.9
func (s *SSEScanner) Next() bool
Next advances to the next SSE event. Returns false when no more events are available (either EOF or [DONE] sentinel).
type SessionLimits ¶ added in v0.16.5
SessionLimits holds cost limit thresholds for a session. A zero value means the corresponding limit is disabled.
type SessionStats ¶ added in v0.12.0
type SessionStats struct {
Cost float64 `json:"cost"`
InputTokens int `json:"input_tokens"`
OutputTokens int `json:"output_tokens"`
Messages int `json:"messages"`
PricingSources map[string]int `json:"pricing_sources,omitempty"`
}
SessionStats holds per-session cost and token tracking.
type StreamCallback ¶ added in v0.16.9
type StreamCallback func(chunk StreamChunk)
StreamCallback is invoked for each chunk during a streaming LLM call. It is called synchronously from the provider's HTTP response reader.
type StreamChunk ¶ added in v0.16.9
type StreamChunk struct {
ContentDelta string // incremental text content
ThinkingDelta string // incremental thinking/reasoning content
}
StreamChunk carries a single incremental piece of a streaming response.
type StreamingProvider ¶ added in v0.16.9
StreamingProvider is an optional interface. Providers that implement it honour the OnStream callback field on ChatRequest.
type TokenUsage ¶
type ToolCall ¶
type ToolCall struct {
ID string `json:"id"`
Type string `json:"type"` // "function"
Function FunctionCall `json:"function"`
}
ToolCall represents a tool invocation requested by the LLM (OpenAI format).
type ToolDef ¶
type ToolDef struct {
Type string `json:"type"` // "function"
Function FunctionDef `json:"function"`
}
ToolDef describes a tool available for the LLM to call (OpenAI format).
Directories
¶
| Path | Synopsis |
|---|---|
|
Package anthropic implements the llm.Provider interface against the Anthropic Messages API (https://docs.anthropic.com/en/api/messages).
|
Package anthropic implements the llm.Provider interface against the Anthropic Messages API (https://docs.anthropic.com/en/api/messages). |