mirror of
https://github.com/Wei-Shaw/sub2api.git
synced 2026-10-14 12:02:27 +08:00
客户端在响应提交前断开时,只有排队/换号阶段和 OpenAI 的兜底写入会标 499。 Claude 非流式与 Gemini 的 Chat Completions / Messages / Responses 兼容入口 在等待上游时断开,由 GatewayHandler.ensureForwardErrorResponse 补写 502; Gemini 原生入口什么都不写,落成 200 并被 ops 记成一条 provider 的 "Recovered upstream error";Antigravity 回写 502。这些行都按上游失败计入 SLA 与上游错误数。 - GatewayHandler.ensureForwardErrorResponse 补客户端断开检查,与 OpenAI 版一致 - GatewayHandler 的 Messages / ChatCompletions / Responses 与 Gemini 原生入口: 首次选号失败时先判断客户端断开;ChatCompletions / Responses 循环开头改用 failoverClientGone,不再直接 return 落成 200 - Gemini 原生入口:forward 失败时补 499 标记;并发槽错误改走 concurrencyErrorResponse 统一映射(断开 499、排队满/超时 429、其余 503) - Antigravity 上游响应前断开回写 499;googleapi 与 Antigravity 的 Google 错误 格式把 499 映射为 CANCELLED - OpenAI alpha search 非 failover 错误分支补断开检查 - Claude / Gemini / OpenAI 传输层错误:请求 context 已取消时不记 ops 上游事件 - ops:IgnoreContextCanceled 开启时跳过没有上游错误上下文的 499;带上游错误的 499(上游失败后客户端没等到换号结果就离开)仍按上游失败落库 计费不变:Gemini 流式中途断开的用量处理不在本次范围。新增 handler/service 单测覆盖各入口的断开场景与 ops 过滤规则。
29 lines
725 B
Go
29 lines
725 B
Go
package googleapi
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
)
|
|
|
|
func TestHTTPStatusToGoogleStatus(t *testing.T) {
|
|
cases := []struct {
|
|
status int
|
|
want string
|
|
}{
|
|
{http.StatusBadRequest, "INVALID_ARGUMENT"},
|
|
{http.StatusUnauthorized, "UNAUTHENTICATED"},
|
|
{http.StatusForbidden, "PERMISSION_DENIED"},
|
|
{http.StatusNotFound, "NOT_FOUND"},
|
|
{http.StatusTooManyRequests, "RESOURCE_EXHAUSTED"},
|
|
{499, "CANCELLED"},
|
|
{http.StatusBadGateway, "INTERNAL"},
|
|
{http.StatusServiceUnavailable, "INTERNAL"},
|
|
{http.StatusConflict, "UNKNOWN"},
|
|
}
|
|
for _, tc := range cases {
|
|
if got := HTTPStatusToGoogleStatus(tc.status); got != tc.want {
|
|
t.Errorf("HTTPStatusToGoogleStatus(%d) = %q, want %q", tc.status, got, tc.want)
|
|
}
|
|
}
|
|
}
|