Home / Class/ UsageMetadataCallbackHandler Class — langchain Architecture

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
                    )

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