import { GenerateOptions } from '../llms/base.cjs';
import { BaseMessage } from '../llms/primitives/message.cjs';
import { BaseMemory } from './base.cjs';
import { ChatLLM, ChatLLMOutput } from '../llms/chat.cjs';
import '../context.cjs';
import '../emitter-BWtGHYn0.cjs';
import '../internals/types.cjs';
import '../internals/helpers/guards.cjs';
import '../internals/serializable.cjs';
import '../internals/helpers/promise.cjs';
import '../errors.cjs';
import '../cache/base.cjs';
import 'promise-based-task';

interface Handlers {
    estimate: (messages: BaseMessage) => number;
    removalSelector: (messages: BaseMessage[]) => BaseMessage;
}
interface TokenMemoryInput {
    llm: ChatLLM<ChatLLMOutput>;
    maxTokens?: number;
    syncThreshold?: number;
    capacityThreshold?: number;
    handlers?: Partial<Handlers>;
}
interface TokenByMessage {
    tokensCount: number;
    dirty: boolean;
}
declare class TokenMemory extends BaseMemory {
    readonly messages: BaseMessage[];
    protected llm: ChatLLM<ChatLLMOutput>;
    protected threshold: number;
    protected syncThreshold: number;
    protected maxTokens: number | null;
    protected tokensByMessage: WeakMap<BaseMessage, TokenByMessage>;
    readonly handlers: Handlers;
    constructor(config: TokenMemoryInput);
    get tokensUsed(): number;
    get isDirty(): boolean;
    add(message: BaseMessage, index?: number): Promise<void>;
    delete(message: BaseMessage): Promise<boolean>;
    sync(): Promise<void>;
    reset(): void;
    stats(): {
        tokensUsed: number;
        maxTokens: number | null;
        messagesCount: number;
        isDirty: boolean;
    };
    createSnapshot(): {
        llm: ChatLLM<ChatLLMOutput, GenerateOptions>;
        maxTokens: number | null;
        threshold: number;
        syncThreshold: number;
        messages: BaseMessage[];
        handlers: Handlers;
        tokensByMessage: [BaseMessage, number][];
    };
    loadSnapshot({ tokensByMessage, ...state }: ReturnType<typeof this.createSnapshot>): void;
}

export { type Handlers, TokenMemory, type TokenMemoryInput };
