From 4fc79af2fb89f635e64372992c74c4d2c7aef913 Mon Sep 17 00:00:00 2001 From: Tushar Goyal <92171383+thetushargoyal@users.noreply.github.com> Date: Mon, 14 Apr 2025 21:11:02 +0530 Subject: [PATCH] added support for response_cost for LiteLLM model for non streaming responses --- src/google/adk/models/lite_llm.py | 16 ++++++++++++---- src/google/adk/models/llm_response.py | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/google/adk/models/lite_llm.py b/src/google/adk/models/lite_llm.py index acdaa557043..cf377f75759 100644 --- a/src/google/adk/models/lite_llm.py +++ b/src/google/adk/models/lite_llm.py @@ -391,11 +391,17 @@ def _model_response_to_generate_content_response( if not message: raise ValueError("No message in response") - return _message_to_generate_content_response(message) + + response_cost = None + if hasattr(response, "_hidden_params") and isinstance(response._hidden_params, dict): + response_cost = response._hidden_params.get("response_cost") + response_cost = response_cost*86 + + return _message_to_generate_content_response(message, response_cost=response_cost) def _message_to_generate_content_response( - message: Message, is_partial: bool = False + message: Message, is_partial: bool = False, response_cost: float = None ) -> LlmResponse: """Converts a litellm message to LlmResponse. @@ -422,7 +428,9 @@ def _message_to_generate_content_response( parts.append(part) return LlmResponse( - content=types.Content(role="model", parts=parts), partial=is_partial + content=types.Content(role="model", parts=parts), + partial=is_partial, + response_cost=response_cost ) @@ -596,7 +604,7 @@ async def generate_content_async( LlmResponse: The model response. """ - logger.info(_build_request_log(llm_request)) + # logger.info(_build_request_log(llm_request)) messages, tools = _get_completion_inputs(llm_request) diff --git a/src/google/adk/models/llm_response.py b/src/google/adk/models/llm_response.py index 895e7a08e5e..e73ed5b993e 100644 --- a/src/google/adk/models/llm_response.py +++ b/src/google/adk/models/llm_response.py @@ -70,6 +70,7 @@ class LlmResponse(BaseModel): """Flag indicating that LLM was interrupted when generating the content. Usually it's due to user interruption during a bidi streaming. """ + response_cost: Optional[float] = None @staticmethod def create(