/**
 * Triple 추출기 클래스
 * LLM을 사용하여 텍스트에서 Triple을 추출합니다.
 *
 * Given: 텍스트와 추출 옵션이 제공됨
 * When: LLM을 사용하여 Triple을 추출함
 * Then: 추출된 Triple 배열을 반환함
 */
import type { IRetryManager } from '../../../../shared/interfaces/retry-manager.interface.js';
import type { ITripleExtractor } from './interfaces.js';
import type { Triple, TripleExtractionOptions } from '../../../../shared/types/triple-extraction.js';
/**
 * Triple 추출기 클래스
 * LLM을 사용하여 텍스트에서 Triple을 추출합니다.
 */
export declare class TripleExtractor implements ITripleExtractor {
    private openaiClient;
    private geminiClient;
    private preferredProvider;
    private initializedProviders;
    private readonly retryManager;
    private initializationPromise;
    private readonly DEFAULT_TEMPERATURE;
    private readonly DEFAULT_MAX_TOKENS;
    private readonly SYSTEM_MESSAGE;
    constructor(retryManager?: IRetryManager);
    /**
     * Given: 텍스트와 추출 옵션이 제공됨
     * When: LLM을 사용하여 Triple을 추출함
     * Then: 추출된 Triple 배열과 rawResponse, provider를 반환함
     *
     * @param text - 추출할 텍스트
     * @param options - 추출 옵션
     * @returns 추출된 Triple 배열과 메타데이터
     */
    extract(text: string, options?: TripleExtractionOptions): Promise<{
        triples: Triple[];
        rawResponse: string;
        provider: 'openai' | 'gemini' | 'ollama';
    }>;
    /**
     * Provider에 따라 LLM을 사용하여 Triple 추출
     *
     * @param provider 사용할 provider
     * @param prompt 프롬프트
     * @param options 추출 옵션
     * @returns LLM 응답 텍스트
     */
    private extractWithProvider;
    /**
     * OpenAI를 사용하여 Triple 추출
     */
    private extractWithOpenAI;
    /**
     * Gemini를 사용하여 Triple 추출
     */
    private extractWithGemini;
    /**
     * Ollama를 사용하여 Triple 추출
     */
    private extractWithOllama;
    /**
     * LLM 클라이언트 초기화
     * LLMClientInitializer를 사용하여 클라이언트 초기화
     */
    private initializeClients;
    /**
     * Provider 결정
     * 요청된 provider와 초기화 상태를 확인하여 사용 가능한 provider를 반환
     *
     * @param requestedProvider 요청된 provider
     * @returns 사용 가능한 provider 또는 null
     */
    private determineProvider;
    /**
     * Provider 사용 가능 여부 확인
     */
    private isProviderAvailable;
    /**
     * Fallback provider 반환
     */
    private getFallbackProvider;
    /**
     * 에러 재시도 여부 판단
     */
    private shouldRetry;
    /**
     * Ollama 모델 존재 여부 확인
     */
    private checkOllamaModel;
    /**
     * Given: LLM 응답 텍스트가 제공됨
     * When: 응답을 파싱하여 Triple 배열을 추출함
     * Then: 파싱된 Triple 배열과 파싱 결과를 반환함
     */
    private parseLLMResponse;
    /**
     * Given: 텍스트가 제공됨
     * When: JSON 부분을 추출함
     * Then: 추출된 JSON 문자열을 반환함
     */
    private extractJSON;
    /**
     * Given: Triple 객체가 제공됨
     * When: Triple의 유효성을 검증함
     * Then: 유효성 검증 결과를 반환함
     */
    private isValidTriple;
}
//# sourceMappingURL=triple-extractor.d.ts.map