import type { AnalyticsData } from "./types.js";
import type { TokenUsage } from "../types/providers.js";
import type { ToolCall, ToolResult } from "../types/streamTypes.js";
/**
 * Stream analytics result from Vercel AI SDK streamText
 */
export interface StreamTextResult {
    textStream: AsyncIterable<string>;
    text: Promise<string>;
    usage: Promise<{
        promptTokens: number;
        completionTokens: number;
        totalTokens: number;
    } | undefined>;
    response: Promise<{
        id?: string;
        model?: string;
        timestamp?: number | Date;
    } | undefined>;
    finishReason: Promise<"stop" | "length" | "content-filter" | "tool-calls" | "error" | "other" | "unknown">;
    toolResults?: Promise<ToolResult[]>;
    toolCalls?: Promise<ToolCall[]>;
}
/**
 * Interface for collecting analytics from streaming results
 */
export interface StreamAnalyticsCollector {
    collectUsage(result: StreamTextResult): Promise<TokenUsage>;
    collectMetadata(result: StreamTextResult): Promise<ResponseMetadata>;
    createAnalytics(provider: string, model: string, result: StreamTextResult, responseTime: number, metadata?: Record<string, unknown>): Promise<AnalyticsData>;
}
/**
 * Response metadata from stream result
 */
export interface ResponseMetadata {
    id?: string;
    model?: string;
    timestamp?: number;
    finishReason?: string;
}
/**
 * Base implementation for collecting analytics from Vercel AI SDK stream results
 */
export declare class BaseStreamAnalyticsCollector implements StreamAnalyticsCollector {
    /**
     * Collect token usage from stream result
     */
    collectUsage(result: StreamTextResult): Promise<TokenUsage>;
    /**
     * Collect response metadata from stream result
     */
    collectMetadata(result: StreamTextResult): Promise<ResponseMetadata>;
    /**
     * Create comprehensive analytics from stream result
     */
    createAnalytics(provider: string, model: string, result: StreamTextResult, responseTime: number, metadata?: Record<string, unknown>): Promise<AnalyticsData>;
    /**
     * Clean up resources and force garbage collection if needed
     */
    cleanup(): void;
}
/**
 * Global instance of stream analytics collector
 */
export declare const streamAnalyticsCollector: BaseStreamAnalyticsCollector;
