Documentation
¶
Overview ¶
Package base provides common functionality and utilities for AI providers. It includes base implementations, shared components, and standardized patterns that can be used by specific provider implementations.
Package base provides common functionality and utilities for AI providers.
Package base provides common functionality and utilities for AI providers.
Package base provides common functionality and utilities for AI providers.
Index ¶
- func ExampleUsage()
- func ExampleUsageWithJSON()
- func ExampleUsageWithTimeout()
- type BaseProvider
- func (p *BaseProvider) Authenticate(ctx context.Context, authConfig types.AuthConfig) error
- func (p *BaseProvider) Configure(config types.ProviderConfig) error
- func (p *BaseProvider) Description() string
- func (p *BaseProvider) GenerateChatCompletion(ctx context.Context, options types.GenerateOptions) (types.ChatCompletionStream, error)
- func (p *BaseProvider) GetConfig() types.ProviderConfig
- func (p *BaseProvider) GetDefaultModel() string
- func (p *BaseProvider) GetMetrics() types.ProviderMetrics
- func (p *BaseProvider) GetModels(ctx context.Context) ([]types.Model, error)
- func (p *BaseProvider) GetToolFormat() types.ToolFormat
- func (p *BaseProvider) HealthCheck(ctx context.Context) error
- func (p *BaseProvider) IncrementRequestCount()
- func (p *BaseProvider) InvokeServerTool(ctx context.Context, toolName string, params interface{}) (interface{}, error)
- func (p *BaseProvider) IsAuthenticated() bool
- func (p *BaseProvider) LogRequest(method, url string, headers map[string]string, body interface{})
- func (p *BaseProvider) LogResponse(resp *http.Response, duration time.Duration)
- func (p *BaseProvider) Logout(ctx context.Context) error
- func (p *BaseProvider) Name() string
- func (p *BaseProvider) RecordError(err error)
- func (p *BaseProvider) RecordErrorWithModel(ctx context.Context, err error, modelID string, errorType string)
- func (p *BaseProvider) RecordRequest(ctx context.Context, modelID string)
- func (p *BaseProvider) RecordSuccess(latency time.Duration, tokensUsed int64)
- func (p *BaseProvider) RecordSuccessWithModel(ctx context.Context, latency time.Duration, tokensUsed int64, modelID string)
- func (p *BaseProvider) SetMetricsCollector(collector types.MetricsCollector)
- func (p *BaseProvider) SupportsResponsesAPI() bool
- func (p *BaseProvider) SupportsStreaming() bool
- func (p *BaseProvider) SupportsToolCalling() bool
- func (p *BaseProvider) Type() types.ProviderType
- func (p *BaseProvider) UpdateConfig(config types.ProviderConfig)
- func (p *BaseProvider) UpdateHealthStatus(healthy bool, message string)
- func (p *BaseProvider) UpdateHealthStatusResponseTime(responseTime float64)
- type BaseProviderStub
- func (b *BaseProviderStub) Authenticate(ctx context.Context, authConfig types.AuthConfig) error
- func (b *BaseProviderStub) Configure(config types.ProviderConfig) error
- func (b *BaseProviderStub) Description() string
- func (b *BaseProviderStub) GenerateChatCompletion(ctx context.Context, options types.GenerateOptions) (types.ChatCompletionStream, error)
- func (b *BaseProviderStub) GetConfig() types.ProviderConfig
- func (b *BaseProviderStub) GetDefaultModel() string
- func (b *BaseProviderStub) GetMetrics() types.ProviderMetrics
- func (b *BaseProviderStub) GetModels(ctx context.Context) ([]types.Model, error)
- func (b *BaseProviderStub) GetToolFormat() types.ToolFormat
- func (b *BaseProviderStub) HealthCheck(ctx context.Context) error
- func (b *BaseProviderStub) InvokeServerTool(ctx context.Context, toolName string, params interface{}) (interface{}, error)
- func (b *BaseProviderStub) IsAuthenticated() bool
- func (b *BaseProviderStub) Logout(ctx context.Context) error
- func (b *BaseProviderStub) Name() string
- func (b *BaseProviderStub) SupportsResponsesAPI() bool
- func (b *BaseProviderStub) SupportsStreaming() bool
- func (b *BaseProviderStub) SupportsToolCalling() bool
- func (b *BaseProviderStub) Type() types.ProviderType
- type DefaultRequestHandler
- func (h *DefaultRequestHandler) ExecuteAuthenticatedRequest(ctx context.Context, method, url string, body interface{}, useOAuth bool) (*http.Response, error)
- func (h *DefaultRequestHandler) ExecuteRequest(ctx context.Context, method, url string, body interface{}, ...) (*http.Response, error)
- func (h *DefaultRequestHandler) GetBaseURL() string
- func (h *DefaultRequestHandler) PrepareJSONBody(body interface{}) (*bytes.Buffer, error)
- func (h *DefaultRequestHandler) SetBaseURL(baseURL string)
- type DefaultResponseParser
- func (p *DefaultResponseParser) CheckStatusCode(resp *http.Response) error
- func (p *DefaultResponseParser) ExtractRateLimits(resp *http.Response, model string) *RateLimitInfo
- func (p *DefaultResponseParser) ParseError(resp *http.Response) error
- func (p *DefaultResponseParser) ParseJSON(resp *http.Response, target interface{}) error
- func (p *DefaultResponseParser) ReadBody(resp *http.Response) (string, error)
- type MockStream
- type ProviderComponents
- type ProviderFactory
- func (f *ProviderFactory) CreateProvider(providerType types.ProviderType, config types.ProviderConfig) (types.Provider, error)
- func (f *ProviderFactory) GetSupportedProviders() []types.ProviderType
- func (f *ProviderFactory) RegisterProvider(providerType types.ProviderType, ...)
- func (f *ProviderFactory) TestProvider(ctx context.Context, providerName string, config interface{}) (*types.TestResult, error)
- type ProviderInitConfig
- type RateLimitInfo
- type RequestHandler
- type ResponseParser
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ExampleUsage ¶ added in v1.0.14
func ExampleUsage()
ExampleUsage demonstrates how to use the ProviderFactory and TestProvider method
func ExampleUsageWithJSON ¶ added in v1.0.14
func ExampleUsageWithJSON()
ExampleUsageWithJSON demonstrates how to work with JSON serialization
func ExampleUsageWithTimeout ¶ added in v1.0.14
func ExampleUsageWithTimeout()
ExampleUsageWithTimeout demonstrates how to use context with timeout
Types ¶
type BaseProvider ¶
type BaseProvider struct {
// contains filtered or unexported fields
}
BaseProvider provides common functionality for all providers
func NewBaseProvider ¶
func NewBaseProvider(name string, config types.ProviderConfig, client *http.Client, logger *log.Logger) *BaseProvider
NewBaseProvider creates a new base provider
func (*BaseProvider) Authenticate ¶
func (p *BaseProvider) Authenticate(ctx context.Context, authConfig types.AuthConfig) error
Authenticate handles API key authentication
func (*BaseProvider) Configure ¶
func (p *BaseProvider) Configure(config types.ProviderConfig) error
Configure updates the provider configuration
func (*BaseProvider) Description ¶
func (p *BaseProvider) Description() string
func (*BaseProvider) GenerateChatCompletion ¶
func (p *BaseProvider) GenerateChatCompletion(ctx context.Context, options types.GenerateOptions) (types.ChatCompletionStream, error)
GenerateChatCompletion generates a mock chat completion
func (*BaseProvider) GetConfig ¶
func (p *BaseProvider) GetConfig() types.ProviderConfig
GetConfig returns the current provider configuration
func (*BaseProvider) GetDefaultModel ¶
func (p *BaseProvider) GetDefaultModel() string
func (*BaseProvider) GetMetrics ¶
func (p *BaseProvider) GetMetrics() types.ProviderMetrics
func (*BaseProvider) GetToolFormat ¶
func (p *BaseProvider) GetToolFormat() types.ToolFormat
func (*BaseProvider) HealthCheck ¶
func (p *BaseProvider) HealthCheck(ctx context.Context) error
func (*BaseProvider) IncrementRequestCount ¶
func (p *BaseProvider) IncrementRequestCount()
IncrementRequestCount increments the request counter
func (*BaseProvider) InvokeServerTool ¶
func (p *BaseProvider) InvokeServerTool(ctx context.Context, toolName string, params interface{}) (interface{}, error)
InvokeServerTool invokes a server tool (not implemented in base provider)
func (*BaseProvider) IsAuthenticated ¶
func (p *BaseProvider) IsAuthenticated() bool
func (*BaseProvider) LogRequest ¶
func (p *BaseProvider) LogRequest(method, url string, headers map[string]string, body interface{})
LogRequest logs an HTTP request
func (*BaseProvider) LogResponse ¶
func (p *BaseProvider) LogResponse(resp *http.Response, duration time.Duration)
LogResponse logs detailed response information
func (*BaseProvider) Name ¶
func (p *BaseProvider) Name() string
func (*BaseProvider) RecordError ¶
func (p *BaseProvider) RecordError(err error)
RecordError records a failed API call
func (*BaseProvider) RecordErrorWithModel ¶ added in v1.0.7
func (p *BaseProvider) RecordErrorWithModel(ctx context.Context, err error, modelID string, errorType string)
RecordErrorWithModel records a failed API call with model and error type information
func (*BaseProvider) RecordRequest ¶ added in v1.0.7
func (p *BaseProvider) RecordRequest(ctx context.Context, modelID string)
RecordRequest records the start of a request and emits to MetricsCollector if set
func (*BaseProvider) RecordSuccess ¶
func (p *BaseProvider) RecordSuccess(latency time.Duration, tokensUsed int64)
RecordSuccess records a successful API call
func (*BaseProvider) RecordSuccessWithModel ¶ added in v1.0.7
func (p *BaseProvider) RecordSuccessWithModel(ctx context.Context, latency time.Duration, tokensUsed int64, modelID string)
RecordSuccessWithModel records a successful API call with model information
func (*BaseProvider) SetMetricsCollector ¶ added in v1.0.7
func (p *BaseProvider) SetMetricsCollector(collector types.MetricsCollector)
SetMetricsCollector sets the metrics collector for this provider
func (*BaseProvider) SupportsResponsesAPI ¶
func (p *BaseProvider) SupportsResponsesAPI() bool
func (*BaseProvider) SupportsStreaming ¶
func (p *BaseProvider) SupportsStreaming() bool
func (*BaseProvider) SupportsToolCalling ¶
func (p *BaseProvider) SupportsToolCalling() bool
func (*BaseProvider) Type ¶
func (p *BaseProvider) Type() types.ProviderType
func (*BaseProvider) UpdateConfig ¶
func (p *BaseProvider) UpdateConfig(config types.ProviderConfig)
UpdateConfig updates provider configuration
func (*BaseProvider) UpdateHealthStatus ¶
func (p *BaseProvider) UpdateHealthStatus(healthy bool, message string)
UpdateHealthStatus updates the health status
func (*BaseProvider) UpdateHealthStatusResponseTime ¶
func (p *BaseProvider) UpdateHealthStatusResponseTime(responseTime float64)
UpdateHealthStatusResponseTime updates the health status response time
type BaseProviderStub ¶
type BaseProviderStub struct {
*BaseProvider
}
BaseProviderStub wraps BaseProvider to implement Provider interface
func NewBaseProviderStub ¶
func NewBaseProviderStub(name string, config types.ProviderConfig, client *http.Client, logger *log.Logger) *BaseProviderStub
func (*BaseProviderStub) Authenticate ¶
func (b *BaseProviderStub) Authenticate(ctx context.Context, authConfig types.AuthConfig) error
func (*BaseProviderStub) Configure ¶
func (b *BaseProviderStub) Configure(config types.ProviderConfig) error
func (*BaseProviderStub) Description ¶
func (b *BaseProviderStub) Description() string
func (*BaseProviderStub) GenerateChatCompletion ¶
func (b *BaseProviderStub) GenerateChatCompletion(ctx context.Context, options types.GenerateOptions) (types.ChatCompletionStream, error)
func (*BaseProviderStub) GetConfig ¶
func (b *BaseProviderStub) GetConfig() types.ProviderConfig
func (*BaseProviderStub) GetDefaultModel ¶
func (b *BaseProviderStub) GetDefaultModel() string
func (*BaseProviderStub) GetMetrics ¶
func (b *BaseProviderStub) GetMetrics() types.ProviderMetrics
func (*BaseProviderStub) GetToolFormat ¶
func (b *BaseProviderStub) GetToolFormat() types.ToolFormat
func (*BaseProviderStub) HealthCheck ¶
func (b *BaseProviderStub) HealthCheck(ctx context.Context) error
func (*BaseProviderStub) InvokeServerTool ¶
func (b *BaseProviderStub) InvokeServerTool(ctx context.Context, toolName string, params interface{}) (interface{}, error)
func (*BaseProviderStub) IsAuthenticated ¶
func (b *BaseProviderStub) IsAuthenticated() bool
func (*BaseProviderStub) Name ¶
func (b *BaseProviderStub) Name() string
Name returns the stub provider name
func (*BaseProviderStub) SupportsResponsesAPI ¶
func (b *BaseProviderStub) SupportsResponsesAPI() bool
func (*BaseProviderStub) SupportsStreaming ¶
func (b *BaseProviderStub) SupportsStreaming() bool
func (*BaseProviderStub) SupportsToolCalling ¶
func (b *BaseProviderStub) SupportsToolCalling() bool
func (*BaseProviderStub) Type ¶
func (b *BaseProviderStub) Type() types.ProviderType
type DefaultRequestHandler ¶ added in v1.0.8
type DefaultRequestHandler struct {
// contains filtered or unexported fields
}
DefaultRequestHandler provides a default implementation of RequestHandler
func NewDefaultRequestHandler ¶ added in v1.0.8
func NewDefaultRequestHandler(client *http.Client, authHelper *auth.AuthHelper, baseURL string) *DefaultRequestHandler
NewDefaultRequestHandler creates a new DefaultRequestHandler
func (*DefaultRequestHandler) ExecuteAuthenticatedRequest ¶ added in v1.0.8
func (h *DefaultRequestHandler) ExecuteAuthenticatedRequest(ctx context.Context, method, url string, body interface{}, useOAuth bool) (*http.Response, error)
ExecuteAuthenticatedRequest makes an HTTP request with automatic authentication
func (*DefaultRequestHandler) ExecuteRequest ¶ added in v1.0.8
func (h *DefaultRequestHandler) ExecuteRequest(ctx context.Context, method, url string, body interface{}, headers map[string]string) (*http.Response, error)
ExecuteRequest makes an HTTP request with custom headers
func (*DefaultRequestHandler) GetBaseURL ¶ added in v1.0.8
func (h *DefaultRequestHandler) GetBaseURL() string
GetBaseURL returns the base URL for API requests
func (*DefaultRequestHandler) PrepareJSONBody ¶ added in v1.0.8
func (h *DefaultRequestHandler) PrepareJSONBody(body interface{}) (*bytes.Buffer, error)
PrepareJSONBody marshals the body into JSON and returns a buffer
func (*DefaultRequestHandler) SetBaseURL ¶ added in v1.0.8
func (h *DefaultRequestHandler) SetBaseURL(baseURL string)
SetBaseURL updates the base URL for API requests
type DefaultResponseParser ¶ added in v1.0.8
type DefaultResponseParser struct {
// contains filtered or unexported fields
}
DefaultResponseParser provides a default implementation of ResponseParser
func NewDefaultResponseParser ¶ added in v1.0.8
func NewDefaultResponseParser(rateLimitHelper *common.RateLimitHelper) *DefaultResponseParser
NewDefaultResponseParser creates a new DefaultResponseParser
func (*DefaultResponseParser) CheckStatusCode ¶ added in v1.0.8
func (p *DefaultResponseParser) CheckStatusCode(resp *http.Response) error
CheckStatusCode validates HTTP status code and returns error if not OK
func (*DefaultResponseParser) ExtractRateLimits ¶ added in v1.0.8
func (p *DefaultResponseParser) ExtractRateLimits(resp *http.Response, model string) *RateLimitInfo
ExtractRateLimits extracts rate limit information from response headers This is a helper method that uses the RateLimitHelper if available
func (*DefaultResponseParser) ParseError ¶ added in v1.0.8
func (p *DefaultResponseParser) ParseError(resp *http.Response) error
ParseError extracts error information from HTTP response
type MockStream ¶
type MockStream struct {
// contains filtered or unexported fields
}
MockStream implementation
func (*MockStream) Close ¶
func (ms *MockStream) Close() error
func (*MockStream) Next ¶
func (ms *MockStream) Next() (types.ChatCompletionChunk, error)
type ProviderComponents ¶ added in v1.0.8
type ProviderComponents struct {
// HTTP client for API requests
HTTPClient *http.Client
// Authentication helper
AuthHelper *auth.AuthHelper
// Configuration helper
ConfigHelper *config.ConfigHelper
// Rate limit helper
RateLimitHelper *common.RateLimitHelper
// Base provider with metrics, logging, etc.
BaseProvider *BaseProvider
// Client-side rate limiter (only set if EnableClientRateLimiting was true)
ClientSideLimiter *rate.Limiter
// Extracted configuration values
BaseURL string
DefaultModel string
Timeout time.Duration
MaxTokens int
MergedConfig types.ProviderConfig
}
ProviderComponents holds initialized components ready for use by providers. This struct packages all common provider infrastructure into a single container, eliminating the need for each provider to initialize these components individually.
type ProviderFactory ¶ added in v1.0.14
type ProviderFactory struct {
// contains filtered or unexported fields
}
ProviderFactory manages provider creation, registration, and testing
func NewProviderFactory ¶ added in v1.0.14
func NewProviderFactory() *ProviderFactory
NewProviderFactory creates a new provider factory
func (*ProviderFactory) CreateProvider ¶ added in v1.0.14
func (f *ProviderFactory) CreateProvider(providerType types.ProviderType, config types.ProviderConfig) (types.Provider, error)
CreateProvider creates a provider instance
func (*ProviderFactory) GetSupportedProviders ¶ added in v1.0.14
func (f *ProviderFactory) GetSupportedProviders() []types.ProviderType
GetSupportedProviders returns a list of supported provider types
func (*ProviderFactory) RegisterProvider ¶ added in v1.0.14
func (f *ProviderFactory) RegisterProvider(providerType types.ProviderType, factoryFunc func(types.ProviderConfig) types.Provider)
RegisterProvider registers a provider factory function
func (*ProviderFactory) TestProvider ¶ added in v1.0.14
func (f *ProviderFactory) TestProvider(ctx context.Context, providerName string, config interface{}) (*types.TestResult, error)
TestProvider performs comprehensive testing of a provider with authentication-aware logic
type ProviderInitConfig ¶ added in v1.0.8
type ProviderInitConfig struct {
// Provider identification
ProviderType types.ProviderType
ProviderName string
// Provider configuration
Config types.ProviderConfig
// HTTP client configuration
HTTPTimeout time.Duration // 0 means use default (10 seconds)
// Logging
Logger *log.Logger // nil means use default logger
// Client-side rate limiting (for providers without rate limit headers)
EnableClientRateLimiting bool
ClientRateLimitRPM int // Requests per minute (0 means no limit)
ClientRateLimitBurst int // Token bucket burst size
ClientRateLimitInterval time.Duration // Rate limit window (default: 1 minute)
}
ProviderInitConfig holds common initialization parameters for providers. This struct centralizes all the configuration data needed to initialize a provider, eliminating duplicate parameter passing across providers.
type RateLimitInfo ¶ added in v1.0.8
type RateLimitInfo struct {
RequestsRemaining int
RequestsLimit int
RequestsReset time.Time
TokensRemaining int
TokensLimit int
TokensReset time.Time
RetryAfter time.Duration
}
RateLimitInfo contains rate limit information extracted from HTTP headers
func ParseRateLimitHeaders ¶ added in v1.0.8
func ParseRateLimitHeaders(headers http.Header) *RateLimitInfo
ParseRateLimitHeaders extracts rate limit info directly from headers (static helper) This is a fallback for cases where RateLimitHelper is not available
type RequestHandler ¶ added in v1.0.8
type RequestHandler interface {
// ExecuteRequest makes an HTTP request with custom headers
ExecuteRequest(ctx context.Context, method, url string, body interface{}, headers map[string]string) (*http.Response, error)
// ExecuteAuthenticatedRequest makes an HTTP request with automatic authentication
// useOAuth determines whether to use OAuth or API key authentication
ExecuteAuthenticatedRequest(ctx context.Context, method, url string, body interface{}, useOAuth bool) (*http.Response, error)
// PrepareJSONBody marshals the body into JSON and returns a buffer
PrepareJSONBody(body interface{}) (*bytes.Buffer, error)
}
RequestHandler interface for executing HTTP requests with authentication Provides a unified way to make API calls across different providers
type ResponseParser ¶ added in v1.0.8
type ResponseParser interface {
// ParseJSON reads and unmarshals JSON response body into target
ParseJSON(resp *http.Response, target interface{}) error
// ParseError extracts error information from HTTP response
ParseError(resp *http.Response) error
// ReadBody reads the entire response body and returns it as a string
ReadBody(resp *http.Response) (string, error)
// CheckStatusCode validates HTTP status code and returns error if not OK
CheckStatusCode(resp *http.Response) error
}
ResponseParser interface for parsing HTTP responses Provides a unified way to handle API responses across different providers