import type { BaseLanguageModel } from '@langchain/core/language_models/base';
import type { VectorStore } from '@langchain/core/vectorstores';
import type { Embeddings } from '@langchain/core/embeddings';
import type { BaseMemory } from '@langchain/core/memory';
export interface StrategyContext {
    vectorStore: VectorStore;
    model: BaseLanguageModel;
    embeddings: Embeddings;
    memory: BaseMemory | null;
    config: StrategyConfig;
    debugging: boolean;
    llmDebugAnalysis: boolean;
}
export interface StrategyConfig {
    documentsToRetrieve: number;
    documentsToReturn: number;
    returnRankedDocuments: boolean;
    promptTemplate?: string;
    queryVariations?: number;
    includeOriginalQuery?: boolean;
    maxSteps?: number;
    enableEarlyStop?: boolean;
}
export interface StrategyResult {
    answer?: string;
    sourceDocuments?: any[];
    debugData?: any;
    error?: string;
}
export interface DebugData {
    strategy: string;
    configuration: StrategyConfig;
    timing: Record<string, string>;
    documentFlow: Record<string, number>;
    queryDetails: Record<string, any>;
    reranking?: Record<string, any>;
    answerGeneration?: Record<string, any>;
}
export interface RerankingContext {
    strategyType: string;
    queryIndex?: number;
    isOriginal?: boolean;
    label?: string;
}
export interface RerankingResult {
    docs: any[];
    debugInfo: any;
}
export interface QueryStrategy {
    execute(input: string, context: StrategyContext): Promise<StrategyResult>;
    getName(): string;
    getDescription(): string;
}
