|
48 | 48 | ToolCallChunk,
|
49 | 49 | ToolMessage,
|
50 | 50 | )
|
| 51 | +from langchain_core.messages.ai import UsageMetadata |
51 | 52 | from langchain_core.outputs import (
|
52 | 53 | ChatGeneration,
|
53 | 54 | ChatGenerationChunk,
|
@@ -410,14 +411,19 @@ def _generate(
|
410 | 411 |
|
411 | 412 | def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
|
412 | 413 | generations = []
|
| 414 | + token_usage = response.get("usage", {}) |
413 | 415 | for res in response["choices"]:
|
414 | 416 | 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) |
415 | 422 | gen = ChatGeneration(
|
416 | 423 | message=message,
|
417 | 424 | generation_info=dict(finish_reason=res.get("finish_reason")),
|
418 | 425 | )
|
419 | 426 | generations.append(gen)
|
420 |
| - token_usage = response.get("usage", {}) |
421 | 427 | set_model_value = self.model
|
422 | 428 | if self.model_name is not None:
|
423 | 429 | set_model_value = self.model_name
|
@@ -585,3 +591,13 @@ def _identifying_params(self) -> Dict[str, Any]:
|
585 | 591 | @property
|
586 | 592 | def _llm_type(self) -> str:
|
587 | 593 | 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 | + ) |
0 commit comments