@@ -432,9 +432,9 @@ def extract_openai_usage_from_response(response: Any) -> TokenUsage:
432432 output_tokens = output_tokens ,
433433 )
434434
435- if cached_tokens > 0 :
435+ if cached_tokens is not None and cached_tokens > 0 :
436436 result ["cache_read_input_tokens" ] = cached_tokens
437- if reasoning_tokens > 0 :
437+ if reasoning_tokens is not None and reasoning_tokens > 0 :
438438 result ["reasoning_tokens" ] = reasoning_tokens
439439
440440 web_search_count = extract_openai_web_search_count (response )
@@ -488,17 +488,17 @@ def extract_openai_usage_from_chunk(
488488 if hasattr (chunk .usage , "prompt_tokens_details" ) and hasattr (
489489 chunk .usage .prompt_tokens_details , "cached_tokens"
490490 ):
491- usage [ "cache_read_input_tokens" ] = (
492- chunk . usage . prompt_tokens_details . cached_tokens
493- )
491+ cached = chunk . usage . prompt_tokens_details . cached_tokens
492+ if cached is not None :
493+ usage [ "cache_read_input_tokens" ] = cached
494494
495495 # Handle reasoning tokens
496496 if hasattr (chunk .usage , "completion_tokens_details" ) and hasattr (
497497 chunk .usage .completion_tokens_details , "reasoning_tokens"
498498 ):
499- usage [ "reasoning_tokens" ] = (
500- chunk . usage . completion_tokens_details . reasoning_tokens
501- )
499+ reasoning = chunk . usage . completion_tokens_details . reasoning_tokens
500+ if reasoning is not None :
501+ usage [ "reasoning_tokens" ] = reasoning
502502
503503 # Capture raw usage metadata for backend processing
504504 # Serialize to dict here in the converter (not in utils)
@@ -522,17 +522,17 @@ def extract_openai_usage_from_chunk(
522522 if hasattr (response_usage , "input_tokens_details" ) and hasattr (
523523 response_usage .input_tokens_details , "cached_tokens"
524524 ):
525- usage [ "cache_read_input_tokens" ] = (
526- response_usage . input_tokens_details . cached_tokens
527- )
525+ cached = response_usage . input_tokens_details . cached_tokens
526+ if cached is not None :
527+ usage [ "cache_read_input_tokens" ] = cached
528528
529529 # Handle reasoning tokens
530530 if hasattr (response_usage , "output_tokens_details" ) and hasattr (
531531 response_usage .output_tokens_details , "reasoning_tokens"
532532 ):
533- usage [ "reasoning_tokens" ] = (
534- response_usage . output_tokens_details . reasoning_tokens
535- )
533+ reasoning = response_usage . output_tokens_details . reasoning_tokens
534+ if reasoning is not None :
535+ usage [ "reasoning_tokens" ] = reasoning
536536
537537 # Extract web search count from the complete response
538538 if hasattr (chunk , "response" ):
0 commit comments