li
81ac8ccd64
fix(openai): 非流式路径按流式同一套判定处理 HTTP 200 终止失败事件
...
stream=false 时上游仍可能回 SSE(其他 sub2api 实例、部分 OpenAI 兼容上游),
容量/限流错误经 HTTP 200 的 response.failed / error 终止事件回传。
handleSSEToJSON 与 handlePassthroughSSEToJSON 把所有终止事件塞进固定 502
(writeOpenAINonStreamingProtocolError),而几百行外的流式读取器对同一帧走
openAIStreamFailedEventShouldFailover / openAIStreamErrorEventShouldFailover
判定并返回 UpstreamFailoverError。
同一个上游、同一个事件,仅因请求上的 stream 标志而结果相反:流式换号,
非流式把上游原文直接抛给客户端,池里还有可调度账号也不换。
新增 nonStreamingTerminalFailureFailover,在两条非流式路径上复用流式的同一套
分类,并按 terminalType 分派——裸 error 帧走更保守的那个(仅正向识别为瞬时才
换号),response.failed 走完整的那个,与流式读取器逐字一致。
安全前提:响应体已被 ReadUpstreamResponseBody 完整缓冲,判定发生在写出任何
语义字节之前。能否真正换号仍由 handler 的 openAIForwardMayFailover 用
keepalive 调整后的写出量仲裁(#3887),service 侧只额外拒绝 IsResponseCommitted
与 account 为 nil 的场景,不重复实现心跳判定,避免与 handler 口径分叉。
行为变更:未被分类为不可重试的泛化 response.failed 在非流式路径上由「回写 502」
变为「换号」——这正是与流式对齐的结果。既有用例
TestHandleSSEToJSON_ResponseFailedReturnsProtocolError 传的是 nil account,
无账号则无可换对象,故其断言原样保留,仅更名为 ...WithoutAccountReturnsProtocolError
并注明原因;带真实账号的同一报文由新增用例钉死。
Fixes #5281
2026-08-28 11:36:08 +08:00
Wesley Liddick
5929cdd38c
Merge pull request #6270 from fengshao1227/fix/openai-images-tool-cooldown-not-from-text-heuristic
...
fix(openai): 图片工具冷却不再由「模型回文字」这一请求级判据触发
2026-08-28 10:54:33 +08:00
li
d077002eba
fix(openai): 图片工具冷却不再由「模型回文字」这一请求级判据触发
...
v0.1.181 起,/v1/images/generations 只要上游回了文字而没回图,就给账号写 30 分钟
openai:image_generation 模型级冷却。该判据由 openAIImagesTextFallbackErrorForText
从模型的自然语言输出**推断**而来,只说明这个 prompt 这一轮模型选择了说话——
仓库自己的既有用例 fixture 就是一句「Here's a polished image prompt for your request.」。
更糟的是同一个错误被判为可重试(502 → IsOpenAIImagesRetryableUpstreamError)并驱动
newOpenAIAccountFailoverError:一次闲聊回复会被逐个账号重试,沿途把每个账号都冷却掉,
表现为「开启后没多久账号就全部被限制」。
改为只在上游 error 帧点名该状态时才写冷却;网关自行推断的判据打上
SynthesizedFromModelText 标记并跳过。换号行为一字未动。
依据是仓库既有政策(alpha/search 路径原话):工具端点的单次失败
「仍允许本次请求换号,但不修改任何账号状态」。
Fixes #6171
2026-08-27 13:36:50 +08:00
Wesley Liddick
efb46db0a9
Merge pull request #5926 from baryon/contrib/routed-codex-model-catalog
...
feat(gateway): generate complete routed Codex model catalogs
2026-08-26 15:49:38 +08:00
shaw
8ba81615e0
merge: resolve conflict with main (upstream endpoint observability)
...
Merge origin/main into contrib/routed-codex-model-catalog.
Single conflict in openai_gateway_forward.go: main added
ClearActualOpenAIUpstreamEndpoint + SetActualOpenAIUpstreamEndpoint
(commit 4795650d2 ) at the same insertion point where the PR added
filterOpenAIResponsesNoneReasoningEffortForAccount. Both changes
are independent — endpoint observability first, then body filtering.
2026-08-26 15:29:01 +08:00
Wesley Liddick
b9083fc7ad
Merge pull request #6211 from Monika-shipship/codex/ws-v2-tool-id-regression
...
test(openai): 补充 OAuth Responses WS v2 历史 ID 清洗回归测试
2026-08-26 15:03:24 +08:00
Wesley Liddick
1bf76d26d7
Merge pull request #6229 from Wei-Shaw/fix/openai-upstream-endpoint-observability
...
fix(openai): 记录真实上游端点避免错误误报
2026-08-26 15:03:11 +08:00
Long Li
2abce65031
fix(codex): harden routed catalog capability sync
2026-08-26 12:46:31 +09:00
shaw
6ca1e15b0a
chore: update sponsors
2026-08-26 09:58:16 +08:00
Long Li and Cursor
195b219707
fix(codex): isolate API-key catalog cache and DeepSeek Codex defaults
...
Copy cached API-key manifests before group-specific mutation, use DeepSeek
model IDs for Codex fallbacks, omit unsupported config.toml effort, and
drop wildcard mapping keys from generated catalogs.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-26 10:56:17 +09:00
shaw
66d664ff08
chore: update sponsors
2026-08-26 09:53:47 +08:00
shaw
4795650d21
fix(openai): record actual upstream endpoint on errors
2026-08-26 09:42:28 +08:00
github-actions[bot]
7634e3c23b
chore: sync VERSION to 0.1.183 [skip ci]
2026-08-25 13:53:14 +00:00
Monika
d8694f03bc
test(openai): cover WSv2 cleanup of stale native tool IDs
2026-08-25 21:45:24 +08:00
Wesley Liddick
e8cb019fab
Merge pull request #6078 from YogaSakti/fix/responses-custom-tool-call-id
...
fix(openai): keep restored tool-call item IDs typed
v0.1.183
2026-08-25 21:32:34 +08:00
Wesley Liddick
7a7bd3729c
Merge pull request #6166 from jyking/fix/email-bind-alias-dedup
...
fix(auth): 邮箱换绑增加别名与并发守卫
2026-08-25 21:31:39 +08:00
Wesley Liddick
49ad7021d7
Merge pull request #6164 from jimbirthday/fix/openai-sticky-capacity-spillover
...
fix(openai): preserve sticky binding on capacity spillover
2026-08-25 21:28:38 +08:00
Wesley Liddick
4952b919a4
Merge pull request #6204 from wucm667/fix/issue-6203-kimi-concurrency-403
...
fix(kimi): keep concurrency-limit 403 recoverable
2026-08-25 21:28:08 +08:00
Wesley Liddick
fa0685a4a3
Merge pull request #6175 from wucm667/feat/issue-6172-antigravity-token-clamp
...
fix(antigravity): clamp compatible token limits
2026-08-25 21:27:57 +08:00
Wesley Liddick
8040428716
Merge pull request #6201 from xuhaihan/fix/codex-session-id-affinity
...
fix(openai): honor Codex session-id header
2026-08-25 21:27:24 +08:00
Wesley Liddick
4ff136cfd9
Merge pull request #6193 from antTing/codex/fix-channel-monitor-v2-nullif
...
fix(channel-monitor-v2): fix composite platform aggregation SQL
2026-08-25 21:26:32 +08:00
Wesley Liddick
832cf4df65
Merge pull request #6208 from Wei-Shaw/fix/openai-oauth-429-quota-scheduling
...
fix(openai): pause OAuth accounts on exhausted quota 429
2026-08-25 20:41:41 +08:00
Long Li and Cursor
77b6c5bb0c
merge: sync contrib/routed-codex-model-catalog with upstream v0.1.182
...
Keep catalog membership on schedulable accounts and intersect advertised
capabilities across all active group members that map an alias. Preserve
upstream plugin, service-tier, and models-list body-limit changes.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-25 21:28:57 +09:00
shaw
f1aadd48d5
fix(openai): pause OAuth accounts on exhausted quota 429
2026-08-25 20:25:22 +08:00
Long Li and Cursor
5934981e22
test(codex): cover unschedulable catalog capability intersection
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-25 21:02:47 +09:00
Long Li and Cursor
db01fb98f8
fix(codex): keep catalog capabilities stable when accounts are unschedulable
...
Intersect advertised alias capabilities across all active group members
that map the model, not only currently schedulable accounts, so rate-limits
cannot widen image input or context windows.
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-08-25 21:01:58 +09:00
wucm667
3802268e2d
fix(kimi): keep concurrency 403 recoverable
2026-08-25 19:40:39 +08:00
hank
8e60d57475
fix(openai): honor Codex session-id header
2026-08-25 17:08:27 +08:00
暴走的小笼包
b20f29d115
fix(channel-monitor-v2): fix composite platform aggregation SQL
2026-08-25 16:36:04 +08:00
wucm667
1a9898a6a4
fix(antigravity): clamp compatible token limits
2026-08-25 13:13:08 +08:00
github-actions[bot]
aa2c4e8d13
chore: sync VERSION to 0.1.182 [skip ci]
2026-08-25 04:47:52 +00:00
Wesley Liddick
5a7d469622
Merge pull request #6157 from LiPu-jpg/fix/issue-6147-responses-lite-parallel
...
fix(openai): enforce Responses Lite parallel tool calls across account types
v0.1.182
2026-08-25 12:31:32 +08:00
shaw
095b525360
fix(openai): pin Responses Lite parallel tool calls
2026-08-25 12:14:52 +08:00
Wesley Liddick
027d442f9b
Merge pull request #6101 from jianjianai/fix/composite-group-channel-monitor-v2
...
fix(monitor-v2): 修复Composite分组错误事实未解析到真实账号平台导致渠道监控V2无效
2026-08-25 11:27:03 +08:00
Wesley Liddick
810d50a00f
Merge pull request #6155 from HypoxanthineOvO/fix/composite-kimi-k3-routing
...
fix(composite): route Kimi Code K3 model IDs
2026-08-25 11:13:59 +08:00
Wesley Liddick
41d712be09
Merge pull request #5658 from william-drakemond/fix/opencode-go-usage-limit-reset
...
fix(openai): honor OpenCode Go usage reset durations
2026-08-25 11:05:15 +08:00
Wesley Liddick
3c714d8736
Merge pull request #6152 from ranxi2001/fix/payment-result-balance-refresh
...
fix(payment): refresh balance after fulfillment
2026-08-25 11:04:10 +08:00
Wesley Liddick
636d7debf9
Merge pull request #6132 from wucm667/fix/issue-6125-anthropic-cache-ttl
...
fix: prevent duplicate Anthropic cache TTL billing
2026-08-25 11:02:29 +08:00
Wesley Liddick
3dd717ab0d
Merge pull request #5920 from wucm667/fix/issue-5884-antigravity-sonnet46
...
fix(antigravity): define Sonnet 4.5 to 4.6 compatibility routing
2026-08-25 11:01:34 +08:00
Wesley Liddick
1dc1b44268
Merge pull request #6149 from SipengXie2024/fix/oauth-image-verbatim-prompt
...
fix(openai): preserve OAuth image prompts verbatim
2026-08-25 11:01:20 +08:00
jyking
4ca86c52e3
fix(auth): 邮箱换绑增加别名与并发守卫
2026-08-25 10:40:02 +08:00
超级英雄吉姆
e55727d4c8
fix(openai): preserve sticky binding on capacity spillover
2026-08-25 10:27:48 +08:00
shaw
3b7753a8e4
chore: update sponsors
2026-08-25 08:51:58 +08:00
Jiao Ziang
d5e43ef7d1
fix(openai): normalize Lite requests in WS HTTP bridge
2026-08-25 03:46:46 +08:00
Jiao Ziang
d6012b0b35
fix(openai): preserve numeric precision in Lite payloads
2026-08-25 01:05:28 +08:00
Jiao Ziang
53d76ad800
fix(openai): enforce Responses Lite tool call mode
2026-08-25 00:21:29 +08:00
HypoxanthineOvO
4347e5555b
fix(composite): route Kimi Code K3 model IDs
2026-08-24 23:09:30 +08:00
SipengXie2024
329b92ef04
fix(openai): preserve OAuth image prompts verbatim
2026-08-24 14:37:48 +00:00
github-actions[bot]
e2d9b823f6
chore: sync VERSION to 0.1.181 [skip ci]
2026-08-24 14:35:57 +00:00
ranxi2001
eb594eefc9
fix(payment): refresh balance after fulfillment
2026-08-24 22:30:24 +08:00