mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
fix: 修复跨格式转换时 usage 提取不准确的问题
- CLI Handler: 跨格式转换时使用 Provider 格式的解析器提取原始 usage - CLI Handler: 新增从转换后事件中提取 usage 的补充方法 - Chat Handler: 移除不必要的格式自动检测转换代码(跨格式转换由 CLI Handler 统一处理) - OpenAI Normalizer: 流式请求自动添加 stream_options 以获取 usage 统计
This commit is contained in:
@@ -66,43 +66,26 @@ class ClaudeChatHandler(ChatHandlerBase):
|
||||
|
||||
async def _convert_request(self, request: Any) -> Any:
|
||||
"""
|
||||
将请求转换为 Claude 格式
|
||||
将请求转换为 Claude 格式的 Pydantic 对象
|
||||
|
||||
注意:此方法只做类型转换(dict → Pydantic),不做跨格式转换。
|
||||
跨格式转换由 FallbackOrchestrator 在选中候选后、发送请求前执行,
|
||||
并受全局开关和端点配置控制。
|
||||
|
||||
Args:
|
||||
request: 原始请求对象
|
||||
request: 原始请求对象(应已是 Claude 格式)
|
||||
|
||||
Returns:
|
||||
ClaudeMessagesRequest 对象
|
||||
"""
|
||||
from src.core.api_format.conversion.registry import (
|
||||
format_conversion_registry,
|
||||
register_default_normalizers,
|
||||
)
|
||||
from src.models.claude import ClaudeMessagesRequest
|
||||
from src.models.openai import OpenAIRequest
|
||||
|
||||
register_default_normalizers()
|
||||
|
||||
# 如果已经是 Claude 格式,直接返回
|
||||
# 如果已经是 Claude 格式 Pydantic 对象,直接返回
|
||||
if isinstance(request, ClaudeMessagesRequest):
|
||||
return request
|
||||
|
||||
# 如果是 OpenAI 格式,转换为 Claude 格式
|
||||
if isinstance(request, OpenAIRequest):
|
||||
req_dict = request.model_dump() if hasattr(request, "model_dump") else request.dict()
|
||||
claude_dict = format_conversion_registry.convert_request(req_dict, "OPENAI", "CLAUDE")
|
||||
return ClaudeMessagesRequest(**claude_dict)
|
||||
|
||||
# 如果是字典,根据内容判断格式
|
||||
# 如果是字典,转换为 Pydantic 对象(假设已是 Claude 格式)
|
||||
if isinstance(request, dict):
|
||||
if "messages" in request and len(request["messages"]) > 0:
|
||||
first_msg = request["messages"][0]
|
||||
if "role" in first_msg and "content" in first_msg:
|
||||
# 可能是 OpenAI 格式
|
||||
claude_dict = format_conversion_registry.convert_request(request, "OPENAI", "CLAUDE")
|
||||
return ClaudeMessagesRequest(**claude_dict)
|
||||
|
||||
# 否则假设已经是 Claude 格式
|
||||
return ClaudeMessagesRequest(**request)
|
||||
|
||||
return request
|
||||
|
||||
Reference in New Issue
Block a user