Important
Redis 里的用户、令牌和会话缓存加了签名。多节点部署请把所有节点一起升级,新节点遇到旧版本写的缓存会回数据库重新读取。
任务插件可以用厂商自己的接口地址调用了,原来带前缀的地址照常可用。原生请求按客户端写的原样发给厂商。可灵、Vidu、MiniMax 和火山方舟的请求带 callback_url 时会被拒绝。
增加了任务模型的价格提醒。插件改动后没法计费的模型,会在模型定价里标成「价格待处理」。
User, token, and session caches in Redis are now signed. Upgrade every node of a multi-node deployment together. A new node reads from the database again when it finds a cache written by an older version.
Task plugins can now be called at the vendors' own API paths. The prefixed paths still work. Native requests go to the vendor exactly as the client wrote them. Kling, Vidu, MiniMax, and Volcengine Ark requests with callback_url are rejected.
Added price reminders for task models. Models a plugin can no longer charge are marked "Price needs attention" in Model Pricing.
中文
- 安全:Redis 里的用户、令牌和会话缓存加了签名,被改过、没有签名或已经过期的缓存会回数据库重新读取。修复了两步验证锁定结束后,再错一次就又被锁定的问题。
- 任务插件:增加了用厂商官方接口地址调用任务插件的功能,比如可灵的
/v1/videos/text2video、Vidu 的/ent/v2/text2video,回复保持厂商的格式和错误码。即梦改用官方的 Bearer 接口。增加了可灵 4.0,时长 3 到 30 秒,按可灵返回的金额扣费。用/v1/videos调可灵时,尺寸按宽高比选最接近的官方比例。增加了 Vertex AI 渠道的 Gemini Omni 视频生成,按 Vertex 报告的 token 计费,需要服务账号 JSON 密钥。 - 计费:增加了任务模型的价格提醒。没设价格、价格用到插件不再提供的用量、插件不再提供的模型,会在模型定价里标成「价格待处理」并写明原因,可以按「价格状态」筛选。上传、安装或启用插件时也会列出这些模型,超级管理员的侧边栏会显示数量。修复了 prompt_tokens_details 里的 cache_creation_input_tokens 没有计费的问题。Gemini 向量改按上游返回的用量计费。修复了表达式里的按次计费在模型广场显示成按量计费的问题。
- 渠道:增加了 Vertex AI 渠道切换到 v1beta1 接口的开关。增加了 Azure 渠道开启 Responses WebSocket 的功能。增加了 gemini-4-argon 的思考强度支持。gpt-6.1-sol 和 gpt-6.1-terra 按 GPT-6 的规则发参数。增加了上游 HTTP/2 连接的健康检查,设置
RELAY_HTTP2_PING_IDLE_TIMEOUT开启,默认关闭。创建渠道的接口会返回新渠道的 ID,批量创建时每一行对应一个 ID。修复了渠道亲和的重试没有从最高优先级开始的问题。 - 转换:修复了单独一行
[DONE]没被当成流结束的问题。修复了 stop 数组里混有非字符串时转成 Claude 出错的问题。修复了转成 Claude 时工具参数里的大整数被改掉的问题。修复了 Gemini 同时返回文字和工具调用时丢掉文字的问题。修复了 Bedrock Invoke 丢掉 safeguards 的问题。修复了 Cloudflare 向量回复缺少 data 的问题。修复了 xAI 流式用量丢掉 token 明细的问题。改写请求时只改需要改的字段,其余部分保持客户端原样,字段顺序和数字不再变。 - 其他:修复了退出登录后连着弹出几个「会话已过期」的问题。修复了 Turnstile 密钥和开关一起保存时报错的问题。修复了个人资料页还能设置管理员已经关掉的侧边栏项目的问题。修复了日志轮转后访问日志和崩溃日志还写进旧文件的问题。模型性能统计会算上客户端提前断开的非流式成功请求,以及插件立即完成的任务。
English
- Security: User, token, and session caches in Redis are now signed. A cache that was changed, has no signature, or has expired is read again from the database. Fixed the problem of one more wrong 2FA code after a lockout ended locking the account again.
- Task plugins: Added calling task plugins at the vendors' official API paths, such as Kling's
/v1/videos/text2videoand Vidu's/ent/v2/text2video. Replies keep the vendor's format and error codes. Jimeng now uses the official Bearer API. Added Kling 4.0, with durations of 3 to 30 seconds, charged at the amount Kling returns. When Kling is called through/v1/videos, the size maps to the closest official aspect ratio. Added Gemini Omni video generation on Vertex AI channels, billed by the tokens Vertex reports. It needs a service account JSON key. - Billing: Added price reminders for task models. A model with no price, a price that uses usage the plugin no longer provides, or a model the plugin no longer offers is marked "Price needs attention" in Model Pricing with the reason, and a "Price status" filter lists them. Uploading, installing, or enabling a plugin lists these models too, and the sidebar shows the count to super administrators. Fixed the problem of cache_creation_input_tokens in prompt_tokens_details going unbilled. Gemini embeddings are billed by the usage the upstream returns. Fixed the problem of per-request expression prices showing as usage-based in the Model Square.
- Channels: Added a switch that sends a Vertex AI channel's requests to v1beta1. Added Responses WebSocket for Azure channels. Added thinking effort support for gemini-4-argon. gpt-6.1-sol and gpt-6.1-terra now follow the GPT-6 parameter rules. Added a health check for upstream HTTP/2 connections, off by default; set
RELAY_HTTP2_PING_IDLE_TIMEOUTto turn it on. Creating channels returns the new channel IDs, one for each input line in a batch. Fixed the problem of a channel affinity retry not starting from the highest priority. - Conversion: Fixed the problem of a bare
[DONE]line not ending the stream. Fixed the problem of a stop array with non-string items failing on the way to Claude. Fixed the problem of large integers in tool arguments changing on the way to Claude. Fixed the problem of Gemini text being dropped when it came with tool calls. Fixed the problem of Bedrock Invoke dropping safeguards. Fixed the problem of Cloudflare embedding replies missing data. Fixed the problem of xAI stream usage losing its token details. Request rewrites change only the fields they need, so the rest keeps the client's field order and numbers. - Also: Fixed the problem of several "session expired" messages popping up after sign-out. Fixed the problem of an error when saving Turnstile keys and turning it on together. Fixed the problem of the profile page offering sidebar items the administrator turned off. Fixed the problem of access and crash logs still going to the old file after log rotation. Model performance metrics now count successful non-stream requests whose client disconnected early, and tasks a plugin finishes at once.
What's Changed
- fix(billing): bill cache_creation_input_tokens reported in prompt_tokens_details by @yxkong in #7909
- fix:修复stop为非字符串和[]string的协议转换问题 by @sszj987-crypto in #7935
- fix(pricing): classify dynamic per-request billing correctly by @seefs001 in #8010
- fix(relaykit): preserve tool argument numbers in Claude responses by @zxdvd in #7996
- fix(relaykit): preserve Gemini text alongside tool calls by @zxdvd in #7998
- test: stabilize channel affinity cache keys by @sstar16 in #8009
- perf(relay): stop recompiling param override regexes on every request by @seefs001 in #8061
- fix(relay): apply GPT-6 chat parameter rules to gpt-6.1-sol and gpt-6.1-terra by @feitianbubu in #8064
- fix: count completed non-stream relays after context cancellation by @feitianbubu in #7844
- fix(aws): preserve safeguards in Bedrock Invoke requests by @lushuntian in #8071
- fix(relay): stop streaming on exact bare [DONE] markers by @seefs001 in #8074
- fix(relay): allow Azure channels to opt in to Responses WebSocket (#8047) by @seefs001 in #8075
- fix(cloudflare): preserve embedding response data by @donaldxdonald in #8041
- fix: start affinity fallback at the highest channel priority by @seefs001 in #8078
- feat: sample immediate task successes in model performance metrics by @feitianbubu in #8067
- fix: unmount authenticated layout on sign-out to stop credential-less refetches by @feitianbubu in #8110
- fix(logger): keep gin access and recovery logs on the current log file after rotation by @RedwindA in #8098
- fix: save Turnstile keys before enabling by @chronicle12345 in #7960
- chore(deps): bump github.com/go-jose/go-jose/v4 from 4.1.4 to 4.1.6 by @dependabot[bot] in #8112
- chore(deps): bump undici in /electron by @dependabot[bot] in #8006
- chore(deps-dev): bump electron from 41.10.6 to 42.11.16 in /electron by @dependabot[bot] in #8008
- chore(deps-dev): bump fast-uri from 3.1.7 to 3.1.9 in /electron by @dependabot[bot] in #8007
- chore(deps): bump tailwind-merge from 3.6.0 to 3.7.0 in /web by @dependabot[bot] in #8106
- chore(deps-dev): bump knip from 6.27.0 to 6.43.0 in /web by @dependabot[bot] in #8105
- chore(deps-dev): bump @tanstack/react-query-devtools from 5.101.2 to 5.105.0 in /web by @dependabot[bot] in #8104
- chore(deps): bump marked from 18.0.6 to 18.1.2 in /web by @dependabot[bot] in #8103
- chore(deps): bump @codemirror/language from 6.12.4 to 6.13.1 in /web by @dependabot[bot] in #8102
- fix(deps): upgrade DOMPurify to 3.4.17 by @seefs001 in #8116
- fix(profile): honor global sidebar visibility by @jimmyleocn in #7429
- feat(plugins): serve task plugins at the vendors' own paths and answer as the vendors do by @Calcium-Ion in #8117
- fix(plugins): keep Kling 4.0 durations in range and map every video size by @Calcium-Ion in #8118
- fix(plugins): load plugins that declare their own /{key} address by @Calcium-Ion in #8119
- fix(plugins): prefer Kling's returned price (list_price) for Kling 4.0 cash billing by @feitianbubu in #8125
- fix(plugins): charge relayed streams even when the reserve or task insert fails by @Calcium-Ion in #8121
- feat(plugins): generate video with Gemini Omni on Vertex AI channels by @feitianbubu in #8142
- perf: read and edit request JSON and base64 with moego by @Calcium-Ion in #8148
- fix(xai): preserve token details in stream usage conversion by @KangLeon in #6420
- feat(plugins): bill gemini omni by the tokens vertex reports by @feitianbubu in #8153
- feat(relay): add opt-in HTTP/2 health checks by @Perfecto23 in #8059
- fix(twofa): restart the failure count after a lockout expires by @Alear030 in #8172
- feat(gemini): add Argon fields and reasoning mappings by @seefs001 in #8177
- feat(channel): return created IDs with input mappings by @heyrry in #8164
- feat(vertex): add per-channel v1beta1 endpoint switch by @seefs001 in #8179
- fix(gemini): bill embeddings from upstream usageMetadata by @seefs001 in #8182
- fix(auth): 校验 Redis 鉴权缓存完整性 by @Calcium-Ion in #8200
New Contributors
- @yxkong made their first contribution in #7909
- @zxdvd made their first contribution in #7996
- @sstar16 made their first contribution in #8009
- @lushuntian made their first contribution in #8071
- @donaldxdonald made their first contribution in #8041
- @chronicle12345 made their first contribution in #7960
- @KangLeon made their first contribution in #6420
- @Perfecto23 made their first contribution in #8059
- @Alear030 made their first contribution in #8172
- @heyrry made their first contribution in #8164
Full Changelog: v1.0.0-rc.47...v1.0.0-rc.48