Documentation
¶
Index ¶
- Constants
- Variables
- type ABMetrics
- type ABRouter
- func (r *ABRouter) Completion(ctx context.Context, req *llmpkg.ChatRequest) (*llmpkg.ChatResponse, error)
- func (r *ABRouter) Endpoints() llmpkg.ProviderEndpoints
- func (r *ABRouter) GetMetrics() map[string]*ABMetrics
- func (r *ABRouter) GetReport() map[string]map[string]any
- func (r *ABRouter) HealthCheck(ctx context.Context) (*llmpkg.HealthStatus, error)
- func (r *ABRouter) ListModels(ctx context.Context) ([]llmpkg.Model, error)
- func (r *ABRouter) Name() string
- func (r *ABRouter) Stream(ctx context.Context, req *llmpkg.ChatRequest) (<-chan llmpkg.StreamChunk, error)
- func (r *ABRouter) SupportsNativeFunctionCalling() bool
- func (r *ABRouter) UpdateWeights(weights map[string]int) error
- type ABTestConfig
- type ABVariant
- type APIKeyPool
- func (p *APIKeyPool) GetStats() map[uint]*APIKeyStats
- func (p *APIKeyPool) LoadKeys(ctx context.Context) error
- func (p *APIKeyPool) RecordFailure(ctx context.Context, keyID uint, errMsg string) error
- func (p *APIKeyPool) RecordSuccess(ctx context.Context, keyID uint) error
- func (p *APIKeyPool) SelectKey(ctx context.Context) (*LLMProviderAPIKey, error)
- type APIKeySelectionStrategy
- type APIKeyStats
- type CanaryConfig
- type ChannelModelMapping
- type ChannelProviderConfig
- type ChannelRouteCallbacks
- type ChannelRouteRequest
- type ChannelRouteRetryPolicy
- type ChannelRoutedProvider
- func (p *ChannelRoutedProvider) Completion(ctx context.Context, req *ChatRequest) (*ChatResponse, error)
- func (p *ChannelRoutedProvider) Endpoints() ProviderEndpoints
- func (p *ChannelRoutedProvider) HealthCheck(ctx context.Context) (*HealthStatus, error)
- func (p *ChannelRoutedProvider) ListModels(ctx context.Context) ([]Model, error)
- func (p *ChannelRoutedProvider) Name() string
- func (p *ChannelRoutedProvider) Stream(ctx context.Context, req *ChatRequest) (<-chan StreamChunk, error)
- func (p *ChannelRoutedProvider) SupportsNativeFunctionCalling() bool
- type ChannelRoutedProviderBuilder
- func (b *ChannelRoutedProviderBuilder) Build() (*ChannelRoutedProvider, error)
- func (b *ChannelRoutedProviderBuilder) WithChatProviderFactory(factory ChatProviderFactory) *ChannelRoutedProviderBuilder
- func (b *ChannelRoutedProviderBuilder) WithLegacyProviderFactory(factory ProviderFactory) *ChannelRoutedProviderBuilder
- func (b *ChannelRoutedProviderBuilder) WithLogger(logger *zap.Logger) *ChannelRoutedProviderBuilder
- func (b *ChannelRoutedProviderBuilder) WithProviderTimeout(timeout time.Duration) *ChannelRoutedProviderBuilder
- func (b *ChannelRoutedProviderBuilder) WithRetryPolicy(policy ChannelRouteRetryPolicy) *ChannelRoutedProviderBuilder
- type ChannelRoutedProviderConfig
- type ChannelRoutedProviderOptions
- type ChannelSecret
- type ChannelSelection
- type ChannelSelector
- type ChannelUsageRecord
- type ChatChoice
- type ChatProviderFactory
- type ChatProviderFactoryFunc
- type ChatRequest
- type ChatResponse
- type ChatUsage
- type CooldownController
- type DefaultProviderFactory
- type Error
- type HealthChecker
- type HealthMonitor
- func (m *HealthMonitor) ForceHealthCheck(providerCode string) error
- func (m *HealthMonitor) GetAllProviderStats() []ProviderHealthStats
- func (m *HealthMonitor) GetCurrentQPS(providerCode string) int
- func (m *HealthMonitor) GetHealthScore(providerCode string) float64
- func (m *HealthMonitor) IncrementQPS(providerCode string)
- func (m *HealthMonitor) SetMaxQPS(providerCode string, maxQPS int)
- func (m *HealthMonitor) Stop()
- func (m *HealthMonitor) UpdateProbe(providerCode string, st *HealthStatus, err error)
- type HealthStatus
- type IntentClassification
- type IntentType
- type LLMModel
- type LLMProvider
- type LLMProviderAPIKey
- type LLMProviderModel
- type Message
- type Model
- type ModelCandidate
- type ModelHealth
- type ModelMappingResolver
- type ModelRemapEvent
- type ModelResolution
- type ModelResolver
- type ModelRouter
- type ModelTier
- type MultiProviderRouter
- func (r *MultiProviderRouter) GetAPIKeyPool(providerID uint) *APIKeyPool
- func (r *MultiProviderRouter) GetAPIKeyStats() map[uint]map[uint]*APIKeyStats
- func (r *MultiProviderRouter) InitAPIKeyPools(ctx context.Context) error
- func (r *MultiProviderRouter) RecordAPIKeyUsage(ctx context.Context, providerID uint, keyID uint, success bool, errMsg string) error
- func (r *MultiProviderRouter) SelectAPIKey(ctx context.Context, providerID uint) (*LLMProviderAPIKey, error)
- func (r *MultiProviderRouter) SelectProviderByCodeWithModel(ctx context.Context, providerCode, modelName string, strategy RoutingStrategy) (*ProviderSelection, error)
- func (r *MultiProviderRouter) SelectProviderWithModel(ctx context.Context, modelName string, strategy RoutingStrategy) (*ProviderSelection, error)
- func (r *MultiProviderRouter) Stop()
- type NoopCooldownController
- type NoopQuotaPolicy
- type NoopUsageRecorder
- type PassthroughModelResolver
- type PrefixRouter
- type PrefixRule
- type Provider
- type ProviderConfigSource
- type ProviderEndpoints
- type ProviderFactory
- type ProviderFactoryAdapter
- type ProviderHealthStats
- type ProviderProbeResult
- type ProviderSelection
- type QPSCounter
- type QuotaPolicy
- type RouteCapability
- type RouteConfig
- type RouteMode
- type RouteRequest
- type RouteResult
- type RoutedChatProvider
- func (p *RoutedChatProvider) Completion(ctx context.Context, req *ChatRequest) (*ChatResponse, error)
- func (p *RoutedChatProvider) Endpoints() ProviderEndpoints
- func (p *RoutedChatProvider) HealthCheck(ctx context.Context) (*HealthStatus, error)
- func (p *RoutedChatProvider) ListModels(ctx context.Context) ([]Model, error)
- func (p *RoutedChatProvider) Name() string
- func (p *RoutedChatProvider) Stream(ctx context.Context, req *ChatRequest) (<-chan StreamChunk, error)
- func (p *RoutedChatProvider) SupportsNativeFunctionCalling() bool
- type RoutedChatProviderOptions
- type Router
- type RouterOptions
- type RoutingStrategy
- type ScoringWeights
- type SecretResolver
- type SemanticRouter
- func (r *SemanticRouter) AddProvider(name string, provider llm.Provider)
- func (r *SemanticRouter) AddRoute(intent IntentType, config RouteConfig)
- func (r *SemanticRouter) ClassifyIntent(ctx context.Context, req *llm.ChatRequest) (*IntentClassification, error)
- func (r *SemanticRouter) Route(ctx context.Context, req *llm.ChatRequest) (*llm.ChatResponse, error)
- type SemanticRouterConfig
- type StaticProviderConfigSource
- type StreamChunk
- type TierConfig
- type TierRouter
- type UsageRecorder
- type VendorChatProviderFactory
- type WeightedRouter
- func (r *WeightedRouter) GetCandidates() map[string]*ModelCandidate
- func (r *WeightedRouter) LoadCandidates(cfg *config.LLMConfig)
- func (r *WeightedRouter) Select(ctx context.Context, req *RouteRequest) (*RouteResult, error)
- func (r *WeightedRouter) UpdateHealth(modelID string, health *ModelHealth)
- func (r *WeightedRouter) UpdateWeights(weights []config.RoutingWeight)
Constants ¶
const ( LLMProviderStatusActive = llmcore.LLMProviderStatusActive RoleAssistant = llmcore.RoleAssistant RoleUser = llmcore.RoleUser )
Variables ¶
var ( ErrNoAvailableAPIKey = errors.New("no available API key") ErrAllKeysRateLimited = errors.New("all API keys are rate limited") )
var ( ErrNoAvailableModel = errors.New("no available model") ErrBudgetExceeded = errors.New("budget exceeded") )
Functions ¶
This section is empty.
Types ¶
type ABMetrics ¶
type ABMetrics struct {
VariantName string
TotalRequests int64
SuccessCount int64
FailureCount int64
TotalLatencyMs int64
TotalCost float64
QualityScores []float64
// contains filtered or unexported fields
}
ABMetrics收集了每个变量的请求量度.
func (*ABMetrics) GetAvgLatencyMs ¶
GetAvgLatencyMs 返回以毫秒为单位的平均纬度.
func (*ABMetrics) GetAvgQualityScore ¶
GetAvg质量Score返回平均质量分.
func (*ABMetrics) GetSuccessRate ¶
GetSuccessRate 返回成功率为 0 到 1 之间的值 。
type ABRouter ¶
type ABRouter struct {
// contains filtered or unexported fields
}
ABRouter是一个A/B测试路由器,用于执行lmpkg. 供养者.
func NewABRouter ¶
func NewABRouter(config ABTestConfig, logger *zap.Logger) (*ABRouter, error)
NewAB Router创建了新的A/B测试路由器.
func (*ABRouter) Completion ¶
func (r *ABRouter) Completion(ctx context.Context, req *llmpkg.ChatRequest) (*llmpkg.ChatResponse, error)
完成器件为lmpkg. 供养者.
func (*ABRouter) Endpoints ¶
func (r *ABRouter) Endpoints() llmpkg.ProviderEndpoints
Endpoints 返回第一个变体提供者的端点信息。
func (*ABRouter) GetMetrics ¶
GetMetrics 返回每个变体的指标(深拷贝,避免数据竞争 — N2 修复).
func (*ABRouter) HealthCheck ¶
健康检查设备为lmpkg。 供养者. 所有变体必须健康.
func (*ABRouter) ListModels ¶
ListModels 执行 llmpkg 。 供养者. 它将来自所有变体的模型列表和由模型ID来分解.
func (*ABRouter) Stream ¶
func (r *ABRouter) Stream(ctx context.Context, req *llmpkg.ChatRequest) (<-chan llmpkg.StreamChunk, error)
流式设备 ltmpkg. 供养者.
func (*ABRouter) SupportsNativeFunctionCalling ¶
支持 NativeFunctionCalling 设备 llmpkg 。 供养者. 只有当所有变体都支持时, 才会返回真实 。
type ABTestConfig ¶
type ABTestConfig struct {
// 名称表示此测试 。
Name string
// 变体列出了测试变体.
Variants []ABVariant
// 粘接可以确定同一用户/会话的路径。
StickyRouting bool
// 粘接Key选择请求字段使用的:"user id","session id",或"tenant id".
StickyKey string
// 开始时间是测试开始的时候.
StartTime time.Time
// EndTime是测试结束的时候(零值表示无限期).
EndTime time.Time
}
ABTestConfig持有A/B测试的配置.
type ABVariant ¶
type ABVariant struct {
// 名称是变体标识符(例如"control","experiment a").
Name string
// 提供方是这个变体所使用的LLM提供者.
Provider llmpkg.Provider
// 重量为交通重量(0-100). 所有变相权重必须相加为100.
Weight int
// 元数据为这个变体持有任意的密钥值对.
Metadata map[string]string
}
ABVariant代表A/B测试中的一个变体.
type APIKeyPool ¶
type APIKeyPool struct {
// contains filtered or unexported fields
}
APIKeyPool API Key 池管理器
func NewAPIKeyPool ¶
func NewAPIKeyPool(db *gorm.DB, providerID uint, strategy APIKeySelectionStrategy, logger *zap.Logger) (*APIKeyPool, error)
NewAPIKeyPool 创建 API Key 池
func (*APIKeyPool) LoadKeys ¶
func (p *APIKeyPool) LoadKeys(ctx context.Context) error
LoadKeys 从数据库加载 API Keys
func (*APIKeyPool) RecordFailure ¶
RecordFailure 记录失败使用
func (*APIKeyPool) RecordSuccess ¶
func (p *APIKeyPool) RecordSuccess(ctx context.Context, keyID uint) error
RecordSuccess 记录成功使用
func (*APIKeyPool) SelectKey ¶
func (p *APIKeyPool) SelectKey(ctx context.Context) (*LLMProviderAPIKey, error)
SelectKey 选择一个可用的 API Key
type APIKeySelectionStrategy ¶
type APIKeySelectionStrategy string
APIKeySelectionStrategy API Key 选择策略
const ( StrategyRoundRobin APIKeySelectionStrategy = "round_robin" // 轮询 StrategyWeightedRandom APIKeySelectionStrategy = "weighted_random" // 加权随机 StrategyPriority APIKeySelectionStrategy = "priority" // 优先级 StrategyLeastUsed APIKeySelectionStrategy = "least_used" // 最少使用 )
type APIKeyStats ¶
type APIKeyStats struct {
KeyID uint `json:"key_id"`
Label string `json:"label"`
BaseURL string `json:"base_url"`
Enabled bool `json:"enabled"`
IsHealthy bool `json:"is_healthy"`
TotalRequests int64 `json:"total_requests"`
FailedRequests int64 `json:"failed_requests"`
SuccessRate float64 `json:"success_rate"`
CurrentRPM int `json:"current_rpm"`
CurrentRPD int `json:"current_rpd"`
LastUsedAt *time.Time `json:"last_used_at"`
LastErrorAt *time.Time `json:"last_error_at"`
LastError string `json:"last_error"`
}
APIKeyStats API Key 统计信息
type CanaryConfig ¶
type CanaryConfig = llmcore.CanaryConfig
func NewCanaryConfig ¶
func NewCanaryConfig(db *gorm.DB, logger *zap.Logger) *CanaryConfig
type ChannelModelMapping ¶ added in v1.8.11
type ChannelModelMapping struct {
MappingID string `json:"mapping_id,omitempty"`
ChannelID string `json:"channel_id,omitempty"`
Provider string `json:"provider,omitempty"`
PublicModel string `json:"public_model,omitempty"`
RemoteModel string `json:"remote_model,omitempty"`
BaseURL string `json:"base_url,omitempty"`
Region string `json:"region,omitempty"`
Priority int `json:"priority,omitempty"`
Weight int `json:"weight,omitempty"`
Metadata map[string]string `json:"metadata,omitempty"`
}
ChannelModelMapping describes a channel-specific mapping candidate.
type ChannelProviderConfig ¶ added in v1.8.11
type ChannelProviderConfig struct {
Provider string `json:"provider,omitempty"`
BaseURL string `json:"base_url,omitempty"`
Region string `json:"region,omitempty"`
Model string `json:"model,omitempty"`
Metadata map[string]string `json:"metadata,omitempty"`
Extra map[string]any `json:"extra,omitempty"`
}
ChannelProviderConfig is the runtime provider configuration derived from a route selection.
type ChannelRouteCallbacks ¶ added in v1.8.11
type ChannelRouteCallbacks struct {
OnKeySelected func(ctx context.Context, selection *ChannelSelection)
OnModelRemapped func(ctx context.Context, event *ModelRemapEvent)
OnUsageRecorded func(ctx context.Context, usage *ChannelUsageRecord, err error)
}
ChannelRouteCallbacks exposes non-persistent route events for embedding runtimes.
type ChannelRouteRequest ¶ added in v1.8.11
type ChannelRouteRequest struct {
Capability RouteCapability `json:"capability"`
Mode RouteMode `json:"mode"`
Attempt int `json:"attempt,omitempty"`
TraceID string `json:"trace_id,omitempty"`
RequestedModel string `json:"requested_model,omitempty"`
ProviderHint string `json:"provider_hint,omitempty"`
RoutePolicy string `json:"route_policy,omitempty"`
Region string `json:"region,omitempty"`
Metadata map[string]string `json:"metadata,omitempty"`
Tags []string `json:"tags,omitempty"`
ExcludedChannelIDs []string `json:"excluded_channel_ids,omitempty"`
ExcludedKeyIDs []string `json:"excluded_key_ids,omitempty"`
}
ChannelRouteRequest is the capability-agnostic route planning input.
type ChannelRouteRetryPolicy ¶ added in v1.8.11
type ChannelRouteRetryPolicy struct {
MaxAttempts int
ExcludeFailedChannel bool
ShouldRetry func(ctx context.Context, err error, selection *ChannelSelection) bool
}
ChannelRouteRetryPolicy controls route retry behavior after a selected key/channel fails.
type ChannelRoutedProvider ¶ added in v1.8.11
type ChannelRoutedProvider struct {
// contains filtered or unexported fields
}
ChannelRoutedProvider is a generic routed chat provider that delegates route semantics to injected interfaces.
func BuildChannelRoutedProvider ¶ added in v1.8.11
func BuildChannelRoutedProvider(config ChannelRoutedProviderConfig) (*ChannelRoutedProvider, error)
BuildChannelRoutedProvider is the single public assembly entrypoint for the channel-routed chat chain.
func NewChannelRoutedProvider ¶ added in v1.8.11
func NewChannelRoutedProvider(opts ChannelRoutedProviderOptions) *ChannelRoutedProvider
NewChannelRoutedProvider creates a generic channel-routed chat provider entrypoint.
func (*ChannelRoutedProvider) Completion ¶ added in v1.8.11
func (p *ChannelRoutedProvider) Completion(ctx context.Context, req *ChatRequest) (*ChatResponse, error)
func (*ChannelRoutedProvider) Endpoints ¶ added in v1.8.11
func (p *ChannelRoutedProvider) Endpoints() ProviderEndpoints
func (*ChannelRoutedProvider) HealthCheck ¶ added in v1.8.11
func (p *ChannelRoutedProvider) HealthCheck(ctx context.Context) (*HealthStatus, error)
func (*ChannelRoutedProvider) ListModels ¶ added in v1.8.11
func (p *ChannelRoutedProvider) ListModels(ctx context.Context) ([]Model, error)
func (*ChannelRoutedProvider) Name ¶ added in v1.8.11
func (p *ChannelRoutedProvider) Name() string
func (*ChannelRoutedProvider) Stream ¶ added in v1.8.11
func (p *ChannelRoutedProvider) Stream(ctx context.Context, req *ChatRequest) (<-chan StreamChunk, error)
func (*ChannelRoutedProvider) SupportsNativeFunctionCalling ¶ added in v1.8.11
func (p *ChannelRoutedProvider) SupportsNativeFunctionCalling() bool
type ChannelRoutedProviderBuilder ¶ added in v1.8.11
type ChannelRoutedProviderBuilder struct {
// contains filtered or unexported fields
}
ChannelRoutedProviderBuilder wraps ChannelRoutedProviderConfig so callers can progressively assemble one channel-routed provider chain without manual plumbing at each call site.
func NewChannelRoutedProviderBuilder ¶ added in v1.8.11
func NewChannelRoutedProviderBuilder(config ChannelRoutedProviderConfig) *ChannelRoutedProviderBuilder
NewChannelRoutedProviderBuilder creates the builder wrapper around the single config-driven assembly API. BuildChannelRoutedProvider remains the recommended top-level entrypoint.
func (*ChannelRoutedProviderBuilder) Build ¶ added in v1.8.11
func (b *ChannelRoutedProviderBuilder) Build() (*ChannelRoutedProvider, error)
Build validates the supplied adapters and assembles a ChannelRoutedProvider with sensible defaults.
func (*ChannelRoutedProviderBuilder) WithChatProviderFactory ¶ added in v1.8.11
func (b *ChannelRoutedProviderBuilder) WithChatProviderFactory(factory ChatProviderFactory) *ChannelRoutedProviderBuilder
WithChatProviderFactory overrides the provider factory used during Build.
func (*ChannelRoutedProviderBuilder) WithLegacyProviderFactory ¶ added in v1.8.11
func (b *ChannelRoutedProviderBuilder) WithLegacyProviderFactory(factory ProviderFactory) *ChannelRoutedProviderBuilder
WithLegacyProviderFactory adapts an existing ProviderFactory into the new chat factory contract.
func (*ChannelRoutedProviderBuilder) WithLogger ¶ added in v1.8.11
func (b *ChannelRoutedProviderBuilder) WithLogger(logger *zap.Logger) *ChannelRoutedProviderBuilder
WithLogger overrides the logger used during Build.
func (*ChannelRoutedProviderBuilder) WithProviderTimeout ¶ added in v1.8.11
func (b *ChannelRoutedProviderBuilder) WithProviderTimeout(timeout time.Duration) *ChannelRoutedProviderBuilder
WithProviderTimeout sets the timeout used by the default VendorChatProviderFactory.
func (*ChannelRoutedProviderBuilder) WithRetryPolicy ¶ added in v1.8.11
func (b *ChannelRoutedProviderBuilder) WithRetryPolicy(policy ChannelRouteRetryPolicy) *ChannelRoutedProviderBuilder
WithRetryPolicy overrides the retry policy used during Build.
type ChannelRoutedProviderConfig ¶ added in v1.8.11
type ChannelRoutedProviderConfig struct {
Name string
// RetryPolicy controls route retry behavior after a selected key/channel
// fails. Zero values default to the provider's built-in single-attempt
// policy.
RetryPolicy ChannelRouteRetryPolicy
ModelResolver ModelResolver
ModelMappingResolver ModelMappingResolver
ChannelSelector ChannelSelector
SecretResolver SecretResolver
UsageRecorder UsageRecorder
CooldownController CooldownController
QuotaPolicy QuotaPolicy
ProviderConfigSource ProviderConfigSource
ChatProviderFactory ChatProviderFactory
LegacyProviderFactory ProviderFactory
ProviderTimeout time.Duration
Callbacks ChannelRouteCallbacks
Logger *zap.Logger
}
ChannelRoutedProviderConfig defines the public assembly surface for the channel-routed chat chain. External projects provide business-specific adapters here and then call BuildChannelRoutedProvider once.
type ChannelRoutedProviderOptions ¶ added in v1.8.11
type ChannelRoutedProviderOptions struct {
Name string
MaxAttempts int
ModelResolver ModelResolver
ModelMappingResolver ModelMappingResolver
ChannelSelector ChannelSelector
SecretResolver SecretResolver
UsageRecorder UsageRecorder
CooldownController CooldownController
QuotaPolicy QuotaPolicy
ProviderConfigSource ProviderConfigSource
Factory ChatProviderFactory
RetryPolicy ChannelRouteRetryPolicy
Callbacks ChannelRouteCallbacks
Logger *zap.Logger
}
ChannelRoutedProviderOptions configures the generic channel-routed provider.
type ChannelSecret ¶ added in v1.8.11
type ChannelSecret struct {
APIKey string `json:"api_key,omitempty"`
SecretKey string `json:"secret_key,omitempty"`
Headers map[string]string `json:"headers,omitempty"`
Metadata map[string]string `json:"metadata,omitempty"`
}
ChannelSecret contains resolved secret material for a selected route.
type ChannelSelection ¶ added in v1.8.11
type ChannelSelection struct {
MappingID string `json:"mapping_id,omitempty"`
ChannelID string `json:"channel_id,omitempty"`
KeyID string `json:"key_id,omitempty"`
Provider string `json:"provider,omitempty"`
RemoteModel string `json:"remote_model,omitempty"`
BaseURL string `json:"base_url,omitempty"`
Region string `json:"region,omitempty"`
Priority int `json:"priority,omitempty"`
Weight int `json:"weight,omitempty"`
Metadata map[string]string `json:"metadata,omitempty"`
}
ChannelSelection is the concrete route selected for a request.
type ChannelSelector ¶ added in v1.8.11
type ChannelSelector interface {
SelectChannel(ctx context.Context, request *ChannelRouteRequest, resolution *ModelResolution, mappings []ChannelModelMapping) (*ChannelSelection, error)
}
ChannelSelector chooses the concrete channel/key route for a request.
type ChannelUsageRecord ¶ added in v1.8.11
type ChannelUsageRecord struct {
Capability RouteCapability `json:"capability"`
Mode RouteMode `json:"mode"`
Attempt int `json:"attempt,omitempty"`
TraceID string `json:"trace_id,omitempty"`
ChannelID string `json:"channel_id,omitempty"`
KeyID string `json:"key_id,omitempty"`
Provider string `json:"provider,omitempty"`
RequestedModel string `json:"requested_model,omitempty"`
RemoteModel string `json:"remote_model,omitempty"`
BaseURL string `json:"base_url,omitempty"`
Success bool `json:"success"`
ErrorMessage string `json:"error_message,omitempty"`
LatencyMS int64 `json:"latency_ms,omitempty"`
Usage *ChatUsage `json:"usage,omitempty"`
Metadata map[string]string `json:"metadata,omitempty"`
}
ChannelUsageRecord captures the final outcome of one routed call.
type ChatChoice ¶
type ChatChoice = llmcore.ChatChoice
type ChatProviderFactory ¶ added in v1.8.11
type ChatProviderFactory interface {
CreateChatProvider(ctx context.Context, config ChannelProviderConfig, secret ChannelSecret) (Provider, error)
}
ChatProviderFactory creates chat providers from resolved runtime config and secrets.
type ChatProviderFactoryFunc ¶ added in v1.8.11
type ChatProviderFactoryFunc func(ctx context.Context, config ChannelProviderConfig, secret ChannelSecret) (Provider, error)
ChatProviderFactoryFunc adapts a function into ChatProviderFactory.
func (ChatProviderFactoryFunc) CreateChatProvider ¶ added in v1.8.11
func (f ChatProviderFactoryFunc) CreateChatProvider(ctx context.Context, config ChannelProviderConfig, secret ChannelSecret) (Provider, error)
type ChatRequest ¶
type ChatRequest = llmcore.ChatRequest
type ChatResponse ¶
type ChatResponse = llmcore.ChatResponse
type CooldownController ¶ added in v1.8.11
type CooldownController interface {
Allow(ctx context.Context, request *ChannelRouteRequest, selection *ChannelSelection) error
RecordResult(ctx context.Context, usage *ChannelUsageRecord) error
}
CooldownController filters or updates route cooldown state.
type DefaultProviderFactory ¶
type DefaultProviderFactory struct {
// contains filtered or unexported fields
}
DefaultProviderFactory 是 ProviderFactory 的线程安全默认实现。
func NewDefaultProviderFactory ¶
func NewDefaultProviderFactory() *DefaultProviderFactory
NewDefaultProviderFactory 创建默认工厂实现。
func (*DefaultProviderFactory) CreateProvider ¶
func (f *DefaultProviderFactory) CreateProvider(providerCode string, apiKey string, baseURL string) (Provider, error)
CreateProvider 根据 provider code 创建实例。
func (*DefaultProviderFactory) RegisterProvider ¶
func (f *DefaultProviderFactory) RegisterProvider(code string, constructor func(apiKey, baseURL string) (Provider, error))
RegisterProvider 注册 provider 构造器。
type HealthChecker ¶
type HealthChecker struct {
// contains filtered or unexported fields
}
HealthChecker 健康检查器
func NewHealthChecker ¶
func NewHealthChecker(router *WeightedRouter, interval time.Duration, logger *zap.Logger) *HealthChecker
NewHealthChecker 创建健康检查器
func NewHealthCheckerWithProviders ¶
func NewHealthCheckerWithProviders(router *WeightedRouter, providers map[string]llmpkg.Provider, interval, timeout time.Duration, logger *zap.Logger) *HealthChecker
NewHealthCheckerWithProviders 创建健康检查器(带 Provider 探活能力)。
type HealthMonitor ¶
type HealthMonitor struct {
// contains filtered or unexported fields
}
func NewHealthMonitor ¶
func NewHealthMonitor(db *gorm.DB) *HealthMonitor
func (*HealthMonitor) ForceHealthCheck ¶
func (m *HealthMonitor) ForceHealthCheck(providerCode string) error
ForceHealthCheck 强制立即检查指定 Provider 的健康状态
func (*HealthMonitor) GetAllProviderStats ¶
func (m *HealthMonitor) GetAllProviderStats() []ProviderHealthStats
GetAllProviderStats 获取所有 Provider 的健康统计
func (*HealthMonitor) GetCurrentQPS ¶
func (m *HealthMonitor) GetCurrentQPS(providerCode string) int
GetCurrentQPS 获取当前 QPS
func (*HealthMonitor) GetHealthScore ¶
func (m *HealthMonitor) GetHealthScore(providerCode string) float64
GetHealthScore 获取 Provider 的健康分数 (0-1)
func (*HealthMonitor) IncrementQPS ¶
func (m *HealthMonitor) IncrementQPS(providerCode string)
IncrementQPS 记录一次请求
func (*HealthMonitor) SetMaxQPS ¶
func (m *HealthMonitor) SetMaxQPS(providerCode string, maxQPS int)
SetMaxQPS 设置 Provider 的最大 QPS(0 表示无限制)
func (*HealthMonitor) Stop ¶
func (m *HealthMonitor) Stop()
func (*HealthMonitor) UpdateProbe ¶
func (m *HealthMonitor) UpdateProbe(providerCode string, st *HealthStatus, err error)
type HealthStatus ¶
type HealthStatus = llmcore.HealthStatus
type IntentClassification ¶
type IntentClassification struct {
Intent IntentType `json:"intent"`
Confidence float64 `json:"confidence"`
SubIntents []IntentType `json:"sub_intents,omitempty"`
Entities map[string]string `json:"entities,omitempty"`
Metadata map[string]any `json:"metadata,omitempty"`
}
意向分类代表意向分类的结果.
type IntentType ¶
type IntentType string
intentType代表一种分类意图.
const ( IntentCodeGeneration IntentType = "code_generation" IntentCodeReview IntentType = "code_review" IntentQA IntentType = "question_answering" IntentSummarization IntentType = "summarization" IntentTranslation IntentType = "translation" IntentCreativeWriting IntentType = "creative_writing" IntentDataAnalysis IntentType = "data_analysis" IntentMath IntentType = "math" IntentReasoning IntentType = "reasoning" IntentChat IntentType = "chat" IntentToolUse IntentType = "tool_use" IntentUnknown IntentType = "unknown" )
type LLMProvider ¶
type LLMProvider = llmcore.LLMProvider
type LLMProviderAPIKey ¶
type LLMProviderAPIKey = llmcore.LLMProviderAPIKey
type LLMProviderModel ¶
type LLMProviderModel = llmcore.LLMProviderModel
type ModelCandidate ¶
type ModelCandidate struct {
ProviderCode string
ModelID string
ModelName string
Tags []string
PriceInput float64
PriceOutput float64
MaxTokens int
Weight int
CostWeight float64
LatencyWeight float64
QualityWeight float64
MaxCostPerReq float64 // SLA: 单次请求最大成本
MaxLatencyMs int // SLA: 最大延迟(毫秒)
MinSuccessRate float64 // SLA: 最小成功率
Health *ModelHealth
Enabled bool
}
ModelCandidate 候选模型
type ModelHealth ¶
type ModelHealth struct {
ModelID string
IsHealthy bool
SuccessRate float64 // 成功率 (0-1)
AvgLatencyMs int // 平均延迟
LastError string
LastErrorAt *time.Time
UpdatedAt time.Time
}
ModelHealth 模型健康状态
type ModelMappingResolver ¶ added in v1.8.11
type ModelMappingResolver interface {
ResolveMappings(ctx context.Context, request *ChannelRouteRequest, resolution *ModelResolution) ([]ChannelModelMapping, error)
}
ModelMappingResolver returns mapping candidates for the resolved model.
type ModelRemapEvent ¶ added in v1.8.11
type ModelRemapEvent struct {
RequestedModel string `json:"requested_model,omitempty"`
ResolvedModel string `json:"resolved_model,omitempty"`
RemoteModel string `json:"remote_model,omitempty"`
Provider string `json:"provider,omitempty"`
ChannelID string `json:"channel_id,omitempty"`
KeyID string `json:"key_id,omitempty"`
BaseURL string `json:"base_url,omitempty"`
}
ModelRemapEvent is emitted when a public model is translated to an upstream model.
type ModelResolution ¶ added in v1.8.11
type ModelResolution struct {
RequestedModel string `json:"requested_model,omitempty"`
ResolvedModel string `json:"resolved_model,omitempty"`
ProviderHint string `json:"provider_hint,omitempty"`
Region string `json:"region,omitempty"`
Metadata map[string]string `json:"metadata,omitempty"`
}
ModelResolution normalizes the requested public model before mapping lookup.
type ModelResolver ¶ added in v1.8.11
type ModelResolver interface {
ResolveModel(ctx context.Context, request *ChannelRouteRequest) (*ModelResolution, error)
}
ModelResolver normalizes the public model name before mapping lookup.
type ModelRouter ¶
type ModelRouter interface {
// Select 选择最佳模型
Select(ctx context.Context, req *RouteRequest) (*RouteResult, error)
// UpdateHealth 更新模型健康状态
UpdateHealth(modelID string, health *ModelHealth)
// UpdateWeights 更新路由权重
UpdateWeights(weights []config.RoutingWeight)
}
ModelRouter 模型路由器接口
type ModelTier ¶ added in v1.5.0
type ModelTier string
ModelTier represents a complexity-based model tier.
type MultiProviderRouter ¶
type MultiProviderRouter struct {
*Router // 继承原有路由器
// contains filtered or unexported fields
}
MultiProviderRouter 多提供商路由器(支持同模型多提供商)
func NewMultiProviderRouter ¶
func NewMultiProviderRouter(db *gorm.DB, providerFactory ProviderFactory, opts RouterOptions) *MultiProviderRouter
NewMultiProviderRouter 创建多提供商路由器
func (*MultiProviderRouter) GetAPIKeyPool ¶
func (r *MultiProviderRouter) GetAPIKeyPool(providerID uint) *APIKeyPool
GetAPIKeyPool 获取指定提供商的 API Key 池
func (*MultiProviderRouter) GetAPIKeyStats ¶
func (r *MultiProviderRouter) GetAPIKeyStats() map[uint]map[uint]*APIKeyStats
GetAPIKeyStats 获取所有 API Key 统计信息
func (*MultiProviderRouter) InitAPIKeyPools ¶
func (r *MultiProviderRouter) InitAPIKeyPools(ctx context.Context) error
InitAPIKeyPools 初始化 API Key 池
func (*MultiProviderRouter) RecordAPIKeyUsage ¶
func (r *MultiProviderRouter) RecordAPIKeyUsage(ctx context.Context, providerID uint, keyID uint, success bool, errMsg string) error
RecordAPIKeyUsage 记录 API Key 使用情况
func (*MultiProviderRouter) SelectAPIKey ¶
func (r *MultiProviderRouter) SelectAPIKey(ctx context.Context, providerID uint) (*LLMProviderAPIKey, error)
SelectAPIKey 为指定提供商选择 API Key
func (*MultiProviderRouter) SelectProviderByCodeWithModel ¶
func (r *MultiProviderRouter) SelectProviderByCodeWithModel(ctx context.Context, providerCode, modelName string, strategy RoutingStrategy) (*ProviderSelection, error)
SelectProviderByCodeWithModel selects a provider by explicit provider code and model.
func (*MultiProviderRouter) SelectProviderWithModel ¶
func (r *MultiProviderRouter) SelectProviderWithModel(ctx context.Context, modelName string, strategy RoutingStrategy) (*ProviderSelection, error)
SelectProviderWithModel 根据模型名选择最佳提供商(支持多对多)
type NoopCooldownController ¶ added in v1.8.11
type NoopCooldownController struct{}
NoopCooldownController is the default no-op implementation.
func (NoopCooldownController) Allow ¶ added in v1.8.11
func (NoopCooldownController) Allow(context.Context, *ChannelRouteRequest, *ChannelSelection) error
func (NoopCooldownController) RecordResult ¶ added in v1.8.11
func (NoopCooldownController) RecordResult(context.Context, *ChannelUsageRecord) error
type NoopQuotaPolicy ¶ added in v1.8.11
type NoopQuotaPolicy struct{}
NoopQuotaPolicy is the default no-op implementation.
func (NoopQuotaPolicy) Allow ¶ added in v1.8.11
func (NoopQuotaPolicy) Allow(context.Context, *ChannelRouteRequest, *ChannelSelection) error
func (NoopQuotaPolicy) RecordUsage ¶ added in v1.8.11
func (NoopQuotaPolicy) RecordUsage(context.Context, *ChannelUsageRecord) error
type NoopUsageRecorder ¶ added in v1.8.11
type NoopUsageRecorder struct{}
NoopUsageRecorder is the default no-op implementation.
func (NoopUsageRecorder) RecordUsage ¶ added in v1.8.11
func (NoopUsageRecorder) RecordUsage(context.Context, *ChannelUsageRecord) error
type PassthroughModelResolver ¶ added in v1.8.11
type PassthroughModelResolver struct{}
PassthroughModelResolver keeps the requested model unchanged.
func (PassthroughModelResolver) ResolveModel ¶ added in v1.8.11
func (PassthroughModelResolver) ResolveModel(_ context.Context, request *ChannelRouteRequest) (*ModelResolution, error)
type PrefixRouter ¶
type PrefixRouter struct {
// contains filtered or unexported fields
}
PrefixRouter 前缀路由器 通过模型 ID 前缀快速路由到指定 Provider
func NewPrefixRouter ¶
func NewPrefixRouter(rules []PrefixRule) *PrefixRouter
NewPrefixRouter 创建前缀路由器 rules 应按前缀长度降序排列(最长前缀优先)
func (*PrefixRouter) GetRules ¶
func (r *PrefixRouter) GetRules() []PrefixRule
GetRules 获取所有路由规则(用于调试)
func (*PrefixRouter) RouteByModelID ¶
func (r *PrefixRouter) RouteByModelID(modelID string) (string, bool)
RouteByModelID 根据模型 ID 前缀路由 返回:providerCode, found
type PrefixRule ¶
type PrefixRule struct {
Prefix string // 模型 ID 前缀(如 "gpt-4o", "claude-3-5-sonnet")
Provider string // Provider 代码(如 "openai", "anthropic")
}
PrefixRule 前缀路由规则
type ProviderConfigSource ¶ added in v1.8.11
type ProviderConfigSource interface {
ResolveProviderConfig(ctx context.Context, request *ChannelRouteRequest, selection *ChannelSelection) (*ChannelProviderConfig, error)
}
ProviderConfigSource resolves runtime provider config from the selected route.
type ProviderEndpoints ¶
type ProviderEndpoints = llmcore.ProviderEndpoints
type ProviderFactory ¶
type ProviderFactory interface {
CreateProvider(providerCode string, apiKey string, baseURL string) (Provider, error)
}
ProviderFactory 定义 runtime/router 内部使用的 provider 构造接口。
type ProviderFactoryAdapter ¶ added in v1.8.11
type ProviderFactoryAdapter struct {
Factory ProviderFactory
}
ProviderFactoryAdapter adapts the legacy ProviderFactory into ChatProviderFactory.
func (ProviderFactoryAdapter) CreateChatProvider ¶ added in v1.8.11
func (a ProviderFactoryAdapter) CreateChatProvider(_ context.Context, config ChannelProviderConfig, secret ChannelSecret) (Provider, error)
type ProviderHealthStats ¶
type ProviderProbeResult ¶
type ProviderSelection ¶
type ProviderSelection struct {
Provider Provider
ProviderID uint
APIKeyID uint
ProviderCode string
ModelID uint
ModelName string
RemoteModel string
BaseURL string
IsCanary bool
Strategy RoutingStrategy
}
提供者选择代表选定的提供者
type QPSCounter ¶
type QPSCounter struct {
// contains filtered or unexported fields
}
type QuotaPolicy ¶ added in v1.8.11
type QuotaPolicy interface {
Allow(ctx context.Context, request *ChannelRouteRequest, selection *ChannelSelection) error
RecordUsage(ctx context.Context, usage *ChannelUsageRecord) error
}
QuotaPolicy enforces runtime quota constraints around a selected route.
type RouteCapability ¶ added in v1.8.11
type RouteCapability string
RouteCapability identifies the capability being routed.
const ( RouteCapabilityChat RouteCapability = "chat" RouteCapabilityImage RouteCapability = "image" RouteCapabilityVideo RouteCapability = "video" )
type RouteConfig ¶
type RouteConfig struct {
Intent IntentType `json:"intent"`
PreferredModels []string `json:"preferred_models"`
FallbackModels []string `json:"fallback_models,omitempty"`
MaxTokens int `json:"max_tokens,omitempty"`
Temperature float32 `json:"temperature,omitempty"`
RequiredFeatures []string `json:"required_features,omitempty"` // e.g., "function_calling", "vision"
}
RouteConfig定义了意图的路由配置.
type RouteMode ¶ added in v1.8.11
type RouteMode string
RouteMode distinguishes sync and streaming entrypoints.
type RouteRequest ¶
type RouteRequest struct {
TaskType string // 任务类型:chat/completion/embedding
TenantID string // 租户 ID
Tags []string // 期望的标签:jsonify/cheap/fast
MaxCost float64 // 最大成本预算
MaxLatencyMs int // 最大延迟要求
PreferModel string // 优先模型(可选)
}
RouteRequest 路由请求
type RouteResult ¶
type RouteResult struct {
ProviderCode string
ModelName string
ModelID string
Score float64
Reason string
}
RouteResult 路由结果
type RoutedChatProvider ¶
type RoutedChatProvider struct {
// contains filtered or unexported fields
}
RoutedChatProvider routes chat requests to providers selected by MultiProviderRouter.
func NewRoutedChatProvider ¶
func NewRoutedChatProvider(router *MultiProviderRouter, opts RoutedChatProviderOptions) *RoutedChatProvider
NewRoutedChatProvider creates a routed provider entrypoint.
func (*RoutedChatProvider) Completion ¶
func (p *RoutedChatProvider) Completion(ctx context.Context, req *ChatRequest) (*ChatResponse, error)
func (*RoutedChatProvider) Endpoints ¶
func (p *RoutedChatProvider) Endpoints() ProviderEndpoints
func (*RoutedChatProvider) HealthCheck ¶
func (p *RoutedChatProvider) HealthCheck(ctx context.Context) (*HealthStatus, error)
func (*RoutedChatProvider) ListModels ¶
func (p *RoutedChatProvider) ListModels(ctx context.Context) ([]Model, error)
func (*RoutedChatProvider) Name ¶
func (p *RoutedChatProvider) Name() string
func (*RoutedChatProvider) Stream ¶
func (p *RoutedChatProvider) Stream(ctx context.Context, req *ChatRequest) (<-chan StreamChunk, error)
func (*RoutedChatProvider) SupportsNativeFunctionCalling ¶
func (p *RoutedChatProvider) SupportsNativeFunctionCalling() bool
type RoutedChatProviderOptions ¶
type RoutedChatProviderOptions struct {
DefaultStrategy RoutingStrategy
Fallback Provider
Logger *zap.Logger
TierRouter *TierRouter
}
RoutedChatProviderOptions controls routed provider behavior.
type Router ¶
type Router struct {
// contains filtered or unexported fields
}
Router 是 MultiProviderRouter 的基础结构体,提供 DB、健康监控等基础设施。
type RouterOptions ¶
type RouterOptions struct {
HealthCheckInterval time.Duration
HealthCheckTimeout time.Duration
Logger *zap.Logger
}
路由选项配置路由器
type RoutingStrategy ¶
type RoutingStrategy string
路线战略
const ( StrategyTagBased RoutingStrategy = "tag" StrategyCostBased RoutingStrategy = "cost" StrategyQPSBased RoutingStrategy = "qps" StrategyHealthBased RoutingStrategy = "health" StrategyLatencyBased RoutingStrategy = "latency" StrategyCanary RoutingStrategy = "canary" )
type ScoringWeights ¶ added in v1.5.0
type ScoringWeights struct {
MessageCount int `json:"message_count" yaml:"message_count"`
ContentLength int `json:"content_length" yaml:"content_length"`
ToolCount int `json:"tool_count" yaml:"tool_count"`
SystemPrompt int `json:"system_prompt" yaml:"system_prompt"`
}
ScoringWeights controls how much each complexity factor contributes. Default weight for each factor is 25, giving a total max score of 100. Adjust individual weights to bias the routing toward specific factors.
func DefaultScoringWeights ¶ added in v1.5.0
func DefaultScoringWeights() ScoringWeights
DefaultScoringWeights returns equal weights totaling 100.
type SecretResolver ¶ added in v1.8.11
type SecretResolver interface {
ResolveSecret(ctx context.Context, request *ChannelRouteRequest, selection *ChannelSelection) (*ChannelSecret, error)
}
SecretResolver returns secret material for the selected route.
type SemanticRouter ¶
type SemanticRouter struct {
// contains filtered or unexported fields
}
语义鲁特路线请求基于意向分类.
func NewSemanticRouter ¶
func NewSemanticRouter(classifier llm.Provider, providers map[string]llm.Provider, config SemanticRouterConfig, logger *zap.Logger) *SemanticRouter
新语义路透创造出一个新的语义路由器.
func (*SemanticRouter) AddProvider ¶
func (r *SemanticRouter) AddProvider(name string, provider llm.Provider)
添加提供者 。
func (*SemanticRouter) AddRoute ¶
func (r *SemanticRouter) AddRoute(intent IntentType, config RouteConfig)
添加Route 添加或更新一个路由配置 。
func (*SemanticRouter) ClassifyIntent ¶
func (r *SemanticRouter) ClassifyIntent(ctx context.Context, req *llm.ChatRequest) (*IntentClassification, error)
分类意向对请求的意图进行分类.
func (*SemanticRouter) Route ¶
func (r *SemanticRouter) Route(ctx context.Context, req *llm.ChatRequest) (*llm.ChatResponse, error)
路线将请求和路线分类到适当的提供者.
type SemanticRouterConfig ¶
type SemanticRouterConfig struct {
ClassifierModel string `json:"classifier_model"`
DefaultRoute RouteConfig `json:"default_route"`
Routes map[IntentType]RouteConfig `json:"routes"`
CacheClassifications bool `json:"cache_classifications"`
CacheTTL time.Duration `json:"cache_ttl"`
}
语义路由器 Config 配置语义路由器.
func DefaultSemanticRouterConfig ¶
func DefaultSemanticRouterConfig() SemanticRouterConfig
默认Semantic Router Config 返回合理的默认值 。
type StaticProviderConfigSource ¶ added in v1.8.11
type StaticProviderConfigSource struct{}
StaticProviderConfigSource mirrors provider/baseURL/model information from the selected route.
func (StaticProviderConfigSource) ResolveProviderConfig ¶ added in v1.8.11
func (StaticProviderConfigSource) ResolveProviderConfig(_ context.Context, _ *ChannelRouteRequest, selection *ChannelSelection) (*ChannelProviderConfig, error)
type StreamChunk ¶
type StreamChunk = llmcore.StreamChunk
type TierConfig ¶ added in v1.5.0
type TierConfig struct {
Enabled bool `json:"enabled" yaml:"enabled"`
NanoModels []string `json:"nano_models" yaml:"nano_models"`
StandardModels []string `json:"standard_models" yaml:"standard_models"`
FrontierModels []string `json:"frontier_models" yaml:"frontier_models"`
NanoThreshold int `json:"nano_threshold" yaml:"nano_threshold"`
FrontierThreshold int `json:"frontier_threshold" yaml:"frontier_threshold"`
Weights ScoringWeights `json:"weights" yaml:"weights"`
}
TierConfig maps tiers to model names.
func DefaultTierConfig ¶ added in v1.5.0
func DefaultTierConfig() TierConfig
DefaultTierConfig returns sensible defaults.
type TierRouter ¶ added in v1.5.0
type TierRouter struct {
// contains filtered or unexported fields
}
TierRouter scores request complexity and selects model tier.
func NewTierRouter ¶ added in v1.5.0
func NewTierRouter(config TierConfig, logger *zap.Logger) *TierRouter
NewTierRouter creates a tier router.
func (*TierRouter) ResolveModel ¶ added in v1.5.0
func (t *TierRouter) ResolveModel(req *ChatRequest) string
ResolveModel applies tier routing to select the optimal model. Returns the original model if tier routing is disabled.
func (*TierRouter) ScoreComplexity ¶ added in v1.5.0
func (t *TierRouter) ScoreComplexity(req *ChatRequest) int
ScoreComplexity returns a complexity score for a chat request. Each factor produces a raw 0-25 value, then scales by its configured weight. With default weights (all 25), the score range is 0-100.
func (*TierRouter) SelectModel ¶ added in v1.5.0
func (t *TierRouter) SelectModel(tier ModelTier, originalModel string) string
SelectModel picks the first available model for a tier, preferring models that match the family of the originally requested model.
func (*TierRouter) SelectTier ¶ added in v1.5.0
func (t *TierRouter) SelectTier(score int) ModelTier
SelectTier maps a complexity score to a model tier.
type UsageRecorder ¶ added in v1.8.11
type UsageRecorder interface {
RecordUsage(ctx context.Context, usage *ChannelUsageRecord) error
}
UsageRecorder persists final route usage outcomes.
type VendorChatProviderFactory ¶ added in v1.8.11
VendorChatProviderFactory creates providers through llm/providers/vendor.
func (VendorChatProviderFactory) CreateChatProvider ¶ added in v1.8.11
func (f VendorChatProviderFactory) CreateChatProvider(_ context.Context, config ChannelProviderConfig, secret ChannelSecret) (Provider, error)
CreateChatProvider builds a provider from resolved route config and secret material.
func (VendorChatProviderFactory) CreateProvider ¶ added in v1.8.11
func (f VendorChatProviderFactory) CreateProvider(providerCode string, apiKey string, baseURL string) (Provider, error)
CreateProvider keeps VendorChatProviderFactory compatible with the legacy ProviderFactory.
type WeightedRouter ¶
type WeightedRouter struct {
// contains filtered or unexported fields
}
WeightedRouter 加权路由器实现
func NewWeightedRouter ¶
func NewWeightedRouter(logger *zap.Logger, prefixRules []config.PrefixRule) *WeightedRouter
NewWeightedRouter 创建加权路由器
func (*WeightedRouter) GetCandidates ¶
func (r *WeightedRouter) GetCandidates() map[string]*ModelCandidate
GetCandidates 获取所有候选模型(用于调试)
func (*WeightedRouter) LoadCandidates ¶
func (r *WeightedRouter) LoadCandidates(cfg *config.LLMConfig)
LoadCandidates 加载候选模型
func (*WeightedRouter) Select ¶
func (r *WeightedRouter) Select(ctx context.Context, req *RouteRequest) (*RouteResult, error)
Select 选择最佳模型
func (*WeightedRouter) UpdateHealth ¶
func (r *WeightedRouter) UpdateHealth(modelID string, health *ModelHealth)
UpdateHealth 更新模型健康状态
func (*WeightedRouter) UpdateWeights ¶
func (r *WeightedRouter) UpdateWeights(weights []config.RoutingWeight)
UpdateWeights 更新路由权重