/** * UsageMeter class for tracking API usage metrics * Generated by polka.codes */ import type { LanguageModelV3, LanguageModelV3Usage } from '@ai-sdk/provider'; import type { LanguageModelUsage } from 'ai'; import type { PricingService } from './pricing/index.js'; export type ModelInfo = { inputPrice: number; outputPrice: number; cacheWritesPrice: number; cacheReadsPrice: number; }; type Totals = { input: number; output: number; cachedRead: number; cost: number; messageCount: number; }; type ProviderMetadataEntry = { provider: string; model: string; metadata: Record; timestamp: number; }; /** * Tracks token / cost usage across any mix of LLM models. * Supports optional caps on total messages and total cost. */ export declare class UsageMeter { #private; constructor(modelInfos?: Record>>, opts?: { maxMessages?: number; maxCost?: number; pricingService?: PricingService; }); addUsage(llm: LanguageModelV3, resp: { usage: LanguageModelV3Usage; providerMetadata?: Record; } | { totalUsage: LanguageModelV3Usage; providerMetadata?: Record; } | { totalUsage: LanguageModelUsage; providerMetadata?: Record; }, options?: { modelInfo?: ModelInfo; }): Promise; /** Override the running totals (e.g., restore from saved state). */ setUsage(newUsage: Partial, options?: { clearMetadata?: boolean; }): void; /** Manually bump the message count (useful if you record some messages without token info). */ incrementMessageCount(n?: number): void; /** Reset the running totals. */ resetUsage(): void; /** Return true once either messages or cost exceed the configured caps. */ isLimitExceeded(): { messageCount: boolean; maxMessages: number; cost: boolean; maxCost: number; result: boolean; }; /** Same as isLimitExceeded but throws an error if a limit is hit. */ checkLimit(): void; /** Getter for the aggregated totals (immutable copy). */ get usage(): { input: number; output: number; cachedRead: number; cost: number; messageCount: number; }; /** Getter for provider metadata entries (immutable copy). */ get providerMetadata(): ProviderMetadataEntry[]; /** Calculate cache statistics from stored metadata entries. */ get cacheStats(): { totalCachedTokens: number; totalRequests: number; requestsWithCache: number; cacheHitRate: number; entries: ProviderMetadataEntry[]; }; /** Clear stored provider metadata entries. */ clearProviderMetadata(): void; /** Merge another UsageMeter's totals into this one. */ merge(other: UsageMeter): void; /** Wait for all pending usage updates to complete. */ waitForPending(): Promise; getUsageText(): string; onFinishHandler(llm: LanguageModelV3): (evt: { totalUsage: LanguageModelUsage; providerMetadata?: Record; } | { totalUsage: LanguageModelV3Usage; providerMetadata?: Record; }) => Promise; } export {};