/**
 * LLM 기반 관계 추출기
 * LLM을 사용하여 기억 간의 관계를 추출합니다.
 * 규칙 기반이 실패하거나 신뢰도가 낮은 경우 사용됩니다.
 *
 * 비용 최적화 전략:
 * - Embedding 기반 후보 제한 (cosine similarity 상위 N개)
 * - Rate limit (토큰 버킷 알고리즘, 초당 1회)
 * - 프롬프트 압축 (최대 500 토큰)
 * - 캐싱 (7일 TTL)
 * - 배치 처리 (최대 10개)
 * - 비용 모니터링
 */
import type { ICacheService } from '../../../shared/interfaces/cache.interface.js';
import type { IRetryManager } from '../../../shared/interfaces/retry-manager.interface.js';
import type { MemoryItem } from '../../../shared/types/index.js';
import type { ExtractOptions, IRelationExtractor, RelationCandidate } from '../../../shared/types/relation.js';
import { UnifiedEmbeddingService } from '../../embedding/services/unified-embedding-service.js';
export type { ParseResult } from './llm-relation-extractor/types.js';
/**
 * LLM 비용 모니터링
 */
interface LLMCostMetrics {
    totalCalls: number;
    totalTokens: number;
    totalCost: number;
    lastReset: number;
}
/**
 * LLM 기반 관계 추출기
 */
export declare class LLMBasedRelationExtractor implements IRelationExtractor {
    private openaiClient;
    private geminiClient;
    private preferredProvider;
    private readonly initializationPromise;
    private initializationCompleted;
    private readonly embeddingService;
    private readonly cache;
    private readonly rateLimiter;
    private readonly costMetrics;
    private readonly retryManager;
    constructor(embeddingService?: UnifiedEmbeddingService, cache?: ICacheService<RelationCandidate[]>, retryManager?: IRetryManager);
    /**
     * LLM 클라이언트 초기화
     * LLMClientInitializer를 사용하여 클라이언트 초기화
     * 환경 변수 LLM_PROVIDER에 따라 프로바이더 선택
     * - 'openai': OpenAI 우선 시도, 실패 시 Gemini/Ollama fallback
     * - 'gemini': Gemini 우선 시도, 실패 시 OpenAI/Ollama fallback
     * - 'ollama': Ollama 우선 시도, 실패 시 OpenAI/Gemini fallback
     * - 'auto': 사용 가능한 것 자동 선택 (OpenAI -> Gemini -> Ollama 순서)
     */
    private initializeClients;
    /**
     * LLM 서비스 사용 가능 여부 확인
     */
    isAvailable(): boolean;
    private selectionContext;
    private determineProvider;
    private filterCandidatesByEmbedding;
    private openAiDeps;
    private geminiDeps;
    private ollamaDeps;
    private extractWithOpenAI;
    private extractWithGemini;
    private extractWithOllama;
    /**
     * 관계 추출 프롬프트 템플릿 생성
     */
    private buildPrompt;
    /**
     * 기존 기억 목록을 요약하여 프롬프트 크기 축소
     * 간단한 요약: 내용을 최대 길이로 제한
     */
    private compressMemories;
    /**
     * 캐시 키 생성
     * 공통 유틸리티를 사용하여 일관된 캐시 키를 생성합니다.
     */
    private generateCacheKey;
    /**
     * 비용 계산 및 모니터링
     * 비용 계산과 모니터링 로그를 통합하여 중복을 제거합니다.
     *
     * @param provider LLM 제공자
     * @param promptTokens 프롬프트 토큰 수
     * @param completionTokens 완료 토큰 수
     * @returns 계산된 비용 (USD)
     */
    private calculateAndLogCost;
    extractRelations(newMemory: MemoryItem, existingMemories: MemoryItem[], options?: ExtractOptions): Promise<RelationCandidate[]>;
    /**
     * 배치 관계 추출 (여러 기억을 묶어서 처리)
     *
     * @param newMemories 새로운 기억 목록
     * @param existingMemories 기존 기억 목록
     * @param options 추출 옵션 (batchSize 포함 가능)
     * @returns 각 새로운 기억별 관계 후보 맵
     */
    extractRelationsBatch(newMemories: MemoryItem[], existingMemories: MemoryItem[], options?: ExtractOptions & {
        batchSize?: number;
    }): Promise<Map<string, RelationCandidate[]>>;
    /**
     * 비용 통계 조회
     */
    getCostMetrics(): LLMCostMetrics;
    /**
     * 비용 통계 초기화
     */
    resetCostMetrics(): void;
}
//# sourceMappingURL=llm-based-relation-extractor.d.ts.map