Skip to content

feat(api/build): 支持 Build 原生单次调用并修复非流式响应碎片与思考签名规范 - #41

Merged
Mag1cFall merged 2 commits into
Mag1cFall:mainfrom
ha7v:main
Sep 30, 2026
Merged

Mag1cFall merged 2 commits into
Mag1cFall:mainfrom
ha7v:main

Conversation

@ha7v

@ha7v ha7v commented Sep 30, 2026

Copy link
Copy Markdown

代码供参考,是gemini3.8f写的,经过了简单的代码质量检测,并且本地实测功能正常,修改成功


📝 PR Description

背景与动机

  1. 非流式响应碎片与换行破版:在处理非流式 Gemini 调用(如酒馆 SillyTavern 等客户端)时,由于直接透传了上游流式累积的 Part 片段,导致相邻文本未合并,产生大量
    [{text: "..."}, {text: "..."}] 结构,在很多前端渲染时会表现为异常换行破版;且部分附带 thoughtSignature 的 Part 为空对象,不符合 Gemini 官方输出规范。
  2. Build 通道缺少全量原生非流式支持:此前 Build 渠道仅对特定计费模型使用 Unary,免费模型走流式切片。实际上 Google Build 接口具备原生 ProxyUnaryCall
    能力,针对非流式请求直接调用原生单次接口不仅响应更加自然,还能规避流式传输中的中间状态审查与断连问题。

变更说明

1. API 层规范化(Bugfix)

  • 合并相邻文本与思考片段:非流式模式下在组装 geminiOutputParts 时自动将相邻的纯文本或思考内容按流式规范合并,对齐官方真实 REST 接口行为。
  • 规范思考签名挂载:确保 thoughtSignature 准确挂载在对应的 Content Part 上,避免输出独立的空签名 Part。
  • 单元测试补齐:在 internal/api/gemini_output_test.go 中补充了针对相邻文本合并、思考片段聚合及签名挂载的测试用例。

2. AIStudio / Build 渠道扩展(Feature)

  • 解锁 Build 原生 Unary:在 internal/aistudio/build.go 中支持通过 request.Unary 触发 ProxyUnaryCall,不局限于计费模型。
  • 全端点非流式默认走 Build:
    • 在 GenerateRequest 中引入 Unary 与 Channel 字段;
    • 对 Gemini、OpenAI、Anthropic、Responses 四大端点的非流式请求(!stream)统一标记 Unary = true;
    • 服务调度中当 Unary == true 且未指定通道时,默认优先路由至 ChannelBuild 原生单次接口。
  • 通道调度兼容:当指定特定 Channel 时,尊重通道调度策略,非流式在未配置 Build 时自动回退 Playground。

- 在非流式响应中合并相邻的文本片段与思考片段,对齐官方原生接口表现,避免在酒馆等前端中出现异常换行
- 规范化挂载 thoughtSignature 至对应的 Content Part,消除多余的独立空签名 Part
- 补充 geminiOutputParts 单元测试,覆盖相邻合并、思考签名附着及回退场景
- 解锁 Build 通道对免费模型的 Unary 支持,直接调用 ProxyUnaryCall 原生单次接口
- 非流式请求(!stream)统一标记 Unary 并默认路由至 Build 通道
- 适配 Gemini、OpenAI、Anthropic、Responses 全协议端点
@Mag1cFall
Mag1cFall merged commit 8ae5eea into Mag1cFall:main Sep 30, 2026
@Mag1cFall

Copy link
Copy Markdown
Owner

非常感谢,合入并进一步进行了修复。
e89ba29
https://github.com/Mag1cFall/AIStudio2API/releases/tag/v0.2.2

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