@@ -1062,18 +1062,29 @@ def _map_usage(response: chat.ChatCompletion | ChatCompletionChunk | responses.R
1062
1062
if response_usage is None :
1063
1063
return usage .Usage ()
1064
1064
elif isinstance (response_usage , responses .ResponseUsage ):
1065
- details : dict [str , int ] = {}
1065
+ details : dict [str , int ] = {
1066
+ key : value
1067
+ for key , value in response_usage .model_dump (
1068
+ exclude = {'input_tokens' , 'output_tokens' , 'total_tokens' }
1069
+ ).items ()
1070
+ if isinstance (value , int )
1071
+ }
1072
+ details ['reasoning_tokens' ] = response_usage .output_tokens_details .reasoning_tokens
1073
+ details ['cached_tokens' ] = response_usage .input_tokens_details .cached_tokens
1066
1074
return usage .Usage (
1067
1075
request_tokens = response_usage .input_tokens ,
1068
1076
response_tokens = response_usage .output_tokens ,
1069
1077
total_tokens = response_usage .total_tokens ,
1070
- details = {
1071
- 'reasoning_tokens' : response_usage .output_tokens_details .reasoning_tokens ,
1072
- 'cached_tokens' : response_usage .input_tokens_details .cached_tokens ,
1073
- },
1078
+ details = details ,
1074
1079
)
1075
1080
else :
1076
- details = {}
1081
+ details = {
1082
+ key : value
1083
+ for key , value in response_usage .model_dump (
1084
+ exclude = {'prompt_tokens' , 'completion_tokens' , 'total_tokens' }
1085
+ ).items ()
1086
+ if isinstance (value , int )
1087
+ }
1077
1088
if response_usage .completion_tokens_details is not None :
1078
1089
details .update (response_usage .completion_tokens_details .model_dump (exclude_none = True ))
1079
1090
if response_usage .prompt_tokens_details is not None :
0 commit comments