(t *testing.T)
| 127 | } |
| 128 | |
| 129 | func TestModelFallbackManager_BasicFallback(t *testing.T) { |
| 130 | // 创建 mock factory |
| 131 | factory := NewMockProviderFactory() |
| 132 | |
| 133 | // 设置第一个模型失败 |
| 134 | factory.SetProvider("openai/gpt-4", &MockProvider{ |
| 135 | name: "openai/gpt-4", |
| 136 | shouldFail: true, |
| 137 | failCount: 999, // 总是失败 |
| 138 | }) |
| 139 | |
| 140 | // 第二个模型成功 |
| 141 | factory.SetProvider("anthropic/claude-3", &MockProvider{ |
| 142 | name: "anthropic/claude-3", |
| 143 | }) |
| 144 | |
| 145 | deps := &Dependencies{ |
| 146 | ProviderFactory: factory, |
| 147 | } |
| 148 | |
| 149 | // 创建降级配置 |
| 150 | fallbacks := []*ModelFallback{ |
| 151 | { |
| 152 | Config: &types.ModelConfig{ |
| 153 | Provider: "openai", |
| 154 | Model: "gpt-4", |
| 155 | }, |
| 156 | MaxRetries: 1, |
| 157 | Enabled: true, |
| 158 | Priority: 1, |
| 159 | }, |
| 160 | { |
| 161 | Config: &types.ModelConfig{ |
| 162 | Provider: "anthropic", |
| 163 | Model: "claude-3", |
| 164 | }, |
| 165 | MaxRetries: 0, |
| 166 | Enabled: true, |
| 167 | Priority: 2, |
| 168 | }, |
| 169 | } |
| 170 | |
| 171 | manager, err := NewModelFallbackManager(fallbacks, deps) |
| 172 | if err != nil { |
| 173 | t.Fatalf("Failed to create manager: %v", err) |
| 174 | } |
| 175 | |
| 176 | // 执行请求 |
| 177 | ctx := context.Background() |
| 178 | messages := []types.Message{ |
| 179 | {Role: "user", Content: "Hello"}, |
| 180 | } |
| 181 | |
| 182 | resp, err := manager.Complete(ctx, messages, nil) |
| 183 | if err != nil { |
| 184 | t.Fatalf("Complete failed: %v", err) |
| 185 | } |
| 186 |
nothing calls this directly
no test coverage detected