/** * MAMA (Memory-Augmented MCP Architecture) - Relevance Scorer * * Relevance scoring formula for decision ranking and top-N selection * Tasks: 1.1-1.4, 2.1-2.7 (Relevance scoring and top-N selection) * AC #1, #4, #5: Decision relevance, failure priority boost, top-N selection * * @module relevance-scorer * @version 1.0 * @date 2025-11-14 */ /** * Decision object for relevance scoring */ export interface DecisionWithEmbedding { id?: string; topic?: string; decision: string; reasoning?: string | null; outcome?: string | null; failure_reason?: string | null; user_involvement?: string; confidence?: number; created_at: number; updated_at?: number; embedding?: Float32Array; relevanceScore?: number; } /** * Query context for relevance calculation */ export interface QueryContext { embedding?: Float32Array; } /** * Formatted context result */ export interface FormattedContext { full: Array<{ decision_id?: string; topic?: string; decision: string; reasoning?: string | null; outcome?: string | null; failure_reason?: string | null; user_involvement?: string; confidence?: number; relevanceScore?: number; created_at: number; }>; summary: { count: number; duration_days: number; failures: Array<{ decision: string; reason: string | null | undefined; }>; } | null; } /** * Calculate relevance score for a single decision * * Task 1.2: Implement calculateRelevance(decision, queryContext) function * AC #1, #4: Relevance scoring with failure priority boost * * Formula: * Relevance = (Recency × 0.2) + (Importance × 0.5) + (Semantic × 0.3) * * Where: * - Recency: exp(-days_since / 30) [30-day half-life] * - Importance: OUTCOME_WEIGHTS[outcome] * - FAILED: 1.0 (highest - failures are most valuable) * - PARTIAL: 0.7 * - SUCCESS: 0.5 * - null: 0.3 (ongoing, lowest) * - Semantic: cosineSimilarity(decision.embedding, query.embedding) * * @param decision - Decision object * @param queryContext - Query context * @returns Relevance score (0.0-1.0) */ export declare function calculateRelevance(decision: DecisionWithEmbedding, queryContext: QueryContext): number; /** * Select top N most relevant decisions * * Task 2.1: Add selectTopDecisions(decisions, queryContext, n=3) function * AC #1, #5: Top-N selection with threshold filtering * * @param decisions - Array of decision objects * @param queryContext - Query context with embedding * @param n - Number of top decisions to return (default: 3) * @returns Top N decisions with relevance scores */ export declare function selectTopDecisions(decisions: DecisionWithEmbedding[], queryContext: QueryContext, n?: number): DecisionWithEmbedding[]; /** * Format decisions with top-N selection and summary * * Task 8.2-8.3: Format top 3 in full detail, rest as summary * AC #5: Top-N selection with summary * * @param decisions - All decisions (sorted by relevance) * @param topN - Number of decisions to show in full detail (default: 3) * @returns Formatted context {full: Array, summary: Object} */ export declare function formatTopNContext(decisions: DecisionWithEmbedding[], topN?: number): FormattedContext; /** * Test result for relevance scoring */ export interface TestResult { name: string; expected: string; calculated: string; pass: boolean; } /** * Test relevance scoring with sample decisions * * Task 1.4: Test relevance scoring with sample decisions * AC #1, #4: Verify scoring formula and failure priority * * @returns Test results */ export declare function testRelevanceScoring(): TestResult[]; //# sourceMappingURL=relevance-scorer.d.ts.map