Skip to content

Releases

v1.27.1

Choose a tag to compare

@github-actions github-actions released this 14 Nov 09:30

更新说明

修复

  • 数字型 user_id 不再被当成「未提供」:用数字用户 ID 的 SDK 此前会退回「不掺入派生键」,跨用户撞键的问题只在字符串 ID 的客户端上被修掉。现在字符串与数字都计入(整数按整数输出,保证同一 ID 的键稳定);对象、数组、bool、null 仍视为未提供,不做猜测。
  • 重复 Close() 不再写两遍状态:flushForce 原先在 closeOnce 之外,defer Close 与信号路径重复关闭会写两遍状态文件并多推一次 Redis 镜像;现已移入 Do 内,一个进程只落一次。

优化

  • 消除选号触发的状态文件写放大:调度游标(round-robin / sequential 的位置)不再每次选号置脏。此前有流量时后台每 5 秒重写并 fsync 一遍几乎不变的状态文件;现在运行期不再产生调度相关写盘。
  • 崩溃安全网:游标每 10 分钟检查点落一次,停机时再强制落一次。kill -9 / OOM 最多丢 10 分钟轮询进度,不会退回起点;正常重启仍从下一个号继续,轮询公平性不变。

v1.27.0

Choose a tag to compare

@github-actions github-actions released this 14 Nov 08:11

更新说明

  • revert(pool): 撤回「游标不落盘」——本仓库有重启续轮询的既定契约
  • feat: 粘性键按调用方分槽 + 选号不再重写 state.json v1.27.0
  • feat: 缓存亲和——粘性解绑后回落到缓存仍热的账号,避免大前缀全量重算

v1.26.0

Choose a tag to compare

@github-actions github-actions released this 13 Nov 21:47

更新说明

  • feat: 支持 OpenAI Responses 协议 /v1/responses(Codex CLI 直连) v1.26.0

v1.25.1

Choose a tag to compare

@github-actions github-actions released this 12 Nov 02:45

修复

  • Buddy_App 成长任务不再停在 0/1:进入事件的 isFirstPage 由字符串改为布尔值。格式化校验收紧后,字符串形态会让整条事件被静默丢弃(响应仍 2xx),任务判据吃不到、进度永远停在 0/1。
  • 面板签到按回执分四态:新增 checked / already / skipped / failed。重复签到不再显示「签到完成」——今天早就签过时上游不会发积分,现在提示「今天已签到,无需重复」;失败文案只取上游原文,不再把整段错误对象塞给用户。同时修掉「签到失败,已签到天数不足 7 天」被误判成今日已签的问题。
  • 额度耗尽提示不再承诺「等签到恢复」:国际版没有签到活动,积分只能靠充值恢复;提示改为区分国内(次日签到)与国际(需充值)两条路径。
  • 清洗服务端注入的身份指令回流:模型在思维链里复述的身份指令会被客户端带回历史后原样出站,形成反复声明的循环。新增两条规则(祈使句整句换中性表述、剥离标签),且不影响「Do not identify yourself as an AI.」这类合法约束。

镜像

多架构镜像(linux/amd64 / linux/arm64)已随本次发布构建。

v1.25.0

Choose a tag to compare

@github-actions github-actions released this 11 Nov 08:29

更新说明

  • feat(scheduler): 签到瞬时失败在 10/40 分钟后自动补签
  • fix(upstream): 上游把一个 data 行塞成多个 JSON 时拆成独立事件
  • fix(server): 请求级错误不解绑会话粘性 + /v1/models 透出 promo_*

v1.24.10

Choose a tag to compare

@github-actions github-actions released this 10 Nov 09:48

