github-actions[bot]
4d9ac3e482
chore: sync VERSION to 0.2.16 [skip ci]
2026-10-13 07:20:40 +00:00
Wesley Liddick
01842576b3
Merge pull request #7810 from wucm667/fix/issue-6247-responses-chat-fallback
...
fix(gateway): retry rejected structured input through chat endpoint
v0.2.16
2026-10-13 15:01:20 +08:00
Wesley Liddick
49b2122dc6
Merge pull request #7991 from wucm667/fix/issue-7988-international-quota
...
fix(quota): recognize international coding endpoints
2026-10-13 15:00:31 +08:00
Wesley Liddick
8d7d3185e9
Merge pull request #8038 from wucm667/fix/issue-8035-gemini-tool-result-images
...
Preserve images from tool results
2026-10-13 15:00:04 +08:00
Wesley Liddick
bba85923b9
Merge pull request #8046 from wucm667/fix/issue-8040-antigravity-image-rate-limit
...
Isolate Antigravity image model rate limits
2026-10-13 14:59:39 +08:00
Wesley Liddick
49dc6e2363
Merge pull request #7828 from feeeei/feat/temp-unsched-rule-scope
...
feat(account): 临时不可调度规则新增作用范围 scope 选项
2026-10-13 14:59:27 +08:00
shaw
9d5e63a598
合并 main 并解决 PR #7828 的测试文件冲突
...
完整保留临时不可调度规则作用范围测试与 Gemini 显式缓存测试;保留双方生产代码改动。
2026-10-13 14:59:02 +08:00
Wesley Liddick
53c21fed25
Merge pull request #8006 from feeeei/feat/gemini-explicit-cache
...
feat(gemini): 支持显式上下文缓存,并完善 Vertex 与第三方 API Key 账号
2026-10-13 14:51:11 +08:00
Wesley Liddick
7c5afa4c36
Merge pull request #7957 from xcrong/feat/haiku-5-5-support-7919
...
feat(gateway): adapt Claude Haiku 5.5
2026-10-13 14:50:40 +08:00
shaw
b669dc6daf
test(frontend): 将模型白名单回归用例纳入 CI
2026-10-13 14:42:29 +08:00
shaw
c4bdc48475
fix(haiku): 修正采样边界、默认模型配置与 lint
2026-10-13 14:38:16 +08:00
xcrong
26f70c6a87
fix(gateway): wire Claude Haiku 5.5 into Responses bridge
...
ResponsesToAnthropicRequest only recognized opus/sonnet 5.5, so Haiku
requests fell into the generic enabled+budget_tokens path (upstream 400)
and lost signed thinking history (preserveThinking=false). Mirror the
Messages-side rules: adaptive+medium default, none->disabled+low,
temp/top_p/combo guards, forced tool_choice allowed.
Also preserve Haiku55 thinking signatures in AnthropicToResponsesResponse
and streaming state, and name the model correctly in the between_tools
rejection.
2026-10-13 10:45:13 +08:00
wucm667
cfbbfd6b3b
fix(antigravity): isolate image model rate limits
2026-10-13 09:24:38 +08:00
feeeei
43a3c197cb
fix(gemini): 显式缓存恢复流程区分账号已删除与暂不支持缓存,上游必已过期后作废意图
...
后台回滚在持有账号返回 nil 时把修改意图当作已回滚清除:账号临时关闭显式缓存能力后
意图丢失,重新开启也无法补偿。
- boundAccount 区分两种情形:账号已删除返回 nil,账号存在但不支持显式缓存返回
errGeminiCachedContentAccountUnsupported;BoundAccount 对外行为不变
- 账号暂不支持缓存时不改动上游、保留意图,租约过期后重试(期间同一缓存的修改返回 409);
账号已删除时没有凭据可回滚上游,软删本地记录
- 修改前到期时间加上单次最长有效期与 1 小时容忍都已过去时上游缓存必已自行过期:
账号不支持缓存或上游回滚持续失败的意图不再重试,直接作废本地记录
- 测试夹具 GetForOwner 过滤已软删记录
2026-10-13 00:54:27 +08:00
feeeei
2023c290e1
fix(account): 计数、Bedrock 与重试耗尽入口把上游模型交给错误处理
...
OpenAI 与 Anthropic 的 count_tokens / input_tokens 入口、Bedrock 故障转移入口
以及 OAuth 403 重试耗尽入口调 HandleUpstreamError 时没有传入实际发往上游的模型,
显式 scope=model 的 401 规则在这些入口看到空模型,仍落到 handleAuthError 整号置 error。
- 四处计数入口传入映射后的上游模型;Anthropic 透传计数函数新增 upstreamModel 参数
- handleRetryExhaustedSideEffects / handleRetryExhaustedError 增加模型变参,
Forward、Anthropic 透传与 Bedrock 三处调用方传入实际模型
- Bedrock 入口传调度器的模型键(account.GetMappedModel),不是发往上游的
Bedrock 模型 ID,模型级冷却才会被调度器读取
- 这些入口的 404 模型未找到与缺省 scope 的非 401 规则随之按主转发路径语义处理
(模型已知走模型级)
2026-10-13 00:53:39 +08:00
Wesley Liddick
ab80abc6d1
Merge pull request #7960 from feeeei/feat/group-i18n
...
feat(groups): 分组名称与描述支持多语言
2026-10-12 22:16:51 +08:00
wucm667
492c630599
fix(gemini): satisfy test lint
2026-10-12 19:13:17 +08:00
wucm667
ba2a717332
fix(gemini): preserve images from tool results
2026-10-12 18:52:00 +08:00
feeeei
8b74741efe
fix(groups): 广场 Vary 保留 Origin,分组译文语言代码统一大小写
...
- 模型广场以追加方式写入 Vary: Accept-Language,保留 CORS 中间件为具体来源
写入的 Vary: Origin
- 管理端写入分组译文时语言代码统一为 BCP 47 惯用大小写(en、zh-TW),
统一后重复的语言代码(如 en 与 EN)返回 400 INVALID_GROUP_I18N
- 用户侧按语言取译文时规范写法的键优先,仅大小写不同的多个键按字节序取最小者,
同一请求语言的结果固定
2026-10-12 18:09:03 +08:00
feeeei
fc82e83102
fix(account): 显式模型级 401 规则在网关故障转移入口生效
...
OpenAI 转发 fastpath、HandleUpstreamError 及两处池模式分支对 401 一律跳过
临时不可调度规则,显式 scope=model 的 401 规则在 API Key 账号上仍落到
handleAuthError 整号置 error。
- 新增 tempUnschedRulesApply:401 仅在首条命中规则按模型级生效时交给规则,
其余保持认证错误处理
- 凭据级 401(OAuth 账号与 Spark 影子、OpenAI token_invalidated/token_revoked、
{"detail":"Unauthorized"})不受规则作用范围影响,各入口沿用原有处理
- 模型级命中不参与重复 401 升级;fastpath 不再因模型级命中封整号
2026-10-12 17:39:26 +08:00
Wesley Liddick
9591136d45
Merge pull request #8033 from Larry-Labs/fix/gpt61-sol-500k-context
...
fix(codex): raise GPT-6.1 Sol generated context default to 500k
2026-10-12 17:18:51 +08:00
feeeei
26b31a83e4
fix(gemini): 显式缓存修改串行化、失败回滚,确定金额费用按 Key / 订阅预留
...
同一缓存的并发 PATCH 可能以与上游提交不同的顺序写回本地到期时间;
确定金额的存储费只预留用户余额,并发续期可越过 API Key 总额度与订阅额度;
上游已修改而本地写回失败时没有可恢复的状态。
- 新增迁移 245:缓存记录增加修改意图(mutation_token / mutation_lease_until)。
PATCH 在调用上游前登记意图并取得 2 分钟租约,条件为没有进行中的修改且到期时间
未变;上游修改、本地写回与计费均由持有者完成,并发的修改返回 409 ABORTED
- 上游结果未知、本地写回失败或进程退出时修改意图保留且不计费;租约过期后由下一次
修改或后台每分钟的恢复流程把上游有效期回滚到修改前的到期时间(已到期则删除上游
缓存与本地记录)。上游明确拒绝或请求未发出时直接清除意图
- 修改 / 删除上游缓存的单次调用超时改为 30 秒;请求发出前的失败包装为
ErrGeminiCachedContentRequestNotSent
- CheckChargeAffordable 与 ReserveInflightCharge 合并为 ReserveFixedCharge:在途预留
新增订阅、API Key 两个维度(Redis billing:inflight_scope:*),先登记本笔预留再读取
库中权威用量(Key quota_used 与限速窗口、订阅日 / 周 / 月用量)叠加同维度在途合计
校验;预留随计费任务交接,落库后释放
- GetRateLimitData 一并读取 quota_used
2026-10-12 17:14:56 +08:00
Wesley Liddick
7b03b1f75a
Merge pull request #8036 from Wei-Shaw/fix/gpt61-sol-subscription-long-context
...
fix(billing): 取消 GPT-6.1 Sol 订阅长上下文附加费
2026-10-12 17:04:09 +08:00
shaw
43768680d3
fix(billing): 取消 GPT-6.1 Sol 订阅长上下文附加费
2026-10-12 16:47:22 +08:00
xugao
0718581265
fix(codex): raise GPT-6.1 Sol generated context default to 500k
2026-10-12 15:16:44 +08:00
Wesley Liddick
e468262294
Merge pull request #8002 from obst4cle/fix/group-rpm-override-stale-load
...
fix(groups): ignore stale RPM override loads
2026-10-12 14:38:14 +08:00
Wesley Liddick
5dbb8f7085
Merge pull request #7649 from Yukinoshita-Yukino/fix/codex-image-bridge-openai-only
...
fix(openai): only inject the Codex image generation bridge for OpenAI accounts
2026-10-12 14:38:00 +08:00
Wesley Liddick
6d509c632d
Merge pull request #7711 from wucm667/fix/issue-7709-risk-control-groups
...
fix(risk-control): remove deleted groups from moderation scope
2026-10-12 14:37:44 +08:00
Wesley Liddick
6a6d4728a0
Merge pull request #7696 from a408665321/codex/issue-7687-timer-only
...
fix(ui): refresh usage countdown when tab becomes visible
2026-10-12 14:37:26 +08:00
Wesley Liddick
832677a5e6
Merge pull request #7717 from ouchihao/codex/bug-payment-countdown-drift
...
fix(payment): calculate QR countdowns from elapsed time
2026-10-12 14:37:11 +08:00
Wesley Liddick
c2885c430f
Merge pull request #7738 from r266-tech/codex/monitor-add-platform
...
fix(monitor): allow adding missing platforms in v2 settings
2026-10-12 14:36:41 +08:00
Wesley Liddick
59fb22791e
Merge pull request #7933 from yan9651688/feat/issue-7926-ops-details-account-column
...
feat(ops): show account names in request details table
2026-10-12 14:36:28 +08:00
Wesley Liddick
20b0be5b05
Merge pull request #7969 from ouchihao/codex/bug-ops-custom-timezone
...
fix(ops): initialize custom time ranges in local time
2026-10-12 14:36:12 +08:00
Wesley Liddick
d70265306b
Merge pull request #7970 from ouchihao/codex/bug-select-ime-navigation
...
fix(select): preserve keyboard input during IME composition
2026-10-12 14:35:53 +08:00
Wesley Liddick
f2b1556bd4
Merge pull request #7972 from ouchihao/codex/bug-group-rate-edit-validation
...
fix(groups): reject nonpositive rate multiplier edits
2026-10-12 14:35:37 +08:00
Wesley Liddick
0ae1b371fa
Merge pull request #7973 from ouchihao/codex/bug-monitor-auto-detail-refresh
...
fix(monitor): refresh cached availability on automatic reload
2026-10-12 14:35:24 +08:00
Wesley Liddick
da9799542d
Merge pull request #7974 from ouchihao/codex/bug-gemini-auth-url-error
...
fix(gemini): preserve authorization URL error messages
2026-10-12 14:35:12 +08:00
Wesley Liddick
6977bb63bb
Merge pull request #7983 from hutututtt/fix/account-group-names
...
fix(frontend): show full account group names
2026-10-12 14:34:58 +08:00
Wesley Liddick
b63dafa426
Merge pull request #7982 from wucm667/fix/issue-7981-embedded-static-asset
...
test(web): use shipped SVG asset in embedded frontend tests
2026-10-12 14:34:38 +08:00
feeeei
daebb7a80c
fix(gemini): 模型列表与模型详情接口支持 Agent Platform (Vertex) 账号
...
Gemini 分组对外提供 AI Studio 兼容协议,分组内账号不一定是 AI Studio。
分组只剩 Vertex 服务账号时,GET /v1beta/models 与 /v1beta/models/{model}
选中服务账号后报 502 unsupported account type: service_account。
- SelectAccountForAIStudioEndpoints 改名 SelectAccountForModelsEndpoints,
Vertex 账号排在所有 AI Studio 兼容账号之后参与选号
- ForwardAIStudioGET 拆为 ForwardListModels / ForwardGetModel,按账号类型分流:
AI Studio 兼容账号原样转发;Vertex 服务账号读取 Google 发布方模型列表并
转换为 AI Studio 格式,模型详情在该模型所用区域的列表中查找;Vertex API Key
账号返回内置列表
- Vertex 发布方模型分页读取抽成 listVertexGeminiPublisherModels,与后台
同步上游模型共用
- 模型接口响应体上限改用 gateway.models_list_read_max_bytes,超出时报错
2026-10-11 22:03:36 +08:00
feeeei
4426593e9d
fix(gemini): 3.6 Flash 兜底价改为官方优惠价
...
- 内置兜底价与本地价格表快照的 gemini-3.6-flash 改为 $0.75 输入 / $3.75 输出 /
$0.075 缓存读取(Priority 档 $1.35 / $6.75 / $0.135),有效期至 2026-12-31,
2027-01-01 起恢复 $1.50 / $7.50 / $0.15,与 3.7 / 3.8 Flash 及远程价格目录一致
2026-10-11 11:22:48 +08:00
feeeei
f0ee427f0a
feat(gemini): 显式缓存存储价内置官方价并按 Pro / Flash 系列兜底
...
- 新增 Gemini 显式缓存存储单价表(Standard 档,USD / token / 小时):
Pro 全系 $4.50、Flash 与 Flash-Lite 全系 $1.00;3.6 / 3.7 / 3.8 Flash
为优惠价 $0.50(有效期至 2026-12-31,2027-01-01 起恢复 $1.00),
AI Studio 与 Vertex 统一按优惠价计
- 型号表未命中的 Gemini 模型按系列兜底:Pro 取 $4.50,Flash / Flash-Lite
取标准价 $1.00;Flash-Lite 变体不落到同版本 Flash 的优惠价
- 取值优先级:价格表(override_file 等)配置值 > 内置型号价 > 内置系列价;
两者都没有的模型仍拒绝创建缓存
2026-10-11 11:22:43 +08:00
feeeei
05d7946af8
fix(gemini): 显式缓存错误透传收窄到上游网关账号,延长沿用创建时计费口径
...
- 绑定缓存的请求与缓存管理接口收到 429 / 5xx 时,只有上游网关账号的响应原样回写
(UpstreamFailoverError.BoundUpstreamPassthrough / GeminiCachedContentUpstreamError.UpstreamGateway),
官方账号仍走错误透传规则与通用映射,不向客户端暴露配额明细
- 记录新增 channel_usage(迁移 244)保存创建时的渠道计费口径,PATCH 延长按同一口径预检、报价与记账
- 创建 / 延长费用行的 request_id 改为固定前缀 gcache:{create|patch}:{id},不被客户端或网关请求 id 覆盖,
按缓存 ID 即可检索一个缓存的全部费用行
- 调度快照凭据投影补齐 base_url / auth_mode / 上游显式缓存声明,显式缓存候选过滤一次算全,
不再逐个选号后剔除
2026-10-11 01:37:04 +08:00
feeeei
c9e4b267b6
fix(account): 同步上游模型失败时显示后端返回的错误原因
...
- apiClient 拒绝的是普通对象而非 Error,原写法 instanceof Error 恒为假,
错误提示被替换成通用文案"同步上游模型失败:同步上游模型失败"
- 白名单选择器与 Antigravity 同步按钮改用 extractApiErrorMessage 取消息
2026-10-10 23:37:48 +08:00
feeeei
6f9b02f12c
feat(gemini): Vertex 服务账号支持同步上游模型列表
...
- Gemini 平台 Service Account 账号改用 v1beta1 publishers/google/models
分页拉取模型(pageSize 300,最多 20 页),按账号默认区域选端点;
只保留 publishers/google/models/gemini-* 条目,排除区域端点里的
Gemma、Veo、AutoML 等模型花园条目
- 凭据缺失或 location 非法返回配置错误(400),且不发起 token 交换;
API Key 认证的 Vertex 账号返回不支持
- 翻页途中的 404/405 不再触发配置模型回退
- 模型列表的请求、读体与状态码检查抽成 readUpstreamModelsResponse
供各平台共用
2026-10-10 23:37:48 +08:00
feeeei
1c68f9996d
feat(gemini): 适配 AI Studio AQ. 格式 Key
...
- AI Studio 新建 Key 为 AQ.Ab 前缀的 auth key:logredact.RedactText 与
渠道监控 sanitizeErrorMessage 增加 AQ.Ab 规则,长度按 40 位以上放宽以覆盖格式变体
- 创建 / 编辑账号的 Key 占位符改为 AQ.Ab...,提示文案说明新旧两种前缀
与第三方上游 Key
2026-10-10 23:37:48 +08:00
feeeei
2588675ce7
fix(gemini): 第三方上游 API Key 与 Vertex 不再套用 AI Studio 等级和模拟配额
...
- 按 base_url 判定上游:非官方地址的 Gemini API Key 账号视为第三方上游
- 第三方上游与 Vertex 不返回本地模拟配额,隐藏等级与配额说明;
账号列表中第三方上游按普通 Key 账号展示今日统计与额度进度条,
Vertex 显示 vertex 徽章与今日统计
- 第三方上游的 429 只认显式重试时长,否则走全局 429 兜底冷却,
不按每日配额冷却到 PST 午夜
- 创建账号:第三方 Base URL 不显示 AI Studio 等级选项,也不写入 tier_id;
API 密钥卡片标题与说明不再限定 AI Studio,免费层说明只在官方 Base URL 下显示;
OAuth 等级回退下拉只在 OAuth 表单显示
2026-10-10 23:37:48 +08:00
feeeei
81e6ec5346
feat(gemini): Vertex 账号支持 API Key 认证
...
- Gemini 平台的 Vertex 账号新增 API Key 认证(credentials.auth_mode=apikey),
不填 Project ID 走全局端点,填写后走项目级端点,Key 通过 x-goog-api-key 传递;
Anthropic 平台的 Vertex 账号仍只支持 Service Account JSON
- 转发(Claude 兼容 / 原生 / Chat Completions)与测试连接统一走
buildVertexGeminiAccountURL / setVertexGeminiAuth
- API Key 账号不参与显式缓存(Vertex 缓存接口不接受 API Key)与批量生图
- 创建弹窗新增认证方式选择;编辑弹窗支持轮换 Key 与修改 Project ID,
Key 留空表示保留
2026-10-10 23:37:48 +08:00
feeeei
64331a9792
ui(gemini): Vertex 显示名改为 Agent Platform (Vertex)
...
Google 已将 Vertex AI 更名为 Gemini Enterprise Agent Platform。
账号类型按钮、平台徽章、Vertex 相关提示、配额文档链接与批量生图报错文案
统一显示为 Agent Platform (Vertex);创建账号弹窗的 Vertex 按钮改用 i18n 文案。
2026-10-10 23:37:48 +08:00
feeeei
3abd646582
fix(ops): Gemini 原生路由的网关本地错误按错误类型归类
...
Google 格式错误体没有 type 字段,ops 一律记为 api_error,客户端参数错误、
引用不存在的缓存等都被归为平台内部错误。
- googleError 写出时按状态码向 ops 登记错误类型:400/413 invalid_request_error、
401 authentication_error、403 permission_error、404 not_found_error,
429 与 5xx 不登记
- 计费、并发与风控拦截沿用 Claude / OpenAI 格式错误的类型与错误码,归类口径一致
- 存储价未配置、显式缓存未启用改用 googlePlatformError,仍按平台错误统计;
错误透传规则改写的上游错误不登记本地类型
- 上游返回的缓存不存在标记为请求级失败:按客户端请求错误分类,
上游原始错误保留为明细但不参与上游归因
2026-10-10 23:37:48 +08:00