feat(ai-pipeline): 支持 reasoning signature 及媒体内容块的跨格式流式转换

- 在 CanonicalStreamEvent 中新增 ReasoningSignature 和 ContentPart 变体,CanonicalContentPart 枚举覆盖图片/文件/音频
- Gemini 流解析器提取 thoughtSignature,并对 inlineData/fileData 等非文本 part 生成 ContentPart 事件
- Claude 流聚合支持 thinking_delta / signature_delta,输出 thinking block 携带 signature 字段
- Gemini 同步响应聚合重写,支持媒体 part 和 reasoning signature 的完整还原
- 跨格式矩阵(gemini↔claude↔openai)补全图片块双向转换及 reasoning signature 传递
- 请求转换层(to/from openai_chat)补全 Claude/Gemini 的 thinking、图片、工具调用字段映射
- 新增/扩展测试:inline image 双向重写、thinking signature 聚合、跨格式 sync product 媒体字段
This commit is contained in:
fawney19
2026-04-24 02:18:34 +08:00
parent 0f94f92c37
commit 581bc03d4e
28 changed files with 4155 additions and 499 deletions

View File

@@ -886,7 +886,7 @@ mod tests {
record_admin_provider_pool_stream_timeout(&runner, "provider-1", "key-4", &pool_config)
.await;
let runtime = read_admin_provider_pool_runtime_state(
let mut runtime = read_admin_provider_pool_runtime_state(
&runner,
"provider-1",
&key_ids,
@@ -894,6 +894,25 @@ mod tests {
None,
)
.await;
for _ in 0..20 {
if runtime
.cooldown_reason_by_key
.get("key-4")
.map(String::as_str)
== Some("stream_timeout_x2")
{
break;
}
tokio::time::sleep(std::time::Duration::from_millis(10)).await;
runtime = read_admin_provider_pool_runtime_state(
&runner,
"provider-1",
&key_ids,
&pool_config,
None,
)
.await;
}
assert_eq!(
runtime