Home / File/ usage.py — langchain Source File

usage.py — langchain Source File

Architecture documentation for usage.py, a python file in the langchain codebase. 11 imports, 0 dependents.

File python CoreAbstractions Serialization 11 imports 1 functions 1 classes

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)

Subdomains

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

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