/**
 * Triple 추출 배치 작업
 *
 * 미처리 또는 실패한 Episodic Memory에 대해 Triple 추출을 수행하는 배치 작업입니다.
 *
 * 주요 기능:
 * - 미처리 Episodic Memory 조회
 * - Triple 추출 및 Semantic Memory 생성
 * - 재시도 정책 적용 (최대 3회, 지수 백오프: 1일, 2일, 4일)
 * - 상태 업데이트 (성공/실패/abandoned)
 * - 로깅 및 통계 수집
 *
 * 재시도 정책:
 * - 최대 시도 횟수: 3회 (설정 가능)
 * - 지수 백오프: 1일, 2일, 4일 후 재시도
 * - 즉각 재시도 금지: LLM 호출 실패 시 바로 재시도하지 않음 (비용 절감)
 * - 지연 재시도: 배치 작업에서 실패한 항목을 다음 배치에서 재시도
 * - 최대 시도 횟수 초과 시: abandoned 상태로 설정하여 재시도 중단
 */
import Database from 'better-sqlite3';
import { TripleExtractionService } from '../../../domains/relation/services/triple-extraction/triple-extraction-service.js';
import { SemanticMemoryUpdateService } from '../../../domains/memory/services/semantic-memory/semantic-memory-update-service.js';
import type { BatchJobResult } from '../batch-scheduler.js';
/**
 * Triple 추출 배치 작업 설정
 */
export interface TripleExtractionBatchJobConfig {
    /**
     * 배치 크기 (한 번에 처리할 최대 메모리 수)
     * 기본값: 10
     */
    batchSize?: number;
    /**
     * 작업 타임아웃 (밀리초)
     * 기본값: 30000 (30초)
     */
    timeout?: number;
    /**
     * 최대 재시도 횟수
     * 기본값: 3
     */
    maxRetries?: number;
    /**
     * 재시도 백오프 간격 (일 단위)
     * 기본값: [1, 2, 4] (1일, 2일, 4일)
     */
    retryBackoffDays?: number[];
    /**
     * SQLite WAL 환경 고려: 청크 크기 (작은 단위로 나누어 처리하여 Lock 충돌 방지)
     * 기본값: 5 (한 번에 5개씩 처리)
     */
    chunkSize?: number;
    /**
     * SQLite WAL 환경 고려: 청크 처리 사이 지연 시간 (밀리초)
     * 기본값: 100 (0.1초)
     */
    chunkDelayMs?: number;
    /**
     * 병렬성 제어 (동시 실행 배치 수)
     * 기본값: 1 (싱글톤 배치 작업)
     */
    parallelism?: number;
}
/**
 * Triple 추출 배치 작업 결과
 */
export interface TripleExtractionBatchResult extends BatchJobResult {
    details: {
        processed: number;
        success: number;
        failed: number;
        skipped: number;
        semanticMemoriesCreated: number;
        semanticMemoriesUpdated: number;
        retryCounts: Map<string, number>;
    };
    /**
     * 타임아웃 발생 여부
     * 타임아웃이 발생하여 작업이 중단된 경우 true
     */
    timeoutOccurred?: boolean;
}
/**
 * Triple 추출 배치 작업 클래스
 */
