Documentation
¶
Index ¶
- Constants
- Variables
- func ApplyClaudeToolPrefix(body []byte, prefix string) []byte
- func CloseClient(client protocol.Client) error
- func CreateHTTPClientForProvider(provider *typ.Provider, model string) *http.Client
- func CreateHTTPClientWithProxy(proxyURL string) *http.Client
- func IsClaudeOAuthToken(apiKey string) bool
- func IsModelsEndpointNotSupported(err error) bool
- func SetTransportConfig(config *TransportConfig)
- func StripClaudeToolPrefixFromResponse(body []byte, prefix string) []byte
- func StripClaudeToolPrefixFromStreamLine(line []byte, prefix string) []byte
- type AnthropicClient
- func (c *AnthropicClient) APIStyle() protocol.APIStyle
- func (c *AnthropicClient) BetaMessagesCountTokens(ctx context.Context, req *anthropic.BetaMessageCountTokensParams) (*anthropic.BetaMessageTokensCount, error)
- func (c *AnthropicClient) BetaMessagesNew(ctx context.Context, req *anthropic.BetaMessageNewParams) (*anthropic.BetaMessage, error)
- func (c *AnthropicClient) BetaMessagesNewStreaming(ctx context.Context, req *anthropic.BetaMessageNewParams) *anthropicstream.Stream[anthropic.BetaRawMessageStreamEventUnion]
- func (c *AnthropicClient) Client() *anthropic.Client
- func (c *AnthropicClient) Close() error
- func (c *AnthropicClient) GetProvider() *typ.Provider
- func (c *AnthropicClient) HttpClient() *http.Client
- func (c *AnthropicClient) ListModels(ctx context.Context) ([]string, error)
- func (c *AnthropicClient) MessagesCountTokens(ctx context.Context, req *anthropic.MessageCountTokensParams) (*anthropic.MessageTokensCount, error)
- func (c *AnthropicClient) MessagesNew(ctx context.Context, req *anthropic.MessageNewParams) (*anthropic.Message, error)
- func (c *AnthropicClient) MessagesNewStreaming(ctx context.Context, req *anthropic.MessageNewParams) *anthropicstream.Stream[anthropic.MessageStreamEventUnion]
- func (c *AnthropicClient) ProbeChatEndpoint(ctx context.Context, model string) ProbeResult
- func (c *AnthropicClient) ProbeModelsEndpoint(ctx context.Context) ProbeResult
- func (c *AnthropicClient) ProbeOptionsEndpoint(ctx context.Context) ProbeResult
- func (c *AnthropicClient) SetRecordSink(sink *obs.Sink)
- type ClientPool
- func (p *ClientPool) Clear()
- func (p *ClientPool) GetAnthropicClient(provider *typ.Provider, model string, sessionID typ.SessionID) *AnthropicClient
- func (p *ClientPool) GetGoogleClient(provider *typ.Provider, model string, sessionID typ.SessionID) *GoogleClient
- func (p *ClientPool) GetOpenAIClient(provider *typ.Provider, model string, sessionID typ.SessionID) *OpenAIClient
- func (p *ClientPool) GetProviderKeys() []string
- func (p *ClientPool) GetRecordSink() *obs.Sink
- func (p *ClientPool) InvalidateProvider(providerUUID string)
- func (p *ClientPool) InvalidateSession(providerUUID, sessionID string)
- func (p *ClientPool) RemoveProvider(provider *typ.Provider, model string)
- func (p *ClientPool) SetRecordSink(sink *obs.Sink)
- func (p *ClientPool) Size() int
- func (p *ClientPool) StartCleanupTask(interval time.Duration)
- func (p *ClientPool) Stats() map[string]interface{}
- type ClientPoolBuilder
- func (b *ClientPoolBuilder) Build() *ClientPool
- func (b *ClientPoolBuilder) WithCleanupInterval(interval time.Duration) *ClientPoolBuilder
- func (b *ClientPoolBuilder) WithClientTTL(ttl time.Duration) *ClientPoolBuilder
- func (b *ClientPoolBuilder) WithMode(mode PoolMode) *ClientPoolBuilder
- func (b *ClientPoolBuilder) WithOnceMode() *ClientPoolBuilder
- func (b *ClientPoolBuilder) WithRecordSink(sink *obs.Sink) *ClientPoolBuilder
- func (b *ClientPoolBuilder) WithSharedMode() *ClientPoolBuilder
- type ErrModelsEndpointNotSupported
- type GoogleClient
- func (c *GoogleClient) APIStyle() protocol.APIStyle
- func (c *GoogleClient) Client() *genai.Client
- func (c *GoogleClient) Close() error
- func (c *GoogleClient) GenerateContent(ctx context.Context, model string, contents []*genai.Content, ...) (*genai.GenerateContentResponse, error)
- func (c *GoogleClient) GenerateContentStream(ctx context.Context, model string, contents []*genai.Content, ...) iter.Seq2[*genai.GenerateContentResponse, error]
- func (c *GoogleClient) GetProvider() *typ.Provider
- func (c *GoogleClient) ListModels(ctx context.Context) ([]string, error)
- func (c *GoogleClient) ProbeChatEndpoint(ctx context.Context, model string) ProbeResult
- func (c *GoogleClient) ProbeModelsEndpoint(ctx context.Context) ProbeResult
- func (c *GoogleClient) ProbeOptionsEndpoint(ctx context.Context) ProbeResult
- func (c *GoogleClient) SetRecordSink(sink *obs.Sink)
- type HookFunc
- type ModelLister
- type OpenAIClient
- func (c *OpenAIClient) APIStyle() protocol.APIStyle
- func (c *OpenAIClient) ChatCompletionsNew(ctx context.Context, req openai.ChatCompletionNewParams) (*openai.ChatCompletion, error)
- func (c *OpenAIClient) ChatCompletionsNewStreaming(ctx context.Context, req openai.ChatCompletionNewParams) *ssestream.Stream[openai.ChatCompletionChunk]
- func (c *OpenAIClient) Client() *openai.Client
- func (c *OpenAIClient) Close() error
- func (c *OpenAIClient) GetProvider() *typ.Provider
- func (c *OpenAIClient) HttpClient() *http.Client
- func (c *OpenAIClient) ListModels(ctx context.Context) ([]string, error)
- func (c *OpenAIClient) ProbeChatEndpoint(ctx context.Context, model string) ProbeResult
- func (c *OpenAIClient) ProbeModelsEndpoint(ctx context.Context) ProbeResult
- func (c *OpenAIClient) ProbeOptionsEndpoint(ctx context.Context) ProbeResult
- func (c *OpenAIClient) ResponsesNew(ctx context.Context, req responses.ResponseNewParams) (*responses.Response, error)
- func (c *OpenAIClient) ResponsesNewStreaming(ctx context.Context, req responses.ResponseNewParams) *ssestream.Stream[responses.ResponseStreamEventUnion]
- func (c *OpenAIClient) SetRecordSink(sink *obs.Sink)
- type PoolMode
- type ProbeResult
- type ProbeUsage
- type Prober
- type RecordRoundTripper
- type TransportConfig
- type TransportPool
Constants ¶
const ( DefaultClientTTL = 60 * time.Minute // Default time-to-live for cached clients DefaultCleanupInterval = 60 * time.Minute // Default interval for cleanup task )
Constants for client TTL and cleanup interval
const ( DefaultMaxIdleConns = 100 DefaultMaxIdleConnsPerHost = 2 )
Go defaults for reference (not used directly, only for documentation)
const ( DefaultTransportTTL = 120 * time.Minute // Default time-to-live for cached transports DefaultTransportCleanupInterval = 60 * time.Minute // Default interval for cleanup task )
Constants for transport TTL and cleanup interval
const ClaudeCodeSystemHeader = "You are Claude Code, Anthropic's official CLI for Claude."
ClaudeCodeSystemHeader is a special system message for Claude Code OAuth subscriptions
const ClaudeToolPrefix = ""
ClaudeToolPrefix is empty to match real Claude Code behavior (no tool name prefix).
const (
ProxyURLNone = "none" // Special value to force direct connection (disable proxy)
)
Constants for proxy URL values
const ScenarioContextKey contextKey = "scenario"
Variables ¶
var NewAnthropicClient func(provider *typ.Provider, model string) (*AnthropicClient, error) = defaultNewAnthropicClient
NewAnthropicClient creates a new Anthropic client wrapper
var NewOpenAIClient func(provider *typ.Provider, model string) (*OpenAIClient, error) = defaultNewOpenAIClient
NewOpenAIClient creates a new OpenAI client wrapper
Functions ¶
func ApplyClaudeToolPrefix ¶
ApplyClaudeToolPrefix applies a prefix to tool names in the request body. This is required for Claude Code OAuth tokens to avoid conflicts with built-in tools. The prefix is applied to user-defined tools only.
func CloseClient ¶
CloseClient closes a client if it implements Close()
func CreateHTTPClientForProvider ¶
CreateHTTPClientForProvider creates an HTTP client configured for the given provider It handles proxy and OAuth hooks if applicable The model parameter is used for transport pool keying (provider+model+proxy)
Returns a configured http.Client
func CreateHTTPClientWithProxy ¶
CreateHTTPClientWithProxy creates an HTTP client with proxy support
func IsClaudeOAuthToken ¶
IsClaudeOAuthToken checks if the given API key is a Claude OAuth token by checking for the "sk-ant-oat" prefix.
func IsModelsEndpointNotSupported ¶
IsModelsEndpointNotSupported checks if an error is ErrModelsEndpointNotSupported
func SetTransportConfig ¶
func SetTransportConfig(config *TransportConfig)
SetTransportConfig updates the transport pool configuration Pass nil to reset to Go defaults (backward compatible) This affects newly created transports only, existing transports are not modified
func StripClaudeToolPrefixFromResponse ¶
StripClaudeToolPrefixFromResponse removes the tool prefix from tool names in the API response. This reverses the transformation done by ApplyClaudeToolPrefix.
func StripClaudeToolPrefixFromStreamLine ¶
StripClaudeToolPrefixFromStreamLine removes the tool prefix from tool names in a single SSE stream line. This is used for streaming responses.
Types ¶
type AnthropicClient ¶
type AnthropicClient struct {
// contains filtered or unexported fields
}
AnthropicClient wraps the Anthropic SDK client
func (*AnthropicClient) APIStyle ¶
func (c *AnthropicClient) APIStyle() protocol.APIStyle
ProviderType returns the provider type
func (*AnthropicClient) BetaMessagesCountTokens ¶
func (c *AnthropicClient) BetaMessagesCountTokens(ctx context.Context, req *anthropic.BetaMessageCountTokensParams) (*anthropic.BetaMessageTokensCount, error)
func (*AnthropicClient) BetaMessagesNew ¶
func (c *AnthropicClient) BetaMessagesNew(ctx context.Context, req *anthropic.BetaMessageNewParams) (*anthropic.BetaMessage, error)
BetaMessagesNew creates a new beta message request
func (*AnthropicClient) BetaMessagesNewStreaming ¶
func (c *AnthropicClient) BetaMessagesNewStreaming(ctx context.Context, req *anthropic.BetaMessageNewParams) *anthropicstream.Stream[anthropic.BetaRawMessageStreamEventUnion]
BetaMessagesNewStreaming creates a new beta streaming message request
func (*AnthropicClient) Client ¶
func (c *AnthropicClient) Client() *anthropic.Client
Client returns the underlying Anthropic SDK client
func (*AnthropicClient) Close ¶
func (c *AnthropicClient) Close() error
Close closes any resources held by the client
func (*AnthropicClient) GetProvider ¶
func (c *AnthropicClient) GetProvider() *typ.Provider
GetProvider returns the provider for this client
func (*AnthropicClient) HttpClient ¶
func (c *AnthropicClient) HttpClient() *http.Client
HttpClient returns the underlying HTTP client for passthrough/proxy operations
func (*AnthropicClient) ListModels ¶
func (c *AnthropicClient) ListModels(ctx context.Context) ([]string, error)
ListModels returns the list of available models from the Anthropic API
func (*AnthropicClient) MessagesCountTokens ¶
func (c *AnthropicClient) MessagesCountTokens(ctx context.Context, req *anthropic.MessageCountTokensParams) (*anthropic.MessageTokensCount, error)
MessagesCountTokens counts tokens for a message request
func (*AnthropicClient) MessagesNew ¶
func (c *AnthropicClient) MessagesNew(ctx context.Context, req *anthropic.MessageNewParams) (*anthropic.Message, error)
MessagesNew creates a new message request
func (*AnthropicClient) MessagesNewStreaming ¶
func (c *AnthropicClient) MessagesNewStreaming(ctx context.Context, req *anthropic.MessageNewParams) *anthropicstream.Stream[anthropic.MessageStreamEventUnion]
MessagesNewStreaming creates a new streaming message request
func (*AnthropicClient) ProbeChatEndpoint ¶
func (c *AnthropicClient) ProbeChatEndpoint(ctx context.Context, model string) ProbeResult
ProbeChatEndpoint tests the messages endpoint with a minimal request
func (*AnthropicClient) ProbeModelsEndpoint ¶
func (c *AnthropicClient) ProbeModelsEndpoint(ctx context.Context) ProbeResult
ProbeModelsEndpoint tests the models list endpoint
func (*AnthropicClient) ProbeOptionsEndpoint ¶
func (c *AnthropicClient) ProbeOptionsEndpoint(ctx context.Context) ProbeResult
ProbeOptionsEndpoint tests basic connectivity with an OPTIONS request
func (*AnthropicClient) SetRecordSink ¶
func (c *AnthropicClient) SetRecordSink(sink *obs.Sink)
SetRecordSink sets the record sink for the client
type ClientPool ¶
type ClientPool struct {
// contains filtered or unexported fields
}
ClientPool manages unified client instances for different providers
func NewClientPool ¶
func NewClientPool() *ClientPool
NewClientPool creates a pool with once mode (new default)
func NewSharedClientPool ¶
func NewSharedClientPool() *ClientPool
NewSharedClientPool creates a pool with shared mode (explicit)
func (*ClientPool) GetAnthropicClient ¶
func (p *ClientPool) GetAnthropicClient(provider *typ.Provider, model string, sessionID typ.SessionID) *AnthropicClient
GetAnthropicClient returns an Anthropic client wrapper for the specified provider. sessionID is used to scope the client for OAuth providers; pass "" when no session is available.
func (*ClientPool) GetGoogleClient ¶
func (p *ClientPool) GetGoogleClient(provider *typ.Provider, model string, sessionID typ.SessionID) *GoogleClient
GetGoogleClient returns a Google client wrapper for the specified provider. sessionID is reserved for future use; Google providers use API keys so it is currently ignored.
func (*ClientPool) GetOpenAIClient ¶
func (p *ClientPool) GetOpenAIClient(provider *typ.Provider, model string, sessionID typ.SessionID) *OpenAIClient
GetOpenAIClient returns an OpenAI client wrapper for the specified provider. sessionID is used to scope the client for OAuth providers; pass "" when no session is available.
func (*ClientPool) GetProviderKeys ¶
func (p *ClientPool) GetProviderKeys() []string
GetProviderKeys returns all provider keys currently in the pool
func (*ClientPool) GetRecordSink ¶
func (p *ClientPool) GetRecordSink() *obs.Sink
GetRecordSink returns the record sink
func (*ClientPool) InvalidateProvider ¶
func (p *ClientPool) InvalidateProvider(providerUUID string)
InvalidateProvider removes all cached clients for a specific provider UUID This should be called when provider credentials are updated (e.g., OAuth token refresh)
func (*ClientPool) InvalidateSession ¶ added in v0.260409.1540
func (p *ClientPool) InvalidateSession(providerUUID, sessionID string)
InvalidateSession removes all cached clients associated with a specific session for a provider. This is useful when a session ends or its OAuth token is revoked.
func (*ClientPool) RemoveProvider ¶
func (p *ClientPool) RemoveProvider(provider *typ.Provider, model string)
RemoveProvider removes a specific provider's client from the pool
func (*ClientPool) SetRecordSink ¶
func (p *ClientPool) SetRecordSink(sink *obs.Sink)
SetRecordSink sets the record sink for the client pool
func (*ClientPool) Size ¶
func (p *ClientPool) Size() int
Size returns the total number of clients currently in both pools
func (*ClientPool) StartCleanupTask ¶
func (p *ClientPool) StartCleanupTask(interval time.Duration)
StartCleanupTask starts a periodic cleanup task that removes expired clients The cleanup runs in a background goroutine and continues until the process exits
func (*ClientPool) Stats ¶
func (p *ClientPool) Stats() map[string]interface{}
Stats provides statistics about the client pool
type ClientPoolBuilder ¶
type ClientPoolBuilder struct {
// contains filtered or unexported fields
}
ClientPoolBuilder builds a ClientPool with specified configuration
func NewClientPoolBuilder ¶
func NewClientPoolBuilder() *ClientPoolBuilder
NewClientPoolBuilder creates a new builder with default settings
func (*ClientPoolBuilder) Build ¶
func (b *ClientPoolBuilder) Build() *ClientPool
Build creates the ClientPool with configured settings
func (*ClientPoolBuilder) WithCleanupInterval ¶
func (b *ClientPoolBuilder) WithCleanupInterval(interval time.Duration) *ClientPoolBuilder
WithCleanupInterval sets the cleanup interval (shared mode only)
func (*ClientPoolBuilder) WithClientTTL ¶
func (b *ClientPoolBuilder) WithClientTTL(ttl time.Duration) *ClientPoolBuilder
WithClientTTL sets the TTL for cached clients (shared mode only)
func (*ClientPoolBuilder) WithMode ¶
func (b *ClientPoolBuilder) WithMode(mode PoolMode) *ClientPoolBuilder
WithMode sets the pool mode
func (*ClientPoolBuilder) WithOnceMode ¶
func (b *ClientPoolBuilder) WithOnceMode() *ClientPoolBuilder
WithOnceMode enables once mode (no caching, convenience method)
func (*ClientPoolBuilder) WithRecordSink ¶
func (b *ClientPoolBuilder) WithRecordSink(sink *obs.Sink) *ClientPoolBuilder
WithRecordSink sets the record sink for all clients
func (*ClientPoolBuilder) WithSharedMode ¶
func (b *ClientPoolBuilder) WithSharedMode() *ClientPoolBuilder
WithSharedMode enables shared mode with caching (convenience method)
type ErrModelsEndpointNotSupported ¶
ErrModelsEndpointNotSupported is returned when the provider does not support the models endpoint
func (*ErrModelsEndpointNotSupported) Error ¶
func (e *ErrModelsEndpointNotSupported) Error() string
type GoogleClient ¶
type GoogleClient struct {
// contains filtered or unexported fields
}
GoogleClient wraps the Google genai SDK client
func NewGoogleClient ¶
func NewGoogleClient(provider *typ.Provider, model string) (*GoogleClient, error)
NewGoogleClient creates a new Google client wrapper
func (*GoogleClient) APIStyle ¶
func (c *GoogleClient) APIStyle() protocol.APIStyle
ProviderType returns the provider type
func (*GoogleClient) Client ¶
func (c *GoogleClient) Client() *genai.Client
Client returns the underlying Google genai SDK client
func (*GoogleClient) Close ¶
func (c *GoogleClient) Close() error
Close closes any resources held by the client
func (*GoogleClient) GenerateContent ¶
func (c *GoogleClient) GenerateContent(ctx context.Context, model string, contents []*genai.Content, config *genai.GenerateContentConfig) (*genai.GenerateContentResponse, error)
GenerateContent generates content using the Google API
func (*GoogleClient) GenerateContentStream ¶
func (c *GoogleClient) GenerateContentStream(ctx context.Context, model string, contents []*genai.Content, config *genai.GenerateContentConfig) iter.Seq2[*genai.GenerateContentResponse, error]
GenerateContentStream generates content using streaming
func (*GoogleClient) GetProvider ¶
func (c *GoogleClient) GetProvider() *typ.Provider
GetProvider returns the provider for this client
func (*GoogleClient) ListModels ¶
func (c *GoogleClient) ListModels(ctx context.Context) ([]string, error)
ListModels returns the list of available models from the Google Gemini API Note: Google genai SDK doesn't have a direct ListModels method, so we return ErrModelsEndpointNotSupported to signal the caller to use template fallback.
func (*GoogleClient) ProbeChatEndpoint ¶
func (c *GoogleClient) ProbeChatEndpoint(ctx context.Context, model string) ProbeResult
ProbeChatEndpoint tests the chat endpoint with a minimal request
func (*GoogleClient) ProbeModelsEndpoint ¶
func (c *GoogleClient) ProbeModelsEndpoint(ctx context.Context) ProbeResult
ProbeModelsEndpoint tests the models list endpoint
func (*GoogleClient) ProbeOptionsEndpoint ¶
func (c *GoogleClient) ProbeOptionsEndpoint(ctx context.Context) ProbeResult
ProbeOptionsEndpoint tests basic connectivity with an OPTIONS request
func (*GoogleClient) SetRecordSink ¶
func (c *GoogleClient) SetRecordSink(sink *obs.Sink)
SetRecordSink sets the record sink for the client
type ModelLister ¶
type ModelLister interface {
// ListModels returns the list of available models from the provider API
// Returns ErrModelsEndpointNotSupported if the provider does not support the models endpoint
ListModels(ctx context.Context) ([]string, error)
}
ModelLister defines the interface for fetching model lists from provider APIs
type OpenAIClient ¶
type OpenAIClient struct {
// contains filtered or unexported fields
}
OpenAIClient wraps the OpenAI SDK client
func (*OpenAIClient) APIStyle ¶
func (c *OpenAIClient) APIStyle() protocol.APIStyle
ProviderType returns the provider type
func (*OpenAIClient) ChatCompletionsNew ¶
func (c *OpenAIClient) ChatCompletionsNew(ctx context.Context, req openai.ChatCompletionNewParams) (*openai.ChatCompletion, error)
ChatCompletionsNew creates a new chat completion request
func (*OpenAIClient) ChatCompletionsNewStreaming ¶
func (c *OpenAIClient) ChatCompletionsNewStreaming(ctx context.Context, req openai.ChatCompletionNewParams) *ssestream.Stream[openai.ChatCompletionChunk]
ChatCompletionsNewStreaming creates a new streaming chat completion request
func (*OpenAIClient) Client ¶
func (c *OpenAIClient) Client() *openai.Client
Client returns the underlying OpenAI SDK client
func (*OpenAIClient) Close ¶
func (c *OpenAIClient) Close() error
Close closes any resources held by the client
func (*OpenAIClient) GetProvider ¶
func (c *OpenAIClient) GetProvider() *typ.Provider
GetProvider returns the provider for this client
func (*OpenAIClient) HttpClient ¶
func (c *OpenAIClient) HttpClient() *http.Client
HttpClient returns the underlying HTTP client for passthrough/proxy operations
func (*OpenAIClient) ListModels ¶
func (c *OpenAIClient) ListModels(ctx context.Context) ([]string, error)
ListModels returns the list of available models from the OpenAI-compatible API
func (*OpenAIClient) ProbeChatEndpoint ¶
func (c *OpenAIClient) ProbeChatEndpoint(ctx context.Context, model string) ProbeResult
ProbeChatEndpoint tests the chat completions endpoint with a minimal request
func (*OpenAIClient) ProbeModelsEndpoint ¶
func (c *OpenAIClient) ProbeModelsEndpoint(ctx context.Context) ProbeResult
ProbeModelsEndpoint tests the models list endpoint
func (*OpenAIClient) ProbeOptionsEndpoint ¶
func (c *OpenAIClient) ProbeOptionsEndpoint(ctx context.Context) ProbeResult
ProbeOptionsEndpoint tests basic connectivity with an OPTIONS request
func (*OpenAIClient) ResponsesNew ¶
func (c *OpenAIClient) ResponsesNew(ctx context.Context, req responses.ResponseNewParams) (*responses.Response, error)
ResponsesNew creates a new Responses API request
func (*OpenAIClient) ResponsesNewStreaming ¶
func (c *OpenAIClient) ResponsesNewStreaming(ctx context.Context, req responses.ResponseNewParams) *ssestream.Stream[responses.ResponseStreamEventUnion]
ResponsesNewStreaming creates a new streaming Responses API request
func (*OpenAIClient) SetRecordSink ¶
func (c *OpenAIClient) SetRecordSink(sink *obs.Sink)
SetRecordSink sets the record sink for the client
type ProbeResult ¶
type ProbeResult struct {
Success bool
Message string
Content string
LatencyMs int64
ModelsCount int
PromptTokens int
CompletionTokens int
TotalTokens int
ErrorMessage string
}
ProbeResult represents the result of a probe operation
type ProbeUsage ¶
ProbeUsage represents token usage from a probe operation
type Prober ¶
type Prober interface {
// ProbeChatEndpoint tests the chat/messages endpoint with a minimal request
// Returns a ProbeResult with success status, latency, and any response content
ProbeChatEndpoint(ctx context.Context, model string) ProbeResult
// ProbeModelsEndpoint tests the models list endpoint
// Returns a ProbeResult with the number of available models
ProbeModelsEndpoint(ctx context.Context) ProbeResult
// ProbeOptionsEndpoint tests basic connectivity with an OPTIONS request
// Returns a ProbeResult indicating if the endpoint is reachable
ProbeOptionsEndpoint(ctx context.Context) ProbeResult
}
Prober defines the interface for client probe capabilities
type RecordRoundTripper ¶
type RecordRoundTripper struct {
// contains filtered or unexported fields
}
RecordRoundTripper is an http.RoundTripper that records requests and responses
func NewRecordRoundTripper ¶
func NewRecordRoundTripper(transport http.RoundTripper, recordSink *obs.Sink, provider *typ.Provider) *RecordRoundTripper
NewRecordRoundTripper creates a new record round tripper
type TransportConfig ¶
type TransportConfig struct {
MaxIdleConns *int // nil = use Go default (100)
MaxIdleConnsPerHost *int // nil = use Go default (2)
MaxConnsPerHost *int // nil = use Go default (0, no limit)
DisableKeepAlives *bool // nil = use Go default (false)
// RespectEnvProxy controls whether providers without explicit proxy configuration
// should use environment/system proxy settings (HTTP_PROXY, HTTPS_PROXY, macOS system proxy, etc.)
// Default (nil): false - providers without proxy_url connect directly
// Set to true: providers without proxy_url will use system/environment proxy
RespectEnvProxy *bool // nil = use default (false)
}
TransportConfig holds the configuration for HTTP transport connection pooling All fields are pointers so that zero-value (nil) means "use Go default"
type TransportPool ¶
type TransportPool struct {
// contains filtered or unexported fields
}
TransportPool manages shared HTTP transports for clients Transports are keyed by: providerUUID + proxyURL This allows multiple clients to share the same connection pool when they use the same provider+proxy combination.
func GetGlobalTransportPool ¶
func GetGlobalTransportPool() *TransportPool
GetGlobalTransportPool returns the global transport pool singleton
func (*TransportPool) Clear ¶
func (tp *TransportPool) Clear()
Clear removes all transports from the pool and closes idle connections
func (*TransportPool) GetTransport ¶
func (tp *TransportPool) GetTransport(providerUUID, model, proxyURL string, oauthType oauth.ProviderType) *http.Transport
GetTransport returns or creates a shared HTTP transport for the given configuration. The transport key is based on: providerUUID + proxyURL.
func (*TransportPool) StartCleanupTask ¶
func (tp *TransportPool) StartCleanupTask(interval, ttl time.Duration)
StartCleanupTask starts a periodic cleanup task that removes expired transports
func (*TransportPool) Stats ¶
func (tp *TransportPool) Stats() map[string]interface{}
Stats returns statistics about the transport pool