Skip to content

fix(openai-client): 按子变体细分 reasoning 家族的 temperature 剥离#1

Open
canarybyte wants to merge 1 commit into
mainfrom
fix/openai-temperature-reasoning-families
Open

fix(openai-client): 按子变体细分 reasoning 家族的 temperature 剥离#1
canarybyte wants to merge 1 commit into
mainfrom
fix/openai-temperature-reasoning-families

Conversation

@canarybyte
Copy link
Copy Markdown
Owner

背景

零分排行榜里观察到一类规律性失败:用户用 gpt-5.5 / gpt-5.5-2026-04-23 直连 api.openai.com,所有 detector 拿 HTTP 400:

Unsupported value: 'temperature' does not support 0 with this model. Only the default (1) value is supported.

(实测样本:web_data/jobs/openai/uXQaEDP-.jsontkduF5Fj.json,2026-05-04)

根因

_sanitize_body 用单一 prefix ("gpt-5.5",) 判定要不要剥 temperature。这个清单漏了 GPT-5.4 系列——5.4 / 5.4-pro 同样是 reasoning 模型,也拒绝 temperature。

但简单扩成宽 prefix 又会误剥子变体:gpt-5.4-mini / gpt-5.4-nano 是非 reasoning 子模型,实际接受 temperature(参考 mem0#4738);gpt-5.1* 在 `reasoning_effort=none` 时也接受(litellm#27351)。如果剥了它们,detector 就失去确定性输出,consistency / model_consistency 这些会被坏掉。

改动

把元组替换成"家族 prefix + 子变体例外"两层匹配:

  • `_TEMPERATURE_REJECTING_FAMILIES = ("gpt-5.5", "gpt-5.4")`——已知 reject temperature 的 reasoning 家族
  • `_TEMPERATURE_OK_SUB_VARIANTS = ("-mini", "-nano")`——这些子变体反向豁免
  • 新增 `_rejects_temperature(model_id)` helper,沿用现有的点-横杠-下划线归一化

测试覆盖

参数化新增 14 个用例(`tests/test_openai_phase2.py`):

模型 期望剥 temperature?
`gpt-5.5` / `gpt-5.5-pro` / `gpt-5.5-2026-04-23` ✅ 剥
`gpt-5.4` / `gpt-5.4-pro` ✅ 剥(本 PR 修复点)
`gpt-5.4-mini` / `gpt-5.4-nano` ❌ 不剥(本 PR 防误剥点)
`gpt-5.1` / `gpt-5.1-mini` ❌ 不剥
`gpt-4o` / `gpt-4o-mini` ❌ 不剥
`gpt-5-4` / `gpt-5_4` / `gpt-5-4-mini` 同上(归一化)

完整 256/256 通过。

部署状态

  • ✅ 代码已 deploy 到生产 `156.227.235.104:/opt/veridrop`(rsync via deploy.sh)
  • ✅ `veridrop.service` 已重启,健康检查 200
  • 🔄 本 PR merge 后,主线代码与生产服务器对齐

来源

之前 _sanitize_body 用单一 prefix ("gpt-5.5",) 判定,导致两类问题:
1. 漏剥:gpt-5.4 / gpt-5.4-pro 是 reasoning 模型,也拒绝 temperature,
   用户测这些模型直连 api.openai.com 时拿 HTTP 400 全 0 分
   (实测样本 web_data/jobs/openai/uXQaEDP-.json,Apr 2026)
2. 一旦扩成宽 prefix 又会误剥:gpt-5.4-mini / gpt-5.4-nano 是
   非 reasoning 子变体,实际接受 temperature(mem0#4738);
   gpt-5.1 系列在 reasoning_effort=none 时也接受(litellm#27351)

改法:把元组重构成"家族 prefix + 子变体例外"两层匹配,新增
_rejects_temperature() helper,沿用现有点-横杠归一化保持一致。

覆盖测试 14 个边界(参数化),包括子变体 -mini/-nano 反向豁免、
dated snapshot (gpt-5.5-2026-04-23) 命中、写法变体归一化。
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.

2 participants