base

package
v1.0.13 Latest Latest
Warning

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

Go to latest
Published: Nov 30, 2025 License: MIT Imports: 16 Imported by: 0

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.

Package base provides common functionality and utilities for AI providers.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

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

func (p *BaseProvider) GetModels(ctx context.Context) ([]types.Model, error)

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

func (p *BaseProvider) Logout(ctx context.Context) error

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

func (b *BaseProviderStub) GetModels(ctx context.Context) ([]types.Model, error)

GetModels returns models from the base provider

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

func (b *BaseProviderStub) Logout(ctx context.Context) error

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

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

func (*DefaultResponseParser) ParseJSON added in v1.0.8

func (p *DefaultResponseParser) ParseJSON(resp *http.Response, target interface{}) error

ParseJSON reads and unmarshals JSON response body into target

func (*DefaultResponseParser) ReadBody added in v1.0.8

func (p *DefaultResponseParser) ReadBody(resp *http.Response) (string, error)

ReadBody reads the entire response body and returns it as a string

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.

func InitializeProviderComponents added in v1.0.8

func InitializeProviderComponents(cfg ProviderInitConfig) (*ProviderComponents, error)

InitializeProviderComponents sets up common provider infrastructure using the template method pattern. This function eliminates ~50 lines of repeated initialization code from each provider.

This factory handles: - HTTP client creation with timeout - Configuration helper setup - Configuration merging with defaults - Authentication helper setup (API keys and OAuth) - Rate limit helper setup - Base provider creation with metrics and logging - Client-side rate limiting (for providers without server-side headers)

Example usage:

components, err := base.InitializeProviderComponents(base.ProviderInitConfig{
    ProviderType:   types.ProviderTypeQwen,
    ProviderName:   "qwen",
    Config:         config,
    HTTPTimeout:    10 * time.Second,
})
if err != nil {
    return nil, err
}

p := &QwenProvider{
    BaseProvider:    components.BaseProvider,
    httpClient:      components.HTTPClient,
    authHelper:      components.AuthHelper,
    rateLimitHelper: components.RateLimitHelper,
}

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

Jump to

Keyboard shortcuts

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