@@ -844,9 +844,11 @@ def _parse_usage_model(usage: typing.Union[pydantic.BaseModel, dict]):
844844 and "modality" in item
845845 and "token_count" in item
846846 ):
847- usage_model [f"input_modality_{ item ['modality' ]} " ] = item [
848- "token_count"
849- ]
847+ value = item ["token_count" ]
848+ usage_model [f"input_modality_{ item ['modality' ]} " ] = value
849+
850+ if "input" in usage_model :
851+ usage_model ["input" ] = max (0 , usage_model ["input" ] - value )
850852
851853 # Vertex AI
852854 if "candidates_tokens_details" in usage_model and isinstance (
@@ -860,9 +862,11 @@ def _parse_usage_model(usage: typing.Union[pydantic.BaseModel, dict]):
860862 and "modality" in item
861863 and "token_count" in item
862864 ):
863- usage_model [f"output_modality_{ item ['modality' ]} " ] = item [
864- "token_count"
865- ]
865+ value = item ["token_count" ]
866+ usage_model [f"output_modality_{ item ['modality' ]} " ] = value
867+
868+ if "output" in usage_model :
869+ usage_model ["output" ] = max (0 , usage_model ["output" ] - value )
866870
867871 # Vertex AI
868872 if "cache_tokens_details" in usage_model and isinstance (
@@ -876,9 +880,11 @@ def _parse_usage_model(usage: typing.Union[pydantic.BaseModel, dict]):
876880 and "modality" in item
877881 and "token_count" in item
878882 ):
879- usage_model [f"cached_modality_{ item ['modality' ]} " ] = item [
880- "token_count"
881- ]
883+ value = item ["token_count" ]
884+ usage_model [f"cached_modality_{ item ['modality' ]} " ] = value
885+
886+ if "input" in usage_model :
887+ usage_model ["input" ] = max (0 , usage_model ["input" ] - value )
882888
883889 usage_model = {k : v for k , v in usage_model .items () if not isinstance (v , str )}
884890
0 commit comments