Skip to content

关闭思考时请求体携带 reasoning_effort: "none",Gemini OpenAI 兼容端点 400,且兜底重试未生效 #439

Description

@lancelotlee

环境

  • SmartSub 版本:3.7
  • 操作系统:Windows

复现步骤

  1. 添加 Gemini provider:
    • apiUrl:https://generativelanguage.googleapis.com/v1beta/openai/
    • modelName:gemini-3.6-flash-lite(或 gemini-3.6-flash
    • enableThinking(启用思考):关闭
    • 填好 API key
  2. 对 1 条字幕(如 Hello)执行翻译/测试。

实际行为

  • 报错:OpenAI translation failed: 400 status code (no body)
  • 界面上提示"已自动尝试所有结构化输出模式仍然失败"
  • 抓包确认请求体携带:
{
  "model": "gemini-3.6-flash-lite",
  "messages": [...],
  "temperature": 0.3,
  "stream": false,
  "reasoning_effort": "none"
}
  • Gemini 实际返回(错误体为数组,openai-node 因而显示为 "no body"):
[{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT"
  }
}]
  • json_schema / json_object / 标准 三种模式全部失败,因为该字段位于公共请求体中,与结构化输出模式无关。

预期行为

  • 关闭思考时不应发送 reasoning_effort 字段;或
  • provider 拒绝该参数时,按既有的"thinking 参数被拒则去掉后重试"逻辑兜底(当前未触发)。

分析

  1. enableThinking: false 时请求体被注入了 reasoning_effort: "none"
  2. Gemini 的 OpenAI 兼容端点不接受该取值(实测模型兼容矩阵见下),返回 400。
  3. 现有的"thinking 参数被拒检测"未识别 Gemini 的错误格式(错误体为 [{...}] 数组、message 为 Request contains an invalid argument.),因此没有去掉参数重试,最终所有模式都失败。

模型兼容矩阵(实测,2026-08)

模型 reasoning_effort=none low
gemini-3.5-flash 200 ✅ 200 ✅
gemini-3.5-flash-lite 400 ❌ 200 ✅
gemini-3.6-flash 400 ❌ 200 ✅

临时方法

  • 使用 gemini-3.5-flash(接受 none);
  • 或在本地 OpenAI 兼容中继中剥离 reasoning_effort: "none" 后转发。

建议修复

  1. enableThinking=false 时不注入 reasoning_effort
  2. 扩展"thinking 参数被拒"的识别逻辑,兼容 [{ "error": { "code": 400, "message": "Request contains an invalid argument.", ... } }] 这类错误格式,触发去掉参数后的重试。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions