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)
Domain
Subdomains
Dependencies
- collections.abc
- copy
- dataclasses
- langchain.agents.middleware.types
- langchain_core.messages
- langchain_core.messages.utils
- typing
- typing_extensions
Source
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