更新说明

  • 更新提醒:面板每 6 小时查一次 GitHub Releases,与进程内版本比较;发现新版本时顶栏出现提示条(版本号、更新说明链接、忽略此版本)。结果并入 /panel/api/overview 下发,前端复用已有的 5 秒轮询,不新增请求;后端 6 小时缓存,检查失败只记 update.error,不影响面板其它功能。
  • 面板一键更新(可选):配置 WB2API_WATCHTOWER_URL 后,提示条上的「立即更新」会把请求转发给旁路守护容器(watchtower HTTP API 模式),由它拉取新镜像并重建本容器,约 30~60 秒后页面自动重连;未配置时按钮降级为「复制命令」,给出一行 compose 更新命令,不假装能一键。
  • 能力边界:面板不挂 Docker socket、不执行 docker 命令。容器内既没有 docker CLI,把 socket 给面板等于把宿主 root 交给一个 HTTP 服务;socket 只给守护容器,且只更新带 com.centurylinklabs.watchtower.enable=true label 的本容器,面板失守也拿不到 Docker。
  • 版本比较:剥掉 v 前缀与 -panel 后缀,按数字段逐位比较(1.24.9 < 1.24.10),缺位补 0,非数字段按 0 处理——宁可漏报不误报,避免反复提示却升不上去。
  • 新增配置:WB2API_UPDATE_CHECK(默认 1)、WB2API_UPDATE_REPO、WB2API_UPDATE_INTERVAL(默认 6h)、WB2API_WATCHTOWER_URL、WB2API_WATCHTOWER_TOKEN;docker-compose.yml 末尾给出可直接取消注释的 watcher 服务与 label 片段,README 新增「升级与更新提醒」一节。

v1.24.9

Choose a tag to compare

@github-actions github-actions released this 10 Nov 02:24

更新说明

  • fix(pool/server/session): 传输层失败记出口不记号 + 只发 user_id 的客户端也粘号
  • fix(upstream): 11151 空 text 段出站补位 + reasoning 镜像 + 资料接口空昵称/平铺形态
  • fix(panel/import): 兼容 cockpit 三种导出形态 + 补建 auths 目录 + expires_at 单位归一

v1.24.8

Choose a tag to compare

@github-actions github-actions released this 08 Nov 12:53

更新说明

修复

  • 小额请求的积分扣减不再被四舍五入抹掉:NoteModelCost 此前用 int64(credit+0.5) 逐笔取整,
    而真实请求的 credit 普遍小于 0.5(线上实测 0.06~0.34,只有长文请求才上 1)——每笔都被取整成 0,
    credits、creditsExpiring、按日到期批次永不减少,表现就是「一直在跑请求,面板上的过期积分不动」。
    改为余数累加:单笔先进 creditFrac,攒够 1 分才落账,余数跨请求保留。100 分余额按 0.24/笔,5 笔后为 99。
    选号侧没有缺陷:同时段请求日志显示 41/43 命中快过期窗口内的 4 个账号。
  • 余额刷新「热启用」不再空转:StartBalanceRefresh 在 interval<=0 时直接 return,启动时若
    schedule.balance_refresh_enabled=false 就不建 goroutine;之后在面板打开开关,
    SetBalanceInterval 只写间隔值并 poke 一个没有接收者的 channel——界面显示「每 5 分钟后台刷新」,
    实际永不刷新,credits_expiring 与到期快照冻结。改为关闭态也常驻 goroutine 等唤醒
    (CompareAndSwap 保证只起一次),interval>0 时才做启动首刷;StartTaskSweep 同一处写法一并修。
  • 零值时间戳不再显示成「1065495620 分钟前」:balance_refreshed_at 为 Go 零值时,前端
    new Date() 得到负数毫秒,算出天文数字。加 at > 0 守卫,从未刷新过就不标注年龄。

可观测

  • 「开了优先但没有候选」限频告警:prefer_expiring 开启却匹配不到任何快过期账号
    (窗口为 0 / 刷新没在跑 / 最早批次已过期)时,pick 每 30 分钟打一条 INFO 直接点明原因。

镜像

多架构镜像(linux/amd64、linux/arm64)已随本次发布构建。

v1.24.7

Choose a tag to compare

@github-actions github-actions released this 08 Nov 11:47

更新说明

修复

  • 上游断流不再伪装成正常收尾:上游既没给 finish_reason、也没发 data: [DONE] 就 EOF
    (连接说到一半断了)时,网关此前只补一个 [DONE] 就当成功结束——客户端看到「内容 +
    正常结束」但 finish_reason 为空,Agent 侧表现就是「说到一半停了、也不报错」,只能人工
    接着催。现在流尾补一帧 finish_reason=length,由客户端自己决定续写 / 重试。只在网关这一层
    一个终态都没发过时补:正常收尾、以及「上游给了终态但漏发 [DONE]」的渠道都不受影响,
    空流仍走原来的 errEmptyStream 处置。
  • 输出预算下限,修掉「高档位思考把自己那份额度吃光」的截断:客户端指定 high / max 档
    思考、又把 max_tokens 给得比这一档的思考还小时,上游先把额度花在思考上,正文只剩一半
    就断在句子中间(生产实测 high + max_tokens=2048 → think=2048 正文=2048 finish=length;
    同一个提示词不给额度时正文 13722 token 正常收尾)。现在显式额度低于该档下限时抬到下限
    (minimal / low 4096、medium 6144、high 8192、xhigh 12288、max 16384),目录
    maxOutputTokens 更小时以目录封顶。抬的是上限不是目标长度,模型写完自然停、不额外计费;
    四种情形一律不动:没给显式额度、探活级额度(<16)、thinking.type=disabled / effort=off、
    档位未知。

