FeaturesContext Engineering
Context Editing
Edit context on-the-fly without modifying stored messages
Apply edit strategies when retrieving messages to manage context window size. The original session remains unchanged.
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
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}}]
)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 } }],
});
}Basic Usage
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}")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}`);Edit Strategies
Token Limit
Remove oldest messages until under token limit:
{"type": "token_limit", "params": {"limit_tokens": 20000}}{ type: "token_limit", params: { limit_tokens: 20000 } }Remove Tool Results
Replace old tool results with placeholder, keep recent N, and optionally filter by token count:
{
"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
}
}{
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
}
}Remove Tool Call Params
Remove arguments from old tool calls, keep recent N, and optionally filter by token count:
{
"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
}
}{
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
}
}Middle Out
Remove messages from the middle, preserve head and tail:
{"type": "middle_out", "params": {"token_reduce_to": 5000}}{ type: "middle_out", params: { token_reduce_to: 5000 } }Combining Strategies
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}}
]
)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 } },
],
});Get Raw Token Count
token_counts = client.sessions.get_token_counts(session_id="session-uuid")
print(f"Total tokens: {token_counts.total_tokens}")const tokenCounts = await client.sessions.getTokenCounts("session-uuid");
console.log(`Total tokens: ${tokenCounts.totalTokens}`);Next Steps
Last updated on