/**
 * Type definitions for YOGIWAY Prompt
 */
export type LLMProvider = 'openai' | 'anthropic' | 'google' | 'cohere' | 'mistral' | 'meta' | 'xai' | 'perplexity' | 'custom';
export interface PromptOptimizationOptions {
    /** Target token reduction percentage (default: 30) */
    targetReduction?: number;
    /** Remove redundant words (default: true) */
    removeRedundancy?: boolean;
    /** Compress whitespace (default: true) */
    compressWhitespace?: boolean;
    /** Remove unnecessary punctuation (default: false) */
    removePunctuation?: boolean;
    /** Preserve code blocks (default: true) */
    preserveCodeBlocks?: boolean;
    /** Preserve markdown formatting (default: true) */
    preserveMarkdown?: boolean;
    /** Aggressive optimization (default: false) */
    aggressive?: boolean;
}
export interface TokenCountResult {
    /** Total tokens */
    tokens: number;
    /** Characters */
    characters: number;
    /** Words */
    words: number;
    /** Estimated cost (USD) */
    estimatedCost: number;
    /** Breakdown by provider */
    breakdown: {
        provider: LLMProvider;
        tokens: number;
        cost: number;
    }[];
}
export interface ContextWindowOptions {
    /** Maximum context window size */
    maxTokens: number;
    /** Reserve tokens for response (default: 1000) */
    reserveTokens?: number;
    /** Priority scoring function */
    priorityScorer?: (chunk: string) => number;
    /** Chunk overlap (default: 0) */
    overlap?: number;
}
export interface ChunkResult {
    chunks: string[];
    totalTokens: number;
    chunkTokens: number[];
    metadata: {
        originalSize: number;
        optimizedSize: number;
        reduction: number;
    };
}
export interface CostEstimate {
    provider: LLMProvider;
    model: string;
    inputTokens: number;
    estimatedOutputTokens: number;
    inputCost: number;
    outputCost: number;
    totalCost: number;
    currency: string;
}
export interface OptimizationResult {
    /** Original prompt */
    original: string;
    /** Optimized prompt */
    optimized: string;
    /** Token reduction */
    reduction: {
        tokens: number;
        percentage: number;
        characters: number;
        words: number;
    };
    /** Cost savings */
    savings: {
        estimated: number;
        currency: string;
    };
    /** Statistics */
    stats: {
        originalTokens: number;
        optimizedTokens: number;
        originalChars: number;
        optimizedChars: number;
    };
}
