Skip to content

fix: 让 Responses 工具默认值不受会话身份影响 - #2225

Open
Yuimi-chaya wants to merge 3 commits into
BigPizzaV3:mainfrom
Yuimi-chaya:codex/responses-tools-session-identity
Open

Yuimi-chaya wants to merge 3 commits into
BigPizzaV3:mainfrom
Yuimi-chaya:codex/responses-tools-session-identity

Conversation

@Yuimi-chaya

Copy link
Copy Markdown
Contributor

问题

Codex++ 的会话身份(custom / openai)与模型请求实际使用的 API 传输不是同一件事。使用同一个 Responses API 上游时,切换为 OpenAI 会话身份后,原有 catalog 判断会跳过标准 Responses 的工具默认值处理,可能留下模板中的 use_responses_lite=true

这会造成同一后端在不同会话身份下采用不同的工具协议;在不支持独立搜索路径的后端上,可能表现为网页搜索请求落到未实现的 /v1/alpha/search。本修复针对目录默认值选择,不新增该搜索接口。

改动

将目录默认值判断从仅识别 custom provider,扩展为识别实际的受管理 API 模式,并始终要求真实上游协议为 Responses:

  • PureApiMixedApi、开启 official_mix_api_keyOfficial,在 custom/OpenAI 身份下均默认使用 use_responses_lite=false
  • 保留原有 custom-provider 判断,兼容未同步模式字段的旧调用方及既有聚合策略。
  • 生成目录、外部目录的托管副本和模型路由触发的目录生成使用同一判断。
  • 基于 82fb092 适配动态代理端口、路由目录、多代理 v2 元数据和上下文窗口上限规则。

生产代码仅修改 relay_config.rs,另增加 responses_catalog_identity.rs 回归测试。

兼容边界

  • 纯官方登录、不混 API 时保留原生行为,不全局关闭 Lite。
  • 依据 profile.protocol 判断真实上游协议,不用对 Codex 恒为 responseswire_api 推断协议。
  • Chat 转换、OpenAI 身份不支持 Chat 的现有限制、凭据存储和路由选择不变。
  • 外部目录原文件不改;托管副本沿用原有兼容处理。供应商 model_metadata 的显式覆盖仍优先,包括 use_responses_lite=true,不在自动默认值修复的保证范围内。
  • 无路由且不需要窗口或模型元数据的普通模型列表,仍不额外生成目录。
  • 不新增搜索后端,不承诺 Chat 原生搜索,也不修改 Browser/Computer Use 或认证实现。

验证

提交 03f390c 对应的 Windows 测试包已通过真人测试。下列自动化矩阵覆盖不等同于所有真实账号、平台和后端组合均已逐项实测。

检查 结果
Rust 工作区 1430 通过、0 失败、3 忽略
新增身份/目录矩阵 9/9,覆盖三种入口、API 模式、身份、目录来源及切换边界
非默认代理端口 57483 同一矩阵 9/9
既有目录配置 / 协议代理 154/154、97/97
前端测试 234/234
TypeScript / Vite / 专项格式检查 通过
Windows x64 Release / NSIS 安装器编译 通过

三个忽略项分别需要专有原生浏览器夹具、外部主题仓库和运行中的 Desktop CDP renderer;不计入通过数。未做 macOS/Linux 实机构建或验收。

Rust 验证命令:

cargo test --workspace --no-fail-fast --locked --offline -j 2 -- --test-threads=2
cargo test -p codex-plus-core --test responses_catalog_identity --locked --offline -j 2 -- --test-threads=2
cargo build --release --locked --offline -j 2

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant