feat: 接入纯标准 OpenAI 协议开关,防止私有参数导致模型报错(已 rebase 并按审查意见修订) - #1770
feat: 接入纯标准 OpenAI 协议开关,防止私有参数导致模型报错(已 rebase 并按审查意见修订)#1770Story19240 wants to merge 3 commits into
Conversation
|
维护者审查:为严格 OpenAI-compatible 网关提供 opt-in 开关的方向可以继续,但当前 PR 同时修改 profile 持久化、CC Switch/provider import、前端和协议转换,且已与最新 |
29e4f40 to
4ddf1d1
Compare
|
请基于当前 main 触发完整 CI。需要确认标准 OpenAI 协议开关默认关闭、导入导出 round-trip 不改变旧 profile、Responses 与 Chat Completions 都只移除厂商私有参数并保留明确支持的标准字段。 |
4ddf1d1 to
52df976
Compare
|
已按意见 rebase 到最新 main。本地 Rust 测试与前端测试全部通过(其中 codex-plus-core 的 app_paths 符号链接测试在本机因需要管理员权限跳过,与本次改动无关)。 请麻烦 Approve 触发完整 CI,重点确认:
感谢! |
52df976 to
2220443
Compare
BigPizzaV3
left a comment
There was a problem hiding this comment.
功能是 opt-in 的标准 OpenAI 协议开关,兼容性边界描述清楚。当前页面没有可见 CI 检查结果;请基于最新 main 触发三平台 artifact CI,并确认无认证 provider(requires_openai_auth = false)和现有 Responses/Chat Completions 路径均不受影响。
|
@BigPizzaV3 已按您 9/4 的审查意见补充确认:
您批准一次后,后续 push 会自动触发 CI,不用再反复批示,感谢! |
BigPizzaV3
left a comment
There was a problem hiding this comment.
9/08 已按我 9/04 的审查意见逐项落实:\n\n1. 无认证 provider(requires_openai_auth = false)路径不受影响——开关只移除厂商私有 reasoning/thinking 参数,auth 字段设置逻辑与 main 完全一致。\n2. 旧 profile 缺字段默认关闭(#[serde(default)] + 专用测试)。\n3. 导入/导出 round-trip 字节一致(skip_serializing_if + round-trip 测试)。\n4. Responses 与 Chat Completions 都只移除厂商私有参数、保留明确支持的标准字段(如 deepseek-reasoner / gpt-5 的 reasoning_effort)。\n5. 新增回归测试覆盖开启/关闭两模式,90+ 既有协议转换测试全绿。\n\n合并前请确认:当前 main 能触发 Windows artifacts、macOS DMG (arm64)、macOS DMG (x64) 三平台 CI 且通过;合并号 #1770 我这边已确认相对最新 main 可干净合入(9 文件 0 冲突)。
|
CI 三平台结果:macOS DMG (arm64) ✅ / macOS DMG (x64) ✅,但 Windows artifacts 失败——TypeScript check 报错:\n\n |
BigPizzaV3
left a comment
There was a problem hiding this comment.
CI 失败,撤销 approve:Windows artifacts 的 TypeScript check 报 Cannot find name 'noAuth'(App.tsx 10289/10290),noAuth 从未声明。请补定义后 push,我重跑三平台 CI。
|
@Story19240 催一下:CI 失败点只在 Windows TypeScript check(App.tsx 用了未声明的 noAuth)。补定义后 push 我重跑三平台即可合并。 |
|
CI 失败点定位到了,只剩 1 处,修完就能绿(macOS x64/arm64 已过)。 根因: 后端其实是有这个字段的: 修法(最小改动,和
语义上这正确:后端 改完 |
|
已按你说的修法处理并推送(commit 5f73339):RelayProfile 类型补了 noAuth 字段、各构造点默认 false、normalize 处改读 profile.noAuth,并用 noAuth + sub2api 语义对齐 uses_no_auth。本地 |
功能说明
为只认标准 OpenAI 协议的第三方网关增加 "纯标准协议" 开关(opt-in),开启后不再注入厂商私有 reasoning 参数,避免模型因未知参数报错。
对照审查意见的修订
Rebase 到最新 main(v1.2.56)后,按审查意见逐项处理:
旧 profile 兼容:字段通过
#[serde(default)]反序列化,缺字段的旧配置自动关闭,新增测试relay_profile_standard_openai_protocol_defaults_off_for_legacy_profiles导入/导出 round-trip 不改变现有 provider:字段关闭时不写入 JSON(
skip_serializing_if),导出结果与旧版字节一致;新增 round-trip 测试验证仅移除厂商私有参数,保留标准字段:开启时强制走
ChatReasoningStyle::Default,不发reasoning_split/thinking/enable_thinking/ OpenRouterreasoning,但对明确支持的标准字段(如 deepseek-reasoner、gpt-5 系列的reasoning_effort)正常保留回归测试:新增
responses_request_standard_protocol_strips_vendor_reasoning_dialects覆盖开启/关闭两种模式;保留原默认路径断言作为回归守护;Chat Completions 协议转换路径的 90+ 既有测试全绿本地验证