Skip to content

Commit 067aa47

Browse files
committed
Revert "Harden provider routing and implement health failover (awsl-project#421)"
This reverts commit 67ab9e0.
1 parent 3cb29d6 commit 067aa47

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+53
-4272
lines changed

cmd/maxx/main.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"github.com/awsl-project/maxx/internal/core"
2323
"github.com/awsl-project/maxx/internal/executor"
2424
"github.com/awsl-project/maxx/internal/handler"
25-
"github.com/awsl-project/maxx/internal/health"
2625
"github.com/awsl-project/maxx/internal/repository/cached"
2726
"github.com/awsl-project/maxx/internal/repository/sqlite"
2827
"github.com/awsl-project/maxx/internal/router"
@@ -193,10 +192,8 @@ func main() {
193192
}
194193
log.Printf("[Startup] Caches loaded (%v)", time.Since(startupStep))
195194

196-
providerHealthTracker := health.NewTracker()
197-
198195
// Create router
199-
r := router.NewRouter(cachedRouteRepo, cachedProviderRepo, cachedRoutingStrategyRepo, cachedRetryConfigRepo, cachedProjectRepo, providerHealthTracker)
196+
r := router.NewRouter(cachedRouteRepo, cachedProviderRepo, cachedRoutingStrategyRepo, cachedRetryConfigRepo, cachedProjectRepo)
200197

201198
// Initialize provider adapters
202199
startupStep = time.Now()
@@ -282,7 +279,7 @@ func main() {
282279
statsAggregator := stats.NewStatsAggregator(usageStatsRepo)
283280

284281
// Create executor
285-
requestExecutor := executor.NewExecutor(r, proxyRequestRepo, attemptRepo, cachedRetryConfigRepo, cachedSessionRepo, cachedModelMappingRepo, settingRepo, wsHub, projectWaiter, instanceID, statsAggregator, providerHealthTracker)
282+
requestExecutor := executor.NewExecutor(r, proxyRequestRepo, attemptRepo, cachedRetryConfigRepo, cachedSessionRepo, cachedModelMappingRepo, settingRepo, wsHub, projectWaiter, instanceID, statsAggregator)
286283

287284
// Create client adapter
288285
clientAdapter := client.NewAdapter()

internal/adapter/provider/antigravity/adapter.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,6 @@ func (a *AntigravityAdapter) Execute(c *flow.Ctx, provider *domain.Provider) err
239239
proxyErr.IsNetworkError = true // Mark as network error (connection timeout, DNS failure, etc.)
240240
return proxyErr
241241
}
242-
resp.Body = flow.WrapResponseBody(c, resp.Body)
243242

244243
// Check for 401 (token expired) and retry once
245244
if resp.StatusCode == http.StatusUnauthorized {
@@ -274,7 +273,6 @@ func (a *AntigravityAdapter) Execute(c *flow.Ctx, provider *domain.Provider) err
274273
proxyErr.IsNetworkError = true // Mark as network error
275274
return proxyErr
276275
}
277-
resp.Body = flow.WrapResponseBody(c, resp.Body)
278276
}
279277

280278
// Check for error response

internal/adapter/provider/claude/adapter.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ func (a *ClaudeAdapter) Execute(c *flow.Ctx, provider *domain.Provider) error {
135135
proxyErr.IsNetworkError = true
136136
return proxyErr
137137
}
138-
resp.Body = flow.WrapResponseBody(c, resp.Body)
139138
defer resp.Body.Close()
140139

141140
// Handle 401 (token expired) - refresh and retry once
@@ -166,7 +165,6 @@ func (a *ClaudeAdapter) Execute(c *flow.Ctx, provider *domain.Provider) error {
166165
proxyErr.IsNetworkError = true
167166
return proxyErr
168167
}
169-
resp.Body = flow.WrapResponseBody(c, resp.Body)
170168
defer resp.Body.Close()
171169
}
172170

@@ -693,6 +691,7 @@ func extractModelFromResponse(body []byte) string {
693691
return ""
694692
}
695693

694+
696695
var claudeFilteredHeaders = map[string]bool{
697696
// Hop-by-hop headers
698697
"connection": true,

internal/adapter/provider/cliproxyapi_antigravity/adapter.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,6 @@ func (a *CLIProxyAPIAntigravityAdapter) executeNonStream(c *flow.Ctx, w http.Res
127127
if c.Request != nil {
128128
ctx = c.Request.Context()
129129
}
130-
// CPA 非流式接口会缓冲完整响应后一次性返回,无法暴露真实上游首字节。
131-
// 这类路径退回到 TotalTimeout 控制,避免把大响应误判成 first-byte timeout。
132-
flow.DisableFirstByteTimeout(c)
133130

134131
resp, err := a.executor.Execute(ctx, a.authObj, execReq, execOpts)
135132
if err != nil {

internal/adapter/provider/cliproxyapi_codex/adapter.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ import (
1717
"github.com/awsl-project/maxx/internal/domain"
1818
"github.com/awsl-project/maxx/internal/flow"
1919
"github.com/awsl-project/maxx/internal/usage"
20+
"github.com/tidwall/sjson"
2021
"github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy/auth"
2122
"github.com/router-for-me/CLIProxyAPI/v6/sdk/cliproxy/executor"
2223
"github.com/router-for-me/CLIProxyAPI/v6/sdk/exec"
2324
"github.com/router-for-me/CLIProxyAPI/v6/sdk/translator"
24-
"github.com/tidwall/sjson"
2525
)
2626

2727
// TokenCache caches access tokens
@@ -271,9 +271,6 @@ func (a *CLIProxyAPICodexAdapter) executeNonStream(c *flow.Ctx, w http.ResponseW
271271
if c.Request != nil {
272272
ctx = c.Request.Context()
273273
}
274-
// CPA 非流式接口会缓冲完整响应后一次性返回,无法暴露真实上游首字节。
275-
// 这类路径退回到 TotalTimeout 控制,避免把大响应误判成 first-byte timeout。
276-
flow.DisableFirstByteTimeout(c)
277274

278275
resp, err := a.executor.Execute(ctx, a.authObj, execReq, execOpts)
279276
if err != nil {

internal/adapter/provider/codex/adapter.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,6 @@ func (a *CodexAdapter) Execute(c *flow.Ctx, provider *domain.Provider) error {
177177
proxyErr.IsNetworkError = true
178178
return proxyErr
179179
}
180-
resp.Body = flow.WrapResponseBody(c, resp.Body)
181180
defer resp.Body.Close()
182181

183182
// Handle 401 (token expired) - refresh and retry once
@@ -208,7 +207,6 @@ func (a *CodexAdapter) Execute(c *flow.Ctx, provider *domain.Provider) error {
208207
proxyErr.IsNetworkError = true
209208
return proxyErr
210209
}
211-
resp.Body = flow.WrapResponseBody(c, resp.Body)
212210
defer resp.Body.Close()
213211
}
214212

@@ -690,6 +688,7 @@ func extractModelFromResponse(body []byte) string {
690688
return ""
691689
}
692690

691+
693692
// applyCodexHeaders applies headers for Codex API requests
694693
// It follows the CLIProxyAPI pattern: passthrough client headers, use defaults only when missing
695694
func (a *CodexAdapter) applyCodexHeaders(upstreamReq, clientReq *http.Request, accessToken, accountID string, stream bool, cacheID string) {

internal/adapter/provider/custom/adapter.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,6 @@ func (a *CustomAdapter) Execute(c *flow.Ctx, provider *domain.Provider) error {
153153
proxyErr.IsNetworkError = true
154154
return proxyErr
155155
}
156-
resp.Body = flow.WrapResponseBody(c, resp.Body)
157156
defer resp.Body.Close()
158157

159158
// Check for error response

internal/adapter/provider/kiro/adapter.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ func (a *KiroAdapter) Execute(c *flow.Ctx, provider *domain.Provider) error {
137137
proxyErr.IsNetworkError = true
138138
return proxyErr
139139
}
140-
resp.Body = flow.WrapResponseBody(c, resp.Body)
141140
defer resp.Body.Close()
142141

143142
// Check for 401 (token expired) and retry once
@@ -172,7 +171,6 @@ func (a *KiroAdapter) Execute(c *flow.Ctx, provider *domain.Provider) error {
172171
proxyErr.IsNetworkError = true
173172
return proxyErr
174173
}
175-
resp.Body = flow.WrapResponseBody(c, resp.Body)
176174
defer resp.Body.Close()
177175
}
178176

internal/core/database.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import (
1717
"github.com/awsl-project/maxx/internal/event"
1818
"github.com/awsl-project/maxx/internal/executor"
1919
"github.com/awsl-project/maxx/internal/handler"
20-
"github.com/awsl-project/maxx/internal/health"
2120
"github.com/awsl-project/maxx/internal/pricing"
2221
"github.com/awsl-project/maxx/internal/repository"
2322
"github.com/awsl-project/maxx/internal/repository/cached"
@@ -255,14 +254,12 @@ func InitializeServerComponents(
255254
}
256255

257256
log.Printf("[Core] Creating router")
258-
providerHealthTracker := health.NewTracker()
259257
r := router.NewRouter(
260258
repos.CachedRouteRepo,
261259
repos.CachedProviderRepo,
262260
repos.CachedRoutingStrategyRepo,
263261
repos.CachedRetryConfigRepo,
264262
repos.CachedProjectRepo,
265-
providerHealthTracker,
266263
)
267264

268265
log.Printf("[Core] Initializing provider adapters")
@@ -325,7 +322,6 @@ func InitializeServerComponents(
325322
projectWaiter,
326323
instanceID,
327324
statsAggregator,
328-
providerHealthTracker,
329325
)
330326

331327
log.Printf("[Core] Creating client adapter")

internal/domain/backup.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ type BackupRoute struct {
6767
ClientType ClientType `json:"clientType"`
6868
ProviderName string `json:"providerName"`
6969
Position int `json:"position"`
70-
Weight int `json:"weight"`
7170
RetryConfigName string `json:"retryConfigName"` // empty = default
7271
}
7372

0 commit comments

Comments
 (0)