li
cbf2be05a3
fix(openai): 非流式生图脱钩上游 context,客户端断开不再导致图已出却不扣费
forwardOpenAIImagesAPIKey 走的是 detachStreamUpstreamContext(ctx, parsed.Stream),
该函数在非流式时原样返回请求 context(gateway_usage_billing.go:488)。于是客户端
中途断开会连带取消已经在出图的上游调用:上游那边图已生成并计费,网关这边拿到
context canceled,记 502,result 为 nil,handler 的 result.ImageCount > 0 兜底
无法命中,本次请求不产生扣费。
生图是长耗时(数十秒)且上游侧已产生实际成本的操作,与普通非流式 chat 不同:
提前取消并不能省下上游开销,只会丢掉已付费的产出。
同一端点的 OAuth 分支 forwardOpenAIImagesOAuth(openai_images_responses.go:1690)
以及同属媒体生成的 grok_media.go 本来就用无条件脱钩的 detachUpstreamContext,
OpenAI 网关侧 13 个转发点里只有这一处是例外。这里对齐。
Fixes #5411
2026-08-08 15:24:34 +08:00
..
2026-08-07 09:40:11 -04:00
2026-08-01 22:11:09 +08:00
2026-07-26 01:56:10 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 09:56:03 +08:00
2026-08-05 22:35:01 +08:00
2026-08-01 22:11:10 +08:00
2026-08-01 22:11:10 +08:00
2026-07-25 12:50:46 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:33 +08:00
2026-07-28 17:21:32 +08:00
2026-08-01 22:11:09 +08:00
2026-08-01 21:15:44 +08:00
2026-07-28 17:21:32 +08:00
2026-08-01 22:11:09 +08:00
2026-07-28 17:21:32 +08:00
2026-07-25 22:20:27 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-08-01 22:39:31 +08:00
2026-07-28 17:21:32 +08:00
2026-08-04 20:57:15 +08:00
2026-08-04 20:57:15 +08:00
2026-08-07 09:40:11 -04:00
2026-08-07 09:40:11 -04:00
2026-07-26 20:23:50 +09:00
2026-08-07 09:40:11 -04:00
2026-08-07 09:40:11 -04:00
2026-08-07 09:40:11 -04:00
2026-08-07 09:40:11 -04:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:33 +08:00
2026-08-01 21:15:44 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 20:02:52 +08:00
2026-07-26 10:14:55 -04:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-07-25 19:40:53 +08:00
2026-08-04 20:57:15 +08:00
2026-07-28 17:21:32 +08:00
2026-08-04 15:09:29 +08:00
2026-08-04 20:57:15 +08:00
2026-07-25 11:22:42 +08:00
2026-07-31 11:49:30 +08:00
2026-07-31 11:49:30 +08:00
2026-08-04 19:14:28 +08:00
2026-08-04 19:14:28 +08:00
2026-08-01 10:32:43 +08:00
2026-08-01 10:32:43 +08:00
2026-07-25 11:22:42 +08:00
2026-07-31 23:12:22 +08:00
2026-07-31 23:12:22 +08:00
2026-07-31 23:12:22 +08:00
2026-07-31 23:12:22 +08:00
2026-08-01 22:11:09 +08:00
2026-08-01 22:11:09 +08:00
2026-08-07 09:40:11 -04:00
2026-08-06 20:34:37 +08:00
2026-07-28 12:28:46 +08:00
2026-07-28 12:28:46 +08:00
2026-07-31 23:12:02 +08:00
2026-07-31 23:12:02 +08:00
2026-07-31 11:58:28 +08:00
2026-08-07 09:40:11 -04:00
2026-07-27 19:28:45 +08:00
2026-07-26 21:20:37 +08:00
2026-07-26 21:20:37 +08:00
2026-07-27 08:19:19 +08:00
2026-07-27 08:19:19 +08:00
2026-08-01 11:29:58 +08:00
2026-08-07 09:40:11 -04:00
2026-07-25 21:59:20 +07:00
2026-08-01 22:39:33 +08:00
2026-08-01 22:39:33 +08:00
2026-07-27 19:28:45 +08:00
2026-08-02 20:50:13 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:32 +08:00
2026-08-07 09:40:11 -04:00
2026-08-07 09:40:11 -04:00
2026-08-07 09:40:11 -04:00
2026-07-31 16:11:45 +08:00
2026-07-26 09:52:47 +08:00
2026-07-27 13:19:00 +09:00
2026-08-07 09:40:11 -04:00
2026-07-31 16:11:45 +08:00
2026-07-31 16:11:45 +08:00
2026-08-06 04:30:10 +08:00
2026-08-01 18:45:33 +08:00
2026-08-01 22:39:33 +08:00
2026-08-01 22:39:33 +08:00
2026-07-31 15:04:56 +08:00
2026-07-31 15:04:56 +08:00
2026-08-07 20:49:39 +08:00
2026-07-28 12:28:46 +08:00
2026-07-25 21:59:20 +07:00
2026-07-25 18:34:37 +08:00
2026-08-04 17:59:16 +08:00
2026-08-04 17:59:16 +08:00
2026-07-25 15:37:05 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 21:54:11 +08:00
2026-08-01 22:39:32 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 22:42:33 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 09:56:03 +08:00
2026-08-04 10:51:04 +08:00
2026-08-07 21:47:54 +08:00
2026-08-01 10:01:47 +08:00
2026-08-07 09:56:03 +08:00
2026-07-27 14:54:01 +08:00
2026-08-01 18:45:33 +08:00
2026-08-07 09:40:11 -04:00
2026-08-07 09:40:11 -04:00
2026-08-06 20:31:56 +08:00
2026-08-06 20:31:56 +08:00
2026-08-08 10:58:53 +08:00
2026-08-07 20:37:56 +08:00
2026-08-07 09:56:03 +08:00
2026-07-31 18:57:43 +08:00
2026-07-31 18:57:43 +08:00
2026-08-07 20:41:23 +08:00
2026-08-07 20:41:23 +08:00
2026-08-01 21:15:44 +08:00
2026-08-01 21:15:44 +08:00
2026-08-07 09:40:11 -04:00
2026-08-08 10:58:53 +08:00
2026-08-02 20:50:13 +08:00
2026-07-31 21:21:13 +08:00
2026-08-07 21:47:54 +08:00
2026-08-07 22:55:42 +08:00
2026-08-07 23:11:20 +08:00
2026-08-07 09:56:03 +08:00
2026-07-31 21:21:13 +08:00
2026-08-08 10:58:53 +08:00
2026-08-07 09:40:11 -04:00
2026-08-07 20:37:56 +08:00
2026-08-07 09:40:11 -04:00
2026-08-07 21:47:53 +08:00
2026-08-08 15:24:34 +08:00
2026-08-08 15:24:34 +08:00
2026-07-25 12:50:46 +08:00
2026-07-27 22:22:46 +08:00
2026-07-25 12:51:20 +08:00
2026-07-25 12:50:46 +08:00
2026-08-01 22:39:32 +08:00
2026-07-28 10:08:39 +08:00
2026-07-28 11:23:53 +08:00
2026-08-07 09:56:03 +08:00
2026-07-31 18:55:15 +08:00
2026-08-01 22:39:33 +08:00
2026-08-01 22:39:32 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:33 +08:00
2026-07-31 10:30:30 +08:00
2026-07-31 10:30:30 +08:00
2026-08-03 14:40:55 +08:00
2026-08-03 14:40:55 +08:00
2026-08-01 21:15:44 +08:00
2026-08-01 21:15:44 +08:00
2026-07-28 09:19:13 +08:00
2026-07-28 09:19:13 +08:00
2026-07-28 09:19:13 +08:00
2026-08-07 20:37:44 +08:00
2026-08-07 20:37:44 +08:00
2026-08-07 21:47:54 +08:00
2026-08-07 21:47:54 +08:00
2026-07-25 15:37:06 +08:00
2026-07-25 15:37:05 +08:00
2026-08-02 11:47:59 +08:00
2026-08-05 21:26:37 +08:00
2026-08-08 10:58:53 +08:00
2026-08-07 21:47:54 +08:00
2026-08-07 21:47:53 +08:00
2026-08-01 22:39:32 +08:00
2026-08-08 10:58:53 +08:00
2026-08-02 11:47:59 +08:00
2026-08-07 22:42:33 +08:00
2026-08-07 23:11:20 +08:00
2026-08-01 22:39:33 +08:00
2026-08-07 21:47:54 +08:00
2026-08-07 21:47:54 +08:00
2026-07-31 21:21:13 +08:00
2026-08-08 10:58:53 +08:00
2026-07-29 13:25:03 +08:00
2026-07-28 12:28:46 +08:00
2026-08-07 18:45:05 +08:00
2026-08-07 18:45:05 +08:00
2026-07-28 14:12:46 +08:00
2026-07-28 14:12:46 +08:00
2026-07-31 14:21:36 +08:00
2026-07-31 14:21:36 +08:00
2026-08-02 23:11:17 +08:00
2026-08-02 23:11:17 +08:00
2026-07-26 03:18:30 +08:00
2026-07-26 03:18:30 +08:00
2026-07-26 03:18:30 +08:00
2026-07-31 21:20:32 +08:00
2026-07-31 09:42:46 +08:00
2026-08-01 22:39:33 +08:00
2026-08-01 22:39:31 +08:00
2026-08-01 22:39:33 +08:00
2026-08-07 20:49:39 +08:00
2026-08-07 20:49:39 +08:00
2026-07-25 19:40:53 +08:00
2026-07-25 19:40:53 +08:00
2026-08-02 21:32:31 +08:00
2026-08-02 21:32:31 +08:00
2026-08-06 20:34:37 +08:00
2026-08-07 09:56:03 +08:00
2026-07-27 15:12:51 +08:00
2026-07-27 15:12:51 +08:00
2026-08-06 20:34:37 +08:00
2026-08-06 20:34:37 +08:00
2026-08-04 15:09:29 +08:00
2026-07-30 16:28:19 +08:00
2026-08-03 20:14:58 +08:00
2026-08-06 20:34:37 +08:00
2026-08-07 09:56:03 +08:00
2026-08-07 17:42:51 +08:00
2026-08-07 17:42:51 +08:00
2026-08-07 17:42:51 +08:00
2026-08-07 17:42:51 +08:00
2026-08-03 16:59:05 +08:00
2026-08-07 17:42:51 +08:00
2026-08-07 17:42:51 +08:00
2026-08-06 20:34:37 +08:00
2026-08-06 20:34:37 +08:00
2026-08-06 20:34:37 +08:00
2026-07-28 10:08:39 +08:00
2026-07-28 10:08:39 +08:00
2026-07-25 21:59:20 +07:00
2026-07-29 18:35:56 +08:00
2026-08-04 15:09:29 +08:00
2026-08-01 22:11:09 +08:00
2026-08-01 22:11:10 +08:00
2026-08-01 22:11:10 +08:00
2026-07-31 16:11:45 +08:00
2026-07-31 16:11:45 +08:00
2026-08-07 09:40:11 -04:00
2026-08-07 09:40:11 -04:00
2026-08-03 20:00:32 +08:00
2026-08-03 20:00:32 +08:00
2026-07-27 00:43:53 +08:00
2026-08-07 09:40:11 -04:00
2026-08-01 11:29:58 +08:00
2026-08-01 11:29:58 +08:00
2026-08-02 23:11:17 +08:00
2026-07-28 17:21:32 +08:00
2026-07-28 17:21:32 +08:00
2026-08-07 17:42:51 +08:00
2026-08-07 17:42:51 +08:00
2026-08-07 17:42:51 +08:00
2026-08-04 20:57:15 +08:00