性能

  • 脱敏预检去掉 RE2 大小写折叠:hasFingerprint 的兜底判据从 (?i) 正则
    MatchString(给每个 message 的每个字节跑一遍折叠状态机)改成单遍 ASCII 折叠扫描,
    字面量由正则表达式自身推导——正则形态一旦不再是纯字面量就自动回落成直接跑正则,
    不会因为手抄漂移而静默漏检。本机同一份 260KB 请求体实测:PrepareBodyOpt
    6.88ms → 3.03ms(-56%),sanitizeMessages 3.96ms → 0.45ms(-88%),单条 6KB 文本的
    预检 94.8µs → 10.2µs。这一段在上游同源取证里占请求体预处理 CPU 的 56%,是「并发一高
    就降速」的主要成本之一。

可观测

  • 上游断流的归因不再被客户端断开污染:StreamHint 新增 WithClientGoneFn。客户端
    自己走掉(pkill / 关页面 / idle 超时掐线)时上游只是被动跟随断连,不再记「上游未给终态
    就结束」WARN——实测 pkill 一次就刷一条,会把真正的上游断流盖掉。终态照补,静默只针对日志。
  • WB2API_PPROF 诊断监听:设成 127.0.0.1:6060 即另起一个只跑 pprof 的监听,默认不设
    环境变量就完全没有这个监听。用于「并发一高就降速」这类只能靠真实负载定位的 CPU 问题,
    取 /debug/pprof/profile?seconds=30,取完即关容器。

镜像

多架构镜像(linux/amd64、linux/arm64)已随本次发布构建。

v1.24.6

Choose a tag to compare

@github-actions github-actions released this 07 Nov 10:25

更新说明

修复

  • 11134「provider 过载」回归「不罚号、不轮转」:上一版把它单独归为 ErrProviderUnavailable
    并短退避换号——方向对、做法错。生产实测该错误在 15 分钟内跨 6 个不同账号同时出现,
    说明是供应商侧过载:换号撞的是同一个后端,白耗在途名额;更贵的是会打断账号级
    prompt 前缀缓存(同号命中 97–99%,换号后 0–12%),一段 74.9k 前缀重算的费用远超等这几十秒。
    现在与 6020/6021 同族归入 ErrUpstreamBusy:不罚号、不轮转,并按上游 body 里的
    retry_policy.retry_after(实测 40s)返回 429 + Retry-After,不再硬编码 5 秒。
    上一版临时新增的 ErrProviderUnavailable 已删除。
  • ErrUpstreamBusy 只释放租约,不再解绑会话粘性:排队 / 过载是上游容量信号,账号本身
    没有过错。解绑会让客户端重试时落到新号并重建整段前缀缓存;保留绑定则按 Retry-After
    重试仍回到同一个号。真换号并成功时,成功分支会用 Bind 覆盖旧绑定,粘性照样跟随。
    6020 / 6021 一并受益。
  • 兜底 system 不再声明身份:ensureConsoleSystem 与桌面端兜底注入原先写
    You are a helpful assistant.。上游只校验「首条必须是 system」,正文写身份等于网关自己
    往对话里插一句人设声明,与客户端 harness 自带的并列时,模型会把它当成外部注入而拒绝执行。
    改为只声明行为与语言(Follow the user's instructions and respond in the user's language.)。

其他

  • 慢上传可见性:读请求体耗时 ≥5s 打一条 WARN(含字节数与客户端 UA)。弱网或大 body 时,
    上传耗时会伪装成「TTFB 很长」,把排障引到上游;只观测、不拦截(网关仍不设请求体上限)。

镜像

多架构镜像(linux/amd64、linux/arm64)已随本次发布构建。