ClearToolUsesEdit Class — langchain Architecture
Architecture documentation for the ClearToolUsesEdit class in context_editing.py from the langchain codebase.
Entity Profile
Dependency Diagram
graph TD 342553be_63ff_6f10_00db_f8b52bed863a["ClearToolUsesEdit"] 2262afd8_6429_0a5f_33b7_2affd1cf9410["ContextEdit"] 342553be_63ff_6f10_00db_f8b52bed863a -->|extends| 2262afd8_6429_0a5f_33b7_2affd1cf9410 511a8f91_080f_9750_8245_6c31ee0b22eb["ToolMessage"] 342553be_63ff_6f10_00db_f8b52bed863a -->|extends| 511a8f91_080f_9750_8245_6c31ee0b22eb de5a7878_b3fe_95d7_2575_7f534546dc1e["AIMessage"] 342553be_63ff_6f10_00db_f8b52bed863a -->|extends| de5a7878_b3fe_95d7_2575_7f534546dc1e 4055d589_37db_876d_2f46_94061df76932["context_editing.py"] 342553be_63ff_6f10_00db_f8b52bed863a -->|defined in| 4055d589_37db_876d_2f46_94061df76932 03942334_6db9_570a_7836_af54672f2984["apply()"] 342553be_63ff_6f10_00db_f8b52bed863a -->|method| 03942334_6db9_570a_7836_af54672f2984 ee42af87_4c5e_4b39_d0f1_983638d93ef0["_build_cleared_tool_input_message()"] 342553be_63ff_6f10_00db_f8b52bed863a -->|method| ee42af87_4c5e_4b39_d0f1_983638d93ef0
Relationship Graph
Source Code
libs/langchain_v1/langchain/agents/middleware/context_editing.py lines 58–184
class ClearToolUsesEdit(ContextEdit):
"""Configuration for clearing tool outputs when token limits are exceeded."""
trigger: int = 100_000
"""Token count that triggers the edit."""
clear_at_least: int = 0
"""Minimum number of tokens to reclaim when the edit runs."""
keep: int = 3
"""Number of most recent tool results that must be preserved."""
clear_tool_inputs: bool = False
"""Whether to clear the originating tool call parameters on the AI message."""
exclude_tools: Sequence[str] = ()
"""List of tool names to exclude from clearing."""
placeholder: str = DEFAULT_TOOL_PLACEHOLDER
"""Placeholder text inserted for cleared tool outputs."""
def apply(
self,
messages: list[AnyMessage],
*,
count_tokens: TokenCounter,
) -> None:
"""Apply the clear-tool-uses strategy."""
tokens = count_tokens(messages)
if tokens <= self.trigger:
return
candidates = [
(idx, msg) for idx, msg in enumerate(messages) if isinstance(msg, ToolMessage)
]
if self.keep >= len(candidates):
candidates = []
elif self.keep:
candidates = candidates[: -self.keep]
cleared_tokens = 0
excluded_tools = set(self.exclude_tools)
for idx, tool_message in candidates:
if tool_message.response_metadata.get("context_editing", {}).get("cleared"):
continue
ai_message = next(
(m for m in reversed(messages[:idx]) if isinstance(m, AIMessage)), None
)
if ai_message is None:
continue
tool_call = next(
(
call
for call in ai_message.tool_calls
if call.get("id") == tool_message.tool_call_id
),
None,
)
if tool_call is None:
continue
if (tool_message.name or tool_call["name"]) in excluded_tools:
continue
messages[idx] = tool_message.model_copy(
update={
"artifact": None,
"content": self.placeholder,
"response_metadata": {
**tool_message.response_metadata,
"context_editing": {
"cleared": True,
"strategy": "clear_tool_uses",
},
Extends
Source
Frequently Asked Questions
What is the ClearToolUsesEdit class?
ClearToolUsesEdit is a class in the langchain codebase, defined in libs/langchain_v1/langchain/agents/middleware/context_editing.py.
Where is ClearToolUsesEdit defined?
ClearToolUsesEdit is defined in libs/langchain_v1/langchain/agents/middleware/context_editing.py at line 58.
What does ClearToolUsesEdit extend?
ClearToolUsesEdit extends ContextEdit, ToolMessage, AIMessage.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free