shaw
a0593b0bf8
fix(gateway): 客户端断开后 failover 静默终止,不再误报 502 账号耗尽
...
上游请求经 detachUpstreamContext(WithoutCancel) 有意脱离客户端取消(保
计费),但 failover 循环仍用原始 c.Request.Context() 重新选号:客户端
断开后上游返回 520 等可 failover 错误时,重新选号必然得到 context
canceled,被误判为账号耗尽,记录并返回通用 502。
修复:客户端已断开 ⇒ failover 静默终止。
- 新增 failoverClientGone(c):请求 ctx 已取消时先停 compact 心跳
(建立 happens-before,对齐其它终结路径),响应未提交则标 499
(statusClientClosedRequest,与并发槽取消路径同惯例)
- 7 个 OpenAI 内联 failover 循环(Responses/Messages/chat_completions/
embeddings/images/grok_media/alpha_search)加双 guard:换号前 +
选号失败分支入口;guard 位于 ReportOpenAIAccountScheduleResult(false)
之后、RecordOpenAIAccountSwitch/池模式重试之前,账号健康副作用
(service 层 detached ctx)不受影响
- FailoverState.HandleFailoverError/HandleSelectionExhausted 入口加
ctx.Err() 检查返回 FailoverCanceled,取消不再改动 failover 状态;
全部 10 个 FailoverCanceled 分支统一调用 failoverClientGone 归类 499
- 上游 detach 与计费设计不变;真实上游 520 事件仍完整落 ops
(面板显示码 COALESCE(upstream_status_code,status_code)=520,
错误率/告警口径不变)
测试:新增 openai_responses_failover_cancel_test.go 复现 issue 场景
(520+取消 ⇒ 不切号、499、无 502 终态)+ 在线客户端对照(正常切换、
耗尽 502);failover_loop_test.go 补入口取消用例并修正取消语义断言。
Fixes #4257
2026-07-15 09:29:05 +08:00
Wesley Liddick
accb918eca
Merge pull request #4212 from heathermhuang/codex/fix-grok-oauth-credential-failover
...
fix(grok): fail over OAuth credential errors safely
2026-07-15 08:37:17 +08:00
shaw
da85cc7e47
chore: update sponsors
2026-07-14 17:01:39 +08:00
github-actions[bot]
7c717365ef
chore: sync VERSION to 0.1.155 [skip ci]
2026-07-14 07:08:08 +00:00
Heatherm Huang
4c764d3fc9
test(grok): use healthy quota account fixture
2026-07-14 15:07:09 +08:00
Heatherm Huang
cb7dfea5a9
test(grok): update default model fixture
2026-07-14 14:55:30 +08:00
Heatherm Huang
81b8b78378
fix(grok): resolve upstream OAuth imports
2026-07-14 14:55:30 +08:00
Heatherm Huang
b32b815e46
fix(grok): harden OAuth pool recovery
2026-07-14 14:55:30 +08:00
Heatherm Huang
91ae671a58
fix(grok): satisfy lint checks
2026-07-14 14:55:30 +08:00
Heatherm Huang
343390057d
fix(grok): fail over OAuth credential errors safely
2026-07-14 14:55:30 +08:00
Wesley Liddick
41cec0db05
Merge pull request #4154 from sir1st/codex/fix-native-responses-namespace
...
fix: support namespace tools in native responses
v0.1.155
2026-07-14 14:51:14 +08:00
shaw
fa1641f05f
fix: keep namespace verbatim on WSv2 forwards and check test type assertions
...
WSv2 egress relays upstream events verbatim without the HTTP-path
namespace restore, so flattening requests that take the WSv2 branch
would surface flattened tool names the client cannot match. Resolve
the WS transport decision before flattening and skip flattening only
when the request will actually go WSv2 (passthrough accounts return
via HTTP before the WSv2 branch and still flatten).
Also check all type assertions in responses_namespace_test.go to
satisfy golangci-lint errcheck.
2026-07-14 14:48:22 +08:00
shaw
252ef8b73a
Merge origin/main into codex/fix-native-responses-namespace
...
Resolve conflict in openai_gateway_passthrough.go streaming path: keep
main's normalizeCompletedImageGenerationStatus normalization ahead of
this branch's namespace restore block, mirroring the established order
in openai_gateway_response_handling.go.
2026-07-14 14:45:04 +08:00
Wesley Liddick
53004e2e90
Merge pull request #4238 from superman2003/feat/grok-monitor-auto-probe
...
feat(grok): add import probes and channel monitoring
2026-07-14 14:23:04 +08:00
Wesley Liddick
11ed22d052
Merge pull request #4240 from chensunlai/fix/openai-responses-lite-image-display
...
fix(openai): preserve client image tools in Responses Lite
2026-07-14 14:22:50 +08:00
Wesley Liddick
03646e9434
Merge pull request #4239 from fengshao1227/fix/grok-reasoning-content-null
...
fix(grok): 清洗 reasoning 项中 content: null 避免 xAI 422
2026-07-14 14:22:42 +08:00
li
2e9b8d9a64
fix: resolve golangci-lint errcheck and gofmt violations in reasoning test
...
Use two-value type assertions with require.True(t, ok) to satisfy
errcheck, and run gofmt to fix alignment.
2026-07-14 13:23:57 +08:00
chensunlai
2f715baf05
fix(openai): preserve client image tools in Responses Lite
2026-07-14 05:19:13 +00:00
li
ff639ba757
fix(grok): 清洗 reasoning 项中 content: null 避免 xAI 422
...
Fixes #4237
2026-07-14 13:13:32 +08:00
superman2003
16d1fbfd4e
fix(ci): keep probe scheduler snapshots test-only
2026-07-14 12:45:03 +08:00
superman2003
d2d3fcf57b
feat(frontend): show Grok monitoring and Free plan badge
2026-07-14 12:24:42 +08:00
superman2003
0a64a6d8ce
feat(monitor): support Grok channel health checks
2026-07-14 12:24:42 +08:00
superman2003
d8a07e91a5
fix(grok): stabilize prompt cache routing identity
2026-07-14 12:24:42 +08:00
superman2003
a1b5c75ca3
feat(grok): probe newly imported OAuth accounts
2026-07-14 12:24:42 +08:00
Wesley Liddick
69bc6a87dd
Merge pull request #4231 from superman2003/fix/grok-free-rolling-24h-20260714
...
fix(grok): use rolling 24h free quota estimate
2026-07-14 11:31:48 +08:00
Wesley Liddick
c361b0606d
Merge pull request #4219 from zh239ns/codex/fix-openai-images-nonstream-keepalive
...
fix(images): add opt-in non-stream JSON keepalive
2026-07-14 11:30:28 +08:00
shaw
ac7a141a24
fix(images): align OAuth pre-response size snapshot with keepalive-adjusted metric
...
The snapshot taken before dispatching the OAuth response handler still used
raw c.Writer.Size(), while handleOpenAIImagesOAuthResponseError compares it
against the keepalive-adjusted size. From the second failover round on, the
previous round's heartbeat bytes made the raw snapshot positive while the
adjusted size stayed -1, so a retryable upstream error was misjudged as
'response already written': the failover was swallowed and the client got a
committed 200 with a whitespace-only body.
Snapshot now uses OpenAIImagesJSONKeepaliveAdjustedWrittenSize, matching the
comparison side. Regression test simulates a prior-round heartbeat before
ForwardImages and asserts the retryable error still converts to
UpstreamFailoverError (verified red without the fix, green with it).
2026-07-14 11:24:44 +08:00
Wesley Liddick
527279c953
Merge pull request #4225 from BenjaminAaron196/fix/reset-credit-count-fallback
...
fix(openai): 提升主动重置次数识别的可靠性
2026-07-14 11:11:54 +08:00
Wesley Liddick
9717699367
Merge pull request #4218 from chensunlai/fix/openai-image-generation-final-status
...
fix(openai): complete streamed image generation results
2026-07-14 11:00:40 +08:00
Wesley Liddick
2590b86e31
Merge pull request #4204 from jianjianai/codex/fix-scheduler-rebuild-coalescing
...
修复调度器并发触发重复全量重建
2026-07-14 11:00:09 +08:00
Wesley Liddick
24d908b257
Merge pull request #4203 from jianjianai/codex/fix-scheduler-pending-lag
...
修复调度器使用已消费事件计算 outbox 延迟
2026-07-14 10:59:57 +08:00
Wesley Liddick
9c3c560d49
Merge pull request #4206 from jianjianai/codex/fix-scheduler-proxy-expiry-event
...
修复代理到期改投触发全量调度重建
2026-07-14 10:59:43 +08:00
Wesley Liddick
8711882918
Merge pull request #4205 from jianjianai/codex/fix-scheduler-auto-pause-event
...
修复账号到期暂停触发全量调度重建
2026-07-14 10:59:34 +08:00
Wesley Liddick
27fcbace89
Merge pull request #4207 from hongheshan-svg/upstream-pr/http2-keepalive
...
fix(openai): 为 Codex HTTP/2 上游启用 PING 健康探测,剔除死连接
2026-07-14 10:59:22 +08:00
superman2003
30d4301bea
fix(grok): use rolling 24h free quota estimate
2026-07-14 10:53:43 +08:00
Wesley Liddick
5d1c577cb2
Merge pull request #4217 from jinfeijie/feat/grok-sso-device-oauth
...
feat(grok): 支持 Web SSO 批量导入并转换为 Build OAuth
2026-07-14 10:25:56 +08:00
shaw
d41a10111d
Merge remote-tracking branch 'origin/main' into feat/grok-sso-device-oauth
...
# Conflicts:
# frontend/src/api/admin/grok.ts
2026-07-14 10:19:16 +08:00
Wesley Liddick
93f2ccf3a5
Merge pull request #4188 from superman2003/fix/grok-free-quota-429-20260713
...
feat(grok): improve free quota probing and usage display
2026-07-14 10:14:41 +08:00
Wesley Liddick
a8927d8ec7
Merge pull request #4214 from bestony/agent/devbox-coding/25c66071-1783957460
...
feat: add opt-in Server-Timing for Admin UI APIs
2026-07-14 10:14:17 +08:00
Wesley Liddick
623a9647c0
Merge pull request #4110 from gebdalaoli-arch/agent/fix-codex-models-apikey-upstream
...
fix: proxy Codex model manifests through API key upstreams
2026-07-14 10:13:56 +08:00
Wesley Liddick
41c71a1528
Merge pull request #4216 from bestony/agent/devbox-coding/3ff3c99d
...
feat(ops): add Host filtering to system logs
2026-07-14 10:13:40 +08:00
Wesley Liddick
1847bdf9fd
Merge pull request #4179 from scientist-blockchian/fix/messages-exact-model-mapping
...
fix(openai): preserve exact messages dispatch mappings
2026-07-14 10:13:27 +08:00
Wesley Liddick
7358810659
Merge pull request #4180 from jianjianai/fix/openai-request-view-single-scan
...
fix(openai): avoid repeated request body scans
2026-07-14 10:13:11 +08:00
Wesley Liddick
029e5ce9f9
Merge pull request #4104 from gebdalaoli-arch/codex/fix-image-gen-hosted-tool-conflict
...
[codex] avoid duplicate hosted image tool injection
2026-07-14 10:13:00 +08:00
benjamin
8cd848313c
fix(openai): improve reset credit quota detection
2026-07-14 10:07:48 +08:00
jjaw
9033e14bb7
修复账号到期暂停触发全量重建
2026-07-14 09:49:57 +08:00
jjaw
8f328d4ab3
修复代理到期改投触发全量重建
2026-07-14 09:23:02 +08:00
Wesley Liddick
74e78c3de0
Merge pull request #4115 from Arron196/fix/api-double-billing
...
fix: 按账号控制 OpenAI 长上下文计费
2026-07-14 08:38:57 +08:00
zh239ns
002c0b9fda
fix(images): keep non-stream requests alive
2026-07-14 07:39:21 +08:00
chensunlai
f2ca16577e
fix(openai): complete streamed image generation results
2026-07-13 21:24:53 +00:00