Skip to content

v2.3.2

Latest

Choose a tag to compare

@github-actions github-actions released this 11 Jun 21:23

Codex 反代网关:分组筛选支持未分组/屏蔽分组、spark 模型生图工具注入修复、缺失 type 的工具定义兼容、usage log 写入失败重试与热路径性能优化

Features

  • 分组筛选支持「未分组」与「屏蔽分组」(#229:账号页的分组筛选从单选下拉升级为三态筛选面板——每个分组可在「只看 → 屏蔽 → 取消」间切换,并新增「未分组」快捷项。账号较多时可以快速找出未分组或不属于某些分组的账号,全选后批量分组。表格视图的分组列改为默认显示。

Fixes

  • gpt-5.3-codex-spark 不再被注入默认生图工具(#230:Responses 转换层此前会给普通文本请求自动注入 hosted image_generation 工具及桥接 instructions,而 spark 是纯文本模型,上游直接拒绝带 hosted 生图工具的请求,导致 HTTP 上游路径下 spark 文本请求必然失败。现在对 spark 跳过默认注入,用户显式自带的生图工具仍正常保留。
  • 缺失 type 字段的工具定义不再导致请求失败(#219:部分客户端发送的工具定义省略 type(或为 null),此前被原样转发,上游对整个请求返回 400 Unsupported tool type: None。现在 Chat Completions 与 Responses 两条路径都会按 OpenAI SDK 惯例将 function 形态的工具(嵌套 function 对象或顶层 name)补全为 type:"function";完全无法识别形态的工具被剔除而不是拖垮整个请求。
  • usage log 写入失败回队列重试(#233:批量写入失败的 usage log 不再直接丢弃,而是放回缓冲区前部等待下轮 flush 重试;SQLite 与 PostgreSQL 均将日志插入与 API Key 配额更新放入同一事务,任一失败整体回滚,保证用量统计与配额数据一致。
  • 降低 Redis token 刷新等待的 timer 分配(#231WaitForRefreshComplete 改用可复用的 ticker + 超时 timer,替代每 200ms 轮询新建一个 timer(30 秒超时下最多约 150 个),减少刷新竞争场景下的堆分配与 GC 压力。

Performance

  • 请求体单次读取复用(#232RequestSizeLimiter 读取并校验请求体后直接缓存,后续中间件与所有 JSON 代理入口(responses / compact / chat completions / messages / images)复用缓存,热路径上最多减少约 2/3 的请求体重复 buffer 分配,降低大请求与高并发场景的内存峰值与 GC 压力。

Contributors

感谢以下贡献者对本版本的贡献:

  • @huangye123 — usage log 写入失败回队列重试(#233)、请求体单次读取复用(#232)、Redis 刷新等待 timer 优化(#231)三个 PR
  • @sailstudio — 报告 spark 模型生图工具注入问题并提供详细分析与修复方案(#230
  • @WEP-56 — 提出分组筛选「屏蔽分组」的功能建议(#229
  • @oneadms — 报告工具 type 缺失导致的 Unsupported tool type: None 问题(#219

Installation

Docker

docker pull ghcr.io/james-6-23/codex2api:2.3.2
# or
docker pull ghcr.io/james-6-23/codex2api:latest

Manual Downloads

见下方 Assets,提供 Linux / macOS / Windows 的 amd64 与 arm64 预编译产物及 SHA256SUMS。

Full Changelog: v2.3.1...v2.3.2