Skip to content

fix(gemini): preserve thinking across relay formats - #2

Open
karlorz wants to merge 3 commits into
base/v0.13.2-1from
release/responses-websocket-v0.13
Open

fix(gemini): preserve thinking across relay formats#2
karlorz wants to merge 3 commits into
base/v0.13.2-1from
release/responses-websocket-v0.13

Conversation

@karlorz

@karlorz karlorz commented Aug 15, 2026

Copy link
Copy Markdown
Owner

📝 变更描述 / Description

修复 Gemini 思考内容在跨 relay 格式转换时丢失的问题。具体:

生效原理: 请求侧显式 thinking 配置优先于通用 effort 映射; 响应侧 thought 部件独立收集为 reasoning_content/thinking blocks, 不与正文或工具调用混合。

🚀 变更类型 / Type of change

  • 🐛 Bug 修复 (Bug fix)

🔗 关联任务 / Related Issue

✅ 提交前检查项 / Checklist

  • 人工确认: 我已亲自整理并撰写此描述,没有直接粘贴未经处理的 AI 输出。
  • 非重复提交: 我已搜索现有的 Issues 与 PRs,确认不是重复提交(上游等价 PR 均未合并)。
  • Bug fix 说明: 若此 PR 标记为 Bug fix,我已提交或关联对应 Issue,且不会将设计取舍、预期不一致或理解偏差直接归类为 bug。
  • 变更理解: 我已理解这些更改的工作原理及可能影响。
  • 范围聚焦: 本 PR 未包含任何与当前任务无关的代码改动。
  • 本地验证: 已在本地运行并通过测试或手动验证,维护者可以据此复核结果。
  • 安全合规: 代码中无敏感凭据,且符合项目代码规范。

📸 运行证明 / Proof of Work

go test ./dto ./service ./relay/channel/gemini -count=1
ok  github.com/QuantumNous/new-api/dto
ok  github.com/QuantumNous/new-api/service
ok  github.com/QuantumNous/new-api/relay/channel/gemini

heimoshuiyu and others added 3 commits August 15, 2026 19:26
问题:
在非 passThrough 模式下,客户端发送的 reasoning_content: "" 经过
Go struct 反序列化再序列化后,因 string + omitempty 无法区分空串和
字段缺失,导致空的思考内容被静默丢弃。

根因:
dto.Message.ReasoningContent 和 Message.Reasoning 使用 string(非指针)
加 omitempty,违反 AGENTS.md Rule 6(可选标量字段必须用指针类型)。

修复:
1. Message.ReasoningContent/Reasoning 类型从 string 改为 *string
   - nil = 字段缺失 → JSON 省略
   - &"" = 显式空串 → JSON 保留 reasoning_content: ""
2. 新增 Message.GetReasoningContent() 辅助方法
3. 更新所有读写处:relay-openai, relay-claude, relay-gemini, ollama
4. 新增测试覆盖空串保留、字段省略、getter 回退逻辑

(cherry picked from commit 8ca1033)
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.

3 participants