• ianshaw's avatar
    fix(antigravity): 修复 Gemini 模型 thoughtSignature 被错误覆盖的问题 · 8c123339
    ianshaw authored
    ## 问题描述
    
    在使用 Gemini 模型(gemini-3-flash-preview)时,出现 400 错误:
    "Unable to submit request because Thought signature is not valid"
    
    ## 根本原因
    
    在 `request_transformer.go` 的 `buildParts()` 函数中:
    - 对于 `tool_use` 和 `thinking` 块,当 `allowDummyThought=true`(Gemini 模型)时
    - 代码会无条件将客户端传入的真实 `thoughtSignature` 覆盖成 dummy 值
    - 导致 Gemini API 验证签名失败(签名与上下文不匹配)
    
    ## 修复方案
    
    修改 signature 处理逻辑:
    1. **优先透传真实 signature**:如果客户端提供了有效的 signature,保留它
    2. **缺失时才使用 dummy**:只有在 signature 缺失且是 Gemini 模型时,才使用 dummy signature
    3. **Claude 模型特殊处理**:将 dummy signature 视为缺失,避免透传到需要真实签名的链路
    
    ## 修改内容
    
    ### request_transformer.go
    - `thinking` 块(第 367-386 行):优先透传真实 signature
    - `tool_use` 块(第 411-418 行):优先透传真实 signature
    
    ### request_transformer_test.go
    - 修改测试用例名称,反映新的行为
    - 新增测试用例验证"缺失时才使用 dummy"的逻辑
    
    ## 影响范围
    
    - 修复 Gemini 模型在多轮对话中使用 tool_use 时的签名验证错误
    - 不影响 Claude 模型的现有行为
    - 提高跨账号切换时的稳定性
    
    相关问题:#[issue_number]
    8c123339
request_transformer_test.go 8.11 KB