Home / Class/ ClearToolUsesEdit Class — langchain Architecture

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",
                        },

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