Documentation
¶
Index ¶
- Constants
- Variables
- func AnthropicMessagesURL(base string) string
- func ApplyChatReasoning(cfg *config.Root, p *openai.ChatCompletionNewParams, forceDisable bool)
- func ApplyMaxResponseTokens(cfg *config.Root, p *openai.ChatCompletionNewParams)
- func ApplyProviderSimpleParams(proto Protocol, cfg *config.Root, openaiParams *openai.ChatCompletionNewParams, ...)
- func ApplyProviderTurnParams(proto Protocol, cfg *config.Root, openaiParams *openai.ChatCompletionNewParams, ...)
- func ApplyReasoningDisable(p *openai.ChatCompletionNewParams)
- func ApplySimpleReasoning(cfg *config.Root, p *openai.ChatCompletionNewParams, forceDisable bool)
- func BackoffDelay(policy config.APIResiliencePolicy, attempt int, retryAfter time.Duration, ...) time.Duration
- func BuildUserContentParts(content string, imageFiles map[int]string) []openai.ChatCompletionContentPartUnionParam
- func HostKeyFromBaseURL(baseURL string) string
- func ImagePlaceholder(seq int) string
- func JumpLeftOverImgTag(line []rune, pos int) int
- func JumpRightOverImgTag(line []rune, pos int) int
- func LastAssistantIndex(msgs []chatstore.Message) int
- func MessageForAPI(m chatstore.Message, includeReasoning bool) chatstore.Message
- func MessageParams(system string, msgs []chatstore.Message, imageFiles map[int]string) []openai.ChatCompletionMessageParamUnion
- func MessagesForAPI(msgs []chatstore.Message) []chatstore.Message
- func ModelID(s string) shared.ChatModel
- func NewResilientHTTPClient(policy config.APIResiliencePolicy) *http.Client
- func OpenAIClientFromBackend(b CompletionBackend) (openai.Client, bool)
- func PopulateAssistantTurnUsage(dst *chatstore.Message, system string, msgsPrior []chatstore.Message, ...)
- func PromptDisplaySplit(system string, msgs []chatstore.Message, apiPromptTokens int64) (contextTok int64, lastUserTok int64)
- func RetryMessage(attempt, max int, err error, wait time.Duration) string
- func UsagePromptParts(system string, msgs []chatstore.Message, promptTokens int64, ...) (contextTok int64, lastUserTok int64, contextEstimated bool)
- func UsageTokensDisplayParts(system string, msgs []chatstore.Message, u UsageStats, turnCount int) (contextTok, lastUserTok int64, contextEstimated bool, ...)
- func UserFacingAPIError(err error) string
- type AnthropicAuth
- type AnthropicAuthKind
- type AnthropicBackend
- func (b *AnthropicBackend) CompleteText(ctx context.Context, req SimpleCompletionRequest) (string, error)
- func (b *AnthropicBackend) ListModels(ctx context.Context) ([]string, error)
- func (b *AnthropicBackend) Protocol() Protocol
- func (b *AnthropicBackend) StreamText(ctx context.Context, req SimpleCompletionRequest, contentOut io.Writer, ...) (string, UsageStats, error)
- func (b *AnthropicBackend) StreamTurn(ctx context.Context, req TurnRequest, contentOut io.Writer, opts StreamOpts) (AssistantTurnResult, error)
- type AnthropicUsagePayload
- type AssistantToolCall
- type AssistantTurnResult
- type CircuitRegistry
- type CompletionBackend
- type ErrorClass
- type OpenAIBackend
- func (b *OpenAIBackend) CompleteText(ctx context.Context, req SimpleCompletionRequest) (string, error)
- func (b *OpenAIBackend) ListModels(ctx context.Context) ([]string, error)
- func (b *OpenAIBackend) Protocol() Protocol
- func (b *OpenAIBackend) StreamText(ctx context.Context, req SimpleCompletionRequest, contentOut io.Writer, ...) (string, UsageStats, error)
- func (b *OpenAIBackend) StreamTurn(ctx context.Context, req TurnRequest, contentOut io.Writer, opts StreamOpts) (AssistantTurnResult, error)
- type Protocol
- type ProviderHTTPError
- type ResilientBackend
- func (b *ResilientBackend) CompleteText(ctx context.Context, req SimpleCompletionRequest) (string, error)
- func (b *ResilientBackend) ListModels(ctx context.Context) ([]string, error)
- func (b *ResilientBackend) Protocol() Protocol
- func (b *ResilientBackend) StreamText(ctx context.Context, req SimpleCompletionRequest, contentOut io.Writer, ...) (string, UsageStats, error)
- func (b *ResilientBackend) StreamTurn(ctx context.Context, req TurnRequest, contentOut io.Writer, opts StreamOpts) (AssistantTurnResult, error)
- type SimpleCompletionRequest
- type StreamOpts
- type ToolDef
- type TurnRequest
- type UsageStats
Constants ¶
const AnthropicAPIVersion = "2023-06-01"
const AnthropicOAuthBeta = "oauth-2025-04-20"
Variables ¶
var ErrCircuitOpen = errors.New("provider temporarily unavailable")
var ErrStreamAccumulatorRejected = errors.New("chat completion stream accumulator rejected chunk")
Functions ¶
func AnthropicMessagesURL ¶
func ApplyChatReasoning ¶
func ApplyChatReasoning(cfg *config.Root, p *openai.ChatCompletionNewParams, forceDisable bool)
func ApplyMaxResponseTokens ¶
func ApplyMaxResponseTokens(cfg *config.Root, p *openai.ChatCompletionNewParams)
func ApplyProviderTurnParams ¶
func ApplyReasoningDisable ¶
func ApplyReasoningDisable(p *openai.ChatCompletionNewParams)
func ApplySimpleReasoning ¶
func ApplySimpleReasoning(cfg *config.Root, p *openai.ChatCompletionNewParams, forceDisable bool)
func BackoffDelay ¶
func BuildUserContentParts ¶
func BuildUserContentParts(content string, imageFiles map[int]string) []openai.ChatCompletionContentPartUnionParam
func HostKeyFromBaseURL ¶
func ImagePlaceholder ¶
ImagePlaceholder returns the placeholder string for a given image sequence number.
func JumpLeftOverImgTag ¶
JumpLeftOverImgTag treats an [img-<n>] tag as a single atomic unit: if the cursor lies anywhere inside the tag (start < pos <= end), it jumps to start (before the tag). Spaces around the tag are never considered part of the placeholder.
func JumpRightOverImgTag ¶
JumpRightOverImgTag treats an [img-<n>] tag as a single atomic unit: if the cursor lies anywhere inside the tag (start <= pos < end), it jumps to end (after the tag). Spaces around the tag are never considered part of the placeholder.
func LastAssistantIndex ¶
func MessageForAPI ¶
func MessageParams ¶
func MessageParams(system string, msgs []chatstore.Message, imageFiles map[int]string) []openai.ChatCompletionMessageParamUnion
MessageParams builds OpenAI API message params from chatstore messages. If imageFiles is non-nil and contains entries for [img-<n>] placeholders found in user messages, those placeholders are replaced with image content parts.
func NewResilientHTTPClient ¶
func NewResilientHTTPClient(policy config.APIResiliencePolicy) *http.Client
func OpenAIClientFromBackend ¶
func OpenAIClientFromBackend(b CompletionBackend) (openai.Client, bool)
func PromptDisplaySplit ¶
func UsagePromptParts ¶
func UsageTokensDisplayParts ¶
func UserFacingAPIError ¶
Types ¶
type AnthropicAuth ¶
type AnthropicAuth struct {
Kind AnthropicAuthKind
Token string
}
func AnthropicAuthFromAPIKey ¶
func AnthropicAuthFromAPIKey(token string) AnthropicAuth
func AnthropicAuthFromOAuthBearer ¶
func AnthropicAuthFromOAuthBearer(token string) AnthropicAuth
func (AnthropicAuth) ApplyTo ¶
func (a AnthropicAuth) ApplyTo(req *http.Request)
type AnthropicAuthKind ¶
type AnthropicAuthKind int
const ( AnthropicAuthAPIKey AnthropicAuthKind = iota AnthropicAuthOAuthBearer )
type AnthropicBackend ¶
type AnthropicBackend struct {
// contains filtered or unexported fields
}
func NewAnthropicBackend ¶
func NewAnthropicBackend(baseURL string, auth AnthropicAuth) *AnthropicBackend
func NewAnthropicBackendWithClient ¶
func NewAnthropicBackendWithClient(baseURL string, auth AnthropicAuth, client *http.Client) *AnthropicBackend
func (*AnthropicBackend) CompleteText ¶
func (b *AnthropicBackend) CompleteText(ctx context.Context, req SimpleCompletionRequest) (string, error)
func (*AnthropicBackend) ListModels ¶
func (b *AnthropicBackend) ListModels(ctx context.Context) ([]string, error)
func (*AnthropicBackend) Protocol ¶
func (b *AnthropicBackend) Protocol() Protocol
func (*AnthropicBackend) StreamText ¶
func (b *AnthropicBackend) StreamText(ctx context.Context, req SimpleCompletionRequest, contentOut io.Writer, opts StreamOpts) (string, UsageStats, error)
func (*AnthropicBackend) StreamTurn ¶
func (b *AnthropicBackend) StreamTurn(ctx context.Context, req TurnRequest, contentOut io.Writer, opts StreamOpts) (AssistantTurnResult, error)
type AnthropicUsagePayload ¶
type AssistantToolCall ¶
type AssistantTurnResult ¶
type AssistantTurnResult struct {
Content string
ReasoningText string
ToolCalls []AssistantToolCall
Usage UsageStats
}
func StreamAssistantTurn ¶
func StreamAssistantTurn(ctx context.Context, client openai.Client, params openai.ChatCompletionNewParams, contentOut io.Writer, opts StreamOpts) (AssistantTurnResult, error)
type CircuitRegistry ¶
type CircuitRegistry struct {
// contains filtered or unexported fields
}
func NewCircuitRegistry ¶
func NewCircuitRegistry() *CircuitRegistry
func (*CircuitRegistry) IsOpen ¶
func (c *CircuitRegistry) IsOpen(hostKey string) bool
func (*CircuitRegistry) Reset ¶
func (c *CircuitRegistry) Reset(hostKey string)
type CompletionBackend ¶
type CompletionBackend interface {
Protocol() Protocol
StreamTurn(ctx context.Context, req TurnRequest, contentOut io.Writer, opts StreamOpts) (AssistantTurnResult, error)
StreamText(ctx context.Context, req SimpleCompletionRequest, contentOut io.Writer, opts StreamOpts) (string, UsageStats, error)
CompleteText(ctx context.Context, req SimpleCompletionRequest) (string, error)
ListModels(ctx context.Context) ([]string, error)
}
func NewCompletionBackend ¶
type ErrorClass ¶
type ErrorClass int
const ( ErrorPermanent ErrorClass = iota ErrorRetryable ErrorCircuitOpen )
func ClassifyAPIError ¶
type OpenAIBackend ¶
func (*OpenAIBackend) CompleteText ¶
func (b *OpenAIBackend) CompleteText(ctx context.Context, req SimpleCompletionRequest) (string, error)
func (*OpenAIBackend) ListModels ¶
func (b *OpenAIBackend) ListModels(ctx context.Context) ([]string, error)
func (*OpenAIBackend) Protocol ¶
func (b *OpenAIBackend) Protocol() Protocol
func (*OpenAIBackend) StreamText ¶
func (b *OpenAIBackend) StreamText(ctx context.Context, req SimpleCompletionRequest, contentOut io.Writer, opts StreamOpts) (string, UsageStats, error)
func (*OpenAIBackend) StreamTurn ¶
func (b *OpenAIBackend) StreamTurn(ctx context.Context, req TurnRequest, contentOut io.Writer, opts StreamOpts) (AssistantTurnResult, error)
type ProviderHTTPError ¶
func NewProviderHTTPError ¶
func NewProviderHTTPError(status int, message string, retryAfter time.Duration) *ProviderHTTPError
func (*ProviderHTTPError) Error ¶
func (e *ProviderHTTPError) Error() string
type ResilientBackend ¶
type ResilientBackend struct {
Inner CompletionBackend
HostKey string
Policy config.APIResiliencePolicy
Circuits *CircuitRegistry
SidecarRevive func(context.Context, error)
// contains filtered or unexported fields
}
func NewResilientBackend ¶
func NewResilientBackend(inner CompletionBackend, hostKey string, policy config.APIResiliencePolicy, circuits *CircuitRegistry) *ResilientBackend
func (*ResilientBackend) CompleteText ¶
func (b *ResilientBackend) CompleteText(ctx context.Context, req SimpleCompletionRequest) (string, error)
func (*ResilientBackend) ListModels ¶
func (b *ResilientBackend) ListModels(ctx context.Context) ([]string, error)
func (*ResilientBackend) Protocol ¶
func (b *ResilientBackend) Protocol() Protocol
func (*ResilientBackend) StreamText ¶
func (b *ResilientBackend) StreamText(ctx context.Context, req SimpleCompletionRequest, contentOut io.Writer, opts StreamOpts) (string, UsageStats, error)
func (*ResilientBackend) StreamTurn ¶
func (b *ResilientBackend) StreamTurn(ctx context.Context, req TurnRequest, contentOut io.Writer, opts StreamOpts) (AssistantTurnResult, error)
type SimpleCompletionRequest ¶
type StreamOpts ¶
type ToolDef ¶
func ToolDefsFromOpenAI ¶
func ToolDefsFromOpenAI(tools []openai.ChatCompletionToolUnionParam) []ToolDef
type TurnRequest ¶
type UsageStats ¶
type UsageStats struct {
PromptTokens int64
CachedPromptTokens int64
CacheCreationPromptTokens int64
ReasoningTokens int64
ResponseTokens int64
TotalTokens int64
OutputTPS float64
TTFTSecs float64
PromptTPS float64
TurnWallSecs float64
ThoughtSecs float64
}
func AggregateConsecutiveTurnUsage ¶
func AggregateConsecutiveTurnUsage(usages []UsageStats) UsageStats
func NormalizeAnthropicUsage ¶
func NormalizeAnthropicUsage(u AnthropicUsagePayload) UsageStats
func StreamText ¶
func StreamText(ctx context.Context, client openai.Client, params openai.ChatCompletionNewParams, contentOut io.Writer, opts StreamOpts) (string, UsageStats, error)