Home / File/ context_editing.py — langchain Source File

context_editing.py — langchain Source File

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

Entity Profile

Dependency Diagram

graph LR
  2d44c5f9_dded_73e5_2892_ad762b30dc30["context_editing.py"]
  cfe2bde5_180e_e3b0_df2b_55b3ebaca8e7["collections.abc"]
  2d44c5f9_dded_73e5_2892_ad762b30dc30 --> cfe2bde5_180e_e3b0_df2b_55b3ebaca8e7
  e874d8a4_cef0_9d0b_d1ee_84999c07cc2c["copy"]
  2d44c5f9_dded_73e5_2892_ad762b30dc30 --> e874d8a4_cef0_9d0b_d1ee_84999c07cc2c
  aac5f8ad_7f2a_3a8e_3b4b_b07d681cbdcf["dataclasses"]
  2d44c5f9_dded_73e5_2892_ad762b30dc30 --> aac5f8ad_7f2a_3a8e_3b4b_b07d681cbdcf
  8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3["typing"]
  2d44c5f9_dded_73e5_2892_ad762b30dc30 --> 8e2034b7_ceb8_963f_29fc_2ea6b50ef9b3
  d758344f_537f_649e_f467_b9d7442e86df["langchain_core.messages"]
  2d44c5f9_dded_73e5_2892_ad762b30dc30 --> d758344f_537f_649e_f467_b9d7442e86df
  5563046c_094e_e4ab_c007_ae813975fd4d["langchain_core.messages.utils"]
  2d44c5f9_dded_73e5_2892_ad762b30dc30 --> 5563046c_094e_e4ab_c007_ae813975fd4d
  91721f45_4909_e489_8c1f_084f8bd87145["typing_extensions"]
  2d44c5f9_dded_73e5_2892_ad762b30dc30 --> 91721f45_4909_e489_8c1f_084f8bd87145
  50acc543_e5f0_2162_cf07_c2bf50723e0c["langchain.agents.middleware.types"]
  2d44c5f9_dded_73e5_2892_ad762b30dc30 --> 50acc543_e5f0_2162_cf07_c2bf50723e0c
  style 2d44c5f9_dded_73e5_2892_ad762b30dc30 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

"""Context editing middleware.

Mirrors Anthropic's context editing capabilities by clearing older tool results once the
conversation grows beyond a configurable token threshold.

The implementation is intentionally model-agnostic so it can be used with any LangChain
chat model.
"""

from __future__ import annotations

from collections.abc import Awaitable, Callable, Iterable, Sequence
from copy import deepcopy
from dataclasses import dataclass
from typing import Literal

from langchain_core.messages import (
    AIMessage,
    AnyMessage,
    BaseMessage,
    ToolMessage,
)
from langchain_core.messages.utils import count_tokens_approximately
from typing_extensions import Protocol

from langchain.agents.middleware.types import (
    AgentMiddleware,
    AgentState,
    ContextT,
    ModelRequest,
    ModelResponse,
    ResponseT,
)

DEFAULT_TOOL_PLACEHOLDER = "[cleared]"


TokenCounter = Callable[
    [Sequence[BaseMessage]],
    int,
]


class ContextEdit(Protocol):
    """Protocol describing a context editing strategy."""

    def apply(
        self,
        messages: list[AnyMessage],
        *,
        count_tokens: TokenCounter,
    ) -> None:
        """Apply an edit to the message list in place."""
        ...


@dataclass(slots=True)
class ClearToolUsesEdit(ContextEdit):
    """Configuration for clearing tool outputs when token limits are exceeded."""

// ... (239 more lines)

Subdomains

Dependencies

  • collections.abc
  • copy
  • dataclasses
  • langchain.agents.middleware.types
  • langchain_core.messages
  • langchain_core.messages.utils
  • typing
  • typing_extensions

Frequently Asked Questions

What does context_editing.py do?
context_editing.py is a source file in the langchain codebase, written in python. It belongs to the CoreAbstractions domain, Serialization subdomain.
What does context_editing.py depend on?
context_editing.py imports 8 module(s): collections.abc, copy, dataclasses, langchain.agents.middleware.types, langchain_core.messages, langchain_core.messages.utils, typing, typing_extensions.
Where is context_editing.py in the architecture?
context_editing.py is located at libs/langchain_v1/langchain/agents/middleware/context_editing.py (domain: CoreAbstractions, subdomain: Serialization, directory: libs/langchain_v1/langchain/agents/middleware).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free