li
|
8f5451587e
|
fix(apicompat): Anthropic→Responses 流式转换在 thinking 块前关闭 message item 并推进 content_index
thinking 块开始时不关闭已打开的 message item,直接覆盖 CurrentItemType/
CurrentItemID,累积的助手文本既不进 state.Outputs 也拿不到 output_item.done,
response.completed 只带 reasoning——客户端收到「成功但无输出」。同 switch 的
tool_use 分支本来就先调 closeCurrentResponsesItem,只有 thinking 漏了。
content_index 只在 item 打开时置 0,从不推进。同一 message item 里第二个 text
块会再发一次 content_part.added(content_index=0),与第一个 part 撞在同一下标,
SDK 累积式 helper 按 content[content_index] 写入时后者覆盖前者。反方向
responses_to_anthropic.go 有三处 ContentBlockIndex++,正方向一处都没有。
新增用例覆盖两条坏顺序,外加一条生命周期不变式用例(output_item.added 与
output_item.done 必须配平、terminal 事件按announce 顺序逐项携带)。
|
2026-08-31 16:15:08 +08:00 |
|
shaw
|
0fcec63b68
|
test(openai): isolate visible TTFT fixture
|
2026-08-31 15:15:44 +08:00 |
|
shaw
|
8553c91c1a
|
test(api): update settings contract fixture
|
2026-08-31 15:05:39 +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 |
|
wucm667
|
1be69e56aa
|
fix(openai): accept delegation bootstrap without call id
|
2026-08-31 12:57:06 +08:00 |
|
 qiujunandClaude 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 |
|
Wesley Liddick
|
f34735f462
|
Merge pull request #6388 from alfadb/feature/ollama-usage-cn-platforms
feat(ollama): 用量窗口支持挂在国产三家平台下的 Ollama Cloud 账号
|
2026-08-31 11:16:25 +08:00 |
|
Wesley Liddick
|
a2d7d41185
|
Merge pull request #6325 from 251392463/fix/grok-responses-vision-tool-output
fix(grok): preserve Responses vision tool output images
|
2026-08-31 11:15:33 +08:00 |
|
Wesley Liddick
|
03ab687686
|
Merge pull request #5866 from wucm667/fix/issue-5863-scope-monitor-groups
fix: scope channel monitor groups by user access
|
2026-08-31 11:15:13 +08:00 |
|
Wesley Liddick
|
fbc69322af
|
Merge pull request #6254 from wucm667/fix/issue-6249-configurable-image-cooldown
feat(openai): configure image tool cooldown
|
2026-08-31 11:13:52 +08:00 |
|
Wesley Liddick
|
414489d152
|
Merge pull request #5469 from wucm667/fix/issue-5467-passthrough-http-bridge
fix(openai-ws): bridge oversized passthrough requests
|
2026-08-31 11:13:35 +08:00 |
|
Wesley Liddick
|
50a9dd7a64
|
Merge pull request #6386 from wucm667/fix/issue-6383-isolate-passthrough-ws
fix(openai): isolate passthrough websocket sessions
|
2026-08-31 11:13:16 +08:00 |
|
Wesley Liddick
|
a4156eea10
|
Merge pull request #6385 from wucm667/fix/issue-6381-preserve-quota-limits
fix(admin): preserve quota limits on partial group updates
|
2026-08-31 11:12:56 +08:00 |
|
wucm667
|
897faea333
|
fix(account): reset quota cooldown atomically
|
2026-08-31 09:12:09 +08:00 |
|
feeeei
|
0e08c39999
|
fix(openai-ws): remember rejected encrypted content across turns
invalid_encrypted_content 恢复此前只清理当次请求体:同一失效密文随客户
端维护的会话历史在后续每一轮重新出现,反复触发"整包被拒→剥离→重试/
重连"(#6382 生产观测 2h 内 251 次 recovery、273 次 WS 重连),既是
QoS 放大器也是内存压力放大器。
按会话记录被上游拒绝过的 encrypted_content SHA-256 摘要(lineage):
- OpenAIWSStateStore 新增会话级摘要绑定,TTL 复用 session sticky,
单会话 512 摘要为存储自保护,超出仅退化为既有单次 recovery
- 写点覆盖 forward WSv2 recovery、forward 非 WS 400 重试、ingress
error 事件、bridge 400/流内 error;读点在 forward 进场与 ingress/
bridge turn 循环入口按摘要预剥离,新密文摘要不同不受影响
- 只收剥离端可处理的项类型(reasoning/compaction/compaction_summary),
避免记入永远剥不掉的摘要后每轮空转解码
- replay 历史序列同步剥离,避免与已剥离的当前 input 项错位导致
prefix 复用失配
含端到端集成测试:turn1 上游拒绝即记录,turn2 上游收到的请求不再携带
失效密文且 reasoning 骨架保留。
|
2026-08-31 01:02:13 +08:00 |
|
feeeei
|
ca9b4d73f2
|
fix(openai-ws): share immutable replay bodies to stop O(T²) copying
OpenAI Responses WS/HTTP-bridge 的 replay 历史此前每轮对全部正文做多次
深拷贝(构建、双份序列、保存点各一遍),长会话累计分配 O(T²),实测
128 turn x 10KiB 达 160MB+,是 #6382 内存持续增长直至 OOM 的主因。
改为共享不可变正文所有权:
- extract 经零拷贝 string 视图 + gjson Index 直接切 payload 子切片,
并以 json.Valid 保持对断裂数组的既有错误语义
- 序列构建/sanitize/collector/保存点全部只传引用;跨持有者保存经
combineOpenAIWSReplayItems 新建头数组,正文不复制
- bridge 每轮一次解析,正常 replay 与 account-failover 序列共享正文
- 前缀比较增加字节级快路径,避免逐轮全历史 decode+encode
- strict 状态可用时不再整包保留上一轮 payload
新增 128 turn 分配回归测试锚定上界(实测 2.5MB,深拷贝回归会击穿),
以及正文共享的所有权断言。
|
2026-08-31 01:01:20 +08:00 |
|
 qiujunandClaude Opus 5
