import { TiktokenModel } from 'tiktoken';
import { BaseMessage } from '@langchain/core/messages';

/**
 * Token counter utility for OpenAI models using tiktoken encoding
 * Provides accurate token counting for text content and chat messages
 */
export declare class TokenCounter {
    private encoding;
    private modelName;
    private static readonly MESSAGE_OVERHEAD;
    private static readonly ROLE_OVERHEAD;
    constructor(modelName?: string | TiktokenModel);
    /**
     * Count tokens in raw text content
     * @param text - The text to count tokens for
     * @returns Number of tokens
     */
    countTokens(text: string): number;
    /**
     * Count tokens for a single chat message including role overhead
     * @param message - The message to count tokens for
     * @returns Number of tokens including message formatting overhead
     */
    countMessageTokens(message: BaseMessage): number;
    /**
     * Count tokens for multiple messages
     * @param messages - Array of messages to count
     * @returns Total token count for all messages
     */
    countMessagesTokens(messages: BaseMessage[]): number;
    /**
     * Estimate tokens for system prompt
     * System prompts have slightly different overhead in chat completions
     * @param systemPrompt - The system prompt text
     * @returns Estimated token count
     */
    estimateSystemPromptTokens(systemPrompt: string): number;
    /**
     * Get total context size estimate including system prompt and messages
     * @param systemPrompt - System prompt text
     * @param messages - Conversation messages
     * @returns Total estimated token count
     */
    estimateContextSize(systemPrompt: string, messages: BaseMessage[]): number;
    /**
     * Get the role string for a message
     * @param message - The message to get the role for
     * @returns Role string ('user', 'assistant', 'system', etc.)
     */
    private getMessageRole;
    /**
     * Get the model name being used for token counting
     * @returns The tiktoken model name
     */
    getModelName(): string;
    /**
     * Clean up encoding resources
     */
    dispose(): void;
}