export declare class TripleExtractionBatchJob {
    private config;
    private tripleExtractionService;
    private semanticMemoryUpdateService;
    constructor(config?: TripleExtractionBatchJobConfig, dependencies?: {
        tripleExtractionService?: TripleExtractionService;
        semanticMemoryUpdateService?: SemanticMemoryUpdateService;
    });
    /**
     * 배치 작업 실행
     *
     * PRD 6.2 배치 처리 최적화:
     * - 배치 크기: 10개씩 처리 (설정 가능)
     * - 타임아웃: 배치당 최대 30초 (설정 가능)
     * - 병렬성 제어: Parallelism = 1 (동시에 하나의 배치만 실행)
     *
     * @param db 데이터베이스 연결
     * @returns 배치 작업 결과
     */
    execute(db: Database.Database): Promise<TripleExtractionBatchResult>;
    /**
     * 메모리 배열을 청크로 분할
     *
     * SQLite WAL 환경 고려: 작은 단위로 나누어 처리하여 Lock 충돌 방지
     *
     * @param memories 메모리 배열
     * @param chunkSize 청크 크기
     * @returns 청크 배열
     */
    private splitIntoChunks;
    /**
     * 청크 단위 처리
     *
     * SQLite WAL 환경 고려: 작은 트랜잭션으로 처리하여 Lock 충돌 방지
     * 각 메모리 처리는 개별적으로 처리되며, SQLITE_BUSY 오류 발생 시 재시도
     *
     * PRD 6.2 배치 처리 최적화:
     * - 타임아웃 체크: 배치당 최대 30초
     * - 병렬성 제어: 순차 처리 (parallelism=1)
     *
     * @param db 데이터베이스 연결
     * @param chunk 청크 (메모리 배열)
     * @param overallResult 전체 결과 객체 (로깅용)
     * @param timeoutDeadline 타임아웃 데드라인 (타임스탬프)
     * @returns 청크 처리 결과
     */
    private processChunk;
    /**
     * 배치 작업 대상 조회
     *
     * @param db 데이터베이스 연결
     * @param limit 최대 조회 개수
     * @returns 대상 Episodic Memory 목록 (재시도 정책 적용)
     */
    private getTargetMemories;
    /**
     * 재시도 정책 확인
     *
     * @param memory Episodic Memory (triple_extraction_metadata 포함)
     * @param now 현재 시간
     * @returns 재시도 가능 여부
     */
    private shouldRetry;
    /**
     * 재시도 횟수 조회
     *
     * @param memory Episodic Memory (triple_extraction_metadata 포함)
     * @returns 재시도 횟수
     */
    private getRetryCount;
    /**
     * 메모리 상태 업데이트
     *
     * PRD 1.4 재시도 종료 조건 및 필드 조합 규칙에 따라 상태를 업데이트합니다.
     *
     * 상태 전이 규칙:
     * - 성공 시: triple_extracted=true, triple_extracted_status='success', 이전 실패 기록 초기화
     * - 최대 시도 횟수 초과 시: triple_extracted=false, triple_extracted_status='abandoned', 재시도 중단
     * - 재시도 가능 시: triple_extracted=false, triple_extracted_status='failed', 재시도 정보 저장
     *
     * 필드 조합 규칙 (PRD 1.4):
     * | triple_extracted | triple_extracted_status | 의미 |
     * | ---------------- | ----------------------- | ---- |
     * | NULL | NULL | 미처리 |
     * | true | 'success' | 성공 |
     * | false | 'failed' | 실패 (재시도 가능) |
     * | false | 'abandoned' | 포기 (수동 재시도 필요) |
     * | false | NULL | 미처리 또는 초기 상태 |
     *
     * 이 메서드는 필드 조합 규칙을 준수하여 triple_extracted와 triple_extracted_status를 동기화합니다.
     *
     * @param db 데이터베이스 연결
     * @param memoryId 메모리 ID
     * @param status 상태 ('success' | 'failed' | 'abandoned')
     * @param metadata 메타데이터
     */
    private updateMemoryStatus;
    /**
     * 평균 Confidence 계산
     *
     * memory_relation 테이블에서 해당 Episodic Memory에서 생성된 모든 관계의 confidence 값을 수집하여 평균 계산
     *
     * @param db 데이터베이스 연결
     * @param episodicMemoryId Episodic Memory ID
     * @returns 평균 Confidence (0.0~1.0), 관계가 없으면 null
     */
    private calculateAverageConfidence;
}
//# sourceMappingURL=triple-extraction-batch-job.d.ts.map