Skip to main content

Token Estimation

PraisonAI provides fast, offline token estimation that works without API calls. This enables real-time context budget tracking and optimization decisions. The user estimates tokens for a prompt; heuristics predict cost before the agent calls the model.

How It Works

Quick Start

1

Estimate text tokens

2

Estimate messages and tool schemas

Estimation Algorithm

The heuristic estimator uses character-based rules optimized for typical LLM tokenization:

Message Overhead

Each message includes overhead for role markers and formatting:
  • Base overhead: 4 tokens per message
  • Role tokens: ~2 tokens
  • Content: Estimated via heuristic

API Reference

estimate_tokens_heuristic(text: str) -> int

Estimate tokens for a string using character-based heuristics.

estimate_messages_tokens(messages: List[Dict]) -> int

Estimate total tokens for a list of chat messages.

estimate_tool_schema_tokens(tools: List[Dict]) -> int

Estimate tokens for tool/function schemas.

TokenEstimatorImpl

Class-based estimator with caching:

get_estimator() -> TokenEstimatorImpl

Get a singleton estimator instance:

Accuracy Considerations

The heuristic estimator is designed for speed over perfect accuracy: For budget decisions, the estimator adds a small safety margin to prevent underestimation.

Performance

  • Speed: < 1ms for 100K characters
  • Memory: O(1) - no caching required
  • No API calls: Works completely offline
ContextManager.estimate_tokens() only caches results on the validated (tiktoken) path. See Token Estimation Validation for details.

Integration with Budgeter

Best Practices

Check message totals against the budget to trigger compaction proactively.
Pass the model name so tiktoken or provider-specific counting applies when available.
Act before hard limits — retrieval trimming and summarisation need headroom.
Run validated mode on fixture conversations to catch drift in token counting.

Context Ledger

Track tokens by segment

Context Budgeter

Allocate token budgets