fix: 修复响应解析器中 usage 为 null 时的处理问题

将 response.get("usage", {}) 改为 response.get("usage") or {},
避免 usage 显式为 None 时导致后续属性访问失败。
This commit is contained in:
fawney19
2026-01-29 09:44:12 +08:00
parent ac73f6fbac
commit 2e9c9e80d1

View File

@@ -203,7 +203,7 @@ class OpenAIResponseParser(ResponseParser):
result.response_id = response.get("id") result.response_id = response.get("id")
# 提取 usage # 提取 usage
usage = response.get("usage", {}) usage = response.get("usage") or {}
result.input_tokens = usage.get("prompt_tokens", 0) result.input_tokens = usage.get("prompt_tokens", 0)
result.output_tokens = usage.get("completion_tokens", 0) result.output_tokens = usage.get("completion_tokens", 0)
@@ -218,7 +218,7 @@ class OpenAIResponseParser(ResponseParser):
return result return result
def extract_usage_from_response(self, response: Dict[str, Any]) -> Dict[str, int]: def extract_usage_from_response(self, response: Dict[str, Any]) -> Dict[str, int]:
usage = response.get("usage", {}) usage = response.get("usage") or {}
return { return {
"input_tokens": usage.get("prompt_tokens", 0), "input_tokens": usage.get("prompt_tokens", 0),
"output_tokens": usage.get("completion_tokens", 0), "output_tokens": usage.get("completion_tokens", 0),
@@ -342,7 +342,7 @@ class ClaudeResponseParser(ResponseParser):
result.response_id = response.get("id") result.response_id = response.get("id")
# 提取 usage # 提取 usage
usage = response.get("usage", {}) usage = response.get("usage") or {}
result.input_tokens = usage.get("input_tokens", 0) result.input_tokens = usage.get("input_tokens", 0)
result.output_tokens = usage.get("output_tokens", 0) result.output_tokens = usage.get("output_tokens", 0)
result.cache_creation_tokens = extract_cache_creation_tokens(usage) result.cache_creation_tokens = extract_cache_creation_tokens(usage)
@@ -361,9 +361,9 @@ class ClaudeResponseParser(ResponseParser):
def extract_usage_from_response(self, response: Dict[str, Any]) -> Dict[str, int]: def extract_usage_from_response(self, response: Dict[str, Any]) -> Dict[str, int]:
# 对于 message_start 事件usage 在 message.usage 路径下 # 对于 message_start 事件usage 在 message.usage 路径下
# 对于其他响应usage 在顶层 # 对于其他响应usage 在顶层
usage = response.get("usage", {}) usage = response.get("usage") or {}
if not usage and "message" in response: if not usage and "message" in response:
usage = response.get("message", {}).get("usage", {}) usage = (response.get("message") or {}).get("usage") or {}
return { return {
"input_tokens": usage.get("input_tokens", 0), "input_tokens": usage.get("input_tokens", 0),