client

package
v0.260324.0 Latest Latest
Warning

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

Go to latest
Published: Mar 23, 2026 License: MPL-2.0 Imports: 33 Imported by: 0

Documentation

Index

Constants

View Source
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

View Source
const ClaudeCodeSystemHeader = "You are Claude Code, Anthropic's official CLI for Claude."

ClaudeCodeSystemHeader is a special system message for Claude Code OAuth subscriptions

View Source
const ClaudeToolPrefix = ""

ClaudeToolPrefix is empty to match real Claude Code behavior (no tool name prefix).

View Source
const ScenarioContextKey contextKey = "scenario"

Variables

View Source
var NewAnthropicClient func(provider *typ.Provider) (*AnthropicClient, error) = defaultNewAnthropicClient

NewAnthropicClient creates a new Anthropic client wrapper

View Source
var NewOpenAIClient func(provider *typ.Provider) (*OpenAIClient, error) = defaultNewOpenAIClient

NewOpenAIClient creates a new OpenAI client wrapper

Functions

func ApplyClaudeToolPrefix

func ApplyClaudeToolPrefix(body []byte, prefix string) []byte

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

func CloseClient(client protocol.Client) error

CloseClient closes a client if it implements Close()

func CreateHTTPClientForProvider

func CreateHTTPClientForProvider(provider *typ.Provider) *http.Client

CreateHTTPClientForProvider creates an HTTP client configured for the given provider It handles proxy and OAuth hooks if applicable

Returns a configured http.Client

func CreateHTTPClientWithProxy

func CreateHTTPClientWithProxy(proxyURL string) *http.Client

CreateHTTPClientWithProxy creates an HTTP client with proxy support

func IsClaudeOAuthToken

func IsClaudeOAuthToken(apiKey string) bool

IsClaudeOAuthToken checks if the given API key is a Claude OAuth token by checking for the "sk-ant-oat" prefix.

func IsModelsEndpointNotSupported

func IsModelsEndpointNotSupported(err error) bool

IsModelsEndpointNotSupported checks if an error is ErrModelsEndpointNotSupported

func StripClaudeToolPrefixFromResponse

func StripClaudeToolPrefixFromResponse(body []byte, prefix string) []byte

StripClaudeToolPrefixFromResponse removes the tool prefix from tool names in the API response. This reverses the transformation done by ApplyClaudeToolPrefix.

func StripClaudeToolPrefixFromStreamLine

func StripClaudeToolPrefixFromStreamLine(line []byte, prefix string) []byte

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

BetaMessagesNew creates a new beta message request

func (*AnthropicClient) BetaMessagesNewStreaming

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

MessagesCountTokens counts tokens for a message request

func (*AnthropicClient) MessagesNew

MessagesNew creates a new message request

func (*AnthropicClient) MessagesNewStreaming

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 new client pool

func (*ClientPool) Clear

func (p *ClientPool) Clear()

Clear removes all clients from the pool

func (*ClientPool) GetAnthropicClient

func (p *ClientPool) GetAnthropicClient(provider *typ.Provider, model string) *AnthropicClient

GetAnthropicClient returns an Anthropic client wrapper for the specified provider

func (*ClientPool) GetGoogleClient

func (p *ClientPool) GetGoogleClient(provider *typ.Provider, model string) *GoogleClient

GetGoogleClient returns a Google client wrapper for the specified provider

func (*ClientPool) GetOpenAIClient

func (p *ClientPool) GetOpenAIClient(provider *typ.Provider, model string) *OpenAIClient

GetOpenAIClient returns an OpenAI client wrapper for the specified provider

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

type ErrModelsEndpointNotSupported struct {
	Provider string
	Reason   string
}

ErrModelsEndpointNotSupported is returned when the provider does not support the models endpoint

func (*ErrModelsEndpointNotSupported) Error

type GoogleClient

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

GoogleClient wraps the Google genai SDK client

func NewGoogleClient

func NewGoogleClient(provider *typ.Provider) (*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 HookFunc

type HookFunc func(req *http.Request) error

HookFunc is a function that can modify the request before it's sent

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

ChatCompletionsNew creates a new chat completion request

func (*OpenAIClient) ChatCompletionsNewStreaming

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

ResponsesNew creates a new Responses API request

func (*OpenAIClient) ResponsesNewStreaming

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

type ProbeUsage struct {
	PromptTokens     int
	CompletionTokens int
	TotalTokens      int
}

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

func (*RecordRoundTripper) RoundTrip

func (r *RecordRoundTripper) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip executes a single HTTP transaction and records request/response

type TransportPool

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

TransportPool manages shared HTTP transports for clients Transports are keyed by: apiBaseURL + proxyURL + oauthType This allows multiple clients to share the same connection pool when they connect to the same API endpoint through the same proxy.

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

func (*TransportPool) GetTransport

func (tp *TransportPool) GetTransport(apiBase, 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: apiBaseURL + proxyURL + oauthType

func (*TransportPool) Stats

func (tp *TransportPool) Stats() map[string]interface{}

Stats returns statistics about the transport pool

Jump to

Keyboard shortcuts

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