feeeei
f4f8ff04db
fix(gateway): 客户端断开统一标记 499,不再被记成 502/200 上游错误
客户端在响应提交前断开时,只有排队/换号阶段和 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 过滤规则。
2026-09-26 17:13:10 +08:00
..
2026-09-23 15:26:35 +08:00
2026-09-23 15:26:44 +08:00
2026-05-26 10:49:20 +08:00
2026-02-02 22:13:50 +08:00
2026-08-09 22:42:51 +08:00
2026-08-09 22:42:51 +08:00
2026-08-06 20:34:37 +08:00
2026-09-05 16:05:17 +08:00
2026-05-19 15:27:47 +08:00
2026-05-19 15:27:47 +08:00
2026-05-19 15:27:47 +08:00
2026-08-04 20:57:15 +08:00
2026-09-23 01:24:59 +08:00
2026-08-04 20:57:15 +08:00
2026-08-04 15:09:29 +08:00
2026-07-16 13:47:50 +08:00
2026-08-04 20:57:15 +08:00
2026-08-04 20:57:15 +08:00
2026-08-04 20:57:15 +08:00
2026-04-22 12:30:00 +08:00
2026-08-09 15:53:40 +08:00
2026-08-07 03:09:57 +08:00
2026-05-21 15:19:29 +08:00
2026-05-21 15:19:29 +08:00
2026-08-24 12:02:53 +08:00
2026-07-28 17:21:32 +08:00
2026-05-26 10:49:20 +08:00
2026-08-04 20:57:15 +08:00
2026-09-20 16:41:49 +08:00
2026-09-20 16:41:49 +08:00
2026-09-05 16:05:17 +08:00
2026-08-18 04:14:15 +00:00
2026-08-30 09:28:40 +08:00
2026-08-30 09:28:40 +08:00
2026-07-15 22:22:51 +08:00
2026-09-08 18:50:06 +08:00
2026-09-02 20:16:57 +08:00
2026-09-26 17:13:10 +08:00
2026-09-03 12:48:02 +08:00
2026-07-23 09:20:52 +08:00
2026-09-11 10:05:24 +08:00
2026-09-17 04:14:14 +09:00
2026-08-01 22:39:33 +08:00
2026-08-20 18:16:38 -07:00
2026-08-20 18:16:38 -07:00
2026-05-26 10:49:20 +08:00
2026-09-26 17:13:10 +08:00
2026-09-26 17:13:10 +08:00
2026-09-26 17:13:10 +08:00
2026-07-27 15:20:03 +00:00
2026-09-26 17:13:10 +08:00
2026-03-15 16:21:49 +08:00
2026-07-13 11:35:46 +08:00
2026-07-27 15:20:03 +00:00
2026-09-26 17:13:10 +08:00
2026-02-07 22:14:07 +08:00
2026-07-13 15:32:42 +08:00
2026-09-08 19:12:37 +08:00
2026-07-14 14:55:30 +08:00
2026-09-08 19:12:37 +08:00
2026-07-23 09:20:52 +08:00
2026-07-15 22:42:53 +08:00
2026-09-15 16:50:46 +08:00
2026-09-10 15:57:17 +08:00
2026-09-23 11:27:49 +08:00
2026-08-13 07:49:19 +08:00
2026-02-07 17:12:15 +08:00
2026-09-26 17:13:10 +08:00
2026-09-15 16:50:46 +08:00
2026-09-15 16:50:46 +08:00
2026-09-26 17:13:10 +08:00
2026-08-13 08:38:10 +08:00
2026-08-20 09:50:23 -07:00
2026-09-17 04:14:14 +09:00
2026-08-07 16:29:57 +08:00
2026-09-17 04:14:14 +09:00
2026-08-24 09:03:37 +08:00
2026-02-23 12:45:37 +08:00
2026-02-23 12:45:37 +08:00
2026-05-26 10:49:20 +08:00
2026-05-05 03:26:54 +08:00
2026-07-20 15:20:51 +08:00
2026-07-15 19:57:37 -07:00
2026-07-19 00:56:21 -07:00
2026-02-12 19:01:09 +08:00
2026-09-08 13:37:53 +08:00
2026-09-08 13:37:53 +08:00
2026-09-01 15:18:30 +08:00
2026-09-01 15:18:30 +08:00
2026-09-26 17:13:10 +08:00
2026-09-09 12:48:57 +08:00
2026-07-16 00:52:26 +08:00
2026-09-03 10:51:12 +08:00
2026-08-31 21:04:29 +08:00
2026-09-07 19:44:03 +08:00
2026-09-05 19:58:47 +08:00
2026-09-03 11:39:23 +08:00
2026-09-03 10:51:12 +08:00
2026-09-11 15:39:13 +08:00
2026-08-14 18:18:53 +08:00
2026-08-14 18:18:53 +08:00
2026-08-20 22:01:20 -07:00
2026-07-23 00:06:04 +08:00
2026-09-06 20:38:17 +08:00
2026-09-05 15:32:29 +08:00
2026-03-15 22:13:42 +08:00
2026-07-15 13:01:16 +08:00
2026-09-23 11:19:17 +08:00
2026-09-23 08:17:48 +08:00
2026-07-26 13:33:56 +08:00
2026-07-26 13:33:56 +08:00
2026-05-28 22:44:25 +08:00
2026-08-19 18:51:21 +08:00
2026-09-05 16:05:17 +08:00
2026-07-17 15:29:14 +08:00
2026-07-15 04:20:11 +08:00
2026-09-21 10:23:10 +08:00
2026-05-05 03:26:54 +08:00
2026-09-11 15:57:09 +08:00
2026-09-12 14:34:31 +08:00
2026-08-19 04:40:32 +00:00
2026-08-19 04:40:32 +00:00
2026-09-07 18:33:39 +08:00
2026-09-10 15:57:17 +08:00
2026-08-14 16:23:52 +08:00
2026-08-01 22:39:33 +08:00
2026-06-28 11:13:09 +08:00
2026-09-07 17:58:20 +08:00
2026-07-15 09:29:05 +08:00
2026-07-19 18:49:08 +08:00
2026-08-20 22:01:20 -07:00
2026-09-04 10:14:29 +08:00
2026-06-03 14:18:12 +08:00
2026-06-03 14:18:12 +08:00
2026-08-28 13:17:43 +08:00
2026-08-17 19:45:07 +08:00
2026-08-27 21:50:53 +08:00
2026-08-13 08:37:57 +08:00
2026-08-13 08:37:57 +08:00
2026-08-20 22:01:20 -07:00
2026-07-18 00:11:18 +08:00
2026-06-12 01:47:01 +08:00
2026-09-26 17:13:10 +08:00
2026-09-26 17:13:10 +08:00
2026-08-19 23:13:40 -07:00
2026-07-23 09:19:25 +08:00
2026-05-12 15:21:31 +08:00
2026-06-10 14:16:51 +08:00
2026-08-04 15:09:29 +08:00
2026-08-04 20:57:15 +08:00
2026-07-13 15:22:39 +08:00
2026-07-22 19:18:04 +08:00
2026-05-11 11:17:26 +08:00
2026-05-11 11:17:26 +08:00
2026-09-16 13:19:15 +08:00
2026-09-16 13:19:15 +08:00
2025-12-31 08:50:12 +08:00
2026-07-09 11:15:52 +08:00
2026-07-07 13:53:39 +08:00
2026-07-07 13:53:39 +08:00
2026-08-19 09:03:37 -07:00
2026-08-19 09:03:37 -07:00
2026-07-17 00:39:39 +08:00
2026-07-17 00:39:39 +08:00
2026-08-11 11:56:46 +08:00
2026-08-11 11:56:46 +08:00
2026-07-17 00:39:39 +08:00
2026-07-17 00:39:39 +08:00
2026-09-17 04:14:14 +09:00
2026-09-17 04:14:14 +09:00
2026-08-06 20:34:37 +08:00
2026-09-11 00:50:17 +08:00
2026-09-14 11:45:53 +08:00
2026-09-14 11:45:53 +08:00
2025-12-26 16:45:40 +08:00
2026-07-16 16:49:08 +08:00
2026-06-05 14:00:57 +08:00
2026-08-28 23:32:11 +08:00
2026-04-09 18:14:28 +08:00
2026-08-28 23:32:11 +08:00
2026-08-07 17:58:23 +08:00
2026-08-01 11:29:58 +08:00
2026-07-28 17:21:32 +08:00
2026-05-26 10:49:20 +08:00
2026-08-19 23:13:40 -07:00
2026-05-26 10:49:20 +08:00
2026-09-23 15:26:35 +08:00