usage.py — langchain Source File
Architecture documentation for usage.py, a python file in the langchain codebase. 11 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c["usage.py"] 242d0b7d_a8ef_b66d_169b_c791b32a9cc9["threading"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> 242d0b7d_a8ef_b66d_169b_c791b32a9cc9 cfe2bde5_180e_e3b0_df2b_55b3ebaca8e7["collections.abc"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> cfe2bde5_180e_e3b0_df2b_55b3ebaca8e7 69e1d8cc_6173_dcd0_bfdf_2132d8e1ce56["contextlib"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> 69e1d8cc_6173_dcd0_bfdf_2132d8e1ce56 e7c46dc4_ca3a_87ac_156f_0aa3d9b9d3f4["contextvars"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> e7c46dc4_ca3a_87ac_156f_0aa3d9b9d3f4 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3["typing"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3 91721f45_4909_e489_8c1f_084f8bd87145["typing_extensions"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> 91721f45_4909_e489_8c1f_084f8bd87145 f3bc7443_c889_119d_0744_aacc3620d8d2["langchain_core.callbacks"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> f3bc7443_c889_119d_0744_aacc3620d8d2 d758344f_537f_649e_f467_b9d7442e86df["langchain_core.messages"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> d758344f_537f_649e_f467_b9d7442e86df 4eb42b7a_5c64_04cb_fcec_1401d5c10628["langchain_core.messages.ai"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> 4eb42b7a_5c64_04cb_fcec_1401d5c10628 ac2a9b92_4484_491e_1b48_ec85e71e1d58["langchain_core.outputs"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> ac2a9b92_4484_491e_1b48_ec85e71e1d58 0dd80fba_b72d_91a8_6113_3bb8b0a7af05["langchain_core.tracers.context"] 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c --> 0dd80fba_b72d_91a8_6113_3bb8b0a7af05 style 953b98f6_4d7a_4fc8_2a33_fd7cc224f03c fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
"""Callback Handler that tracks `AIMessage.usage_metadata`."""
import threading
from collections.abc import Generator
from contextlib import contextmanager
from contextvars import ContextVar
from typing import Any
from typing_extensions import override
from langchain_core.callbacks import BaseCallbackHandler
from langchain_core.messages import AIMessage
from langchain_core.messages.ai import UsageMetadata, add_usage
from langchain_core.outputs import ChatGeneration, LLMResult
from langchain_core.tracers.context import register_configure_hook
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)
// ... (90 more lines)
Domain
Subdomains
Functions
Classes
Dependencies
- collections.abc
- contextlib
- contextvars
- langchain_core.callbacks
- langchain_core.messages
- langchain_core.messages.ai
- langchain_core.outputs
- langchain_core.tracers.context
- threading
- typing
- typing_extensions
Source
Frequently Asked Questions
What does usage.py do?
usage.py is a source file in the langchain codebase, written in python. It belongs to the CoreAbstractions domain, Serialization subdomain.
What functions are defined in usage.py?
usage.py defines 1 function(s): get_usage_metadata_callback.
What does usage.py depend on?
usage.py imports 11 module(s): collections.abc, contextlib, contextvars, langchain_core.callbacks, langchain_core.messages, langchain_core.messages.ai, langchain_core.outputs, langchain_core.tracers.context, and 3 more.
Where is usage.py in the architecture?
usage.py is located at libs/core/langchain_core/callbacks/usage.py (domain: CoreAbstractions, subdomain: Serialization, directory: libs/core/langchain_core/callbacks).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free