From 4b6a0c2356d7771d702189ee95c6711c7250a917 Mon Sep 17 00:00:00 2001 From: Liam McDonald Date: Fri, 8 May 2026 15:15:48 -0700 Subject: [PATCH] Avoid usage_input dict in-place --- litellm/responses/utils.py | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/litellm/responses/utils.py b/litellm/responses/utils.py index 4866bc1be88..ee0f1c6338f 100644 --- a/litellm/responses/utils.py +++ b/litellm/responses/utils.py @@ -914,22 +914,12 @@ class ResponseAPILoggingUtils: ) response_api_usage: ResponseAPIUsage if isinstance(usage_input, dict): - # Realtime uses input_token_details and output_token_details; convert to - # input_tokens_details and output_tokens_details when those are unset. - if ( - usage_input.get("input_tokens_details") is None - and "input_token_details" in usage_input - ): - usage_input["input_tokens_details"] = usage_input[ - "input_token_details" - ] - if ( - usage_input.get("output_tokens_details") is None - and "output_token_details" in usage_input - ): - usage_input["output_tokens_details"] = usage_input[ - "output_token_details" - ] + usage_input = dict(usage_input) # shallow copy; avoid mutating caller + # Realtime *_token_details → *_tokens_details when unset. + if usage_input.get("input_tokens_details") is None and "input_token_details" in usage_input: + usage_input["input_tokens_details"] = usage_input["input_token_details"] + if usage_input.get("output_tokens_details") is None and "output_token_details" in usage_input: + usage_input["output_tokens_details"] = usage_input["output_token_details"] total_tokens = usage_input.get("total_tokens") if total_tokens is None: input_tokens = usage_input.get("input_tokens")