feat: 使用量记录添加格式转换字段

- cli_handler_base 添加 needs_conversion 变量跟踪格式转换状态
- 用户使用量查询响应新增 endpoint_api_format 和 has_format_conversion 字段
This commit is contained in:
fawney19
2026-01-28 10:01:19 +08:00
parent 865be3a6bf
commit c1d7b13e7a
2 changed files with 4 additions and 1 deletions

View File

@@ -2030,6 +2030,7 @@ class CliMessageHandlerBase(BaseMessageHandler):
key_id = None # Key ID用于失败记录 key_id = None # Key ID用于失败记录
mapped_model_result = None # 映射后的目标模型名(用于 Usage 记录) mapped_model_result = None # 映射后的目标模型名(用于 Usage 记录)
response_metadata_result: Dict[str, Any] = {} # Provider 响应元数据 response_metadata_result: Dict[str, Any] = {} # Provider 响应元数据
needs_conversion = False # 是否需要格式转换(由 candidate 决定)
# 可变请求体容器:允许 orchestrator 在遇到 Thinking 签名错误时整流请求体后重试 # 可变请求体容器:允许 orchestrator 在遇到 Thinking 签名错误时整流请求体后重试
# 结构: {"body": 实际请求体, "_rectified": 是否已整流, "_rectified_this_turn": 本轮是否整流} # 结构: {"body": 实际请求体, "_rectified": 是否已整流, "_rectified_this_turn": 本轮是否整流}
@@ -2041,7 +2042,7 @@ class CliMessageHandlerBase(BaseMessageHandler):
key: ProviderAPIKey, key: ProviderAPIKey,
candidate: ProviderCandidate, candidate: ProviderCandidate,
) -> Dict[str, Any]: ) -> Dict[str, Any]:
nonlocal provider_name, response_json, status_code, response_headers, provider_api_format, provider_request_headers, provider_request_body, mapped_model_result, response_metadata_result nonlocal provider_name, response_json, status_code, response_headers, provider_api_format, provider_request_headers, provider_request_body, mapped_model_result, response_metadata_result, needs_conversion
provider_name = str(provider.name) provider_name = str(provider.name)
provider_api_format = str(endpoint.api_format) if endpoint.api_format else "" provider_api_format = str(endpoint.api_format) if endpoint.api_format else ""

View File

@@ -900,6 +900,8 @@ class GetUsageAdapter(AuthenticatedApiAdapter):
"model": r.model, "model": r.model,
"target_model": r.target_model, # 映射后的目标模型名 "target_model": r.target_model, # 映射后的目标模型名
"api_format": r.api_format, "api_format": r.api_format,
"endpoint_api_format": r.endpoint_api_format,
"has_format_conversion": bool(r.has_format_conversion) if r.has_format_conversion is not None else False,
"input_tokens": r.input_tokens, "input_tokens": r.input_tokens,
"output_tokens": r.output_tokens, "output_tokens": r.output_tokens,
"total_tokens": r.total_tokens, "total_tokens": r.total_tokens,