import type { ChatImage, ChatMessage, ProviderId, ReasoningPreference, ToolChoice, ToolDefinition } from "../types.js"; import { type RequestPlanV1 } from "../llm/request-plan.js"; export declare const RESERVED_OUTPUT_TOKENS = 24576; export declare const SAFETY_MARGIN_TOKENS = 2048; export declare function estimateTextTokens(text: string): number; export declare function estimateImageTokens(image: ChatImage): number; export declare function estimateMessageBaseTokens(message: ChatMessage): number; export declare function estimateMessageTokens(message: ChatMessage): number; export declare function estimateMessagesTokens(messages: readonly ChatMessage[]): number; export declare function estimateToolSchemaTokens(tools: readonly ToolDefinition[] | undefined): number; export type EffectiveLimitSource = "session-override" | "model-window" | "unknown"; export interface EffectiveContextLimit { readonly limitTokens?: number | undefined; readonly source: EffectiveLimitSource; readonly reservedOutputTokens: number; readonly safetyMarginTokens: number; readonly effectiveSafeTokens?: number | undefined; } export declare function resolveEffectiveContextLimit(input?: { readonly provider?: ProviderId | undefined; readonly model?: string | undefined; readonly contextLimitTokens?: number | undefined; readonly reservedOutputTokens?: number | undefined; readonly safetyMarginTokens?: number | undefined; }): EffectiveContextLimit; export interface RequestAccounting { readonly requestTokens: number; readonly rawRequestTokens: number; readonly instructionsTokens: number; readonly historyTokens: number; readonly liveTokens: number; readonly toolsTokens: number; readonly artifactTokens: number; readonly replayedArtifactCount: number; readonly imageTokens: number; readonly imageCount: number; readonly messageCount: number; readonly limit: EffectiveContextLimit; readonly headroomTokens?: number | undefined; readonly overLimit?: boolean | undefined; readonly precision: "estimate" | "calibrated"; } export declare function accountRequestPlan(plan: RequestPlanV1, policy?: { readonly provider?: ProviderId | undefined; readonly model?: string | undefined; readonly contextLimitTokens?: number | undefined; readonly reservedOutputTokens?: number | undefined; readonly safetyMarginTokens?: number | undefined; }): RequestAccounting; export declare function accountAssembledRequest(input: { readonly provider: ProviderId; readonly model: string; readonly messages: readonly ChatMessage[]; readonly stream: boolean; readonly tools?: readonly ToolDefinition[] | undefined; readonly toolChoice?: ToolChoice | undefined; readonly parallelToolCalls?: boolean | undefined; readonly reasoning?: ReasoningPreference | undefined; readonly contextLimitTokens?: number | undefined; readonly reservedOutputTokens?: number | undefined; readonly safetyMarginTokens?: number | undefined; }): { plan: RequestPlanV1; accounting: RequestAccounting; }; export declare class RequestOverLimitError extends Error { constructor(message: string); }