Skip to content

fix(antigravity): 修复非流式 Claude To Antigravity 响应内容为空的问题#358

Merged
Wei-Shaw merged 2 commits intoWei-Shaw:mainfrom
0xff26b9a8:main
Jan 22, 2026
Merged

fix(antigravity): 修复非流式 Claude To Antigravity 响应内容为空的问题#358
Wei-Shaw merged 2 commits intoWei-Shaw:mainfrom
0xff26b9a8:main

Conversation

@0xff26b9a8
Copy link
Copy Markdown
Contributor

修复非流式 Claude To Antigravity 响应内容为空的问题(#305)

概述

本次提交修复了 Antigravity 网关在处理非流式 Claude 请求时,响应内容为空的问题。问题根源在于流式响应收集逻辑只保留了最后一个 chunk(通常 text 为空),以及 JSON 解析逻辑未能正确处理 candidates 为空的情况。

主要改动

1. 修复 TransformGeminiToClaude 的 JSON 解析逻辑

问题描述:

  • 当 V1InternalResponse 解析成功但 candidates 为空时,未能正确回退到直接解析 GeminiResponse 格式。

技术实现:

  • backend/internal/pkg/antigravity/response_transformer.go: 新增判断逻辑,当 candidates 为空时尝试直接解析为 GeminiResponse 格式。

2. 修复 handleClaudeStreamToNonStreaming 流式响应收集逻辑

问题描述:

  • 原逻辑只保留最后一个有 parts 的响应,但最后一个 chunk 通常 text 为空,导致最终响应内容丢失。

技术实现:

  • backend/internal/service/antigravity_gateway_service.go:
    • 新增 collectedParts 变量,累积所有 chunks 的 parts(包括 text、thinking、functionCall、inlineData 等)。
    • 新增 mergeCollectedPartsToResponse 函数,合并所有类型的 parts,保持原始顺序,连续的普通 text parts 合并为一个。

3. 修复 NonStreamingProcessor 的 text 处理逻辑

问题描述:

  • 带签名的 text 处理逻辑存在问题,先累积再刷新导致内容丢失。

技术实现:

  • backend/internal/pkg/antigravity/response_transformer.go: 修改带签名 text 的处理逻辑,直接输出 text 块而不是累积到 builder。

文件变更

后端:

  • backend/internal/pkg/antigravity/response_transformer.go - 修复 JSON 解析逻辑和 text 处理逻辑
  • backend/internal/service/antigravity_gateway_service.go - 新增 parts 收集和合并逻辑

核心改进

数据完整性:

  • 确保流式转非流式时所有内容都被正确收集和合并。
  • 支持多种 part 类型(text、thinking、functionCall、inlineData)的正确处理。

合并策略:

  • 保持原始顺序
  • 连续的普通 text parts 合并为一个
  • thinking、functionCall、inlineData 等保持原样

测试验证

  • ✅ 验证非流式 Claude To Antigravity 请求响应内容正确
  • ✅ 验证流式转非流式场景下内容完整
  • ✅ 编译后端通过

- 修复 TransformGeminiToClaude 的 JSON 解析逻辑,当 V1InternalResponse
  解析成功但 candidates 为空时,尝试直接解析为 GeminiResponse 格式
- 修复 handleClaudeStreamToNonStreaming 收集流式响应的逻辑,累积所有
  chunks 的内容而不是只保留最后一个(最后一个 chunk 通常 text 为空)
- 新增 mergeCollectedPartsToResponse 函数,合并所有类型的 parts
  (text、thinking、functionCall、inlineData),保持原始顺序
- 连续的普通 text parts 合并为一个,thinking/functionCall/inlineData 保持原样
@zhangdailin
Copy link
Copy Markdown

就等这个合进去了

@Wei-Shaw Wei-Shaw merged commit 226df1c into Wei-Shaw:main Jan 22, 2026
4 checks passed
xuebkgithub pushed a commit to xuebkgithub/sub2api that referenced this pull request Mar 3, 2026
fix(antigravity): 修复非流式 Claude To Antigravity 响应内容为空的问题
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