|
9eabd2a5b7
|
fix(billing): apply model pricing policies to account stats cost
resolveAccountStatsCost 的优先级 3 维护了第二份"单价 × token 数"实现,每加一个
定价特性都要手工镜像:service tier 与长上下文分别由 9261dd77、25e6688a 补齐,
而 b5827cfd 引入的 DeepSeek 官方峰谷一直没有生效,高峰时段账号成本最多低估一半。
改为复用 CalculateCostWithServiceTier。channelPricing 仍为 nil,优先级 3 的语义
不变:只取模型定价文件、不引入渠道自定义定价;低谷时段结果与原算式完全一致。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-30 22:57:53 +08:00 |
|
wucm667
|
d5a0124637
|
fix(openai): isolate passthrough websocket sessions
|
2026-08-30 16:49:01 +08:00 |
|
alfadb
|
30b29e51e8
|
feat(ollama): 用量窗口支持挂在国产三家平台下的 Ollama Cloud 账号
Ollama Cloud 用量窗口(浏览器会话、5h/7d 快照、自动刷新、同 key 组共享)此前
只认 platform ∈ {openai, anthropic} 的 apikey 账号。但网关对 kimi/zhipu/deepseek
的 apikey 账号同样按 credentials.base_url 转发,用户把 Ollama Cloud 的 key 挂在
这三个平台下跑 Ollama Cloud 托管的 glm/kimi/deepseek 模型时,请求转发正常,用量
窗口却完全不可用。
- 平台白名单放开到 {openai, anthropic, kimi, zhipu, deepseek};type='apikey'
与官方 ollama.com base_url 的限制不变
- Go 侧收敛为 isOllamaCloudUsagePlatform,SQL 侧收敛为
ollamaCloudUsagePlatformsSQL,6 处白名单只引用单一来源,并补两侧互为镜像的
漂移守卫测试
- CN 周期余额/额度探测跳过 ollama 用量账号:其探测端点由 base_url 衍生,对
ollama.com 会被出站 URL 白名单拒绝,每轮都白跑并产生噪声
- 前端账号列表 CN 分支在 eligible 时改渲染 Ollama 用量窗口,并跳过 CN 额度/
余额子单元格(同上,渲染出来只会是一行探测报错)
|
2026-08-30 16:38:11 +08:00 |
|
wucm667
|
9f1effd71c
|
fix(admin): preserve quota limits on partial group updates
|
2026-08-30 16:36:13 +08:00 |
|
Long Li
|
57c76584a6
|
fix(codex): advertise priority tier for fast models
|
2026-08-30 14:21:08 +09:00 |
|
Ritel-T
|
82105f260a
|
fix(billing): resolve shadow credential tier contract
|
2026-08-30 13:40:37 +09:00 |
|
Ritel-T
|
50ad6e2e50
|
fix(billing): narrow Codex OAuth default exception
|
2026-08-30 13:40:19 +09:00 |
|
Ritel-T
|
f323d84644
|
test(billing): cover Codex OAuth usage pricing
|
2026-08-30 13:07:33 +09:00 |
|
Ritel-T
|
3a9070359b
|
fix(billing): scope Codex OAuth tier trust
|
2026-08-30 13:07:21 +09:00 |
|
Ritel-T
|
d39fc491ec
|
test(openai): cover websocket tier separation
|
2026-08-30 13:07:07 +09:00 |
|
Ritel-T
|
2b8cb628b6
|
fix(openai): preserve tiers in messages chat fallback
|
2026-08-30 13:06:45 +09:00 |
|
Ritel-T
|
8b4b3f4a94
|
fix(openai): preserve tiers in responses chat fallback
|
2026-08-30 13:06:32 +09:00 |
|
Ritel-T
|
624e4eef64
|
fix(openai): separate outbound and observed tiers
|
2026-08-30 13:06:11 +09:00 |
|
wucm667
|
a3bbf33c05
|
fix(monitor): scope groups by user access
|
2026-08-30 09:28:40 +08:00 |
|
wucm667
|
7c616db07a
|
fix(openai-ws): bridge oversized passthrough requests
|
2026-08-30 08:41:08 +08:00 |
|
Clansty
|
5fea83dcae
|
fix: 修复429未耗尽额度仍触发账号退避
- 关闭429默认回避时不再创建OAuth运行时冷却
- 仅在x-codex窗口达到100%时使用上游重置时间
- 补充未耗尽额度和关闭开关的回归测试
|
2026-08-30 00:02:14 +08:00 |
|
alfadb
|
b5827cfd54
|
fix(pricing): align DeepSeek billing with official peak/off-peak rates
同步 DeepSeek 官方峰谷价格与模型定价。
|
2026-08-29 17:30:23 +08:00 |
|
m11y
|
ea4291a92c
|
fix(anthropic): scope Fable scheduling threshold to Fable models
让 Fable 7d_oi 调度阈值仅限制 Fable 模型族,不暂停整个 Anthropic 账号。
|
2026-08-29 17:30:18 +08:00 |
|
101Harry
|
32ac921f24
|
fix(anthropic): avoid Fable OAuth system prompt refusal
修复 Fable OAuth 请求因系统提示词形态导致空响应的问题。
|
2026-08-29 17:29:30 +08:00 |
|
Ryan Chou
|
eb4237a2b0
|
fix(billing): 渠道定价对带后缀的模型名不再被官方兜底价覆盖
修复带后缀模型无法命中渠道自定义定价的问题。
|
2026-08-29 17:29:21 +08:00 |
|
wucm667
|
c31fe2ed9e
|
fix(admin): preserve saved SMTP TLS mode in test endpoints
保留测试邮件端点已保存的 SMTP TLS 配置,区分省略与显式 false。
|
2026-08-29 17:28:00 +08:00 |
|
shaw
|
804679d996
|
fix(openai): preserve model scope on stream failover
|
2026-08-29 15:25:10 +08:00 |
|
shaw
|
571d1e1d9b
|
fix(openai): isolate websocket semantic rate limits
|
2026-08-29 11:14:54 +08:00 |
|
shaw
|
3c22e78af0
|
fix(openai): preserve Spark quota reset semantics
|
2026-08-29 11:08:01 +08:00 |
|
shaw
|
5d9c7abed5
|
fix(openai): scope Spark quota 429 to model
|
2026-08-29 09:57:08 +08:00 |
|
Wesley Liddick
|
ac18c588c8
|
Merge PR #6165
修复上游倍率探测导致账号列表整页刷新的问题
|
2026-08-29 09:12:05 +08:00 |
|
Wesley Liddick
|
b83284071a
|
Merge PR #5348
fix(subscription): 周/月窗口展示的重置时间与实际推进锚点对齐
|
2026-08-29 09:10:07 +08:00 |
|
Wesley Liddick
|
fd13c72e95
|
Merge PR #6330
feat(zhipu): support team GLM Coding Plan usage query
|
2026-08-29 09:08:42 +08:00 |
|
Wesley Liddick
|
3c2e9a43b9
|
Merge PR #5860
fix(antigravity): preserve mixed built-in chat tools
|
2026-08-29 09:07:27 +08:00 |
|
Wesley Liddick
|
ca319d09f2
|
Merge PR #6280
fix(update): strip hyphenated pre-release/custom suffix in version comparison
|
2026-08-29 09:06:10 +08:00 |
|
Wesley Liddick
|
46598dd491
|
Merge PR #6306
fix(openai): emit pre-output SSE keepalive on the /v1/responses passthrough path
|
2026-08-29 09:04:46 +08:00 |
|
Wesley Liddick
|
3045b3ade1
|
Merge PR #6316
fix(openai): honor Claude Code session id for messages sticky routing
|
2026-08-29 09:03:14 +08:00 |
|