MCPcopy Create free account
hub / github.com/astercloud/aster / NewModelFallbackManager

Function NewModelFallbackManager

pkg/agent/model_fallback.go:60–101  ·  view source on GitHub ↗

NewModelFallbackManager 创建模型降级管理器

(fallbacks []*ModelFallback, deps *Dependencies)

Source from the content-addressed store, hash-verified

58
59// NewModelFallbackManager 创建模型降级管理器
60func NewModelFallbackManager(fallbacks []*ModelFallback, deps *Dependencies) (*ModelFallbackManager, error) {
61 if len(fallbacks) == 0 {
62 return nil, errors.New("at least one model fallback is required")
63 }
64
65 // 按优先级排序
66 sortedFallbacks := make([]*ModelFallback, len(fallbacks))
67 copy(sortedFallbacks, fallbacks)
68
69 // 简单的冒泡排序(因为通常模型数量不多)
70 for i := range len(sortedFallbacks) - 1 {
71 for j := range len(sortedFallbacks) - i - 1 {
72 if sortedFallbacks[j].Priority > sortedFallbacks[j+1].Priority {
73 sortedFallbacks[j], sortedFallbacks[j+1] = sortedFallbacks[j+1], sortedFallbacks[j]
74 }
75 }
76 }
77
78 // 初始化 Provider 实例
79 for _, fb := range sortedFallbacks {
80 if !fb.Enabled {
81 continue
82 }
83
84 prov, err := deps.ProviderFactory.Create(fb.Config)
85 if err != nil {
86 fallbackLog.Warn(context.Background(), "failed to create provider", map[string]any{"provider": fb.Config.Provider, "model": fb.Config.Model, "error": err})
87 fb.Enabled = false
88 continue
89 }
90 fb.provider = prov
91 }
92
93 return &ModelFallbackManager{
94 fallbacks: sortedFallbacks,
95 deps: deps,
96 currentIndex: 0,
97 stats: &FallbackStats{
98 ModelUsageCount: make(map[string]int64),
99 },
100 }, nil
101}
102
103// Complete 执行非流式请求,支持自动降级
104func (m *ModelFallbackManager) Complete(

Calls 3

copyFunction · 0.85
CreateMethod · 0.65
WarnMethod · 0.65