import { RAGEngine } from "../engine";
import { ConversationConfig } from "./context-manager";
import { ChatMessage, SearchResult, ConversationContext } from "../types";
export interface ChatbotConfig {
    ragEngine: RAGEngine;
    llmConfig: {
        apiKey: string;
        modelName: string;
        temperature?: number;
        maxTokens?: number;
        baseURL?: string;
    };
    conversationConfig?: Partial<ConversationConfig>;
    defaultPromptTemplate?: string;
    retrievalConfig?: {
        topK: number;
        minScore: number;
        searchMethod: "hybrid" | "vector" | "keyword";
    };
    languageDetection?: boolean;
}
export interface ChatResponse {
    message: ChatMessage;
    sources: SearchResult[];
    conversationId: string;
    metadata: {
        retrievalTime: number;
        generationTime: number;
        totalTokens?: number;
        model: string;
        template: string;
    };
}
export interface ChatRequest {
    message: string;
    conversationId?: string;
    systemPrompt?: string;
    promptTemplate?: string;
    retrievalOptions?: {
        topK?: number;
        minScore?: number;
        searchMethod?: "hybrid" | "vector" | "keyword";
    };
    userContext?: Record<string, any>;
}
export declare class RAGChatbot {
    private ragEngine;
    private contextManager;
    private promptManager;
    private config;
    constructor(config: ChatbotConfig);
    chat(request: ChatRequest): Promise<ChatResponse>;
    private retrieveDocuments;
    private generateResponse;
    private callLLM;
    private detectLanguage;
    getConversation(conversationId: string): ConversationContext | null;
    clearConversation(conversationId: string): boolean;
    getConversationHistory(conversationId: string, lastN?: number): ChatMessage[];
    streamChat(request: ChatRequest): AsyncGenerator<{
        type: "retrieval" | "generation" | "complete";
        data: any;
    }>;
    private generateConversationId;
    private generateMessageId;
    updateConfig(updates: Partial<ChatbotConfig>): void;
    addPromptTemplate(template: {
        id: string;
        name: string;
        template: string;
        variables: string[];
        description?: string;
        language?: string;
    }): void;
    getStats(): {
        conversations: number;
        totalMessages: number;
        ragEngineStats: any;
        promptTemplates: number;
    };
    summarizeConversation(conversationId: string): Promise<string>;
    suggestFollowUpQuestions(conversationId: string): Promise<string[]>;
}
//# sourceMappingURL=chatbot.d.ts.map