# Context Editing



Apply edit strategies when retrieving messages to manage context window size. The original session remains unchanged.

Current Context Size [#current-context-size]

The `get_messages` response includes `this_time_tokens` - the total token count of returned messages. Use this to:

* Check current context window size
* Decide when to apply edit strategies
* Determine when to [reset the prompt cache](/engineering/cache)

<CodeGroup>
  ```python title="Python"
  result = client.sessions.get_messages(session_id="session-uuid")
  print(f"Current tokens: {result.this_time_tokens}")

  if result.this_time_tokens > 50000:
      # Apply strategies to reduce context
      result = client.sessions.get_messages(
          session_id="session-uuid",
          edit_strategies=[{"type": "token_limit", "params": {"limit_tokens": 30000}}]
      )
  ```

  ```typescript title="TypeScript"
  let result = await client.sessions.getMessages("session-uuid");
  console.log(`Current tokens: ${result.thisTimeTokens}`);

  if (result.thisTimeTokens > 50000) {
      // Apply strategies to reduce context
      result = await client.sessions.getMessages("session-uuid", {
          editStrategies: [{ type: "token_limit", params: { limit_tokens: 30000 } }],
      });
  }
  ```
</CodeGroup>

Basic Usage [#basic-usage]

<CodeGroup>
  ```python title="Python"
  from acontext import AcontextClient
  import os

  client = AcontextClient(api_key=os.getenv("ACONTEXT_API_KEY"))

  result = client.sessions.get_messages(
      session_id="session-uuid",
      edit_strategies=[
          {"type": "token_limit", "params": {"limit_tokens": 20000}}
      ]
  )
  print(f"Messages: {len(result.items)}, Tokens: {result.this_time_tokens}")
  ```

  ```typescript title="TypeScript"
  import { AcontextClient } from '@acontext/acontext';

  const client = new AcontextClient({
      apiKey: process.env.ACONTEXT_API_KEY,
  });

  const result = await client.sessions.getMessages("session-uuid", {
      editStrategies: [
          { type: "token_limit", params: { limit_tokens: 20000 } },
      ],
  });
  console.log(`Messages: ${result.items.length}, Tokens: ${result.thisTimeTokens}`);
  ```
</CodeGroup>

Edit Strategies [#edit-strategies]

Token Limit [#token-limit]

Remove oldest messages until under token limit:

<CodeGroup>
  ```python title="Python"
  {"type": "token_limit", "params": {"limit_tokens": 20000}}
  ```

  ```typescript title="TypeScript"
  { type: "token_limit", params: { limit_tokens: 20000 } }
  ```
</CodeGroup>

Remove Tool Results [#remove-tool-results]

Replace old tool results with placeholder, keep recent N, and optionally filter by token count:

<CodeGroup>
  ```python title="Python"
  {
      "type": "remove_tool_result",
      "params": {
          "keep_recent_n_tool_results": 3,
          "tool_result_placeholder": "Done",
          "keep_tools": ["important_tool"],
          "gt_token": 100  # only remove results with more than 100 tokens
      }
  }
  ```

  ```typescript title="TypeScript"
  {
      type: "remove_tool_result",
      params: {
          keep_recent_n_tool_results: 3,
          tool_result_placeholder: "Done",
          keep_tools: ["important_tool"],
          gt_token: 100 // only remove results with more than 100 tokens
      }
  }
  ```
</CodeGroup>

Remove Tool Call Params [#remove-tool-call-params]

Remove arguments from old tool calls, keep recent N, and optionally filter by token count:

<CodeGroup>
  ```python title="Python"
  {
      "type": "remove_tool_call_params",
      "params": {
          "keep_recent_n_tool_calls": 3,
          "keep_tools": ["important_tool"],
          "gt_token": 100  # only remove params with more than 100 tokens
      }
  }
  ```

  ```typescript title="TypeScript"
  {
      type: "remove_tool_call_params",
      params: {
          keep_recent_n_tool_calls: 3,
          keep_tools: ["important_tool"],
          gt_token: 100 // only remove params with more than 100 tokens
      }
  }
  ```
</CodeGroup>

Middle Out [#middle-out]

Remove messages from the middle, preserve head and tail:

<CodeGroup>
  ```python title="Python"
  {"type": "middle_out", "params": {"token_reduce_to": 5000}}
  ```

  ```typescript title="TypeScript"
  { type: "middle_out", params: { token_reduce_to: 5000 } }
  ```
</CodeGroup>

Combining Strategies [#combining-strategies]

<CodeGroup>
  ```python title="Python"
  result = client.sessions.get_messages(
      session_id="session-uuid",
      edit_strategies=[
          {"type": "remove_tool_result", "params": {"keep_recent_n_tool_results": 3}},
          {"type": "token_limit", "params": {"limit_tokens": 30000}}
      ]
  )
  ```

  ```typescript title="TypeScript"
  const result = await client.sessions.getMessages("session-uuid", {
      editStrategies: [
          { type: "remove_tool_result", params: { keep_recent_n_tool_results: 3 } },
          { type: "token_limit", params: { limit_tokens: 30000 } },
      ],
  });
  ```
</CodeGroup>

Get Raw Token Count [#get-raw-token-count]

<CodeGroup>
  ```python title="Python"
  token_counts = client.sessions.get_token_counts(session_id="session-uuid")
  print(f"Total tokens: {token_counts.total_tokens}")
  ```

  ```typescript title="TypeScript"
  const tokenCounts = await client.sessions.getTokenCounts("session-uuid");
  console.log(`Total tokens: ${tokenCounts.totalTokens}`);
  ```
</CodeGroup>

Next Steps [#next-steps]

<CardGroup cols="2">
  <Card title="Prompt Cache" icon="bolt" href="/engineering/cache">
    Maintain cache hits with editing
  </Card>

  <Card title="Session Summary" icon="compress" href="/engineering/session_summary">
    Compact task summaries
  </Card>
</CardGroup>
