/** * Token budget utilities for recall/context commands. * * AIDimag does not require a specific tokenizer. The default estimator uses the * rough heuristic that one token is ~4 characters of English text. If a more * accurate tokenizer is installed (e.g. `gpt-tokenizer`), it is used instead. */ export interface Tokenizer { estimate(text: string): number; } /** * Get a tokenizer for the configured model. Uses `AIDIMAG_TOKENIZER` env var * or `AIDIMAG_MODEL` to select the tokenizer. Supports: * - `openai` / `gpt` — uses gpt-tokenizer if installed (exact counts) * - `claude` / `anthropic` — heuristic ratio tuned to Claude's tokenizer * - `gemini` / `google` — heuristic ratio tuned to Gemini's tokenizer * - `llama` / `mistral` — heuristic ratio tuned to SentencePiece tokenizers * Falls back to the default ~4-char heuristic. */ export declare function getTokenizer(): Promise; export declare function estimateMemoryTokens(tokenizer: Tokenizer, m: { claim: string; detail?: string | null; }): number; export interface RankedMemory { memory: { id: string; claim: string; detail?: string | null; kind: string; status: string; }; relevance: number; } export interface BudgetResult { included: T[]; totalTokens: number; remainingTokens: number; dropped: number; } /** * Greedily include highest-relevance memories until the token budget is exhausted. * Simplest useful policy; more advanced policies can prefer GUARDRAIL/INVARIANT first. */ export declare function applyBudget(items: T[], budgetTokens: number): Promise>; /** * Character-budget variant: greedily include highest-relevance memories * until the character budget is exhausted. Useful when exact token counts * are not available and the caller prefers a character-based limit. */ export declare function applyCharBudget(items: T[], maxChars: number): Promise<{ included: T[]; totalChars: number; remainingChars: number; dropped: number; totalTokens: number; remainingTokens: number; }>;