/** * #59 (ADR-048 Phase 4): MemoryRank rerank — 검색/활용 * * ADR-048 섹션 8 Stage 매핑: * Stage B Expand : expandCandidates — 현 규모(≈4.5k)는 전역 PPR 산출물(memory_edges * fused weight) 1-hop 참조로 갈음. per-query Forward-Push는 설계 목표 규모용. * Stage C Rerank : applyMemoryRankPrior — finalScore = relevance^μ · prior^ν (μ=1 고정) * relevance = HybridRanker RRF totalScore. ADR 수식의 recencyFit·tierFit은 * 기존 HybridRanker recencyDecay·tierBoost로 매핑 (이중 적용 회피). * prior = g(memoryrank): 후보셋 min-max 정규화 → floor + (1-floor)·norm. * rank 미계산(신규 메모리)은 norm 0.5 중립 — cold-start 보호 (섹션 13). * Stage D Diversify : diversify — dup-cluster(cluster_id) 당 1개 + MMR (embedding cosine). * 축 ④ Assembly : assembleWithinBudget — 토큰 예산 greedy 한계이득/토큰비. * * 3 caller(SessionStart / UserPromptSubmit / CLI search) 단일 source — 인라인 중복 금지. */ import type { Memory } from '../types/index.js'; import type { RankedResult } from './ranker.js'; import type { MemoryDatabase } from '../db/database.js'; /** config.search.rerank와 동형 (기본값은 config/manager.ts zod default가 SSOT) */ export interface MemoryRankRerankConfig { enabled: boolean; nu: number; floor: number; expand: boolean; expandLimit: number; mmrLambda: number; } export declare const DEFAULT_RERANK_CONFIG: MemoryRankRerankConfig; /** * Stage C — MemoryRank prior 곱셈 rerank. * 후보셋 내 min-max 정규화(실측 분포 -0.05~0.55, 스케일 무관화) 후 * prior = floor + (1-floor)·norm, score *= prior^ν. * 전원 미계산이면 no-op (분포 정보 없음 — 기존 순위 보존). */ export declare function applyMemoryRankPrior(results: RankedResult[], options?: { nu?: number; floor?: number; }): RankedResult[]; /** * Stage B — 그래프 확장: 상위 seed의 memory_edges 이웃을 후보군에 흡수. * 확장 후보 score = seed 최저 score × expandWeight × edge weight (기존 후보보다 항상 하위 시작 * — prior/diversify에서 재평가). DB 오류 시 원본 그대로 (graceful degradation). */ export declare function expandCandidates(db: MemoryDatabase, ranked: RankedResult[], options?: { seedCount?: number; expandLimit?: number; expandWeight?: number; }): RankedResult[]; /** * Stage D — MMR diversify + dup-cluster 제거. * 동일 cluster_id는 최고 score 1개만. embedding 보유 쌍은 MMR * (λ·rel − (1−λ)·maxSimToSelected)로 near-dup 폭주 방지. */ export declare function diversify(results: RankedResult[], options: { limit: number; mmrLambda?: number; }): RankedResult[]; /** * 축 ④ — 토큰 예산 조립: greedy 한계이득/토큰비(score/tokens) 선택 (submodular knapsack 근사). * 예산 내면 전원 통과 (현 주입 규모에서는 보통 no-op — 메모리 증가 시 발동). * 반환은 score 내림차순 (표시 순서 보존). */ export declare function assembleWithinBudget(results: RankedResult[], maxTokens: number, estimateTokens?: (memory: Memory) => number): RankedResult[]; /** * 파이프라인 헬퍼 — expand → prior → diversify. 3 caller 공통 진입점. * db 미전달 시 expand skip (UserPromptSubmit realtime — 성능 제약). */ export declare function applyContextRankRerank(params: { ranked: RankedResult[]; limit: number; config?: Partial; db?: MemoryDatabase; }): RankedResult[]; //# sourceMappingURL=memoryrank-rerank.d.ts.map