Skip to content

Commit 884125e

Browse files
authored
community: support usage_metadata for litellm (#30625)
Support "usage_metadata" for LiteLLM. If no one reviews your PR within a few days, please @-mention one of baskaryan, eyurtsev, ccurme, vbarda, hwchase17.
1 parent 01d0cfe commit 884125e

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

libs/community/langchain_community/chat_models/litellm.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
ToolCallChunk,
4949
ToolMessage,
5050
)
51+
from langchain_core.messages.ai import UsageMetadata
5152
from langchain_core.outputs import (
5253
ChatGeneration,
5354
ChatGenerationChunk,
@@ -410,14 +411,19 @@ def _generate(
410411

411412
def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
412413
generations = []
414+
token_usage = response.get("usage", {})
413415
for res in response["choices"]:
414416
message = _convert_dict_to_message(res["message"])
417+
if isinstance(message, AIMessage):
418+
message.response_metadata = {
419+
"model_name": self.model_name or self.model
420+
}
421+
message.usage_metadata = _create_usage_metadata(token_usage)
415422
gen = ChatGeneration(
416423
message=message,
417424
generation_info=dict(finish_reason=res.get("finish_reason")),
418425
)
419426
generations.append(gen)
420-
token_usage = response.get("usage", {})
421427
set_model_value = self.model
422428
if self.model_name is not None:
423429
set_model_value = self.model_name
@@ -585,3 +591,13 @@ def _identifying_params(self) -> Dict[str, Any]:
585591
@property
586592
def _llm_type(self) -> str:
587593
return "litellm-chat"
594+
595+
596+
def _create_usage_metadata(token_usage: Mapping[str, Any]) -> UsageMetadata:
597+
input_tokens = token_usage.get("prompt_tokens", 0)
598+
output_tokens = token_usage.get("completion_tokens", 0)
599+
return UsageMetadata(
600+
input_tokens=input_tokens,
601+
output_tokens=output_tokens,
602+
total_tokens=input_tokens + output_tokens,
603+
)

libs/community/tests/integration_tests/chat_models/test_litellm_standard.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@ def chat_model_params(self) -> dict:
1919
return {"model": "ollama/mistral"}
2020

2121
@pytest.mark.xfail(reason="Not yet implemented.")
22-
def test_usage_metadata(self, model: BaseChatModel) -> None:
23-
super().test_usage_metadata(model)
22+
def test_usage_metadata_streaming(self, model: BaseChatModel) -> None:
23+
super().test_usage_metadata_streaming(model)

0 commit comments

Comments
 (0)