UsageMetadataCallbackHandler Class — langchain Architecture
Architecture documentation for the UsageMetadataCallbackHandler class in usage.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 5398956b_defd_2704_ae7a_d330ccfef3ff["UsageMetadataCallbackHandler"] 50ee4473_6788_2806_dc06_5fbbc8f64275["BaseCallbackHandler"] 5398956b_defd_2704_ae7a_d330ccfef3ff -->|extends| 50ee4473_6788_2806_dc06_5fbbc8f64275 fb3554e0_291b_93d2_d325_51461432ed8a["ChatGeneration"] 5398956b_defd_2704_ae7a_d330ccfef3ff -->|extends| fb3554e0_291b_93d2_d325_51461432ed8a fcfa55b0_4a86_fa31_a156_3c38c76a0a9b["AIMessage"] 5398956b_defd_2704_ae7a_d330ccfef3ff -->|extends| fcfa55b0_4a86_fa31_a156_3c38c76a0a9b 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c["usage.py"] 5398956b_defd_2704_ae7a_d330ccfef3ff -->|defined in| 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c 7a523848_d2bb_ab43_4aeb_c3bea2039ccc["__init__()"] 5398956b_defd_2704_ae7a_d330ccfef3ff -->|method| 7a523848_d2bb_ab43_4aeb_c3bea2039ccc 45cb1c2d_d0a4_5313_c55b_e783562e0912["__repr__()"] 5398956b_defd_2704_ae7a_d330ccfef3ff -->|method| 45cb1c2d_d0a4_5313_c55b_e783562e0912 0477ef04_4449_4aab_8674_9c6c0740641f["on_llm_end()"] 5398956b_defd_2704_ae7a_d330ccfef3ff -->|method| 0477ef04_4449_4aab_8674_9c6c0740641f
Relationship Graph
Source Code
libs/core/langchain_core/callbacks/usage.py lines 18–89
class UsageMetadataCallbackHandler(BaseCallbackHandler):
"""Callback Handler that tracks `AIMessage.usage_metadata`.
Example:
```python
from langchain.chat_models import init_chat_model
from langchain_core.callbacks import UsageMetadataCallbackHandler
llm_1 = init_chat_model(model="openai:gpt-4o-mini")
llm_2 = init_chat_model(model="anthropic:claude-3-5-haiku-20241022")
callback = UsageMetadataCallbackHandler()
result_1 = llm_1.invoke("Hello", config={"callbacks": [callback]})
result_2 = llm_2.invoke("Hello", config={"callbacks": [callback]})
callback.usage_metadata
```
```txt
{'gpt-4o-mini-2024-07-18': {'input_tokens': 8,
'output_tokens': 10,
'total_tokens': 18,
'input_token_details': {'audio': 0, 'cache_read': 0},
'output_token_details': {'audio': 0, 'reasoning': 0}},
'claude-3-5-haiku-20241022': {'input_tokens': 8,
'output_tokens': 21,
'total_tokens': 29,
'input_token_details': {'cache_read': 0, 'cache_creation': 0}}}
```
!!! version-added "Added in `langchain-core` 0.3.49"
"""
def __init__(self) -> None:
"""Initialize the `UsageMetadataCallbackHandler`."""
super().__init__()
self._lock = threading.Lock()
self.usage_metadata: dict[str, UsageMetadata] = {}
@override
def __repr__(self) -> str:
return str(self.usage_metadata)
@override
def on_llm_end(self, response: LLMResult, **kwargs: Any) -> None:
"""Collect token usage."""
# Check for usage_metadata (langchain-core >= 0.2.2)
try:
generation = response.generations[0][0]
except IndexError:
generation = None
usage_metadata = None
model_name = None
if isinstance(generation, ChatGeneration):
try:
message = generation.message
if isinstance(message, AIMessage):
usage_metadata = message.usage_metadata
model_name = message.response_metadata.get("model_name")
except AttributeError:
pass
# update shared state behind lock
if usage_metadata and model_name:
with self._lock:
if model_name not in self.usage_metadata:
self.usage_metadata[model_name] = usage_metadata
else:
self.usage_metadata[model_name] = add_usage(
self.usage_metadata[model_name], usage_metadata
)
Defined In
Source
Frequently Asked Questions
What is the UsageMetadataCallbackHandler class?
UsageMetadataCallbackHandler is a class in the langchain codebase, defined in libs/core/langchain_core/callbacks/usage.py.
Where is UsageMetadataCallbackHandler defined?
UsageMetadataCallbackHandler is defined in libs/core/langchain_core/callbacks/usage.py at line 18.
What does UsageMetadataCallbackHandler extend?
UsageMetadataCallbackHandler extends BaseCallbackHandler, ChatGeneration, AIMessage.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free