mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
Merge pull request #166 from AAEE86/dev
fix: Claude SSE 流式输出补充 event 类型行
This commit is contained in:
@@ -712,6 +712,17 @@ class StreamProcessor:
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def _format_sse_event(evt: dict) -> bytes:
|
||||||
|
"""根据客户端格式生成 SSE 事件字节。
|
||||||
|
|
||||||
|
Claude 格式需要 event: 行,OpenAI/Gemini 只需要 data: 行。
|
||||||
|
"""
|
||||||
|
if client_family == "claude":
|
||||||
|
event_type_str = evt.get("type", "")
|
||||||
|
if event_type_str:
|
||||||
|
return f"event: {event_type_str}\ndata: {json.dumps(evt, ensure_ascii=False)}\n\n".encode()
|
||||||
|
return f"data: {json.dumps(evt, ensure_ascii=False)}\n\n".encode()
|
||||||
|
|
||||||
# 处理预读数据
|
# 处理预读数据
|
||||||
if needs_conversion:
|
if needs_conversion:
|
||||||
registry = get_format_converter_registry()
|
registry = get_format_converter_registry()
|
||||||
@@ -822,9 +833,7 @@ class StreamProcessor:
|
|||||||
# 日志记录完整错误(内部排查),客户端只返回脱敏消息
|
# 日志记录完整错误(内部排查),客户端只返回脱敏消息
|
||||||
logger.warning(f"[{self.request_id}] 流式格式转换失败: {conv_err}")
|
logger.warning(f"[{self.request_id}] 流式格式转换失败: {conv_err}")
|
||||||
payload = _build_stream_error_payload("响应格式转换失败,请稍后重试")
|
payload = _build_stream_error_payload("响应格式转换失败,请稍后重试")
|
||||||
error_bytes = (
|
error_bytes = _format_sse_event(payload)
|
||||||
f"data: {json.dumps(payload, ensure_ascii=False)}\n\n".encode()
|
|
||||||
)
|
|
||||||
done_bytes = b"data: [DONE]\n\n" if client_family == "openai" else b""
|
done_bytes = b"data: [DONE]\n\n" if client_family == "openai" else b""
|
||||||
if done_bytes:
|
if done_bytes:
|
||||||
openai_done_sent = True
|
openai_done_sent = True
|
||||||
@@ -857,9 +866,8 @@ class StreamProcessor:
|
|||||||
# 从转换后的事件中补充 usage 信息
|
# 从转换后的事件中补充 usage 信息
|
||||||
self._extract_usage_from_converted_event(ctx, evt, event_type)
|
self._extract_usage_from_converted_event(ctx, evt, event_type)
|
||||||
|
|
||||||
# 统一使用 SSE 格式输出(Gemini streamGenerateContent 也使用 SSE)
|
# 根据客户端格式生成 SSE 事件
|
||||||
# 参考: https://ai.google.dev/api/generate-content
|
out.append(_format_sse_event(evt) if isinstance(evt, dict) else f"data: {json.dumps(evt, ensure_ascii=False)}\n\n".encode())
|
||||||
out.append(f"data: {json.dumps(evt, ensure_ascii=False)}\n\n".encode())
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
# 统一处理 prefetched + iterator
|
# 统一处理 prefetched + iterator
|
||||||
|
|||||||
Reference in New Issue
Block a user