/**
 * LLM 클라이언트 초기화 공통 모듈
 *
 * 모든 LLM 서비스에서 일관된 초기화 로직과 fallback 전략을 제공합니다.
 *
 * 환경 변수 우선순위:
 * 1. process.env['LLM_PROVIDER'] (최우선)
 * 2. mementoConfig.llmProvider (차순위)
 * 3. 'auto' (최종 기본값)
 */
import OpenAI from 'openai';
import { GoogleGenerativeAI } from '@google/generative-ai';
/**
 * LLM 클라이언트 초기화 결과
 */
export interface LLMClientInitializationResult {
    /** 선택된 provider (null이면 사용 가능한 provider 없음) */
    preferredProvider: 'openai' | 'gemini' | 'ollama' | null;
    /** OpenAI 클라이언트 인스턴스 (초기화 실패 시 null) */
    openaiClient: OpenAI | null;
    /** Gemini 클라이언트 인스턴스 (초기화 실패 시 null) */
    geminiClient: GoogleGenerativeAI | null;
    /** 성공적으로 초기화된 provider 목록 */
    initializedProviders: ('openai' | 'gemini' | 'ollama')[];
    /** 초기화 과정에서 발생한 경고 메시지 목록 */
    warnings: string[];
}
/**
 * LLM 클라이언트 초기화기
 *
 * 환경 변수 설정에 따라 LLM provider를 초기화하고,
 * 실패 시 자동으로 fallback을 수행합니다.
 */
export declare class LLMClientInitializer {
    private readonly retryManager;
    /**
     * 생성자
     * RetryManager를 초기화합니다.
     */
    constructor();
    /**
     * LLM 클라이언트 초기화
     *
     * 환경 변수 우선순위에 따라 provider를 선택하고 초기화합니다.
     *
     * 환경 변수 우선순위:
     * 1. process.env['LLM_PROVIDER'] (최우선) - getRawEnvValue('LLM_PROVIDER') 사용
     * 2. mementoConfig.llmProvider (차순위)
     * 3. 'auto' (최종 기본값)
     *
     * @returns LLMClientInitializationResult 초기화 결과
     */
    initialize(): Promise<LLMClientInitializationResult>;
    /**
     * 각 provider의 API 키 존재 여부를 확인
     *
     * @returns 각 provider의 API 키 존재 여부를 나타내는 boolean 객체
     */
    validateApiKeys(): {
        openai: boolean;
        gemini: boolean;
    };
    /**
     * 명시 LLM_PROVIDER일 때만 해당 클라우드 키 부재를 경고한다.
     * ollama 전용 등으로 다른 provider를 쓰지 않는 경우 불필요한 WARN 로그를 막는다. auto는 탐색 목적상 기존과 같이 경고.
     */
    private shouldWarnMissingOpenaiKey;
    private shouldWarnMissingGeminiKey;
    private resolveLlmModelLabel;
    /**
     * 환경 변수 우선순위에 따라 provider 선택
     *
     * @returns 선택된 provider
     */
    private getSelectedProvider;
    /**
     * 에러 메시지 추출
     *
     * @param error 에러 객체
     * @returns 에러 메시지 문자열
     */
    private getErrorMessage;
    /**
     * 경고 메시지 추가 및 로깅
     *
     * @param result 초기화 결과 객체
     * @param warningMessage 경고 메시지
     * @param logMessage 로그 메시지
     * @param metadata 로그 메타데이터
     */
    private addWarning;
    /**
     * OpenAI 클라이언트 초기화
     *
     * @param result 초기화 결과 객체
     * @param selectedProvider 선택된 provider
     * @returns OpenAI 클라이언트 인스턴스 또는 null
     */
    private initializeOpenAI;
    /**
     * Gemini 클라이언트 초기화
     *
     * @param result 초기화 결과 객체
     * @param selectedProvider 선택된 provider
     * @returns Gemini 클라이언트 인스턴스 또는 null
     *
     * @note
     * - `@google/generative-ai` 라이브러리를 사용합니다 (LLM completion용)
     * - 생성자에 API 키를 직접 전달하는 방식을 사용합니다: `new GoogleGenerativeAI(apiKey)`
     * - 참고: `gemini-embedding-service.ts`는 `@google/genai`를 사용하며 객체 전달 방식을 사용합니다
     * - 향후 `@google/genai`로 마이그레이션 검토 필요 (deprecated 예정: 2025-08-31)
     */
    private initializeGemini;
    /**
     * Ollama 응답 처리
     *
     * @param response HTTP 응답 객체
     * @param result 초기화 결과 객체
     * @param selectedProvider 선택된 provider
     * @param baseUrl Ollama base URL
     */
    private handleOllamaResponse;
    /**
     * Ollama 연결 테스트
     *
     * @param result 초기화 결과 객체
     * @param selectedProvider 선택된 provider
     */
    private testOllamaConnection;
    /**
     * Ollama 연결 재시도 여부 결정
     *
     * @param error 에러 객체
     * @returns 재시도 여부
     */
    private shouldRetryOllamaConnection;
    /**
     * Ollama 에러 메시지 생성
     *
     * @param errorMessage 에러 메시지
     * @returns 포맷된 경고 메시지
     */
    private getOllamaErrorMessage;
    /**
     * preferredProvider 결정
     *
     * @param result 초기화 결과 객체
     * @param selectedProvider 선택된 provider
     * @returns preferredProvider 또는 null
     */
    private determinePreferredProvider;
    /**
     * OpenAI provider에 대한 preferredProvider 결정
     *
     * @param result 초기화 결과 객체
     * @param selectedProvider 선택된 provider
     * @returns preferredProvider 또는 null
     */
    private determineProviderForOpenAI;
    /**
     * Gemini provider에 대한 preferredProvider 결정
     *
     * @param result 초기화 결과 객체
     * @param selectedProvider 선택된 provider
     * @returns preferredProvider 또는 null
     */
    private determineProviderForGemini;
    /**
     * Ollama provider에 대한 preferredProvider 결정
     *
     * @param result 초기화 결과 객체
     * @param selectedProvider 선택된 provider
     * @returns preferredProvider 또는 null
     */
    private determineProviderForOllama;
    /**
     * Auto 모드에 대한 preferredProvider 결정
     *
     * @param result 초기화 결과 객체
     * @returns preferredProvider 또는 null
     */
    private determineProviderForAuto;
}
//# sourceMappingURL=llm-client-initializer.d.ts.map