fix(model): unify Responses API compatibility#8
Conversation
|
补充真实兼容网关烟雾验证(未使用或输出任何密钥、账户数据):
|
There was a problem hiding this comment.
对照 issue #7,本次实现的整体方向合理:PR 已完成共享模型 API 兼容层、Chat/Responses 请求参数映射、JSON/SSE 响应解析,以及消息面预检的 auto|responses|chat 配置,主要功能和文档也基本同步。
不过,合并前仍需处理以下兼容性问题:
-
X 监控会误用 GPT 的 Responses 接口
Issue #7 只要求 A 股消息面预检在使用 GPT-5 搜索模型时切换到 Responses。当前共享逻辑却会影响所有携带搜索工具的调用:X 监控传入
x_search后,GPT-5 也会从原来的 Chat 接口切换到 Responses,并发送可能不受支持的x_search参数。建议只在消息面预检使用
web_search时为 GPT-5 选择 Responses;X 监控保持原有接口,除非用户明确配置responses。 -
X 监控的临时故障处理发生回归
共享解析器现在对空响应或非 JSON 响应抛出
ValueError,但 X 监控只把JSONDecodeError识别为临时上游故障。对相同空响应的对比结果显示:基线会静默等待下一轮轮询,本 PR 则会将其视为非临时任务失败。这不符合 issue #7 中“保持既有超时和重试逻辑兼容”的要求。建议定义专用的模型响应解析异常,并在 X 监控中将其按临时错误处理,同时增加空响应和非 JSON 响应的回归测试。
-
去除
max_output_tokens的重试条件过宽_unsupported_output_limit()将invalid parameter也视为“不支持该字段”。如果网关实际表达的是max_output_tokens数值超限,当前实现也会删除用户配置的输出上限并重试。Issue #7 要求仅在网关明确不支持该字段时安全去参。建议收紧匹配条件,并增加“参数值非法时不得去参重试”的测试。
PR 中补充的真实网关烟雾测试已经验证了 GPT 消息面 Responses 的成功路径,但没有覆盖上述 X 监控、空响应降级和错误参数分类场景。
另外,PR 仍需解决与最新 main 的文档冲突,并在解决后重新运行 CI。修正以上边界并补充回归测试后,可再次评审。
|
已按本轮评审意见完成修改,更新提交为 已处理的兼容性问题
新增回归覆盖
验证结果
本机完整验证共 477 项,472 项通过;剩余 5 项均已在最新未修改的 @kunkundi 烦请重新评审,谢谢。 |
kunkundi
left a comment
There was a problem hiding this comment.
对照 issue #7 及上一轮评审意见,最新提交已完成相关兼容性修正:
- GPT 自动选择 Responses 的范围已收窄到
web_search,X 监控的x_search保持原有 Chat 路径。 - 空响应和非 JSON 响应已使用专用异常处理,X 监控仍按临时上游故障降级。
max_output_tokens仅在上游明确表示不支持时去参重试,并覆盖常见错误表述;参数值非法时不会错误重试。- 与最新
main的冲突已解决,配置、前端说明及中英文文档保持同步。
相关回归测试和 GitHub Validate 均已通过,PR 当前无冲突、可正常合并。未发现新的阻塞问题,同意合并。
修改内容
stream=false时仍强制返回 SSE 的情况。max_tokens/max_output_tokens;GPT-5.6 网关别名不再发送已确认不支持的max_output_tokens,其他 Responses 网关若明确返回该参数不受支持,会去参重试一次。DASHBOARD_NEWS_API_MODE=auto|responses|chat。默认auto会为 Grok 4.5 和 GPT-5 系列搜索模型选择 Responses API,并传入web_search。问题原因
各模型调用点此前分别维护端点、请求参数和响应解析逻辑,导致兼容行为逐渐分叉:
max_output_tokens,遇到不支持该字段的兼容网关会返回 400。choices[].delta解析,无法读取 Responses SSE 的response.output_text.delta。/chat/completions,无法使用通过 Responses 暴露的实时搜索工具。Closes #7
兼容性与影响范围
auto下仍保持旧的 Chat 行为,可显式选择接口模式。auto下使用 Responses 搜索工具。验证结果
python -m unittest tests.test_sell_strategy_rules tests.test_multi_strategy_rules tests.test_model_api tests.test_news_precheck_config tests.test_x_watchlist_monitor tests.test_us_rating_report tests.test_us_market_summary tests.test_a_share_grok_summarynode --check frontend/admin.js:通过。git diff --check:通过。scripts/validate.sh:main上复现,属于 Windows/Git Bash 的既有路径分隔符、POSIX 权限位和子进程中文编码差异,与本次改动无关。