/**
 * 관계 추출 메인 서비스
 * 하이브리드 방식으로 관계를 추출합니다 (규칙 기반 → LLM fallback)
 *
 * 추출 전략:
 * 1. 규칙 기반 추출 시도 (빠르고 비용 효율적)
 * 2. 규칙 기반 결과가 없거나 신뢰도가 낮으면 LLM fallback
 * 3. 타입별 관계 유형 필터링 적용
 */
import type { RelationCandidate, IRelationExtractor, ExtractOptions } from '../../../shared/types/relation.js';
import type { MemoryItem } from '../../../shared/types/index.js';
import { RuleBasedRelationExtractor } from './rule-based-relation-extractor.js';
import { LLMBasedRelationExtractor } from './llm-based-relation-extractor.js';
import type { ICacheService } from '../../../shared/interfaces/cache.interface.js';
/**
 * 관계 추출 메인 서비스
 */
export declare class RelationExtractor implements IRelationExtractor {
    private readonly ruleExtractor;
    private readonly llmExtractor;
    private readonly cache;
    constructor(ruleExtractor?: RuleBasedRelationExtractor, llmExtractor?: LLMBasedRelationExtractor, cache?: ICacheService<RelationCandidate[]>);
    /**
     * 새로운 기억과 기존 기억들 간의 관계를 추출합니다.
     * 하이브리드 방식: 규칙 기반 먼저 시도, 실패 시 LLM fallback
     *
     * @param newMemory 새로운 기억
     * @param existingMemories 기존 기억 목록
     * @param options 추출 옵션
     * @returns 관계 후보 목록
     */
    extractRelations(newMemory: MemoryItem, existingMemories: MemoryItem[], options?: ExtractOptions): Promise<RelationCandidate[]>;
    /**
     * 기억 타입에 적용 가능한 관계 유형을 반환합니다.
     *
     * @param memoryType 기억 타입
     * @param requestedTypes 요청된 관계 유형 (없으면 모든 적용 가능한 타입 반환)
     * @returns 적용 가능한 관계 유형 목록
     */
    private getApplicableRelationTypes;
    /**
     * 규칙 기반 결과와 LLM 결과를 병합합니다.
     * 동일한 관계 (source_id, target_id, relation_type이 동일)는 중복 제거하고,
     * 신뢰도가 높은 것을 우선합니다.
     *
     * @param ruleCandidates 규칙 기반 결과
     * @param llmCandidates LLM 결과
     * @returns 병합된 결과
     */
    private mergeCandidates;
    /**
     * 캐시 키 생성
     * 공통 유틸리티를 사용하여 일관된 캐시 키를 생성합니다.
     *
     * @param newMemoryId 새로운 기억 ID
     * @param existingMemoryIds 기존 기억 ID 목록
     * @param options 추출 옵션
     * @returns 캐시 키
     */
    private generateCacheKey;
    /**
     * 배치 관계 추출 (여러 기억을 묶어서 처리)
     * 비동기 배치 처리로 성능 최적화
     *
     * @param newMemories 새로운 기억 목록
     * @param existingMemories 기존 기억 목록
     * @param options 추출 옵션 (batchSize 포함 가능)
     * @returns 각 새로운 기억별 관계 후보 맵
     */
    extractRelationsBatch(newMemories: MemoryItem[], existingMemories: MemoryItem[], options?: ExtractOptions & {
        batchSize?: number;
    }): Promise<Map<string, RelationCandidate[]>>;
}
//# sourceMappingURL=relation-extractor.d.ts.map