mirror of
https://github.com/hwchase17/langchain.git
synced 2025-08-12 14:23:58 +00:00
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.
This commit is contained in:
parent
01d0cfe450
commit
884125e129
@ -48,6 +48,7 @@ from langchain_core.messages import (
|
|||||||
ToolCallChunk,
|
ToolCallChunk,
|
||||||
ToolMessage,
|
ToolMessage,
|
||||||
)
|
)
|
||||||
|
from langchain_core.messages.ai import UsageMetadata
|
||||||
from langchain_core.outputs import (
|
from langchain_core.outputs import (
|
||||||
ChatGeneration,
|
ChatGeneration,
|
||||||
ChatGenerationChunk,
|
ChatGenerationChunk,
|
||||||
@ -410,14 +411,19 @@ class ChatLiteLLM(BaseChatModel):
|
|||||||
|
|
||||||
def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
|
def _create_chat_result(self, response: Mapping[str, Any]) -> ChatResult:
|
||||||
generations = []
|
generations = []
|
||||||
|
token_usage = response.get("usage", {})
|
||||||
for res in response["choices"]:
|
for res in response["choices"]:
|
||||||
message = _convert_dict_to_message(res["message"])
|
message = _convert_dict_to_message(res["message"])
|
||||||
|
if isinstance(message, AIMessage):
|
||||||
|
message.response_metadata = {
|
||||||
|
"model_name": self.model_name or self.model
|
||||||
|
}
|
||||||
|
message.usage_metadata = _create_usage_metadata(token_usage)
|
||||||
gen = ChatGeneration(
|
gen = ChatGeneration(
|
||||||
message=message,
|
message=message,
|
||||||
generation_info=dict(finish_reason=res.get("finish_reason")),
|
generation_info=dict(finish_reason=res.get("finish_reason")),
|
||||||
)
|
)
|
||||||
generations.append(gen)
|
generations.append(gen)
|
||||||
token_usage = response.get("usage", {})
|
|
||||||
set_model_value = self.model
|
set_model_value = self.model
|
||||||
if self.model_name is not None:
|
if self.model_name is not None:
|
||||||
set_model_value = self.model_name
|
set_model_value = self.model_name
|
||||||
@ -585,3 +591,13 @@ class ChatLiteLLM(BaseChatModel):
|
|||||||
@property
|
@property
|
||||||
def _llm_type(self) -> str:
|
def _llm_type(self) -> str:
|
||||||
return "litellm-chat"
|
return "litellm-chat"
|
||||||
|
|
||||||
|
|
||||||
|
def _create_usage_metadata(token_usage: Mapping[str, Any]) -> UsageMetadata:
|
||||||
|
input_tokens = token_usage.get("prompt_tokens", 0)
|
||||||
|
output_tokens = token_usage.get("completion_tokens", 0)
|
||||||
|
return UsageMetadata(
|
||||||
|
input_tokens=input_tokens,
|
||||||
|
output_tokens=output_tokens,
|
||||||
|
total_tokens=input_tokens + output_tokens,
|
||||||
|
)
|
||||||
|
@ -19,5 +19,5 @@ class TestLiteLLMStandard(ChatModelIntegrationTests):
|
|||||||
return {"model": "ollama/mistral"}
|
return {"model": "ollama/mistral"}
|
||||||
|
|
||||||
@pytest.mark.xfail(reason="Not yet implemented.")
|
@pytest.mark.xfail(reason="Not yet implemented.")
|
||||||
def test_usage_metadata(self, model: BaseChatModel) -> None:
|
def test_usage_metadata_streaming(self, model: BaseChatModel) -> None:
|
||||||
super().test_usage_metadata(model)
|
super().test_usage_metadata_streaming(model)
|
||||||
|
Loading…
Reference in New Issue
Block a user