WUJI-Labs
f5e4da5e72
style(upstream): gofmt http_upstream_profile.go
2026-09-02 12:40:23 +08:00
WUJI-Labs
81fd853005
feat(upstream): add HTTP/2 PING keepalive for long LLM generation streams
...
Long-running LLM inferences (such as high-thinking Gemini models) may experience
silent TCP disconnections across intermediate proxies, NAT gateways, or firewalls
when no data frames are emitted for tens of seconds to minutes.
Go's default http2.Transport sets ReadIdleTimeout=0 (disabling active PING checks).
This commit introduces HTTPUpstreamProfileLongStream with:
- ReadIdleTimeout = 10s
- PingTimeout = 5s
When a pooled H2 connection stays idle for 10s during long streams, active PING frames
are dispatched. Dead connections failing to respond within 5s are proactively evicted,
preventing client generation requests from hanging on dead sockets or failing with EOF/502.
Signed-off-by: WUJI-Labs <zoujincool@gmail.com >
2026-09-02 12:11:17 +08:00
刘佳林
77729e2723
merge: resolve conflicts with upstream/main
...
Keep model-scoped reasoning effort mappings together with the
deny-or-downgrade ceiling control that landed on main.
2026-09-02 10:01:42 +08:00
Wesley Liddick
6566039bc8
Merge pull request #6470 from aofee/codex/fix-ws-passthrough-missing-terminal
...
fix(openai-ws): reject passthrough close before terminal event
2026-09-02 09:42:13 +08:00
Wesley Liddick
e50bffb7e3
Merge pull request #6469 from wucm667/fix/issue-6465-apikey-chat-cache-identity
...
fix(openai): preserve API key chat cache identity
2026-09-02 09:25:02 +08:00
Wesley Liddick
f2804eb2c8
Merge pull request #6444 from Ritel-T/pr/group-free-openai-fast
...
Add group-level Standard billing for OpenAI Fast requests
2026-09-02 09:23:49 +08:00
Wesley Liddick
559960865a
Merge pull request #6447 from DuskLin/feat/openai-reasoning-effort-over-limit
...
feat(groups): 推理强度上限增加超限自动降档与拒绝访问
2026-09-02 09:07:53 +08:00
Wesley Liddick
a4fb58e428
Merge pull request #6443 from Ritel-T/pr/group-openai-fast
...
Add group-level OpenAI Fast enforcement
2026-09-02 09:07:05 +08:00
haruka
34b8bf1a6e
feat: support Claude Fable 5.1
2026-09-02 05:47:01 +08:00
Ritel-T
52c7d88340
chore: merge upstream v0.1.185
2026-09-02 03:29:52 +09:00
Ritel-T
9e2d97f250
chore: merge upstream v0.1.185
2026-09-02 03:28:24 +09:00
aofee
bfe0a5a873
fix(openai-ws): reject close before terminal event
2026-09-01 20:44:11 +08:00
wucm667
504919a054
fix(openai): preserve API key chat cache identity
2026-09-01 19:10:37 +08:00
Wesley Liddick
0d27f45ead
Merge pull request #6454 from alfadb/fix/anthropic-fallbacks-sanitize
...
fix(gateway): 缺 server-side-fallback beta 时剥离 Anthropic fallbacks 字段
2026-09-01 17:47:34 +08:00
刘佳林
e377c4358c
feat(kimi): forward native OpenAI Responses API
...
Moonshot pay-as-you-go and Kimi For Coding both expose native
/v1/responses. Stop converting Kimi Responses traffic to Chat
Completions, and treat Kimi like DeepSeek for protocol selection while
keeping /v1/responses URL construction.
2026-09-01 16:50:04 +08:00
alfadb
200b1406d7
fix(gateway): strip Anthropic fallbacks unless server-side-fallback beta is present
...
Clients now send body.fallbacks; upstream rejects it without
anthropic-beta: server-side-fallback-2026-07-01. Mirror the
context_management sanitize so OAuth mimic / default API-key
beta paths no longer 400 with "fallbacks: Extra inputs are not permitted".
2026-09-01 14:23:33 +08:00
刘佳林
aa7a811e66
feat(groups): add deny-or-downgrade control for reasoning effort ceiling
...
OpenAI/Composite groups can now reject requests that exceed the max
reasoning effort instead of always rewriting them down to the ceiling.
Existing groups keep the previous auto-downgrade behavior.
2026-09-01 10:15:45 +08:00
Wesley Liddick
2ac784c51a
Merge pull request #6353 from feeeei/main
...
refactor(billing): 长上下文阶梯计价改为价格目录数据驱动
2026-09-01 09:32:06 +08:00
Wesley Liddick
6b39d0b453
Merge pull request #6379 from baryon/contrib/codex-priority-service-tier
...
fix(codex): advertise Fast service tier in generated catalogs
2026-09-01 09:02:24 +08:00
Wesley Liddick
f218c8d40a
Merge pull request #6394 from qiujun8023/fix/account-stats-deepseek-peak
...
fix(billing): apply model pricing policies to account stats cost
2026-09-01 08:58:49 +08:00
Wesley Liddick
1cce2b38ee
Merge pull request #6417 from fengshao1227/fix/ws-ingress-capacity-shed-client-code
...
fix(openai): ctx_pool WS ingress 下发前改写上游容量降载错误码(Codex 会话被硬终止)
2026-09-01 08:54:00 +08:00
Wesley Liddick
064d9b74e8
Merge pull request #6432 from okbexx/fix/codex-disabled-account-capabilities
...
fix(codex): ignore persistently disabled catalog accounts
2026-09-01 08:46:42 +08:00
Wesley Liddick
e87c47c957
Merge pull request #6435 from wucm667/fix/issue-6420-apikey-responses-instructions
...
fix(openai): avoid synthesized instructions for API keys
2026-09-01 08:45:58 +08:00
Wesley Liddick
bdedd6c544
Merge pull request #6433 from swjturay/codex/upstream-stale-ws-recycle
...
fix(openai-ws): recycle stale idle pool connections without reader liveness
2026-09-01 08:45:30 +08:00
Ritel-T
9908d3ca2f
Bill free Fast requests at Standard price
2026-09-01 04:34:24 +09:00
Ritel-T
e619ca386e
Carry free Fast through auth snapshots
2026-09-01 04:34:24 +09:00
Ritel-T
8224434d21
Preserve free Fast when duplicating groups
2026-09-01 04:34:24 +09:00
Ritel-T
fd55f3248f
Manage free Fast through group lifecycle
2026-09-01 04:34:24 +09:00
Ritel-T
fb409787c6
Persist the free Fast group policy
2026-09-01 04:34:24 +09:00
Ritel-T
0681aa2566
Cover Group Fast in native Responses
2026-09-01 04:34:06 +09:00
Ritel-T
f8eae45048
Force OpenAI Fast across gateway paths
2026-09-01 04:34:06 +09:00
Ritel-T
a44a1019f8
Carry group Fast through auth snapshots
2026-09-01 04:34:06 +09:00
Ritel-T
7e06816571
Preserve group Fast when duplicating groups
2026-09-01 04:34:06 +09:00
Ritel-T
e9e66da5a8
Manage group Fast through group lifecycle
2026-09-01 04:34:06 +09:00
Ritel-T
94bb9354ce
Accept group Fast in admin service inputs
2026-09-01 04:34:06 +09:00
Ritel-T
563979e91e
Persist the group Fast setting
2026-09-01 04:34:06 +09:00
feeeei
e2cfaa46e7
fix(pricing): 目录 cache 侧字段契约哨兵与 Gemini pro 缓存写入价修正
...
阶梯计价数据驱动后,目录条目的字段缺失或版本拼接会直接变成计费偏差,
解析层补两道数据契约哨兵,并修正出厂快照中 Gemini pro 系的缓存写入价:
- orphanCacheTierFields / warnOrphanCacheTierFields:条目带 cache 侧
above 档(含 _priority/_flex 变体与 above_1hr 形态)却没有基础价时打
WARN——cache 侧 above 档不参与计费取值,按"基础价 × 输入倍率"计,基础价
缺失即该分项按 0 计;变体缺自身基础价时沿 变体→1h→标准 回落链任一存在
即不算孤儿,与计费回落一致
- isLopsidedLongContextLadder / warnLopsidedLongContextLadders:above 档
折算出只有一侧带附加费的阶梯时打 WARN(基础价与 above 档来自不同价格
版本的形态),显式 long_context_* 字段不告警
- deriveLongContextFromAboveTierFields 注释改为陈述契约:cache above 档
须恰为基础价 × 输入倍率
- 出厂快照 6 个 Gemini pro 条目补 cache_creation_input_token_cost(= 标准
输入价,Google 对缓存写入不另收费)、above_200k 改为输入 above 价、带
priority 输入价的 4 条补 priority 孪生,与 model-price-repo 数据修正同值
测试:
- 解析层:孤儿字段 WARN(含 priority/1h 孤儿正例、1h 回落 5m 反例)、单侧
阶梯 WARN、出厂快照契约(全条目无孤儿字段、无单侧阶梯、Gemini pro 缓存
写入价 = 输入价)
- 用量契约:extractGeminiUsage 与 Antigravity 非流式/流式转换均不产生
cache_creation token(Gemini usageMetadata 无该类别)
- 计费:gemini-2.5-pro 阶梯对 cache_read / cache_creation 分项生效,阈值
计入缓存写入 token;阶梯表场景与夹具同步为现行目录值
2026-09-01 01:26:55 +08:00
feeeei
593fc93659
feat(pricing): 新增 override_file 价格目录覆盖补丁
...
新增 pricing.override_file 配置(默认关闭):稀疏补丁文件按 JSON 字段
浅合并覆盖目录/回退数据,作为最高优先级数据源,用于本地自定义官方
目录条目(如显式 long_context_input_token_threshold=0 关闭某模型阶梯)
而无需自建价格镜像:
- applyPricingOverrides 挂在 parsePricingData 解析入口,只修补已存在
条目(补丁字段覆盖同名字段,值为 null 删除字段);目录、回退与灾备
路径都经该入口,覆盖语义三处一致
- mergeOverrideOnlyModels 在回退合并后把目录/回退都没有的模型作为
独立条目并入(复用主解析路径,须自带价格字段通过有效性过滤);
不在主解析时抢先建条目,避免纯补丁挡住回退完整条目、其余分项价
静默变 0
- 最终未生效的条目(模型名拼错、纯补丁落在不存在的模型上)打 WARN
哨兵;override 文件缺失/损坏仅跳过合并,不影响目录加载
- 生效时机为重启或下次目录下载,与 fallback_file 一致;fallback_file
只补缺失模型的语义不变
2026-09-01 01:26:55 +08:00
feeeei
530fb20f25
refactor(billing): 长上下文阶梯计价改为价格目录数据驱动
...
删除 GPT/Gemini 系列写死的阶梯规则,阶梯一律由目录数据驱动:
- 解析层折算 LiteLLM 的 *_above_XXXk_tokens 绝对价字段为阈值+倍率
(阈值取自字段名,倍率 = above/基础价,cache 侧跟随输入倍率,
xAI 按 provider 用达到即进高档语义);显式 long_context_* 字段
按"字段存在"优先,显式 threshold=0 或 multiplier=1 可关闭阶梯
- 删除 OpenAI 272K 常量与 applyModelSpecificPricingPolicy 的长上下文
强补分支、fallbackPrices/静态兜底条目的 LongContext 字段、Gemini 旧
边际规则全链路(CalculateCostWithLongContext / RecordUsageWithLongContext /
阶梯表 marginal 基准);保留 fastRatio 与 GPT-5.6 cache_write 1.25x
防御分支、grok 静态兜底阶梯
- 渠道配置定价区间时完全以渠道区间为准,不再叠加目录阶梯
- 长上下文倍率 ≤0 在应用点按 1 计,防止显式字段残缺把分项乘 0 免费
- 目录重载时对比新旧数据,原有阶梯丢失打 WARN 哨兵告警
行为变化:Gemini 由边际 2x(仅 /v1beta、全模型)改为整单换档(数据
驱动、仅带 above_200k 的 pro 系),渠道平价之上叠加目录阶梯;Claude
sonnet-4/4.5 随目录数据获得 200K 整单阶梯(与官方定价一致);模型广场
官方参考价列与实付列同源展示目录阶梯。
2026-09-01 01:26:55 +08:00
Brisbanehuang
e2624fb65c
fix(codex): preserve known image input capabilities
2026-08-31 09:42:58 -04:00
Ray
6d5f027848
fix(openai-ws): recycle stale idle pool connections
2026-08-31 21:04:29 +08:00
wucm667
e21b849a92
fix(openai): avoid synthesized instructions for API keys
2026-08-31 20:58:49 +08:00
Jarl
ba345f1052
fix(codex): ignore persistently disabled catalog accounts
2026-08-31 20:26:29 +08:00
刘佳林
7c01ec9be8
feat(groups): scope OpenAI reasoning effort mappings by model
...
Allow OpenAI/Composite group mappings to match by exact model name,
prefix, or suffix. Empty type and model still apply to every model.
The admin form groups multiple request-to-forward pairs under one
type+model scope.
2026-08-31 19:21:31 +08:00
li
1dc0a09009
fix(openai): ctx_pool WS ingress 下发前改写上游容量降载错误码
...
上游容量降载(server_is_overloaded / slow_down)被 ctx_pool 的 ingress 直写路径
原样转发给客户端。Codex CLI 按闭集判定,这两个码属致命集,客户端打印
"Selected model is at capacity" 并直接终止会话,不退避重试。
仓库已有 sanitizeOpenAICapacityShedErrorCodeForClient 处理这件事,且注释写明了
Codex 的闭集判定与"账号状态判定使用改写前原始 payload"的前提。它此前只在
HTTP/SSE(openai_gateway_response_handling.go)与 http_bridge
(openai_ws_http_bridge.go)两条路径被调用,ctx_pool ingress 直写路径是唯一漏掉
的一条——同一账号同一时刻切到 http_bridge 就能正常退避重试。
改写结果写入独立的 clientMessage,不动 upstreamMessage:写出点之后的
markOpenAIWSClientVisibleFailure 与 handleOpenAIWSTerminalTransientFailure
仍按原始 payload 判定账号状态,与 http_bridge 的写法一致。
新增用例覆盖改写生效与改写范围两侧(非容量类错误码必须原样下发)。
2026-08-31 16:53:57 +08:00
shaw
0fcec63b68
test(openai): isolate visible TTFT fixture
2026-08-31 15:15:44 +08:00
shaw
c66e700f05
fix(openai): move TTFT metric mode to admin settings
2026-08-31 14:52:07 +08:00
Wesley Liddick
fdf9751c12
Merge pull request #6378 from Ritel-T/fix/codex-oauth-service-tier-billing
...
fix(openai): preserve Codex OAuth Fast billing tier
2026-08-31 13:56:00 +08:00
qiujun and Claude Opus 5
e7c029875c
test(billing): 图片输出按 output 子集计价
...
上一条改用统一定价管线后,TestTryModelFilePricing_WithImageOutput 挂在 0.3 vs
0.28:原算式把 ImageOutputTokens 当 OutputTokens 之外的额外量叠加,等于按文本
output 价和图片价各收一次,测试固化了这个重复计费。
ImageOutputTokens 本就是 OutputTokens 的子集(Gemini 取自 candidatesTokensDetails
的 IMAGE 档,OpenAI 取自 output_tokens_details),统一管线先扣除再按图片单价计,
未配图片价时回退到 output 价、总额不变,正是这个语义。期望改为 0.28。
影响:涉及图片输出的模型,账号统计成本会降低"图片 token × 文本 output 单价"。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-31 12:33:06 +08:00
Wesley Liddick
0678b24d58
Merge pull request #6283 from okbexx/feat/usage-compaction-kind
...
feat(usage): track native compaction requests
2026-08-31 11:19:37 +08:00