@absolutejs/rag 0.0.11 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,12 +2,12 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/ai/rag/quality.ts", "../src/ai/rag/atomicWrite.ts", "../src/ai/rag/grounding.ts", "../src/ai/rag/presentation.ts"],
4
4
  "sourcesContent": [
5
- "import { mkdir, readFile } from \"node:fs/promises\";\nimport { writeFileAtomic } from \"./atomicWrite\";\nimport { dirname } from \"node:path\";\nimport type { Database } from \"bun:sqlite\";\nimport type {\n RAGAnswerGroundingCaseDifficultyDiffEntry,\n RAGAnswerGroundingCaseDifficultyHistory,\n RAGAnswerGroundingCaseDifficultyHistoryStore,\n RAGAnswerGroundingCaseDifficultyRun,\n RAGAnswerGroundingCaseDifficultyRunDiff,\n RAGAnswerGroundingEvaluationCaseDiff,\n RAGAnswerGroundingEvaluationCase,\n RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n RAGAnswerGroundingEvaluationCaseSnapshot,\n RAGAnswerGroundingEvaluationCaseResult,\n RAGAnswerGroundingEvaluationHistory,\n RAGAnswerGroundingEvaluationLeaderboardEntry,\n RAGAnswerGroundingEvaluationHistoryStore,\n RAGAnswerGroundingEvaluationInput,\n RAGAnswerGroundingEvaluationResponse,\n RAGAnswerGroundingEvaluationRun,\n RAGAnswerGroundingEvaluationRunDiff,\n RAGCollection,\n RAGIndexedDocument,\n RAGEvaluationCase,\n RAGEvaluationCaseDiff,\n RAGEvaluationCaseTraceSnapshot,\n RAGEvaluationCaseResult,\n RAGEvaluationHistory,\n RAGEvaluationHistoryStore,\n RAGEvaluationHistoryPruneInput,\n RAGEvaluationHistoryPruneResult,\n RAGEvaluationInput,\n RAGEvaluationLeaderboardEntry,\n RAGEvaluationResponse,\n RAGEvaluationRunDiff,\n RAGLabelValueRow,\n RAGComparisonPresentation,\n RAGComparisonOverviewPresentation,\n RAGGroundingProviderPresentation,\n RAGGroundingProviderOverviewPresentation,\n RAGGroundingProviderCaseComparisonPresentation,\n RAGGroundingOverviewPresentation,\n RAGQualityOverviewPresentation,\n RAGDocumentChunk,\n RAGEvaluationSuite,\n RAGEvaluationSuiteGenerationOptions,\n RAGEvaluationSuiteDatasetSummary,\n RAGEvaluationSuiteSnapshot,\n RAGEvaluationSuiteSnapshotDiff,\n RAGEvaluationSuiteSnapshotHistory,\n RAGEvaluationSuiteSnapshotHistoryStore,\n RAGEvaluationSuiteRun,\n RAGEvaluationEntityQualitySummary,\n RAGEvaluationEntityQualityView,\n RAGAnswerGroundingEntityQualitySummary,\n RAGAnswerGroundingEntityQualityView,\n RAGRetrievalTraceSummaryRun,\n RAGHybridRetrievalMode,\n RAGSourceBalanceStrategy,\n RAGRetrievalCandidate,\n RAGRetrievalComparison,\n RAGRetrievalBaselineGatePolicy,\n RAGRetrievalBaselineGatePolicyHistoryRecord,\n RAGRetrievalBaselineGatePolicyHistoryStore,\n RAGRetrievalComparisonDecisionSummary,\n RAGRetrievalComparisonGateResult,\n RAGRetrievalReleaseVerdict,\n RAGRetrievalComparisonHistoryStore,\n RAGRetrievalBaselineRecord,\n RAGRetrievalBaselineStore,\n RAGRetrievalLaneHandoffDecisionRecord,\n RAGRetrievalLaneHandoffDecisionStore,\n RAGRetrievalLaneHandoffIncidentHistoryRecord,\n RAGRetrievalLaneHandoffIncidentHistoryStore,\n RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore,\n RAGRetrievalLaneHandoffIncidentRecord,\n RAGRetrievalLaneHandoffIncidentStore,\n RAGRetrievalIncidentRemediationDecisionRecord,\n RAGRetrievalIncidentRemediationDecisionStore,\n RAGRetrievalIncidentRemediationExecutionHistoryRecord,\n RAGRetrievalIncidentRemediationExecutionHistoryStore,\n RAGRetrievalReleaseDecisionRecord,\n RAGRetrievalReleaseLanePolicyHistoryRecord,\n RAGRetrievalReleaseLanePolicyHistoryStore,\n RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n RAGRetrievalReleaseLaneEscalationPolicyHistoryStore,\n RAGRetrievalReleaseDecisionStore,\n RAGRetrievalReleaseIncidentRecord,\n RAGRetrievalReleaseIncidentStore,\n RAGRetrievalComparisonRun,\n RAGRetrievalComparisonEntry,\n RAGRetrievalTrace,\n RAGRetrievalTraceComparisonSummary,\n RAGRetrievalTraceComparisonSummaryDiff,\n RAGRetrievalTraceStep,\n RAGRetrievalTraceStage,\n RAGQueryResult,\n RAGTraceSummaryListTrend,\n RAGTraceSummaryTrendDirection,\n RAGTraceSummaryNumericDelta,\n RAGTraceSummaryStageTrend,\n RAGTraceSummaryStageCountsDelta,\n RAGRetrievalComparisonSummary,\n RAGRetrievalTraceHistoryWindow,\n RAGRerankerCandidate,\n RAGRerankerComparison,\n RAGRerankerComparisonEntry,\n RAGRerankerComparisonSummary,\n RAGRerankerProviderLike,\n RAGRetrievalTraceTrend,\n RAGSearchTraceDiff,\n RAGSearchTraceGroupHistory,\n RAGSearchTraceGroupHistoryEntry,\n RAGSearchTraceHistory,\n RAGChatPluginConfig,\n RAGSearchTracePruneInput,\n RAGSearchTracePruneHistoryStore,\n RAGSearchTracePruneRun,\n RAGSearchTracePrunePreview,\n RAGSearchTracePruneResult,\n RAGSearchTraceRecord,\n RAGSearchTraceResultSnapshot,\n RAGSearchTraceStats,\n RAGSearchTraceStore,\n RAGRemediationAction,\n RAGSource,\n RAGCollectionSearchParams,\n RAGSQLiteStoreMigrationInspection,\n RAGSQLiteStoreMigrationIssue,\n RAGSQLiteStoreMigrationResult,\n} from \"@absolutejs/ai\";\nimport { generateId } from \"@absolutejs/ai\";\nimport { buildRAGGroundedAnswer } from \"./grounding\";\nimport { buildRAGSourceLabels } from \"./presentation\";\n\nconst DEFAULT_TOP_K = 6;\nconst DEFAULT_HISTORY_LIMIT = 20;\nconst DEFAULT_SEARCH_TRACE_TABLE_NAME = \"rag_search_traces\";\n\nconst getTraceLabelString = (value: unknown) =>\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n\nconst getTraceLabelNumber = (value: unknown) =>\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n\nconst formatTraceSpreadsheetTableLabel = (\n tableIndex?: number,\n tableCount?: number,\n) => {\n if (\n typeof tableIndex !== \"number\" ||\n !Number.isFinite(tableIndex) ||\n tableIndex < 1\n ) {\n return undefined;\n }\n\n if (\n typeof tableCount === \"number\" &&\n Number.isFinite(tableCount) &&\n tableCount >= tableIndex\n ) {\n return `Table ${tableIndex} of ${tableCount}`;\n }\n\n return `Table ${tableIndex}`;\n};\n\nconst formatTraceSourceAwareChunkReason = (value: unknown) => {\n const reason = getTraceLabelString(value);\n if (reason === \"section_boundary\") {\n return \"Chunk boundary section\";\n }\n if (reason === \"size_limit\") {\n return \"Chunk boundary size limit\";\n }\n if (reason === \"source_native_unit\") {\n return \"Chunk boundary source-native unit\";\n }\n return undefined;\n};\n\nconst buildTraceSourceAwareUnitScopeLabel = (\n metadata?: Record<string, unknown>,\n) => {\n if (!metadata) {\n return undefined;\n }\n\n const sectionKind = getTraceLabelString(metadata.sectionKind);\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getTraceLabelString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getTraceLabelString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const pdfTextKind = getTraceLabelString(metadata.pdfTextKind);\n const officeBlockKind = getTraceLabelString(metadata.officeBlockKind);\n const sheetName = getTraceLabelString(metadata.sheetName);\n const spreadsheetTableLabel = formatTraceSpreadsheetTableLabel(\n getTraceLabelNumber(metadata.spreadsheetTableIndex),\n getTraceLabelNumber(metadata.spreadsheetTableCount),\n );\n const slideTitle = getTraceLabelString(metadata.slideTitle);\n const slideNumber =\n getTraceLabelNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n\n if (\n sectionPath.length > 0 &&\n (sectionKind === \"markdown_heading\" ||\n sectionKind === \"html_heading\" ||\n sectionKind === \"office_heading\" ||\n sectionKind === undefined)\n ) {\n return `Source-aware section ${sectionPath.join(\" > \")}`;\n }\n\n if (sectionKind === \"pdf_block\") {\n if (pdfTextKind === \"table_like\" && sectionTitle) {\n return `Source-aware PDF table block ${sectionTitle}`;\n }\n if (sectionTitle) {\n return `Source-aware PDF block ${sectionTitle}`;\n }\n return \"Source-aware PDF block\";\n }\n\n if (sectionKind === \"office_block\") {\n if (officeBlockKind && sectionTitle) {\n return `Source-aware office ${officeBlockKind} block ${sectionTitle}`;\n }\n if (sectionTitle) {\n return `Source-aware office block ${sectionTitle}`;\n }\n return \"Source-aware office block\";\n }\n\n if (\n sectionKind === \"spreadsheet_rows\" ||\n (sectionKind === undefined &&\n (sheetName ||\n spreadsheetTableLabel ||\n getTraceLabelNumber(metadata.spreadsheetRowStart) !== undefined ||\n getTraceLabelNumber(metadata.spreadsheetRowEnd) !== undefined))\n ) {\n if (sheetName && spreadsheetTableLabel) {\n return `Source-aware spreadsheet ${sheetName} ${spreadsheetTableLabel}`;\n }\n if (sheetName) {\n return `Source-aware spreadsheet ${sheetName}`;\n }\n return \"Source-aware spreadsheet\";\n }\n\n if (sectionKind === \"presentation_slide\") {\n if (slideNumber && slideTitle) {\n return `Source-aware slide ${slideNumber} ${slideTitle}`;\n }\n if (slideTitle) {\n return `Source-aware slide ${slideTitle}`;\n }\n if (slideNumber) {\n return `Source-aware slide ${slideNumber}`;\n }\n return \"Source-aware slide\";\n }\n\n return undefined;\n};\n\nconst buildEvaluationLeadSnapshot = (input?: {\n metadata?: Record<string, unknown>;\n source?: string;\n title?: string;\n}): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"topContextLabel\"\n | \"topLocatorLabel\"\n | \"sourceAwareChunkReasonLabel\"\n | \"sourceAwareUnitScopeLabel\"\n> => {\n const labels = buildRAGSourceLabels({\n metadata: input?.metadata,\n source: input?.source,\n title: input?.title,\n });\n\n return {\n sourceAwareChunkReasonLabel: formatTraceSourceAwareChunkReason(\n input?.metadata?.sourceAwareChunkReason,\n ),\n sourceAwareUnitScopeLabel: buildTraceSourceAwareUnitScopeLabel(\n input?.metadata,\n ),\n topContextLabel: labels?.contextLabel,\n topLocatorLabel: labels?.locatorLabel,\n };\n};\n\nconst buildEvaluationLeadMediaCueSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"leadSpeakerCue\"\n | \"leadSpeakerAttributionCue\"\n | \"leadChannelCue\"\n | \"leadChannelAttributionCue\"\n | \"leadContinuityCue\"\n> => {\n const rerankStep = trace?.steps.find((step) => step.stage === \"rerank\");\n const metadata = rerankStep?.metadata ?? {};\n\n return {\n leadChannelAttributionCue:\n typeof metadata.leadChannelAttributionCue === \"string\"\n ? metadata.leadChannelAttributionCue\n : undefined,\n leadChannelCue:\n typeof metadata.leadChannelCue === \"string\"\n ? metadata.leadChannelCue\n : undefined,\n leadContinuityCue:\n typeof metadata.leadContinuityCue === \"string\"\n ? metadata.leadContinuityCue\n : undefined,\n leadSpeakerAttributionCue:\n typeof metadata.leadSpeakerAttributionCue === \"string\"\n ? metadata.leadSpeakerAttributionCue\n : undefined,\n leadSpeakerCue:\n typeof metadata.leadSpeakerCue === \"string\"\n ? metadata.leadSpeakerCue\n : undefined,\n };\n};\n\nconst buildEvaluationLeadPresentationCueSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<RAGEvaluationCaseTraceSnapshot, \"leadPresentationCue\"> => {\n const rerankStep = trace?.steps.find((step) => step.stage === \"rerank\");\n const metadata = rerankStep?.metadata ?? {};\n const cue = metadata.leadPresentationCue;\n\n return {\n leadPresentationCue:\n cue === \"title\" || cue === \"body\" || cue === \"notes\" ? cue : undefined,\n };\n};\n\nconst buildEvaluationLeadSpreadsheetCueSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<RAGEvaluationCaseTraceSnapshot, \"leadSpreadsheetCue\"> => {\n const rerankStep = trace?.steps.find((step) => step.stage === \"rerank\");\n const metadata = rerankStep?.metadata ?? {};\n const cue = metadata.leadSpreadsheetCue;\n\n return {\n leadSpreadsheetCue:\n cue === \"sheet\" || cue === \"table\" || cue === \"column\" ? cue : undefined,\n };\n};\n\nconst buildEvaluationSQLiteQueryPlanSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"sqliteQueryMode\"\n | \"sqliteQueryPushdownMode\"\n | \"sqliteQueryPushdownApplied\"\n | \"sqliteQueryPushdownClauseCount\"\n | \"sqliteQueryTotalFilterClauseCount\"\n | \"sqliteQueryJsRemainderClauseCount\"\n | \"sqliteQueryMultiplierUsed\"\n | \"sqliteQueryCandidateLimitUsed\"\n | \"sqliteQueryMaxBackfillsUsed\"\n | \"sqliteQueryMinResultsUsed\"\n | \"sqliteQueryFillPolicyUsed\"\n | \"sqliteQueryPushdownCoverageRatio\"\n | \"sqliteQueryJsRemainderRatio\"\n | \"sqliteQueryFilteredCandidates\"\n | \"sqliteQueryInitialSearchK\"\n | \"sqliteQueryFinalSearchK\"\n | \"sqliteQuerySearchExpansionRatio\"\n | \"sqliteQueryBackfillCount\"\n | \"sqliteQueryBackfillLimitReached\"\n | \"sqliteQueryMinResultsSatisfied\"\n | \"sqliteQueryReturnedCount\"\n | \"sqliteQueryCandidateYieldRatio\"\n | \"sqliteQueryTopKFillRatio\"\n | \"sqliteQueryUnderfilledTopK\"\n | \"sqliteQueryCandidateBudgetExhausted\"\n | \"sqliteQueryCandidateCoverage\"\n> => {\n const vectorStep = trace?.steps.find(\n (step) => step.stage === \"vector_search\",\n );\n const metadata = vectorStep?.metadata ?? {};\n\n return {\n sqliteQueryBackfillCount:\n typeof metadata.sqliteQueryBackfillCount === \"number\"\n ? metadata.sqliteQueryBackfillCount\n : undefined,\n sqliteQueryCandidateBudgetExhausted:\n typeof metadata.sqliteQueryCandidateBudgetExhausted === \"boolean\"\n ? metadata.sqliteQueryCandidateBudgetExhausted\n : undefined,\n sqliteQueryCandidateCoverage:\n metadata.sqliteQueryCandidateCoverage === \"empty\" ||\n metadata.sqliteQueryCandidateCoverage === \"under_target\" ||\n metadata.sqliteQueryCandidateCoverage === \"target_sized\" ||\n metadata.sqliteQueryCandidateCoverage === \"broad\"\n ? metadata.sqliteQueryCandidateCoverage\n : undefined,\n sqliteQueryFilteredCandidates:\n typeof metadata.sqliteQueryFilteredCandidates === \"number\"\n ? metadata.sqliteQueryFilteredCandidates\n : undefined,\n sqliteQueryFinalSearchK:\n typeof metadata.sqliteQueryFinalSearchK === \"number\"\n ? metadata.sqliteQueryFinalSearchK\n : undefined,\n sqliteQueryInitialSearchK:\n typeof metadata.sqliteQueryInitialSearchK === \"number\"\n ? metadata.sqliteQueryInitialSearchK\n : undefined,\n sqliteQuerySearchExpansionRatio:\n typeof metadata.sqliteQuerySearchExpansionRatio === \"number\"\n ? metadata.sqliteQuerySearchExpansionRatio\n : undefined,\n sqliteQueryMode:\n metadata.sqliteQueryMode === \"json_fallback\" ||\n metadata.sqliteQueryMode === \"native_vec0\"\n ? metadata.sqliteQueryMode\n : undefined,\n sqliteQueryPushdownMode:\n metadata.sqliteQueryPushdownMode === \"none\" ||\n metadata.sqliteQueryPushdownMode === \"partial\" ||\n metadata.sqliteQueryPushdownMode === \"full\"\n ? metadata.sqliteQueryPushdownMode\n : undefined,\n sqliteQueryPushdownApplied:\n typeof metadata.sqliteQueryPushdownApplied === \"boolean\"\n ? metadata.sqliteQueryPushdownApplied\n : undefined,\n sqliteQueryPushdownClauseCount:\n typeof metadata.sqliteQueryPushdownClauseCount === \"number\"\n ? metadata.sqliteQueryPushdownClauseCount\n : undefined,\n sqliteQueryTotalFilterClauseCount:\n typeof metadata.sqliteQueryTotalFilterClauseCount === \"number\"\n ? metadata.sqliteQueryTotalFilterClauseCount\n : undefined,\n sqliteQueryJsRemainderClauseCount:\n typeof metadata.sqliteQueryJsRemainderClauseCount === \"number\"\n ? metadata.sqliteQueryJsRemainderClauseCount\n : undefined,\n sqliteQueryMultiplierUsed:\n typeof metadata.sqliteQueryMultiplierUsed === \"number\"\n ? metadata.sqliteQueryMultiplierUsed\n : undefined,\n sqliteQueryCandidateLimitUsed:\n typeof metadata.sqliteQueryCandidateLimitUsed === \"number\"\n ? metadata.sqliteQueryCandidateLimitUsed\n : undefined,\n sqliteQueryMaxBackfillsUsed:\n typeof metadata.sqliteQueryMaxBackfillsUsed === \"number\"\n ? metadata.sqliteQueryMaxBackfillsUsed\n : undefined,\n sqliteQueryMinResultsUsed:\n typeof metadata.sqliteQueryMinResultsUsed === \"number\"\n ? metadata.sqliteQueryMinResultsUsed\n : undefined,\n sqliteQueryFillPolicyUsed:\n metadata.sqliteQueryFillPolicyUsed === \"strict_topk\" ||\n metadata.sqliteQueryFillPolicyUsed === \"satisfy_min_results\"\n ? metadata.sqliteQueryFillPolicyUsed\n : undefined,\n sqliteQueryPushdownCoverageRatio:\n typeof metadata.sqliteQueryPushdownCoverageRatio === \"number\"\n ? metadata.sqliteQueryPushdownCoverageRatio\n : undefined,\n sqliteQueryJsRemainderRatio:\n typeof metadata.sqliteQueryJsRemainderRatio === \"number\"\n ? metadata.sqliteQueryJsRemainderRatio\n : undefined,\n sqliteQueryReturnedCount:\n typeof metadata.sqliteQueryReturnedCount === \"number\"\n ? metadata.sqliteQueryReturnedCount\n : undefined,\n sqliteQueryCandidateYieldRatio:\n typeof metadata.sqliteQueryCandidateYieldRatio === \"number\"\n ? metadata.sqliteQueryCandidateYieldRatio\n : undefined,\n sqliteQueryBackfillLimitReached:\n typeof metadata.sqliteQueryBackfillLimitReached === \"boolean\"\n ? metadata.sqliteQueryBackfillLimitReached\n : undefined,\n sqliteQueryMinResultsSatisfied:\n typeof metadata.sqliteQueryMinResultsSatisfied === \"boolean\"\n ? metadata.sqliteQueryMinResultsSatisfied\n : undefined,\n sqliteQueryTopKFillRatio:\n typeof metadata.sqliteQueryTopKFillRatio === \"number\"\n ? metadata.sqliteQueryTopKFillRatio\n : undefined,\n sqliteQueryUnderfilledTopK:\n typeof metadata.sqliteQueryUnderfilledTopK === \"boolean\"\n ? metadata.sqliteQueryUnderfilledTopK\n : undefined,\n };\n};\n\nconst buildEvaluationPostgresQueryPlanSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"postgresQueryMode\"\n | \"postgresQueryPushdownMode\"\n | \"postgresQueryPushdownApplied\"\n | \"postgresQueryPushdownClauseCount\"\n | \"postgresQueryTotalFilterClauseCount\"\n | \"postgresQueryJsRemainderClauseCount\"\n | \"postgresQueryMultiplierUsed\"\n | \"postgresQueryCandidateLimitUsed\"\n | \"postgresQueryMaxBackfillsUsed\"\n | \"postgresQueryMinResultsUsed\"\n | \"postgresQueryFillPolicyUsed\"\n | \"postgresQueryPushdownCoverageRatio\"\n | \"postgresQueryJsRemainderRatio\"\n | \"postgresQueryFilteredCandidates\"\n | \"postgresQueryInitialSearchK\"\n | \"postgresQueryFinalSearchK\"\n | \"postgresQuerySearchExpansionRatio\"\n | \"postgresQueryBackfillCount\"\n | \"postgresQueryBackfillLimitReached\"\n | \"postgresQueryMinResultsSatisfied\"\n | \"postgresQueryReturnedCount\"\n | \"postgresQueryCandidateYieldRatio\"\n | \"postgresQueryTopKFillRatio\"\n | \"postgresQueryUnderfilledTopK\"\n | \"postgresQueryCandidateBudgetExhausted\"\n | \"postgresQueryCandidateCoverage\"\n> => {\n const vectorStep = trace?.steps.find(\n (step) => step.stage === \"vector_search\",\n );\n const metadata = vectorStep?.metadata ?? {};\n\n return {\n postgresQueryBackfillCount:\n typeof metadata.postgresQueryBackfillCount === \"number\"\n ? metadata.postgresQueryBackfillCount\n : undefined,\n postgresQueryCandidateBudgetExhausted:\n typeof metadata.postgresQueryCandidateBudgetExhausted === \"boolean\"\n ? metadata.postgresQueryCandidateBudgetExhausted\n : undefined,\n postgresQueryCandidateCoverage:\n metadata.postgresQueryCandidateCoverage === \"empty\" ||\n metadata.postgresQueryCandidateCoverage === \"under_target\" ||\n metadata.postgresQueryCandidateCoverage === \"target_sized\" ||\n metadata.postgresQueryCandidateCoverage === \"broad\"\n ? metadata.postgresQueryCandidateCoverage\n : undefined,\n postgresQueryFilteredCandidates:\n typeof metadata.postgresQueryFilteredCandidates === \"number\"\n ? metadata.postgresQueryFilteredCandidates\n : undefined,\n postgresQueryFinalSearchK:\n typeof metadata.postgresQueryFinalSearchK === \"number\"\n ? metadata.postgresQueryFinalSearchK\n : undefined,\n postgresQueryInitialSearchK:\n typeof metadata.postgresQueryInitialSearchK === \"number\"\n ? metadata.postgresQueryInitialSearchK\n : undefined,\n postgresQuerySearchExpansionRatio:\n typeof metadata.postgresQuerySearchExpansionRatio === \"number\"\n ? metadata.postgresQuerySearchExpansionRatio\n : undefined,\n postgresQueryMode:\n metadata.postgresQueryMode === \"native_pgvector\"\n ? metadata.postgresQueryMode\n : undefined,\n postgresQueryPushdownMode:\n metadata.postgresQueryPushdownMode === \"none\" ||\n metadata.postgresQueryPushdownMode === \"partial\" ||\n metadata.postgresQueryPushdownMode === \"full\"\n ? metadata.postgresQueryPushdownMode\n : undefined,\n postgresQueryPushdownApplied:\n typeof metadata.postgresQueryPushdownApplied === \"boolean\"\n ? metadata.postgresQueryPushdownApplied\n : undefined,\n postgresQueryPushdownClauseCount:\n typeof metadata.postgresQueryPushdownClauseCount === \"number\"\n ? metadata.postgresQueryPushdownClauseCount\n : undefined,\n postgresQueryTotalFilterClauseCount:\n typeof metadata.postgresQueryTotalFilterClauseCount === \"number\"\n ? metadata.postgresQueryTotalFilterClauseCount\n : undefined,\n postgresQueryJsRemainderClauseCount:\n typeof metadata.postgresQueryJsRemainderClauseCount === \"number\"\n ? metadata.postgresQueryJsRemainderClauseCount\n : undefined,\n postgresQueryMultiplierUsed:\n typeof metadata.postgresQueryMultiplierUsed === \"number\"\n ? metadata.postgresQueryMultiplierUsed\n : undefined,\n postgresQueryCandidateLimitUsed:\n typeof metadata.postgresQueryCandidateLimitUsed === \"number\"\n ? metadata.postgresQueryCandidateLimitUsed\n : undefined,\n postgresQueryMaxBackfillsUsed:\n typeof metadata.postgresQueryMaxBackfillsUsed === \"number\"\n ? metadata.postgresQueryMaxBackfillsUsed\n : undefined,\n postgresQueryMinResultsUsed:\n typeof metadata.postgresQueryMinResultsUsed === \"number\"\n ? metadata.postgresQueryMinResultsUsed\n : undefined,\n postgresQueryFillPolicyUsed:\n metadata.postgresQueryFillPolicyUsed === \"strict_topk\" ||\n metadata.postgresQueryFillPolicyUsed === \"satisfy_min_results\"\n ? metadata.postgresQueryFillPolicyUsed\n : undefined,\n postgresQueryPushdownCoverageRatio:\n typeof metadata.postgresQueryPushdownCoverageRatio === \"number\"\n ? metadata.postgresQueryPushdownCoverageRatio\n : undefined,\n postgresQueryJsRemainderRatio:\n typeof metadata.postgresQueryJsRemainderRatio === \"number\"\n ? metadata.postgresQueryJsRemainderRatio\n : undefined,\n postgresQueryReturnedCount:\n typeof metadata.postgresQueryReturnedCount === \"number\"\n ? metadata.postgresQueryReturnedCount\n : undefined,\n postgresQueryCandidateYieldRatio:\n typeof metadata.postgresQueryCandidateYieldRatio === \"number\"\n ? metadata.postgresQueryCandidateYieldRatio\n : undefined,\n postgresQueryBackfillLimitReached:\n typeof metadata.postgresQueryBackfillLimitReached === \"boolean\"\n ? metadata.postgresQueryBackfillLimitReached\n : undefined,\n postgresQueryMinResultsSatisfied:\n typeof metadata.postgresQueryMinResultsSatisfied === \"boolean\"\n ? metadata.postgresQueryMinResultsSatisfied\n : undefined,\n postgresQueryTopKFillRatio:\n typeof metadata.postgresQueryTopKFillRatio === \"number\"\n ? metadata.postgresQueryTopKFillRatio\n : undefined,\n postgresQueryUnderfilledTopK:\n typeof metadata.postgresQueryUnderfilledTopK === \"boolean\"\n ? metadata.postgresQueryUnderfilledTopK\n : undefined,\n };\n};\nconst DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME =\n \"rag_retrieval_comparison_history\";\nconst DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME =\n \"rag_retrieval_release_decisions\";\nconst DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME = \"rag_retrieval_baselines\";\nconst DEFAULT_RETRIEVAL_RELEASE_INCIDENT_TABLE_NAME =\n \"rag_retrieval_release_incidents\";\ntype BunSQLiteModule = {\n Database: new (path?: string) => Database;\n};\n\ntype ImportMetaWithRequire = ImportMeta & {\n require?: (specifier: string) => unknown;\n};\n\nconst loadBunSQLiteModule = (): BunSQLiteModule => {\n const runtimeRequire = (import.meta as ImportMetaWithRequire).require;\n if (typeof runtimeRequire !== \"function\") {\n throw new Error(\n \"SQLite trace storage requires Bun runtime support for import.meta.require.\",\n );\n }\n\n return runtimeRequire(\"bun:sqlite\") as BunSQLiteModule;\n};\n\nconst normalizeStringArray = (value: unknown) => {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .filter((candidate) => typeof candidate === \"string\")\n .map((candidate) => candidate.trim())\n .filter((candidate) => candidate.length > 0);\n};\n\nconst normalizeLabelFilter = (value?: string) => {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const normalized = value.trim().toLowerCase();\n return normalized.length > 0 ? normalized : undefined;\n};\n\nconst normalizeRetrievalBaselineRecords = (\n records: RAGRetrievalBaselineRecord[],\n) => [...records].sort((left, right) => right.promotedAt - left.promotedAt);\n\nconst normalizeRetrievalReleaseDecisionRecords = (\n records: RAGRetrievalReleaseDecisionRecord[],\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalLaneHandoffDecisionRecords = (\n records: RAGRetrievalLaneHandoffDecisionRecord[],\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalReleaseIncidentRecords = (\n records: RAGRetrievalReleaseIncidentRecord[],\n) => [...records].sort((left, right) => right.triggeredAt - left.triggeredAt);\n\nconst normalizeRetrievalIncidentRemediationDecisionRecords = (\n records: RAGRetrievalIncidentRemediationDecisionRecord[],\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalIncidentRemediationExecutionHistoryRecords = (\n records: RAGRetrievalIncidentRemediationExecutionHistoryRecord[],\n) => [...records].sort((left, right) => right.executedAt - left.executedAt);\n\nconst matchesWinner = (run: RAGRetrievalComparisonRun, winnerId?: string) => {\n if (!winnerId) {\n return true;\n }\n\n return (\n run.comparison.summary.bestByPassingRate === winnerId ||\n run.decisionSummary?.winnerByPassingRate === winnerId\n );\n};\n\nconst findRetrievalComparisonEntry = (\n comparison: RAGRetrievalComparison,\n retrievalId?: string,\n) => {\n if (!retrievalId) {\n return undefined;\n }\n\n return comparison.entries.find((entry) => entry.retrievalId === retrievalId);\n};\n\nconst evaluateRetrievalComparisonGate = ({\n delta,\n policy,\n}: {\n delta?: {\n passingRateDelta: number;\n averageF1Delta: number;\n elapsedMsDelta: number;\n presentationTitleCueCasesDelta?: number;\n presentationBodyCueCasesDelta?: number;\n presentationNotesCueCasesDelta?: number;\n spreadsheetSheetCueCasesDelta?: number;\n spreadsheetTableCueCasesDelta?: number;\n spreadsheetColumnCueCasesDelta?: number;\n multiVectorCollapsedCasesDelta?: number;\n multiVectorLexicalHitCasesDelta?: number;\n multiVectorVectorHitCasesDelta?: number;\n evidenceReconcileCasesDelta?: number;\n runtimeCandidateBudgetExhaustedCasesDelta?: number;\n runtimeUnderfilledTopKCasesDelta?: number;\n };\n policy?: RAGRetrievalBaselineGatePolicy;\n}): RAGRetrievalComparisonGateResult | undefined => {\n if (!delta || !policy) {\n return undefined;\n }\n\n const reasons: string[] = [];\n if (\n typeof policy.minPassingRateDelta === \"number\" &&\n delta.passingRateDelta < policy.minPassingRateDelta\n ) {\n reasons.push(\n `passing rate delta ${delta.passingRateDelta} is below ${policy.minPassingRateDelta}`,\n );\n }\n if (\n typeof policy.minAverageF1Delta === \"number\" &&\n delta.averageF1Delta < policy.minAverageF1Delta\n ) {\n reasons.push(\n `average F1 delta ${delta.averageF1Delta} is below ${policy.minAverageF1Delta}`,\n );\n }\n if (\n typeof policy.maxElapsedMsDelta === \"number\" &&\n delta.elapsedMsDelta > policy.maxElapsedMsDelta\n ) {\n reasons.push(\n `elapsed ms delta ${delta.elapsedMsDelta} exceeds ${policy.maxElapsedMsDelta}`,\n );\n }\n if (\n typeof policy.minPresentationTitleCueCasesDelta === \"number\" &&\n (delta.presentationTitleCueCasesDelta ?? 0) <\n policy.minPresentationTitleCueCasesDelta\n ) {\n reasons.push(\n `presentation title cue delta ${delta.presentationTitleCueCasesDelta ?? 0} is below ${policy.minPresentationTitleCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minPresentationBodyCueCasesDelta === \"number\" &&\n (delta.presentationBodyCueCasesDelta ?? 0) <\n policy.minPresentationBodyCueCasesDelta\n ) {\n reasons.push(\n `presentation body cue delta ${delta.presentationBodyCueCasesDelta ?? 0} is below ${policy.minPresentationBodyCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minPresentationNotesCueCasesDelta === \"number\" &&\n (delta.presentationNotesCueCasesDelta ?? 0) <\n policy.minPresentationNotesCueCasesDelta\n ) {\n reasons.push(\n `presentation notes cue delta ${delta.presentationNotesCueCasesDelta ?? 0} is below ${policy.minPresentationNotesCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minSpreadsheetSheetCueCasesDelta === \"number\" &&\n (delta.spreadsheetSheetCueCasesDelta ?? 0) <\n policy.minSpreadsheetSheetCueCasesDelta\n ) {\n reasons.push(\n `spreadsheet sheet cue delta ${delta.spreadsheetSheetCueCasesDelta ?? 0} is below ${policy.minSpreadsheetSheetCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minSpreadsheetTableCueCasesDelta === \"number\" &&\n (delta.spreadsheetTableCueCasesDelta ?? 0) <\n policy.minSpreadsheetTableCueCasesDelta\n ) {\n reasons.push(\n `spreadsheet table cue delta ${delta.spreadsheetTableCueCasesDelta ?? 0} is below ${policy.minSpreadsheetTableCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minSpreadsheetColumnCueCasesDelta === \"number\" &&\n (delta.spreadsheetColumnCueCasesDelta ?? 0) <\n policy.minSpreadsheetColumnCueCasesDelta\n ) {\n reasons.push(\n `spreadsheet column cue delta ${delta.spreadsheetColumnCueCasesDelta ?? 0} is below ${policy.minSpreadsheetColumnCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minMultiVectorCollapsedCasesDelta === \"number\" &&\n (delta.multiVectorCollapsedCasesDelta ?? 0) <\n policy.minMultiVectorCollapsedCasesDelta\n ) {\n reasons.push(\n `multivector collapsed delta ${delta.multiVectorCollapsedCasesDelta ?? 0} is below ${policy.minMultiVectorCollapsedCasesDelta}`,\n );\n }\n if (\n typeof policy.minMultiVectorLexicalHitCasesDelta === \"number\" &&\n (delta.multiVectorLexicalHitCasesDelta ?? 0) <\n policy.minMultiVectorLexicalHitCasesDelta\n ) {\n reasons.push(\n `multivector lexical-hit delta ${delta.multiVectorLexicalHitCasesDelta ?? 0} is below ${policy.minMultiVectorLexicalHitCasesDelta}`,\n );\n }\n if (\n typeof policy.minMultiVectorVectorHitCasesDelta === \"number\" &&\n (delta.multiVectorVectorHitCasesDelta ?? 0) <\n policy.minMultiVectorVectorHitCasesDelta\n ) {\n reasons.push(\n `multivector vector-hit delta ${delta.multiVectorVectorHitCasesDelta ?? 0} is below ${policy.minMultiVectorVectorHitCasesDelta}`,\n );\n }\n if (\n typeof policy.minEvidenceReconcileCasesDelta === \"number\" &&\n (delta.evidenceReconcileCasesDelta ?? 0) <\n policy.minEvidenceReconcileCasesDelta\n ) {\n reasons.push(\n `evidence reconcile delta ${delta.evidenceReconcileCasesDelta ?? 0} is below ${policy.minEvidenceReconcileCasesDelta}`,\n );\n }\n if (\n typeof policy.maxRuntimeCandidateBudgetExhaustedCasesDelta === \"number\" &&\n (delta.runtimeCandidateBudgetExhaustedCasesDelta ?? 0) >\n policy.maxRuntimeCandidateBudgetExhaustedCasesDelta\n ) {\n reasons.push(\n `runtime candidate-budget-exhausted delta ${delta.runtimeCandidateBudgetExhaustedCasesDelta ?? 0} exceeds ${policy.maxRuntimeCandidateBudgetExhaustedCasesDelta}`,\n );\n }\n if (\n typeof policy.maxRuntimeUnderfilledTopKCasesDelta === \"number\" &&\n (delta.runtimeUnderfilledTopKCasesDelta ?? 0) >\n policy.maxRuntimeUnderfilledTopKCasesDelta\n ) {\n reasons.push(\n `runtime underfilled-topk delta ${delta.runtimeUnderfilledTopKCasesDelta ?? 0} exceeds ${policy.maxRuntimeUnderfilledTopKCasesDelta}`,\n );\n }\n\n if (reasons.length === 0) {\n return {\n policy,\n reasons: [],\n status: \"pass\",\n };\n }\n\n return {\n policy,\n reasons,\n status: policy.severity === \"warn\" ? \"warn\" : \"fail\",\n };\n};\n\nexport const buildRAGRetrievalReleaseVerdict = ({\n groupKey,\n decisionSummary,\n}: {\n groupKey?: string;\n decisionSummary?: RAGRetrievalComparisonDecisionSummary;\n}): RAGRetrievalReleaseVerdict | undefined => {\n if (!decisionSummary) {\n return undefined;\n }\n\n const gate = decisionSummary.gate;\n const delta = decisionSummary.delta;\n const baselineRetrievalId = decisionSummary.baselineRetrievalId;\n const candidateRetrievalId = decisionSummary.candidateRetrievalId;\n\n if (gate) {\n if (gate.status === \"pass\") {\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n delta,\n gate,\n status: \"pass\",\n summary: \"Candidate passed the active baseline gate.\",\n };\n }\n\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n delta,\n gate,\n status: gate.status,\n summary:\n gate.status === \"warn\"\n ? \"Candidate triggered a baseline gate warning.\"\n : \"Candidate failed the active baseline gate.\",\n };\n }\n\n if (delta) {\n const requiresReview =\n delta.passingRateDelta < 0 ||\n delta.averageF1Delta < 0 ||\n (delta.evidenceReconcileCasesDelta ?? 0) < 0 ||\n (delta.presentationTitleCueCasesDelta ?? 0) < 0 ||\n (delta.presentationBodyCueCasesDelta ?? 0) < 0 ||\n (delta.presentationNotesCueCasesDelta ?? 0) < 0 ||\n (delta.spreadsheetSheetCueCasesDelta ?? 0) < 0 ||\n (delta.spreadsheetTableCueCasesDelta ?? 0) < 0 ||\n (delta.spreadsheetColumnCueCasesDelta ?? 0) < 0;\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n delta,\n status: requiresReview ? \"needs_review\" : \"pass\",\n summary: requiresReview\n ? \"Candidate should be reviewed before promotion.\"\n : \"Candidate improved or matched the baseline.\",\n };\n }\n\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n status: \"needs_review\",\n summary: \"No explicit baseline verdict could be determined.\",\n };\n};\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\";\n\nconst parseJSONRecord = (value: string | null) => {\n if (value === null) {\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(value);\n\n return isObjectRecord(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst parseJSONArray = <T>(value: string | null, fallback: T[]): T[] => {\n if (value === null) {\n return fallback;\n }\n\n try {\n const parsed = JSON.parse(value);\n\n return Array.isArray(parsed) ? (parsed as T[]) : fallback;\n } catch {\n return fallback;\n }\n};\n\nconst normalizeExpectedIds = (input: string[]) =>\n Array.from(new Set(input.map((item) => item.trim()).filter(Boolean)));\n\nconst hasSourceExtension = (\n value: string | undefined,\n extensions: string[],\n) => {\n if (!value) {\n return false;\n }\n const normalized = value.trim().toLowerCase();\n\n return extensions.some((extension) => normalized.endsWith(extension));\n};\n\nconst hasMetadataNumber = (\n metadata: Record<string, unknown> | undefined,\n key: string,\n) => typeof metadata?.[key] === \"number\";\n\nconst hasMetadataString = (\n metadata: Record<string, unknown> | undefined,\n key: string,\n) => typeof metadata?.[key] === \"string\" && metadata[key] !== \"\";\n\nconst hasMetadataArray = (\n metadata: Record<string, unknown> | undefined,\n key: string,\n) => Array.isArray(metadata?.[key]) && metadata[key].length > 0;\n\nconst detectSectionEvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n sources.some(\n (source) =>\n hasMetadataArray(source.metadata, \"sectionPath\") ||\n hasMetadataString(source.metadata, \"sectionTitle\") ||\n hasMetadataString(source.metadata, \"sectionKind\"),\n );\n\nconst detectSectionGraphEvidence = (\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n sources.some(\n (source) =>\n hasMetadataString(source.metadata, \"sectionChunkId\") ||\n hasMetadataNumber(source.metadata, \"sectionChunkIndex\") ||\n (hasMetadataNumber(source.metadata, \"sectionChunkCount\") &&\n Number(source.metadata?.sectionChunkCount) > 1),\n );\n\nconst detectSectionHierarchyEvidence = (\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n sources.some((source) => {\n const path = Array.isArray(source.metadata?.sectionPath)\n ? source.metadata.sectionPath.filter(\n (entry): entry is string =>\n typeof entry === \"string\" && entry.trim().length > 0,\n )\n : [];\n\n return path.length > 1;\n });\n\nconst detectSpreadsheetEvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n ids.some((id) =>\n hasSourceExtension(id, [\".xlsx\", \".xls\", \".csv\", \".ods\", \".tsv\"]),\n ) ||\n sources.some(\n (source) =>\n hasSourceExtension(source.source, [\n \".xlsx\",\n \".xls\",\n \".csv\",\n \".ods\",\n \".tsv\",\n ]) ||\n hasMetadataString(source.metadata, \"sheetName\") ||\n hasMetadataNumber(source.metadata, \"spreadsheetRowStart\") ||\n hasMetadataNumber(source.metadata, \"spreadsheetTableIndex\"),\n );\n\nconst detectMediaEvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n ids.some((id) =>\n hasSourceExtension(id, [\n \".mp3\",\n \".wav\",\n \".m4a\",\n \".aac\",\n \".ogg\",\n \".flac\",\n \".mp4\",\n \".mov\",\n \".mkv\",\n \".webm\",\n ]),\n ) ||\n sources.some(\n (source) =>\n hasSourceExtension(source.source, [\n \".mp3\",\n \".wav\",\n \".m4a\",\n \".aac\",\n \".ogg\",\n \".flac\",\n \".mp4\",\n \".mov\",\n \".mkv\",\n \".webm\",\n ]) ||\n hasMetadataString(source.metadata, \"mediaKind\") ||\n hasMetadataString(source.metadata, \"speaker\") ||\n hasMetadataNumber(source.metadata, \"startMs\"),\n );\n\nconst detectOCREvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n ids.some((id) =>\n hasSourceExtension(id, [\".png\", \".jpg\", \".jpeg\", \".webp\"]),\n ) ||\n sources.some(\n (source) =>\n hasSourceExtension(source.source, [\".png\", \".jpg\", \".jpeg\", \".webp\"]) ||\n hasMetadataNumber(source.metadata, \"ocrConfidence\") ||\n hasMetadataNumber(source.metadata, \"ocrRegionConfidence\") ||\n hasMetadataString(source.metadata, \"ocrEngine\") ||\n source.metadata?.pdfTextMode === \"ocr\",\n );\n\nconst getRetrievalTrace = (\n trace: RAGSearchTraceRecord | RAGRetrievalTrace | undefined,\n) => (trace && \"trace\" in trace ? trace.trace : trace);\n\nconst classifyRAGEvaluationFailure = (input: {\n expectedCount: number;\n matchedCount: number;\n missingIds: string[];\n retrievedCount: number;\n retrievedIds: string[];\n retrievedSources?: RAGSource[];\n trace?: RAGSearchTraceRecord | RAGRetrievalTrace;\n}): NonNullable<RAGEvaluationCaseResult[\"failureClasses\"]> => {\n const classes: NonNullable<RAGEvaluationCaseResult[\"failureClasses\"]> = [];\n if (input.expectedCount === 0) {\n classes.push(\"no_expected_targets\");\n }\n if (input.retrievedCount === 0) {\n classes.push(\"no_results\");\n }\n if (input.expectedCount > 0 && input.matchedCount === 0) {\n classes.push(\"no_match\");\n }\n if (\n input.expectedCount > 0 &&\n input.matchedCount > 0 &&\n input.matchedCount < input.expectedCount\n ) {\n classes.push(\"partial_recall\");\n }\n if (input.retrievedIds.length > input.matchedCount) {\n classes.push(\"extra_noise\");\n }\n const sourceSignals = input.retrievedSources ?? [];\n const relevantIds = [...input.missingIds, ...input.retrievedIds];\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectSectionEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"section_evidence_miss\");\n if (detectSectionGraphEvidence(sourceSignals)) {\n classes.push(\"section_graph_miss\");\n }\n if (detectSectionHierarchyEvidence(sourceSignals)) {\n classes.push(\"section_hierarchy_miss\");\n }\n }\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectSpreadsheetEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"spreadsheet_evidence_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectMediaEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"media_evidence_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectOCREvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"ocr_evidence_miss\");\n }\n const retrievalTrace = getRetrievalTrace(input.trace);\n if (\n (input.retrievedCount === 0 || input.matchedCount === 0) &&\n (retrievalTrace?.routingLabel || retrievalTrace?.routingReason)\n ) {\n classes.push(\"routing_miss\");\n }\n\n return classes;\n};\n\nconst classifyRAGGroundingFailure = (input: {\n expectedCount: number;\n matchedCount: number;\n missingIds: string[];\n extraIds: string[];\n citationCount: number;\n unresolvedCitationCount: number;\n availableSources?: RAGSource[];\n}): NonNullable<RAGAnswerGroundingEvaluationCaseResult[\"failureClasses\"]> => {\n const classes: NonNullable<\n RAGAnswerGroundingEvaluationCaseResult[\"failureClasses\"]\n > = [];\n if (input.expectedCount === 0) {\n classes.push(\"no_expected_targets\");\n }\n if (input.citationCount === 0) {\n classes.push(\"no_citations\");\n }\n if (input.unresolvedCitationCount > 0) {\n classes.push(\"unresolved_citations\");\n }\n if (input.missingIds.length > 0 || input.matchedCount < input.expectedCount) {\n classes.push(\"missing_expected_sources\");\n }\n if (input.extraIds.length > 0) {\n classes.push(\"extra_citations\");\n }\n const sourceSignals = input.availableSources ?? [];\n const relevantIds = [...input.missingIds, ...input.extraIds];\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectSectionEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"section_source_miss\");\n if (detectSectionGraphEvidence(sourceSignals)) {\n classes.push(\"section_graph_source_miss\");\n }\n if (detectSectionHierarchyEvidence(sourceSignals)) {\n classes.push(\"section_hierarchy_source_miss\");\n }\n }\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectSpreadsheetEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"spreadsheet_source_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectMediaEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"media_source_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectOCREvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"ocr_source_miss\");\n }\n\n return classes;\n};\n\nconst normalizeSyntheticText = (value: string) =>\n value\n .replace(/^#+\\s*/gm, \"\")\n .replace(/`+/g, \"\")\n .replace(/\\[(.*?)\\]\\((.*?)\\)/g, \"$1\")\n .replace(/\\s+/g, \" \")\n .trim();\n\nconst buildSyntheticEvaluationQuery = (document: RAGIndexedDocument) => {\n const title = normalizeSyntheticText(document.title);\n const sourceTail = normalizeSyntheticText(\n document.source.split(\"/\").at(-1) ?? document.source,\n );\n const text = normalizeSyntheticText(document.text ?? \"\");\n const firstSentence =\n text\n .split(/(?<=[.!?])\\s+/)\n .map((entry) => entry.trim())\n .find((entry) => entry.length >= 24) ??\n text\n .split(/\\n+/)\n .map((entry) => entry.trim())\n .find((entry) => entry.length >= 24) ??\n title ??\n sourceTail;\n const prefixedSentence =\n title.length > 0 &&\n firstSentence.toLowerCase().startsWith(title.toLowerCase())\n ? firstSentence\n : [title, firstSentence].filter(Boolean).join(\" \");\n const queryTerms = normalizeSyntheticText(prefixedSentence)\n .split(/\\s+/)\n .slice(0, 12)\n .join(\" \");\n\n return queryTerms.length > 0 ? queryTerms : sourceTail;\n};\n\nconst resolveEvaluationMode = (caseInput: {\n expectedChunkIds?: string[];\n expectedSources?: string[];\n expectedDocumentIds?: string[];\n}): \"chunkId\" | \"source\" | \"documentId\" => {\n if (normalizeStringArray(caseInput.expectedChunkIds).length > 0) {\n return \"chunkId\";\n }\n if (normalizeStringArray(caseInput.expectedSources).length > 0) {\n return \"source\";\n }\n\n return \"documentId\";\n};\n\nconst getDocumentId = (source: RAGSource): string => {\n const metadataDocumentId =\n typeof source.metadata?.documentId === \"string\"\n ? source.metadata.documentId\n : undefined;\n if (metadataDocumentId) {\n return metadataDocumentId;\n }\n if (source.source) {\n return source.source;\n }\n\n const [documentId] = source.chunkId.split(\":\");\n\n return documentId ?? source.chunkId;\n};\n\nconst extractExpectedId = (\n source: RAGSource,\n mode: \"chunkId\" | \"source\" | \"documentId\",\n): string =>\n mode === \"chunkId\"\n ? source.chunkId\n : mode === \"source\"\n ? (source.source ?? source.title ?? source.chunkId)\n : getDocumentId(source);\n\nconst buildSources = (\n results: Array<{\n chunkId: string;\n chunkText: string;\n score: number;\n title?: string;\n source?: string;\n metadata?: Record<string, unknown>;\n }>,\n) =>\n results.map((result) => ({\n chunkId: result.chunkId,\n metadata: result.metadata,\n score: Number.isFinite(result.score) ? result.score : 0,\n source: result.source,\n text: result.chunkText,\n title: result.title,\n }));\n\nconst buildAnswerGroundingStatus = ({\n coverage,\n expectedCount,\n matchedCount,\n unresolvedCitationCount,\n resolvedCitationCount,\n}: {\n coverage: RAGAnswerGroundingEvaluationCaseResult[\"coverage\"];\n expectedCount: number;\n matchedCount: number;\n unresolvedCitationCount: number;\n resolvedCitationCount: number;\n}): RAGAnswerGroundingEvaluationCaseResult[\"status\"] => {\n if (expectedCount > 0) {\n if (\n matchedCount === expectedCount &&\n unresolvedCitationCount === 0 &&\n coverage !== \"ungrounded\"\n ) {\n return \"pass\";\n }\n\n if (matchedCount > 0 || resolvedCitationCount > 0) {\n return \"partial\";\n }\n\n return \"fail\";\n }\n\n if (coverage === \"grounded\" && unresolvedCitationCount === 0) {\n return \"pass\";\n }\n\n if (resolvedCitationCount > 0 || coverage === \"partial\") {\n return \"partial\";\n }\n\n return \"fail\";\n};\n\nexport const buildRAGEvaluationLeaderboard = (\n runs: RAGEvaluationSuiteRun[],\n) => {\n const sorted = [...runs].sort((left, right) => {\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n\n return sorted.map<RAGEvaluationLeaderboardEntry>((run, index) => ({\n averageF1: run.response.summary.averageF1,\n averageLatencyMs: run.response.summary.averageLatencyMs,\n label: run.label,\n passingRate: run.response.passingRate,\n rank: index + 1,\n runId: run.id,\n suiteId: run.suiteId,\n totalCases: run.response.totalCases,\n }));\n};\n\nexport const buildRAGAnswerGroundingEvaluationLeaderboard = (\n runs: RAGAnswerGroundingEvaluationRun[],\n) => {\n const sorted = [...runs].sort((left, right) => {\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (\n right.response.summary.averageCitationF1 !==\n left.response.summary.averageCitationF1\n ) {\n return (\n right.response.summary.averageCitationF1 -\n left.response.summary.averageCitationF1\n );\n }\n if (\n right.response.summary.averageResolvedCitationRate !==\n left.response.summary.averageResolvedCitationRate\n ) {\n return (\n right.response.summary.averageResolvedCitationRate -\n left.response.summary.averageResolvedCitationRate\n );\n }\n\n return left.elapsedMs - right.elapsedMs;\n });\n\n return sorted.map<RAGAnswerGroundingEvaluationLeaderboardEntry>(\n (run, index) => ({\n averageCitationF1: run.response.summary.averageCitationF1,\n averageResolvedCitationRate:\n run.response.summary.averageResolvedCitationRate,\n label: run.label,\n passingRate: run.response.passingRate,\n rank: index + 1,\n runId: run.id,\n suiteId: run.suiteId,\n totalCases: run.response.totalCases,\n }),\n );\n};\n\nconst buildTraceStageCounts = (traces: RAGRetrievalTrace[]) => {\n const counts: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n > = {};\n\n for (const trace of traces) {\n for (const step of trace.steps) {\n counts[step.stage] = (counts[step.stage] ?? 0) + 1;\n }\n }\n\n return counts;\n};\n\nconst diffTraceStageCounts = ({\n current,\n previous,\n}: {\n current: Partial<Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>>;\n previous: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n >;\n}) => {\n const next: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n > = {};\n const stages = new Set([\n ...Object.keys(current),\n ...Object.keys(previous),\n ] as RAGRetrievalTrace[\"steps\"][number][\"stage\"][]);\n\n for (const stage of stages) {\n const delta = (current[stage] ?? 0) - (previous[stage] ?? 0);\n if (delta !== 0) {\n next[stage] = delta;\n }\n }\n\n return next;\n};\n\nconst normalizeSummaryList = <T extends string>(values: T[]) =>\n Array.from(new Set(values)).sort();\n\nconst buildSummaryListDelta = <T extends string>(\n current: T[],\n previous: T[],\n) => {\n const currentSet = new Set(current);\n const previousSet = new Set(previous);\n const added = current.filter((value) => !previousSet.has(value));\n const removed = previous.filter((value) => !currentSet.has(value));\n\n return {\n added: normalizeSummaryList(Array.from(new Set(added))),\n current: normalizeSummaryList(current),\n previous: normalizeSummaryList(previous),\n removed: normalizeSummaryList(Array.from(new Set(removed))),\n };\n};\n\nfunction summarizeListTurnover<T extends string>(params: {\n current: T[];\n previous: T[];\n history: T[][];\n}): RAGTraceSummaryListTrend<T> {\n const { current, previous, history } = params;\n const currentSet = new Set(current);\n const previousSet = new Set(previous);\n const frequency: Record<string, number> = {};\n\n for (const entry of history) {\n for (const value of entry) {\n frequency[value] = (frequency[value] ?? 0) + 1;\n }\n }\n\n return {\n appeared: normalizeSummaryList(\n Array.from(new Set(current.filter((value) => !previousSet.has(value)))),\n ),\n current: normalizeSummaryList(current),\n disappeared: normalizeSummaryList(\n Array.from(new Set(previous.filter((value) => !currentSet.has(value)))),\n ),\n frequency,\n previous: normalizeSummaryList(previous),\n stable: normalizeSummaryList(\n Array.from(new Set(current.filter((value) => previousSet.has(value)))),\n ),\n };\n}\n\nconst diffTraceSummaryStageCounts = ({\n current,\n previous,\n}: {\n current: RAGRetrievalTraceComparisonSummary[\"stageCounts\"];\n previous: RAGRetrievalTraceComparisonSummary[\"stageCounts\"];\n}) => {\n const stages = new Set([\n ...Object.keys(current),\n ...Object.keys(previous),\n ]) as Set<RAGRetrievalTraceStep[\"stage\"]>;\n const next: Partial<\n Record<RAGRetrievalTraceStage, RAGTraceSummaryStageCountsDelta>\n > = {};\n\n for (const stage of stages) {\n const currentCount = current[stage] ?? 0;\n const previousCount = previous[stage] ?? 0;\n const delta = currentCount - previousCount;\n if (delta !== 0 || currentCount !== 0 || previousCount !== 0) {\n next[stage] = {\n current: currentCount,\n delta,\n previous: previousCount,\n };\n }\n }\n\n return next;\n};\n\nconst roundTraceAverage = (value: number, total: number) =>\n total > 0 ? Number((value / total).toFixed(2)) : 0;\n\nconst buildTraceSummaryDirection = (\n delta: number,\n): RAGTraceSummaryTrendDirection =>\n delta > 0 ? \"up\" : delta < 0 ? \"down\" : \"flat\";\n\nconst buildTraceSummaryAggregate = ({\n summaries,\n}: {\n summaries: RAGRetrievalTraceComparisonSummary[];\n}): {\n aggregate: RAGTraceSummaryNumericDelta[];\n bestMetric: RAGTraceSummaryNumericDelta | undefined;\n worstMetric: RAGTraceSummaryNumericDelta | undefined;\n} => {\n if (summaries.length === 0) {\n const aggregate: RAGTraceSummaryNumericDelta[] = [\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"totalCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageFinalCount\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageVectorCount\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageLexicalCount\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageCandidateTopK\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageLexicalTopK\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"vectorCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"lexicalCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"balancedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"roundRobinCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"transformedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"variantCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorVectorHitCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorLexicalHitCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorCollapsedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"runtimeCandidateBudgetExhaustedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"runtimeUnderfilledTopKCases\",\n previous: 0,\n },\n ];\n\n return {\n aggregate,\n bestMetric: undefined,\n worstMetric: undefined,\n };\n }\n\n const latest = summaries[0]!;\n const previous = summaries[summaries.length - 1]!;\n const aggregate: RAGTraceSummaryNumericDelta[] = [\n {\n current: latest.totalCases,\n delta: latest.totalCases - previous.totalCases,\n direction: buildTraceSummaryDirection(\n latest.totalCases - previous.totalCases,\n ),\n metric: \"totalCases\",\n previous: previous.totalCases,\n },\n {\n current: latest.averageFinalCount,\n delta: latest.averageFinalCount - previous.averageFinalCount,\n direction: buildTraceSummaryDirection(\n latest.averageFinalCount - previous.averageFinalCount,\n ),\n metric: \"averageFinalCount\",\n previous: previous.averageFinalCount,\n },\n {\n current: latest.averageVectorCount,\n delta: latest.averageVectorCount - previous.averageVectorCount,\n direction: buildTraceSummaryDirection(\n latest.averageVectorCount - previous.averageVectorCount,\n ),\n metric: \"averageVectorCount\",\n previous: previous.averageVectorCount,\n },\n {\n current: latest.averageLexicalCount,\n delta: latest.averageLexicalCount - previous.averageLexicalCount,\n direction: buildTraceSummaryDirection(\n latest.averageLexicalCount - previous.averageLexicalCount,\n ),\n metric: \"averageLexicalCount\",\n previous: previous.averageLexicalCount,\n },\n {\n current: latest.averageCandidateTopK,\n delta: latest.averageCandidateTopK - previous.averageCandidateTopK,\n direction: buildTraceSummaryDirection(\n latest.averageCandidateTopK - previous.averageCandidateTopK,\n ),\n metric: \"averageCandidateTopK\",\n previous: previous.averageCandidateTopK,\n },\n {\n current: latest.averageLexicalTopK,\n delta: latest.averageLexicalTopK - previous.averageLexicalTopK,\n direction: buildTraceSummaryDirection(\n latest.averageLexicalTopK - previous.averageLexicalTopK,\n ),\n metric: \"averageLexicalTopK\",\n previous: previous.averageLexicalTopK,\n },\n {\n current: latest.vectorCases,\n delta: latest.vectorCases - previous.vectorCases,\n direction: buildTraceSummaryDirection(\n latest.vectorCases - previous.vectorCases,\n ),\n metric: \"vectorCases\",\n previous: previous.vectorCases,\n },\n {\n current: latest.lexicalCases,\n delta: latest.lexicalCases - previous.lexicalCases,\n direction: buildTraceSummaryDirection(\n latest.lexicalCases - previous.lexicalCases,\n ),\n metric: \"lexicalCases\",\n previous: previous.lexicalCases,\n },\n {\n current: latest.balancedCases,\n delta: latest.balancedCases - previous.balancedCases,\n direction: buildTraceSummaryDirection(\n latest.balancedCases - previous.balancedCases,\n ),\n metric: \"balancedCases\",\n previous: previous.balancedCases,\n },\n {\n current: latest.roundRobinCases,\n delta: latest.roundRobinCases - previous.roundRobinCases,\n direction: buildTraceSummaryDirection(\n latest.roundRobinCases - previous.roundRobinCases,\n ),\n metric: \"roundRobinCases\",\n previous: previous.roundRobinCases,\n },\n {\n current: latest.transformedCases,\n delta: latest.transformedCases - previous.transformedCases,\n direction: buildTraceSummaryDirection(\n latest.transformedCases - previous.transformedCases,\n ),\n metric: \"transformedCases\",\n previous: previous.transformedCases,\n },\n {\n current: latest.variantCases,\n delta: latest.variantCases - previous.variantCases,\n direction: buildTraceSummaryDirection(\n latest.variantCases - previous.variantCases,\n ),\n metric: \"variantCases\",\n previous: previous.variantCases,\n },\n {\n current: latest.multiVectorCases,\n delta: latest.multiVectorCases - previous.multiVectorCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorCases - previous.multiVectorCases,\n ),\n metric: \"multiVectorCases\",\n previous: previous.multiVectorCases,\n },\n {\n current: latest.multiVectorVectorHitCases,\n delta:\n latest.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n ),\n metric: \"multiVectorVectorHitCases\",\n previous: previous.multiVectorVectorHitCases,\n },\n {\n current: latest.multiVectorLexicalHitCases,\n delta:\n latest.multiVectorLexicalHitCases - previous.multiVectorLexicalHitCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorLexicalHitCases - previous.multiVectorLexicalHitCases,\n ),\n metric: \"multiVectorLexicalHitCases\",\n previous: previous.multiVectorLexicalHitCases,\n },\n {\n current: latest.multiVectorCollapsedCases,\n delta:\n latest.multiVectorCollapsedCases - previous.multiVectorCollapsedCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorCollapsedCases - previous.multiVectorCollapsedCases,\n ),\n metric: \"multiVectorCollapsedCases\",\n previous: previous.multiVectorCollapsedCases,\n },\n {\n current: latest.runtimeCandidateBudgetExhaustedCases,\n delta:\n latest.runtimeCandidateBudgetExhaustedCases -\n previous.runtimeCandidateBudgetExhaustedCases,\n direction: buildTraceSummaryDirection(\n latest.runtimeCandidateBudgetExhaustedCases -\n previous.runtimeCandidateBudgetExhaustedCases,\n ),\n metric: \"runtimeCandidateBudgetExhaustedCases\",\n previous: previous.runtimeCandidateBudgetExhaustedCases,\n },\n {\n current: latest.runtimeUnderfilledTopKCases,\n delta:\n latest.runtimeUnderfilledTopKCases -\n previous.runtimeUnderfilledTopKCases,\n direction: buildTraceSummaryDirection(\n latest.runtimeUnderfilledTopKCases -\n previous.runtimeUnderfilledTopKCases,\n ),\n metric: \"runtimeUnderfilledTopKCases\",\n previous: previous.runtimeUnderfilledTopKCases,\n },\n ];\n const absoluteSorted = [...aggregate].sort(\n (left, right) =>\n Math.abs(right.delta) - Math.abs(left.delta) ||\n left.metric.localeCompare(right.metric),\n );\n\n return {\n aggregate,\n bestMetric: absoluteSorted[0],\n worstMetric: absoluteSorted[absoluteSorted.length - 1],\n };\n};\n\nconst buildRAGRetrievalTraceStageChurn = ({\n windows,\n}: {\n windows: RAGRetrievalTraceHistoryWindow[];\n}): RAGTraceSummaryStageTrend[] => {\n const stages = new Set<RAGRetrievalTraceStep[\"stage\"]>();\n for (const window of windows) {\n for (const stage of Object.keys(window.current.stageCounts) as Array<\n RAGRetrievalTraceStep[\"stage\"]\n >) {\n stages.add(stage);\n }\n for (const stage of Object.keys(window.previous.stageCounts) as Array<\n RAGRetrievalTraceStep[\"stage\"]\n >) {\n stages.add(stage);\n }\n }\n\n return [...stages]\n .map((stage) => {\n let netDelta = 0;\n let totalChanges = 0;\n for (const window of windows) {\n const delta = window.delta?.stageCountsDelta[stage]?.delta ?? 0;\n netDelta += delta;\n totalChanges += Math.abs(delta);\n }\n return {\n latestDelta: windows[0]?.delta?.stageCountsDelta[stage]?.delta ?? 0,\n netDelta,\n stage,\n totalChanges,\n };\n })\n .sort(\n (left, right) =>\n right.totalChanges - left.totalChanges ||\n left.stage.localeCompare(right.stage),\n );\n};\n\nconst summarizeRetrievalTraces = (\n traces: RAGRetrievalTrace[],\n): RAGRetrievalTraceComparisonSummary | undefined => {\n if (traces.length === 0) {\n return undefined;\n }\n\n const totalCases = traces.length;\n const modeSet = new Set<RAGHybridRetrievalMode>();\n const sourceBalanceStrategySet = new Set<RAGSourceBalanceStrategy>();\n let vectorCases = 0;\n let lexicalCases = 0;\n let balancedCases = 0;\n let roundRobinCases = 0;\n let transformedCases = 0;\n let variantCases = 0;\n let multiVectorCases = 0;\n let multiVectorVectorHitCases = 0;\n let multiVectorLexicalHitCases = 0;\n let multiVectorCollapsedCases = 0;\n let officeEvidenceReconcileCases = 0;\n let officeParagraphEvidenceReconcileCases = 0;\n let officeListEvidenceReconcileCases = 0;\n let officeTableEvidenceReconcileCases = 0;\n let pdfEvidenceReconcileCases = 0;\n let runtimeCandidateBudgetExhaustedCases = 0;\n let runtimeUnderfilledTopKCases = 0;\n let finalCountSum = 0;\n let vectorCountSum = 0;\n let lexicalCountSum = 0;\n let candidateTopKSum = 0;\n let lexicalTopKSum = 0;\n\n for (const trace of traces) {\n const vectorSearchMetadata = trace.steps.find(\n (step) => step.stage === \"vector_search\",\n )?.metadata;\n modeSet.add(trace.mode);\n sourceBalanceStrategySet.add(trace.sourceBalanceStrategy ?? \"cap\");\n if (trace.runVector) {\n vectorCases += 1;\n }\n if (trace.runLexical) {\n lexicalCases += 1;\n }\n if (typeof trace.maxResultsPerSource === \"number\") {\n balancedCases += 1;\n if (trace.sourceBalanceStrategy === \"round_robin\") {\n roundRobinCases += 1;\n }\n }\n if (trace.transformedQuery !== trace.query) {\n transformedCases += 1;\n }\n if (trace.variantQueries.length > 0) {\n variantCases += 1;\n }\n if (trace.multiVector?.configured) {\n multiVectorCases += 1;\n }\n if ((trace.multiVector?.vectorVariantHits ?? 0) > 0) {\n multiVectorVectorHitCases += 1;\n }\n if ((trace.multiVector?.lexicalVariantHits ?? 0) > 0) {\n multiVectorLexicalHitCases += 1;\n }\n if ((trace.multiVector?.collapsedParents ?? 0) > 0) {\n multiVectorCollapsedCases += 1;\n }\n const evidenceReconcileMetadata = trace.steps.find(\n (step) => step.stage === \"evidence_reconcile\",\n )?.metadata;\n if (\n typeof evidenceReconcileMetadata?.officeAffectedScopes === \"number\" &&\n evidenceReconcileMetadata.officeAffectedScopes > 0\n ) {\n officeEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.officeParagraphAffectedScopes ===\n \"number\" &&\n evidenceReconcileMetadata.officeParagraphAffectedScopes > 0\n ) {\n officeParagraphEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.officeListAffectedScopes === \"number\" &&\n evidenceReconcileMetadata.officeListAffectedScopes > 0\n ) {\n officeListEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.officeTableAffectedScopes ===\n \"number\" &&\n evidenceReconcileMetadata.officeTableAffectedScopes > 0\n ) {\n officeTableEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.pdfAffectedScopes === \"number\" &&\n evidenceReconcileMetadata.pdfAffectedScopes > 0\n ) {\n pdfEvidenceReconcileCases += 1;\n }\n if (vectorSearchMetadata?.sqliteQueryCandidateBudgetExhausted) {\n runtimeCandidateBudgetExhaustedCases += 1;\n }\n if (vectorSearchMetadata?.postgresQueryCandidateBudgetExhausted) {\n runtimeCandidateBudgetExhaustedCases += 1;\n }\n if (vectorSearchMetadata?.sqliteQueryUnderfilledTopK) {\n runtimeUnderfilledTopKCases += 1;\n }\n if (vectorSearchMetadata?.postgresQueryUnderfilledTopK) {\n runtimeUnderfilledTopKCases += 1;\n }\n finalCountSum += trace.resultCounts.final;\n vectorCountSum += trace.resultCounts.vector;\n lexicalCountSum += trace.resultCounts.lexical;\n candidateTopKSum += trace.candidateTopK;\n lexicalTopKSum += trace.lexicalTopK;\n }\n\n return {\n averageCandidateTopK: roundTraceAverage(candidateTopKSum, totalCases),\n averageFinalCount: roundTraceAverage(finalCountSum, totalCases),\n averageLexicalCount: roundTraceAverage(lexicalCountSum, totalCases),\n averageLexicalTopK: roundTraceAverage(lexicalTopKSum, totalCases),\n balancedCases,\n averageVectorCount: roundTraceAverage(vectorCountSum, totalCases),\n lexicalCases,\n modes: Array.from(modeSet),\n roundRobinCases,\n sourceBalanceStrategies: Array.from(sourceBalanceStrategySet),\n stageCounts: buildTraceStageCounts(traces),\n totalCases,\n transformedCases,\n variantCases,\n multiVectorCases,\n multiVectorVectorHitCases,\n multiVectorLexicalHitCases,\n multiVectorCollapsedCases,\n officeEvidenceReconcileCases,\n officeParagraphEvidenceReconcileCases,\n officeListEvidenceReconcileCases,\n officeTableEvidenceReconcileCases,\n pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCases,\n vectorCases,\n };\n};\n\nconst evaluateRAGCollectionCases = async ({\n collection,\n input,\n defaultTopK = DEFAULT_TOP_K,\n rerank,\n includeTrace = false,\n}: {\n collection: RAGCollection;\n input: RAGEvaluationInput;\n defaultTopK?: number;\n rerank?: RAGRerankerProviderLike;\n includeTrace?: boolean;\n}): Promise<\n Array<{\n caseResult: RAGEvaluationCaseResult;\n trace?: RAGRetrievalTrace;\n filter?: Record<string, unknown>;\n retrieval?: RAGCollectionSearchParams[\"retrieval\"];\n topResult?: RAGQueryResult;\n }>\n> => {\n if (input.dryRun) {\n return executeDryRunRAGEvaluation(input, defaultTopK).map(\n (caseResult, caseIndex) => ({\n caseResult,\n filter:\n typeof input.cases?.[caseIndex]?.filter === \"object\"\n ? input.cases[caseIndex]?.filter\n : input.filter,\n retrieval: input.cases?.[caseIndex]?.retrieval ?? input.retrieval,\n topResult: undefined,\n trace: undefined,\n }),\n );\n }\n\n return Promise.all(\n input.cases.map(async (caseInput, caseIndex) => {\n const startedAt = Date.now();\n const mode = resolveEvaluationMode(caseInput);\n const query = caseInput.query.trim();\n const expectedIds = normalizeExpectedIds(\n mode === \"chunkId\"\n ? (caseInput.expectedChunkIds ?? [])\n : mode === \"source\"\n ? (caseInput.expectedSources ?? [])\n : (caseInput.expectedDocumentIds ?? []),\n );\n const topK =\n typeof caseInput.topK === \"number\"\n ? caseInput.topK\n : typeof input.topK === \"number\"\n ? input.topK\n : defaultTopK;\n const searchInput = {\n filter: caseInput.corpusKey\n ? {\n ...((typeof caseInput.filter === \"object\"\n ? caseInput.filter\n : input.filter) ?? {}),\n corpusKey: caseInput.corpusKey,\n }\n : typeof caseInput.filter === \"object\"\n ? caseInput.filter\n : input.filter,\n model: caseInput.model ?? input.model,\n query,\n rerank,\n scoreThreshold:\n typeof caseInput.scoreThreshold === \"number\"\n ? caseInput.scoreThreshold\n : input.scoreThreshold,\n retrieval: caseInput.retrieval ?? input.retrieval,\n topK,\n };\n const searchOutcome = includeTrace\n ? await collection.searchWithTrace(searchInput)\n : {\n results: await collection.search(searchInput),\n trace: undefined,\n };\n const sources = buildSources(searchOutcome.results);\n const elapsedMs = Date.now() - startedAt;\n const retrievedIds = normalizeExpectedIds(\n sources.map((source) => extractExpectedId(source, mode)),\n );\n\n return {\n caseResult: summarizeRAGEvaluationCase({\n caseIndex,\n caseInput: { ...caseInput, topK },\n elapsedMs,\n expectedIds,\n mode,\n query,\n retrievedIds,\n retrievedSources: sources,\n trace: searchOutcome.trace,\n }),\n trace: searchOutcome.trace,\n filter: searchInput.filter,\n retrieval: searchInput.retrieval,\n topResult: searchOutcome.results[0],\n };\n }),\n );\n};\n\nexport const buildRAGAnswerGroundingCaseDifficultyLeaderboard = (\n entries: Array<{\n label: string;\n response: RAGAnswerGroundingEvaluationResponse;\n }>,\n) => {\n const grouped = new Map<\n string,\n {\n caseId: string;\n label?: string;\n query?: string;\n passCount: number;\n partialCount: number;\n failCount: number;\n groundedCount: number;\n totalEvaluations: number;\n totalCitationF1: number;\n totalResolvedCitationRate: number;\n }\n >();\n\n for (const entry of entries) {\n for (const result of entry.response.cases) {\n const current = grouped.get(result.caseId) ?? {\n caseId: result.caseId,\n failCount: 0,\n groundedCount: 0,\n label: result.label,\n passCount: 0,\n partialCount: 0,\n query: result.query,\n totalCitationF1: 0,\n totalEvaluations: 0,\n totalResolvedCitationRate: 0,\n };\n current.label ??= result.label;\n current.query ??= result.query;\n current.totalEvaluations += 1;\n current.totalCitationF1 += result.citationF1;\n current.totalResolvedCitationRate += result.resolvedCitationRate;\n if (result.status === \"pass\") {\n current.passCount += 1;\n } else if (result.status === \"partial\") {\n current.partialCount += 1;\n } else {\n current.failCount += 1;\n }\n if (result.coverage === \"grounded\") {\n current.groundedCount += 1;\n }\n grouped.set(result.caseId, current);\n }\n }\n\n const ranked = Array.from(grouped.values()).sort((left, right) => {\n const leftPassRate = left.passCount / left.totalEvaluations;\n const rightPassRate = right.passCount / right.totalEvaluations;\n if (leftPassRate !== rightPassRate) {\n return leftPassRate - rightPassRate;\n }\n const leftCitationF1 = left.totalCitationF1 / left.totalEvaluations;\n const rightCitationF1 = right.totalCitationF1 / right.totalEvaluations;\n if (leftCitationF1 !== rightCitationF1) {\n return leftCitationF1 - rightCitationF1;\n }\n const leftResolved = left.totalResolvedCitationRate / left.totalEvaluations;\n const rightResolved =\n right.totalResolvedCitationRate / right.totalEvaluations;\n if (leftResolved !== rightResolved) {\n return leftResolved - rightResolved;\n }\n\n return left.caseId.localeCompare(right.caseId);\n });\n\n return ranked.map<RAGAnswerGroundingEvaluationCaseDifficultyEntry>(\n (entry, index) => ({\n averageCitationF1: entry.totalCitationF1 / entry.totalEvaluations,\n averageResolvedCitationRate:\n entry.totalResolvedCitationRate / entry.totalEvaluations,\n caseId: entry.caseId,\n failRate: (entry.failCount / entry.totalEvaluations) * 100,\n groundedRate: (entry.groundedCount / entry.totalEvaluations) * 100,\n label: entry.label,\n passRate: (entry.passCount / entry.totalEvaluations) * 100,\n partialRate: (entry.partialCount / entry.totalEvaluations) * 100,\n query: entry.query,\n rank: index + 1,\n totalEvaluations: entry.totalEvaluations,\n }),\n );\n};\n\nconst buildGroundingDifficultyDiffEntry = (\n current: RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n previous?: RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n): RAGAnswerGroundingCaseDifficultyDiffEntry => ({\n caseId: current.caseId,\n currentAverageCitationF1: current.averageCitationF1,\n currentFailRate: current.failRate,\n currentPassRate: current.passRate,\n currentRank: current.rank,\n label: current.label,\n previousAverageCitationF1: previous?.averageCitationF1,\n previousFailRate: previous?.failRate,\n previousPassRate: previous?.passRate,\n previousRank: previous?.rank,\n query: current.query,\n});\n\nconst buildRAGAnswerGroundingCaseDifficultyTrends = ({\n runs,\n}: {\n runs: RAGAnswerGroundingCaseDifficultyRun[];\n}) => {\n const movementCounts = new Map<\n string,\n {\n label?: string;\n harder: number;\n easier: number;\n unchanged: number;\n }\n >();\n\n for (let index = 0; index < runs.length - 1; index += 1) {\n const current = runs[index];\n const previous = runs[index + 1];\n if (!current || !previous) {\n continue;\n }\n const diff = buildRAGAnswerGroundingCaseDifficultyRunDiff({\n current,\n previous,\n });\n\n for (const entry of diff.harderCases) {\n const currentCounts = movementCounts.get(entry.caseId) ?? {\n easier: 0,\n harder: 0,\n label: entry.label,\n unchanged: 0,\n };\n currentCounts.harder += 1;\n currentCounts.label ??= entry.label;\n movementCounts.set(entry.caseId, currentCounts);\n }\n\n for (const entry of diff.easierCases) {\n const currentCounts = movementCounts.get(entry.caseId) ?? {\n easier: 0,\n harder: 0,\n label: entry.label,\n unchanged: 0,\n };\n currentCounts.easier += 1;\n currentCounts.label ??= entry.label;\n movementCounts.set(entry.caseId, currentCounts);\n }\n\n for (const entry of diff.unchangedCases) {\n const currentCounts = movementCounts.get(entry.caseId) ?? {\n easier: 0,\n harder: 0,\n label: entry.label,\n unchanged: 0,\n };\n currentCounts.unchanged += 1;\n currentCounts.label ??= entry.label;\n movementCounts.set(entry.caseId, currentCounts);\n }\n }\n\n const movementEntries = [...movementCounts.entries()];\n const mostOftenHarderCaseIds = movementEntries\n .filter(([, counts]) => counts.harder > 0)\n .sort((left, right) => {\n if (right[1].harder !== left[1].harder) {\n return right[1].harder - left[1].harder;\n }\n return left[0].localeCompare(right[0]);\n })\n .map(([caseId]) => caseId);\n const mostOftenEasierCaseIds = movementEntries\n .filter(([, counts]) => counts.easier > 0)\n .sort((left, right) => {\n if (right[1].easier !== left[1].easier) {\n return right[1].easier - left[1].easier;\n }\n return left[0].localeCompare(right[0]);\n })\n .map(([caseId]) => caseId);\n\n return {\n easiestCaseIds:\n runs[runs.length - 1]?.entries.map((entry) => entry.caseId).reverse() ??\n [],\n hardestCaseIds: runs[0]?.entries.map((entry) => entry.caseId) ?? [],\n mostOftenEasierCaseIds,\n mostOftenHarderCaseIds,\n movementCounts: Object.fromEntries(\n movementEntries.map(([caseId, counts]) => [\n caseId,\n {\n easier: counts.easier,\n harder: counts.harder,\n unchanged: counts.unchanged,\n },\n ]),\n ),\n };\n};\n\nexport const buildRAGAnswerGroundingCaseDifficultyRunDiff = ({\n current,\n previous,\n}: {\n current: RAGAnswerGroundingCaseDifficultyRun;\n previous?: RAGAnswerGroundingCaseDifficultyRun;\n}): RAGAnswerGroundingCaseDifficultyRunDiff => {\n const previousEntries = new Map(\n (previous?.entries ?? []).map((entry) => [entry.caseId, entry]),\n );\n const diffs = current.entries.map((entry) =>\n buildGroundingDifficultyDiffEntry(entry, previousEntries.get(entry.caseId)),\n );\n\n return {\n currentRunId: current.id,\n easierCases: diffs.filter((entry) => {\n const previousRank = entry.previousRank ?? entry.currentRank;\n return entry.currentRank > previousRank;\n }),\n harderCases: diffs.filter((entry) => {\n const previousRank = entry.previousRank ?? Number.MAX_SAFE_INTEGER;\n return entry.currentRank < previousRank;\n }),\n previousRunId: previous?.id,\n suiteId: current.suiteId,\n unchangedCases: diffs.filter((entry) => {\n const previousRank = entry.previousRank ?? entry.currentRank;\n return entry.currentRank === previousRank;\n }),\n };\n};\n\nconst toHistorySortOrder = (\n left: RAGEvaluationSuiteRun,\n right: RAGEvaluationSuiteRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeHistoryRuns = (runs: RAGEvaluationSuiteRun[]) =>\n [...runs].sort(toHistorySortOrder);\n\nconst normalizeRetrievalComparisonRuns = (runs: RAGRetrievalComparisonRun[]) =>\n [...runs].sort((left, right) => right.finishedAt - left.finishedAt);\n\nconst toTraceSummaryRunSortOrder = (\n left: RAGRetrievalTraceSummaryRun,\n right: RAGRetrievalTraceSummaryRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeTraceSummaryRuns = <TRun extends RAGRetrievalTraceSummaryRun>(\n runs: TRun[],\n) => [...runs].sort(toTraceSummaryRunSortOrder);\n\nconst applyRAGEvaluationHistoryPrunePolicy = <\n TRun extends {\n id: string;\n suiteId: string;\n finishedAt?: number;\n createdAt?: number;\n },\n>({\n input,\n runs,\n sort,\n}: {\n input?: RAGEvaluationHistoryPruneInput;\n runs: TRun[];\n sort: (runs: TRun[]) => TRun[];\n}): {\n next: TRun[];\n removed: TRun[];\n keptCount: number;\n removedCount: number;\n} => {\n const sorted = sort(runs);\n const targeted = sorted.filter(\n (run) => !input?.suiteId || run.suiteId === input.suiteId,\n );\n const untouched = sorted.filter(\n (run) => input?.suiteId && run.suiteId !== input.suiteId,\n );\n const now = input?.now ?? Date.now();\n let kept = [...targeted];\n\n if (typeof input?.maxAgeMs === \"number\" && Number.isFinite(input.maxAgeMs)) {\n const cutoff = now - input.maxAgeMs;\n kept = kept.filter((run) => {\n const timestamp = run.finishedAt ?? run.createdAt ?? 0;\n return timestamp >= cutoff;\n });\n }\n\n if (\n typeof input?.maxRunsPerSuite === \"number\" &&\n Number.isFinite(input.maxRunsPerSuite) &&\n input.maxRunsPerSuite >= 0\n ) {\n const remainingBySuite = new Map<string, number>();\n kept = kept.filter((run) => {\n const current = remainingBySuite.get(run.suiteId) ?? 0;\n if (current >= input.maxRunsPerSuite!) {\n return false;\n }\n remainingBySuite.set(run.suiteId, current + 1);\n return true;\n });\n }\n\n const keptIds = new Set(kept.map((run) => run.id));\n const removed = targeted.filter((run) => !keptIds.has(run.id));\n const next = sort([...untouched, ...kept]);\n\n return {\n keptCount: next.length,\n next,\n removed,\n removedCount: removed.length,\n };\n};\n\nconst applyRAGSearchTracePrunePolicy = ({\n input,\n traces,\n}: {\n input?: RAGSearchTracePruneInput;\n traces: RAGSearchTraceRecord[];\n}) => {\n const sorted = normalizeTraceSummaryRuns(traces);\n const matchesTag = (trace: RAGSearchTraceRecord) =>\n !input?.tag || (trace.tags ?? []).includes(input.tag);\n const targeted = sorted.filter(matchesTag);\n const untouched = sorted.filter((trace) => !matchesTag(trace));\n const now = input?.now ?? Date.now();\n let kept = [...targeted];\n\n if (typeof input?.maxAgeMs === \"number\" && Number.isFinite(input.maxAgeMs)) {\n const cutoff = now - input.maxAgeMs;\n kept = kept.filter((trace) => trace.finishedAt >= cutoff);\n }\n\n if (\n typeof input?.maxRecordsPerQuery === \"number\" &&\n Number.isFinite(input.maxRecordsPerQuery) &&\n input.maxRecordsPerQuery >= 0\n ) {\n const remainingByQuery = new Map<string, number>();\n kept = kept.filter((trace) => {\n const current = remainingByQuery.get(trace.query) ?? 0;\n if (current >= input.maxRecordsPerQuery!) {\n return false;\n }\n remainingByQuery.set(trace.query, current + 1);\n return true;\n });\n }\n\n if (\n typeof input?.maxRecordsPerGroup === \"number\" &&\n Number.isFinite(input.maxRecordsPerGroup) &&\n input.maxRecordsPerGroup >= 0\n ) {\n const remainingByGroup = new Map<string, number>();\n kept = kept.filter((trace) => {\n if (!trace.groupKey) {\n return true;\n }\n\n const current = remainingByGroup.get(trace.groupKey) ?? 0;\n if (current >= input.maxRecordsPerGroup!) {\n return false;\n }\n remainingByGroup.set(trace.groupKey, current + 1);\n return true;\n });\n }\n\n const keptIds = new Set(kept.map((trace) => trace.id));\n const removed = targeted.filter((trace) => !keptIds.has(trace.id));\n const next = normalizeTraceSummaryRuns([...untouched, ...kept]);\n\n return {\n keptCount: next.length,\n next,\n removed,\n removedCount: removed.length,\n };\n};\n\nconst buildRAGSearchTraceStatsFromTraces = (\n traces: RAGSearchTraceRecord[],\n): RAGSearchTraceStats => {\n const queryKeys = new Set<string>();\n const groupKeys = new Set<string>();\n const tagCounts = new Map<string, number>();\n let oldestFinishedAt: number | undefined;\n let newestFinishedAt: number | undefined;\n\n for (const trace of traces) {\n queryKeys.add(trace.query);\n if (trace.groupKey) {\n groupKeys.add(trace.groupKey);\n }\n for (const tag of trace.tags ?? []) {\n tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);\n }\n oldestFinishedAt =\n typeof oldestFinishedAt === \"number\"\n ? Math.min(oldestFinishedAt, trace.finishedAt)\n : trace.finishedAt;\n newestFinishedAt =\n typeof newestFinishedAt === \"number\"\n ? Math.max(newestFinishedAt, trace.finishedAt)\n : trace.finishedAt;\n }\n\n return {\n groupCount: groupKeys.size,\n newestFinishedAt,\n oldestFinishedAt,\n queryCount: queryKeys.size,\n tagCounts: Object.fromEntries(tagCounts.entries()),\n totalTraces: traces.length,\n };\n};\n\nconst normalizeTraceTags = (tags?: string[]) =>\n Array.from(\n new Set((tags ?? []).map((tag) => tag.trim()).filter(Boolean)),\n ).sort((left, right) => left.localeCompare(right));\n\nconst toGroundingHistorySortOrder = (\n left: RAGAnswerGroundingEvaluationRun,\n right: RAGAnswerGroundingEvaluationRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeGroundingHistoryRuns = (\n runs: RAGAnswerGroundingEvaluationRun[],\n) => [...runs].sort(toGroundingHistorySortOrder);\n\nconst toSearchTracePruneRunSortOrder = (\n left: RAGSearchTracePruneRun,\n right: RAGSearchTracePruneRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeSearchTracePruneRuns = (runs: RAGSearchTracePruneRun[]) =>\n [...runs].sort(toSearchTracePruneRunSortOrder);\n\nconst toGroundingDifficultyHistorySortOrder = (\n left: RAGAnswerGroundingCaseDifficultyRun,\n right: RAGAnswerGroundingCaseDifficultyRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeGroundingDifficultyHistoryRuns = (\n runs: RAGAnswerGroundingCaseDifficultyRun[],\n) => [...runs].sort(toGroundingDifficultyHistorySortOrder);\n\nconst buildCaseDiff = (\n currentCase: RAGEvaluationCaseResult,\n previousCase?: RAGEvaluationCaseResult,\n): RAGEvaluationCaseDiff => ({\n caseId: currentCase.caseId,\n currentF1: currentCase.f1,\n currentMatchedIds: currentCase.matchedIds,\n currentMissingIds: currentCase.missingIds,\n currentStatus: currentCase.status,\n label: currentCase.label,\n previousF1: previousCase?.f1,\n previousMatchedIds: previousCase?.matchedIds ?? [],\n previousMissingIds: previousCase?.missingIds ?? [],\n previousStatus: previousCase?.status,\n previousFailureClasses: previousCase?.failureClasses ?? [],\n query: currentCase.query,\n currentFailureClasses: currentCase.failureClasses ?? [],\n});\n\nconst buildGroundingCaseDiff = (\n currentCase: RAGAnswerGroundingEvaluationCaseResult,\n previousCase?: RAGAnswerGroundingEvaluationCaseResult,\n): RAGAnswerGroundingEvaluationCaseDiff => ({\n answerChanged:\n typeof previousCase?.answer === \"string\"\n ? previousCase.answer !== currentCase.answer\n : true,\n caseId: currentCase.caseId,\n currentCitationF1: currentCase.citationF1,\n currentCitedIds: currentCase.citedIds,\n currentCoverage: currentCase.coverage,\n currentExtraIds: currentCase.extraIds,\n currentMatchedIds: currentCase.matchedIds,\n currentMissingIds: currentCase.missingIds,\n currentReferenceCount: currentCase.referenceCount,\n currentResolvedCitationCount: currentCase.resolvedCitationCount,\n currentAnswer: currentCase.answer,\n currentStatus: currentCase.status,\n currentUngroundedReferenceNumbers:\n currentCase.groundedAnswer.ungroundedReferenceNumbers,\n currentUnresolvedCitationCount: currentCase.unresolvedCitationCount,\n label: currentCase.label,\n previousAnswer: previousCase?.answer,\n previousCitationF1: previousCase?.citationF1,\n previousCitedIds: previousCase?.citedIds ?? [],\n previousCoverage: previousCase?.coverage,\n previousExtraIds: previousCase?.extraIds ?? [],\n previousFailureClasses: previousCase?.failureClasses ?? [],\n previousMatchedIds: previousCase?.matchedIds ?? [],\n previousMissingIds: previousCase?.missingIds ?? [],\n previousReferenceCount: previousCase?.referenceCount,\n previousResolvedCitationCount: previousCase?.resolvedCitationCount,\n previousStatus: previousCase?.status,\n previousUngroundedReferenceNumbers:\n previousCase?.groundedAnswer.ungroundedReferenceNumbers ?? [],\n previousUnresolvedCitationCount: previousCase?.unresolvedCitationCount,\n query: currentCase.query,\n currentFailureClasses: currentCase.failureClasses ?? [],\n});\n\nconst buildGroundingCaseSnapshots = ({\n current,\n previous,\n}: {\n current?: RAGAnswerGroundingEvaluationRun;\n previous?: RAGAnswerGroundingEvaluationRun;\n}): RAGAnswerGroundingEvaluationCaseSnapshot[] => {\n if (!current) {\n return [];\n }\n\n const previousCases = new Map(\n (previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]),\n );\n\n return current.response.cases.map((entry) => {\n const previousCase = previousCases.get(entry.caseId);\n return {\n answer: entry.answer,\n answerChange:\n typeof previousCase?.answer === \"string\"\n ? previousCase.answer === entry.answer\n ? \"unchanged\"\n : \"changed\"\n : \"new\",\n caseId: entry.caseId,\n citationCount: entry.citationCount,\n citationF1: entry.citationF1,\n citedIds: entry.citedIds,\n coverage: entry.coverage,\n extraIds: entry.extraIds,\n failureClasses: entry.failureClasses,\n label: entry.label,\n matchedIds: entry.matchedIds,\n missingIds: entry.missingIds,\n previousAnswer: previousCase?.answer,\n query: entry.query,\n referenceCount: entry.referenceCount,\n resolvedCitationCount: entry.resolvedCitationCount,\n resolvedCitationRate: entry.resolvedCitationRate,\n status: entry.status,\n ungroundedReferenceNumbers:\n entry.groundedAnswer.ungroundedReferenceNumbers,\n unresolvedCitationCount: entry.unresolvedCitationCount,\n };\n });\n};\n\nconst areStageCountsEqual = (\n left: Partial<Record<RAGRetrievalTraceStage, number>>,\n right: Partial<Record<RAGRetrievalTraceStage, number>>,\n) => {\n const keys = new Set([\n ...Object.keys(left),\n ...Object.keys(right),\n ]) as Set<RAGRetrievalTraceStage>;\n\n for (const key of keys) {\n if ((left[key] ?? 0) !== (right[key] ?? 0)) {\n return false;\n }\n }\n\n return true;\n};\n\nconst buildEvaluationCaseTraceSnapshot = ({\n caseResult,\n filter,\n retrieval,\n currentTrace,\n previousTrace,\n currentSnapshot,\n topResult,\n}: {\n caseResult: RAGEvaluationCaseResult;\n filter?: Record<string, unknown>;\n retrieval?: RAGCollectionSearchParams[\"retrieval\"];\n currentTrace?: RAGRetrievalTrace;\n previousTrace?: RAGEvaluationCaseTraceSnapshot;\n currentSnapshot?: RAGEvaluationCaseTraceSnapshot;\n topResult?: RAGQueryResult;\n}): RAGEvaluationCaseTraceSnapshot => {\n const stageCounts = currentTrace ? buildTraceStageCounts([currentTrace]) : {};\n const previousStageCounts = previousTrace?.stageCounts ?? {};\n const currentLeadSnapshot =\n topResult || currentSnapshot\n ? buildEvaluationLeadSnapshot({\n metadata: topResult?.metadata,\n source: topResult?.source,\n title: topResult?.title,\n })\n : {};\n const topContextLabel =\n currentLeadSnapshot.topContextLabel ?? currentSnapshot?.topContextLabel;\n const topLocatorLabel =\n currentLeadSnapshot.topLocatorLabel ?? currentSnapshot?.topLocatorLabel;\n const sourceAwareChunkReasonLabel =\n currentLeadSnapshot.sourceAwareChunkReasonLabel ??\n currentSnapshot?.sourceAwareChunkReasonLabel;\n const sourceAwareUnitScopeLabel =\n currentLeadSnapshot.sourceAwareUnitScopeLabel ??\n currentSnapshot?.sourceAwareUnitScopeLabel;\n const currentLeadMediaCueSnapshot = currentTrace\n ? buildEvaluationLeadMediaCueSnapshot(currentTrace)\n : {};\n const currentLeadPresentationCueSnapshot = currentTrace\n ? buildEvaluationLeadPresentationCueSnapshot(currentTrace)\n : {};\n const currentLeadSpreadsheetCueSnapshot = currentTrace\n ? buildEvaluationLeadSpreadsheetCueSnapshot(currentTrace)\n : {};\n const currentSQLiteQueryPlanSnapshot = currentTrace\n ? buildEvaluationSQLiteQueryPlanSnapshot(currentTrace)\n : {};\n const currentPostgresQueryPlanSnapshot = currentTrace\n ? buildEvaluationPostgresQueryPlanSnapshot(currentTrace)\n : {};\n const leadSpeakerCue =\n currentLeadMediaCueSnapshot.leadSpeakerCue ??\n currentSnapshot?.leadSpeakerCue;\n const leadPresentationCue =\n currentLeadPresentationCueSnapshot.leadPresentationCue ??\n currentSnapshot?.leadPresentationCue;\n const leadSpreadsheetCue =\n currentLeadSpreadsheetCueSnapshot.leadSpreadsheetCue ??\n currentSnapshot?.leadSpreadsheetCue;\n const leadSpeakerAttributionCue =\n currentLeadMediaCueSnapshot.leadSpeakerAttributionCue ??\n currentSnapshot?.leadSpeakerAttributionCue;\n const leadChannelCue =\n currentLeadMediaCueSnapshot.leadChannelCue ??\n currentSnapshot?.leadChannelCue;\n const leadChannelAttributionCue =\n currentLeadMediaCueSnapshot.leadChannelAttributionCue ??\n currentSnapshot?.leadChannelAttributionCue;\n const leadContinuityCue =\n currentLeadMediaCueSnapshot.leadContinuityCue ??\n currentSnapshot?.leadContinuityCue;\n const sqliteQueryMode =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMode ??\n currentSnapshot?.sqliteQueryMode;\n const sqliteQueryPushdownMode =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownMode ??\n currentSnapshot?.sqliteQueryPushdownMode;\n const sqliteQueryPushdownApplied =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownApplied ??\n currentSnapshot?.sqliteQueryPushdownApplied;\n const sqliteQueryPushdownClauseCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownClauseCount ??\n currentSnapshot?.sqliteQueryPushdownClauseCount;\n const sqliteQueryTotalFilterClauseCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryTotalFilterClauseCount ??\n currentSnapshot?.sqliteQueryTotalFilterClauseCount;\n const sqliteQueryJsRemainderClauseCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryJsRemainderClauseCount ??\n currentSnapshot?.sqliteQueryJsRemainderClauseCount;\n const sqliteQueryMultiplierUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMultiplierUsed ??\n currentSnapshot?.sqliteQueryMultiplierUsed;\n const sqliteQueryCandidateLimitUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateLimitUsed ??\n currentSnapshot?.sqliteQueryCandidateLimitUsed;\n const sqliteQueryMaxBackfillsUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMaxBackfillsUsed ??\n currentSnapshot?.sqliteQueryMaxBackfillsUsed;\n const sqliteQueryMinResultsUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMinResultsUsed ??\n currentSnapshot?.sqliteQueryMinResultsUsed;\n const sqliteQueryFillPolicyUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryFillPolicyUsed ??\n currentSnapshot?.sqliteQueryFillPolicyUsed;\n const sqliteQueryPushdownCoverageRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownCoverageRatio ??\n currentSnapshot?.sqliteQueryPushdownCoverageRatio;\n const sqliteQueryJsRemainderRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryJsRemainderRatio ??\n currentSnapshot?.sqliteQueryJsRemainderRatio;\n const sqliteQueryFilteredCandidates =\n currentSQLiteQueryPlanSnapshot.sqliteQueryFilteredCandidates ??\n currentSnapshot?.sqliteQueryFilteredCandidates;\n const sqliteQueryInitialSearchK =\n currentSQLiteQueryPlanSnapshot.sqliteQueryInitialSearchK ??\n currentSnapshot?.sqliteQueryInitialSearchK;\n const sqliteQueryFinalSearchK =\n currentSQLiteQueryPlanSnapshot.sqliteQueryFinalSearchK ??\n currentSnapshot?.sqliteQueryFinalSearchK;\n const sqliteQuerySearchExpansionRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQuerySearchExpansionRatio ??\n currentSnapshot?.sqliteQuerySearchExpansionRatio;\n const sqliteQueryBackfillCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryBackfillCount ??\n currentSnapshot?.sqliteQueryBackfillCount;\n const sqliteQueryBackfillLimitReached =\n currentSQLiteQueryPlanSnapshot.sqliteQueryBackfillLimitReached ??\n currentSnapshot?.sqliteQueryBackfillLimitReached;\n const sqliteQueryMinResultsSatisfied =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMinResultsSatisfied ??\n currentSnapshot?.sqliteQueryMinResultsSatisfied;\n const sqliteQueryReturnedCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryReturnedCount ??\n currentSnapshot?.sqliteQueryReturnedCount;\n const sqliteQueryCandidateYieldRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateYieldRatio ??\n currentSnapshot?.sqliteQueryCandidateYieldRatio;\n const sqliteQueryTopKFillRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryTopKFillRatio ??\n currentSnapshot?.sqliteQueryTopKFillRatio;\n const sqliteQueryUnderfilledTopK =\n currentSQLiteQueryPlanSnapshot.sqliteQueryUnderfilledTopK ??\n currentSnapshot?.sqliteQueryUnderfilledTopK;\n const sqliteQueryCandidateBudgetExhausted =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateBudgetExhausted ??\n currentSnapshot?.sqliteQueryCandidateBudgetExhausted;\n const sqliteQueryCandidateCoverage =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateCoverage ??\n currentSnapshot?.sqliteQueryCandidateCoverage;\n const postgresQueryMode =\n currentPostgresQueryPlanSnapshot.postgresQueryMode ??\n currentSnapshot?.postgresQueryMode;\n const postgresQueryPushdownMode =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownMode ??\n currentSnapshot?.postgresQueryPushdownMode;\n const postgresQueryPushdownApplied =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownApplied ??\n currentSnapshot?.postgresQueryPushdownApplied;\n const postgresQueryPushdownClauseCount =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownClauseCount ??\n currentSnapshot?.postgresQueryPushdownClauseCount;\n const postgresQueryTotalFilterClauseCount =\n currentPostgresQueryPlanSnapshot.postgresQueryTotalFilterClauseCount ??\n currentSnapshot?.postgresQueryTotalFilterClauseCount;\n const postgresQueryJsRemainderClauseCount =\n currentPostgresQueryPlanSnapshot.postgresQueryJsRemainderClauseCount ??\n currentSnapshot?.postgresQueryJsRemainderClauseCount;\n const postgresQueryMultiplierUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryMultiplierUsed ??\n currentSnapshot?.postgresQueryMultiplierUsed;\n const postgresQueryCandidateLimitUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateLimitUsed ??\n currentSnapshot?.postgresQueryCandidateLimitUsed;\n const postgresQueryMaxBackfillsUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryMaxBackfillsUsed ??\n currentSnapshot?.postgresQueryMaxBackfillsUsed;\n const postgresQueryMinResultsUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryMinResultsUsed ??\n currentSnapshot?.postgresQueryMinResultsUsed;\n const postgresQueryFillPolicyUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryFillPolicyUsed ??\n currentSnapshot?.postgresQueryFillPolicyUsed;\n const postgresQueryPushdownCoverageRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownCoverageRatio ??\n currentSnapshot?.postgresQueryPushdownCoverageRatio;\n const postgresQueryJsRemainderRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryJsRemainderRatio ??\n currentSnapshot?.postgresQueryJsRemainderRatio;\n const postgresQueryFilteredCandidates =\n currentPostgresQueryPlanSnapshot.postgresQueryFilteredCandidates ??\n currentSnapshot?.postgresQueryFilteredCandidates;\n const postgresQueryInitialSearchK =\n currentPostgresQueryPlanSnapshot.postgresQueryInitialSearchK ??\n currentSnapshot?.postgresQueryInitialSearchK;\n const postgresQueryFinalSearchK =\n currentPostgresQueryPlanSnapshot.postgresQueryFinalSearchK ??\n currentSnapshot?.postgresQueryFinalSearchK;\n const postgresQuerySearchExpansionRatio =\n currentPostgresQueryPlanSnapshot.postgresQuerySearchExpansionRatio ??\n currentSnapshot?.postgresQuerySearchExpansionRatio;\n const postgresQueryBackfillCount =\n currentPostgresQueryPlanSnapshot.postgresQueryBackfillCount ??\n currentSnapshot?.postgresQueryBackfillCount;\n const postgresQueryBackfillLimitReached =\n currentPostgresQueryPlanSnapshot.postgresQueryBackfillLimitReached ??\n currentSnapshot?.postgresQueryBackfillLimitReached;\n const postgresQueryMinResultsSatisfied =\n currentPostgresQueryPlanSnapshot.postgresQueryMinResultsSatisfied ??\n currentSnapshot?.postgresQueryMinResultsSatisfied;\n const postgresQueryReturnedCount =\n currentPostgresQueryPlanSnapshot.postgresQueryReturnedCount ??\n currentSnapshot?.postgresQueryReturnedCount;\n const postgresQueryCandidateYieldRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateYieldRatio ??\n currentSnapshot?.postgresQueryCandidateYieldRatio;\n const postgresQueryTopKFillRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryTopKFillRatio ??\n currentSnapshot?.postgresQueryTopKFillRatio;\n const postgresQueryUnderfilledTopK =\n currentPostgresQueryPlanSnapshot.postgresQueryUnderfilledTopK ??\n currentSnapshot?.postgresQueryUnderfilledTopK;\n const postgresQueryCandidateBudgetExhausted =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateBudgetExhausted ??\n currentSnapshot?.postgresQueryCandidateBudgetExhausted;\n const postgresQueryCandidateCoverage =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateCoverage ??\n currentSnapshot?.postgresQueryCandidateCoverage;\n const currentFilterSignature = JSON.stringify(filter ?? undefined);\n const previousFilterSignature = JSON.stringify(\n previousTrace?.inputFilter ?? undefined,\n );\n const currentRetrievalSignature = JSON.stringify(retrieval ?? undefined);\n const previousRetrievalSignature = JSON.stringify(\n previousTrace?.inputRetrieval ?? undefined,\n );\n const traceChange = !previousTrace\n ? currentTrace\n ? \"new\"\n : \"unchanged\"\n : previousTrace.traceMode !== currentTrace?.mode ||\n previousFilterSignature !== currentFilterSignature ||\n previousRetrievalSignature !== currentRetrievalSignature ||\n previousTrace.sourceBalanceStrategy !==\n currentTrace?.sourceBalanceStrategy ||\n previousTrace.transformedQuery !==\n (currentTrace?.transformedQuery || undefined) ||\n previousTrace.variantQueries.join(\"|\") !==\n (currentTrace?.variantQueries ?? []).join(\"|\") ||\n previousTrace.finalCount !== (currentTrace?.resultCounts.final ?? 0) ||\n previousTrace.vectorCount !==\n (currentTrace?.resultCounts.vector ?? 0) ||\n previousTrace.lexicalCount !==\n (currentTrace?.resultCounts.lexical ?? 0) ||\n previousTrace.candidateTopK !== (currentTrace?.candidateTopK ?? 0) ||\n previousTrace.lexicalTopK !== (currentTrace?.lexicalTopK ?? 0) ||\n previousTrace.topContextLabel !== topContextLabel ||\n previousTrace.topLocatorLabel !== topLocatorLabel ||\n previousTrace.sourceAwareChunkReasonLabel !==\n sourceAwareChunkReasonLabel ||\n previousTrace.sourceAwareUnitScopeLabel !== sourceAwareUnitScopeLabel ||\n previousTrace.leadSpeakerCue !== leadSpeakerCue ||\n previousTrace.leadPresentationCue !== leadPresentationCue ||\n previousTrace.leadSpreadsheetCue !== leadSpreadsheetCue ||\n previousTrace.leadSpeakerAttributionCue !== leadSpeakerAttributionCue ||\n previousTrace.leadChannelCue !== leadChannelCue ||\n previousTrace.leadChannelAttributionCue !== leadChannelAttributionCue ||\n previousTrace.leadContinuityCue !== leadContinuityCue ||\n previousTrace.sqliteQueryMode !== sqliteQueryMode ||\n previousTrace.sqliteQueryPushdownMode !== sqliteQueryPushdownMode ||\n previousTrace.sqliteQueryPushdownApplied !==\n sqliteQueryPushdownApplied ||\n previousTrace.sqliteQueryPushdownClauseCount !==\n sqliteQueryPushdownClauseCount ||\n previousTrace.sqliteQueryTotalFilterClauseCount !==\n sqliteQueryTotalFilterClauseCount ||\n previousTrace.sqliteQueryJsRemainderClauseCount !==\n sqliteQueryJsRemainderClauseCount ||\n previousTrace.sqliteQueryMultiplierUsed !== sqliteQueryMultiplierUsed ||\n previousTrace.sqliteQueryCandidateLimitUsed !==\n sqliteQueryCandidateLimitUsed ||\n previousTrace.sqliteQueryMaxBackfillsUsed !==\n sqliteQueryMaxBackfillsUsed ||\n previousTrace.sqliteQueryMinResultsUsed !== sqliteQueryMinResultsUsed ||\n previousTrace.sqliteQueryFillPolicyUsed !== sqliteQueryFillPolicyUsed ||\n previousTrace.sqliteQueryPushdownCoverageRatio !==\n sqliteQueryPushdownCoverageRatio ||\n previousTrace.sqliteQueryJsRemainderRatio !==\n sqliteQueryJsRemainderRatio ||\n previousTrace.sqliteQueryFilteredCandidates !==\n sqliteQueryFilteredCandidates ||\n previousTrace.sqliteQueryInitialSearchK !== sqliteQueryInitialSearchK ||\n previousTrace.sqliteQueryFinalSearchK !== sqliteQueryFinalSearchK ||\n previousTrace.sqliteQuerySearchExpansionRatio !==\n sqliteQuerySearchExpansionRatio ||\n previousTrace.sqliteQueryBackfillCount !== sqliteQueryBackfillCount ||\n previousTrace.sqliteQueryBackfillLimitReached !==\n sqliteQueryBackfillLimitReached ||\n previousTrace.sqliteQueryMinResultsSatisfied !==\n sqliteQueryMinResultsSatisfied ||\n previousTrace.sqliteQueryReturnedCount !== sqliteQueryReturnedCount ||\n previousTrace.sqliteQueryCandidateYieldRatio !==\n sqliteQueryCandidateYieldRatio ||\n previousTrace.sqliteQueryTopKFillRatio !== sqliteQueryTopKFillRatio ||\n previousTrace.sqliteQueryUnderfilledTopK !==\n sqliteQueryUnderfilledTopK ||\n previousTrace.sqliteQueryCandidateBudgetExhausted !==\n sqliteQueryCandidateBudgetExhausted ||\n previousTrace.sqliteQueryCandidateCoverage !==\n sqliteQueryCandidateCoverage ||\n previousTrace.postgresQueryMode !== postgresQueryMode ||\n previousTrace.postgresQueryPushdownMode !== postgresQueryPushdownMode ||\n previousTrace.postgresQueryPushdownApplied !==\n postgresQueryPushdownApplied ||\n previousTrace.postgresQueryPushdownClauseCount !==\n postgresQueryPushdownClauseCount ||\n previousTrace.postgresQueryTotalFilterClauseCount !==\n postgresQueryTotalFilterClauseCount ||\n previousTrace.postgresQueryJsRemainderClauseCount !==\n postgresQueryJsRemainderClauseCount ||\n previousTrace.postgresQueryMultiplierUsed !==\n postgresQueryMultiplierUsed ||\n previousTrace.postgresQueryCandidateLimitUsed !==\n postgresQueryCandidateLimitUsed ||\n previousTrace.postgresQueryMaxBackfillsUsed !==\n postgresQueryMaxBackfillsUsed ||\n previousTrace.postgresQueryMinResultsUsed !==\n postgresQueryMinResultsUsed ||\n previousTrace.postgresQueryFillPolicyUsed !==\n postgresQueryFillPolicyUsed ||\n previousTrace.postgresQueryPushdownCoverageRatio !==\n postgresQueryPushdownCoverageRatio ||\n previousTrace.postgresQueryJsRemainderRatio !==\n postgresQueryJsRemainderRatio ||\n previousTrace.postgresQueryFilteredCandidates !==\n postgresQueryFilteredCandidates ||\n previousTrace.postgresQueryInitialSearchK !==\n postgresQueryInitialSearchK ||\n previousTrace.postgresQueryFinalSearchK !== postgresQueryFinalSearchK ||\n previousTrace.postgresQuerySearchExpansionRatio !==\n postgresQuerySearchExpansionRatio ||\n previousTrace.postgresQueryBackfillCount !==\n postgresQueryBackfillCount ||\n previousTrace.postgresQueryBackfillLimitReached !==\n postgresQueryBackfillLimitReached ||\n previousTrace.postgresQueryMinResultsSatisfied !==\n postgresQueryMinResultsSatisfied ||\n previousTrace.postgresQueryReturnedCount !==\n postgresQueryReturnedCount ||\n previousTrace.postgresQueryCandidateYieldRatio !==\n postgresQueryCandidateYieldRatio ||\n previousTrace.postgresQueryTopKFillRatio !==\n postgresQueryTopKFillRatio ||\n previousTrace.postgresQueryUnderfilledTopK !==\n postgresQueryUnderfilledTopK ||\n previousTrace.postgresQueryCandidateBudgetExhausted !==\n postgresQueryCandidateBudgetExhausted ||\n previousTrace.postgresQueryCandidateCoverage !==\n postgresQueryCandidateCoverage ||\n !areStageCountsEqual(previousStageCounts, stageCounts)\n ? \"changed\"\n : \"unchanged\";\n\n return {\n candidateTopK: currentTrace?.candidateTopK ?? 0,\n caseId: caseResult.caseId,\n corpusKey: caseResult.corpusKey,\n inputFilter: filter,\n finalCount: currentTrace?.resultCounts.final ?? 0,\n label: caseResult.label,\n lexicalCount: currentTrace?.resultCounts.lexical ?? 0,\n lexicalTopK: currentTrace?.lexicalTopK ?? 0,\n inputRetrieval: retrieval,\n previousCandidateTopK: previousTrace?.candidateTopK,\n previousFinalCount: previousTrace?.finalCount,\n previousLexicalCount: previousTrace?.lexicalCount,\n previousLexicalTopK: previousTrace?.lexicalTopK,\n previousInputFilter: previousTrace?.inputFilter,\n previousInputRetrieval: previousTrace?.inputRetrieval,\n previousLeadChannelAttributionCue: previousTrace?.leadChannelAttributionCue,\n previousLeadChannelCue: previousTrace?.leadChannelCue,\n previousLeadContinuityCue: previousTrace?.leadContinuityCue,\n previousLeadPresentationCue: previousTrace?.leadPresentationCue,\n previousLeadSpreadsheetCue: previousTrace?.leadSpreadsheetCue,\n previousLeadSpeakerAttributionCue: previousTrace?.leadSpeakerAttributionCue,\n previousLeadSpeakerCue: previousTrace?.leadSpeakerCue,\n previousSqliteQueryBackfillCount: previousTrace?.sqliteQueryBackfillCount,\n previousSqliteQueryBackfillLimitReached:\n previousTrace?.sqliteQueryBackfillLimitReached,\n previousSqliteQueryMinResultsSatisfied:\n previousTrace?.sqliteQueryMinResultsSatisfied,\n previousSqliteQueryCandidateBudgetExhausted:\n previousTrace?.sqliteQueryCandidateBudgetExhausted,\n previousSqliteQueryCandidateCoverage:\n previousTrace?.sqliteQueryCandidateCoverage,\n previousSqliteQueryFilteredCandidates:\n previousTrace?.sqliteQueryFilteredCandidates,\n previousSqliteQueryFinalSearchK: previousTrace?.sqliteQueryFinalSearchK,\n previousSqliteQueryInitialSearchK: previousTrace?.sqliteQueryInitialSearchK,\n previousSqliteQuerySearchExpansionRatio:\n previousTrace?.sqliteQuerySearchExpansionRatio,\n previousSqliteQueryMode: previousTrace?.sqliteQueryMode,\n previousSqliteQueryPushdownMode: previousTrace?.sqliteQueryPushdownMode,\n previousSqliteQueryPushdownApplied:\n previousTrace?.sqliteQueryPushdownApplied,\n previousSqliteQueryPushdownClauseCount:\n previousTrace?.sqliteQueryPushdownClauseCount,\n previousSqliteQueryTotalFilterClauseCount:\n previousTrace?.sqliteQueryTotalFilterClauseCount,\n previousSqliteQueryJsRemainderClauseCount:\n previousTrace?.sqliteQueryJsRemainderClauseCount,\n previousSqliteQueryMultiplierUsed: previousTrace?.sqliteQueryMultiplierUsed,\n previousSqliteQueryCandidateLimitUsed:\n previousTrace?.sqliteQueryCandidateLimitUsed,\n previousSqliteQueryMaxBackfillsUsed:\n previousTrace?.sqliteQueryMaxBackfillsUsed,\n previousSqliteQueryMinResultsUsed: previousTrace?.sqliteQueryMinResultsUsed,\n previousSqliteQueryFillPolicyUsed: previousTrace?.sqliteQueryFillPolicyUsed,\n previousSqliteQueryPushdownCoverageRatio:\n previousTrace?.sqliteQueryPushdownCoverageRatio,\n previousSqliteQueryJsRemainderRatio:\n previousTrace?.sqliteQueryJsRemainderRatio,\n previousSqliteQueryReturnedCount: previousTrace?.sqliteQueryReturnedCount,\n previousSqliteQueryCandidateYieldRatio:\n previousTrace?.sqliteQueryCandidateYieldRatio,\n previousSqliteQueryTopKFillRatio: previousTrace?.sqliteQueryTopKFillRatio,\n previousSqliteQueryUnderfilledTopK:\n previousTrace?.sqliteQueryUnderfilledTopK,\n previousPostgresQueryBackfillCount:\n previousTrace?.postgresQueryBackfillCount,\n previousPostgresQueryBackfillLimitReached:\n previousTrace?.postgresQueryBackfillLimitReached,\n previousPostgresQueryMinResultsSatisfied:\n previousTrace?.postgresQueryMinResultsSatisfied,\n previousPostgresQueryCandidateBudgetExhausted:\n previousTrace?.postgresQueryCandidateBudgetExhausted,\n previousPostgresQueryCandidateCoverage:\n previousTrace?.postgresQueryCandidateCoverage,\n previousPostgresQueryFilteredCandidates:\n previousTrace?.postgresQueryFilteredCandidates,\n previousPostgresQueryFinalSearchK: previousTrace?.postgresQueryFinalSearchK,\n previousPostgresQueryInitialSearchK:\n previousTrace?.postgresQueryInitialSearchK,\n previousPostgresQuerySearchExpansionRatio:\n previousTrace?.postgresQuerySearchExpansionRatio,\n previousPostgresQueryMode: previousTrace?.postgresQueryMode,\n previousPostgresQueryPushdownMode: previousTrace?.postgresQueryPushdownMode,\n previousPostgresQueryPushdownApplied:\n previousTrace?.postgresQueryPushdownApplied,\n previousPostgresQueryPushdownClauseCount:\n previousTrace?.postgresQueryPushdownClauseCount,\n previousPostgresQueryTotalFilterClauseCount:\n previousTrace?.postgresQueryTotalFilterClauseCount,\n previousPostgresQueryJsRemainderClauseCount:\n previousTrace?.postgresQueryJsRemainderClauseCount,\n previousPostgresQueryMultiplierUsed:\n previousTrace?.postgresQueryMultiplierUsed,\n previousPostgresQueryCandidateLimitUsed:\n previousTrace?.postgresQueryCandidateLimitUsed,\n previousPostgresQueryMaxBackfillsUsed:\n previousTrace?.postgresQueryMaxBackfillsUsed,\n previousPostgresQueryMinResultsUsed:\n previousTrace?.postgresQueryMinResultsUsed,\n previousPostgresQueryFillPolicyUsed:\n previousTrace?.postgresQueryFillPolicyUsed,\n previousPostgresQueryPushdownCoverageRatio:\n previousTrace?.postgresQueryPushdownCoverageRatio,\n previousPostgresQueryJsRemainderRatio:\n previousTrace?.postgresQueryJsRemainderRatio,\n previousPostgresQueryReturnedCount:\n previousTrace?.postgresQueryReturnedCount,\n previousPostgresQueryCandidateYieldRatio:\n previousTrace?.postgresQueryCandidateYieldRatio,\n previousPostgresQueryTopKFillRatio:\n previousTrace?.postgresQueryTopKFillRatio,\n previousPostgresQueryUnderfilledTopK:\n previousTrace?.postgresQueryUnderfilledTopK,\n previousSourceBalanceStrategy: previousTrace?.sourceBalanceStrategy,\n previousSourceAwareChunkReasonLabel:\n previousTrace?.sourceAwareChunkReasonLabel,\n previousStageCounts,\n previousTopContextLabel: previousTrace?.topContextLabel,\n previousTopLocatorLabel: previousTrace?.topLocatorLabel,\n previousTraceMode: previousTrace?.traceMode,\n previousTransformedQuery: previousTrace?.transformedQuery,\n previousSourceAwareUnitScopeLabel: previousTrace?.sourceAwareUnitScopeLabel,\n previousVariantQueries: previousTrace?.variantQueries ?? [],\n previousVectorCount: previousTrace?.vectorCount,\n query: caseResult.query,\n leadChannelAttributionCue,\n leadChannelCue,\n leadContinuityCue,\n leadPresentationCue,\n leadSpreadsheetCue,\n leadSpeakerAttributionCue,\n leadSpeakerCue,\n sqliteQueryBackfillCount,\n sqliteQueryBackfillLimitReached,\n sqliteQueryMinResultsSatisfied,\n sqliteQueryCandidateBudgetExhausted,\n sqliteQueryCandidateCoverage,\n sqliteQueryFilteredCandidates,\n sqliteQueryFinalSearchK,\n sqliteQueryInitialSearchK,\n sqliteQuerySearchExpansionRatio,\n sqliteQueryMode,\n sqliteQueryPushdownMode,\n sqliteQueryPushdownApplied,\n sqliteQueryPushdownClauseCount,\n sqliteQueryTotalFilterClauseCount,\n sqliteQueryJsRemainderClauseCount,\n sqliteQueryMultiplierUsed,\n sqliteQueryCandidateLimitUsed,\n sqliteQueryMaxBackfillsUsed,\n sqliteQueryMinResultsUsed,\n sqliteQueryFillPolicyUsed,\n sqliteQueryPushdownCoverageRatio,\n sqliteQueryJsRemainderRatio,\n sqliteQueryReturnedCount,\n sqliteQueryCandidateYieldRatio,\n sqliteQueryTopKFillRatio,\n sqliteQueryUnderfilledTopK,\n postgresQueryBackfillCount,\n postgresQueryBackfillLimitReached,\n postgresQueryMinResultsSatisfied,\n postgresQueryCandidateBudgetExhausted,\n postgresQueryCandidateCoverage,\n postgresQueryFilteredCandidates,\n postgresQueryFinalSearchK,\n postgresQueryInitialSearchK,\n postgresQuerySearchExpansionRatio,\n postgresQueryMode,\n postgresQueryPushdownMode,\n postgresQueryPushdownApplied,\n postgresQueryPushdownClauseCount,\n postgresQueryTotalFilterClauseCount,\n postgresQueryJsRemainderClauseCount,\n postgresQueryMultiplierUsed,\n postgresQueryCandidateLimitUsed,\n postgresQueryMaxBackfillsUsed,\n postgresQueryMinResultsUsed,\n postgresQueryFillPolicyUsed,\n postgresQueryPushdownCoverageRatio,\n postgresQueryJsRemainderRatio,\n postgresQueryReturnedCount,\n postgresQueryCandidateYieldRatio,\n postgresQueryTopKFillRatio,\n postgresQueryUnderfilledTopK,\n sourceAwareChunkReasonLabel,\n sourceAwareUnitScopeLabel,\n stageCounts,\n status: caseResult.status,\n sourceBalanceStrategy: currentTrace?.sourceBalanceStrategy,\n topContextLabel,\n topLocatorLabel,\n traceChange,\n traceMode: currentTrace?.mode,\n transformedQuery: currentTrace?.transformedQuery || undefined,\n variantQueries: currentTrace?.variantQueries ?? [],\n vectorCount: currentTrace?.resultCounts.vector ?? 0,\n };\n};\n\nconst buildEvaluationCaseTraceSnapshotsFromEvaluated = (\n evaluated: Array<{\n caseResult: RAGEvaluationCaseResult;\n trace?: RAGRetrievalTrace;\n filter?: Record<string, unknown>;\n retrieval?: RAGCollectionSearchParams[\"retrieval\"];\n topResult?: RAGQueryResult;\n }>,\n): RAGEvaluationCaseTraceSnapshot[] =>\n evaluated.map(({ caseResult, filter, retrieval, trace, topResult }) =>\n buildEvaluationCaseTraceSnapshot({\n caseResult,\n filter,\n retrieval,\n currentTrace: trace,\n topResult,\n }),\n );\n\nconst buildEvaluationCaseTraceSnapshots = ({\n current,\n previous,\n}: {\n current?: RAGEvaluationSuiteRun;\n previous?: RAGEvaluationSuiteRun;\n}): RAGEvaluationCaseTraceSnapshot[] => {\n if (!current) {\n return [];\n }\n\n const currentTraces = new Map(\n (current.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry]),\n );\n const previousTraces = new Map(\n (previous?.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry]),\n );\n\n return current.response.cases.map((caseResult) =>\n buildEvaluationCaseTraceSnapshot({\n caseResult,\n currentSnapshot: currentTraces.get(caseResult.caseId),\n currentTrace: (() => {\n const currentSnapshot = currentTraces.get(caseResult.caseId);\n if (!currentSnapshot) {\n return undefined;\n }\n\n return {\n candidateTopK: currentSnapshot.candidateTopK,\n lexicalTopK: currentSnapshot.lexicalTopK,\n mode: currentSnapshot.traceMode ?? \"vector\",\n query: caseResult.query,\n resultCounts: {\n final: currentSnapshot.finalCount,\n fused: currentSnapshot.finalCount,\n lexical: currentSnapshot.lexicalCount,\n reranked: currentSnapshot.finalCount,\n vector: currentSnapshot.vectorCount,\n },\n runLexical: currentSnapshot.lexicalCount > 0,\n runVector: currentSnapshot.vectorCount > 0,\n sourceBalanceStrategy: currentSnapshot.sourceBalanceStrategy ?? \"cap\",\n steps: [],\n topK: caseResult.topK,\n transformedQuery:\n currentSnapshot.transformedQuery ?? caseResult.query,\n variantQueries: currentSnapshot.variantQueries,\n } satisfies RAGRetrievalTrace;\n })(),\n previousTrace: previousTraces.get(caseResult.caseId),\n }),\n );\n};\n\nconst getStatusRank = (status: RAGEvaluationCaseResult[\"status\"]) =>\n status === \"pass\" ? 2 : status === \"partial\" ? 1 : 0;\n\nconst buildCaseTraceLeadLabel = (\n trace?: Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"topLocatorLabel\"\n | \"topContextLabel\"\n | \"sourceAwareUnitScopeLabel\"\n | \"sourceAwareChunkReasonLabel\"\n >,\n) =>\n trace?.topLocatorLabel ??\n trace?.topContextLabel ??\n trace?.sourceAwareUnitScopeLabel ??\n trace?.sourceAwareChunkReasonLabel;\n\nexport const buildRAGEvaluationRunDiff = ({\n current,\n previous,\n}: {\n current: RAGEvaluationSuiteRun;\n previous?: RAGEvaluationSuiteRun;\n}): RAGEvaluationRunDiff => {\n const previousCases = new Map(\n (previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]),\n );\n const diffs = current.response.cases.map((entry) =>\n buildCaseDiff(entry, previousCases.get(entry.caseId)),\n );\n const regressedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) <\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const improvedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) >\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const unchangedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) ===\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const previousCaseTraces = new Map(\n (previous?.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry]),\n );\n const traceLeadChanges = (current.caseTraceSnapshots ?? [])\n .map((entry) => {\n const previousEntry = previousCaseTraces.get(entry.caseId);\n const currentLead = buildCaseTraceLeadLabel(entry);\n const previousLead = buildCaseTraceLeadLabel(previousEntry);\n if (!currentLead || currentLead === previousLead) {\n return undefined;\n }\n\n return {\n caseId: entry.caseId,\n currentLead,\n label: entry.label,\n previousLead,\n };\n })\n .filter(\n (entry): entry is NonNullable<typeof entry> =>\n typeof entry !== \"undefined\",\n );\n\n return {\n currentRunId: current.id,\n improvedCases,\n previousRunId: previous?.id,\n regressedCases,\n suiteId: current.suiteId,\n traceLeadChanges:\n traceLeadChanges.length > 0 ? traceLeadChanges : undefined,\n summaryDelta: {\n averageF1:\n current.response.summary.averageF1 -\n (previous?.response.summary.averageF1 ?? 0),\n averageLatencyMs:\n current.response.summary.averageLatencyMs -\n (previous?.response.summary.averageLatencyMs ?? 0),\n failedCases:\n current.response.summary.failedCases -\n (previous?.response.summary.failedCases ?? 0),\n passedCases:\n current.response.summary.passedCases -\n (previous?.response.summary.passedCases ?? 0),\n passingRate:\n current.response.passingRate - (previous?.response.passingRate ?? 0),\n partialCases:\n current.response.summary.partialCases -\n (previous?.response.summary.partialCases ?? 0),\n },\n traceSummaryDelta:\n current.traceSummary || previous?.traceSummary\n ? {\n averageCandidateTopK:\n (current.traceSummary?.averageCandidateTopK ?? 0) -\n (previous?.traceSummary?.averageCandidateTopK ?? 0),\n averageFinalCount:\n (current.traceSummary?.averageFinalCount ?? 0) -\n (previous?.traceSummary?.averageFinalCount ?? 0),\n averageLexicalCount:\n (current.traceSummary?.averageLexicalCount ?? 0) -\n (previous?.traceSummary?.averageLexicalCount ?? 0),\n averageLexicalTopK:\n (current.traceSummary?.averageLexicalTopK ?? 0) -\n (previous?.traceSummary?.averageLexicalTopK ?? 0),\n averageVectorCount:\n (current.traceSummary?.averageVectorCount ?? 0) -\n (previous?.traceSummary?.averageVectorCount ?? 0),\n balancedCases:\n (current.traceSummary?.balancedCases ?? 0) -\n (previous?.traceSummary?.balancedCases ?? 0),\n officeEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.officeEvidenceReconcileCases ?? 0),\n officeParagraphEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeParagraphEvidenceReconcileCases ??\n 0) -\n (previous?.traceSummary?.officeParagraphEvidenceReconcileCases ??\n 0),\n officeListEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeListEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.officeListEvidenceReconcileCases ?? 0),\n officeTableEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeTableEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.officeTableEvidenceReconcileCases ?? 0),\n pdfEvidenceReconcileCasesDelta:\n (current.traceSummary?.pdfEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.pdfEvidenceReconcileCases ?? 0),\n lexicalCases:\n (current.traceSummary?.lexicalCases ?? 0) -\n (previous?.traceSummary?.lexicalCases ?? 0),\n modesChanged:\n (current.traceSummary?.modes ?? []).join(\"|\") !==\n (previous?.traceSummary?.modes ?? []).join(\"|\"),\n roundRobinCases:\n (current.traceSummary?.roundRobinCases ?? 0) -\n (previous?.traceSummary?.roundRobinCases ?? 0),\n stageCounts: diffTraceStageCounts({\n current: current.traceSummary?.stageCounts ?? {},\n previous: previous?.traceSummary?.stageCounts ?? {},\n }),\n sourceBalanceStrategiesChanged:\n (current.traceSummary?.sourceBalanceStrategies ?? []).join(\n \"|\",\n ) !==\n (previous?.traceSummary?.sourceBalanceStrategies ?? []).join(\"|\"),\n transformedCases:\n (current.traceSummary?.transformedCases ?? 0) -\n (previous?.traceSummary?.transformedCases ?? 0),\n variantCases:\n (current.traceSummary?.variantCases ?? 0) -\n (previous?.traceSummary?.variantCases ?? 0),\n vectorCases:\n (current.traceSummary?.vectorCases ?? 0) -\n (previous?.traceSummary?.vectorCases ?? 0),\n }\n : undefined,\n unchangedCases,\n };\n};\n\nexport const buildRAGAnswerGroundingEvaluationRunDiff = ({\n current,\n previous,\n}: {\n current: RAGAnswerGroundingEvaluationRun;\n previous?: RAGAnswerGroundingEvaluationRun;\n}): RAGAnswerGroundingEvaluationRunDiff => {\n const previousCases = new Map(\n (previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]),\n );\n const diffs = current.response.cases.map((entry) =>\n buildGroundingCaseDiff(entry, previousCases.get(entry.caseId)),\n );\n const regressedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) <\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const improvedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) >\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const unchangedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) ===\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n\n return {\n currentRunId: current.id,\n improvedCases,\n previousRunId: previous?.id,\n regressedCases,\n suiteId: current.suiteId,\n summaryDelta: {\n averageCitationF1:\n current.response.summary.averageCitationF1 -\n (previous?.response.summary.averageCitationF1 ?? 0),\n averageResolvedCitationRate:\n current.response.summary.averageResolvedCitationRate -\n (previous?.response.summary.averageResolvedCitationRate ?? 0),\n failedCases:\n current.response.summary.failedCases -\n (previous?.response.summary.failedCases ?? 0),\n passedCases:\n current.response.summary.passedCases -\n (previous?.response.summary.passedCases ?? 0),\n passingRate:\n current.response.passingRate - (previous?.response.passingRate ?? 0),\n partialCases:\n current.response.summary.partialCases -\n (previous?.response.summary.partialCases ?? 0),\n },\n unchangedCases,\n };\n};\n\nexport const createRAGFileEvaluationHistoryStore = (\n path: string,\n): RAGEvaluationHistoryStore => ({\n listRuns: async ({ limit, suiteId } = {}) => {\n let parsed: RAGEvaluationSuiteRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) => !suiteId || entry.suiteId === suiteId,\n );\n const sorted = normalizeHistoryRuns(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveRun: async (run) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeHistoryRuns([\n run,\n ...existing.filter((entry: RAGEvaluationSuiteRun) => entry.id !== run.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n pruneRuns: async (input) => {\n let existing: RAGEvaluationSuiteRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n existing = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: existing,\n sort: normalizeHistoryRuns,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(pruned.next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n});\n\nconst normalizeEvaluationSuiteSnapshots = (\n snapshots: RAGEvaluationSuiteSnapshot[],\n) =>\n [...snapshots].sort((left, right) => {\n if (right.createdAt !== left.createdAt) {\n return right.createdAt - left.createdAt;\n }\n if (right.version !== left.version) {\n return right.version - left.version;\n }\n return right.id.localeCompare(left.id);\n });\n\nexport const createRAGFileEvaluationSuiteSnapshotHistoryStore = (\n path: string,\n): RAGEvaluationSuiteSnapshotHistoryStore => ({\n listSnapshots: async ({ limit, suiteId } = {}) => {\n let parsed: RAGEvaluationSuiteSnapshot[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) => !suiteId || entry.suiteId === suiteId,\n );\n const sorted = normalizeEvaluationSuiteSnapshots(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveSnapshot: async (snapshot) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeEvaluationSuiteSnapshots([\n snapshot,\n ...existing.filter(\n (entry: RAGEvaluationSuiteSnapshot) => entry.id !== snapshot.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n pruneSnapshots: async (input) => {\n let existing: RAGEvaluationSuiteSnapshot[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n existing = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: existing,\n sort: normalizeEvaluationSuiteSnapshots,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(pruned.next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n});\n\nexport const createRAGFileRetrievalComparisonHistoryStore = (\n path: string,\n): RAGRetrievalComparisonHistoryStore => ({\n listRuns: async ({ groupKey, label, limit, suiteId, tag, winnerId } = {}) => {\n let parsed: RAGRetrievalComparisonRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const normalizedLabel = normalizeLabelFilter(label);\n const filtered = parsed.filter(\n (entry) =>\n (!suiteId || entry.suiteId === suiteId) &&\n (!groupKey || entry.groupKey === groupKey) &&\n (!tag || (entry.tags ?? []).includes(tag)) &&\n (!normalizedLabel ||\n entry.label.toLowerCase().includes(normalizedLabel) ||\n entry.suiteLabel.toLowerCase().includes(normalizedLabel)) &&\n matchesWinner(entry, winnerId),\n );\n const sorted = normalizeRetrievalComparisonRuns(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveRun: async (run) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalComparisonRuns([\n run,\n ...existing.filter(\n (entry: RAGRetrievalComparisonRun) => entry.id !== run.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalBaselineStore = (\n path: string,\n): RAGRetrievalBaselineStore => {\n const listBaselines: RAGRetrievalBaselineStore[\"listBaselines\"] = async ({\n groupKey,\n limit,\n tag,\n status,\n } = {}) => {\n let parsed: RAGRetrievalBaselineRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!tag || (entry.tags ?? []).includes(tag)) &&\n (!status || entry.status === status),\n );\n const sorted = normalizeRetrievalBaselineRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n };\n\n return {\n getBaseline: async (groupKey) => {\n const baselines = await Promise.resolve(\n listBaselines({ groupKey, limit: 1 }),\n );\n return baselines[0] ?? null;\n },\n listBaselines,\n saveBaseline: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const currentVersion =\n existing\n .filter(\n (entry: RAGRetrievalBaselineRecord) =>\n entry.groupKey === record.groupKey,\n )\n .reduce((max, entry) => Math.max(max, entry.version ?? 0), 0) ?? 0;\n const next = normalizeRetrievalBaselineRecords([\n {\n ...record,\n status: \"active\",\n version:\n typeof record.version === \"number\"\n ? record.version\n : currentVersion + 1,\n },\n ...existing.map((entry: RAGRetrievalBaselineRecord) =>\n entry.groupKey === record.groupKey &&\n (entry.rolloutLabel ?? undefined) ===\n (record.rolloutLabel ?? undefined)\n ? { ...entry, status: \"superseded\" as const }\n : entry,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n };\n};\n\nexport const createRAGFileRetrievalReleaseDecisionStore = (\n path: string,\n): RAGRetrievalReleaseDecisionStore => ({\n listDecisions: async ({ groupKey, kind, limit } = {}) => {\n let parsed: RAGRetrievalReleaseDecisionRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!kind || entry.kind === kind),\n );\n const sorted = normalizeRetrievalReleaseDecisionRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveDecision: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalReleaseDecisionRecords([\n record,\n ...existing.filter(\n (entry: RAGRetrievalReleaseDecisionRecord) => entry.id !== record.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffDecisionStore = (\n path: string,\n): RAGRetrievalLaneHandoffDecisionStore => ({\n listDecisions: async ({\n groupKey,\n kind,\n limit,\n sourceRolloutLabel,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalLaneHandoffDecisionRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!kind || entry.kind === kind) &&\n (!sourceRolloutLabel ||\n entry.sourceRolloutLabel === sourceRolloutLabel) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n );\n const sorted = normalizeRetrievalLaneHandoffDecisionRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveDecision: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalLaneHandoffDecisionRecords([\n record,\n ...existing.filter(\n (entry: RAGRetrievalLaneHandoffDecisionRecord) =>\n entry.id !== record.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalReleaseIncidentStore = (\n path: string,\n): RAGRetrievalReleaseIncidentStore => ({\n listIncidents: async ({\n corpusGroupKey,\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalReleaseIncidentRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!corpusGroupKey || entry.corpusGroupKey === corpusGroupKey) &&\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel) &&\n (!severity || entry.severity === severity) &&\n (!status || entry.status === status),\n );\n const sorted = normalizeRetrievalReleaseIncidentRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveIncident: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalReleaseIncidentRecords([\n record,\n ...existing.filter(\n (entry: RAGRetrievalReleaseIncidentRecord) => entry.id !== record.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffIncidentStore = (\n path: string,\n): RAGRetrievalLaneHandoffIncidentStore => ({\n listIncidents: async ({\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalLaneHandoffIncidentRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel) &&\n (!severity || entry.severity === severity) &&\n (!status || entry.status === status),\n );\n const sorted = normalizeRetrievalReleaseIncidentRecords(\n filtered as RAGRetrievalReleaseIncidentRecord[],\n ) as RAGRetrievalLaneHandoffIncidentRecord[];\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveIncident: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalReleaseIncidentRecords([\n record as RAGRetrievalReleaseIncidentRecord,\n ...existing.filter(\n (entry: RAGRetrievalLaneHandoffIncidentRecord) =>\n entry.id !== record.id,\n ),\n ]) as RAGRetrievalLaneHandoffIncidentRecord[];\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffIncidentHistoryStore = (\n path: string,\n): RAGRetrievalLaneHandoffIncidentHistoryStore => ({\n listRecords: async ({\n action,\n groupKey,\n incidentId,\n limit,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalLaneHandoffIncidentHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed\n .filter(\n (entry) =>\n (!action || entry.action === action) &&\n (!groupKey || entry.groupKey === groupKey) &&\n (!incidentId || entry.incidentId === incidentId) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalLaneHandoffIncidentHistoryRecord,\n right: RAGRetrievalLaneHandoffIncidentHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalIncidentRemediationDecisionStore = (\n path: string,\n): RAGRetrievalIncidentRemediationDecisionStore => ({\n listRecords: async ({\n groupKey,\n incidentId,\n limit,\n remediationKind,\n status,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalIncidentRemediationDecisionRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = normalizeRetrievalIncidentRemediationDecisionRecords(\n parsed,\n ).filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!incidentId || entry.incidentId === incidentId) &&\n (!remediationKind || entry.remediationKind === remediationKind) &&\n (!status || entry.status === status) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n );\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalIncidentRemediationDecisionRecords([\n record,\n ...existing,\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalIncidentRemediationExecutionHistoryStore = (\n path: string,\n): RAGRetrievalIncidentRemediationExecutionHistoryStore => ({\n listRecords: async ({\n actionKind,\n blockedByGuardrail,\n code,\n groupKey,\n idempotentReplay,\n incidentId,\n limit,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalIncidentRemediationExecutionHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered =\n normalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n parsed,\n ).filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!incidentId || entry.incidentId === incidentId) &&\n (!actionKind || entry.action.kind === actionKind) &&\n (!code || entry.code === code) &&\n (typeof blockedByGuardrail !== \"boolean\" ||\n entry.blockedByGuardrail === blockedByGuardrail) &&\n (typeof idempotentReplay !== \"boolean\" ||\n entry.idempotentReplay === idempotentReplay) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n );\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalIncidentRemediationExecutionHistoryRecords([\n record,\n ...existing,\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffAutoCompletePolicyHistoryStore = (\n path: string,\n): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, targetRolloutLabel } = {}) => {\n let parsed: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n right: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalReleaseLanePolicyHistoryStore = (\n path: string,\n): RAGRetrievalReleaseLanePolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, rolloutLabel, scope } = {}) => {\n let parsed: RAGRetrievalReleaseLanePolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!rolloutLabel || entry.rolloutLabel === rolloutLabel) &&\n (!scope || entry.scope === scope),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalReleaseLanePolicyHistoryRecord,\n right: RAGRetrievalReleaseLanePolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalBaselineGatePolicyHistoryStore = (\n path: string,\n): RAGRetrievalBaselineGatePolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, rolloutLabel, scope } = {}) => {\n let parsed: RAGRetrievalBaselineGatePolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!rolloutLabel || entry.rolloutLabel === rolloutLabel) &&\n (!scope || entry.scope === scope),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalBaselineGatePolicyHistoryRecord,\n right: RAGRetrievalBaselineGatePolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileRetrievalReleaseLaneEscalationPolicyHistoryStore = (\n path: string,\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, targetRolloutLabel } = {}) => {\n let parsed: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n right: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport const createRAGFileSearchTraceStore = (\n path: string,\n): RAGSearchTraceStore => ({\n async listTraces(input) {\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n traces?: RAGSearchTraceRecord[];\n };\n const traces = Array.isArray(data.traces) ? data.traces : [];\n const filtered = traces.filter((trace) => {\n if (input?.query && trace.query !== input.query) {\n return false;\n }\n if (input?.groupKey && trace.groupKey !== input.groupKey) {\n return false;\n }\n if (input?.tag && !(trace.tags ?? []).includes(input.tag)) {\n return false;\n }\n return true;\n });\n\n return normalizeTraceSummaryRuns(filtered).slice(\n 0,\n input?.limit ?? DEFAULT_HISTORY_LIMIT,\n );\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return [];\n }\n\n throw error;\n }\n },\n async saveTrace(trace) {\n let traces: RAGSearchTraceRecord[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n traces?: RAGSearchTraceRecord[];\n };\n traces = Array.isArray(data.traces) ? data.traces : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const nextTraces = normalizeTraceSummaryRuns([\n trace,\n ...traces.filter((entry) => entry.id !== trace.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n traces: nextTraces,\n },\n null,\n 2,\n ),\n );\n },\n async pruneTraces(input) {\n let traces: RAGSearchTraceRecord[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n traces?: RAGSearchTraceRecord[];\n };\n traces = Array.isArray(data.traces) ? data.traces : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const pruned = applyRAGSearchTracePrunePolicy({\n input,\n traces,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n traces: pruned.next,\n },\n null,\n 2,\n ),\n );\n\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n };\n },\n});\n\nexport const createRAGFileSearchTracePruneHistoryStore = (\n path: string,\n): RAGSearchTracePruneHistoryStore => ({\n listRuns: async (input) => {\n let parsed: RAGSearchTracePruneRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) => !input?.trigger || entry.trigger === input.trigger,\n );\n const sorted = normalizeSearchTracePruneRuns(filtered);\n return typeof input?.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRun: async (run) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeSearchTracePruneRuns([\n run,\n ...existing.filter(\n (entry: RAGSearchTracePruneRun) => entry.id !== run.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, JSON.stringify(next, null, \"\\t\") + \"\\n\", \"utf8\");\n },\n});\n\nexport type SQLiteRAGSearchTraceStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGEvaluationHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGEvaluationSuiteSnapshotHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGAnswerGroundingEvaluationHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGSearchTracePruneHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalComparisonHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseDecisionStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalBaselineStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseIncidentStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffDecisionStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffIncidentStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffIncidentHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalIncidentRemediationDecisionStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalIncidentRemediationExecutionHistoryStoreOptions =\n {\n db?: Database;\n path?: string;\n tableName?: string;\n };\n\nexport type SQLiteRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStoreOptions =\n {\n db?: Database;\n path?: string;\n tableName?: string;\n };\n\nexport type SQLiteRAGRetrievalReleaseLanePolicyHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalBaselineGatePolicyHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseLaneEscalationPolicyHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGGovernanceStoreBundleOptions = {\n db?: Database;\n path?: string;\n tablePrefix?: string;\n};\n\nexport const createRAGSQLiteEvaluationHistoryStore = (\n options: SQLiteRAGEvaluationHistoryStoreOptions,\n): RAGEvaluationHistoryStore => {\n const tableName = options.tableName ?? \"rag_evaluation_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`,\n );\n\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tfinished_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRuns(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n const sql =\n `SELECT record_json FROM ${tableName}` +\n `${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params) as Array<{\n record_json: string;\n }>;\n const runs = normalizeHistoryRuns(\n rows.map((row) => JSON.parse(row.record_json) as RAGEvaluationSuiteRun),\n );\n\n return typeof input.limit === \"number\"\n ? runs.slice(0, input.limit)\n : runs;\n },\n saveRun(run) {\n insert.run(run.id, run.suiteId, run.finishedAt, JSON.stringify(run));\n },\n pruneRuns(input) {\n const allRows = db\n .prepare(`SELECT record_json FROM ${tableName}`)\n .all() as Array<{\n record_json: string;\n }>;\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: allRows.map(\n (row) => JSON.parse(row.record_json) as RAGEvaluationSuiteRun,\n ),\n sort: normalizeHistoryRuns,\n });\n for (const run of pruned.removed) {\n db.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(run.id);\n }\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n };\n};\n\nexport const createRAGSQLiteEvaluationSuiteSnapshotHistoryStore = (\n options: SQLiteRAGEvaluationSuiteSnapshotHistoryStoreOptions,\n): RAGEvaluationSuiteSnapshotHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_evaluation_suite_snapshot_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tversion INTEGER NOT NULL,\n\t\t\tcreated_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_created_at_idx ON ${tableName} (suite_id, created_at DESC, version DESC)`,\n );\n\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tversion,\n\t\t\tcreated_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tversion = excluded.version,\n\t\t\tcreated_at = excluded.created_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listSnapshots(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n const sql =\n `SELECT record_json FROM ${tableName}` +\n `${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY created_at DESC, version DESC\";\n const rows = db.prepare(sql).all(...params) as Array<{\n record_json: string;\n }>;\n const snapshots = normalizeEvaluationSuiteSnapshots(\n rows.map(\n (row) => JSON.parse(row.record_json) as RAGEvaluationSuiteSnapshot,\n ),\n );\n\n return typeof input.limit === \"number\"\n ? snapshots.slice(0, input.limit)\n : snapshots;\n },\n saveSnapshot(snapshot) {\n insert.run(\n snapshot.id,\n snapshot.suiteId,\n snapshot.version,\n snapshot.createdAt,\n JSON.stringify(snapshot),\n );\n },\n pruneSnapshots(input) {\n const allRows = db\n .prepare(`SELECT record_json FROM ${tableName}`)\n .all() as Array<{\n record_json: string;\n }>;\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: allRows.map(\n (row) => JSON.parse(row.record_json) as RAGEvaluationSuiteSnapshot,\n ),\n sort: normalizeEvaluationSuiteSnapshots,\n });\n for (const snapshot of pruned.removed) {\n db.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(snapshot.id);\n }\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n };\n};\n\nexport const createRAGSQLiteAnswerGroundingEvaluationHistoryStore = (\n options: SQLiteRAGAnswerGroundingEvaluationHistoryStoreOptions,\n): RAGAnswerGroundingEvaluationHistoryStore => {\n const tableName = options.tableName ?? \"rag_answer_grounding_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`,\n );\n\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tfinished_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRuns(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n const sql =\n `SELECT record_json FROM ${tableName}` +\n `${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params) as Array<{\n record_json: string;\n }>;\n const runs = normalizeGroundingHistoryRuns(\n rows.map(\n (row) =>\n JSON.parse(row.record_json) as RAGAnswerGroundingEvaluationRun,\n ),\n );\n\n return typeof input.limit === \"number\"\n ? runs.slice(0, input.limit)\n : runs;\n },\n saveRun(run) {\n insert.run(run.id, run.suiteId, run.finishedAt, JSON.stringify(run));\n },\n pruneRuns(input) {\n const allRows = db\n .prepare(`SELECT record_json FROM ${tableName}`)\n .all() as Array<{\n record_json: string;\n }>;\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: allRows.map(\n (row) =>\n JSON.parse(row.record_json) as RAGAnswerGroundingEvaluationRun,\n ),\n sort: normalizeGroundingHistoryRuns,\n });\n for (const run of pruned.removed) {\n db.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(run.id);\n }\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n };\n};\n\ntype SQLiteSearchTraceRow = {\n id: string;\n query: string;\n label: string;\n group_key: string | null;\n tags_json: string | null;\n started_at: number;\n finished_at: number;\n elapsed_ms: number;\n trace_json: string;\n summary_json: string;\n results_json: string;\n metadata_json: string | null;\n};\n\ntype SQLiteSearchTracePruneHistoryRow = {\n id: string;\n trigger: string;\n started_at: number;\n finished_at: number;\n elapsed_ms: number;\n run_json: string;\n};\n\nconst isSQLiteSearchTraceRow = (\n value: unknown,\n): value is SQLiteSearchTraceRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.query === \"string\" &&\n typeof value.label === \"string\" &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n (typeof value.tags_json === \"string\" || value.tags_json === null) &&\n typeof value.started_at === \"number\" &&\n typeof value.finished_at === \"number\" &&\n typeof value.elapsed_ms === \"number\" &&\n typeof value.trace_json === \"string\" &&\n typeof value.summary_json === \"string\" &&\n typeof value.results_json === \"string\" &&\n (typeof value.metadata_json === \"string\" || value.metadata_json === null);\n\nconst isSQLiteSearchTracePruneHistoryRow = (\n value: unknown,\n): value is SQLiteSearchTracePruneHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.trigger === \"string\" &&\n typeof value.started_at === \"number\" &&\n typeof value.finished_at === \"number\" &&\n typeof value.elapsed_ms === \"number\" &&\n typeof value.run_json === \"string\";\n\ntype SQLiteRetrievalComparisonHistoryRow = {\n id: string;\n suite_id: string;\n suite_label: string;\n label: string;\n corpus_group_key: string | null;\n group_key: string | null;\n tags_json: string | null;\n started_at: number;\n finished_at: number;\n elapsed_ms: number;\n comparison_json: string;\n decision_summary_json: string | null;\n};\n\nconst isSQLiteRetrievalComparisonHistoryRow = (\n value: unknown,\n): value is SQLiteRetrievalComparisonHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.suite_id === \"string\" &&\n typeof value.suite_label === \"string\" &&\n typeof value.label === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n (typeof value.tags_json === \"string\" || value.tags_json === null) &&\n typeof value.started_at === \"number\" &&\n typeof value.finished_at === \"number\" &&\n typeof value.elapsed_ms === \"number\" &&\n typeof value.comparison_json === \"string\" &&\n (typeof value.decision_summary_json === \"string\" ||\n value.decision_summary_json === null);\n\ntype SQLiteRetrievalReleaseDecisionRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n kind: string;\n decided_at: number;\n record_json: string;\n};\n\nconst isSQLiteRetrievalReleaseDecisionRow = (\n value: unknown,\n): value is SQLiteRetrievalReleaseDecisionRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.kind === \"string\" &&\n typeof value.decided_at === \"number\" &&\n typeof value.record_json === \"string\";\n\ntype SQLiteRetrievalBaselineRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n rollout_label: string | null;\n promoted_at: number;\n status: string;\n version: number;\n tags_json: string | null;\n record_json: string;\n};\n\nconst isSQLiteRetrievalBaselineRow = (\n value: unknown,\n): value is SQLiteRetrievalBaselineRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.rollout_label === \"string\" || value.rollout_label === null) &&\n typeof value.promoted_at === \"number\" &&\n typeof value.status === \"string\" &&\n typeof value.version === \"number\" &&\n (typeof value.tags_json === \"string\" || value.tags_json === null) &&\n typeof value.record_json === \"string\";\n\ntype SQLiteRetrievalReleaseIncidentRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string | null;\n severity: string;\n status: string;\n triggered_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffDecisionRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n source_rollout_label: string;\n target_rollout_label: string;\n kind: string;\n decided_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffIncidentRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string | null;\n source_rollout_label: string | null;\n severity: string;\n status: string;\n triggered_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffIncidentHistoryRow = {\n id: string;\n incident_id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string | null;\n action: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalIncidentRemediationDecisionRow = {\n id: string;\n incident_id: string;\n group_key: string;\n target_rollout_label: string | null;\n remediation_kind: string;\n status: string;\n decided_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalIncidentRemediationExecutionHistoryRow = {\n id: string;\n incident_id: string | null;\n group_key: string | null;\n target_rollout_label: string | null;\n action_kind: string;\n code: string;\n blocked_by_guardrail: number;\n idempotent_replay: number;\n executed_at: number;\n record_json: string;\n};\n\ntype SQLiteLaneHandoffAutoCompletePolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteReleaseLanePolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string | null;\n rollout_label: string;\n scope: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteBaselineGatePolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string | null;\n rollout_label: string;\n scope: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteReleaseLaneEscalationPolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string;\n recorded_at: number;\n record_json: string;\n};\n\nconst isSQLiteRetrievalReleaseIncidentRow = (\n value: unknown,\n): value is SQLiteRetrievalReleaseIncidentRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.severity === \"string\" &&\n typeof value.status === \"string\" &&\n typeof value.triggered_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalLaneHandoffDecisionRow = (\n value: unknown,\n): value is SQLiteRetrievalLaneHandoffDecisionRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.source_rollout_label === \"string\" &&\n typeof value.target_rollout_label === \"string\" &&\n typeof value.kind === \"string\" &&\n typeof value.decided_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalLaneHandoffIncidentRow = (\n value: unknown,\n): value is SQLiteRetrievalLaneHandoffIncidentRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n (typeof value.source_rollout_label === \"string\" ||\n value.source_rollout_label === null) &&\n typeof value.severity === \"string\" &&\n typeof value.status === \"string\" &&\n typeof value.triggered_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalLaneHandoffIncidentHistoryRow = (\n value: unknown,\n): value is SQLiteRetrievalLaneHandoffIncidentHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.incident_id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.action === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalIncidentRemediationDecisionRow = (\n value: unknown,\n): value is SQLiteRetrievalIncidentRemediationDecisionRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.incident_id === \"string\" &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.remediation_kind === \"string\" &&\n typeof value.status === \"string\" &&\n typeof value.decided_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalIncidentRemediationExecutionHistoryRow = (\n value: unknown,\n): value is SQLiteRetrievalIncidentRemediationExecutionHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.incident_id === \"string\" || value.incident_id === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.action_kind === \"string\" &&\n typeof value.code === \"string\" &&\n typeof value.blocked_by_guardrail === \"number\" &&\n typeof value.idempotent_replay === \"number\" &&\n typeof value.executed_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteLaneHandoffAutoCompletePolicyHistoryRow = (\n value: unknown,\n): value is SQLiteLaneHandoffAutoCompletePolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.target_rollout_label === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteReleaseLanePolicyHistoryRow = (\n value: unknown,\n): value is SQLiteReleaseLanePolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n typeof value.rollout_label === \"string\" &&\n typeof value.scope === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteBaselineGatePolicyHistoryRow = (\n value: unknown,\n): value is SQLiteBaselineGatePolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n typeof value.rollout_label === \"string\" &&\n typeof value.scope === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteReleaseLaneEscalationPolicyHistoryRow = (\n value: unknown,\n): value is SQLiteReleaseLaneEscalationPolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.target_rollout_label === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst assertSupportedIdentifier = (name: string) => {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n throw new Error(\n `Invalid SQLite search trace table name \"${name}\". Only alphanumeric and underscore names are allowed.`,\n );\n }\n};\n\nconst ensureSQLiteColumns = (\n db: Database,\n tableName: string,\n columns: Array<{ name: string; definition: string }>,\n) => {\n const pragma = db.prepare(`PRAGMA table_info(${tableName})`).all();\n const existing = new Set(\n Array.isArray(pragma)\n ? pragma\n .filter(\n (row): row is { name?: unknown } =>\n isObjectRecord(row) && \"name\" in row,\n )\n .map((row) => (typeof row.name === \"string\" ? row.name : undefined))\n .filter((name): name is string => typeof name === \"string\")\n : [],\n );\n\n for (const column of columns) {\n if (existing.has(column.name)) {\n continue;\n }\n db.exec(\n `ALTER TABLE ${tableName} ADD COLUMN ${column.name} ${column.definition}`,\n );\n }\n};\n\nconst getMissingSQLiteColumns = (\n db: Database,\n tableName: string,\n columns: Array<{ name: string; definition: string }>,\n): RAGSQLiteStoreMigrationIssue[] => {\n const pragma = db.prepare(`PRAGMA table_info(${tableName})`).all();\n const existing = new Set(\n Array.isArray(pragma)\n ? pragma\n .filter(\n (row): row is { name?: unknown } =>\n isObjectRecord(row) && \"name\" in row,\n )\n .map((row) => (typeof row.name === \"string\" ? row.name : undefined))\n .filter((name): name is string => typeof name === \"string\")\n : [],\n );\n\n return columns\n .filter((column) => !existing.has(column.name))\n .map((column) => ({\n columnName: column.name,\n definition: column.definition,\n tableName,\n }));\n};\n\ntype SQLiteStoreMigrationDescriptor = {\n tableName: string;\n columns: Array<{ name: string; definition: string }>;\n};\n\nconst getDefaultSQLiteStoreMigrationDescriptors =\n (): SQLiteStoreMigrationDescriptor[] => [\n {\n tableName: DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME,\n columns: [{ definition: \"TEXT\", name: \"corpus_group_key\" }],\n },\n {\n tableName: DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME,\n columns: [{ definition: \"TEXT\", name: \"corpus_group_key\" }],\n },\n {\n tableName: DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME,\n columns: [\n { definition: \"TEXT\", name: \"group_key\" },\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ],\n },\n ];\n\nconst summarizeSQLiteStoreMigrationIssues = (\n issues: RAGSQLiteStoreMigrationIssue[],\n) =>\n issues.length > 0\n ? `${issues.length} SQLite schema migration issue${issues.length === 1 ? \"\" : \"s\"} detected`\n : undefined;\n\nexport type SQLiteRAGStoreMigrationOptions = {\n db?: Database;\n path?: string;\n descriptors?: SQLiteStoreMigrationDescriptor[];\n};\n\nexport const inspectRAGSQLiteStoreMigrations = (\n options: SQLiteRAGStoreMigrationOptions = {},\n): RAGSQLiteStoreMigrationInspection => {\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n const descriptors =\n options.descriptors ?? getDefaultSQLiteStoreMigrationDescriptors();\n const issues = descriptors.flatMap((descriptor) =>\n getMissingSQLiteColumns(db, descriptor.tableName, descriptor.columns),\n );\n\n return {\n issues,\n summary: summarizeSQLiteStoreMigrationIssues(issues),\n };\n};\n\nexport const applyRAGSQLiteStoreMigrations = (\n options: SQLiteRAGStoreMigrationOptions = {},\n): RAGSQLiteStoreMigrationResult => {\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n const descriptors =\n options.descriptors ?? getDefaultSQLiteStoreMigrationDescriptors();\n const inspection = inspectRAGSQLiteStoreMigrations({\n db,\n descriptors,\n });\n\n for (const descriptor of descriptors) {\n ensureSQLiteColumns(db, descriptor.tableName, descriptor.columns);\n }\n\n return {\n ...inspection,\n applied: inspection.issues,\n };\n};\n\nconst mapSQLiteSearchTraceRow = (\n row: SQLiteSearchTraceRow,\n): RAGSearchTraceRecord => ({\n elapsedMs: row.elapsed_ms,\n finishedAt: row.finished_at,\n groupKey: row.group_key ?? undefined,\n id: row.id,\n label: row.label,\n metadata: parseJSONRecord(row.metadata_json),\n query: row.query,\n results: parseJSONArray(row.results_json, []),\n startedAt: row.started_at,\n summary: JSON.parse(row.summary_json),\n tags: normalizeStringArray(parseJSONArray(row.tags_json, [])),\n trace: JSON.parse(row.trace_json),\n});\n\nconst mapSQLiteSearchTracePruneHistoryRow = (\n row: SQLiteSearchTracePruneHistoryRow,\n): RAGSearchTracePruneRun => JSON.parse(row.run_json);\n\nconst mapSQLiteRetrievalComparisonHistoryRow = (\n row: SQLiteRetrievalComparisonHistoryRow,\n): RAGRetrievalComparisonRun => ({\n comparison: JSON.parse(row.comparison_json),\n corpusGroupKey: row.corpus_group_key ?? undefined,\n decisionSummary: row.decision_summary_json\n ? JSON.parse(row.decision_summary_json)\n : undefined,\n elapsedMs: row.elapsed_ms,\n finishedAt: row.finished_at,\n groupKey: row.group_key ?? undefined,\n id: row.id,\n label: row.label,\n startedAt: row.started_at,\n suiteId: row.suite_id,\n suiteLabel: row.suite_label,\n tags: normalizeStringArray(parseJSONArray(row.tags_json, [])),\n});\n\nconst mapSQLiteRetrievalReleaseDecisionRow = (\n row: SQLiteRetrievalReleaseDecisionRow,\n): RAGRetrievalReleaseDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalBaselineRow = (\n row: SQLiteRetrievalBaselineRow,\n): RAGRetrievalBaselineRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalReleaseIncidentRow = (\n row: SQLiteRetrievalReleaseIncidentRow,\n): RAGRetrievalReleaseIncidentRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffDecisionRow = (\n row: SQLiteRetrievalLaneHandoffDecisionRow,\n): RAGRetrievalLaneHandoffDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffIncidentRow = (\n row: SQLiteRetrievalLaneHandoffIncidentRow,\n): RAGRetrievalLaneHandoffIncidentRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffIncidentHistoryRow = (\n row: SQLiteRetrievalLaneHandoffIncidentHistoryRow,\n): RAGRetrievalLaneHandoffIncidentHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalIncidentRemediationDecisionRow = (\n row: SQLiteRetrievalIncidentRemediationDecisionRow,\n): RAGRetrievalIncidentRemediationDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalIncidentRemediationExecutionHistoryRow = (\n row: SQLiteRetrievalIncidentRemediationExecutionHistoryRow,\n): RAGRetrievalIncidentRemediationExecutionHistoryRecord =>\n JSON.parse(row.record_json);\n\nconst mapSQLiteLaneHandoffAutoCompletePolicyHistoryRow = (\n row: SQLiteLaneHandoffAutoCompletePolicyHistoryRow,\n): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord =>\n JSON.parse(row.record_json);\n\nconst mapSQLiteReleaseLanePolicyHistoryRow = (\n row: SQLiteReleaseLanePolicyHistoryRow,\n): RAGRetrievalReleaseLanePolicyHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteBaselineGatePolicyHistoryRow = (\n row: SQLiteBaselineGatePolicyHistoryRow,\n): RAGRetrievalBaselineGatePolicyHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteReleaseLaneEscalationPolicyHistoryRow = (\n row: SQLiteReleaseLaneEscalationPolicyHistoryRow,\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord =>\n JSON.parse(row.record_json);\n\nexport const createRAGSQLiteSearchTraceStore = (\n options: SQLiteRAGSearchTraceStoreOptions,\n): RAGSearchTraceStore => {\n const tableName = options.tableName ?? DEFAULT_SEARCH_TRACE_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tquery TEXT NOT NULL,\n\t\t\tlabel TEXT NOT NULL,\n\t\t\tgroup_key TEXT,\n\t\t\ttags_json TEXT,\n\t\t\tstarted_at INTEGER NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\telapsed_ms INTEGER NOT NULL,\n\t\t\ttrace_json TEXT NOT NULL,\n\t\t\tsummary_json TEXT NOT NULL,\n\t\t\tresults_json TEXT NOT NULL,\n\t\t\tmetadata_json TEXT\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_query_finished_at_idx ON ${tableName} (query, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_finished_at_idx ON ${tableName} (group_key, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tquery,\n\t\t\tlabel,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\ttrace_json,\n\t\t\tsummary_json,\n\t\t\tresults_json,\n\t\t\tmetadata_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tquery,\n\t\t\tlabel,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\ttrace_json,\n\t\t\tsummary_json,\n\t\t\tresults_json,\n\t\t\tmetadata_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tquery = excluded.query,\n\t\t\tlabel = excluded.label,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttags_json = excluded.tags_json,\n\t\t\tstarted_at = excluded.started_at,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\telapsed_ms = excluded.elapsed_ms,\n\t\t\ttrace_json = excluded.trace_json,\n\t\t\tsummary_json = excluded.summary_json,\n\t\t\tresults_json = excluded.results_json,\n\t\t\tmetadata_json = excluded.metadata_json\n\t`);\n const remove = db.prepare(`DELETE FROM ${tableName} WHERE id = ?`);\n\n return {\n listTraces(input) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input?.query) {\n where.push(\"query = ?\");\n params.push(input.query);\n }\n\n if (input?.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const traces = Array.isArray(rows)\n ? rows.filter(isSQLiteSearchTraceRow).map(mapSQLiteSearchTraceRow)\n : [];\n const filtered = input?.tag\n ? traces.filter((trace) =>\n (trace.tags ?? []).includes(input.tag as string),\n )\n : traces;\n\n return normalizeTraceSummaryRuns(filtered).slice(\n 0,\n input?.limit ?? DEFAULT_HISTORY_LIMIT,\n );\n },\n saveTrace(trace) {\n insert.run(\n trace.id,\n trace.query,\n trace.label,\n trace.groupKey ?? null,\n JSON.stringify(trace.tags ?? []),\n trace.startedAt,\n trace.finishedAt,\n trace.elapsedMs,\n JSON.stringify(trace.trace),\n JSON.stringify(trace.summary),\n JSON.stringify(trace.results),\n trace.metadata === undefined ? null : JSON.stringify(trace.metadata),\n );\n },\n pruneTraces(input) {\n const rows = db.prepare(`${listBase} ORDER BY finished_at DESC`).all();\n const traces = Array.isArray(rows)\n ? rows.filter(isSQLiteSearchTraceRow).map(mapSQLiteSearchTraceRow)\n : [];\n const pruned = applyRAGSearchTracePrunePolicy({\n input,\n traces,\n });\n\n for (const trace of pruned.removed) {\n remove.run(trace.id);\n }\n\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n };\n },\n };\n};\n\nexport const createRAGSQLiteSearchTracePruneHistoryStore = (\n options: SQLiteRAGSearchTracePruneHistoryStoreOptions,\n): RAGSearchTracePruneHistoryStore => {\n const tableName = options.tableName ?? \"rag_search_trace_prune_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\ttrigger TEXT NOT NULL,\n\t\t\tstarted_at INTEGER NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\telapsed_ms INTEGER NOT NULL,\n\t\t\trun_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_trigger_finished_at_idx ON ${tableName} (trigger, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\ttrigger,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\trun_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\ttrigger,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\trun_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\ttrigger = excluded.trigger,\n\t\t\tstarted_at = excluded.started_at,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\telapsed_ms = excluded.elapsed_ms,\n\t\t\trun_json = excluded.run_json\n\t`);\n\n return {\n listRuns(input) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input?.trigger) {\n where.push(\"trigger = ?\");\n params.push(input.trigger);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const runs = Array.isArray(rows)\n ? rows\n .filter(isSQLiteSearchTracePruneHistoryRow)\n .map(mapSQLiteSearchTracePruneHistoryRow)\n : [];\n const sorted = normalizeSearchTracePruneRuns(runs);\n return typeof input?.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRun(run) {\n insert.run(\n run.id,\n run.trigger,\n run.startedAt,\n run.finishedAt,\n run.elapsedMs,\n JSON.stringify(run),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalComparisonHistoryStore = (\n options: SQLiteRAGRetrievalComparisonHistoryStoreOptions,\n): RAGRetrievalComparisonHistoryStore => {\n const tableName =\n options.tableName ?? DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tsuite_label TEXT NOT NULL,\n\t\t\tlabel TEXT NOT NULL,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\ttags_json TEXT,\n\t\t\tstarted_at INTEGER NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\telapsed_ms INTEGER NOT NULL,\n\t\t\tcomparison_json TEXT NOT NULL,\n\t\t\tdecision_summary_json TEXT\n\t\t)\n\t`);\n ensureSQLiteColumns(db, tableName, [\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ]);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_finished_at_idx ON ${tableName} (group_key, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_finished_at_idx ON ${tableName} (corpus_group_key, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tsuite_label,\n\t\t\tlabel,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\tcomparison_json,\n\t\t\tdecision_summary_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tsuite_label,\n\t\t\tlabel,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\tcomparison_json,\n\t\t\tdecision_summary_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tsuite_label = excluded.suite_label,\n\t\t\tlabel = excluded.label,\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttags_json = excluded.tags_json,\n\t\t\tstarted_at = excluded.started_at,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\telapsed_ms = excluded.elapsed_ms,\n\t\t\tcomparison_json = excluded.comparison_json,\n\t\t\tdecision_summary_json = excluded.decision_summary_json\n\t`);\n\n return {\n listRuns(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const runs = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalComparisonHistoryRow)\n .map(mapSQLiteRetrievalComparisonHistoryRow)\n : [];\n const normalizedLabel = normalizeLabelFilter(input.label);\n const filtered = normalizeRetrievalComparisonRuns(\n runs.filter(\n (entry) =>\n (!input.tag || (entry.tags ?? []).includes(input.tag)) &&\n (!normalizedLabel ||\n entry.label.toLowerCase().includes(normalizedLabel) ||\n entry.suiteLabel.toLowerCase().includes(normalizedLabel)) &&\n matchesWinner(entry, input.winnerId),\n ),\n );\n\n return typeof input.limit === \"number\"\n ? filtered.slice(0, input.limit)\n : filtered;\n },\n saveRun(run) {\n insert.run(\n run.id,\n run.suiteId,\n run.suiteLabel,\n run.label,\n run.corpusGroupKey ?? null,\n run.groupKey ?? null,\n JSON.stringify(run.tags ?? []),\n run.startedAt,\n run.finishedAt,\n run.elapsedMs,\n JSON.stringify(run.comparison),\n run.decisionSummary === undefined\n ? null\n : JSON.stringify(run.decisionSummary),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalReleaseDecisionStore = (\n options: SQLiteRAGRetrievalReleaseDecisionStoreOptions,\n): RAGRetrievalReleaseDecisionStore => {\n const tableName =\n options.tableName ?? DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\tkind TEXT NOT NULL,\n\t\t\tdecided_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n ensureSQLiteColumns(db, tableName, [\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ]);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_decided_at_idx ON ${tableName} (corpus_group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_kind_decided_at_idx ON ${tableName} (kind, decided_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\tkind = excluded.kind,\n\t\t\tdecided_at = excluded.decided_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listDecisions(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.kind) {\n where.push(\"kind = ?\");\n params.push(input.kind);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY decided_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const decisions = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalReleaseDecisionRow)\n .map(mapSQLiteRetrievalReleaseDecisionRow)\n : [];\n const sorted = normalizeRetrievalReleaseDecisionRecords(decisions);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveDecision(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.kind,\n record.decidedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalBaselineStore = (\n options: SQLiteRAGRetrievalBaselineStoreOptions,\n): RAGRetrievalBaselineStore => {\n const tableName = options.tableName ?? DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\trollout_label TEXT,\n\t\t\tpromoted_at INTEGER NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\tversion INTEGER NOT NULL,\n\t\t\ttags_json TEXT,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n ensureSQLiteColumns(db, tableName, [\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ]);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_promoted_at_idx ON ${tableName} (group_key, promoted_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_promoted_at_idx ON ${tableName} (corpus_group_key, promoted_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_rollout_status_idx ON ${tableName} (group_key, rollout_label, status)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tpromoted_at,\n\t\t\tstatus,\n\t\t\tversion,\n\t\t\ttags_json,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tpromoted_at,\n\t\t\tstatus,\n\t\t\tversion,\n\t\t\ttags_json,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\trollout_label = excluded.rollout_label,\n\t\t\tpromoted_at = excluded.promoted_at,\n\t\t\tstatus = excluded.status,\n\t\t\tversion = excluded.version,\n\t\t\ttags_json = excluded.tags_json,\n\t\t\trecord_json = excluded.record_json\n\t`);\n const updateExisting = db.prepare(`\n\t\tUPDATE ${tableName}\n\t\tSET\n\t\t\tstatus = ?,\n\t\t\trecord_json = ?\n\t\tWHERE id = ?\n\t`);\n const currentVersion = db.prepare(`\n\t\tSELECT COALESCE(MAX(version), 0) AS max_version\n\t\tFROM ${tableName}\n\t\tWHERE group_key = ?\n\t`);\n const matchingRolloutRows = db.prepare(`\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tpromoted_at,\n\t\t\tstatus,\n\t\t\tversion,\n\t\t\ttags_json,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t\tWHERE group_key = ?\n\t\t\tAND (\n\t\t\t\t(rollout_label IS NULL AND ? IS NULL) OR\n\t\t\t\trollout_label = ?\n\t\t\t)\n\t`);\n\n const listBaselinesSync = (\n input: Parameters<RAGRetrievalBaselineStore[\"listBaselines\"]>[0] = {},\n ): RAGRetrievalBaselineRecord[] => {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY promoted_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const baselines = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalBaselineRow)\n .map(mapSQLiteRetrievalBaselineRow)\n : [];\n const tag = typeof input.tag === \"string\" ? input.tag : undefined;\n const filtered = tag\n ? baselines.filter((entry) => (entry.tags ?? []).includes(tag))\n : baselines;\n const sorted = normalizeRetrievalBaselineRecords(filtered);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n };\n\n return {\n getBaseline(groupKey) {\n const baselines = listBaselinesSync({ groupKey, limit: 1 });\n return Promise.resolve(baselines[0] ?? null);\n },\n listBaselines(input) {\n return Promise.resolve(listBaselinesSync(input));\n },\n saveBaseline(record) {\n const versionRow = currentVersion.get(record.groupKey) as\n | { max_version?: number }\n | undefined;\n const nextVersion =\n typeof record.version === \"number\"\n ? record.version\n : (versionRow?.max_version ?? 0) + 1;\n const nextRecord: RAGRetrievalBaselineRecord = {\n ...record,\n status: \"active\",\n version: nextVersion,\n };\n\n const rows = matchingRolloutRows.all(\n record.groupKey,\n record.rolloutLabel ?? null,\n record.rolloutLabel ?? null,\n );\n const existing = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalBaselineRow)\n .map(mapSQLiteRetrievalBaselineRow)\n : [];\n\n for (const entry of existing) {\n updateExisting.run(\n \"superseded\",\n JSON.stringify({\n ...entry,\n status: \"superseded\",\n }),\n entry.id,\n );\n }\n\n insert.run(\n nextRecord.id,\n nextRecord.corpusGroupKey ?? null,\n nextRecord.groupKey,\n nextRecord.rolloutLabel ?? null,\n nextRecord.promotedAt,\n nextRecord.status,\n nextRecord.version,\n JSON.stringify(nextRecord.tags ?? []),\n JSON.stringify(nextRecord),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalReleaseIncidentStore = (\n options: SQLiteRAGRetrievalReleaseIncidentStoreOptions,\n): RAGRetrievalReleaseIncidentStore => {\n const tableName =\n options.tableName ?? DEFAULT_RETRIEVAL_RELEASE_INCIDENT_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\tseverity TEXT NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\ttriggered_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_triggered_at_idx ON ${tableName} (group_key, triggered_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_status_idx ON ${tableName} (corpus_group_key, status, triggered_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tseverity = excluded.severity,\n\t\t\tstatus = excluded.status,\n\t\t\ttriggered_at = excluded.triggered_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listIncidents(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n if (input.severity) {\n where.push(\"severity = ?\");\n params.push(input.severity);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY triggered_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const incidents = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalReleaseIncidentRow)\n .map(mapSQLiteRetrievalReleaseIncidentRow)\n : [];\n const sorted = normalizeRetrievalReleaseIncidentRecords(incidents);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveIncident(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.severity,\n record.status,\n record.triggeredAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffDecisionStore = (\n options: SQLiteRAGRetrievalLaneHandoffDecisionStoreOptions,\n): RAGRetrievalLaneHandoffDecisionStore => {\n const tableName = options.tableName ?? \"rag_retrieval_lane_handoff_decisions\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\tsource_rollout_label TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT NOT NULL,\n\t\t\tkind TEXT NOT NULL,\n\t\t\tdecided_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_rollout_idx ON ${tableName} (corpus_group_key, source_rollout_label, target_rollout_label, decided_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tsource_rollout_label,\n\t\t\ttarget_rollout_label,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tsource_rollout_label,\n\t\t\ttarget_rollout_label,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\tsource_rollout_label = excluded.source_rollout_label,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tkind = excluded.kind,\n\t\t\tdecided_at = excluded.decided_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listDecisions(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.kind) {\n where.push(\"kind = ?\");\n params.push(input.kind);\n }\n\n if (input.sourceRolloutLabel) {\n where.push(\"source_rollout_label = ?\");\n params.push(input.sourceRolloutLabel);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY decided_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const decisions = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalLaneHandoffDecisionRow)\n .map(mapSQLiteRetrievalLaneHandoffDecisionRow)\n : [];\n const sorted = normalizeRetrievalLaneHandoffDecisionRecords(decisions);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveDecision(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.sourceRolloutLabel,\n record.targetRolloutLabel,\n record.kind,\n record.decidedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffIncidentStore = (\n options: SQLiteRAGRetrievalLaneHandoffIncidentStoreOptions,\n): RAGRetrievalLaneHandoffIncidentStore => {\n const tableName = options.tableName ?? \"rag_retrieval_lane_handoff_incidents\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\tsource_rollout_label TEXT,\n\t\t\tseverity TEXT NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\ttriggered_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_triggered_at_idx ON ${tableName} (group_key, triggered_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_status_idx ON ${tableName} (corpus_group_key, status, triggered_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tsource_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tsource_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tsource_rollout_label = excluded.source_rollout_label,\n\t\t\tseverity = excluded.severity,\n\t\t\tstatus = excluded.status,\n\t\t\ttriggered_at = excluded.triggered_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listIncidents(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n if (input.severity) {\n where.push(\"severity = ?\");\n params.push(input.severity);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY triggered_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const incidents = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalLaneHandoffIncidentRow)\n .map(mapSQLiteRetrievalLaneHandoffIncidentRow)\n : [];\n const sorted = normalizeRetrievalReleaseIncidentRecords(\n incidents as RAGRetrievalReleaseIncidentRecord[],\n ) as RAGRetrievalLaneHandoffIncidentRecord[];\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveIncident(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.sourceRolloutLabel ?? null,\n record.severity,\n record.status,\n record.triggeredAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffIncidentHistoryStore = (\n options: SQLiteRAGRetrievalLaneHandoffIncidentHistoryStoreOptions,\n): RAGRetrievalLaneHandoffIncidentHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_lane_handoff_incident_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tincident_id TEXT NOT NULL,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\taction TEXT NOT NULL,\n\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_incident_recorded_at_idx ON ${tableName} (incident_id, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tincident_id = excluded.incident_id,\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\taction = excluded.action,\n\t\t\trecorded_at = excluded.recorded_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.incidentId) {\n where.push(\"incident_id = ?\");\n params.push(input.incidentId);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n if (input.action) {\n where.push(\"action = ?\");\n params.push(input.action);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalLaneHandoffIncidentHistoryRow)\n .map(mapSQLiteRetrievalLaneHandoffIncidentHistoryRow)\n : [];\n\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.incidentId,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.action,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalIncidentRemediationDecisionStore = (\n options: SQLiteRAGRetrievalIncidentRemediationDecisionStoreOptions,\n): RAGRetrievalIncidentRemediationDecisionStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_incident_remediation_decisions\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tincident_id TEXT NOT NULL,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\tremediation_kind TEXT NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\tdecided_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_incident_status_idx ON ${tableName} (incident_id, status, decided_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tremediation_kind,\n\t\t\tstatus,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tremediation_kind,\n\t\t\tstatus,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tincident_id = excluded.incident_id,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tremediation_kind = excluded.remediation_kind,\n\t\t\tstatus = excluded.status,\n\t\t\tdecided_at = excluded.decided_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.incidentId) {\n where.push(\"incident_id = ?\");\n params.push(input.incidentId);\n }\n\n if (input.remediationKind) {\n where.push(\"remediation_kind = ?\");\n params.push(input.remediationKind);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY decided_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalIncidentRemediationDecisionRow)\n .map(mapSQLiteRetrievalIncidentRemediationDecisionRow)\n : [];\n const sorted =\n normalizeRetrievalIncidentRemediationDecisionRecords(records);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.incidentId,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.remediationKind,\n record.status,\n record.decidedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalIncidentRemediationExecutionHistoryStore =\n (\n options: SQLiteRAGRetrievalIncidentRemediationExecutionHistoryStoreOptions,\n ): RAGRetrievalIncidentRemediationExecutionHistoryStore => {\n const tableName =\n options.tableName ??\n \"rag_retrieval_incident_remediation_execution_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tincident_id TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\taction_kind TEXT NOT NULL,\n\t\t\tcode TEXT NOT NULL,\n\t\t\tblocked_by_guardrail INTEGER NOT NULL,\n\t\t\tidempotent_replay INTEGER NOT NULL,\n\t\t\texecuted_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_executed_at_idx ON ${tableName} (group_key, executed_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_incident_code_idx ON ${tableName} (incident_id, code, executed_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction_kind,\n\t\t\tcode,\n\t\t\tblocked_by_guardrail,\n\t\t\tidempotent_replay,\n\t\t\texecuted_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction_kind,\n\t\t\tcode,\n\t\t\tblocked_by_guardrail,\n\t\t\tidempotent_replay,\n\t\t\texecuted_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tincident_id = excluded.incident_id,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\taction_kind = excluded.action_kind,\n\t\t\tcode = excluded.code,\n\t\t\tblocked_by_guardrail = excluded.blocked_by_guardrail,\n\t\t\tidempotent_replay = excluded.idempotent_replay,\n\t\t\texecuted_at = excluded.executed_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.incidentId) {\n where.push(\"incident_id = ?\");\n params.push(input.incidentId);\n }\n\n if (input.actionKind) {\n where.push(\"action_kind = ?\");\n params.push(input.actionKind);\n }\n\n if (input.code) {\n where.push(\"code = ?\");\n params.push(input.code);\n }\n\n if (typeof input.blockedByGuardrail === \"boolean\") {\n where.push(\"blocked_by_guardrail = ?\");\n params.push(input.blockedByGuardrail ? 1 : 0);\n }\n\n if (typeof input.idempotentReplay === \"boolean\") {\n where.push(\"idempotent_replay = ?\");\n params.push(input.idempotentReplay ? 1 : 0);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY executed_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalIncidentRemediationExecutionHistoryRow)\n .map(mapSQLiteRetrievalIncidentRemediationExecutionHistoryRow)\n : [];\n const sorted =\n normalizeRetrievalIncidentRemediationExecutionHistoryRecords(records);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.incidentId ?? null,\n record.groupKey ?? null,\n record.targetRolloutLabel ?? null,\n record.action.kind,\n record.code,\n record.blockedByGuardrail ? 1 : 0,\n record.idempotentReplay ? 1 : 0,\n record.executedAt,\n JSON.stringify(record),\n );\n },\n };\n };\n\nexport const createRAGSQLiteRetrievalLaneHandoffAutoCompletePolicyHistoryStore =\n (\n options: SQLiteRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStoreOptions,\n ): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore => {\n const tableName =\n options.tableName ??\n \"rag_retrieval_lane_handoff_auto_complete_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\t\tid TEXT PRIMARY KEY,\n\t\t\t\tcorpus_group_key TEXT,\n\t\t\t\tgroup_key TEXT NOT NULL,\n\t\t\t\ttarget_rollout_label TEXT NOT NULL,\n\t\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\t\trecord_json TEXT NOT NULL\n\t\t\t)\n\t\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_target_idx ON ${tableName} (corpus_group_key, target_rollout_label, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\t\tSELECT\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\tFROM ${tableName}\n\t\t`;\n const insert = db.prepare(`\n\t\t\tINSERT INTO ${tableName} (\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\t\tgroup_key = excluded.group_key,\n\t\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\t\trecorded_at = excluded.recorded_at,\n\t\t\t\trecord_json = excluded.record_json\n\t\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteLaneHandoffAutoCompletePolicyHistoryRow)\n .map(mapSQLiteLaneHandoffAutoCompletePolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n };\n\nexport const createRAGSQLiteRetrievalReleaseLanePolicyHistoryStore = (\n options: SQLiteRAGRetrievalReleaseLanePolicyHistoryStoreOptions,\n): RAGRetrievalReleaseLanePolicyHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_release_lane_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\trollout_label TEXT NOT NULL,\n\t\t\tscope TEXT NOT NULL,\n\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_rollout_recorded_at_idx ON ${tableName} (rollout_label, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_scope_idx ON ${tableName} (group_key, scope, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\trollout_label = excluded.rollout_label,\n\t\t\tscope = excluded.scope,\n\t\t\trecorded_at = excluded.recorded_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.rolloutLabel) {\n where.push(\"rollout_label = ?\");\n params.push(input.rolloutLabel);\n }\n if (input.scope) {\n where.push(\"scope = ?\");\n params.push(input.scope);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteReleaseLanePolicyHistoryRow)\n .map(mapSQLiteReleaseLanePolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey ?? null,\n record.rolloutLabel,\n record.scope,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalBaselineGatePolicyHistoryStore = (\n options: SQLiteRAGRetrievalBaselineGatePolicyHistoryStoreOptions,\n): RAGRetrievalBaselineGatePolicyHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_baseline_gate_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\trollout_label TEXT NOT NULL,\n\t\t\tscope TEXT NOT NULL,\n\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_rollout_recorded_at_idx ON ${tableName} (rollout_label, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_scope_idx ON ${tableName} (group_key, scope, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\trollout_label = excluded.rollout_label,\n\t\t\tscope = excluded.scope,\n\t\t\trecorded_at = excluded.recorded_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.rolloutLabel) {\n where.push(\"rollout_label = ?\");\n params.push(input.rolloutLabel);\n }\n if (input.scope) {\n where.push(\"scope = ?\");\n params.push(input.scope);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteBaselineGatePolicyHistoryRow)\n .map(mapSQLiteBaselineGatePolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey ?? null,\n record.rolloutLabel,\n record.scope,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalReleaseLaneEscalationPolicyHistoryStore = (\n options: SQLiteRAGRetrievalReleaseLaneEscalationPolicyHistoryStoreOptions,\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_release_lane_escalation_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\t\tid TEXT PRIMARY KEY,\n\t\t\t\tcorpus_group_key TEXT,\n\t\t\t\tgroup_key TEXT NOT NULL,\n\t\t\t\ttarget_rollout_label TEXT NOT NULL,\n\t\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\t\trecord_json TEXT NOT NULL\n\t\t\t)\n\t\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_target_idx ON ${tableName} (corpus_group_key, target_rollout_label, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\t\tSELECT\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\tFROM ${tableName}\n\t\t`;\n const insert = db.prepare(`\n\t\t\tINSERT INTO ${tableName} (\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\t\tgroup_key = excluded.group_key,\n\t\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\t\trecorded_at = excluded.recorded_at,\n\t\t\t\trecord_json = excluded.record_json\n\t\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteReleaseLaneEscalationPolicyHistoryRow)\n .map(mapSQLiteReleaseLaneEscalationPolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGFileAnswerGroundingEvaluationHistoryStore = (\n path: string,\n): RAGAnswerGroundingEvaluationHistoryStore => ({\n async listRuns(input) {\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingEvaluationRun[];\n };\n const runs = Array.isArray(data.runs) ? data.runs : [];\n const filtered = input?.suiteId\n ? runs.filter((run) => run.suiteId === input.suiteId)\n : runs;\n\n return filtered\n .sort(toGroundingHistorySortOrder)\n .slice(0, input?.limit ?? DEFAULT_HISTORY_LIMIT);\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return [];\n }\n\n throw error;\n }\n },\n async saveRun(run) {\n let runs: RAGAnswerGroundingEvaluationRun[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingEvaluationRun[];\n };\n runs = Array.isArray(data.runs) ? data.runs : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const nextRuns = normalizeGroundingHistoryRuns([\n run,\n ...runs.filter((entry) => entry.id !== run.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n runs: nextRuns,\n },\n null,\n 2,\n ),\n );\n },\n async pruneRuns(input) {\n let runs: RAGAnswerGroundingEvaluationRun[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingEvaluationRun[];\n };\n runs = Array.isArray(data.runs) ? data.runs : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs,\n sort: normalizeGroundingHistoryRuns,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n runs: pruned.next,\n },\n null,\n 2,\n ),\n );\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n});\n\nexport const createRAGFileAnswerGroundingCaseDifficultyHistoryStore = (\n path: string,\n): RAGAnswerGroundingCaseDifficultyHistoryStore => ({\n async listRuns(input) {\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingCaseDifficultyRun[];\n };\n const runs = Array.isArray(data.runs) ? data.runs : [];\n const filtered = input?.suiteId\n ? runs.filter((run) => run.suiteId === input.suiteId)\n : runs;\n\n return normalizeGroundingDifficultyHistoryRuns(filtered).slice(\n 0,\n input?.limit ?? DEFAULT_HISTORY_LIMIT,\n );\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return [];\n }\n\n throw error;\n }\n },\n async saveRun(run) {\n let runs: RAGAnswerGroundingCaseDifficultyRun[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingCaseDifficultyRun[];\n };\n runs = Array.isArray(data.runs) ? data.runs : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const nextRuns = normalizeGroundingDifficultyHistoryRuns([\n run,\n ...runs.filter((entry) => entry.id !== run.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n runs: nextRuns,\n },\n null,\n 2,\n ),\n );\n },\n});\n\nexport const loadRAGEvaluationHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGEvaluationHistoryStore;\n suite: RAGEvaluationSuite;\n limit?: number;\n}): Promise<RAGEvaluationHistory> => {\n const runs = normalizeHistoryRuns(\n await Promise.resolve(store.listRuns({ limit, suiteId: suite.id })),\n );\n const latestRun = runs[0];\n const previousRun = runs[1];\n\n return {\n caseTraceSnapshots: buildEvaluationCaseTraceSnapshots({\n current: latestRun,\n previous: previousRun,\n }),\n retrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n runs,\n }),\n diff:\n latestRun && previousRun\n ? buildRAGEvaluationRunDiff({\n current: latestRun,\n previous: previousRun,\n })\n : undefined,\n latestRun,\n leaderboard: buildRAGEvaluationLeaderboard(runs),\n previousRun,\n runs,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const loadRAGEvaluationSuiteSnapshotHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGEvaluationSuiteSnapshotHistoryStore;\n suite: Pick<RAGEvaluationSuite, \"id\" | \"label\">;\n limit?: number;\n}): Promise<RAGEvaluationSuiteSnapshotHistory> => {\n const snapshots = normalizeEvaluationSuiteSnapshots(\n await Promise.resolve(\n store.listSnapshots({\n limit,\n suiteId: suite.id,\n }),\n ),\n );\n const latestSnapshot = snapshots[0];\n const previousSnapshot = snapshots[1];\n\n return {\n diff:\n latestSnapshot && previousSnapshot\n ? buildRAGEvaluationSuiteSnapshotDiff({\n current: latestSnapshot,\n previous: previousSnapshot,\n })\n : undefined,\n latestSnapshot,\n previousSnapshot,\n snapshots,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const loadRAGSearchTraceHistory = async ({\n store,\n query,\n groupKey,\n tag,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGSearchTraceStore;\n query?: string;\n groupKey?: string;\n tag?: string;\n limit?: number;\n}): Promise<RAGSearchTraceHistory> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ groupKey, limit, query, tag })),\n );\n const latestTrace = traces[0];\n const previousTrace = traces[1];\n\n return {\n diff:\n latestTrace && previousTrace\n ? buildRAGSearchTraceDiff({\n current: latestTrace,\n previous: previousTrace,\n })\n : undefined,\n latestTrace,\n previousTrace,\n groupKey,\n query,\n tag,\n retrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n runs: traces.map((trace) => ({\n finishedAt: trace.finishedAt,\n id: trace.id,\n label: trace.label,\n traceSummary: trace.summary,\n })),\n }),\n traces,\n };\n};\n\nexport const loadRAGSearchTraceGroupHistory = async ({\n store,\n tag,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGSearchTraceStore;\n tag?: string;\n limit?: number;\n}): Promise<RAGSearchTraceGroupHistory> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ limit, tag })),\n );\n const grouped = new Map<string, RAGSearchTraceRecord[]>();\n\n for (const trace of traces) {\n const groupKey = trace.groupKey ?? trace.query;\n const existing = grouped.get(groupKey);\n if (existing) {\n existing.push(trace);\n continue;\n }\n grouped.set(groupKey, [trace]);\n }\n\n const groups = Array.from(grouped.entries())\n .map(([groupKey, entries]): RAGSearchTraceGroupHistoryEntry => {\n const normalizedEntries = normalizeTraceSummaryRuns(entries);\n const latestTrace = normalizedEntries[0];\n const previousTrace = normalizedEntries[1];\n\n return {\n diff:\n latestTrace && previousTrace\n ? buildRAGSearchTraceDiff({\n current: latestTrace,\n previous: previousTrace,\n })\n : undefined,\n groupKey,\n latestTrace,\n previousTrace,\n retrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n runs: normalizedEntries.map((trace) => ({\n finishedAt: trace.finishedAt,\n id: trace.id,\n label: trace.label,\n traceSummary: trace.summary,\n })),\n }),\n traceCount: normalizedEntries.length,\n };\n })\n .sort((left, right) => {\n const leftFinishedAt = left.latestTrace?.finishedAt ?? 0;\n const rightFinishedAt = right.latestTrace?.finishedAt ?? 0;\n return rightFinishedAt - leftFinishedAt;\n });\n\n return {\n groups,\n tag,\n };\n};\n\nexport const summarizeRAGSearchTraceStore = async ({\n store,\n tag,\n}: {\n store: RAGSearchTraceStore;\n tag?: string;\n}): Promise<RAGSearchTraceStats> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ tag })),\n );\n\n return buildRAGSearchTraceStatsFromTraces(traces);\n};\n\nexport const previewRAGSearchTraceStorePrune = async ({\n store,\n input,\n}: {\n store: RAGSearchTraceStore;\n input?: RAGSearchTracePruneInput;\n}): Promise<RAGSearchTracePrunePreview> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ tag: input?.tag })),\n );\n const pruned = applyRAGSearchTracePrunePolicy({\n input,\n traces,\n });\n\n return {\n input,\n result: {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n },\n statsAfter: buildRAGSearchTraceStatsFromTraces(pruned.next),\n statsBefore: buildRAGSearchTraceStatsFromTraces(traces),\n };\n};\n\nexport const loadRAGAnswerGroundingEvaluationHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGAnswerGroundingEvaluationHistoryStore;\n suite: Pick<RAGEvaluationSuite, \"id\" | \"label\">;\n limit?: number;\n}): Promise<RAGAnswerGroundingEvaluationHistory> => {\n const runs = normalizeGroundingHistoryRuns(\n await Promise.resolve(\n store.listRuns({\n limit,\n suiteId: suite.id,\n }),\n ),\n );\n const latestRun = runs[0];\n const previousRun = runs[1];\n\n return {\n caseSnapshots: buildGroundingCaseSnapshots({\n current: latestRun,\n previous: previousRun,\n }),\n diff:\n latestRun && previousRun\n ? buildRAGAnswerGroundingEvaluationRunDiff({\n current: latestRun,\n previous: previousRun,\n })\n : undefined,\n latestRun,\n leaderboard: buildRAGAnswerGroundingEvaluationLeaderboard(runs),\n previousRun,\n runs,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const loadRAGAnswerGroundingCaseDifficultyHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGAnswerGroundingCaseDifficultyHistoryStore;\n suite: Pick<RAGEvaluationSuite, \"id\" | \"label\">;\n limit?: number;\n}): Promise<RAGAnswerGroundingCaseDifficultyHistory> => {\n const runs = normalizeGroundingDifficultyHistoryRuns(\n await Promise.resolve(\n store.listRuns({\n limit,\n suiteId: suite.id,\n }),\n ),\n );\n const latestRun = runs[0];\n const previousRun = runs[1];\n\n return {\n diff:\n latestRun && previousRun\n ? buildRAGAnswerGroundingCaseDifficultyRunDiff({\n current: latestRun,\n previous: previousRun,\n })\n : undefined,\n latestRun,\n previousRun,\n runs,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n trends: buildRAGAnswerGroundingCaseDifficultyTrends({ runs }),\n };\n};\n\nexport const persistRAGEvaluationSuiteRun = async ({\n store,\n run,\n}: {\n store: RAGEvaluationHistoryStore;\n run: RAGEvaluationSuiteRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGAnswerGroundingEvaluationRun = async ({\n store,\n run,\n}: {\n store: RAGAnswerGroundingEvaluationHistoryStore;\n run: RAGAnswerGroundingEvaluationRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGAnswerGroundingCaseDifficultyRun = async ({\n store,\n run,\n}: {\n store: RAGAnswerGroundingCaseDifficultyHistoryStore;\n run: RAGAnswerGroundingCaseDifficultyRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGSearchTraceRecord = async ({\n store,\n record,\n}: {\n store: RAGSearchTraceStore;\n record: RAGSearchTraceRecord;\n}) => {\n await Promise.resolve(store.saveTrace(record));\n return record;\n};\n\nexport const pruneRAGSearchTraceStore = async ({\n store,\n input,\n}: {\n store: RAGSearchTraceStore;\n input?: RAGSearchTracePruneInput;\n}): Promise<RAGSearchTracePruneResult> =>\n Promise.resolve(store.pruneTraces(input));\n\nexport const persistRAGSearchTracePruneRun = async ({\n store,\n run,\n}: {\n store: RAGSearchTracePruneHistoryStore;\n run: RAGSearchTracePruneRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGRetrievalComparisonRun = async ({\n store,\n run,\n}: {\n store: RAGRetrievalComparisonHistoryStore;\n run: RAGRetrievalComparisonRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const buildRAGRetrievalComparisonDecisionSummary = ({\n comparison,\n baselineRetrievalId,\n candidateRetrievalId,\n policy,\n}: {\n comparison: RAGRetrievalComparison;\n baselineRetrievalId?: string;\n candidateRetrievalId?: string;\n policy?: RAGRetrievalBaselineGatePolicy;\n}): RAGRetrievalComparisonDecisionSummary | undefined => {\n const baselineEntry =\n findRetrievalComparisonEntry(comparison, baselineRetrievalId) ??\n comparison.entries[0];\n const candidateEntry =\n findRetrievalComparisonEntry(comparison, candidateRetrievalId) ??\n comparison.entries.find(\n (entry) => entry.retrievalId !== baselineEntry?.retrievalId,\n ) ??\n comparison.entries[1];\n\n if (!baselineEntry && !candidateEntry) {\n return undefined;\n }\n\n const delta =\n baselineEntry && candidateEntry\n ? {\n averageF1Delta:\n candidateEntry.response.summary.averageF1 -\n baselineEntry.response.summary.averageF1,\n elapsedMsDelta:\n candidateEntry.response.elapsedMs -\n baselineEntry.response.elapsedMs,\n passingRateDelta:\n candidateEntry.response.passingRate -\n baselineEntry.response.passingRate,\n ...(countPresentationCueCases(baselineEntry, \"title\") > 0 ||\n countPresentationCueCases(candidateEntry, \"title\") > 0\n ? {\n presentationTitleCueCasesDelta:\n countPresentationCueCases(candidateEntry, \"title\") -\n countPresentationCueCases(baselineEntry, \"title\"),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"body\") > 0 ||\n countPresentationCueCases(candidateEntry, \"body\") > 0\n ? {\n presentationBodyCueCasesDelta:\n countPresentationCueCases(candidateEntry, \"body\") -\n countPresentationCueCases(baselineEntry, \"body\"),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"notes\") > 0 ||\n countPresentationCueCases(candidateEntry, \"notes\") > 0\n ? {\n presentationNotesCueCasesDelta:\n countPresentationCueCases(candidateEntry, \"notes\") -\n countPresentationCueCases(baselineEntry, \"notes\"),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"sheet\") > 0 ||\n countSpreadsheetCueCases(candidateEntry, \"sheet\") > 0\n ? {\n spreadsheetSheetCueCasesDelta:\n countSpreadsheetCueCases(candidateEntry, \"sheet\") -\n countSpreadsheetCueCases(baselineEntry, \"sheet\"),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"table\") > 0 ||\n countSpreadsheetCueCases(candidateEntry, \"table\") > 0\n ? {\n spreadsheetTableCueCasesDelta:\n countSpreadsheetCueCases(candidateEntry, \"table\") -\n countSpreadsheetCueCases(baselineEntry, \"table\"),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"column\") > 0 ||\n countSpreadsheetCueCases(candidateEntry, \"column\") > 0\n ? {\n spreadsheetColumnCueCasesDelta:\n countSpreadsheetCueCases(candidateEntry, \"column\") -\n countSpreadsheetCueCases(baselineEntry, \"column\"),\n }\n : {}),\n multiVectorCollapsedCasesDelta:\n (candidateEntry.traceSummary?.multiVectorCollapsedCases ?? 0) -\n (baselineEntry.traceSummary?.multiVectorCollapsedCases ?? 0),\n multiVectorLexicalHitCasesDelta:\n (candidateEntry.traceSummary?.multiVectorLexicalHitCases ?? 0) -\n (baselineEntry.traceSummary?.multiVectorLexicalHitCases ?? 0),\n multiVectorVectorHitCasesDelta:\n (candidateEntry.traceSummary?.multiVectorVectorHitCases ?? 0) -\n (baselineEntry.traceSummary?.multiVectorVectorHitCases ?? 0),\n evidenceReconcileCasesDelta:\n (candidateEntry.traceSummary?.stageCounts?.evidence_reconcile ??\n 0) -\n (baselineEntry.traceSummary?.stageCounts?.evidence_reconcile ?? 0),\n officeEvidenceReconcileCasesDelta:\n (candidateEntry.traceSummary?.officeEvidenceReconcileCases ?? 0) -\n (baselineEntry.traceSummary?.officeEvidenceReconcileCases ?? 0),\n pdfEvidenceReconcileCasesDelta:\n (candidateEntry.traceSummary?.pdfEvidenceReconcileCases ?? 0) -\n (baselineEntry.traceSummary?.pdfEvidenceReconcileCases ?? 0),\n runtimeCandidateBudgetExhaustedCasesDelta:\n (candidateEntry.traceSummary\n ?.runtimeCandidateBudgetExhaustedCases ?? 0) -\n (baselineEntry.traceSummary?.runtimeCandidateBudgetExhaustedCases ??\n 0),\n runtimeUnderfilledTopKCasesDelta:\n (candidateEntry.traceSummary?.runtimeUnderfilledTopKCases ?? 0) -\n (baselineEntry.traceSummary?.runtimeUnderfilledTopKCases ?? 0),\n }\n : undefined;\n\n return {\n baseline: baselineEntry\n ? {\n averageF1: baselineEntry.response.summary.averageF1,\n elapsedMs: baselineEntry.response.elapsedMs,\n label: baselineEntry.label,\n ...(countPresentationCueCases(baselineEntry, \"title\") > 0\n ? {\n presentationTitleCueCases: countPresentationCueCases(\n baselineEntry,\n \"title\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"body\") > 0\n ? {\n presentationBodyCueCases: countPresentationCueCases(\n baselineEntry,\n \"body\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"notes\") > 0\n ? {\n presentationNotesCueCases: countPresentationCueCases(\n baselineEntry,\n \"notes\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"sheet\") > 0\n ? {\n spreadsheetSheetCueCases: countSpreadsheetCueCases(\n baselineEntry,\n \"sheet\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"table\") > 0\n ? {\n spreadsheetTableCueCases: countSpreadsheetCueCases(\n baselineEntry,\n \"table\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"column\") > 0\n ? {\n spreadsheetColumnCueCases: countSpreadsheetCueCases(\n baselineEntry,\n \"column\",\n ),\n }\n : {}),\n multiVectorCollapsedCases:\n baselineEntry.traceSummary?.multiVectorCollapsedCases,\n multiVectorLexicalHitCases:\n baselineEntry.traceSummary?.multiVectorLexicalHitCases,\n multiVectorVectorHitCases:\n baselineEntry.traceSummary?.multiVectorVectorHitCases,\n evidenceReconcileCases:\n baselineEntry.traceSummary?.stageCounts?.evidence_reconcile,\n officeEvidenceReconcileCases:\n baselineEntry.traceSummary?.officeEvidenceReconcileCases,\n pdfEvidenceReconcileCases:\n baselineEntry.traceSummary?.pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCases:\n baselineEntry.traceSummary?.runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCases:\n baselineEntry.traceSummary?.runtimeUnderfilledTopKCases,\n passingRate: baselineEntry.response.passingRate,\n retrievalId: baselineEntry.retrievalId,\n }\n : undefined,\n baselineRetrievalId: baselineEntry?.retrievalId,\n candidate: candidateEntry\n ? {\n averageF1: candidateEntry.response.summary.averageF1,\n elapsedMs: candidateEntry.response.elapsedMs,\n label: candidateEntry.label,\n ...(countPresentationCueCases(candidateEntry, \"title\") > 0\n ? {\n presentationTitleCueCases: countPresentationCueCases(\n candidateEntry,\n \"title\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(candidateEntry, \"body\") > 0\n ? {\n presentationBodyCueCases: countPresentationCueCases(\n candidateEntry,\n \"body\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(candidateEntry, \"notes\") > 0\n ? {\n presentationNotesCueCases: countPresentationCueCases(\n candidateEntry,\n \"notes\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(candidateEntry, \"sheet\") > 0\n ? {\n spreadsheetSheetCueCases: countSpreadsheetCueCases(\n candidateEntry,\n \"sheet\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(candidateEntry, \"table\") > 0\n ? {\n spreadsheetTableCueCases: countSpreadsheetCueCases(\n candidateEntry,\n \"table\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(candidateEntry, \"column\") > 0\n ? {\n spreadsheetColumnCueCases: countSpreadsheetCueCases(\n candidateEntry,\n \"column\",\n ),\n }\n : {}),\n multiVectorCollapsedCases:\n candidateEntry.traceSummary?.multiVectorCollapsedCases,\n multiVectorLexicalHitCases:\n candidateEntry.traceSummary?.multiVectorLexicalHitCases,\n multiVectorVectorHitCases:\n candidateEntry.traceSummary?.multiVectorVectorHitCases,\n evidenceReconcileCases:\n candidateEntry.traceSummary?.stageCounts?.evidence_reconcile,\n officeEvidenceReconcileCases:\n candidateEntry.traceSummary?.officeEvidenceReconcileCases,\n pdfEvidenceReconcileCases:\n candidateEntry.traceSummary?.pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCases:\n candidateEntry.traceSummary?.runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCases:\n candidateEntry.traceSummary?.runtimeUnderfilledTopKCases,\n passingRate: candidateEntry.response.passingRate,\n retrievalId: candidateEntry.retrievalId,\n }\n : undefined,\n candidateRetrievalId: candidateEntry?.retrievalId,\n delta,\n fastest: comparison.summary.fastest,\n gate: evaluateRetrievalComparisonGate({ delta, policy }),\n winnerByAverageF1: comparison.summary.bestByAverageF1,\n winnerByPassingRate: comparison.summary.bestByPassingRate,\n ...(comparison.summary.bestByPresentationTitleCueCases\n ? {\n winnerByPresentationTitleCueCases:\n comparison.summary.bestByPresentationTitleCueCases,\n }\n : {}),\n ...(comparison.summary.bestByPresentationBodyCueCases\n ? {\n winnerByPresentationBodyCueCases:\n comparison.summary.bestByPresentationBodyCueCases,\n }\n : {}),\n ...(comparison.summary.bestByPresentationNotesCueCases\n ? {\n winnerByPresentationNotesCueCases:\n comparison.summary.bestByPresentationNotesCueCases,\n }\n : {}),\n ...(comparison.summary.bestBySpreadsheetSheetCueCases\n ? {\n winnerBySpreadsheetSheetCueCases:\n comparison.summary.bestBySpreadsheetSheetCueCases,\n }\n : {}),\n ...(comparison.summary.bestBySpreadsheetTableCueCases\n ? {\n winnerBySpreadsheetTableCueCases:\n comparison.summary.bestBySpreadsheetTableCueCases,\n }\n : {}),\n ...(comparison.summary.bestBySpreadsheetColumnCueCases\n ? {\n winnerBySpreadsheetColumnCueCases:\n comparison.summary.bestBySpreadsheetColumnCueCases,\n }\n : {}),\n winnerByMultivectorCollapsedCases:\n comparison.summary.bestByMultivectorCollapsedCases,\n winnerByMultivectorLexicalHitCases:\n comparison.summary.bestByMultivectorLexicalHitCases,\n winnerByMultivectorVectorHitCases:\n comparison.summary.bestByMultivectorVectorHitCases,\n winnerByEvidenceReconcileCases:\n comparison.summary.bestByEvidenceReconcileCases,\n winnerByOfficeEvidenceReconcileCases:\n comparison.summary.bestByOfficeEvidenceReconcileCases,\n winnerByPDFEvidenceReconcileCases:\n comparison.summary.bestByPDFEvidenceReconcileCases,\n winnerByLowestRuntimeCandidateBudgetExhaustedCases:\n comparison.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases,\n winnerByLowestRuntimeUnderfilledTopKCases:\n comparison.summary.bestByLowestRuntimeUnderfilledTopKCases,\n };\n};\n\nexport const loadRAGSearchTracePruneHistory = async ({\n store,\n limit,\n trigger,\n}: {\n store: RAGSearchTracePruneHistoryStore;\n limit?: number;\n trigger?: RAGSearchTracePruneRun[\"trigger\"];\n}) =>\n normalizeSearchTracePruneRuns(\n await Promise.resolve(store.listRuns({ limit, trigger })),\n );\n\nexport const loadRAGRetrievalComparisonHistory = async ({\n store,\n limit,\n suiteId,\n label,\n winnerId,\n corpusGroupKey,\n groupKey,\n tag,\n}: {\n store: RAGRetrievalComparisonHistoryStore;\n limit?: number;\n suiteId?: string;\n label?: string;\n winnerId?: string;\n corpusGroupKey?: string;\n groupKey?: string;\n tag?: string;\n}) =>\n normalizeRetrievalComparisonRuns(\n await Promise.resolve(\n store.listRuns({\n corpusGroupKey,\n groupKey,\n label,\n limit,\n suiteId,\n tag,\n winnerId,\n }),\n ),\n );\n\nexport const loadRAGRetrievalBaselines = async ({\n store,\n corpusGroupKey,\n groupKey,\n tag,\n limit,\n status,\n}: {\n store: RAGRetrievalBaselineStore;\n corpusGroupKey?: string;\n groupKey?: string;\n tag?: string;\n limit?: number;\n status?: RAGRetrievalBaselineRecord[\"status\"];\n}) =>\n normalizeRetrievalBaselineRecords(\n await Promise.resolve(\n store.listBaselines({\n corpusGroupKey,\n groupKey,\n limit,\n status,\n tag,\n }),\n ),\n );\n\nexport const persistRAGRetrievalBaseline = async ({\n store,\n record,\n}: {\n store: RAGRetrievalBaselineStore;\n record: RAGRetrievalBaselineRecord;\n}) => {\n await Promise.resolve(store.saveBaseline(record));\n return record;\n};\n\nexport const loadRAGRetrievalReleaseDecisions = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n kind,\n}: {\n store: RAGRetrievalReleaseDecisionStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n kind?: RAGRetrievalReleaseDecisionRecord[\"kind\"];\n}) =>\n normalizeRetrievalReleaseDecisionRecords(\n await Promise.resolve(\n store.listDecisions({ corpusGroupKey, groupKey, kind, limit }),\n ),\n );\n\nexport const loadRAGRetrievalLaneHandoffDecisions = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n kind,\n sourceRolloutLabel,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalLaneHandoffDecisionStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n kind?: RAGRetrievalLaneHandoffDecisionRecord[\"kind\"];\n sourceRolloutLabel?: RAGRetrievalLaneHandoffDecisionRecord[\"sourceRolloutLabel\"];\n targetRolloutLabel?: RAGRetrievalLaneHandoffDecisionRecord[\"targetRolloutLabel\"];\n}) =>\n normalizeRetrievalLaneHandoffDecisionRecords(\n await Promise.resolve(\n store.listDecisions({\n corpusGroupKey,\n groupKey,\n kind,\n limit,\n sourceRolloutLabel,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalReleaseIncidents = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n status,\n severity,\n}: {\n store: RAGRetrievalReleaseIncidentStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalReleaseIncidentRecord[\"targetRolloutLabel\"];\n status?: RAGRetrievalReleaseIncidentRecord[\"status\"];\n severity?: RAGRetrievalReleaseIncidentRecord[\"severity\"];\n}) =>\n normalizeRetrievalReleaseIncidentRecords(\n await Promise.resolve(\n store.listIncidents({\n corpusGroupKey,\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalLaneHandoffIncidents = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n status,\n severity,\n}: {\n store: RAGRetrievalLaneHandoffIncidentStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalLaneHandoffIncidentRecord[\"targetRolloutLabel\"];\n status?: RAGRetrievalLaneHandoffIncidentRecord[\"status\"];\n severity?: RAGRetrievalLaneHandoffIncidentRecord[\"severity\"];\n}) =>\n normalizeRetrievalReleaseIncidentRecords(\n (await Promise.resolve(\n store.listIncidents({\n corpusGroupKey,\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalReleaseIncidentRecord[],\n ) as RAGRetrievalLaneHandoffIncidentRecord[];\n\nexport const loadRAGRetrievalLaneHandoffIncidentHistory = async ({\n store,\n corpusGroupKey,\n action,\n groupKey,\n incidentId,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalLaneHandoffIncidentHistoryStore;\n corpusGroupKey?: string;\n action?: RAGRetrievalLaneHandoffIncidentHistoryRecord[\"action\"];\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalLaneHandoffIncidentRecord[\"targetRolloutLabel\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n action,\n groupKey,\n incidentId,\n limit,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalLaneHandoffIncidentHistoryRecord[];\n\nexport const loadRAGRetrievalIncidentRemediationDecisions = async ({\n store,\n groupKey,\n incidentId,\n limit,\n remediationKind,\n status,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalIncidentRemediationDecisionStore;\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n remediationKind?: RAGRetrievalIncidentRemediationDecisionRecord[\"remediationKind\"];\n status?: RAGRetrievalIncidentRemediationDecisionRecord[\"status\"];\n targetRolloutLabel?: RAGRetrievalIncidentRemediationDecisionRecord[\"targetRolloutLabel\"];\n}) =>\n normalizeRetrievalIncidentRemediationDecisionRecords(\n await Promise.resolve(\n store.listRecords({\n groupKey,\n incidentId,\n limit,\n remediationKind,\n status,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalIncidentRemediationExecutionHistory = async ({\n store,\n actionKind,\n blockedByGuardrail,\n code,\n groupKey,\n idempotentReplay,\n incidentId,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalIncidentRemediationExecutionHistoryStore;\n actionKind?: RAGRemediationAction[\"kind\"];\n blockedByGuardrail?: boolean;\n code?: RAGRetrievalIncidentRemediationExecutionHistoryRecord[\"code\"];\n groupKey?: string;\n idempotentReplay?: boolean;\n incidentId?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalIncidentRemediationExecutionHistoryRecord[\"targetRolloutLabel\"];\n}) =>\n normalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n await Promise.resolve(\n store.listRecords({\n actionKind,\n blockedByGuardrail,\n code,\n groupKey,\n idempotentReplay,\n incidentId,\n limit,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalLaneHandoffAutoCompletePolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[\"targetRolloutLabel\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalReleaseLanePolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n}: {\n store: RAGRetrievalReleaseLanePolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n rolloutLabel?: RAGRetrievalReleaseLanePolicyHistoryRecord[\"rolloutLabel\"];\n scope?: RAGRetrievalReleaseLanePolicyHistoryRecord[\"scope\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n }),\n )) as RAGRetrievalReleaseLanePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalBaselineGatePolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n}: {\n store: RAGRetrievalBaselineGatePolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n rolloutLabel?: RAGRetrievalBaselineGatePolicyHistoryRecord[\"rolloutLabel\"];\n scope?: RAGRetrievalBaselineGatePolicyHistoryRecord[\"scope\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n }),\n )) as RAGRetrievalBaselineGatePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalReleaseLaneEscalationPolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalReleaseLaneEscalationPolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[\"targetRolloutLabel\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n groupKey,\n limit,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[];\n\nexport const persistRAGRetrievalReleaseDecision = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseDecisionStore;\n record: RAGRetrievalReleaseDecisionRecord;\n}) => {\n await Promise.resolve(store.saveDecision(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffDecision = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffDecisionStore;\n record: RAGRetrievalLaneHandoffDecisionRecord;\n}) => {\n await Promise.resolve(store.saveDecision(record));\n return record;\n};\n\nexport const persistRAGRetrievalReleaseIncident = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseIncidentStore;\n record: RAGRetrievalReleaseIncidentRecord;\n}) => {\n await Promise.resolve(store.saveIncident(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffIncident = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffIncidentStore;\n record: RAGRetrievalLaneHandoffIncidentRecord;\n}) => {\n await Promise.resolve(store.saveIncident(record));\n return record;\n};\n\nexport const persistRAGRetrievalIncidentRemediationDecision = async ({\n store,\n record,\n}: {\n store: RAGRetrievalIncidentRemediationDecisionStore;\n record: RAGRetrievalIncidentRemediationDecisionRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalIncidentRemediationExecutionHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalIncidentRemediationExecutionHistoryStore;\n record: RAGRetrievalIncidentRemediationExecutionHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffIncidentHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffIncidentHistoryStore;\n record: RAGRetrievalLaneHandoffIncidentHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffAutoCompletePolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore;\n record: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalReleaseLanePolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseLanePolicyHistoryStore;\n record: RAGRetrievalReleaseLanePolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalBaselineGatePolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalBaselineGatePolicyHistoryStore;\n record: RAGRetrievalBaselineGatePolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalReleaseLaneEscalationPolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseLaneEscalationPolicyHistoryStore;\n record: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const createRAGSQLiteGovernanceStores = (\n options: SQLiteRAGGovernanceStoreBundleOptions = {},\n): Pick<\n RAGChatPluginConfig,\n | \"searchTraceStore\"\n | \"searchTracePruneHistoryStore\"\n | \"retrievalComparisonHistoryStore\"\n | \"retrievalBaselineStore\"\n | \"retrievalReleaseDecisionStore\"\n | \"retrievalLaneHandoffDecisionStore\"\n | \"retrievalLaneHandoffIncidentStore\"\n | \"retrievalLaneHandoffIncidentHistoryStore\"\n | \"retrievalLaneHandoffAutoCompletePolicyHistoryStore\"\n | \"retrievalReleaseLanePolicyHistoryStore\"\n | \"retrievalBaselineGatePolicyHistoryStore\"\n | \"retrievalReleaseLaneEscalationPolicyHistoryStore\"\n | \"retrievalReleaseIncidentStore\"\n | \"retrievalIncidentRemediationDecisionStore\"\n | \"retrievalIncidentRemediationExecutionHistoryStore\"\n> => {\n const prefix = options.tablePrefix?.trim();\n const table = (suffix: string) =>\n prefix && prefix.length > 0 ? `${prefix}_${suffix}` : suffix;\n\n return {\n searchTraceStore: createRAGSQLiteSearchTraceStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_search_traces\"),\n }),\n searchTracePruneHistoryStore: createRAGSQLiteSearchTracePruneHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_search_trace_prune_history\"),\n }),\n retrievalComparisonHistoryStore:\n createRAGSQLiteRetrievalComparisonHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_comparison_history\"),\n }),\n retrievalBaselineStore: createRAGSQLiteRetrievalBaselineStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_baselines\"),\n }),\n retrievalReleaseDecisionStore: createRAGSQLiteRetrievalReleaseDecisionStore(\n {\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_release_decisions\"),\n },\n ),\n retrievalLaneHandoffDecisionStore:\n createRAGSQLiteRetrievalLaneHandoffDecisionStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_lane_handoff_decisions\"),\n }),\n retrievalLaneHandoffIncidentStore:\n createRAGSQLiteRetrievalLaneHandoffIncidentStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_lane_handoff_incidents\"),\n }),\n retrievalLaneHandoffIncidentHistoryStore:\n createRAGSQLiteRetrievalLaneHandoffIncidentHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_lane_handoff_incident_history\"),\n }),\n retrievalLaneHandoffAutoCompletePolicyHistoryStore:\n createRAGSQLiteRetrievalLaneHandoffAutoCompletePolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\n \"rag_retrieval_lane_handoff_auto_complete_policy_history\",\n ),\n }),\n retrievalReleaseLanePolicyHistoryStore:\n createRAGSQLiteRetrievalReleaseLanePolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_release_lane_policy_history\"),\n }),\n retrievalBaselineGatePolicyHistoryStore:\n createRAGSQLiteRetrievalBaselineGatePolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_baseline_gate_policy_history\"),\n }),\n retrievalReleaseLaneEscalationPolicyHistoryStore:\n createRAGSQLiteRetrievalReleaseLaneEscalationPolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\n \"rag_retrieval_release_lane_escalation_policy_history\",\n ),\n }),\n retrievalReleaseIncidentStore: createRAGSQLiteRetrievalReleaseIncidentStore(\n {\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_release_incidents\"),\n },\n ),\n retrievalIncidentRemediationDecisionStore:\n createRAGSQLiteRetrievalIncidentRemediationDecisionStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_incident_remediation_decisions\"),\n }),\n retrievalIncidentRemediationExecutionHistoryStore:\n createRAGSQLiteRetrievalIncidentRemediationExecutionHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\n \"rag_retrieval_incident_remediation_execution_history\",\n ),\n }),\n };\n};\n\nexport const buildRAGEvaluationResponse = (\n cases: RAGEvaluationCaseResult[],\n): RAGEvaluationResponse => {\n const totalCases = cases.length;\n const corpusKeys = [\n ...new Set(cases.flatMap((entry) => entry.corpusKey ?? [])),\n ];\n const passedCases = cases.filter((entry) => entry.status === \"pass\").length;\n const partialCases = cases.filter(\n (entry) => entry.status === \"partial\",\n ).length;\n const failedCases = cases.filter((entry) => entry.status === \"fail\").length;\n\n return {\n cases,\n ...(corpusKeys.length > 0 ? { corpusKeys } : {}),\n elapsedMs: cases.reduce((sum, result) => sum + result.elapsedMs, 0),\n ok: true,\n passingRate: totalCases > 0 ? (passedCases / totalCases) * 100 : 0,\n summary: {\n averageF1:\n cases.reduce((sum, result) => sum + result.f1, 0) / (totalCases || 1),\n averageLatencyMs:\n cases.reduce((sum, result) => sum + result.elapsedMs, 0) /\n (totalCases || 1),\n averagePrecision:\n cases.reduce((sum, result) => sum + result.precision, 0) /\n (totalCases || 1),\n averageRecall:\n cases.reduce((sum, result) => sum + result.recall, 0) /\n (totalCases || 1),\n failedCases,\n partialCases,\n passedCases,\n totalCases,\n },\n totalCases,\n };\n};\n\nconst incrementFailureCounts = (\n target: Record<string, number>,\n failureClasses: string[] | undefined,\n) => {\n for (const failureClass of failureClasses ?? []) {\n target[failureClass] = (target[failureClass] ?? 0) + 1;\n }\n};\n\nconst sortEntityQualitySummaries = <\n T extends { passingRate: number; totalCases: number; label: string },\n>(\n entries: T[],\n) =>\n entries.sort((left, right) => {\n if (right.passingRate !== left.passingRate) {\n return right.passingRate - left.passingRate;\n }\n if (right.totalCases !== left.totalCases) {\n return right.totalCases - left.totalCases;\n }\n\n return left.label.localeCompare(right.label);\n });\n\nexport const buildRAGEvaluationEntityQualityView = (\n response: RAGEvaluationResponse,\n): RAGEvaluationEntityQualityView => {\n const bySource = new Map<string, RAGEvaluationEntityQualitySummary>();\n const byDocument = new Map<string, RAGEvaluationEntityQualitySummary>();\n for (const entry of response.cases) {\n const targets =\n entry.mode === \"source\"\n ? entry.expectedIds\n : entry.mode === \"documentId\"\n ? entry.expectedIds\n : [];\n const targetMap =\n entry.mode === \"source\"\n ? bySource\n : entry.mode === \"documentId\"\n ? byDocument\n : undefined;\n if (!targetMap) {\n continue;\n }\n for (const target of targets) {\n const current =\n targetMap.get(target) ??\n ({\n averageF1: 0,\n caseIds: [],\n entityType: entry.mode === \"source\" ? \"source\" : \"document\",\n failedCases: 0,\n failureCounts: {},\n key: target,\n label: target,\n passedCases: 0,\n passingRate: 0,\n partialCases: 0,\n totalCases: 0,\n } satisfies RAGEvaluationEntityQualitySummary);\n current.totalCases += 1;\n current.averageF1 += entry.f1;\n current.caseIds.push(entry.caseId);\n if (entry.status === \"pass\") {\n current.passedCases += 1;\n } else if (entry.status === \"partial\") {\n current.partialCases += 1;\n } else {\n current.failedCases += 1;\n }\n incrementFailureCounts(current.failureCounts, entry.failureClasses);\n targetMap.set(target, current);\n }\n }\n\n for (const map of [bySource, byDocument]) {\n for (const entry of map.values()) {\n entry.averageF1 =\n entry.totalCases > 0 ? entry.averageF1 / entry.totalCases : 0;\n entry.passingRate =\n entry.totalCases > 0 ? (entry.passedCases / entry.totalCases) * 100 : 0;\n }\n }\n\n return {\n byDocument: sortEntityQualitySummaries([...byDocument.values()]),\n bySource: sortEntityQualitySummaries([...bySource.values()]),\n };\n};\n\nexport const buildRAGAnswerGroundingEntityQualityView = (\n response: RAGAnswerGroundingEvaluationResponse,\n): RAGAnswerGroundingEntityQualityView => {\n const bySource = new Map<string, RAGAnswerGroundingEntityQualitySummary>();\n const byDocument = new Map<string, RAGAnswerGroundingEntityQualitySummary>();\n for (const entry of response.cases) {\n const targetMap =\n entry.mode === \"source\"\n ? bySource\n : entry.mode === \"documentId\"\n ? byDocument\n : undefined;\n if (!targetMap) {\n continue;\n }\n for (const target of entry.expectedIds) {\n const current =\n targetMap.get(target) ??\n ({\n averageCitationF1: 0,\n averageResolvedCitationRate: 0,\n caseIds: [],\n entityType: entry.mode === \"source\" ? \"source\" : \"document\",\n failedCases: 0,\n failureCounts: {},\n key: target,\n label: target,\n passedCases: 0,\n passingRate: 0,\n partialCases: 0,\n totalCases: 0,\n } satisfies RAGAnswerGroundingEntityQualitySummary);\n current.totalCases += 1;\n current.averageCitationF1 += entry.citationF1;\n current.averageResolvedCitationRate += entry.resolvedCitationRate;\n current.caseIds.push(entry.caseId);\n if (entry.status === \"pass\") {\n current.passedCases += 1;\n } else if (entry.status === \"partial\") {\n current.partialCases += 1;\n } else {\n current.failedCases += 1;\n }\n incrementFailureCounts(current.failureCounts, entry.failureClasses);\n targetMap.set(target, current);\n }\n }\n\n for (const map of [bySource, byDocument]) {\n for (const entry of map.values()) {\n entry.averageCitationF1 =\n entry.totalCases > 0 ? entry.averageCitationF1 / entry.totalCases : 0;\n entry.averageResolvedCitationRate =\n entry.totalCases > 0\n ? entry.averageResolvedCitationRate / entry.totalCases\n : 0;\n entry.passingRate =\n entry.totalCases > 0 ? (entry.passedCases / entry.totalCases) * 100 : 0;\n }\n }\n\n return {\n byDocument: sortEntityQualitySummaries([...byDocument.values()]),\n bySource: sortEntityQualitySummaries([...bySource.values()]),\n };\n};\n\nexport const evaluateRAGAnswerGroundingCase = ({\n caseIndex,\n caseInput,\n}: {\n caseIndex: number;\n caseInput: RAGAnswerGroundingEvaluationCase;\n}): RAGAnswerGroundingEvaluationCaseResult => {\n const mode = resolveEvaluationMode(caseInput);\n const expectedIds = normalizeExpectedIds(\n mode === \"chunkId\"\n ? (caseInput.expectedChunkIds ?? [])\n : mode === \"source\"\n ? (caseInput.expectedSources ?? [])\n : (caseInput.expectedDocumentIds ?? []),\n );\n const groundedAnswer = buildRAGGroundedAnswer(\n caseInput.answer,\n caseInput.sources,\n );\n const citedReferences = groundedAnswer.parts.flatMap((part) =>\n part.type === \"citation\" ? part.references : [],\n );\n const citedIds = normalizeExpectedIds(\n citedReferences.map((reference) => extractExpectedId(reference, mode)),\n );\n const expectedSet = new Set(expectedIds);\n const citedSet = new Set(citedIds);\n const matchedIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => citedSet.has(id)),\n );\n const missingIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => !citedSet.has(id)),\n );\n const extraIds = normalizeExpectedIds(\n [...citedSet].filter((id) => !expectedSet.has(id)),\n );\n const matchedCount = matchedIds.length;\n const expectedCount = expectedIds.length;\n const citedCount = citedIds.length;\n const precision = citedCount > 0 ? matchedCount / citedCount : 0;\n const recall = expectedCount > 0 ? matchedCount / expectedCount : 0;\n const citationF1 =\n precision + recall > 0\n ? (2 * precision * recall) / (precision + recall)\n : 0;\n const citationCount = groundedAnswer.parts.filter(\n (part) => part.type === \"citation\",\n ).length;\n const unresolvedCitationCount = new Set(\n groundedAnswer.ungroundedReferenceNumbers,\n ).size;\n const resolvedCitationCount = citedReferences.length;\n const resolvedCitationRate =\n citationCount > 0 ? Math.min(1, resolvedCitationCount / citationCount) : 0;\n\n return {\n answer: caseInput.answer,\n caseId: caseInput.id ?? `case-${caseIndex + 1}`,\n citationCount,\n citationF1,\n citationPrecision: precision,\n citationRecall: recall,\n citedIds,\n coverage: groundedAnswer.coverage,\n expectedCount,\n expectedIds,\n extraIds,\n groundedAnswer,\n hasCitations: groundedAnswer.hasCitations,\n label: caseInput.label,\n matchedCount,\n matchedIds,\n failureClasses: classifyRAGGroundingFailure({\n availableSources: caseInput.sources,\n citationCount,\n expectedCount,\n extraIds,\n matchedCount,\n missingIds,\n unresolvedCitationCount,\n }),\n metadata: caseInput.metadata,\n missingIds,\n mode,\n query: caseInput.query,\n referenceCount: groundedAnswer.references.length,\n resolvedCitationCount,\n resolvedCitationRate,\n status: buildAnswerGroundingStatus({\n coverage: groundedAnswer.coverage,\n expectedCount,\n matchedCount,\n resolvedCitationCount,\n unresolvedCitationCount,\n }),\n unresolvedCitationCount,\n };\n};\n\nexport const buildRAGAnswerGroundingEvaluationResponse = (\n cases: RAGAnswerGroundingEvaluationCaseResult[],\n): RAGAnswerGroundingEvaluationResponse => {\n const totalCases = cases.length;\n const passedCases = cases.filter((entry) => entry.status === \"pass\").length;\n const partialCases = cases.filter(\n (entry) => entry.status === \"partial\",\n ).length;\n const failedCases = cases.filter((entry) => entry.status === \"fail\").length;\n const groundedCases = cases.filter(\n (entry) => entry.coverage === \"grounded\",\n ).length;\n const partiallyGroundedCases = cases.filter(\n (entry) => entry.coverage === \"partial\",\n ).length;\n const ungroundedCases = cases.filter(\n (entry) => entry.coverage === \"ungrounded\",\n ).length;\n\n return {\n cases,\n ok: true,\n passingRate: totalCases > 0 ? (passedCases / totalCases) * 100 : 0,\n summary: {\n averageCitationF1:\n cases.reduce((sum, result) => sum + result.citationF1, 0) /\n (totalCases || 1),\n averageCitationPrecision:\n cases.reduce((sum, result) => sum + result.citationPrecision, 0) /\n (totalCases || 1),\n averageCitationRecall:\n cases.reduce((sum, result) => sum + result.citationRecall, 0) /\n (totalCases || 1),\n averageResolvedCitationRate:\n cases.reduce((sum, result) => sum + result.resolvedCitationRate, 0) /\n (totalCases || 1),\n failedCases,\n groundedCases,\n partiallyGroundedCases,\n passedCases,\n partialCases,\n totalCases,\n ungroundedCases,\n },\n totalCases,\n };\n};\n\nexport const evaluateRAGAnswerGrounding = (\n input: RAGAnswerGroundingEvaluationInput,\n): RAGAnswerGroundingEvaluationResponse =>\n buildRAGAnswerGroundingEvaluationResponse(\n input.cases.map((caseInput, caseIndex) =>\n evaluateRAGAnswerGroundingCase({ caseIndex, caseInput }),\n ),\n );\nexport const compareRAGRerankers = async ({\n collection,\n suite,\n rerankers,\n defaultTopK = DEFAULT_TOP_K,\n}: {\n collection: RAGCollection;\n suite: RAGEvaluationSuite;\n rerankers: RAGRerankerCandidate[];\n defaultTopK?: number;\n}): Promise<RAGRerankerComparison> => {\n const entries = await Promise.all(\n rerankers.map(async (candidate) => {\n const evaluated = await evaluateRAGCollectionCases({\n collection,\n defaultTopK,\n input: suite.input,\n includeTrace: true,\n rerank: candidate.rerank,\n });\n const response = buildRAGEvaluationResponse(\n evaluated.map((entry) => entry.caseResult),\n );\n\n return {\n caseTraceSnapshots:\n buildEvaluationCaseTraceSnapshotsFromEvaluated(evaluated),\n label: candidate.label ?? candidate.id,\n providerName:\n typeof candidate.rerank === \"function\"\n ? undefined\n : candidate.rerank?.providerName,\n response,\n rerankerId: candidate.id,\n traceSummary: summarizeRetrievalTraces(\n evaluated\n .map((entry) => entry.trace)\n .filter((trace): trace is RAGRetrievalTrace => Boolean(trace)),\n ),\n } satisfies RAGRerankerComparisonEntry;\n }),\n );\n\n const leaderboard = buildRAGEvaluationLeaderboard(\n entries.map((entry) => ({\n elapsedMs: entry.response.elapsedMs,\n finishedAt: 0,\n id: entry.rerankerId,\n label: entry.label,\n response: entry.response,\n startedAt: 0,\n suiteId: suite.id,\n traceSummary: entry.traceSummary,\n })),\n );\n\n return {\n entries,\n leaderboard,\n summary: summarizeRAGRerankerComparison(entries),\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\nconst summarizeEvaluationResponseComparison = <\n TEntry extends {\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n) => {\n if (entries.length === 0) {\n return {};\n }\n\n const byPassingRate = [...entries].sort((left, right) => {\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const byAverageF1 = [...entries].sort(\n (left, right) =>\n right.response.summary.averageF1 - left.response.summary.averageF1,\n );\n const byLatency = [...entries].sort(\n (left, right) =>\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs,\n );\n const getId = (entry: TEntry) =>\n typeof entry[idKey] === \"string\" ? (entry[idKey] as string) : undefined;\n\n return {\n bestByAverageF1: getId(byAverageF1[0] as TEntry),\n bestByPassingRate: getId(byPassingRate[0] as TEntry),\n fastest: getId(byLatency[0] as TEntry),\n };\n};\n\nconst selectComparisonEntryByTraceMetric = <\n TEntry extends {\n traceSummary?: RAGRetrievalTraceComparisonSummary;\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n metric: keyof Pick<\n RAGRetrievalTraceComparisonSummary,\n | \"multiVectorCollapsedCases\"\n | \"multiVectorLexicalHitCases\"\n | \"multiVectorVectorHitCases\"\n | \"officeEvidenceReconcileCases\"\n | \"officeParagraphEvidenceReconcileCases\"\n | \"officeListEvidenceReconcileCases\"\n | \"officeTableEvidenceReconcileCases\"\n | \"pdfEvidenceReconcileCases\"\n >,\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = left.traceSummary?.[metric] ?? 0;\n const rightMetric = right.traceSummary?.[metric] ?? 0;\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n const leftEvidenceScore =\n (left.traceSummary?.multiVectorCollapsedCases ?? 0) +\n (left.traceSummary?.multiVectorLexicalHitCases ?? 0) +\n (left.traceSummary?.multiVectorVectorHitCases ?? 0);\n const rightEvidenceScore =\n (right.traceSummary?.multiVectorCollapsedCases ?? 0) +\n (right.traceSummary?.multiVectorLexicalHitCases ?? 0) +\n (right.traceSummary?.multiVectorVectorHitCases ?? 0);\n if (rightEvidenceScore !== leftEvidenceScore) {\n return rightEvidenceScore - leftEvidenceScore;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || (winner.traceSummary?.[metric] ?? 0) === 0) {\n return undefined;\n }\n\n return typeof winner[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst selectComparisonEntryByLowestTraceMetric = <\n TEntry extends {\n traceSummary?: RAGRetrievalTraceComparisonSummary;\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n metric: keyof Pick<\n RAGRetrievalTraceComparisonSummary,\n \"runtimeCandidateBudgetExhaustedCases\" | \"runtimeUnderfilledTopKCases\"\n >,\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = left.traceSummary?.[metric] ?? 0;\n const rightMetric = right.traceSummary?.[metric] ?? 0;\n if (leftMetric !== rightMetric) {\n return leftMetric - rightMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst selectComparisonEntryByTraceStageCount = <\n TEntry extends {\n traceSummary?: RAGRetrievalTraceComparisonSummary;\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n stage: RAGRetrievalTraceStage,\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = left.traceSummary?.stageCounts?.[stage] ?? 0;\n const rightMetric = right.traceSummary?.stageCounts?.[stage] ?? 0;\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || (winner.traceSummary?.stageCounts?.[stage] ?? 0) === 0) {\n return undefined;\n }\n\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst countPresentationCueCases = <\n TEntry extends { caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[] },\n>(\n entry: TEntry,\n cue: \"body\" | \"notes\" | \"title\",\n) =>\n (entry.caseTraceSnapshots ?? []).filter(\n (snapshot) => snapshot.leadPresentationCue === cue,\n ).length;\n\nconst selectComparisonEntryByPresentationCueCases = <\n TEntry extends {\n caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[];\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n cue: \"body\" | \"notes\" | \"title\",\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = countPresentationCueCases(left, cue);\n const rightMetric = countPresentationCueCases(right, cue);\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || countPresentationCueCases(winner, cue) === 0) {\n return undefined;\n }\n\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst countSpreadsheetCueCases = <\n TEntry extends { caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[] },\n>(\n entry: TEntry,\n cue: \"column\" | \"sheet\" | \"table\",\n) =>\n (entry.caseTraceSnapshots ?? []).filter(\n (snapshot) => snapshot.leadSpreadsheetCue === cue,\n ).length;\n\nconst selectComparisonEntryBySpreadsheetCueCases = <\n TEntry extends {\n caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[];\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n cue: \"column\" | \"sheet\" | \"table\",\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = countSpreadsheetCueCases(left, cue);\n const rightMetric = countSpreadsheetCueCases(right, cue);\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || countSpreadsheetCueCases(winner, cue) === 0) {\n return undefined;\n }\n\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst resolveRetrievalMode = (\n candidate: RAGRetrievalCandidate,\n): RAGHybridRetrievalMode => {\n if (!candidate.retrieval) {\n return \"vector\";\n }\n\n return typeof candidate.retrieval === \"string\"\n ? candidate.retrieval\n : (candidate.retrieval.mode ?? \"vector\");\n};\nexport const compareRAGRetrievalStrategies = async ({\n collection,\n suite,\n retrievals,\n defaultTopK = DEFAULT_TOP_K,\n}: {\n collection: RAGCollection;\n suite: RAGEvaluationSuite;\n retrievals: RAGRetrievalCandidate[];\n defaultTopK?: number;\n}): Promise<RAGRetrievalComparison> => {\n const entries = await Promise.all(\n retrievals.map(async (candidate) => {\n const tracedCollection = {\n ...collection,\n search: (input) =>\n collection.search({\n ...input,\n queryTransform: candidate.queryTransform ?? input.queryTransform,\n rerank: candidate.rerank ?? input.rerank,\n retrieval: candidate.retrieval ?? input.retrieval,\n }),\n searchWithTrace: (input) =>\n collection.searchWithTrace({\n ...input,\n queryTransform: candidate.queryTransform ?? input.queryTransform,\n rerank: candidate.rerank ?? input.rerank,\n retrieval: candidate.retrieval ?? input.retrieval,\n }),\n } satisfies RAGCollection;\n const evaluated = await evaluateRAGCollectionCases({\n collection: {\n ...tracedCollection,\n },\n defaultTopK,\n input: suite.input,\n includeTrace: true,\n rerank: candidate.rerank,\n });\n const response = buildRAGEvaluationResponse(\n evaluated.map((entry) => entry.caseResult),\n );\n\n return {\n caseTraceSnapshots:\n buildEvaluationCaseTraceSnapshotsFromEvaluated(evaluated),\n label: candidate.label ?? candidate.id,\n response,\n retrievalId: candidate.id,\n retrievalMode: resolveRetrievalMode(candidate),\n traceSummary: summarizeRetrievalTraces(\n evaluated\n .map((entry) => entry.trace)\n .filter((trace): trace is RAGRetrievalTrace => Boolean(trace)),\n ),\n } satisfies RAGRetrievalComparisonEntry;\n }),\n );\n\n const leaderboard = buildRAGEvaluationLeaderboard(\n entries.map((entry) => ({\n elapsedMs: entry.response.elapsedMs,\n finishedAt: 0,\n id: entry.retrievalId,\n label: entry.label,\n response: entry.response,\n startedAt: 0,\n suiteId: suite.id,\n traceSummary: entry.traceSummary,\n })),\n );\n\n return {\n corpusKeys: [\n ...new Set(entries.flatMap((entry) => entry.response.corpusKeys ?? [])),\n ],\n entries,\n leaderboard,\n summary: summarizeRAGRetrievalComparison(entries),\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const summarizeRAGRetrievalTraces = (\n traces: RAGRetrievalTrace[],\n): RAGRetrievalTraceComparisonSummary | undefined =>\n summarizeRetrievalTraces(traces);\n\nexport const compareRAGRetrievalTraceSummaries = (\n current: RAGRetrievalTraceComparisonSummary,\n previous: RAGRetrievalTraceComparisonSummary,\n): RAGRetrievalTraceComparisonSummaryDiff => ({\n averageCandidateTopKDelta:\n current.averageCandidateTopK - previous.averageCandidateTopK,\n averageFinalCountDelta:\n current.averageFinalCount - previous.averageFinalCount,\n averageLexicalCountDelta:\n current.averageLexicalCount - previous.averageLexicalCount,\n averageLexicalTopKDelta:\n current.averageLexicalTopK - previous.averageLexicalTopK,\n averageVectorCountDelta:\n current.averageVectorCount - previous.averageVectorCount,\n balancedCasesDelta: current.balancedCases - previous.balancedCases,\n current,\n lexicalCasesDelta: current.lexicalCases - previous.lexicalCases,\n modeDelta: buildSummaryListDelta(current.modes, previous.modes),\n previous,\n roundRobinCasesDelta: current.roundRobinCases - previous.roundRobinCases,\n sourceBalanceStrategyDelta: buildSummaryListDelta(\n current.sourceBalanceStrategies,\n previous.sourceBalanceStrategies,\n ),\n stageCountsDelta: diffTraceSummaryStageCounts({\n current: current.stageCounts,\n previous: previous.stageCounts,\n }),\n totalCasesDelta: current.totalCases - previous.totalCases,\n transformedCasesDelta: current.transformedCases - previous.transformedCases,\n vectorCasesDelta: current.vectorCases - previous.vectorCases,\n variantCasesDelta: current.variantCases - previous.variantCases,\n multiVectorCasesDelta: current.multiVectorCases - previous.multiVectorCases,\n multiVectorVectorHitCasesDelta:\n current.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n multiVectorLexicalHitCasesDelta:\n current.multiVectorLexicalHitCases - previous.multiVectorLexicalHitCases,\n multiVectorCollapsedCasesDelta:\n current.multiVectorCollapsedCases - previous.multiVectorCollapsedCases,\n officeEvidenceReconcileCasesDelta:\n current.officeEvidenceReconcileCases -\n previous.officeEvidenceReconcileCases,\n officeParagraphEvidenceReconcileCasesDelta:\n (current.officeParagraphEvidenceReconcileCases ?? 0) -\n (previous.officeParagraphEvidenceReconcileCases ?? 0),\n officeListEvidenceReconcileCasesDelta:\n (current.officeListEvidenceReconcileCases ?? 0) -\n (previous.officeListEvidenceReconcileCases ?? 0),\n officeTableEvidenceReconcileCasesDelta:\n (current.officeTableEvidenceReconcileCases ?? 0) -\n (previous.officeTableEvidenceReconcileCases ?? 0),\n pdfEvidenceReconcileCasesDelta:\n current.pdfEvidenceReconcileCases - previous.pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCasesDelta:\n current.runtimeCandidateBudgetExhaustedCases -\n previous.runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCasesDelta:\n current.runtimeUnderfilledTopKCases - previous.runtimeUnderfilledTopKCases,\n});\n\nconst buildSearchTraceResultSnapshots = (\n results: Array<{\n chunkId: string;\n corpusKey?: string;\n score: number;\n source?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }>,\n): RAGSearchTraceResultSnapshot[] =>\n results.map((result) => ({\n chunkId: result.chunkId,\n corpusKey:\n result.corpusKey ??\n (typeof result.metadata?.corpusKey === \"string\"\n ? result.metadata.corpusKey\n : undefined),\n documentId:\n typeof result.metadata?.documentId === \"string\"\n ? result.metadata.documentId\n : undefined,\n score: result.score,\n source: result.source,\n title: result.title,\n }));\n\nexport const buildRAGSearchTraceRecord = (input: {\n trace: RAGRetrievalTrace;\n results?: Array<{\n chunkId: string;\n score: number;\n source?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }>;\n id?: string;\n label?: string;\n groupKey?: string;\n tags?: string[];\n startedAt?: number;\n finishedAt?: number;\n elapsedMs?: number;\n metadata?: Record<string, unknown>;\n}): RAGSearchTraceRecord => {\n const startedAt = input.startedAt ?? Date.now();\n const finishedAt = input.finishedAt ?? startedAt;\n const elapsedMs = input.elapsedMs ?? Math.max(0, finishedAt - startedAt);\n const summary =\n summarizeRetrievalTraces([input.trace]) ??\n summarizeRetrievalTraces([\n {\n ...input.trace,\n steps: [...input.trace.steps],\n },\n ]);\n\n if (!summary) {\n throw new Error(\"Failed to summarize retrieval trace\");\n }\n\n return {\n elapsedMs,\n finishedAt,\n groupKey: input.groupKey,\n id: input.id ?? generateId(),\n label: input.label ?? input.trace.query,\n metadata: input.metadata,\n query: input.trace.query,\n results: buildSearchTraceResultSnapshots(input.results ?? []),\n startedAt,\n summary,\n tags: normalizeTraceTags(input.tags),\n trace: input.trace,\n };\n};\n\nexport const buildRAGSearchTraceDiff = ({\n current,\n previous,\n}: {\n current: RAGSearchTraceRecord;\n previous?: RAGSearchTraceRecord;\n}): RAGSearchTraceDiff => {\n const currentChunkIds = current.results.map((entry) => entry.chunkId);\n const previousChunkIds =\n previous?.results.map((entry) => entry.chunkId) ?? [];\n const previousSet = new Set(previousChunkIds);\n const currentSet = new Set(currentChunkIds);\n\n return {\n addedChunkIds: currentChunkIds.filter(\n (chunkId) => !previousSet.has(chunkId),\n ),\n currentTraceId: current.id,\n previousTraceId: previous?.id,\n removedChunkIds: previousChunkIds.filter(\n (chunkId) => !currentSet.has(chunkId),\n ),\n retainedChunkIds: currentChunkIds.filter((chunkId) =>\n previousSet.has(chunkId),\n ),\n summaryDelta: previous?.summary\n ? compareRAGRetrievalTraceSummaries(current.summary, previous.summary)\n : undefined,\n topResultChanged:\n (current.results[0]?.chunkId ?? undefined) !==\n (previous?.results[0]?.chunkId ?? undefined),\n };\n};\n\nexport const buildRAGRetrievalTraceHistoryTrend = ({\n runs,\n}: {\n runs: RAGRetrievalTraceSummaryRun[];\n}): RAGRetrievalTraceTrend => {\n const sortedRuns = normalizeTraceSummaryRuns(runs);\n const runsWithSummary = sortedRuns.filter(\n (run) => run.traceSummary && run.label,\n );\n const traceSummaries = runsWithSummary\n .map((run) => run.traceSummary)\n .filter((summary): summary is RAGRetrievalTraceComparisonSummary =>\n Boolean(summary),\n );\n const summaryTrendWindows: RAGRetrievalTraceHistoryWindow[] = [];\n\n for (let index = 0; index < runsWithSummary.length - 1; index += 1) {\n const currentRun = runsWithSummary[index]!;\n const previousRun = runsWithSummary[index + 1]!;\n if (!currentRun.traceSummary || !previousRun.traceSummary) {\n continue;\n }\n const current = currentRun.traceSummary;\n const previous = previousRun.traceSummary;\n const delta = compareRAGRetrievalTraceSummaries(current, previous);\n summaryTrendWindows.push({\n current,\n currentRunId: currentRun.id,\n currentRunLabel: currentRun.label,\n delta,\n previous,\n previousRunId: previousRun.id,\n previousRunLabel: previousRun.label,\n });\n }\n\n const latest = runsWithSummary[0]?.traceSummary;\n const previous = runsWithSummary[1]?.traceSummary;\n const latestToPrevious =\n latest && previous\n ? compareRAGRetrievalTraceSummaries(latest, previous)\n : undefined;\n const listHistoryModes = traceSummaries.map((summary) => summary.modes);\n const listHistorySourceStrategies = traceSummaries.map(\n (summary) => summary.sourceBalanceStrategies,\n );\n const modes = summarizeListTurnover<RAGHybridRetrievalMode>({\n current: normalizeSummaryList(latest?.modes ?? []),\n history: listHistoryModes,\n previous: normalizeSummaryList(previous?.modes ?? []),\n });\n const sourceBalanceStrategies =\n summarizeListTurnover<RAGSourceBalanceStrategy>({\n current: normalizeSummaryList(latest?.sourceBalanceStrategies ?? []),\n history: listHistorySourceStrategies,\n previous: normalizeSummaryList(previous?.sourceBalanceStrategies ?? []),\n });\n const { aggregate, bestMetric, worstMetric } = buildTraceSummaryAggregate({\n summaries: traceSummaries,\n });\n const stageChurn = buildRAGRetrievalTraceStageChurn({\n windows: summaryTrendWindows,\n });\n\n return {\n aggregate,\n bestMetric,\n modeTurnover: modes,\n runsWithTraceSummary: traceSummaries.length,\n sourceBalanceStrategyTurnover: sourceBalanceStrategies,\n stageChurn,\n summaryTrendWindows,\n worstMetric,\n worstVolatileStage: stageChurn.find((entry) => entry.totalChanges > 0),\n latestToPrevious,\n };\n};\nexport const createRAGEvaluationSuite = (\n suite: RAGEvaluationSuite,\n): RAGEvaluationSuite => {\n const cases = suite.input.cases.map((entry) => ({\n ...entry,\n ...(entry.goldenSet === true ? { goldenSet: true } : {}),\n ...(entry.expectedChunkIds\n ? { expectedChunkIds: [...entry.expectedChunkIds] }\n : {}),\n ...(entry.expectedSources\n ? { expectedSources: [...entry.expectedSources] }\n : {}),\n ...(entry.expectedDocumentIds\n ? { expectedDocumentIds: [...entry.expectedDocumentIds] }\n : {}),\n ...(entry.hardNegativeChunkIds\n ? {\n hardNegativeChunkIds: normalizeExpectedIds(\n entry.hardNegativeChunkIds,\n ),\n }\n : {}),\n ...(entry.hardNegativeSources\n ? {\n hardNegativeSources: normalizeExpectedIds(entry.hardNegativeSources),\n }\n : {}),\n ...(entry.hardNegativeDocumentIds\n ? {\n hardNegativeDocumentIds: normalizeExpectedIds(\n entry.hardNegativeDocumentIds,\n ),\n }\n : {}),\n ...(entry.filter ? { filter: { ...entry.filter } } : {}),\n ...(entry.metadata ? { metadata: { ...entry.metadata } } : {}),\n ...(entry.retrieval ? { retrieval: entry.retrieval } : {}),\n }));\n const duplicateCaseIds = Array.from(\n new Set(\n cases\n .map((entry) => entry.id)\n .filter(\n (id, index, ids) =>\n typeof id === \"string\" && ids.indexOf(id) !== index,\n ),\n ),\n );\n if (duplicateCaseIds.length > 0) {\n throw new Error(\n `RAG evaluation suite contains duplicate case ids: ${duplicateCaseIds.join(\", \")}`,\n );\n }\n\n return {\n ...suite,\n input: {\n ...suite.input,\n cases,\n ...(suite.input.filter ? { filter: { ...suite.input.filter } } : {}),\n ...(suite.input.retrieval ? { retrieval: suite.input.retrieval } : {}),\n },\n ...(suite.metadata ? { metadata: { ...suite.metadata } } : {}),\n };\n};\n\nexport const addRAGEvaluationSuiteCase = ({\n suite,\n caseInput,\n index,\n}: {\n suite: RAGEvaluationSuite;\n caseInput: RAGEvaluationCase;\n index?: number;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n if (normalizedSuite.input.cases.some((entry) => entry.id === caseInput.id)) {\n throw new Error(\n `RAG evaluation suite already contains case id ${caseInput.id}`,\n );\n }\n\n const nextCases = [...normalizedSuite.input.cases];\n const insertAt =\n typeof index === \"number\" && Number.isFinite(index)\n ? Math.max(0, Math.min(nextCases.length, Math.trunc(index)))\n : nextCases.length;\n nextCases.splice(insertAt, 0, caseInput);\n\n return createRAGEvaluationSuite({\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: nextCases,\n },\n });\n};\n\nexport const updateRAGEvaluationSuiteCase = ({\n suite,\n caseId,\n caseInput,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n caseInput: RAGEvaluationCase;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const targetIndex = normalizedSuite.input.cases.findIndex(\n (entry) => entry.id === caseId,\n );\n if (targetIndex < 0) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n if (\n caseInput.id !== caseId &&\n normalizedSuite.input.cases.some((entry) => entry.id === caseInput.id)\n ) {\n throw new Error(\n `RAG evaluation suite already contains case id ${caseInput.id}`,\n );\n }\n\n const nextCases = [...normalizedSuite.input.cases];\n nextCases[targetIndex] = caseInput;\n\n return createRAGEvaluationSuite({\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: nextCases,\n },\n });\n};\n\nexport const removeRAGEvaluationSuiteCase = ({\n suite,\n caseId,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const nextCases = normalizedSuite.input.cases.filter(\n (entry) => entry.id !== caseId,\n );\n if (nextCases.length === normalizedSuite.input.cases.length) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n return {\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: nextCases,\n },\n };\n};\n\nexport const reorderRAGEvaluationSuiteCases = ({\n suite,\n caseIds,\n}: {\n suite: RAGEvaluationSuite;\n caseIds: string[];\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const caseMap = new Map(\n normalizedSuite.input.cases.map((entry) => [entry.id, entry]),\n );\n if (caseIds.length !== normalizedSuite.input.cases.length) {\n throw new Error(\n \"RAG evaluation suite reorder requires exactly one id per case\",\n );\n }\n const unknownCaseIds = caseIds.filter((id) => !caseMap.has(id));\n if (unknownCaseIds.length > 0) {\n throw new Error(\n `RAG evaluation suite reorder contains unknown case ids: ${unknownCaseIds.join(\", \")}`,\n );\n }\n if (new Set(caseIds).size !== caseIds.length) {\n throw new Error(\"RAG evaluation suite reorder contains duplicate case ids\");\n }\n\n return {\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: caseIds.map((id) => caseMap.get(id)!),\n },\n };\n};\n\nexport const setRAGEvaluationSuiteCaseGoldenSet = ({\n suite,\n caseId,\n goldenSet,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n goldenSet: boolean;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const target = normalizedSuite.input.cases.find(\n (entry) => entry.id === caseId,\n );\n if (!target) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n return updateRAGEvaluationSuiteCase({\n caseId,\n caseInput: {\n ...target,\n ...(goldenSet ? { goldenSet: true } : { goldenSet: undefined }),\n },\n suite: normalizedSuite,\n });\n};\n\nconst resolveHardNegativeCaseField = (\n kind: \"chunkId\" | \"source\" | \"documentId\",\n) =>\n kind === \"chunkId\"\n ? \"hardNegativeChunkIds\"\n : kind === \"source\"\n ? \"hardNegativeSources\"\n : \"hardNegativeDocumentIds\";\n\nexport const addRAGEvaluationSuiteCaseHardNegative = ({\n suite,\n caseId,\n kind,\n value,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n kind: \"chunkId\" | \"source\" | \"documentId\";\n value: string;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const target = normalizedSuite.input.cases.find(\n (entry) => entry.id === caseId,\n );\n if (!target) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n const field = resolveHardNegativeCaseField(kind);\n const nextValues = normalizeExpectedIds([\n ...normalizeStringArray(target[field]),\n value,\n ]);\n\n return updateRAGEvaluationSuiteCase({\n caseId,\n caseInput: {\n ...target,\n [field]: nextValues,\n },\n suite: normalizedSuite,\n });\n};\n\nexport const removeRAGEvaluationSuiteCaseHardNegative = ({\n suite,\n caseId,\n kind,\n value,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n kind: \"chunkId\" | \"source\" | \"documentId\";\n value: string;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const target = normalizedSuite.input.cases.find(\n (entry) => entry.id === caseId,\n );\n if (!target) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n const field = resolveHardNegativeCaseField(kind);\n const nextValues = normalizeStringArray(target[field]).filter(\n (entry) => entry !== value.trim(),\n );\n\n return updateRAGEvaluationSuiteCase({\n caseId,\n caseInput: {\n ...target,\n [field]: nextValues.length > 0 ? nextValues : undefined,\n },\n suite: normalizedSuite,\n });\n};\n\nexport const summarizeRAGEvaluationSuiteDataset = ({\n suite,\n}: {\n suite: RAGEvaluationSuite;\n}): RAGEvaluationSuiteDatasetSummary => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const cases = normalizedSuite.input.cases;\n\n return {\n caseCount: cases.length,\n goldenSetCount: cases.filter((entry) => entry.goldenSet === true).length,\n hardNegativeCaseCount: cases.filter(\n (entry) =>\n normalizeStringArray(entry.hardNegativeChunkIds).length > 0 ||\n normalizeStringArray(entry.hardNegativeSources).length > 0 ||\n normalizeStringArray(entry.hardNegativeDocumentIds).length > 0,\n ).length,\n hardNegativeChunkIdCount: cases.reduce(\n (sum, entry) =>\n sum + normalizeStringArray(entry.hardNegativeChunkIds).length,\n 0,\n ),\n hardNegativeDocumentIdCount: cases.reduce(\n (sum, entry) =>\n sum + normalizeStringArray(entry.hardNegativeDocumentIds).length,\n 0,\n ),\n hardNegativeSourceCount: cases.reduce(\n (sum, entry) =>\n sum + normalizeStringArray(entry.hardNegativeSources).length,\n 0,\n ),\n suiteId: normalizedSuite.id,\n };\n};\n\nexport const generateRAGEvaluationSuiteFromDocuments = ({\n suiteId,\n documents,\n label,\n description,\n maxCases = 20,\n topK = 5,\n scoreThreshold,\n filter,\n retrieval,\n includeGoldenSet = true,\n hardNegativePerCase = 1,\n metadata,\n}: RAGEvaluationSuiteGenerationOptions): RAGEvaluationSuite => {\n const normalizedDocuments = documents\n .filter(\n (document) =>\n typeof document.id === \"string\" &&\n document.id.trim().length > 0 &&\n typeof document.source === \"string\" &&\n document.source.trim().length > 0 &&\n typeof document.title === \"string\" &&\n document.title.trim().length > 0,\n )\n .sort((left, right) =>\n `${left.source}\\u0000${left.title}\\u0000${left.id}`.localeCompare(\n `${right.source}\\u0000${right.title}\\u0000${right.id}`,\n ),\n )\n .slice(0, Math.max(0, Math.trunc(maxCases)));\n\n const cases = normalizedDocuments.map((document, index) => {\n const negativeCandidates = normalizedDocuments\n .slice(index + 1)\n .concat(normalizedDocuments.slice(0, index))\n .filter((candidate) => candidate.id !== document.id);\n const hardNegativeDocumentIds = negativeCandidates\n .slice(0, Math.max(0, Math.trunc(hardNegativePerCase)))\n .map((candidate) => candidate.id);\n const hardNegativeSources = negativeCandidates\n .slice(0, Math.max(0, Math.trunc(hardNegativePerCase)))\n .map((candidate) => candidate.source);\n\n return {\n corpusKey: document.corpusKey,\n expectedDocumentIds: [document.id],\n expectedSources: [document.source],\n ...(includeGoldenSet ? { goldenSet: true } : {}),\n ...(hardNegativeDocumentIds.length > 0\n ? { hardNegativeDocumentIds }\n : {}),\n ...(hardNegativeSources.length > 0 ? { hardNegativeSources } : {}),\n id: `synthetic-${document.id}`,\n label: document.title,\n query: buildSyntheticEvaluationQuery(document),\n } satisfies RAGEvaluationCase;\n });\n\n return createRAGEvaluationSuite({\n description,\n id: suiteId,\n input: {\n cases,\n ...(filter ? { filter: { ...filter } } : {}),\n ...(typeof scoreThreshold === \"number\" ? { scoreThreshold } : {}),\n ...(typeof topK === \"number\" ? { topK } : {}),\n ...(retrieval ? { retrieval } : {}),\n },\n label,\n metadata,\n });\n};\n\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_SUITE_ID =\n \"rag-native-planner-larger-corpus\";\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_LABEL =\n \"Adaptive Native Planner Benchmark\";\nconst DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_SUITE_ID =\n \"rag-native-backend-larger-corpus\";\nconst DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_LABEL =\n \"Native Backend Comparison Benchmark\";\nconst DEFAULT_PRESENTATION_CUE_BENCHMARK_SUITE_ID =\n \"rag-presentation-cue-parity\";\nconst DEFAULT_PRESENTATION_CUE_BENCHMARK_LABEL = \"Presentation Cue Benchmark\";\nconst DEFAULT_SPREADSHEET_CUE_BENCHMARK_SUITE_ID = \"rag-spreadsheet-cue-parity\";\nconst DEFAULT_SPREADSHEET_CUE_BENCHMARK_LABEL = \"Spreadsheet Cue Benchmark\";\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY =\n \"Which launch checklist phrase is exact wording?\";\nconst DEFAULT_NATIVE_BACKEND_HYBRID_QUERY =\n \"aurora promotion checklist wording\";\nconst DEFAULT_NATIVE_BACKEND_FILTERED_QUERY =\n \"focus lane launch checklist wording\";\nconst DEFAULT_NATIVE_BACKEND_REORDERED_QUERY =\n \"exact aurora focus lane checklist wording\";\nconst DEFAULT_NATIVE_BACKEND_GUIDE_QUERY =\n \"which focus lane guide contains exact aurora promotion wording\";\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER = {\n lane: \"focus\",\n} satisfies Record<string, unknown>;\nconst DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS = [\n \"focus-distractor-0\",\n \"focus-distractor-1\",\n \"focus-distractor-2\",\n] as const;\n\nexport const createRAGNativeBackendBenchmarkMockEmbedding = async (\n text: string,\n): Promise<number[]> => {\n const normalized = text.toLowerCase();\n if (\n normalized.includes(\n \"launch checklist exact wording for aurora promotion\",\n ) ||\n normalized.includes(\"launch checklist exact wording\")\n ) {\n return [0.995, 0.005];\n }\n\n if (\n normalized.includes(\"aurora\") ||\n normalized.includes(\"checklist\") ||\n normalized.includes(\"focus lane\") ||\n normalized.includes(\"exact wording\") ||\n normalized.includes(\"guide\")\n ) {\n return [1, 0];\n }\n\n return [0, 1];\n};\n\nexport const createRAGNativeBackendBenchmarkCorpus = (input?: {\n backend?: \"generic\" | \"sqlite-native\" | \"postgres\";\n noiseCount?: number;\n}): RAGDocumentChunk[] => {\n const noiseCount = input?.noiseCount ?? 5_001;\n const backend = input?.backend ?? \"generic\";\n const genericChunks = [\n ...Array.from({ length: noiseCount }, (_, index) => ({\n chunkId: `noise:${index}`,\n corpusKey: \"noise\",\n embedding: [0, 1] as number[],\n metadata: {\n corpusKey: \"noise\",\n documentId: `noise-${index}`,\n lane: \"noise\",\n },\n source: `noise/${index}.md`,\n text: `Background operations note ${index}.`,\n })),\n ...Array.from({ length: 3 }, (_, index) => ({\n chunkId: `focus:distractor:${index}`,\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n corpusKey: \"focus\",\n documentId: `focus-distractor-${index}`,\n lane: \"focus\",\n },\n source: `focus/distractor-${index}.md`,\n text:\n index === 0\n ? \"aurora promotion checklist overview\"\n : index === 1\n ? \"launch checklist wording draft\"\n : \"focus lane promotion runbook notes\",\n })),\n {\n chunkId: \"focus:target\",\n corpusKey: \"focus\",\n embedding: [0.995, 0.005] as number[],\n metadata: {\n corpusKey: \"focus\",\n documentId: \"focus-target\",\n lane: \"focus\",\n },\n source: \"guide/planner-depth.md\",\n text: \"launch checklist exact wording for aurora promotion in the focus lane\",\n },\n ] satisfies RAGDocumentChunk[];\n\n const backendSpecificChunks =\n backend === \"sqlite-native\"\n ? [\n {\n chunkId: \"focus:sqlite:phrase-matrix\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"sqlite-native\",\n corpusKey: \"focus\",\n documentId: \"focus-sqlite-phrase-matrix\",\n lane: \"focus\",\n },\n source: \"guide/sqlite-phrase-matrix.md\",\n text: \"exact aurora focus lane checklist wording matrix for sqlite validation\",\n },\n {\n chunkId: \"focus:sqlite:guide-table\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"sqlite-native\",\n corpusKey: \"focus\",\n documentId: \"focus-sqlite-guide-table\",\n lane: \"focus\",\n },\n source: \"guide/sqlite-guide-table.md\",\n text: \"which focus lane guide contains aurora promotion wording draft table for sqlite operators\",\n },\n ]\n : backend === \"postgres\"\n ? [\n {\n chunkId: \"focus:postgres:appendix\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"postgres\",\n corpusKey: \"focus\",\n documentId: \"focus-postgres-appendix\",\n lane: \"focus\",\n },\n source: \"guide/postgres-appendix.md\",\n text: \"which focus lane guide contains exact aurora promotion wording appendix for postgres release review\",\n },\n {\n chunkId: \"focus:postgres:alternatives\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"postgres\",\n corpusKey: \"focus\",\n documentId: \"focus-postgres-alternatives\",\n lane: \"focus\",\n },\n source: \"guide/postgres-alternatives.md\",\n text: \"aurora promotion checklist wording alternatives and exact focus lane phrasing for postgres audits\",\n },\n ]\n : [];\n\n return [...genericChunks, ...backendSpecificChunks];\n};\n\nexport const createRAGAdaptiveNativePlannerBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Stress-tests larger-corpus native planner selection, candidate-budget pressure, and transformed-query recovery on filtered retrieval.\",\n id: input?.id ?? DEFAULT_NATIVE_PLANNER_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n \"focus-distractor-0\",\n \"focus-distractor-1\",\n \"focus-distractor-2\",\n ],\n id: \"planner-pressure-exact-phrase\",\n label: \"Exact phrase survives larger-corpus native pressure\",\n query: DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY,\n topK: input?.topK ?? 1,\n },\n ],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n retrieval: \"vector\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_NATIVE_PLANNER_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"adaptive_native_planner\",\n benchmarkScope: \"larger_corpus\",\n expectedSignals: [\n \"selected native planner profile\",\n \"candidate-budget exhaustion\",\n \"underfilled topk\",\n ],\n recommendedGroupKey: \"runtime-native-planner\",\n recommendedTags: [\"runtime\", \"native\", \"planner\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGAdaptiveNativePlannerBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite = input?.suite ?? createRAGAdaptiveNativePlannerBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"adaptive_native_planner_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGNativeBackendComparisonBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Captures larger-corpus native backend parity with filtered vector pressure and harder hybrid retrieval cases so sqlite-native and postgres runs can be compared over time.\",\n id: input?.id ?? DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-exact-phrase\",\n label: \"Exact phrase survives larger-corpus native pressure\",\n query: DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-hybrid-phrase\",\n label: \"Hybrid retrieval survives filtered lexical pressure\",\n query: DEFAULT_NATIVE_BACKEND_HYBRID_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-filtered-lane-query\",\n label: \"Filtered lane query survives broader corpus noise\",\n query: DEFAULT_NATIVE_BACKEND_FILTERED_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-reordered-phrase\",\n label: \"Reordered phrase survives transform pressure\",\n query: DEFAULT_NATIVE_BACKEND_REORDERED_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-guide-query\",\n label: \"Guide attribution survives filtered corpus pressure\",\n query: DEFAULT_NATIVE_BACKEND_GUIDE_QUERY,\n topK: input?.topK ?? 1,\n },\n ],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n retrieval: \"vector\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"native_backend_comparison\",\n benchmarkScope: \"larger_corpus\",\n expectedSignals: [\n \"backend-tagged runtime artifacts\",\n \"selected native planner profile\",\n \"hybrid filtered retrieval\",\n \"candidate-budget exhaustion\",\n \"underfilled topk\",\n \"query transform pressure\",\n ],\n recommendedGroupKey: \"runtime-native-backend-parity\",\n recommendedTags: [\"runtime\", \"backend\", \"native\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGNativeBackendComparisonBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite =\n input?.suite ?? createRAGNativeBackendComparisonBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"native_backend_comparison_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGPresentationCueBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Captures repeated-title presentation retrieval parity with explicit title-led, body-led, and notes-led slide cases so presentation cue weighting can be benchmarked over time.\",\n id: input?.id ?? DEFAULT_PRESENTATION_CUE_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"slide-title-doc\"],\n hardNegativeDocumentIds: [\"slide-body-doc\", \"slide-notes-doc\"],\n id: \"presentation-title-led\",\n label: \"Repeated-title deck selects title-led slide evidence\",\n query: \"Which presentation title covers the release handoff summary?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"slide-body-doc\"],\n hardNegativeDocumentIds: [\"slide-title-doc\", \"slide-notes-doc\"],\n id: \"presentation-body-led\",\n label: \"Repeated-title deck selects body-led slide evidence\",\n query: \"Which slide mentions escalation review in the body?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"slide-notes-doc\"],\n hardNegativeDocumentIds: [\"slide-title-doc\", \"slide-body-doc\"],\n id: \"presentation-notes-led\",\n label: \"Repeated-title deck selects notes-led slide evidence\",\n query: \"Which slide notes are the primary handoff evidence?\",\n topK: input?.topK ?? 1,\n },\n ],\n retrieval: \"hybrid\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_PRESENTATION_CUE_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"presentation_cue\",\n benchmarkScope: \"repeated_title_slides\",\n expectedSignals: [\n \"presentation title cue\",\n \"presentation body cue\",\n \"presentation notes cue\",\n ],\n recommendedGroupKey: \"presentation-cue-parity\",\n recommendedTags: [\"presentation\", \"cue\", \"slides\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGPresentationCueBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite = input?.suite ?? createRAGPresentationCueBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"presentation_cue_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGSpreadsheetCueBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Captures repeated spreadsheet-family retrieval parity with explicit sheet-led, table-led, and column-led workbook cases so spreadsheet cue weighting can be benchmarked over time.\",\n id: input?.id ?? DEFAULT_SPREADSHEET_CUE_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"sheet-led-doc\"],\n hardNegativeDocumentIds: [\"table-led-doc\", \"column-led-doc\"],\n id: \"spreadsheet-sheet-led\",\n label: \"Workbook selects sheet-led spreadsheet evidence\",\n query: \"Which spreadsheet sheet lists owner status and due date?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"table-led-doc\"],\n hardNegativeDocumentIds: [\"sheet-led-doc\", \"column-led-doc\"],\n id: \"spreadsheet-table-led\",\n label: \"Workbook selects table-led spreadsheet evidence\",\n query: \"Which spreadsheet table lists the escalation status rows?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"column-led-doc\"],\n hardNegativeDocumentIds: [\"sheet-led-doc\", \"table-led-doc\"],\n id: \"spreadsheet-column-led\",\n label: \"Workbook selects column-led spreadsheet evidence\",\n query: \"Which spreadsheet columns cover owner due date?\",\n topK: input?.topK ?? 1,\n },\n ],\n retrieval: \"hybrid\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_SPREADSHEET_CUE_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"spreadsheet_cue\",\n benchmarkScope: \"repeated_sheet_tables\",\n expectedSignals: [\n \"spreadsheet sheet cue\",\n \"spreadsheet table cue\",\n \"spreadsheet column cue\",\n ],\n recommendedGroupKey: \"spreadsheet-cue-parity\",\n recommendedTags: [\"spreadsheet\", \"cue\", \"workbook\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGSpreadsheetCueBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite = input?.suite ?? createRAGSpreadsheetCueBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"spreadsheet_cue_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGEvaluationSuiteSnapshot = ({\n suite,\n id,\n version = 1,\n createdAt = Date.now(),\n metadata,\n}: {\n suite: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n return {\n caseCount: normalizedSuite.input.cases.length,\n createdAt,\n id: id ?? `${normalizedSuite.id}:snapshot:${String(version)}`,\n label: normalizedSuite.label,\n description: normalizedSuite.description,\n metadata: metadata ? { ...metadata } : undefined,\n suite: normalizedSuite,\n suiteId: normalizedSuite.id,\n version,\n };\n};\n\nconst stableStringifyEvaluationCase = (entry: RAGEvaluationCase) =>\n JSON.stringify({\n ...entry,\n expectedChunkIds: entry.expectedChunkIds ?? [],\n expectedDocumentIds: entry.expectedDocumentIds ?? [],\n expectedSources: entry.expectedSources ?? [],\n goldenSet: entry.goldenSet === true,\n hardNegativeChunkIds: entry.hardNegativeChunkIds ?? [],\n hardNegativeDocumentIds: entry.hardNegativeDocumentIds ?? [],\n hardNegativeSources: entry.hardNegativeSources ?? [],\n filter: entry.filter ?? {},\n metadata: entry.metadata ?? {},\n retrieval: entry.retrieval ?? null,\n });\n\nexport const buildRAGEvaluationSuiteSnapshotDiff = ({\n current,\n previous,\n}: {\n current: RAGEvaluationSuiteSnapshot;\n previous?: RAGEvaluationSuiteSnapshot;\n}): RAGEvaluationSuiteSnapshotDiff => {\n const currentCases = current.suite.input.cases;\n const previousCases = previous?.suite.input.cases ?? [];\n const currentMap = new Map<string, RAGEvaluationCase>(\n currentCases.map((entry: RAGEvaluationCase) => [entry.id, entry]),\n );\n const previousMap = new Map<string, RAGEvaluationCase>(\n previousCases.map((entry: RAGEvaluationCase) => [entry.id, entry]),\n );\n const currentIds = currentCases.map((entry: RAGEvaluationCase) => entry.id);\n const previousIds = previousCases.map((entry: RAGEvaluationCase) => entry.id);\n\n const addedCaseIds = currentIds.filter((id: string) => !previousMap.has(id));\n const removedCaseIds = previousIds.filter(\n (id: string) => !currentMap.has(id),\n );\n const changedCaseIds = currentIds.filter((id: string) => {\n const currentCase = currentMap.get(id);\n const previousCase = previousMap.get(id);\n if (!currentCase || !previousCase) {\n return false;\n }\n return (\n stableStringifyEvaluationCase(currentCase) !==\n stableStringifyEvaluationCase(previousCase)\n );\n });\n const unchangedCaseIds = currentIds.filter((id: string) => {\n const currentCase = currentMap.get(id);\n const previousCase = previousMap.get(id);\n if (!currentCase || !previousCase) {\n return false;\n }\n return (\n stableStringifyEvaluationCase(currentCase) ===\n stableStringifyEvaluationCase(previousCase)\n );\n });\n const sharedIds = currentIds.filter((id: string) => previousMap.has(id));\n const orderChanged =\n sharedIds.length > 0 &&\n JSON.stringify(sharedIds) !==\n JSON.stringify(previousIds.filter((id: string) => currentMap.has(id)));\n\n return {\n addedCaseIds,\n caseCountDelta: current.caseCount - (previous?.caseCount ?? 0),\n changedCaseIds,\n currentSnapshotId: current.id,\n orderChanged,\n previousSnapshotId: previous?.id,\n removedCaseIds,\n suiteId: current.suiteId,\n unchangedCaseIds,\n };\n};\nexport const evaluateRAGCollection = async ({\n collection,\n input,\n defaultTopK = DEFAULT_TOP_K,\n rerank,\n}: {\n collection: RAGCollection;\n input: RAGEvaluationInput;\n defaultTopK?: number;\n rerank?: RAGRerankerProviderLike;\n}) => {\n const evaluated = await evaluateRAGCollectionCases({\n collection,\n defaultTopK,\n includeTrace: false,\n input,\n rerank,\n });\n\n return buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));\n};\nexport const executeDryRunRAGEvaluation = (\n input: RAGEvaluationInput,\n defaultTopK = DEFAULT_TOP_K,\n): RAGEvaluationCaseResult[] =>\n input.cases.map((caseInput, caseIndex) => {\n const mode = resolveEvaluationMode(caseInput);\n const expectedIds = normalizeExpectedIds(\n mode === \"chunkId\"\n ? (caseInput.expectedChunkIds ?? [])\n : mode === \"source\"\n ? (caseInput.expectedSources ?? [])\n : (caseInput.expectedDocumentIds ?? []),\n );\n const effectiveTopK =\n typeof caseInput.topK === \"number\"\n ? caseInput.topK\n : typeof input.topK === \"number\"\n ? input.topK\n : defaultTopK;\n\n return {\n caseId: caseInput.id ?? `case-${caseIndex + 1}`,\n elapsedMs: 0,\n expectedCount: expectedIds.length,\n expectedIds,\n failureClasses: classifyRAGEvaluationFailure({\n expectedCount: expectedIds.length,\n matchedCount: 0,\n missingIds: expectedIds,\n retrievedCount: 0,\n retrievedIds: [],\n }),\n f1: 0,\n label: caseInput.label,\n matchedCount: 0,\n matchedIds: [],\n missingIds: expectedIds,\n mode,\n precision: 0,\n query: caseInput.query,\n recall: 0,\n retrievedCount: 0,\n retrievedIds: [],\n status: expectedIds.length === 0 ? \"partial\" : \"fail\",\n topK: effectiveTopK,\n };\n });\nexport const runRAGEvaluationSuite = async ({\n suite,\n evaluate,\n overrides,\n artifacts,\n}: {\n suite: RAGEvaluationSuite;\n evaluate: (input: RAGEvaluationInput) => Promise<RAGEvaluationResponse>;\n overrides?: Partial<RAGEvaluationInput>;\n artifacts?: Pick<\n RAGEvaluationSuiteRun,\n \"traceSummary\" | \"caseTraceSnapshots\"\n >;\n}) => {\n const startedAt = Date.now();\n const response = await evaluate({\n ...suite.input,\n ...overrides,\n cases: overrides?.cases ?? suite.input.cases,\n });\n const finishedAt = Date.now();\n\n return {\n caseTraceSnapshots: artifacts?.caseTraceSnapshots,\n elapsedMs: finishedAt - startedAt,\n finishedAt,\n id: generateId(),\n label: suite.label ?? suite.id,\n metadata: suite.metadata,\n response,\n startedAt,\n suiteId: suite.id,\n traceSummary: artifacts?.traceSummary,\n } satisfies RAGEvaluationSuiteRun;\n};\nexport const summarizeRAGEvaluationCase = ({\n caseIndex,\n caseInput,\n query,\n mode,\n retrievedIds,\n expectedIds,\n elapsedMs,\n retrievedSources,\n trace,\n}: {\n caseIndex: number;\n caseInput: RAGEvaluationCase;\n mode: \"chunkId\" | \"source\" | \"documentId\";\n query: string;\n retrievedIds: string[];\n expectedIds: string[];\n elapsedMs: number;\n retrievedSources?: RAGSource[];\n trace?: RAGSearchTraceRecord | RAGRetrievalTrace;\n}): RAGEvaluationCaseResult => {\n const expectedSet = new Set(expectedIds);\n const retrievedSet = new Set(retrievedIds);\n const matchedIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => retrievedSet.has(id)),\n );\n const missingIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => !retrievedSet.has(id)),\n );\n const matchedCount = matchedIds.length;\n const retrievedCount = retrievedIds.length;\n const expectedCount = expectedIds.length;\n const precision = retrievedCount > 0 ? matchedCount / retrievedCount : 0;\n const recall = expectedCount > 0 ? matchedCount / expectedCount : 0;\n const f1 =\n precision + recall > 0\n ? (2 * precision * recall) / (precision + recall)\n : 0;\n const status: RAGEvaluationCaseResult[\"status\"] =\n expectedCount === 0\n ? \"partial\"\n : matchedCount === expectedCount\n ? \"pass\"\n : matchedCount > 0\n ? \"partial\"\n : \"fail\";\n\n return {\n caseId: caseInput.id ?? `case-${caseIndex + 1}`,\n corpusKey: caseInput.corpusKey,\n elapsedMs,\n expectedCount,\n expectedIds,\n failureClasses: classifyRAGEvaluationFailure({\n expectedCount,\n matchedCount,\n missingIds,\n retrievedCount,\n retrievedIds,\n retrievedSources,\n trace,\n }),\n f1,\n label: caseInput.label,\n matchedCount,\n matchedIds,\n metadata: caseInput.metadata,\n missingIds,\n mode,\n precision,\n query,\n recall,\n retrievedCount,\n retrievedIds,\n status,\n topK: typeof caseInput.topK === \"number\" ? caseInput.topK : DEFAULT_TOP_K,\n };\n};\nexport const summarizeRAGRerankerComparison = (\n entries: RAGRerankerComparisonEntry[],\n): RAGRerankerComparisonSummary => {\n return summarizeEvaluationResponseComparison(\n entries,\n \"rerankerId\",\n ) satisfies RAGRerankerComparisonSummary;\n};\nexport const summarizeRAGRetrievalComparison = (\n entries: RAGRetrievalComparisonEntry[],\n): RAGRetrievalComparisonSummary => ({\n ...summarizeEvaluationResponseComparison(entries, \"retrievalId\"),\n bestByPresentationTitleCueCases: selectComparisonEntryByPresentationCueCases(\n entries,\n \"retrievalId\",\n \"title\",\n ),\n bestByPresentationBodyCueCases: selectComparisonEntryByPresentationCueCases(\n entries,\n \"retrievalId\",\n \"body\",\n ),\n bestByPresentationNotesCueCases: selectComparisonEntryByPresentationCueCases(\n entries,\n \"retrievalId\",\n \"notes\",\n ),\n bestBySpreadsheetSheetCueCases: selectComparisonEntryBySpreadsheetCueCases(\n entries,\n \"retrievalId\",\n \"sheet\",\n ),\n bestBySpreadsheetTableCueCases: selectComparisonEntryBySpreadsheetCueCases(\n entries,\n \"retrievalId\",\n \"table\",\n ),\n bestBySpreadsheetColumnCueCases: selectComparisonEntryBySpreadsheetCueCases(\n entries,\n \"retrievalId\",\n \"column\",\n ),\n bestByMultivectorCollapsedCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"multiVectorCollapsedCases\",\n ),\n bestByMultivectorLexicalHitCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"multiVectorLexicalHitCases\",\n ),\n bestByMultivectorVectorHitCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"multiVectorVectorHitCases\",\n ),\n bestByEvidenceReconcileCases: selectComparisonEntryByTraceStageCount(\n entries,\n \"retrievalId\",\n \"evidence_reconcile\",\n ),\n bestByOfficeEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeEvidenceReconcileCases\",\n ),\n bestByOfficeParagraphEvidenceReconcileCases:\n selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeParagraphEvidenceReconcileCases\",\n ),\n bestByOfficeListEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeListEvidenceReconcileCases\",\n ),\n bestByOfficeTableEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeTableEvidenceReconcileCases\",\n ),\n bestByPDFEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"pdfEvidenceReconcileCases\",\n ),\n bestByLowestRuntimeCandidateBudgetExhaustedCases:\n selectComparisonEntryByLowestTraceMetric(\n entries,\n \"retrievalId\",\n \"runtimeCandidateBudgetExhaustedCases\",\n ),\n bestByLowestRuntimeUnderfilledTopKCases:\n selectComparisonEntryByLowestTraceMetric(\n entries,\n \"retrievalId\",\n \"runtimeUnderfilledTopKCases\",\n ),\n});\n",
5
+ "import { mkdir, readFile } from \"node:fs/promises\";\nimport { writeFileAtomic } from \"./atomicWrite\";\nimport { dirname } from \"node:path\";\nimport type { Database } from \"bun:sqlite\";\nimport type {\n RAGAnswerGroundingCaseDifficultyDiffEntry,\n RAGAnswerGroundingCaseDifficultyHistory,\n RAGAnswerGroundingCaseDifficultyHistoryStore,\n RAGAnswerGroundingCaseDifficultyRun,\n RAGAnswerGroundingCaseDifficultyRunDiff,\n RAGAnswerGroundingEvaluationCaseDiff,\n RAGAnswerGroundingEvaluationCase,\n RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n RAGAnswerGroundingEvaluationCaseSnapshot,\n RAGAnswerGroundingEvaluationCaseResult,\n RAGAnswerGroundingEvaluationHistory,\n RAGAnswerGroundingEvaluationLeaderboardEntry,\n RAGAnswerGroundingEvaluationHistoryStore,\n RAGAnswerGroundingEvaluationInput,\n RAGAnswerGroundingEvaluationResponse,\n RAGAnswerGroundingEvaluationRun,\n RAGAnswerGroundingEvaluationRunDiff,\n RAGCollection,\n RAGIndexedDocument,\n RAGEvaluationCase,\n RAGEvaluationCaseDiff,\n RAGEvaluationCaseTraceSnapshot,\n RAGEvaluationCaseResult,\n RAGEvaluationHistory,\n RAGEvaluationHistoryStore,\n RAGEvaluationHistoryPruneInput,\n RAGEvaluationHistoryPruneResult,\n RAGEvaluationInput,\n RAGEvaluationLeaderboardEntry,\n RAGEvaluationResponse,\n RAGEvaluationRunDiff,\n RAGLabelValueRow,\n RAGComparisonPresentation,\n RAGComparisonOverviewPresentation,\n RAGGroundingProviderPresentation,\n RAGGroundingProviderOverviewPresentation,\n RAGGroundingProviderCaseComparisonPresentation,\n RAGGroundingOverviewPresentation,\n RAGQualityOverviewPresentation,\n RAGDocumentChunk,\n RAGEvaluationSuite,\n RAGEvaluationSuiteGenerationOptions,\n RAGEvaluationSuiteDatasetSummary,\n RAGEvaluationSuiteSnapshot,\n RAGEvaluationSuiteSnapshotDiff,\n RAGEvaluationSuiteSnapshotHistory,\n RAGEvaluationSuiteSnapshotHistoryStore,\n RAGEvaluationSuiteRun,\n RAGEvaluationEntityQualitySummary,\n RAGEvaluationEntityQualityView,\n RAGAnswerGroundingEntityQualitySummary,\n RAGAnswerGroundingEntityQualityView,\n RAGRetrievalTraceSummaryRun,\n RAGHybridRetrievalMode,\n RAGSourceBalanceStrategy,\n RAGRetrievalCandidate,\n RAGRetrievalComparison,\n RAGRetrievalBaselineGatePolicy,\n RAGRetrievalBaselineGatePolicyHistoryRecord,\n RAGRetrievalBaselineGatePolicyHistoryStore,\n RAGRetrievalComparisonDecisionSummary,\n RAGRetrievalComparisonGateResult,\n RAGRetrievalReleaseVerdict,\n RAGRetrievalComparisonHistoryStore,\n RAGRetrievalBaselineRecord,\n RAGRetrievalBaselineStore,\n RAGRetrievalLaneHandoffDecisionRecord,\n RAGRetrievalLaneHandoffDecisionStore,\n RAGRetrievalLaneHandoffIncidentHistoryRecord,\n RAGRetrievalLaneHandoffIncidentHistoryStore,\n RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore,\n RAGRetrievalLaneHandoffIncidentRecord,\n RAGRetrievalLaneHandoffIncidentStore,\n RAGRetrievalIncidentRemediationDecisionRecord,\n RAGRetrievalIncidentRemediationDecisionStore,\n RAGRetrievalIncidentRemediationExecutionHistoryRecord,\n RAGRetrievalIncidentRemediationExecutionHistoryStore,\n RAGRetrievalReleaseDecisionRecord,\n RAGRetrievalReleaseLanePolicyHistoryRecord,\n RAGRetrievalReleaseLanePolicyHistoryStore,\n RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n RAGRetrievalReleaseLaneEscalationPolicyHistoryStore,\n RAGRetrievalReleaseDecisionStore,\n RAGRetrievalReleaseIncidentRecord,\n RAGRetrievalReleaseIncidentStore,\n RAGRetrievalComparisonRun,\n RAGRetrievalComparisonEntry,\n RAGRetrievalTrace,\n RAGRetrievalTraceComparisonSummary,\n RAGRetrievalTraceComparisonSummaryDiff,\n RAGRetrievalTraceStep,\n RAGRetrievalTraceStage,\n RAGQueryResult,\n RAGTraceSummaryListTrend,\n RAGTraceSummaryTrendDirection,\n RAGTraceSummaryNumericDelta,\n RAGTraceSummaryStageTrend,\n RAGTraceSummaryStageCountsDelta,\n RAGRetrievalComparisonSummary,\n RAGRetrievalTraceHistoryWindow,\n RAGRerankerCandidate,\n RAGRerankerComparison,\n RAGRerankerComparisonEntry,\n RAGRerankerComparisonSummary,\n RAGRerankerProviderLike,\n RAGRetrievalTraceTrend,\n RAGSearchTraceDiff,\n RAGSearchTraceGroupHistory,\n RAGSearchTraceGroupHistoryEntry,\n RAGSearchTraceHistory,\n RAGChatPluginConfig,\n RAGSearchTracePruneInput,\n RAGSearchTracePruneHistoryStore,\n RAGSearchTracePruneRun,\n RAGSearchTracePrunePreview,\n RAGSearchTracePruneResult,\n RAGSearchTraceRecord,\n RAGSearchTraceResultSnapshot,\n RAGSearchTraceStats,\n RAGSearchTraceStore,\n RAGRemediationAction,\n RAGSource,\n RAGCollectionSearchParams,\n RAGSQLiteStoreMigrationInspection,\n RAGSQLiteStoreMigrationIssue,\n RAGSQLiteStoreMigrationResult,\n} from \"@absolutejs/ai\";\nimport { generateId } from \"@absolutejs/ai\";\nimport { buildRAGGroundedAnswer } from \"./grounding\";\nimport { buildRAGSourceLabels } from \"./presentation\";\n\nconst DEFAULT_TOP_K = 6;\nconst DEFAULT_HISTORY_LIMIT = 20;\nconst DEFAULT_SEARCH_TRACE_TABLE_NAME = \"rag_search_traces\";\n\nconst getTraceLabelString = (value: unknown) =>\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n\nconst getTraceLabelNumber = (value: unknown) =>\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n\nconst formatTraceSpreadsheetTableLabel = (\n tableIndex?: number,\n tableCount?: number,\n) => {\n if (\n typeof tableIndex !== \"number\" ||\n !Number.isFinite(tableIndex) ||\n tableIndex < 1\n ) {\n return undefined;\n }\n\n if (\n typeof tableCount === \"number\" &&\n Number.isFinite(tableCount) &&\n tableCount >= tableIndex\n ) {\n return `Table ${tableIndex} of ${tableCount}`;\n }\n\n return `Table ${tableIndex}`;\n};\n\nconst formatTraceSourceAwareChunkReason = (value: unknown) => {\n const reason = getTraceLabelString(value);\n if (reason === \"section_boundary\") {\n return \"Chunk boundary section\";\n }\n if (reason === \"size_limit\") {\n return \"Chunk boundary size limit\";\n }\n if (reason === \"source_native_unit\") {\n return \"Chunk boundary source-native unit\";\n }\n return undefined;\n};\n\nconst buildTraceSourceAwareUnitScopeLabel = (\n metadata?: Record<string, unknown>,\n) => {\n if (!metadata) {\n return undefined;\n }\n\n const sectionKind = getTraceLabelString(metadata.sectionKind);\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getTraceLabelString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getTraceLabelString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const pdfTextKind = getTraceLabelString(metadata.pdfTextKind);\n const officeBlockKind = getTraceLabelString(metadata.officeBlockKind);\n const sheetName = getTraceLabelString(metadata.sheetName);\n const spreadsheetTableLabel = formatTraceSpreadsheetTableLabel(\n getTraceLabelNumber(metadata.spreadsheetTableIndex),\n getTraceLabelNumber(metadata.spreadsheetTableCount),\n );\n const slideTitle = getTraceLabelString(metadata.slideTitle);\n const slideNumber =\n getTraceLabelNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n\n if (\n sectionPath.length > 0 &&\n (sectionKind === \"markdown_heading\" ||\n sectionKind === \"html_heading\" ||\n sectionKind === \"office_heading\" ||\n sectionKind === undefined)\n ) {\n return `Source-aware section ${sectionPath.join(\" > \")}`;\n }\n\n if (sectionKind === \"pdf_block\") {\n if (pdfTextKind === \"table_like\" && sectionTitle) {\n return `Source-aware PDF table block ${sectionTitle}`;\n }\n if (sectionTitle) {\n return `Source-aware PDF block ${sectionTitle}`;\n }\n return \"Source-aware PDF block\";\n }\n\n if (sectionKind === \"office_block\") {\n if (officeBlockKind && sectionTitle) {\n return `Source-aware office ${officeBlockKind} block ${sectionTitle}`;\n }\n if (sectionTitle) {\n return `Source-aware office block ${sectionTitle}`;\n }\n return \"Source-aware office block\";\n }\n\n if (\n sectionKind === \"spreadsheet_rows\" ||\n (sectionKind === undefined &&\n (sheetName ||\n spreadsheetTableLabel ||\n getTraceLabelNumber(metadata.spreadsheetRowStart) !== undefined ||\n getTraceLabelNumber(metadata.spreadsheetRowEnd) !== undefined))\n ) {\n if (sheetName && spreadsheetTableLabel) {\n return `Source-aware spreadsheet ${sheetName} ${spreadsheetTableLabel}`;\n }\n if (sheetName) {\n return `Source-aware spreadsheet ${sheetName}`;\n }\n return \"Source-aware spreadsheet\";\n }\n\n if (sectionKind === \"presentation_slide\") {\n if (slideNumber && slideTitle) {\n return `Source-aware slide ${slideNumber} ${slideTitle}`;\n }\n if (slideTitle) {\n return `Source-aware slide ${slideTitle}`;\n }\n if (slideNumber) {\n return `Source-aware slide ${slideNumber}`;\n }\n return \"Source-aware slide\";\n }\n\n return undefined;\n};\n\nconst buildEvaluationLeadSnapshot = (input?: {\n metadata?: Record<string, unknown>;\n source?: string;\n title?: string;\n}): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"topContextLabel\"\n | \"topLocatorLabel\"\n | \"sourceAwareChunkReasonLabel\"\n | \"sourceAwareUnitScopeLabel\"\n> => {\n const labels = buildRAGSourceLabels({\n metadata: input?.metadata,\n source: input?.source,\n title: input?.title,\n });\n\n return {\n sourceAwareChunkReasonLabel: formatTraceSourceAwareChunkReason(\n input?.metadata?.sourceAwareChunkReason,\n ),\n sourceAwareUnitScopeLabel: buildTraceSourceAwareUnitScopeLabel(\n input?.metadata,\n ),\n topContextLabel: labels?.contextLabel,\n topLocatorLabel: labels?.locatorLabel,\n };\n};\n\nconst buildEvaluationLeadMediaCueSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"leadSpeakerCue\"\n | \"leadSpeakerAttributionCue\"\n | \"leadChannelCue\"\n | \"leadChannelAttributionCue\"\n | \"leadContinuityCue\"\n> => {\n const rerankStep = trace?.steps.find((step) => step.stage === \"rerank\");\n const metadata = rerankStep?.metadata ?? {};\n\n return {\n leadChannelAttributionCue:\n typeof metadata.leadChannelAttributionCue === \"string\"\n ? metadata.leadChannelAttributionCue\n : undefined,\n leadChannelCue:\n typeof metadata.leadChannelCue === \"string\"\n ? metadata.leadChannelCue\n : undefined,\n leadContinuityCue:\n typeof metadata.leadContinuityCue === \"string\"\n ? metadata.leadContinuityCue\n : undefined,\n leadSpeakerAttributionCue:\n typeof metadata.leadSpeakerAttributionCue === \"string\"\n ? metadata.leadSpeakerAttributionCue\n : undefined,\n leadSpeakerCue:\n typeof metadata.leadSpeakerCue === \"string\"\n ? metadata.leadSpeakerCue\n : undefined,\n };\n};\n\nconst buildEvaluationLeadPresentationCueSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<RAGEvaluationCaseTraceSnapshot, \"leadPresentationCue\"> => {\n const rerankStep = trace?.steps.find((step) => step.stage === \"rerank\");\n const metadata = rerankStep?.metadata ?? {};\n const cue = metadata.leadPresentationCue;\n\n return {\n leadPresentationCue:\n cue === \"title\" || cue === \"body\" || cue === \"notes\" ? cue : undefined,\n };\n};\n\nconst buildEvaluationLeadSpreadsheetCueSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<RAGEvaluationCaseTraceSnapshot, \"leadSpreadsheetCue\"> => {\n const rerankStep = trace?.steps.find((step) => step.stage === \"rerank\");\n const metadata = rerankStep?.metadata ?? {};\n const cue = metadata.leadSpreadsheetCue;\n\n return {\n leadSpreadsheetCue:\n cue === \"sheet\" || cue === \"table\" || cue === \"column\" ? cue : undefined,\n };\n};\n\nconst buildEvaluationSQLiteQueryPlanSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"sqliteQueryMode\"\n | \"sqliteQueryPushdownMode\"\n | \"sqliteQueryPushdownApplied\"\n | \"sqliteQueryPushdownClauseCount\"\n | \"sqliteQueryTotalFilterClauseCount\"\n | \"sqliteQueryJsRemainderClauseCount\"\n | \"sqliteQueryMultiplierUsed\"\n | \"sqliteQueryCandidateLimitUsed\"\n | \"sqliteQueryMaxBackfillsUsed\"\n | \"sqliteQueryMinResultsUsed\"\n | \"sqliteQueryFillPolicyUsed\"\n | \"sqliteQueryPushdownCoverageRatio\"\n | \"sqliteQueryJsRemainderRatio\"\n | \"sqliteQueryFilteredCandidates\"\n | \"sqliteQueryInitialSearchK\"\n | \"sqliteQueryFinalSearchK\"\n | \"sqliteQuerySearchExpansionRatio\"\n | \"sqliteQueryBackfillCount\"\n | \"sqliteQueryBackfillLimitReached\"\n | \"sqliteQueryMinResultsSatisfied\"\n | \"sqliteQueryReturnedCount\"\n | \"sqliteQueryCandidateYieldRatio\"\n | \"sqliteQueryTopKFillRatio\"\n | \"sqliteQueryUnderfilledTopK\"\n | \"sqliteQueryCandidateBudgetExhausted\"\n | \"sqliteQueryCandidateCoverage\"\n> => {\n const vectorStep = trace?.steps.find(\n (step) => step.stage === \"vector_search\",\n );\n const metadata = vectorStep?.metadata ?? {};\n\n return {\n sqliteQueryBackfillCount:\n typeof metadata.sqliteQueryBackfillCount === \"number\"\n ? metadata.sqliteQueryBackfillCount\n : undefined,\n sqliteQueryCandidateBudgetExhausted:\n typeof metadata.sqliteQueryCandidateBudgetExhausted === \"boolean\"\n ? metadata.sqliteQueryCandidateBudgetExhausted\n : undefined,\n sqliteQueryCandidateCoverage:\n metadata.sqliteQueryCandidateCoverage === \"empty\" ||\n metadata.sqliteQueryCandidateCoverage === \"under_target\" ||\n metadata.sqliteQueryCandidateCoverage === \"target_sized\" ||\n metadata.sqliteQueryCandidateCoverage === \"broad\"\n ? metadata.sqliteQueryCandidateCoverage\n : undefined,\n sqliteQueryFilteredCandidates:\n typeof metadata.sqliteQueryFilteredCandidates === \"number\"\n ? metadata.sqliteQueryFilteredCandidates\n : undefined,\n sqliteQueryFinalSearchK:\n typeof metadata.sqliteQueryFinalSearchK === \"number\"\n ? metadata.sqliteQueryFinalSearchK\n : undefined,\n sqliteQueryInitialSearchK:\n typeof metadata.sqliteQueryInitialSearchK === \"number\"\n ? metadata.sqliteQueryInitialSearchK\n : undefined,\n sqliteQuerySearchExpansionRatio:\n typeof metadata.sqliteQuerySearchExpansionRatio === \"number\"\n ? metadata.sqliteQuerySearchExpansionRatio\n : undefined,\n sqliteQueryMode:\n metadata.sqliteQueryMode === \"json_fallback\" ||\n metadata.sqliteQueryMode === \"native_vec0\"\n ? metadata.sqliteQueryMode\n : undefined,\n sqliteQueryPushdownMode:\n metadata.sqliteQueryPushdownMode === \"none\" ||\n metadata.sqliteQueryPushdownMode === \"partial\" ||\n metadata.sqliteQueryPushdownMode === \"full\"\n ? metadata.sqliteQueryPushdownMode\n : undefined,\n sqliteQueryPushdownApplied:\n typeof metadata.sqliteQueryPushdownApplied === \"boolean\"\n ? metadata.sqliteQueryPushdownApplied\n : undefined,\n sqliteQueryPushdownClauseCount:\n typeof metadata.sqliteQueryPushdownClauseCount === \"number\"\n ? metadata.sqliteQueryPushdownClauseCount\n : undefined,\n sqliteQueryTotalFilterClauseCount:\n typeof metadata.sqliteQueryTotalFilterClauseCount === \"number\"\n ? metadata.sqliteQueryTotalFilterClauseCount\n : undefined,\n sqliteQueryJsRemainderClauseCount:\n typeof metadata.sqliteQueryJsRemainderClauseCount === \"number\"\n ? metadata.sqliteQueryJsRemainderClauseCount\n : undefined,\n sqliteQueryMultiplierUsed:\n typeof metadata.sqliteQueryMultiplierUsed === \"number\"\n ? metadata.sqliteQueryMultiplierUsed\n : undefined,\n sqliteQueryCandidateLimitUsed:\n typeof metadata.sqliteQueryCandidateLimitUsed === \"number\"\n ? metadata.sqliteQueryCandidateLimitUsed\n : undefined,\n sqliteQueryMaxBackfillsUsed:\n typeof metadata.sqliteQueryMaxBackfillsUsed === \"number\"\n ? metadata.sqliteQueryMaxBackfillsUsed\n : undefined,\n sqliteQueryMinResultsUsed:\n typeof metadata.sqliteQueryMinResultsUsed === \"number\"\n ? metadata.sqliteQueryMinResultsUsed\n : undefined,\n sqliteQueryFillPolicyUsed:\n metadata.sqliteQueryFillPolicyUsed === \"strict_topk\" ||\n metadata.sqliteQueryFillPolicyUsed === \"satisfy_min_results\"\n ? metadata.sqliteQueryFillPolicyUsed\n : undefined,\n sqliteQueryPushdownCoverageRatio:\n typeof metadata.sqliteQueryPushdownCoverageRatio === \"number\"\n ? metadata.sqliteQueryPushdownCoverageRatio\n : undefined,\n sqliteQueryJsRemainderRatio:\n typeof metadata.sqliteQueryJsRemainderRatio === \"number\"\n ? metadata.sqliteQueryJsRemainderRatio\n : undefined,\n sqliteQueryReturnedCount:\n typeof metadata.sqliteQueryReturnedCount === \"number\"\n ? metadata.sqliteQueryReturnedCount\n : undefined,\n sqliteQueryCandidateYieldRatio:\n typeof metadata.sqliteQueryCandidateYieldRatio === \"number\"\n ? metadata.sqliteQueryCandidateYieldRatio\n : undefined,\n sqliteQueryBackfillLimitReached:\n typeof metadata.sqliteQueryBackfillLimitReached === \"boolean\"\n ? metadata.sqliteQueryBackfillLimitReached\n : undefined,\n sqliteQueryMinResultsSatisfied:\n typeof metadata.sqliteQueryMinResultsSatisfied === \"boolean\"\n ? metadata.sqliteQueryMinResultsSatisfied\n : undefined,\n sqliteQueryTopKFillRatio:\n typeof metadata.sqliteQueryTopKFillRatio === \"number\"\n ? metadata.sqliteQueryTopKFillRatio\n : undefined,\n sqliteQueryUnderfilledTopK:\n typeof metadata.sqliteQueryUnderfilledTopK === \"boolean\"\n ? metadata.sqliteQueryUnderfilledTopK\n : undefined,\n };\n};\n\nconst buildEvaluationPostgresQueryPlanSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"postgresQueryMode\"\n | \"postgresQueryPushdownMode\"\n | \"postgresQueryPushdownApplied\"\n | \"postgresQueryPushdownClauseCount\"\n | \"postgresQueryTotalFilterClauseCount\"\n | \"postgresQueryJsRemainderClauseCount\"\n | \"postgresQueryMultiplierUsed\"\n | \"postgresQueryCandidateLimitUsed\"\n | \"postgresQueryMaxBackfillsUsed\"\n | \"postgresQueryMinResultsUsed\"\n | \"postgresQueryFillPolicyUsed\"\n | \"postgresQueryPushdownCoverageRatio\"\n | \"postgresQueryJsRemainderRatio\"\n | \"postgresQueryFilteredCandidates\"\n | \"postgresQueryInitialSearchK\"\n | \"postgresQueryFinalSearchK\"\n | \"postgresQuerySearchExpansionRatio\"\n | \"postgresQueryBackfillCount\"\n | \"postgresQueryBackfillLimitReached\"\n | \"postgresQueryMinResultsSatisfied\"\n | \"postgresQueryReturnedCount\"\n | \"postgresQueryCandidateYieldRatio\"\n | \"postgresQueryTopKFillRatio\"\n | \"postgresQueryUnderfilledTopK\"\n | \"postgresQueryCandidateBudgetExhausted\"\n | \"postgresQueryCandidateCoverage\"\n> => {\n const vectorStep = trace?.steps.find(\n (step) => step.stage === \"vector_search\",\n );\n const metadata = vectorStep?.metadata ?? {};\n\n return {\n postgresQueryBackfillCount:\n typeof metadata.postgresQueryBackfillCount === \"number\"\n ? metadata.postgresQueryBackfillCount\n : undefined,\n postgresQueryCandidateBudgetExhausted:\n typeof metadata.postgresQueryCandidateBudgetExhausted === \"boolean\"\n ? metadata.postgresQueryCandidateBudgetExhausted\n : undefined,\n postgresQueryCandidateCoverage:\n metadata.postgresQueryCandidateCoverage === \"empty\" ||\n metadata.postgresQueryCandidateCoverage === \"under_target\" ||\n metadata.postgresQueryCandidateCoverage === \"target_sized\" ||\n metadata.postgresQueryCandidateCoverage === \"broad\"\n ? metadata.postgresQueryCandidateCoverage\n : undefined,\n postgresQueryFilteredCandidates:\n typeof metadata.postgresQueryFilteredCandidates === \"number\"\n ? metadata.postgresQueryFilteredCandidates\n : undefined,\n postgresQueryFinalSearchK:\n typeof metadata.postgresQueryFinalSearchK === \"number\"\n ? metadata.postgresQueryFinalSearchK\n : undefined,\n postgresQueryInitialSearchK:\n typeof metadata.postgresQueryInitialSearchK === \"number\"\n ? metadata.postgresQueryInitialSearchK\n : undefined,\n postgresQuerySearchExpansionRatio:\n typeof metadata.postgresQuerySearchExpansionRatio === \"number\"\n ? metadata.postgresQuerySearchExpansionRatio\n : undefined,\n postgresQueryMode:\n metadata.postgresQueryMode === \"native_pgvector\"\n ? metadata.postgresQueryMode\n : undefined,\n postgresQueryPushdownMode:\n metadata.postgresQueryPushdownMode === \"none\" ||\n metadata.postgresQueryPushdownMode === \"partial\" ||\n metadata.postgresQueryPushdownMode === \"full\"\n ? metadata.postgresQueryPushdownMode\n : undefined,\n postgresQueryPushdownApplied:\n typeof metadata.postgresQueryPushdownApplied === \"boolean\"\n ? metadata.postgresQueryPushdownApplied\n : undefined,\n postgresQueryPushdownClauseCount:\n typeof metadata.postgresQueryPushdownClauseCount === \"number\"\n ? metadata.postgresQueryPushdownClauseCount\n : undefined,\n postgresQueryTotalFilterClauseCount:\n typeof metadata.postgresQueryTotalFilterClauseCount === \"number\"\n ? metadata.postgresQueryTotalFilterClauseCount\n : undefined,\n postgresQueryJsRemainderClauseCount:\n typeof metadata.postgresQueryJsRemainderClauseCount === \"number\"\n ? metadata.postgresQueryJsRemainderClauseCount\n : undefined,\n postgresQueryMultiplierUsed:\n typeof metadata.postgresQueryMultiplierUsed === \"number\"\n ? metadata.postgresQueryMultiplierUsed\n : undefined,\n postgresQueryCandidateLimitUsed:\n typeof metadata.postgresQueryCandidateLimitUsed === \"number\"\n ? metadata.postgresQueryCandidateLimitUsed\n : undefined,\n postgresQueryMaxBackfillsUsed:\n typeof metadata.postgresQueryMaxBackfillsUsed === \"number\"\n ? metadata.postgresQueryMaxBackfillsUsed\n : undefined,\n postgresQueryMinResultsUsed:\n typeof metadata.postgresQueryMinResultsUsed === \"number\"\n ? metadata.postgresQueryMinResultsUsed\n : undefined,\n postgresQueryFillPolicyUsed:\n metadata.postgresQueryFillPolicyUsed === \"strict_topk\" ||\n metadata.postgresQueryFillPolicyUsed === \"satisfy_min_results\"\n ? metadata.postgresQueryFillPolicyUsed\n : undefined,\n postgresQueryPushdownCoverageRatio:\n typeof metadata.postgresQueryPushdownCoverageRatio === \"number\"\n ? metadata.postgresQueryPushdownCoverageRatio\n : undefined,\n postgresQueryJsRemainderRatio:\n typeof metadata.postgresQueryJsRemainderRatio === \"number\"\n ? metadata.postgresQueryJsRemainderRatio\n : undefined,\n postgresQueryReturnedCount:\n typeof metadata.postgresQueryReturnedCount === \"number\"\n ? metadata.postgresQueryReturnedCount\n : undefined,\n postgresQueryCandidateYieldRatio:\n typeof metadata.postgresQueryCandidateYieldRatio === \"number\"\n ? metadata.postgresQueryCandidateYieldRatio\n : undefined,\n postgresQueryBackfillLimitReached:\n typeof metadata.postgresQueryBackfillLimitReached === \"boolean\"\n ? metadata.postgresQueryBackfillLimitReached\n : undefined,\n postgresQueryMinResultsSatisfied:\n typeof metadata.postgresQueryMinResultsSatisfied === \"boolean\"\n ? metadata.postgresQueryMinResultsSatisfied\n : undefined,\n postgresQueryTopKFillRatio:\n typeof metadata.postgresQueryTopKFillRatio === \"number\"\n ? metadata.postgresQueryTopKFillRatio\n : undefined,\n postgresQueryUnderfilledTopK:\n typeof metadata.postgresQueryUnderfilledTopK === \"boolean\"\n ? metadata.postgresQueryUnderfilledTopK\n : undefined,\n };\n};\nconst DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME =\n \"rag_retrieval_comparison_history\";\nconst DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME =\n \"rag_retrieval_release_decisions\";\nconst DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME = \"rag_retrieval_baselines\";\nconst DEFAULT_RETRIEVAL_RELEASE_INCIDENT_TABLE_NAME =\n \"rag_retrieval_release_incidents\";\ntype BunSQLiteModule = {\n Database: new (path?: string) => Database;\n};\n\ntype ImportMetaWithRequire = ImportMeta & {\n require?: (specifier: string) => unknown;\n};\n\nconst loadBunSQLiteModule = (): BunSQLiteModule => {\n const runtimeRequire = (import.meta as ImportMetaWithRequire).require;\n if (typeof runtimeRequire !== \"function\") {\n throw new Error(\n \"SQLite trace storage requires Bun runtime support for import.meta.require.\",\n );\n }\n\n return runtimeRequire(\"bun:sqlite\") as BunSQLiteModule;\n};\n\nconst normalizeStringArray = (value: unknown) => {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .filter((candidate) => typeof candidate === \"string\")\n .map((candidate) => candidate.trim())\n .filter((candidate) => candidate.length > 0);\n};\n\nconst normalizeLabelFilter = (value?: string) => {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const normalized = value.trim().toLowerCase();\n return normalized.length > 0 ? normalized : undefined;\n};\n\nconst normalizeRetrievalBaselineRecords = (\n records: RAGRetrievalBaselineRecord[],\n) => [...records].sort((left, right) => right.promotedAt - left.promotedAt);\n\nconst normalizeRetrievalReleaseDecisionRecords = (\n records: RAGRetrievalReleaseDecisionRecord[],\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalLaneHandoffDecisionRecords = (\n records: RAGRetrievalLaneHandoffDecisionRecord[],\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalReleaseIncidentRecords = (\n records: RAGRetrievalReleaseIncidentRecord[],\n) => [...records].sort((left, right) => right.triggeredAt - left.triggeredAt);\n\nconst normalizeRetrievalIncidentRemediationDecisionRecords = (\n records: RAGRetrievalIncidentRemediationDecisionRecord[],\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalIncidentRemediationExecutionHistoryRecords = (\n records: RAGRetrievalIncidentRemediationExecutionHistoryRecord[],\n) => [...records].sort((left, right) => right.executedAt - left.executedAt);\n\nconst matchesWinner = (run: RAGRetrievalComparisonRun, winnerId?: string) => {\n if (!winnerId) {\n return true;\n }\n\n return (\n run.comparison.summary.bestByPassingRate === winnerId ||\n run.decisionSummary?.winnerByPassingRate === winnerId\n );\n};\n\nconst findRetrievalComparisonEntry = (\n comparison: RAGRetrievalComparison,\n retrievalId?: string,\n) => {\n if (!retrievalId) {\n return undefined;\n }\n\n return comparison.entries.find((entry) => entry.retrievalId === retrievalId);\n};\n\nconst evaluateRetrievalComparisonGate = ({\n delta,\n policy,\n}: {\n delta?: {\n passingRateDelta: number;\n averageF1Delta: number;\n elapsedMsDelta: number;\n presentationTitleCueCasesDelta?: number;\n presentationBodyCueCasesDelta?: number;\n presentationNotesCueCasesDelta?: number;\n spreadsheetSheetCueCasesDelta?: number;\n spreadsheetTableCueCasesDelta?: number;\n spreadsheetColumnCueCasesDelta?: number;\n multiVectorCollapsedCasesDelta?: number;\n multiVectorLexicalHitCasesDelta?: number;\n multiVectorVectorHitCasesDelta?: number;\n evidenceReconcileCasesDelta?: number;\n runtimeCandidateBudgetExhaustedCasesDelta?: number;\n runtimeUnderfilledTopKCasesDelta?: number;\n };\n policy?: RAGRetrievalBaselineGatePolicy;\n}): RAGRetrievalComparisonGateResult | undefined => {\n if (!delta || !policy) {\n return undefined;\n }\n\n const reasons: string[] = [];\n if (\n typeof policy.minPassingRateDelta === \"number\" &&\n delta.passingRateDelta < policy.minPassingRateDelta\n ) {\n reasons.push(\n `passing rate delta ${delta.passingRateDelta} is below ${policy.minPassingRateDelta}`,\n );\n }\n if (\n typeof policy.minAverageF1Delta === \"number\" &&\n delta.averageF1Delta < policy.minAverageF1Delta\n ) {\n reasons.push(\n `average F1 delta ${delta.averageF1Delta} is below ${policy.minAverageF1Delta}`,\n );\n }\n if (\n typeof policy.maxElapsedMsDelta === \"number\" &&\n delta.elapsedMsDelta > policy.maxElapsedMsDelta\n ) {\n reasons.push(\n `elapsed ms delta ${delta.elapsedMsDelta} exceeds ${policy.maxElapsedMsDelta}`,\n );\n }\n if (\n typeof policy.minPresentationTitleCueCasesDelta === \"number\" &&\n (delta.presentationTitleCueCasesDelta ?? 0) <\n policy.minPresentationTitleCueCasesDelta\n ) {\n reasons.push(\n `presentation title cue delta ${delta.presentationTitleCueCasesDelta ?? 0} is below ${policy.minPresentationTitleCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minPresentationBodyCueCasesDelta === \"number\" &&\n (delta.presentationBodyCueCasesDelta ?? 0) <\n policy.minPresentationBodyCueCasesDelta\n ) {\n reasons.push(\n `presentation body cue delta ${delta.presentationBodyCueCasesDelta ?? 0} is below ${policy.minPresentationBodyCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minPresentationNotesCueCasesDelta === \"number\" &&\n (delta.presentationNotesCueCasesDelta ?? 0) <\n policy.minPresentationNotesCueCasesDelta\n ) {\n reasons.push(\n `presentation notes cue delta ${delta.presentationNotesCueCasesDelta ?? 0} is below ${policy.minPresentationNotesCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minSpreadsheetSheetCueCasesDelta === \"number\" &&\n (delta.spreadsheetSheetCueCasesDelta ?? 0) <\n policy.minSpreadsheetSheetCueCasesDelta\n ) {\n reasons.push(\n `spreadsheet sheet cue delta ${delta.spreadsheetSheetCueCasesDelta ?? 0} is below ${policy.minSpreadsheetSheetCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minSpreadsheetTableCueCasesDelta === \"number\" &&\n (delta.spreadsheetTableCueCasesDelta ?? 0) <\n policy.minSpreadsheetTableCueCasesDelta\n ) {\n reasons.push(\n `spreadsheet table cue delta ${delta.spreadsheetTableCueCasesDelta ?? 0} is below ${policy.minSpreadsheetTableCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minSpreadsheetColumnCueCasesDelta === \"number\" &&\n (delta.spreadsheetColumnCueCasesDelta ?? 0) <\n policy.minSpreadsheetColumnCueCasesDelta\n ) {\n reasons.push(\n `spreadsheet column cue delta ${delta.spreadsheetColumnCueCasesDelta ?? 0} is below ${policy.minSpreadsheetColumnCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minMultiVectorCollapsedCasesDelta === \"number\" &&\n (delta.multiVectorCollapsedCasesDelta ?? 0) <\n policy.minMultiVectorCollapsedCasesDelta\n ) {\n reasons.push(\n `multivector collapsed delta ${delta.multiVectorCollapsedCasesDelta ?? 0} is below ${policy.minMultiVectorCollapsedCasesDelta}`,\n );\n }\n if (\n typeof policy.minMultiVectorLexicalHitCasesDelta === \"number\" &&\n (delta.multiVectorLexicalHitCasesDelta ?? 0) <\n policy.minMultiVectorLexicalHitCasesDelta\n ) {\n reasons.push(\n `multivector lexical-hit delta ${delta.multiVectorLexicalHitCasesDelta ?? 0} is below ${policy.minMultiVectorLexicalHitCasesDelta}`,\n );\n }\n if (\n typeof policy.minMultiVectorVectorHitCasesDelta === \"number\" &&\n (delta.multiVectorVectorHitCasesDelta ?? 0) <\n policy.minMultiVectorVectorHitCasesDelta\n ) {\n reasons.push(\n `multivector vector-hit delta ${delta.multiVectorVectorHitCasesDelta ?? 0} is below ${policy.minMultiVectorVectorHitCasesDelta}`,\n );\n }\n if (\n typeof policy.minEvidenceReconcileCasesDelta === \"number\" &&\n (delta.evidenceReconcileCasesDelta ?? 0) <\n policy.minEvidenceReconcileCasesDelta\n ) {\n reasons.push(\n `evidence reconcile delta ${delta.evidenceReconcileCasesDelta ?? 0} is below ${policy.minEvidenceReconcileCasesDelta}`,\n );\n }\n if (\n typeof policy.maxRuntimeCandidateBudgetExhaustedCasesDelta === \"number\" &&\n (delta.runtimeCandidateBudgetExhaustedCasesDelta ?? 0) >\n policy.maxRuntimeCandidateBudgetExhaustedCasesDelta\n ) {\n reasons.push(\n `runtime candidate-budget-exhausted delta ${delta.runtimeCandidateBudgetExhaustedCasesDelta ?? 0} exceeds ${policy.maxRuntimeCandidateBudgetExhaustedCasesDelta}`,\n );\n }\n if (\n typeof policy.maxRuntimeUnderfilledTopKCasesDelta === \"number\" &&\n (delta.runtimeUnderfilledTopKCasesDelta ?? 0) >\n policy.maxRuntimeUnderfilledTopKCasesDelta\n ) {\n reasons.push(\n `runtime underfilled-topk delta ${delta.runtimeUnderfilledTopKCasesDelta ?? 0} exceeds ${policy.maxRuntimeUnderfilledTopKCasesDelta}`,\n );\n }\n\n if (reasons.length === 0) {\n return {\n policy,\n reasons: [],\n status: \"pass\",\n };\n }\n\n return {\n policy,\n reasons,\n status: policy.severity === \"warn\" ? \"warn\" : \"fail\",\n };\n};\n\nexport const buildRAGRetrievalReleaseVerdict = ({\n groupKey,\n decisionSummary,\n}: {\n groupKey?: string;\n decisionSummary?: RAGRetrievalComparisonDecisionSummary;\n}): RAGRetrievalReleaseVerdict | undefined => {\n if (!decisionSummary) {\n return undefined;\n }\n\n const gate = decisionSummary.gate;\n const delta = decisionSummary.delta;\n const baselineRetrievalId = decisionSummary.baselineRetrievalId;\n const candidateRetrievalId = decisionSummary.candidateRetrievalId;\n\n if (gate) {\n if (gate.status === \"pass\") {\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n delta,\n gate,\n status: \"pass\",\n summary: \"Candidate passed the active baseline gate.\",\n };\n }\n\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n delta,\n gate,\n status: gate.status,\n summary:\n gate.status === \"warn\"\n ? \"Candidate triggered a baseline gate warning.\"\n : \"Candidate failed the active baseline gate.\",\n };\n }\n\n if (delta) {\n const requiresReview =\n delta.passingRateDelta < 0 ||\n delta.averageF1Delta < 0 ||\n (delta.evidenceReconcileCasesDelta ?? 0) < 0 ||\n (delta.presentationTitleCueCasesDelta ?? 0) < 0 ||\n (delta.presentationBodyCueCasesDelta ?? 0) < 0 ||\n (delta.presentationNotesCueCasesDelta ?? 0) < 0 ||\n (delta.spreadsheetSheetCueCasesDelta ?? 0) < 0 ||\n (delta.spreadsheetTableCueCasesDelta ?? 0) < 0 ||\n (delta.spreadsheetColumnCueCasesDelta ?? 0) < 0;\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n delta,\n status: requiresReview ? \"needs_review\" : \"pass\",\n summary: requiresReview\n ? \"Candidate should be reviewed before promotion.\"\n : \"Candidate improved or matched the baseline.\",\n };\n }\n\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n status: \"needs_review\",\n summary: \"No explicit baseline verdict could be determined.\",\n };\n};\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\";\n\nconst parseJSONRecord = (value: string | null) => {\n if (value === null) {\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(value);\n\n return isObjectRecord(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst parseJSONArray = <T>(value: string | null, fallback: T[]): T[] => {\n if (value === null) {\n return fallback;\n }\n\n try {\n const parsed = JSON.parse(value);\n\n return Array.isArray(parsed) ? (parsed as T[]) : fallback;\n } catch {\n return fallback;\n }\n};\n\nconst normalizeExpectedIds = (input: string[]) =>\n Array.from(new Set(input.map((item) => item.trim()).filter(Boolean)));\n\nconst hasSourceExtension = (\n value: string | undefined,\n extensions: string[],\n) => {\n if (!value) {\n return false;\n }\n const normalized = value.trim().toLowerCase();\n\n return extensions.some((extension) => normalized.endsWith(extension));\n};\n\nconst hasMetadataNumber = (\n metadata: Record<string, unknown> | undefined,\n key: string,\n) => typeof metadata?.[key] === \"number\";\n\nconst hasMetadataString = (\n metadata: Record<string, unknown> | undefined,\n key: string,\n) => typeof metadata?.[key] === \"string\" && metadata[key] !== \"\";\n\nconst hasMetadataArray = (\n metadata: Record<string, unknown> | undefined,\n key: string,\n) => Array.isArray(metadata?.[key]) && metadata[key].length > 0;\n\nconst detectSectionEvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n sources.some(\n (source) =>\n hasMetadataArray(source.metadata, \"sectionPath\") ||\n hasMetadataString(source.metadata, \"sectionTitle\") ||\n hasMetadataString(source.metadata, \"sectionKind\"),\n );\n\nconst detectSectionGraphEvidence = (\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n sources.some(\n (source) =>\n hasMetadataString(source.metadata, \"sectionChunkId\") ||\n hasMetadataNumber(source.metadata, \"sectionChunkIndex\") ||\n (hasMetadataNumber(source.metadata, \"sectionChunkCount\") &&\n Number(source.metadata?.sectionChunkCount) > 1),\n );\n\nconst detectSectionHierarchyEvidence = (\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n sources.some((source) => {\n const path = Array.isArray(source.metadata?.sectionPath)\n ? source.metadata.sectionPath.filter(\n (entry): entry is string =>\n typeof entry === \"string\" && entry.trim().length > 0,\n )\n : [];\n\n return path.length > 1;\n });\n\nconst detectSpreadsheetEvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n ids.some((id) =>\n hasSourceExtension(id, [\".xlsx\", \".xls\", \".csv\", \".ods\", \".tsv\"]),\n ) ||\n sources.some(\n (source) =>\n hasSourceExtension(source.source, [\n \".xlsx\",\n \".xls\",\n \".csv\",\n \".ods\",\n \".tsv\",\n ]) ||\n hasMetadataString(source.metadata, \"sheetName\") ||\n hasMetadataNumber(source.metadata, \"spreadsheetRowStart\") ||\n hasMetadataNumber(source.metadata, \"spreadsheetTableIndex\"),\n );\n\nconst detectMediaEvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n ids.some((id) =>\n hasSourceExtension(id, [\n \".mp3\",\n \".wav\",\n \".m4a\",\n \".aac\",\n \".ogg\",\n \".flac\",\n \".mp4\",\n \".mov\",\n \".mkv\",\n \".webm\",\n ]),\n ) ||\n sources.some(\n (source) =>\n hasSourceExtension(source.source, [\n \".mp3\",\n \".wav\",\n \".m4a\",\n \".aac\",\n \".ogg\",\n \".flac\",\n \".mp4\",\n \".mov\",\n \".mkv\",\n \".webm\",\n ]) ||\n hasMetadataString(source.metadata, \"mediaKind\") ||\n hasMetadataString(source.metadata, \"speaker\") ||\n hasMetadataNumber(source.metadata, \"startMs\"),\n );\n\nconst detectOCREvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n ids.some((id) =>\n hasSourceExtension(id, [\".png\", \".jpg\", \".jpeg\", \".webp\"]),\n ) ||\n sources.some(\n (source) =>\n hasSourceExtension(source.source, [\".png\", \".jpg\", \".jpeg\", \".webp\"]) ||\n hasMetadataNumber(source.metadata, \"ocrConfidence\") ||\n hasMetadataNumber(source.metadata, \"ocrRegionConfidence\") ||\n hasMetadataString(source.metadata, \"ocrEngine\") ||\n source.metadata?.pdfTextMode === \"ocr\",\n );\n\nconst getRetrievalTrace = (\n trace: RAGSearchTraceRecord | RAGRetrievalTrace | undefined,\n) => (trace && \"trace\" in trace ? trace.trace : trace);\n\nconst classifyRAGEvaluationFailure = (input: {\n expectedCount: number;\n matchedCount: number;\n missingIds: string[];\n retrievedCount: number;\n retrievedIds: string[];\n retrievedSources?: RAGSource[];\n trace?: RAGSearchTraceRecord | RAGRetrievalTrace;\n}): NonNullable<RAGEvaluationCaseResult[\"failureClasses\"]> => {\n const classes: NonNullable<RAGEvaluationCaseResult[\"failureClasses\"]> = [];\n if (input.expectedCount === 0) {\n classes.push(\"no_expected_targets\");\n }\n if (input.retrievedCount === 0) {\n classes.push(\"no_results\");\n }\n if (input.expectedCount > 0 && input.matchedCount === 0) {\n classes.push(\"no_match\");\n }\n if (\n input.expectedCount > 0 &&\n input.matchedCount > 0 &&\n input.matchedCount < input.expectedCount\n ) {\n classes.push(\"partial_recall\");\n }\n if (input.retrievedIds.length > input.matchedCount) {\n classes.push(\"extra_noise\");\n }\n const sourceSignals = input.retrievedSources ?? [];\n const relevantIds = [...input.missingIds, ...input.retrievedIds];\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectSectionEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"section_evidence_miss\");\n if (detectSectionGraphEvidence(sourceSignals)) {\n classes.push(\"section_graph_miss\");\n }\n if (detectSectionHierarchyEvidence(sourceSignals)) {\n classes.push(\"section_hierarchy_miss\");\n }\n }\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectSpreadsheetEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"spreadsheet_evidence_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectMediaEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"media_evidence_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectOCREvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"ocr_evidence_miss\");\n }\n const retrievalTrace = getRetrievalTrace(input.trace);\n if (\n (input.retrievedCount === 0 || input.matchedCount === 0) &&\n (retrievalTrace?.routingLabel || retrievalTrace?.routingReason)\n ) {\n classes.push(\"routing_miss\");\n }\n\n return classes;\n};\n\nconst classifyRAGGroundingFailure = (input: {\n expectedCount: number;\n matchedCount: number;\n missingIds: string[];\n extraIds: string[];\n citationCount: number;\n unresolvedCitationCount: number;\n availableSources?: RAGSource[];\n}): NonNullable<RAGAnswerGroundingEvaluationCaseResult[\"failureClasses\"]> => {\n const classes: NonNullable<\n RAGAnswerGroundingEvaluationCaseResult[\"failureClasses\"]\n > = [];\n if (input.expectedCount === 0) {\n classes.push(\"no_expected_targets\");\n }\n if (input.citationCount === 0) {\n classes.push(\"no_citations\");\n }\n if (input.unresolvedCitationCount > 0) {\n classes.push(\"unresolved_citations\");\n }\n if (input.missingIds.length > 0 || input.matchedCount < input.expectedCount) {\n classes.push(\"missing_expected_sources\");\n }\n if (input.extraIds.length > 0) {\n classes.push(\"extra_citations\");\n }\n const sourceSignals = input.availableSources ?? [];\n const relevantIds = [...input.missingIds, ...input.extraIds];\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectSectionEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"section_source_miss\");\n if (detectSectionGraphEvidence(sourceSignals)) {\n classes.push(\"section_graph_source_miss\");\n }\n if (detectSectionHierarchyEvidence(sourceSignals)) {\n classes.push(\"section_hierarchy_source_miss\");\n }\n }\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectSpreadsheetEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"spreadsheet_source_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectMediaEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"media_source_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectOCREvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"ocr_source_miss\");\n }\n\n return classes;\n};\n\nconst normalizeSyntheticText = (value: string) =>\n value\n .replace(/^#+\\s*/gm, \"\")\n .replace(/`+/g, \"\")\n .replace(/\\[(.*?)\\]\\((.*?)\\)/g, \"$1\")\n .replace(/\\s+/g, \" \")\n .trim();\n\nconst buildSyntheticEvaluationQuery = (document: RAGIndexedDocument) => {\n const title = normalizeSyntheticText(document.title);\n const sourceTail = normalizeSyntheticText(\n document.source.split(\"/\").at(-1) ?? document.source,\n );\n const text = normalizeSyntheticText(document.text ?? \"\");\n const firstSentence =\n text\n .split(/(?<=[.!?])\\s+/)\n .map((entry) => entry.trim())\n .find((entry) => entry.length >= 24) ??\n text\n .split(/\\n+/)\n .map((entry) => entry.trim())\n .find((entry) => entry.length >= 24) ??\n title ??\n sourceTail;\n const prefixedSentence =\n title.length > 0 &&\n firstSentence.toLowerCase().startsWith(title.toLowerCase())\n ? firstSentence\n : [title, firstSentence].filter(Boolean).join(\" \");\n const queryTerms = normalizeSyntheticText(prefixedSentence)\n .split(/\\s+/)\n .slice(0, 12)\n .join(\" \");\n\n return queryTerms.length > 0 ? queryTerms : sourceTail;\n};\n\nconst resolveEvaluationMode = (caseInput: {\n expectedChunkIds?: string[];\n expectedSources?: string[];\n expectedDocumentIds?: string[];\n}): \"chunkId\" | \"source\" | \"documentId\" => {\n if (normalizeStringArray(caseInput.expectedChunkIds).length > 0) {\n return \"chunkId\";\n }\n if (normalizeStringArray(caseInput.expectedSources).length > 0) {\n return \"source\";\n }\n\n return \"documentId\";\n};\n\nconst getDocumentId = (source: RAGSource): string => {\n const metadataDocumentId =\n typeof source.metadata?.documentId === \"string\"\n ? source.metadata.documentId\n : undefined;\n if (metadataDocumentId) {\n return metadataDocumentId;\n }\n if (source.source) {\n return source.source;\n }\n\n const [documentId] = source.chunkId.split(\":\");\n\n return documentId ?? source.chunkId;\n};\n\nconst extractExpectedId = (\n source: RAGSource,\n mode: \"chunkId\" | \"source\" | \"documentId\",\n): string =>\n mode === \"chunkId\"\n ? source.chunkId\n : mode === \"source\"\n ? (source.source ?? source.title ?? source.chunkId)\n : getDocumentId(source);\n\nconst buildSources = (\n results: Array<{\n chunkId: string;\n chunkText: string;\n score: number;\n title?: string;\n source?: string;\n metadata?: Record<string, unknown>;\n }>,\n) =>\n results.map((result) => ({\n chunkId: result.chunkId,\n metadata: result.metadata,\n score: Number.isFinite(result.score) ? result.score : 0,\n source: result.source,\n text: result.chunkText,\n title: result.title,\n }));\n\nconst buildAnswerGroundingStatus = ({\n coverage,\n expectedCount,\n matchedCount,\n unresolvedCitationCount,\n resolvedCitationCount,\n}: {\n coverage: RAGAnswerGroundingEvaluationCaseResult[\"coverage\"];\n expectedCount: number;\n matchedCount: number;\n unresolvedCitationCount: number;\n resolvedCitationCount: number;\n}): RAGAnswerGroundingEvaluationCaseResult[\"status\"] => {\n if (expectedCount > 0) {\n if (\n matchedCount === expectedCount &&\n unresolvedCitationCount === 0 &&\n coverage !== \"ungrounded\"\n ) {\n return \"pass\";\n }\n\n if (matchedCount > 0 || resolvedCitationCount > 0) {\n return \"partial\";\n }\n\n return \"fail\";\n }\n\n if (coverage === \"grounded\" && unresolvedCitationCount === 0) {\n return \"pass\";\n }\n\n if (resolvedCitationCount > 0 || coverage === \"partial\") {\n return \"partial\";\n }\n\n return \"fail\";\n};\n\nexport const buildRAGEvaluationLeaderboard = (\n runs: RAGEvaluationSuiteRun[],\n) => {\n const sorted = [...runs].sort((left, right) => {\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n\n return sorted.map<RAGEvaluationLeaderboardEntry>((run, index) => ({\n averageF1: run.response.summary.averageF1,\n averageLatencyMs: run.response.summary.averageLatencyMs,\n label: run.label,\n passingRate: run.response.passingRate,\n rank: index + 1,\n runId: run.id,\n suiteId: run.suiteId,\n totalCases: run.response.totalCases,\n }));\n};\n\nexport const buildRAGAnswerGroundingEvaluationLeaderboard = (\n runs: RAGAnswerGroundingEvaluationRun[],\n) => {\n const sorted = [...runs].sort((left, right) => {\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (\n right.response.summary.averageCitationF1 !==\n left.response.summary.averageCitationF1\n ) {\n return (\n right.response.summary.averageCitationF1 -\n left.response.summary.averageCitationF1\n );\n }\n if (\n right.response.summary.averageResolvedCitationRate !==\n left.response.summary.averageResolvedCitationRate\n ) {\n return (\n right.response.summary.averageResolvedCitationRate -\n left.response.summary.averageResolvedCitationRate\n );\n }\n\n return left.elapsedMs - right.elapsedMs;\n });\n\n return sorted.map<RAGAnswerGroundingEvaluationLeaderboardEntry>(\n (run, index) => ({\n averageCitationF1: run.response.summary.averageCitationF1,\n averageResolvedCitationRate:\n run.response.summary.averageResolvedCitationRate,\n label: run.label,\n passingRate: run.response.passingRate,\n rank: index + 1,\n runId: run.id,\n suiteId: run.suiteId,\n totalCases: run.response.totalCases,\n }),\n );\n};\n\nconst buildTraceStageCounts = (traces: RAGRetrievalTrace[]) => {\n const counts: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n > = {};\n\n for (const trace of traces) {\n for (const step of trace.steps) {\n counts[step.stage] = (counts[step.stage] ?? 0) + 1;\n }\n }\n\n return counts;\n};\n\nconst diffTraceStageCounts = ({\n current,\n previous,\n}: {\n current: Partial<Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>>;\n previous: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n >;\n}) => {\n const next: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n > = {};\n const stages = new Set([\n ...Object.keys(current),\n ...Object.keys(previous),\n ] as RAGRetrievalTrace[\"steps\"][number][\"stage\"][]);\n\n for (const stage of stages) {\n const delta = (current[stage] ?? 0) - (previous[stage] ?? 0);\n if (delta !== 0) {\n next[stage] = delta;\n }\n }\n\n return next;\n};\n\nconst normalizeSummaryList = <T extends string>(values: T[]) =>\n Array.from(new Set(values)).sort();\n\nconst buildSummaryListDelta = <T extends string>(\n current: T[],\n previous: T[],\n) => {\n const currentSet = new Set(current);\n const previousSet = new Set(previous);\n const added = current.filter((value) => !previousSet.has(value));\n const removed = previous.filter((value) => !currentSet.has(value));\n\n return {\n added: normalizeSummaryList(Array.from(new Set(added))),\n current: normalizeSummaryList(current),\n previous: normalizeSummaryList(previous),\n removed: normalizeSummaryList(Array.from(new Set(removed))),\n };\n};\n\nfunction summarizeListTurnover<T extends string>(params: {\n current: T[];\n previous: T[];\n history: T[][];\n}): RAGTraceSummaryListTrend<T> {\n const { current, previous, history } = params;\n const currentSet = new Set(current);\n const previousSet = new Set(previous);\n const frequency: Record<string, number> = {};\n\n for (const entry of history) {\n for (const value of entry) {\n frequency[value] = (frequency[value] ?? 0) + 1;\n }\n }\n\n return {\n appeared: normalizeSummaryList(\n Array.from(new Set(current.filter((value) => !previousSet.has(value)))),\n ),\n current: normalizeSummaryList(current),\n disappeared: normalizeSummaryList(\n Array.from(new Set(previous.filter((value) => !currentSet.has(value)))),\n ),\n frequency,\n previous: normalizeSummaryList(previous),\n stable: normalizeSummaryList(\n Array.from(new Set(current.filter((value) => previousSet.has(value)))),\n ),\n };\n}\n\nconst diffTraceSummaryStageCounts = ({\n current,\n previous,\n}: {\n current: RAGRetrievalTraceComparisonSummary[\"stageCounts\"];\n previous: RAGRetrievalTraceComparisonSummary[\"stageCounts\"];\n}) => {\n const stages = new Set([\n ...Object.keys(current),\n ...Object.keys(previous),\n ]) as Set<RAGRetrievalTraceStep[\"stage\"]>;\n const next: Partial<\n Record<RAGRetrievalTraceStage, RAGTraceSummaryStageCountsDelta>\n > = {};\n\n for (const stage of stages) {\n const currentCount = current[stage] ?? 0;\n const previousCount = previous[stage] ?? 0;\n const delta = currentCount - previousCount;\n if (delta !== 0 || currentCount !== 0 || previousCount !== 0) {\n next[stage] = {\n current: currentCount,\n delta,\n previous: previousCount,\n };\n }\n }\n\n return next;\n};\n\nconst roundTraceAverage = (value: number, total: number) =>\n total > 0 ? Number((value / total).toFixed(2)) : 0;\n\nconst buildTraceSummaryDirection = (\n delta: number,\n): RAGTraceSummaryTrendDirection =>\n delta > 0 ? \"up\" : delta < 0 ? \"down\" : \"flat\";\n\nconst buildTraceSummaryAggregate = ({\n summaries,\n}: {\n summaries: RAGRetrievalTraceComparisonSummary[];\n}): {\n aggregate: RAGTraceSummaryNumericDelta[];\n bestMetric: RAGTraceSummaryNumericDelta | undefined;\n worstMetric: RAGTraceSummaryNumericDelta | undefined;\n} => {\n if (summaries.length === 0) {\n const aggregate: RAGTraceSummaryNumericDelta[] = [\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"totalCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageFinalCount\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageVectorCount\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageLexicalCount\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageCandidateTopK\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageLexicalTopK\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"vectorCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"lexicalCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"balancedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"roundRobinCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"transformedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"variantCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorVectorHitCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorLexicalHitCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorCollapsedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"runtimeCandidateBudgetExhaustedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"runtimeUnderfilledTopKCases\",\n previous: 0,\n },\n ];\n\n return {\n aggregate,\n bestMetric: undefined,\n worstMetric: undefined,\n };\n }\n\n const latest = summaries[0]!;\n const previous = summaries[summaries.length - 1]!;\n const aggregate: RAGTraceSummaryNumericDelta[] = [\n {\n current: latest.totalCases,\n delta: latest.totalCases - previous.totalCases,\n direction: buildTraceSummaryDirection(\n latest.totalCases - previous.totalCases,\n ),\n metric: \"totalCases\",\n previous: previous.totalCases,\n },\n {\n current: latest.averageFinalCount,\n delta: latest.averageFinalCount - previous.averageFinalCount,\n direction: buildTraceSummaryDirection(\n latest.averageFinalCount - previous.averageFinalCount,\n ),\n metric: \"averageFinalCount\",\n previous: previous.averageFinalCount,\n },\n {\n current: latest.averageVectorCount,\n delta: latest.averageVectorCount - previous.averageVectorCount,\n direction: buildTraceSummaryDirection(\n latest.averageVectorCount - previous.averageVectorCount,\n ),\n metric: \"averageVectorCount\",\n previous: previous.averageVectorCount,\n },\n {\n current: latest.averageLexicalCount,\n delta: latest.averageLexicalCount - previous.averageLexicalCount,\n direction: buildTraceSummaryDirection(\n latest.averageLexicalCount - previous.averageLexicalCount,\n ),\n metric: \"averageLexicalCount\",\n previous: previous.averageLexicalCount,\n },\n {\n current: latest.averageCandidateTopK,\n delta: latest.averageCandidateTopK - previous.averageCandidateTopK,\n direction: buildTraceSummaryDirection(\n latest.averageCandidateTopK - previous.averageCandidateTopK,\n ),\n metric: \"averageCandidateTopK\",\n previous: previous.averageCandidateTopK,\n },\n {\n current: latest.averageLexicalTopK,\n delta: latest.averageLexicalTopK - previous.averageLexicalTopK,\n direction: buildTraceSummaryDirection(\n latest.averageLexicalTopK - previous.averageLexicalTopK,\n ),\n metric: \"averageLexicalTopK\",\n previous: previous.averageLexicalTopK,\n },\n {\n current: latest.vectorCases,\n delta: latest.vectorCases - previous.vectorCases,\n direction: buildTraceSummaryDirection(\n latest.vectorCases - previous.vectorCases,\n ),\n metric: \"vectorCases\",\n previous: previous.vectorCases,\n },\n {\n current: latest.lexicalCases,\n delta: latest.lexicalCases - previous.lexicalCases,\n direction: buildTraceSummaryDirection(\n latest.lexicalCases - previous.lexicalCases,\n ),\n metric: \"lexicalCases\",\n previous: previous.lexicalCases,\n },\n {\n current: latest.balancedCases,\n delta: latest.balancedCases - previous.balancedCases,\n direction: buildTraceSummaryDirection(\n latest.balancedCases - previous.balancedCases,\n ),\n metric: \"balancedCases\",\n previous: previous.balancedCases,\n },\n {\n current: latest.roundRobinCases,\n delta: latest.roundRobinCases - previous.roundRobinCases,\n direction: buildTraceSummaryDirection(\n latest.roundRobinCases - previous.roundRobinCases,\n ),\n metric: \"roundRobinCases\",\n previous: previous.roundRobinCases,\n },\n {\n current: latest.transformedCases,\n delta: latest.transformedCases - previous.transformedCases,\n direction: buildTraceSummaryDirection(\n latest.transformedCases - previous.transformedCases,\n ),\n metric: \"transformedCases\",\n previous: previous.transformedCases,\n },\n {\n current: latest.variantCases,\n delta: latest.variantCases - previous.variantCases,\n direction: buildTraceSummaryDirection(\n latest.variantCases - previous.variantCases,\n ),\n metric: \"variantCases\",\n previous: previous.variantCases,\n },\n {\n current: latest.multiVectorCases,\n delta: latest.multiVectorCases - previous.multiVectorCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorCases - previous.multiVectorCases,\n ),\n metric: \"multiVectorCases\",\n previous: previous.multiVectorCases,\n },\n {\n current: latest.multiVectorVectorHitCases,\n delta:\n latest.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n ),\n metric: \"multiVectorVectorHitCases\",\n previous: previous.multiVectorVectorHitCases,\n },\n {\n current: latest.multiVectorLexicalHitCases,\n delta:\n latest.multiVectorLexicalHitCases - previous.multiVectorLexicalHitCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorLexicalHitCases - previous.multiVectorLexicalHitCases,\n ),\n metric: \"multiVectorLexicalHitCases\",\n previous: previous.multiVectorLexicalHitCases,\n },\n {\n current: latest.multiVectorCollapsedCases,\n delta:\n latest.multiVectorCollapsedCases - previous.multiVectorCollapsedCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorCollapsedCases - previous.multiVectorCollapsedCases,\n ),\n metric: \"multiVectorCollapsedCases\",\n previous: previous.multiVectorCollapsedCases,\n },\n {\n current: latest.runtimeCandidateBudgetExhaustedCases,\n delta:\n latest.runtimeCandidateBudgetExhaustedCases -\n previous.runtimeCandidateBudgetExhaustedCases,\n direction: buildTraceSummaryDirection(\n latest.runtimeCandidateBudgetExhaustedCases -\n previous.runtimeCandidateBudgetExhaustedCases,\n ),\n metric: \"runtimeCandidateBudgetExhaustedCases\",\n previous: previous.runtimeCandidateBudgetExhaustedCases,\n },\n {\n current: latest.runtimeUnderfilledTopKCases,\n delta:\n latest.runtimeUnderfilledTopKCases -\n previous.runtimeUnderfilledTopKCases,\n direction: buildTraceSummaryDirection(\n latest.runtimeUnderfilledTopKCases -\n previous.runtimeUnderfilledTopKCases,\n ),\n metric: \"runtimeUnderfilledTopKCases\",\n previous: previous.runtimeUnderfilledTopKCases,\n },\n ];\n const absoluteSorted = [...aggregate].sort(\n (left, right) =>\n Math.abs(right.delta) - Math.abs(left.delta) ||\n left.metric.localeCompare(right.metric),\n );\n\n return {\n aggregate,\n bestMetric: absoluteSorted[0],\n worstMetric: absoluteSorted[absoluteSorted.length - 1],\n };\n};\n\nconst buildRAGRetrievalTraceStageChurn = ({\n windows,\n}: {\n windows: RAGRetrievalTraceHistoryWindow[];\n}): RAGTraceSummaryStageTrend[] => {\n const stages = new Set<RAGRetrievalTraceStep[\"stage\"]>();\n for (const window of windows) {\n for (const stage of Object.keys(window.current.stageCounts) as Array<\n RAGRetrievalTraceStep[\"stage\"]\n >) {\n stages.add(stage);\n }\n for (const stage of Object.keys(window.previous.stageCounts) as Array<\n RAGRetrievalTraceStep[\"stage\"]\n >) {\n stages.add(stage);\n }\n }\n\n return [...stages]\n .map((stage) => {\n let netDelta = 0;\n let totalChanges = 0;\n for (const window of windows) {\n const delta = window.delta?.stageCountsDelta[stage]?.delta ?? 0;\n netDelta += delta;\n totalChanges += Math.abs(delta);\n }\n return {\n latestDelta: windows[0]?.delta?.stageCountsDelta[stage]?.delta ?? 0,\n netDelta,\n stage,\n totalChanges,\n };\n })\n .sort(\n (left, right) =>\n right.totalChanges - left.totalChanges ||\n left.stage.localeCompare(right.stage),\n );\n};\n\nconst summarizeRetrievalTraces = (\n traces: RAGRetrievalTrace[],\n): RAGRetrievalTraceComparisonSummary | undefined => {\n if (traces.length === 0) {\n return undefined;\n }\n\n const totalCases = traces.length;\n const modeSet = new Set<RAGHybridRetrievalMode>();\n const sourceBalanceStrategySet = new Set<RAGSourceBalanceStrategy>();\n let vectorCases = 0;\n let lexicalCases = 0;\n let balancedCases = 0;\n let roundRobinCases = 0;\n let transformedCases = 0;\n let variantCases = 0;\n let multiVectorCases = 0;\n let multiVectorVectorHitCases = 0;\n let multiVectorLexicalHitCases = 0;\n let multiVectorCollapsedCases = 0;\n let officeEvidenceReconcileCases = 0;\n let officeParagraphEvidenceReconcileCases = 0;\n let officeListEvidenceReconcileCases = 0;\n let officeTableEvidenceReconcileCases = 0;\n let pdfEvidenceReconcileCases = 0;\n let runtimeCandidateBudgetExhaustedCases = 0;\n let runtimeUnderfilledTopKCases = 0;\n let finalCountSum = 0;\n let vectorCountSum = 0;\n let lexicalCountSum = 0;\n let candidateTopKSum = 0;\n let lexicalTopKSum = 0;\n\n for (const trace of traces) {\n const vectorSearchMetadata = trace.steps.find(\n (step) => step.stage === \"vector_search\",\n )?.metadata;\n modeSet.add(trace.mode);\n sourceBalanceStrategySet.add(trace.sourceBalanceStrategy ?? \"cap\");\n if (trace.runVector) {\n vectorCases += 1;\n }\n if (trace.runLexical) {\n lexicalCases += 1;\n }\n if (typeof trace.maxResultsPerSource === \"number\") {\n balancedCases += 1;\n if (trace.sourceBalanceStrategy === \"round_robin\") {\n roundRobinCases += 1;\n }\n }\n if (trace.transformedQuery !== trace.query) {\n transformedCases += 1;\n }\n if (trace.variantQueries.length > 0) {\n variantCases += 1;\n }\n if (trace.multiVector?.configured) {\n multiVectorCases += 1;\n }\n if ((trace.multiVector?.vectorVariantHits ?? 0) > 0) {\n multiVectorVectorHitCases += 1;\n }\n if ((trace.multiVector?.lexicalVariantHits ?? 0) > 0) {\n multiVectorLexicalHitCases += 1;\n }\n if ((trace.multiVector?.collapsedParents ?? 0) > 0) {\n multiVectorCollapsedCases += 1;\n }\n const evidenceReconcileMetadata = trace.steps.find(\n (step) => step.stage === \"evidence_reconcile\",\n )?.metadata;\n if (\n typeof evidenceReconcileMetadata?.officeAffectedScopes === \"number\" &&\n evidenceReconcileMetadata.officeAffectedScopes > 0\n ) {\n officeEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.officeParagraphAffectedScopes ===\n \"number\" &&\n evidenceReconcileMetadata.officeParagraphAffectedScopes > 0\n ) {\n officeParagraphEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.officeListAffectedScopes === \"number\" &&\n evidenceReconcileMetadata.officeListAffectedScopes > 0\n ) {\n officeListEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.officeTableAffectedScopes ===\n \"number\" &&\n evidenceReconcileMetadata.officeTableAffectedScopes > 0\n ) {\n officeTableEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.pdfAffectedScopes === \"number\" &&\n evidenceReconcileMetadata.pdfAffectedScopes > 0\n ) {\n pdfEvidenceReconcileCases += 1;\n }\n if (vectorSearchMetadata?.sqliteQueryCandidateBudgetExhausted) {\n runtimeCandidateBudgetExhaustedCases += 1;\n }\n if (vectorSearchMetadata?.postgresQueryCandidateBudgetExhausted) {\n runtimeCandidateBudgetExhaustedCases += 1;\n }\n if (vectorSearchMetadata?.sqliteQueryUnderfilledTopK) {\n runtimeUnderfilledTopKCases += 1;\n }\n if (vectorSearchMetadata?.postgresQueryUnderfilledTopK) {\n runtimeUnderfilledTopKCases += 1;\n }\n finalCountSum += trace.resultCounts.final;\n vectorCountSum += trace.resultCounts.vector;\n lexicalCountSum += trace.resultCounts.lexical;\n candidateTopKSum += trace.candidateTopK;\n lexicalTopKSum += trace.lexicalTopK;\n }\n\n return {\n averageCandidateTopK: roundTraceAverage(candidateTopKSum, totalCases),\n averageFinalCount: roundTraceAverage(finalCountSum, totalCases),\n averageLexicalCount: roundTraceAverage(lexicalCountSum, totalCases),\n averageLexicalTopK: roundTraceAverage(lexicalTopKSum, totalCases),\n balancedCases,\n averageVectorCount: roundTraceAverage(vectorCountSum, totalCases),\n lexicalCases,\n modes: Array.from(modeSet),\n roundRobinCases,\n sourceBalanceStrategies: Array.from(sourceBalanceStrategySet),\n stageCounts: buildTraceStageCounts(traces),\n totalCases,\n transformedCases,\n variantCases,\n multiVectorCases,\n multiVectorVectorHitCases,\n multiVectorLexicalHitCases,\n multiVectorCollapsedCases,\n officeEvidenceReconcileCases,\n officeParagraphEvidenceReconcileCases,\n officeListEvidenceReconcileCases,\n officeTableEvidenceReconcileCases,\n pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCases,\n vectorCases,\n };\n};\n\nconst evaluateRAGCollectionCases = async ({\n collection,\n input,\n defaultTopK = DEFAULT_TOP_K,\n rerank,\n includeTrace = false,\n}: {\n collection: RAGCollection;\n input: RAGEvaluationInput;\n defaultTopK?: number;\n rerank?: RAGRerankerProviderLike;\n includeTrace?: boolean;\n}): Promise<\n Array<{\n caseResult: RAGEvaluationCaseResult;\n trace?: RAGRetrievalTrace;\n filter?: Record<string, unknown>;\n retrieval?: RAGCollectionSearchParams[\"retrieval\"];\n topResult?: RAGQueryResult;\n }>\n> => {\n if (input.dryRun) {\n return executeDryRunRAGEvaluation(input, defaultTopK).map(\n (caseResult, caseIndex) => ({\n caseResult,\n filter:\n typeof input.cases?.[caseIndex]?.filter === \"object\"\n ? input.cases[caseIndex]?.filter\n : input.filter,\n retrieval: input.cases?.[caseIndex]?.retrieval ?? input.retrieval,\n topResult: undefined,\n trace: undefined,\n }),\n );\n }\n\n return Promise.all(\n input.cases.map(async (caseInput, caseIndex) => {\n const startedAt = Date.now();\n const mode = resolveEvaluationMode(caseInput);\n const query = caseInput.query.trim();\n const expectedIds = normalizeExpectedIds(\n mode === \"chunkId\"\n ? (caseInput.expectedChunkIds ?? [])\n : mode === \"source\"\n ? (caseInput.expectedSources ?? [])\n : (caseInput.expectedDocumentIds ?? []),\n );\n const topK =\n typeof caseInput.topK === \"number\"\n ? caseInput.topK\n : typeof input.topK === \"number\"\n ? input.topK\n : defaultTopK;\n const searchInput = {\n filter: caseInput.corpusKey\n ? {\n ...((typeof caseInput.filter === \"object\"\n ? caseInput.filter\n : input.filter) ?? {}),\n corpusKey: caseInput.corpusKey,\n }\n : typeof caseInput.filter === \"object\"\n ? caseInput.filter\n : input.filter,\n model: caseInput.model ?? input.model,\n query,\n rerank,\n scoreThreshold:\n typeof caseInput.scoreThreshold === \"number\"\n ? caseInput.scoreThreshold\n : input.scoreThreshold,\n retrieval: caseInput.retrieval ?? input.retrieval,\n topK,\n };\n const searchOutcome = includeTrace\n ? await collection.searchWithTrace(searchInput)\n : {\n results: await collection.search(searchInput),\n trace: undefined,\n };\n const sources = buildSources(searchOutcome.results);\n const elapsedMs = Date.now() - startedAt;\n const retrievedIds = normalizeExpectedIds(\n sources.map((source) => extractExpectedId(source, mode)),\n );\n\n return {\n caseResult: summarizeRAGEvaluationCase({\n caseIndex,\n caseInput: { ...caseInput, topK },\n elapsedMs,\n expectedIds,\n mode,\n query,\n retrievedIds,\n retrievedSources: sources,\n trace: searchOutcome.trace,\n }),\n trace: searchOutcome.trace,\n filter: searchInput.filter,\n retrieval: searchInput.retrieval,\n topResult: searchOutcome.results[0],\n };\n }),\n );\n};\n\nexport const buildRAGAnswerGroundingCaseDifficultyLeaderboard = (\n entries: Array<{\n label: string;\n response: RAGAnswerGroundingEvaluationResponse;\n }>,\n) => {\n const grouped = new Map<\n string,\n {\n caseId: string;\n label?: string;\n query?: string;\n passCount: number;\n partialCount: number;\n failCount: number;\n groundedCount: number;\n totalEvaluations: number;\n totalCitationF1: number;\n totalResolvedCitationRate: number;\n }\n >();\n\n for (const entry of entries) {\n for (const result of entry.response.cases) {\n const current = grouped.get(result.caseId) ?? {\n caseId: result.caseId,\n failCount: 0,\n groundedCount: 0,\n label: result.label,\n passCount: 0,\n partialCount: 0,\n query: result.query,\n totalCitationF1: 0,\n totalEvaluations: 0,\n totalResolvedCitationRate: 0,\n };\n current.label ??= result.label;\n current.query ??= result.query;\n current.totalEvaluations += 1;\n current.totalCitationF1 += result.citationF1;\n current.totalResolvedCitationRate += result.resolvedCitationRate;\n if (result.status === \"pass\") {\n current.passCount += 1;\n } else if (result.status === \"partial\") {\n current.partialCount += 1;\n } else {\n current.failCount += 1;\n }\n if (result.coverage === \"grounded\") {\n current.groundedCount += 1;\n }\n grouped.set(result.caseId, current);\n }\n }\n\n const ranked = Array.from(grouped.values()).sort((left, right) => {\n const leftPassRate = left.passCount / left.totalEvaluations;\n const rightPassRate = right.passCount / right.totalEvaluations;\n if (leftPassRate !== rightPassRate) {\n return leftPassRate - rightPassRate;\n }\n const leftCitationF1 = left.totalCitationF1 / left.totalEvaluations;\n const rightCitationF1 = right.totalCitationF1 / right.totalEvaluations;\n if (leftCitationF1 !== rightCitationF1) {\n return leftCitationF1 - rightCitationF1;\n }\n const leftResolved = left.totalResolvedCitationRate / left.totalEvaluations;\n const rightResolved =\n right.totalResolvedCitationRate / right.totalEvaluations;\n if (leftResolved !== rightResolved) {\n return leftResolved - rightResolved;\n }\n\n return left.caseId.localeCompare(right.caseId);\n });\n\n return ranked.map<RAGAnswerGroundingEvaluationCaseDifficultyEntry>(\n (entry, index) => ({\n averageCitationF1: entry.totalCitationF1 / entry.totalEvaluations,\n averageResolvedCitationRate:\n entry.totalResolvedCitationRate / entry.totalEvaluations,\n caseId: entry.caseId,\n failRate: (entry.failCount / entry.totalEvaluations) * 100,\n groundedRate: (entry.groundedCount / entry.totalEvaluations) * 100,\n label: entry.label,\n passRate: (entry.passCount / entry.totalEvaluations) * 100,\n partialRate: (entry.partialCount / entry.totalEvaluations) * 100,\n query: entry.query,\n rank: index + 1,\n totalEvaluations: entry.totalEvaluations,\n }),\n );\n};\n\nconst buildGroundingDifficultyDiffEntry = (\n current: RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n previous?: RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n): RAGAnswerGroundingCaseDifficultyDiffEntry => ({\n caseId: current.caseId,\n currentAverageCitationF1: current.averageCitationF1,\n currentFailRate: current.failRate,\n currentPassRate: current.passRate,\n currentRank: current.rank,\n label: current.label,\n previousAverageCitationF1: previous?.averageCitationF1,\n previousFailRate: previous?.failRate,\n previousPassRate: previous?.passRate,\n previousRank: previous?.rank,\n query: current.query,\n});\n\nconst buildRAGAnswerGroundingCaseDifficultyTrends = ({\n runs,\n}: {\n runs: RAGAnswerGroundingCaseDifficultyRun[];\n}) => {\n const movementCounts = new Map<\n string,\n {\n label?: string;\n harder: number;\n easier: number;\n unchanged: number;\n }\n >();\n\n for (let index = 0; index < runs.length - 1; index += 1) {\n const current = runs[index];\n const previous = runs[index + 1];\n if (!current || !previous) {\n continue;\n }\n const diff = buildRAGAnswerGroundingCaseDifficultyRunDiff({\n current,\n previous,\n });\n\n for (const entry of diff.harderCases) {\n const currentCounts = movementCounts.get(entry.caseId) ?? {\n easier: 0,\n harder: 0,\n label: entry.label,\n unchanged: 0,\n };\n currentCounts.harder += 1;\n currentCounts.label ??= entry.label;\n movementCounts.set(entry.caseId, currentCounts);\n }\n\n for (const entry of diff.easierCases) {\n const currentCounts = movementCounts.get(entry.caseId) ?? {\n easier: 0,\n harder: 0,\n label: entry.label,\n unchanged: 0,\n };\n currentCounts.easier += 1;\n currentCounts.label ??= entry.label;\n movementCounts.set(entry.caseId, currentCounts);\n }\n\n for (const entry of diff.unchangedCases) {\n const currentCounts = movementCounts.get(entry.caseId) ?? {\n easier: 0,\n harder: 0,\n label: entry.label,\n unchanged: 0,\n };\n currentCounts.unchanged += 1;\n currentCounts.label ??= entry.label;\n movementCounts.set(entry.caseId, currentCounts);\n }\n }\n\n const movementEntries = [...movementCounts.entries()];\n const mostOftenHarderCaseIds = movementEntries\n .filter(([, counts]) => counts.harder > 0)\n .sort((left, right) => {\n if (right[1].harder !== left[1].harder) {\n return right[1].harder - left[1].harder;\n }\n return left[0].localeCompare(right[0]);\n })\n .map(([caseId]) => caseId);\n const mostOftenEasierCaseIds = movementEntries\n .filter(([, counts]) => counts.easier > 0)\n .sort((left, right) => {\n if (right[1].easier !== left[1].easier) {\n return right[1].easier - left[1].easier;\n }\n return left[0].localeCompare(right[0]);\n })\n .map(([caseId]) => caseId);\n\n return {\n easiestCaseIds:\n runs[runs.length - 1]?.entries.map((entry) => entry.caseId).reverse() ??\n [],\n hardestCaseIds: runs[0]?.entries.map((entry) => entry.caseId) ?? [],\n mostOftenEasierCaseIds,\n mostOftenHarderCaseIds,\n movementCounts: Object.fromEntries(\n movementEntries.map(([caseId, counts]) => [\n caseId,\n {\n easier: counts.easier,\n harder: counts.harder,\n unchanged: counts.unchanged,\n },\n ]),\n ),\n };\n};\n\nexport const buildRAGAnswerGroundingCaseDifficultyRunDiff = ({\n current,\n previous,\n}: {\n current: RAGAnswerGroundingCaseDifficultyRun;\n previous?: RAGAnswerGroundingCaseDifficultyRun;\n}): RAGAnswerGroundingCaseDifficultyRunDiff => {\n const previousEntries = new Map(\n (previous?.entries ?? []).map((entry) => [entry.caseId, entry]),\n );\n const diffs = current.entries.map((entry) =>\n buildGroundingDifficultyDiffEntry(entry, previousEntries.get(entry.caseId)),\n );\n\n return {\n currentRunId: current.id,\n easierCases: diffs.filter((entry) => {\n const previousRank = entry.previousRank ?? entry.currentRank;\n return entry.currentRank > previousRank;\n }),\n harderCases: diffs.filter((entry) => {\n const previousRank = entry.previousRank ?? Number.MAX_SAFE_INTEGER;\n return entry.currentRank < previousRank;\n }),\n previousRunId: previous?.id,\n suiteId: current.suiteId,\n unchangedCases: diffs.filter((entry) => {\n const previousRank = entry.previousRank ?? entry.currentRank;\n return entry.currentRank === previousRank;\n }),\n };\n};\n\nconst toHistorySortOrder = (\n left: RAGEvaluationSuiteRun,\n right: RAGEvaluationSuiteRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeHistoryRuns = (runs: RAGEvaluationSuiteRun[]) =>\n [...runs].sort(toHistorySortOrder);\n\nconst normalizeRetrievalComparisonRuns = (runs: RAGRetrievalComparisonRun[]) =>\n [...runs].sort((left, right) => right.finishedAt - left.finishedAt);\n\nconst toTraceSummaryRunSortOrder = (\n left: RAGRetrievalTraceSummaryRun,\n right: RAGRetrievalTraceSummaryRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeTraceSummaryRuns = <TRun extends RAGRetrievalTraceSummaryRun>(\n runs: TRun[],\n) => [...runs].sort(toTraceSummaryRunSortOrder);\n\nconst applyRAGEvaluationHistoryPrunePolicy = <\n TRun extends {\n id: string;\n suiteId: string;\n finishedAt?: number;\n createdAt?: number;\n },\n>({\n input,\n runs,\n sort,\n}: {\n input?: RAGEvaluationHistoryPruneInput;\n runs: TRun[];\n sort: (runs: TRun[]) => TRun[];\n}): {\n next: TRun[];\n removed: TRun[];\n keptCount: number;\n removedCount: number;\n} => {\n const sorted = sort(runs);\n const targeted = sorted.filter(\n (run) => !input?.suiteId || run.suiteId === input.suiteId,\n );\n const untouched = sorted.filter(\n (run) => input?.suiteId && run.suiteId !== input.suiteId,\n );\n const now = input?.now ?? Date.now();\n let kept = [...targeted];\n\n if (typeof input?.maxAgeMs === \"number\" && Number.isFinite(input.maxAgeMs)) {\n const cutoff = now - input.maxAgeMs;\n kept = kept.filter((run) => {\n const timestamp = run.finishedAt ?? run.createdAt ?? 0;\n return timestamp >= cutoff;\n });\n }\n\n if (\n typeof input?.maxRunsPerSuite === \"number\" &&\n Number.isFinite(input.maxRunsPerSuite) &&\n input.maxRunsPerSuite >= 0\n ) {\n const remainingBySuite = new Map<string, number>();\n kept = kept.filter((run) => {\n const current = remainingBySuite.get(run.suiteId) ?? 0;\n if (current >= input.maxRunsPerSuite!) {\n return false;\n }\n remainingBySuite.set(run.suiteId, current + 1);\n return true;\n });\n }\n\n const keptIds = new Set(kept.map((run) => run.id));\n const removed = targeted.filter((run) => !keptIds.has(run.id));\n const next = sort([...untouched, ...kept]);\n\n return {\n keptCount: next.length,\n next,\n removed,\n removedCount: removed.length,\n };\n};\n\nconst applyRAGSearchTracePrunePolicy = ({\n input,\n traces,\n}: {\n input?: RAGSearchTracePruneInput;\n traces: RAGSearchTraceRecord[];\n}) => {\n const sorted = normalizeTraceSummaryRuns(traces);\n const matchesTag = (trace: RAGSearchTraceRecord) =>\n !input?.tag || (trace.tags ?? []).includes(input.tag);\n const targeted = sorted.filter(matchesTag);\n const untouched = sorted.filter((trace) => !matchesTag(trace));\n const now = input?.now ?? Date.now();\n let kept = [...targeted];\n\n if (typeof input?.maxAgeMs === \"number\" && Number.isFinite(input.maxAgeMs)) {\n const cutoff = now - input.maxAgeMs;\n kept = kept.filter((trace) => trace.finishedAt >= cutoff);\n }\n\n if (\n typeof input?.maxRecordsPerQuery === \"number\" &&\n Number.isFinite(input.maxRecordsPerQuery) &&\n input.maxRecordsPerQuery >= 0\n ) {\n const remainingByQuery = new Map<string, number>();\n kept = kept.filter((trace) => {\n const current = remainingByQuery.get(trace.query) ?? 0;\n if (current >= input.maxRecordsPerQuery!) {\n return false;\n }\n remainingByQuery.set(trace.query, current + 1);\n return true;\n });\n }\n\n if (\n typeof input?.maxRecordsPerGroup === \"number\" &&\n Number.isFinite(input.maxRecordsPerGroup) &&\n input.maxRecordsPerGroup >= 0\n ) {\n const remainingByGroup = new Map<string, number>();\n kept = kept.filter((trace) => {\n if (!trace.groupKey) {\n return true;\n }\n\n const current = remainingByGroup.get(trace.groupKey) ?? 0;\n if (current >= input.maxRecordsPerGroup!) {\n return false;\n }\n remainingByGroup.set(trace.groupKey, current + 1);\n return true;\n });\n }\n\n const keptIds = new Set(kept.map((trace) => trace.id));\n const removed = targeted.filter((trace) => !keptIds.has(trace.id));\n const next = normalizeTraceSummaryRuns([...untouched, ...kept]);\n\n return {\n keptCount: next.length,\n next,\n removed,\n removedCount: removed.length,\n };\n};\n\nconst buildRAGSearchTraceStatsFromTraces = (\n traces: RAGSearchTraceRecord[],\n): RAGSearchTraceStats => {\n const queryKeys = new Set<string>();\n const groupKeys = new Set<string>();\n const tagCounts = new Map<string, number>();\n let oldestFinishedAt: number | undefined;\n let newestFinishedAt: number | undefined;\n\n for (const trace of traces) {\n queryKeys.add(trace.query);\n if (trace.groupKey) {\n groupKeys.add(trace.groupKey);\n }\n for (const tag of trace.tags ?? []) {\n tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);\n }\n oldestFinishedAt =\n typeof oldestFinishedAt === \"number\"\n ? Math.min(oldestFinishedAt, trace.finishedAt)\n : trace.finishedAt;\n newestFinishedAt =\n typeof newestFinishedAt === \"number\"\n ? Math.max(newestFinishedAt, trace.finishedAt)\n : trace.finishedAt;\n }\n\n return {\n groupCount: groupKeys.size,\n newestFinishedAt,\n oldestFinishedAt,\n queryCount: queryKeys.size,\n tagCounts: Object.fromEntries(tagCounts.entries()),\n totalTraces: traces.length,\n };\n};\n\nconst normalizeTraceTags = (tags?: string[]) =>\n Array.from(\n new Set((tags ?? []).map((tag) => tag.trim()).filter(Boolean)),\n ).sort((left, right) => left.localeCompare(right));\n\nconst toGroundingHistorySortOrder = (\n left: RAGAnswerGroundingEvaluationRun,\n right: RAGAnswerGroundingEvaluationRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeGroundingHistoryRuns = (\n runs: RAGAnswerGroundingEvaluationRun[],\n) => [...runs].sort(toGroundingHistorySortOrder);\n\nconst toSearchTracePruneRunSortOrder = (\n left: RAGSearchTracePruneRun,\n right: RAGSearchTracePruneRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeSearchTracePruneRuns = (runs: RAGSearchTracePruneRun[]) =>\n [...runs].sort(toSearchTracePruneRunSortOrder);\n\nconst toGroundingDifficultyHistorySortOrder = (\n left: RAGAnswerGroundingCaseDifficultyRun,\n right: RAGAnswerGroundingCaseDifficultyRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeGroundingDifficultyHistoryRuns = (\n runs: RAGAnswerGroundingCaseDifficultyRun[],\n) => [...runs].sort(toGroundingDifficultyHistorySortOrder);\n\nconst buildCaseDiff = (\n currentCase: RAGEvaluationCaseResult,\n previousCase?: RAGEvaluationCaseResult,\n): RAGEvaluationCaseDiff => ({\n caseId: currentCase.caseId,\n currentF1: currentCase.f1,\n currentMatchedIds: currentCase.matchedIds,\n currentMissingIds: currentCase.missingIds,\n currentStatus: currentCase.status,\n label: currentCase.label,\n previousF1: previousCase?.f1,\n previousMatchedIds: previousCase?.matchedIds ?? [],\n previousMissingIds: previousCase?.missingIds ?? [],\n previousStatus: previousCase?.status,\n previousFailureClasses: previousCase?.failureClasses ?? [],\n query: currentCase.query,\n currentFailureClasses: currentCase.failureClasses ?? [],\n});\n\nconst buildGroundingCaseDiff = (\n currentCase: RAGAnswerGroundingEvaluationCaseResult,\n previousCase?: RAGAnswerGroundingEvaluationCaseResult,\n): RAGAnswerGroundingEvaluationCaseDiff => ({\n answerChanged:\n typeof previousCase?.answer === \"string\"\n ? previousCase.answer !== currentCase.answer\n : true,\n caseId: currentCase.caseId,\n currentCitationF1: currentCase.citationF1,\n currentCitedIds: currentCase.citedIds,\n currentCoverage: currentCase.coverage,\n currentExtraIds: currentCase.extraIds,\n currentMatchedIds: currentCase.matchedIds,\n currentMissingIds: currentCase.missingIds,\n currentReferenceCount: currentCase.referenceCount,\n currentResolvedCitationCount: currentCase.resolvedCitationCount,\n currentAnswer: currentCase.answer,\n currentStatus: currentCase.status,\n currentUngroundedReferenceNumbers:\n currentCase.groundedAnswer.ungroundedReferenceNumbers,\n currentUnresolvedCitationCount: currentCase.unresolvedCitationCount,\n label: currentCase.label,\n previousAnswer: previousCase?.answer,\n previousCitationF1: previousCase?.citationF1,\n previousCitedIds: previousCase?.citedIds ?? [],\n previousCoverage: previousCase?.coverage,\n previousExtraIds: previousCase?.extraIds ?? [],\n previousFailureClasses: previousCase?.failureClasses ?? [],\n previousMatchedIds: previousCase?.matchedIds ?? [],\n previousMissingIds: previousCase?.missingIds ?? [],\n previousReferenceCount: previousCase?.referenceCount,\n previousResolvedCitationCount: previousCase?.resolvedCitationCount,\n previousStatus: previousCase?.status,\n previousUngroundedReferenceNumbers:\n previousCase?.groundedAnswer.ungroundedReferenceNumbers ?? [],\n previousUnresolvedCitationCount: previousCase?.unresolvedCitationCount,\n query: currentCase.query,\n currentFailureClasses: currentCase.failureClasses ?? [],\n});\n\nconst buildGroundingCaseSnapshots = ({\n current,\n previous,\n}: {\n current?: RAGAnswerGroundingEvaluationRun;\n previous?: RAGAnswerGroundingEvaluationRun;\n}): RAGAnswerGroundingEvaluationCaseSnapshot[] => {\n if (!current) {\n return [];\n }\n\n const previousCases = new Map(\n (previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]),\n );\n\n return current.response.cases.map((entry) => {\n const previousCase = previousCases.get(entry.caseId);\n return {\n answer: entry.answer,\n answerChange:\n typeof previousCase?.answer === \"string\"\n ? previousCase.answer === entry.answer\n ? \"unchanged\"\n : \"changed\"\n : \"new\",\n caseId: entry.caseId,\n citationCount: entry.citationCount,\n citationF1: entry.citationF1,\n citedIds: entry.citedIds,\n coverage: entry.coverage,\n extraIds: entry.extraIds,\n failureClasses: entry.failureClasses,\n label: entry.label,\n matchedIds: entry.matchedIds,\n missingIds: entry.missingIds,\n previousAnswer: previousCase?.answer,\n query: entry.query,\n referenceCount: entry.referenceCount,\n resolvedCitationCount: entry.resolvedCitationCount,\n resolvedCitationRate: entry.resolvedCitationRate,\n status: entry.status,\n ungroundedReferenceNumbers:\n entry.groundedAnswer.ungroundedReferenceNumbers,\n unresolvedCitationCount: entry.unresolvedCitationCount,\n };\n });\n};\n\nconst areStageCountsEqual = (\n left: Partial<Record<RAGRetrievalTraceStage, number>>,\n right: Partial<Record<RAGRetrievalTraceStage, number>>,\n) => {\n const keys = new Set([\n ...Object.keys(left),\n ...Object.keys(right),\n ]) as Set<RAGRetrievalTraceStage>;\n\n for (const key of keys) {\n if ((left[key] ?? 0) !== (right[key] ?? 0)) {\n return false;\n }\n }\n\n return true;\n};\n\nconst buildEvaluationCaseTraceSnapshot = ({\n caseResult,\n filter,\n retrieval,\n currentTrace,\n previousTrace,\n currentSnapshot,\n topResult,\n}: {\n caseResult: RAGEvaluationCaseResult;\n filter?: Record<string, unknown>;\n retrieval?: RAGCollectionSearchParams[\"retrieval\"];\n currentTrace?: RAGRetrievalTrace;\n previousTrace?: RAGEvaluationCaseTraceSnapshot;\n currentSnapshot?: RAGEvaluationCaseTraceSnapshot;\n topResult?: RAGQueryResult;\n}): RAGEvaluationCaseTraceSnapshot => {\n const stageCounts = currentTrace ? buildTraceStageCounts([currentTrace]) : {};\n const previousStageCounts = previousTrace?.stageCounts ?? {};\n const currentLeadSnapshot =\n topResult || currentSnapshot\n ? buildEvaluationLeadSnapshot({\n metadata: topResult?.metadata,\n source: topResult?.source,\n title: topResult?.title,\n })\n : {};\n const topContextLabel =\n currentLeadSnapshot.topContextLabel ?? currentSnapshot?.topContextLabel;\n const topLocatorLabel =\n currentLeadSnapshot.topLocatorLabel ?? currentSnapshot?.topLocatorLabel;\n const sourceAwareChunkReasonLabel =\n currentLeadSnapshot.sourceAwareChunkReasonLabel ??\n currentSnapshot?.sourceAwareChunkReasonLabel;\n const sourceAwareUnitScopeLabel =\n currentLeadSnapshot.sourceAwareUnitScopeLabel ??\n currentSnapshot?.sourceAwareUnitScopeLabel;\n const currentLeadMediaCueSnapshot = currentTrace\n ? buildEvaluationLeadMediaCueSnapshot(currentTrace)\n : {};\n const currentLeadPresentationCueSnapshot = currentTrace\n ? buildEvaluationLeadPresentationCueSnapshot(currentTrace)\n : {};\n const currentLeadSpreadsheetCueSnapshot = currentTrace\n ? buildEvaluationLeadSpreadsheetCueSnapshot(currentTrace)\n : {};\n const currentSQLiteQueryPlanSnapshot = currentTrace\n ? buildEvaluationSQLiteQueryPlanSnapshot(currentTrace)\n : {};\n const currentPostgresQueryPlanSnapshot = currentTrace\n ? buildEvaluationPostgresQueryPlanSnapshot(currentTrace)\n : {};\n const leadSpeakerCue =\n currentLeadMediaCueSnapshot.leadSpeakerCue ??\n currentSnapshot?.leadSpeakerCue;\n const leadPresentationCue =\n currentLeadPresentationCueSnapshot.leadPresentationCue ??\n currentSnapshot?.leadPresentationCue;\n const leadSpreadsheetCue =\n currentLeadSpreadsheetCueSnapshot.leadSpreadsheetCue ??\n currentSnapshot?.leadSpreadsheetCue;\n const leadSpeakerAttributionCue =\n currentLeadMediaCueSnapshot.leadSpeakerAttributionCue ??\n currentSnapshot?.leadSpeakerAttributionCue;\n const leadChannelCue =\n currentLeadMediaCueSnapshot.leadChannelCue ??\n currentSnapshot?.leadChannelCue;\n const leadChannelAttributionCue =\n currentLeadMediaCueSnapshot.leadChannelAttributionCue ??\n currentSnapshot?.leadChannelAttributionCue;\n const leadContinuityCue =\n currentLeadMediaCueSnapshot.leadContinuityCue ??\n currentSnapshot?.leadContinuityCue;\n const sqliteQueryMode =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMode ??\n currentSnapshot?.sqliteQueryMode;\n const sqliteQueryPushdownMode =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownMode ??\n currentSnapshot?.sqliteQueryPushdownMode;\n const sqliteQueryPushdownApplied =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownApplied ??\n currentSnapshot?.sqliteQueryPushdownApplied;\n const sqliteQueryPushdownClauseCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownClauseCount ??\n currentSnapshot?.sqliteQueryPushdownClauseCount;\n const sqliteQueryTotalFilterClauseCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryTotalFilterClauseCount ??\n currentSnapshot?.sqliteQueryTotalFilterClauseCount;\n const sqliteQueryJsRemainderClauseCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryJsRemainderClauseCount ??\n currentSnapshot?.sqliteQueryJsRemainderClauseCount;\n const sqliteQueryMultiplierUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMultiplierUsed ??\n currentSnapshot?.sqliteQueryMultiplierUsed;\n const sqliteQueryCandidateLimitUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateLimitUsed ??\n currentSnapshot?.sqliteQueryCandidateLimitUsed;\n const sqliteQueryMaxBackfillsUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMaxBackfillsUsed ??\n currentSnapshot?.sqliteQueryMaxBackfillsUsed;\n const sqliteQueryMinResultsUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMinResultsUsed ??\n currentSnapshot?.sqliteQueryMinResultsUsed;\n const sqliteQueryFillPolicyUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryFillPolicyUsed ??\n currentSnapshot?.sqliteQueryFillPolicyUsed;\n const sqliteQueryPushdownCoverageRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownCoverageRatio ??\n currentSnapshot?.sqliteQueryPushdownCoverageRatio;\n const sqliteQueryJsRemainderRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryJsRemainderRatio ??\n currentSnapshot?.sqliteQueryJsRemainderRatio;\n const sqliteQueryFilteredCandidates =\n currentSQLiteQueryPlanSnapshot.sqliteQueryFilteredCandidates ??\n currentSnapshot?.sqliteQueryFilteredCandidates;\n const sqliteQueryInitialSearchK =\n currentSQLiteQueryPlanSnapshot.sqliteQueryInitialSearchK ??\n currentSnapshot?.sqliteQueryInitialSearchK;\n const sqliteQueryFinalSearchK =\n currentSQLiteQueryPlanSnapshot.sqliteQueryFinalSearchK ??\n currentSnapshot?.sqliteQueryFinalSearchK;\n const sqliteQuerySearchExpansionRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQuerySearchExpansionRatio ??\n currentSnapshot?.sqliteQuerySearchExpansionRatio;\n const sqliteQueryBackfillCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryBackfillCount ??\n currentSnapshot?.sqliteQueryBackfillCount;\n const sqliteQueryBackfillLimitReached =\n currentSQLiteQueryPlanSnapshot.sqliteQueryBackfillLimitReached ??\n currentSnapshot?.sqliteQueryBackfillLimitReached;\n const sqliteQueryMinResultsSatisfied =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMinResultsSatisfied ??\n currentSnapshot?.sqliteQueryMinResultsSatisfied;\n const sqliteQueryReturnedCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryReturnedCount ??\n currentSnapshot?.sqliteQueryReturnedCount;\n const sqliteQueryCandidateYieldRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateYieldRatio ??\n currentSnapshot?.sqliteQueryCandidateYieldRatio;\n const sqliteQueryTopKFillRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryTopKFillRatio ??\n currentSnapshot?.sqliteQueryTopKFillRatio;\n const sqliteQueryUnderfilledTopK =\n currentSQLiteQueryPlanSnapshot.sqliteQueryUnderfilledTopK ??\n currentSnapshot?.sqliteQueryUnderfilledTopK;\n const sqliteQueryCandidateBudgetExhausted =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateBudgetExhausted ??\n currentSnapshot?.sqliteQueryCandidateBudgetExhausted;\n const sqliteQueryCandidateCoverage =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateCoverage ??\n currentSnapshot?.sqliteQueryCandidateCoverage;\n const postgresQueryMode =\n currentPostgresQueryPlanSnapshot.postgresQueryMode ??\n currentSnapshot?.postgresQueryMode;\n const postgresQueryPushdownMode =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownMode ??\n currentSnapshot?.postgresQueryPushdownMode;\n const postgresQueryPushdownApplied =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownApplied ??\n currentSnapshot?.postgresQueryPushdownApplied;\n const postgresQueryPushdownClauseCount =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownClauseCount ??\n currentSnapshot?.postgresQueryPushdownClauseCount;\n const postgresQueryTotalFilterClauseCount =\n currentPostgresQueryPlanSnapshot.postgresQueryTotalFilterClauseCount ??\n currentSnapshot?.postgresQueryTotalFilterClauseCount;\n const postgresQueryJsRemainderClauseCount =\n currentPostgresQueryPlanSnapshot.postgresQueryJsRemainderClauseCount ??\n currentSnapshot?.postgresQueryJsRemainderClauseCount;\n const postgresQueryMultiplierUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryMultiplierUsed ??\n currentSnapshot?.postgresQueryMultiplierUsed;\n const postgresQueryCandidateLimitUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateLimitUsed ??\n currentSnapshot?.postgresQueryCandidateLimitUsed;\n const postgresQueryMaxBackfillsUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryMaxBackfillsUsed ??\n currentSnapshot?.postgresQueryMaxBackfillsUsed;\n const postgresQueryMinResultsUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryMinResultsUsed ??\n currentSnapshot?.postgresQueryMinResultsUsed;\n const postgresQueryFillPolicyUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryFillPolicyUsed ??\n currentSnapshot?.postgresQueryFillPolicyUsed;\n const postgresQueryPushdownCoverageRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownCoverageRatio ??\n currentSnapshot?.postgresQueryPushdownCoverageRatio;\n const postgresQueryJsRemainderRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryJsRemainderRatio ??\n currentSnapshot?.postgresQueryJsRemainderRatio;\n const postgresQueryFilteredCandidates =\n currentPostgresQueryPlanSnapshot.postgresQueryFilteredCandidates ??\n currentSnapshot?.postgresQueryFilteredCandidates;\n const postgresQueryInitialSearchK =\n currentPostgresQueryPlanSnapshot.postgresQueryInitialSearchK ??\n currentSnapshot?.postgresQueryInitialSearchK;\n const postgresQueryFinalSearchK =\n currentPostgresQueryPlanSnapshot.postgresQueryFinalSearchK ??\n currentSnapshot?.postgresQueryFinalSearchK;\n const postgresQuerySearchExpansionRatio =\n currentPostgresQueryPlanSnapshot.postgresQuerySearchExpansionRatio ??\n currentSnapshot?.postgresQuerySearchExpansionRatio;\n const postgresQueryBackfillCount =\n currentPostgresQueryPlanSnapshot.postgresQueryBackfillCount ??\n currentSnapshot?.postgresQueryBackfillCount;\n const postgresQueryBackfillLimitReached =\n currentPostgresQueryPlanSnapshot.postgresQueryBackfillLimitReached ??\n currentSnapshot?.postgresQueryBackfillLimitReached;\n const postgresQueryMinResultsSatisfied =\n currentPostgresQueryPlanSnapshot.postgresQueryMinResultsSatisfied ??\n currentSnapshot?.postgresQueryMinResultsSatisfied;\n const postgresQueryReturnedCount =\n currentPostgresQueryPlanSnapshot.postgresQueryReturnedCount ??\n currentSnapshot?.postgresQueryReturnedCount;\n const postgresQueryCandidateYieldRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateYieldRatio ??\n currentSnapshot?.postgresQueryCandidateYieldRatio;\n const postgresQueryTopKFillRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryTopKFillRatio ??\n currentSnapshot?.postgresQueryTopKFillRatio;\n const postgresQueryUnderfilledTopK =\n currentPostgresQueryPlanSnapshot.postgresQueryUnderfilledTopK ??\n currentSnapshot?.postgresQueryUnderfilledTopK;\n const postgresQueryCandidateBudgetExhausted =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateBudgetExhausted ??\n currentSnapshot?.postgresQueryCandidateBudgetExhausted;\n const postgresQueryCandidateCoverage =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateCoverage ??\n currentSnapshot?.postgresQueryCandidateCoverage;\n const currentFilterSignature = JSON.stringify(filter ?? undefined);\n const previousFilterSignature = JSON.stringify(\n previousTrace?.inputFilter ?? undefined,\n );\n const currentRetrievalSignature = JSON.stringify(retrieval ?? undefined);\n const previousRetrievalSignature = JSON.stringify(\n previousTrace?.inputRetrieval ?? undefined,\n );\n const traceChange = !previousTrace\n ? currentTrace\n ? \"new\"\n : \"unchanged\"\n : previousTrace.traceMode !== currentTrace?.mode ||\n previousFilterSignature !== currentFilterSignature ||\n previousRetrievalSignature !== currentRetrievalSignature ||\n previousTrace.sourceBalanceStrategy !==\n currentTrace?.sourceBalanceStrategy ||\n previousTrace.transformedQuery !==\n (currentTrace?.transformedQuery || undefined) ||\n previousTrace.variantQueries.join(\"|\") !==\n (currentTrace?.variantQueries ?? []).join(\"|\") ||\n previousTrace.finalCount !== (currentTrace?.resultCounts.final ?? 0) ||\n previousTrace.vectorCount !==\n (currentTrace?.resultCounts.vector ?? 0) ||\n previousTrace.lexicalCount !==\n (currentTrace?.resultCounts.lexical ?? 0) ||\n previousTrace.candidateTopK !== (currentTrace?.candidateTopK ?? 0) ||\n previousTrace.lexicalTopK !== (currentTrace?.lexicalTopK ?? 0) ||\n previousTrace.topContextLabel !== topContextLabel ||\n previousTrace.topLocatorLabel !== topLocatorLabel ||\n previousTrace.sourceAwareChunkReasonLabel !==\n sourceAwareChunkReasonLabel ||\n previousTrace.sourceAwareUnitScopeLabel !== sourceAwareUnitScopeLabel ||\n previousTrace.leadSpeakerCue !== leadSpeakerCue ||\n previousTrace.leadPresentationCue !== leadPresentationCue ||\n previousTrace.leadSpreadsheetCue !== leadSpreadsheetCue ||\n previousTrace.leadSpeakerAttributionCue !== leadSpeakerAttributionCue ||\n previousTrace.leadChannelCue !== leadChannelCue ||\n previousTrace.leadChannelAttributionCue !== leadChannelAttributionCue ||\n previousTrace.leadContinuityCue !== leadContinuityCue ||\n previousTrace.sqliteQueryMode !== sqliteQueryMode ||\n previousTrace.sqliteQueryPushdownMode !== sqliteQueryPushdownMode ||\n previousTrace.sqliteQueryPushdownApplied !==\n sqliteQueryPushdownApplied ||\n previousTrace.sqliteQueryPushdownClauseCount !==\n sqliteQueryPushdownClauseCount ||\n previousTrace.sqliteQueryTotalFilterClauseCount !==\n sqliteQueryTotalFilterClauseCount ||\n previousTrace.sqliteQueryJsRemainderClauseCount !==\n sqliteQueryJsRemainderClauseCount ||\n previousTrace.sqliteQueryMultiplierUsed !== sqliteQueryMultiplierUsed ||\n previousTrace.sqliteQueryCandidateLimitUsed !==\n sqliteQueryCandidateLimitUsed ||\n previousTrace.sqliteQueryMaxBackfillsUsed !==\n sqliteQueryMaxBackfillsUsed ||\n previousTrace.sqliteQueryMinResultsUsed !== sqliteQueryMinResultsUsed ||\n previousTrace.sqliteQueryFillPolicyUsed !== sqliteQueryFillPolicyUsed ||\n previousTrace.sqliteQueryPushdownCoverageRatio !==\n sqliteQueryPushdownCoverageRatio ||\n previousTrace.sqliteQueryJsRemainderRatio !==\n sqliteQueryJsRemainderRatio ||\n previousTrace.sqliteQueryFilteredCandidates !==\n sqliteQueryFilteredCandidates ||\n previousTrace.sqliteQueryInitialSearchK !== sqliteQueryInitialSearchK ||\n previousTrace.sqliteQueryFinalSearchK !== sqliteQueryFinalSearchK ||\n previousTrace.sqliteQuerySearchExpansionRatio !==\n sqliteQuerySearchExpansionRatio ||\n previousTrace.sqliteQueryBackfillCount !== sqliteQueryBackfillCount ||\n previousTrace.sqliteQueryBackfillLimitReached !==\n sqliteQueryBackfillLimitReached ||\n previousTrace.sqliteQueryMinResultsSatisfied !==\n sqliteQueryMinResultsSatisfied ||\n previousTrace.sqliteQueryReturnedCount !== sqliteQueryReturnedCount ||\n previousTrace.sqliteQueryCandidateYieldRatio !==\n sqliteQueryCandidateYieldRatio ||\n previousTrace.sqliteQueryTopKFillRatio !== sqliteQueryTopKFillRatio ||\n previousTrace.sqliteQueryUnderfilledTopK !==\n sqliteQueryUnderfilledTopK ||\n previousTrace.sqliteQueryCandidateBudgetExhausted !==\n sqliteQueryCandidateBudgetExhausted ||\n previousTrace.sqliteQueryCandidateCoverage !==\n sqliteQueryCandidateCoverage ||\n previousTrace.postgresQueryMode !== postgresQueryMode ||\n previousTrace.postgresQueryPushdownMode !== postgresQueryPushdownMode ||\n previousTrace.postgresQueryPushdownApplied !==\n postgresQueryPushdownApplied ||\n previousTrace.postgresQueryPushdownClauseCount !==\n postgresQueryPushdownClauseCount ||\n previousTrace.postgresQueryTotalFilterClauseCount !==\n postgresQueryTotalFilterClauseCount ||\n previousTrace.postgresQueryJsRemainderClauseCount !==\n postgresQueryJsRemainderClauseCount ||\n previousTrace.postgresQueryMultiplierUsed !==\n postgresQueryMultiplierUsed ||\n previousTrace.postgresQueryCandidateLimitUsed !==\n postgresQueryCandidateLimitUsed ||\n previousTrace.postgresQueryMaxBackfillsUsed !==\n postgresQueryMaxBackfillsUsed ||\n previousTrace.postgresQueryMinResultsUsed !==\n postgresQueryMinResultsUsed ||\n previousTrace.postgresQueryFillPolicyUsed !==\n postgresQueryFillPolicyUsed ||\n previousTrace.postgresQueryPushdownCoverageRatio !==\n postgresQueryPushdownCoverageRatio ||\n previousTrace.postgresQueryJsRemainderRatio !==\n postgresQueryJsRemainderRatio ||\n previousTrace.postgresQueryFilteredCandidates !==\n postgresQueryFilteredCandidates ||\n previousTrace.postgresQueryInitialSearchK !==\n postgresQueryInitialSearchK ||\n previousTrace.postgresQueryFinalSearchK !== postgresQueryFinalSearchK ||\n previousTrace.postgresQuerySearchExpansionRatio !==\n postgresQuerySearchExpansionRatio ||\n previousTrace.postgresQueryBackfillCount !==\n postgresQueryBackfillCount ||\n previousTrace.postgresQueryBackfillLimitReached !==\n postgresQueryBackfillLimitReached ||\n previousTrace.postgresQueryMinResultsSatisfied !==\n postgresQueryMinResultsSatisfied ||\n previousTrace.postgresQueryReturnedCount !==\n postgresQueryReturnedCount ||\n previousTrace.postgresQueryCandidateYieldRatio !==\n postgresQueryCandidateYieldRatio ||\n previousTrace.postgresQueryTopKFillRatio !==\n postgresQueryTopKFillRatio ||\n previousTrace.postgresQueryUnderfilledTopK !==\n postgresQueryUnderfilledTopK ||\n previousTrace.postgresQueryCandidateBudgetExhausted !==\n postgresQueryCandidateBudgetExhausted ||\n previousTrace.postgresQueryCandidateCoverage !==\n postgresQueryCandidateCoverage ||\n !areStageCountsEqual(previousStageCounts, stageCounts)\n ? \"changed\"\n : \"unchanged\";\n\n return {\n candidateTopK: currentTrace?.candidateTopK ?? 0,\n caseId: caseResult.caseId,\n corpusKey: caseResult.corpusKey,\n inputFilter: filter,\n finalCount: currentTrace?.resultCounts.final ?? 0,\n label: caseResult.label,\n lexicalCount: currentTrace?.resultCounts.lexical ?? 0,\n lexicalTopK: currentTrace?.lexicalTopK ?? 0,\n inputRetrieval: retrieval,\n previousCandidateTopK: previousTrace?.candidateTopK,\n previousFinalCount: previousTrace?.finalCount,\n previousLexicalCount: previousTrace?.lexicalCount,\n previousLexicalTopK: previousTrace?.lexicalTopK,\n previousInputFilter: previousTrace?.inputFilter,\n previousInputRetrieval: previousTrace?.inputRetrieval,\n previousLeadChannelAttributionCue: previousTrace?.leadChannelAttributionCue,\n previousLeadChannelCue: previousTrace?.leadChannelCue,\n previousLeadContinuityCue: previousTrace?.leadContinuityCue,\n previousLeadPresentationCue: previousTrace?.leadPresentationCue,\n previousLeadSpreadsheetCue: previousTrace?.leadSpreadsheetCue,\n previousLeadSpeakerAttributionCue: previousTrace?.leadSpeakerAttributionCue,\n previousLeadSpeakerCue: previousTrace?.leadSpeakerCue,\n previousSqliteQueryBackfillCount: previousTrace?.sqliteQueryBackfillCount,\n previousSqliteQueryBackfillLimitReached:\n previousTrace?.sqliteQueryBackfillLimitReached,\n previousSqliteQueryMinResultsSatisfied:\n previousTrace?.sqliteQueryMinResultsSatisfied,\n previousSqliteQueryCandidateBudgetExhausted:\n previousTrace?.sqliteQueryCandidateBudgetExhausted,\n previousSqliteQueryCandidateCoverage:\n previousTrace?.sqliteQueryCandidateCoverage,\n previousSqliteQueryFilteredCandidates:\n previousTrace?.sqliteQueryFilteredCandidates,\n previousSqliteQueryFinalSearchK: previousTrace?.sqliteQueryFinalSearchK,\n previousSqliteQueryInitialSearchK: previousTrace?.sqliteQueryInitialSearchK,\n previousSqliteQuerySearchExpansionRatio:\n previousTrace?.sqliteQuerySearchExpansionRatio,\n previousSqliteQueryMode: previousTrace?.sqliteQueryMode,\n previousSqliteQueryPushdownMode: previousTrace?.sqliteQueryPushdownMode,\n previousSqliteQueryPushdownApplied:\n previousTrace?.sqliteQueryPushdownApplied,\n previousSqliteQueryPushdownClauseCount:\n previousTrace?.sqliteQueryPushdownClauseCount,\n previousSqliteQueryTotalFilterClauseCount:\n previousTrace?.sqliteQueryTotalFilterClauseCount,\n previousSqliteQueryJsRemainderClauseCount:\n previousTrace?.sqliteQueryJsRemainderClauseCount,\n previousSqliteQueryMultiplierUsed: previousTrace?.sqliteQueryMultiplierUsed,\n previousSqliteQueryCandidateLimitUsed:\n previousTrace?.sqliteQueryCandidateLimitUsed,\n previousSqliteQueryMaxBackfillsUsed:\n previousTrace?.sqliteQueryMaxBackfillsUsed,\n previousSqliteQueryMinResultsUsed: previousTrace?.sqliteQueryMinResultsUsed,\n previousSqliteQueryFillPolicyUsed: previousTrace?.sqliteQueryFillPolicyUsed,\n previousSqliteQueryPushdownCoverageRatio:\n previousTrace?.sqliteQueryPushdownCoverageRatio,\n previousSqliteQueryJsRemainderRatio:\n previousTrace?.sqliteQueryJsRemainderRatio,\n previousSqliteQueryReturnedCount: previousTrace?.sqliteQueryReturnedCount,\n previousSqliteQueryCandidateYieldRatio:\n previousTrace?.sqliteQueryCandidateYieldRatio,\n previousSqliteQueryTopKFillRatio: previousTrace?.sqliteQueryTopKFillRatio,\n previousSqliteQueryUnderfilledTopK:\n previousTrace?.sqliteQueryUnderfilledTopK,\n previousPostgresQueryBackfillCount:\n previousTrace?.postgresQueryBackfillCount,\n previousPostgresQueryBackfillLimitReached:\n previousTrace?.postgresQueryBackfillLimitReached,\n previousPostgresQueryMinResultsSatisfied:\n previousTrace?.postgresQueryMinResultsSatisfied,\n previousPostgresQueryCandidateBudgetExhausted:\n previousTrace?.postgresQueryCandidateBudgetExhausted,\n previousPostgresQueryCandidateCoverage:\n previousTrace?.postgresQueryCandidateCoverage,\n previousPostgresQueryFilteredCandidates:\n previousTrace?.postgresQueryFilteredCandidates,\n previousPostgresQueryFinalSearchK: previousTrace?.postgresQueryFinalSearchK,\n previousPostgresQueryInitialSearchK:\n previousTrace?.postgresQueryInitialSearchK,\n previousPostgresQuerySearchExpansionRatio:\n previousTrace?.postgresQuerySearchExpansionRatio,\n previousPostgresQueryMode: previousTrace?.postgresQueryMode,\n previousPostgresQueryPushdownMode: previousTrace?.postgresQueryPushdownMode,\n previousPostgresQueryPushdownApplied:\n previousTrace?.postgresQueryPushdownApplied,\n previousPostgresQueryPushdownClauseCount:\n previousTrace?.postgresQueryPushdownClauseCount,\n previousPostgresQueryTotalFilterClauseCount:\n previousTrace?.postgresQueryTotalFilterClauseCount,\n previousPostgresQueryJsRemainderClauseCount:\n previousTrace?.postgresQueryJsRemainderClauseCount,\n previousPostgresQueryMultiplierUsed:\n previousTrace?.postgresQueryMultiplierUsed,\n previousPostgresQueryCandidateLimitUsed:\n previousTrace?.postgresQueryCandidateLimitUsed,\n previousPostgresQueryMaxBackfillsUsed:\n previousTrace?.postgresQueryMaxBackfillsUsed,\n previousPostgresQueryMinResultsUsed:\n previousTrace?.postgresQueryMinResultsUsed,\n previousPostgresQueryFillPolicyUsed:\n previousTrace?.postgresQueryFillPolicyUsed,\n previousPostgresQueryPushdownCoverageRatio:\n previousTrace?.postgresQueryPushdownCoverageRatio,\n previousPostgresQueryJsRemainderRatio:\n previousTrace?.postgresQueryJsRemainderRatio,\n previousPostgresQueryReturnedCount:\n previousTrace?.postgresQueryReturnedCount,\n previousPostgresQueryCandidateYieldRatio:\n previousTrace?.postgresQueryCandidateYieldRatio,\n previousPostgresQueryTopKFillRatio:\n previousTrace?.postgresQueryTopKFillRatio,\n previousPostgresQueryUnderfilledTopK:\n previousTrace?.postgresQueryUnderfilledTopK,\n previousSourceBalanceStrategy: previousTrace?.sourceBalanceStrategy,\n previousSourceAwareChunkReasonLabel:\n previousTrace?.sourceAwareChunkReasonLabel,\n previousStageCounts,\n previousTopContextLabel: previousTrace?.topContextLabel,\n previousTopLocatorLabel: previousTrace?.topLocatorLabel,\n previousTraceMode: previousTrace?.traceMode,\n previousTransformedQuery: previousTrace?.transformedQuery,\n previousSourceAwareUnitScopeLabel: previousTrace?.sourceAwareUnitScopeLabel,\n previousVariantQueries: previousTrace?.variantQueries ?? [],\n previousVectorCount: previousTrace?.vectorCount,\n query: caseResult.query,\n leadChannelAttributionCue,\n leadChannelCue,\n leadContinuityCue,\n leadPresentationCue,\n leadSpreadsheetCue,\n leadSpeakerAttributionCue,\n leadSpeakerCue,\n sqliteQueryBackfillCount,\n sqliteQueryBackfillLimitReached,\n sqliteQueryMinResultsSatisfied,\n sqliteQueryCandidateBudgetExhausted,\n sqliteQueryCandidateCoverage,\n sqliteQueryFilteredCandidates,\n sqliteQueryFinalSearchK,\n sqliteQueryInitialSearchK,\n sqliteQuerySearchExpansionRatio,\n sqliteQueryMode,\n sqliteQueryPushdownMode,\n sqliteQueryPushdownApplied,\n sqliteQueryPushdownClauseCount,\n sqliteQueryTotalFilterClauseCount,\n sqliteQueryJsRemainderClauseCount,\n sqliteQueryMultiplierUsed,\n sqliteQueryCandidateLimitUsed,\n sqliteQueryMaxBackfillsUsed,\n sqliteQueryMinResultsUsed,\n sqliteQueryFillPolicyUsed,\n sqliteQueryPushdownCoverageRatio,\n sqliteQueryJsRemainderRatio,\n sqliteQueryReturnedCount,\n sqliteQueryCandidateYieldRatio,\n sqliteQueryTopKFillRatio,\n sqliteQueryUnderfilledTopK,\n postgresQueryBackfillCount,\n postgresQueryBackfillLimitReached,\n postgresQueryMinResultsSatisfied,\n postgresQueryCandidateBudgetExhausted,\n postgresQueryCandidateCoverage,\n postgresQueryFilteredCandidates,\n postgresQueryFinalSearchK,\n postgresQueryInitialSearchK,\n postgresQuerySearchExpansionRatio,\n postgresQueryMode,\n postgresQueryPushdownMode,\n postgresQueryPushdownApplied,\n postgresQueryPushdownClauseCount,\n postgresQueryTotalFilterClauseCount,\n postgresQueryJsRemainderClauseCount,\n postgresQueryMultiplierUsed,\n postgresQueryCandidateLimitUsed,\n postgresQueryMaxBackfillsUsed,\n postgresQueryMinResultsUsed,\n postgresQueryFillPolicyUsed,\n postgresQueryPushdownCoverageRatio,\n postgresQueryJsRemainderRatio,\n postgresQueryReturnedCount,\n postgresQueryCandidateYieldRatio,\n postgresQueryTopKFillRatio,\n postgresQueryUnderfilledTopK,\n sourceAwareChunkReasonLabel,\n sourceAwareUnitScopeLabel,\n stageCounts,\n status: caseResult.status,\n sourceBalanceStrategy: currentTrace?.sourceBalanceStrategy,\n topContextLabel,\n topLocatorLabel,\n traceChange,\n traceMode: currentTrace?.mode,\n transformedQuery: currentTrace?.transformedQuery || undefined,\n variantQueries: currentTrace?.variantQueries ?? [],\n vectorCount: currentTrace?.resultCounts.vector ?? 0,\n };\n};\n\nconst buildEvaluationCaseTraceSnapshotsFromEvaluated = (\n evaluated: Array<{\n caseResult: RAGEvaluationCaseResult;\n trace?: RAGRetrievalTrace;\n filter?: Record<string, unknown>;\n retrieval?: RAGCollectionSearchParams[\"retrieval\"];\n topResult?: RAGQueryResult;\n }>,\n): RAGEvaluationCaseTraceSnapshot[] =>\n evaluated.map(({ caseResult, filter, retrieval, trace, topResult }) =>\n buildEvaluationCaseTraceSnapshot({\n caseResult,\n filter,\n retrieval,\n currentTrace: trace,\n topResult,\n }),\n );\n\nconst buildEvaluationCaseTraceSnapshots = ({\n current,\n previous,\n}: {\n current?: RAGEvaluationSuiteRun;\n previous?: RAGEvaluationSuiteRun;\n}): RAGEvaluationCaseTraceSnapshot[] => {\n if (!current) {\n return [];\n }\n\n const currentTraces = new Map(\n (current.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry]),\n );\n const previousTraces = new Map(\n (previous?.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry]),\n );\n\n return current.response.cases.map((caseResult) =>\n buildEvaluationCaseTraceSnapshot({\n caseResult,\n currentSnapshot: currentTraces.get(caseResult.caseId),\n currentTrace: (() => {\n const currentSnapshot = currentTraces.get(caseResult.caseId);\n if (!currentSnapshot) {\n return undefined;\n }\n\n return {\n candidateTopK: currentSnapshot.candidateTopK,\n lexicalTopK: currentSnapshot.lexicalTopK,\n mode: currentSnapshot.traceMode ?? \"vector\",\n query: caseResult.query,\n resultCounts: {\n final: currentSnapshot.finalCount,\n fused: currentSnapshot.finalCount,\n lexical: currentSnapshot.lexicalCount,\n reranked: currentSnapshot.finalCount,\n vector: currentSnapshot.vectorCount,\n },\n runLexical: currentSnapshot.lexicalCount > 0,\n runVector: currentSnapshot.vectorCount > 0,\n sourceBalanceStrategy: currentSnapshot.sourceBalanceStrategy ?? \"cap\",\n steps: [],\n topK: caseResult.topK,\n transformedQuery:\n currentSnapshot.transformedQuery ?? caseResult.query,\n variantQueries: currentSnapshot.variantQueries,\n } satisfies RAGRetrievalTrace;\n })(),\n previousTrace: previousTraces.get(caseResult.caseId),\n }),\n );\n};\n\nconst getStatusRank = (status: RAGEvaluationCaseResult[\"status\"]) =>\n status === \"pass\" ? 2 : status === \"partial\" ? 1 : 0;\n\nconst buildCaseTraceLeadLabel = (\n trace?: Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"topLocatorLabel\"\n | \"topContextLabel\"\n | \"sourceAwareUnitScopeLabel\"\n | \"sourceAwareChunkReasonLabel\"\n >,\n) =>\n trace?.topLocatorLabel ??\n trace?.topContextLabel ??\n trace?.sourceAwareUnitScopeLabel ??\n trace?.sourceAwareChunkReasonLabel;\n\nexport const buildRAGEvaluationRunDiff = ({\n current,\n previous,\n}: {\n current: RAGEvaluationSuiteRun;\n previous?: RAGEvaluationSuiteRun;\n}): RAGEvaluationRunDiff => {\n const previousCases = new Map(\n (previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]),\n );\n const diffs = current.response.cases.map((entry) =>\n buildCaseDiff(entry, previousCases.get(entry.caseId)),\n );\n const regressedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) <\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const improvedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) >\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const unchangedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) ===\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const previousCaseTraces = new Map(\n (previous?.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry]),\n );\n const traceLeadChanges = (current.caseTraceSnapshots ?? [])\n .map((entry) => {\n const previousEntry = previousCaseTraces.get(entry.caseId);\n const currentLead = buildCaseTraceLeadLabel(entry);\n const previousLead = buildCaseTraceLeadLabel(previousEntry);\n if (!currentLead || currentLead === previousLead) {\n return undefined;\n }\n\n return {\n caseId: entry.caseId,\n currentLead,\n label: entry.label,\n previousLead,\n };\n })\n .filter(\n (entry): entry is NonNullable<typeof entry> =>\n typeof entry !== \"undefined\",\n );\n\n return {\n currentRunId: current.id,\n improvedCases,\n previousRunId: previous?.id,\n regressedCases,\n suiteId: current.suiteId,\n traceLeadChanges:\n traceLeadChanges.length > 0 ? traceLeadChanges : undefined,\n summaryDelta: {\n averageF1:\n current.response.summary.averageF1 -\n (previous?.response.summary.averageF1 ?? 0),\n averageLatencyMs:\n current.response.summary.averageLatencyMs -\n (previous?.response.summary.averageLatencyMs ?? 0),\n failedCases:\n current.response.summary.failedCases -\n (previous?.response.summary.failedCases ?? 0),\n passedCases:\n current.response.summary.passedCases -\n (previous?.response.summary.passedCases ?? 0),\n passingRate:\n current.response.passingRate - (previous?.response.passingRate ?? 0),\n partialCases:\n current.response.summary.partialCases -\n (previous?.response.summary.partialCases ?? 0),\n },\n traceSummaryDelta:\n current.traceSummary || previous?.traceSummary\n ? {\n averageCandidateTopK:\n (current.traceSummary?.averageCandidateTopK ?? 0) -\n (previous?.traceSummary?.averageCandidateTopK ?? 0),\n averageFinalCount:\n (current.traceSummary?.averageFinalCount ?? 0) -\n (previous?.traceSummary?.averageFinalCount ?? 0),\n averageLexicalCount:\n (current.traceSummary?.averageLexicalCount ?? 0) -\n (previous?.traceSummary?.averageLexicalCount ?? 0),\n averageLexicalTopK:\n (current.traceSummary?.averageLexicalTopK ?? 0) -\n (previous?.traceSummary?.averageLexicalTopK ?? 0),\n averageVectorCount:\n (current.traceSummary?.averageVectorCount ?? 0) -\n (previous?.traceSummary?.averageVectorCount ?? 0),\n balancedCases:\n (current.traceSummary?.balancedCases ?? 0) -\n (previous?.traceSummary?.balancedCases ?? 0),\n officeEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.officeEvidenceReconcileCases ?? 0),\n officeParagraphEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeParagraphEvidenceReconcileCases ??\n 0) -\n (previous?.traceSummary?.officeParagraphEvidenceReconcileCases ??\n 0),\n officeListEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeListEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.officeListEvidenceReconcileCases ?? 0),\n officeTableEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeTableEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.officeTableEvidenceReconcileCases ?? 0),\n pdfEvidenceReconcileCasesDelta:\n (current.traceSummary?.pdfEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.pdfEvidenceReconcileCases ?? 0),\n lexicalCases:\n (current.traceSummary?.lexicalCases ?? 0) -\n (previous?.traceSummary?.lexicalCases ?? 0),\n modesChanged:\n (current.traceSummary?.modes ?? []).join(\"|\") !==\n (previous?.traceSummary?.modes ?? []).join(\"|\"),\n roundRobinCases:\n (current.traceSummary?.roundRobinCases ?? 0) -\n (previous?.traceSummary?.roundRobinCases ?? 0),\n stageCounts: diffTraceStageCounts({\n current: current.traceSummary?.stageCounts ?? {},\n previous: previous?.traceSummary?.stageCounts ?? {},\n }),\n sourceBalanceStrategiesChanged:\n (current.traceSummary?.sourceBalanceStrategies ?? []).join(\n \"|\",\n ) !==\n (previous?.traceSummary?.sourceBalanceStrategies ?? []).join(\"|\"),\n transformedCases:\n (current.traceSummary?.transformedCases ?? 0) -\n (previous?.traceSummary?.transformedCases ?? 0),\n variantCases:\n (current.traceSummary?.variantCases ?? 0) -\n (previous?.traceSummary?.variantCases ?? 0),\n vectorCases:\n (current.traceSummary?.vectorCases ?? 0) -\n (previous?.traceSummary?.vectorCases ?? 0),\n }\n : undefined,\n unchangedCases,\n };\n};\n\nexport const buildRAGAnswerGroundingEvaluationRunDiff = ({\n current,\n previous,\n}: {\n current: RAGAnswerGroundingEvaluationRun;\n previous?: RAGAnswerGroundingEvaluationRun;\n}): RAGAnswerGroundingEvaluationRunDiff => {\n const previousCases = new Map(\n (previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]),\n );\n const diffs = current.response.cases.map((entry) =>\n buildGroundingCaseDiff(entry, previousCases.get(entry.caseId)),\n );\n const regressedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) <\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const improvedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) >\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const unchangedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) ===\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n\n return {\n currentRunId: current.id,\n improvedCases,\n previousRunId: previous?.id,\n regressedCases,\n suiteId: current.suiteId,\n summaryDelta: {\n averageCitationF1:\n current.response.summary.averageCitationF1 -\n (previous?.response.summary.averageCitationF1 ?? 0),\n averageResolvedCitationRate:\n current.response.summary.averageResolvedCitationRate -\n (previous?.response.summary.averageResolvedCitationRate ?? 0),\n failedCases:\n current.response.summary.failedCases -\n (previous?.response.summary.failedCases ?? 0),\n passedCases:\n current.response.summary.passedCases -\n (previous?.response.summary.passedCases ?? 0),\n passingRate:\n current.response.passingRate - (previous?.response.passingRate ?? 0),\n partialCases:\n current.response.summary.partialCases -\n (previous?.response.summary.partialCases ?? 0),\n },\n unchangedCases,\n };\n};\n\nexport const createRAGFileEvaluationHistoryStore = (\n path: string,\n): RAGEvaluationHistoryStore => ({\n listRuns: async ({ limit, suiteId } = {}) => {\n let parsed: RAGEvaluationSuiteRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) => !suiteId || entry.suiteId === suiteId,\n );\n const sorted = normalizeHistoryRuns(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveRun: async (run) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeHistoryRuns([\n run,\n ...existing.filter((entry: RAGEvaluationSuiteRun) => entry.id !== run.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n pruneRuns: async (input) => {\n let existing: RAGEvaluationSuiteRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n existing = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: existing,\n sort: normalizeHistoryRuns,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(pruned.next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n});\n\nconst normalizeEvaluationSuiteSnapshots = (\n snapshots: RAGEvaluationSuiteSnapshot[],\n) =>\n [...snapshots].sort((left, right) => {\n if (right.createdAt !== left.createdAt) {\n return right.createdAt - left.createdAt;\n }\n if (right.version !== left.version) {\n return right.version - left.version;\n }\n return right.id.localeCompare(left.id);\n });\n\nexport const createRAGFileEvaluationSuiteSnapshotHistoryStore = (\n path: string,\n): RAGEvaluationSuiteSnapshotHistoryStore => ({\n listSnapshots: async ({ limit, suiteId } = {}) => {\n let parsed: RAGEvaluationSuiteSnapshot[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) => !suiteId || entry.suiteId === suiteId,\n );\n const sorted = normalizeEvaluationSuiteSnapshots(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveSnapshot: async (snapshot) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeEvaluationSuiteSnapshots([\n snapshot,\n ...existing.filter(\n (entry: RAGEvaluationSuiteSnapshot) => entry.id !== snapshot.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n pruneSnapshots: async (input) => {\n let existing: RAGEvaluationSuiteSnapshot[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n existing = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: existing,\n sort: normalizeEvaluationSuiteSnapshots,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(pruned.next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n});\n\nexport const createRAGFileRetrievalComparisonHistoryStore = (\n path: string,\n): RAGRetrievalComparisonHistoryStore => ({\n listRuns: async ({ groupKey, label, limit, suiteId, tag, winnerId } = {}) => {\n let parsed: RAGRetrievalComparisonRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const normalizedLabel = normalizeLabelFilter(label);\n const filtered = parsed.filter(\n (entry) =>\n (!suiteId || entry.suiteId === suiteId) &&\n (!groupKey || entry.groupKey === groupKey) &&\n (!tag || (entry.tags ?? []).includes(tag)) &&\n (!normalizedLabel ||\n entry.label.toLowerCase().includes(normalizedLabel) ||\n entry.suiteLabel.toLowerCase().includes(normalizedLabel)) &&\n matchesWinner(entry, winnerId),\n );\n const sorted = normalizeRetrievalComparisonRuns(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveRun: async (run) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalComparisonRuns([\n run,\n ...existing.filter(\n (entry: RAGRetrievalComparisonRun) => entry.id !== run.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalBaselineStore = (\n path: string,\n): RAGRetrievalBaselineStore => {\n const listBaselines: RAGRetrievalBaselineStore[\"listBaselines\"] = async ({\n groupKey,\n limit,\n tag,\n status,\n } = {}) => {\n let parsed: RAGRetrievalBaselineRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!tag || (entry.tags ?? []).includes(tag)) &&\n (!status || entry.status === status),\n );\n const sorted = normalizeRetrievalBaselineRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n };\n\n return {\n getBaseline: async (groupKey) => {\n const baselines = await Promise.resolve(\n listBaselines({ groupKey, limit: 1 }),\n );\n return baselines[0] ?? null;\n },\n listBaselines,\n saveBaseline: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const currentVersion =\n existing\n .filter(\n (entry: RAGRetrievalBaselineRecord) =>\n entry.groupKey === record.groupKey,\n )\n .reduce((max, entry) => Math.max(max, entry.version ?? 0), 0) ?? 0;\n const next = normalizeRetrievalBaselineRecords([\n {\n ...record,\n status: \"active\",\n version:\n typeof record.version === \"number\"\n ? record.version\n : currentVersion + 1,\n },\n ...existing.map((entry: RAGRetrievalBaselineRecord) =>\n entry.groupKey === record.groupKey &&\n (entry.rolloutLabel ?? undefined) ===\n (record.rolloutLabel ?? undefined)\n ? { ...entry, status: \"superseded\" as const }\n : entry,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n };\n};\n\nexport const createRAGFileRetrievalReleaseDecisionStore = (\n path: string,\n): RAGRetrievalReleaseDecisionStore => ({\n listDecisions: async ({ groupKey, kind, limit } = {}) => {\n let parsed: RAGRetrievalReleaseDecisionRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!kind || entry.kind === kind),\n );\n const sorted = normalizeRetrievalReleaseDecisionRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveDecision: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalReleaseDecisionRecords([\n record,\n ...existing.filter(\n (entry: RAGRetrievalReleaseDecisionRecord) => entry.id !== record.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffDecisionStore = (\n path: string,\n): RAGRetrievalLaneHandoffDecisionStore => ({\n listDecisions: async ({\n groupKey,\n kind,\n limit,\n sourceRolloutLabel,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalLaneHandoffDecisionRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!kind || entry.kind === kind) &&\n (!sourceRolloutLabel ||\n entry.sourceRolloutLabel === sourceRolloutLabel) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n );\n const sorted = normalizeRetrievalLaneHandoffDecisionRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveDecision: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalLaneHandoffDecisionRecords([\n record,\n ...existing.filter(\n (entry: RAGRetrievalLaneHandoffDecisionRecord) =>\n entry.id !== record.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalReleaseIncidentStore = (\n path: string,\n): RAGRetrievalReleaseIncidentStore => ({\n listIncidents: async ({\n corpusGroupKey,\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalReleaseIncidentRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!corpusGroupKey || entry.corpusGroupKey === corpusGroupKey) &&\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel) &&\n (!severity || entry.severity === severity) &&\n (!status || entry.status === status),\n );\n const sorted = normalizeRetrievalReleaseIncidentRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveIncident: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalReleaseIncidentRecords([\n record,\n ...existing.filter(\n (entry: RAGRetrievalReleaseIncidentRecord) => entry.id !== record.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffIncidentStore = (\n path: string,\n): RAGRetrievalLaneHandoffIncidentStore => ({\n listIncidents: async ({\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalLaneHandoffIncidentRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel) &&\n (!severity || entry.severity === severity) &&\n (!status || entry.status === status),\n );\n const sorted = normalizeRetrievalReleaseIncidentRecords(\n filtered as RAGRetrievalReleaseIncidentRecord[],\n ) as RAGRetrievalLaneHandoffIncidentRecord[];\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveIncident: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalReleaseIncidentRecords([\n record as RAGRetrievalReleaseIncidentRecord,\n ...existing.filter(\n (entry: RAGRetrievalLaneHandoffIncidentRecord) =>\n entry.id !== record.id,\n ),\n ]) as RAGRetrievalLaneHandoffIncidentRecord[];\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffIncidentHistoryStore = (\n path: string,\n): RAGRetrievalLaneHandoffIncidentHistoryStore => ({\n listRecords: async ({\n action,\n groupKey,\n incidentId,\n limit,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalLaneHandoffIncidentHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed\n .filter(\n (entry) =>\n (!action || entry.action === action) &&\n (!groupKey || entry.groupKey === groupKey) &&\n (!incidentId || entry.incidentId === incidentId) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalLaneHandoffIncidentHistoryRecord,\n right: RAGRetrievalLaneHandoffIncidentHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalIncidentRemediationDecisionStore = (\n path: string,\n): RAGRetrievalIncidentRemediationDecisionStore => ({\n listRecords: async ({\n groupKey,\n incidentId,\n limit,\n remediationKind,\n status,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalIncidentRemediationDecisionRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = normalizeRetrievalIncidentRemediationDecisionRecords(\n parsed,\n ).filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!incidentId || entry.incidentId === incidentId) &&\n (!remediationKind || entry.remediationKind === remediationKind) &&\n (!status || entry.status === status) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n );\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalIncidentRemediationDecisionRecords([\n record,\n ...existing,\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalIncidentRemediationExecutionHistoryStore = (\n path: string,\n): RAGRetrievalIncidentRemediationExecutionHistoryStore => ({\n listRecords: async ({\n actionKind,\n blockedByGuardrail,\n code,\n groupKey,\n idempotentReplay,\n incidentId,\n limit,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalIncidentRemediationExecutionHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered =\n normalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n parsed,\n ).filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!incidentId || entry.incidentId === incidentId) &&\n (!actionKind || entry.action.kind === actionKind) &&\n (!code || entry.code === code) &&\n (typeof blockedByGuardrail !== \"boolean\" ||\n entry.blockedByGuardrail === blockedByGuardrail) &&\n (typeof idempotentReplay !== \"boolean\" ||\n entry.idempotentReplay === idempotentReplay) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n );\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalIncidentRemediationExecutionHistoryRecords([\n record,\n ...existing,\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffAutoCompletePolicyHistoryStore = (\n path: string,\n): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, targetRolloutLabel } = {}) => {\n let parsed: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n right: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalReleaseLanePolicyHistoryStore = (\n path: string,\n): RAGRetrievalReleaseLanePolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, rolloutLabel, scope } = {}) => {\n let parsed: RAGRetrievalReleaseLanePolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!rolloutLabel || entry.rolloutLabel === rolloutLabel) &&\n (!scope || entry.scope === scope),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalReleaseLanePolicyHistoryRecord,\n right: RAGRetrievalReleaseLanePolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalBaselineGatePolicyHistoryStore = (\n path: string,\n): RAGRetrievalBaselineGatePolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, rolloutLabel, scope } = {}) => {\n let parsed: RAGRetrievalBaselineGatePolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!rolloutLabel || entry.rolloutLabel === rolloutLabel) &&\n (!scope || entry.scope === scope),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalBaselineGatePolicyHistoryRecord,\n right: RAGRetrievalBaselineGatePolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalReleaseLaneEscalationPolicyHistoryStore = (\n path: string,\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, targetRolloutLabel } = {}) => {\n let parsed: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n right: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileSearchTraceStore = (\n path: string,\n): RAGSearchTraceStore => ({\n async listTraces(input) {\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n traces?: RAGSearchTraceRecord[];\n };\n const traces = Array.isArray(data.traces) ? data.traces : [];\n const filtered = traces.filter((trace) => {\n if (input?.query && trace.query !== input.query) {\n return false;\n }\n if (input?.groupKey && trace.groupKey !== input.groupKey) {\n return false;\n }\n if (input?.tag && !(trace.tags ?? []).includes(input.tag)) {\n return false;\n }\n return true;\n });\n\n return normalizeTraceSummaryRuns(filtered).slice(\n 0,\n input?.limit ?? DEFAULT_HISTORY_LIMIT,\n );\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return [];\n }\n\n throw error;\n }\n },\n async saveTrace(trace) {\n let traces: RAGSearchTraceRecord[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n traces?: RAGSearchTraceRecord[];\n };\n traces = Array.isArray(data.traces) ? data.traces : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const nextTraces = normalizeTraceSummaryRuns([\n trace,\n ...traces.filter((entry) => entry.id !== trace.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n traces: nextTraces,\n },\n null,\n 2,\n ),\n );\n },\n async pruneTraces(input) {\n let traces: RAGSearchTraceRecord[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n traces?: RAGSearchTraceRecord[];\n };\n traces = Array.isArray(data.traces) ? data.traces : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const pruned = applyRAGSearchTracePrunePolicy({\n input,\n traces,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n traces: pruned.next,\n },\n null,\n 2,\n ),\n );\n\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n };\n },\n});\n\nexport const createRAGFileSearchTracePruneHistoryStore = (\n path: string,\n): RAGSearchTracePruneHistoryStore => ({\n listRuns: async (input) => {\n let parsed: RAGSearchTracePruneRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) => !input?.trigger || entry.trigger === input.trigger,\n );\n const sorted = normalizeSearchTracePruneRuns(filtered);\n return typeof input?.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRun: async (run) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeSearchTracePruneRuns([\n run,\n ...existing.filter(\n (entry: RAGSearchTracePruneRun) => entry.id !== run.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport type SQLiteRAGSearchTraceStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGEvaluationHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGEvaluationSuiteSnapshotHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGAnswerGroundingEvaluationHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGSearchTracePruneHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalComparisonHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseDecisionStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalBaselineStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseIncidentStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffDecisionStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffIncidentStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffIncidentHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalIncidentRemediationDecisionStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalIncidentRemediationExecutionHistoryStoreOptions =\n {\n db?: Database;\n path?: string;\n tableName?: string;\n };\n\nexport type SQLiteRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStoreOptions =\n {\n db?: Database;\n path?: string;\n tableName?: string;\n };\n\nexport type SQLiteRAGRetrievalReleaseLanePolicyHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalBaselineGatePolicyHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseLaneEscalationPolicyHistoryStoreOptions = {\n db?: Database;\n path?: string;\n tableName?: string;\n};\n\nexport type SQLiteRAGGovernanceStoreBundleOptions = {\n db?: Database;\n path?: string;\n tablePrefix?: string;\n};\n\nexport const createRAGSQLiteEvaluationHistoryStore = (\n options: SQLiteRAGEvaluationHistoryStoreOptions,\n): RAGEvaluationHistoryStore => {\n const tableName = options.tableName ?? \"rag_evaluation_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`,\n );\n\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tfinished_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRuns(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n const sql =\n `SELECT record_json FROM ${tableName}` +\n `${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params) as Array<{\n record_json: string;\n }>;\n const runs = normalizeHistoryRuns(\n rows.map((row) => JSON.parse(row.record_json) as RAGEvaluationSuiteRun),\n );\n\n return typeof input.limit === \"number\"\n ? runs.slice(0, input.limit)\n : runs;\n },\n saveRun(run) {\n insert.run(run.id, run.suiteId, run.finishedAt, JSON.stringify(run));\n },\n pruneRuns(input) {\n const allRows = db\n .prepare(`SELECT record_json FROM ${tableName}`)\n .all() as Array<{\n record_json: string;\n }>;\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: allRows.map(\n (row) => JSON.parse(row.record_json) as RAGEvaluationSuiteRun,\n ),\n sort: normalizeHistoryRuns,\n });\n for (const run of pruned.removed) {\n db.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(run.id);\n }\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n };\n};\n\nexport const createRAGSQLiteEvaluationSuiteSnapshotHistoryStore = (\n options: SQLiteRAGEvaluationSuiteSnapshotHistoryStoreOptions,\n): RAGEvaluationSuiteSnapshotHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_evaluation_suite_snapshot_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tversion INTEGER NOT NULL,\n\t\t\tcreated_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_created_at_idx ON ${tableName} (suite_id, created_at DESC, version DESC)`,\n );\n\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tversion,\n\t\t\tcreated_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tversion = excluded.version,\n\t\t\tcreated_at = excluded.created_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listSnapshots(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n const sql =\n `SELECT record_json FROM ${tableName}` +\n `${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY created_at DESC, version DESC\";\n const rows = db.prepare(sql).all(...params) as Array<{\n record_json: string;\n }>;\n const snapshots = normalizeEvaluationSuiteSnapshots(\n rows.map(\n (row) => JSON.parse(row.record_json) as RAGEvaluationSuiteSnapshot,\n ),\n );\n\n return typeof input.limit === \"number\"\n ? snapshots.slice(0, input.limit)\n : snapshots;\n },\n saveSnapshot(snapshot) {\n insert.run(\n snapshot.id,\n snapshot.suiteId,\n snapshot.version,\n snapshot.createdAt,\n JSON.stringify(snapshot),\n );\n },\n pruneSnapshots(input) {\n const allRows = db\n .prepare(`SELECT record_json FROM ${tableName}`)\n .all() as Array<{\n record_json: string;\n }>;\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: allRows.map(\n (row) => JSON.parse(row.record_json) as RAGEvaluationSuiteSnapshot,\n ),\n sort: normalizeEvaluationSuiteSnapshots,\n });\n for (const snapshot of pruned.removed) {\n db.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(snapshot.id);\n }\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n };\n};\n\nexport const createRAGSQLiteAnswerGroundingEvaluationHistoryStore = (\n options: SQLiteRAGAnswerGroundingEvaluationHistoryStoreOptions,\n): RAGAnswerGroundingEvaluationHistoryStore => {\n const tableName = options.tableName ?? \"rag_answer_grounding_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`,\n );\n\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tfinished_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRuns(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n const sql =\n `SELECT record_json FROM ${tableName}` +\n `${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params) as Array<{\n record_json: string;\n }>;\n const runs = normalizeGroundingHistoryRuns(\n rows.map(\n (row) =>\n JSON.parse(row.record_json) as RAGAnswerGroundingEvaluationRun,\n ),\n );\n\n return typeof input.limit === \"number\"\n ? runs.slice(0, input.limit)\n : runs;\n },\n saveRun(run) {\n insert.run(run.id, run.suiteId, run.finishedAt, JSON.stringify(run));\n },\n pruneRuns(input) {\n const allRows = db\n .prepare(`SELECT record_json FROM ${tableName}`)\n .all() as Array<{\n record_json: string;\n }>;\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: allRows.map(\n (row) =>\n JSON.parse(row.record_json) as RAGAnswerGroundingEvaluationRun,\n ),\n sort: normalizeGroundingHistoryRuns,\n });\n for (const run of pruned.removed) {\n db.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(run.id);\n }\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n };\n};\n\ntype SQLiteSearchTraceRow = {\n id: string;\n query: string;\n label: string;\n group_key: string | null;\n tags_json: string | null;\n started_at: number;\n finished_at: number;\n elapsed_ms: number;\n trace_json: string;\n summary_json: string;\n results_json: string;\n metadata_json: string | null;\n};\n\ntype SQLiteSearchTracePruneHistoryRow = {\n id: string;\n trigger: string;\n started_at: number;\n finished_at: number;\n elapsed_ms: number;\n run_json: string;\n};\n\nconst isSQLiteSearchTraceRow = (\n value: unknown,\n): value is SQLiteSearchTraceRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.query === \"string\" &&\n typeof value.label === \"string\" &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n (typeof value.tags_json === \"string\" || value.tags_json === null) &&\n typeof value.started_at === \"number\" &&\n typeof value.finished_at === \"number\" &&\n typeof value.elapsed_ms === \"number\" &&\n typeof value.trace_json === \"string\" &&\n typeof value.summary_json === \"string\" &&\n typeof value.results_json === \"string\" &&\n (typeof value.metadata_json === \"string\" || value.metadata_json === null);\n\nconst isSQLiteSearchTracePruneHistoryRow = (\n value: unknown,\n): value is SQLiteSearchTracePruneHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.trigger === \"string\" &&\n typeof value.started_at === \"number\" &&\n typeof value.finished_at === \"number\" &&\n typeof value.elapsed_ms === \"number\" &&\n typeof value.run_json === \"string\";\n\ntype SQLiteRetrievalComparisonHistoryRow = {\n id: string;\n suite_id: string;\n suite_label: string;\n label: string;\n corpus_group_key: string | null;\n group_key: string | null;\n tags_json: string | null;\n started_at: number;\n finished_at: number;\n elapsed_ms: number;\n comparison_json: string;\n decision_summary_json: string | null;\n};\n\nconst isSQLiteRetrievalComparisonHistoryRow = (\n value: unknown,\n): value is SQLiteRetrievalComparisonHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.suite_id === \"string\" &&\n typeof value.suite_label === \"string\" &&\n typeof value.label === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n (typeof value.tags_json === \"string\" || value.tags_json === null) &&\n typeof value.started_at === \"number\" &&\n typeof value.finished_at === \"number\" &&\n typeof value.elapsed_ms === \"number\" &&\n typeof value.comparison_json === \"string\" &&\n (typeof value.decision_summary_json === \"string\" ||\n value.decision_summary_json === null);\n\ntype SQLiteRetrievalReleaseDecisionRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n kind: string;\n decided_at: number;\n record_json: string;\n};\n\nconst isSQLiteRetrievalReleaseDecisionRow = (\n value: unknown,\n): value is SQLiteRetrievalReleaseDecisionRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.kind === \"string\" &&\n typeof value.decided_at === \"number\" &&\n typeof value.record_json === \"string\";\n\ntype SQLiteRetrievalBaselineRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n rollout_label: string | null;\n promoted_at: number;\n status: string;\n version: number;\n tags_json: string | null;\n record_json: string;\n};\n\nconst isSQLiteRetrievalBaselineRow = (\n value: unknown,\n): value is SQLiteRetrievalBaselineRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.rollout_label === \"string\" || value.rollout_label === null) &&\n typeof value.promoted_at === \"number\" &&\n typeof value.status === \"string\" &&\n typeof value.version === \"number\" &&\n (typeof value.tags_json === \"string\" || value.tags_json === null) &&\n typeof value.record_json === \"string\";\n\ntype SQLiteRetrievalReleaseIncidentRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string | null;\n severity: string;\n status: string;\n triggered_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffDecisionRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n source_rollout_label: string;\n target_rollout_label: string;\n kind: string;\n decided_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffIncidentRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string | null;\n source_rollout_label: string | null;\n severity: string;\n status: string;\n triggered_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffIncidentHistoryRow = {\n id: string;\n incident_id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string | null;\n action: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalIncidentRemediationDecisionRow = {\n id: string;\n incident_id: string;\n group_key: string;\n target_rollout_label: string | null;\n remediation_kind: string;\n status: string;\n decided_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalIncidentRemediationExecutionHistoryRow = {\n id: string;\n incident_id: string | null;\n group_key: string | null;\n target_rollout_label: string | null;\n action_kind: string;\n code: string;\n blocked_by_guardrail: number;\n idempotent_replay: number;\n executed_at: number;\n record_json: string;\n};\n\ntype SQLiteLaneHandoffAutoCompletePolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteReleaseLanePolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string | null;\n rollout_label: string;\n scope: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteBaselineGatePolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string | null;\n rollout_label: string;\n scope: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteReleaseLaneEscalationPolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string;\n recorded_at: number;\n record_json: string;\n};\n\nconst isSQLiteRetrievalReleaseIncidentRow = (\n value: unknown,\n): value is SQLiteRetrievalReleaseIncidentRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.severity === \"string\" &&\n typeof value.status === \"string\" &&\n typeof value.triggered_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalLaneHandoffDecisionRow = (\n value: unknown,\n): value is SQLiteRetrievalLaneHandoffDecisionRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.source_rollout_label === \"string\" &&\n typeof value.target_rollout_label === \"string\" &&\n typeof value.kind === \"string\" &&\n typeof value.decided_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalLaneHandoffIncidentRow = (\n value: unknown,\n): value is SQLiteRetrievalLaneHandoffIncidentRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n (typeof value.source_rollout_label === \"string\" ||\n value.source_rollout_label === null) &&\n typeof value.severity === \"string\" &&\n typeof value.status === \"string\" &&\n typeof value.triggered_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalLaneHandoffIncidentHistoryRow = (\n value: unknown,\n): value is SQLiteRetrievalLaneHandoffIncidentHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.incident_id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.action === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalIncidentRemediationDecisionRow = (\n value: unknown,\n): value is SQLiteRetrievalIncidentRemediationDecisionRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.incident_id === \"string\" &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.remediation_kind === \"string\" &&\n typeof value.status === \"string\" &&\n typeof value.decided_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalIncidentRemediationExecutionHistoryRow = (\n value: unknown,\n): value is SQLiteRetrievalIncidentRemediationExecutionHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.incident_id === \"string\" || value.incident_id === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.action_kind === \"string\" &&\n typeof value.code === \"string\" &&\n typeof value.blocked_by_guardrail === \"number\" &&\n typeof value.idempotent_replay === \"number\" &&\n typeof value.executed_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteLaneHandoffAutoCompletePolicyHistoryRow = (\n value: unknown,\n): value is SQLiteLaneHandoffAutoCompletePolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.target_rollout_label === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteReleaseLanePolicyHistoryRow = (\n value: unknown,\n): value is SQLiteReleaseLanePolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n typeof value.rollout_label === \"string\" &&\n typeof value.scope === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteBaselineGatePolicyHistoryRow = (\n value: unknown,\n): value is SQLiteBaselineGatePolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n typeof value.rollout_label === \"string\" &&\n typeof value.scope === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteReleaseLaneEscalationPolicyHistoryRow = (\n value: unknown,\n): value is SQLiteReleaseLaneEscalationPolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.target_rollout_label === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst assertSupportedIdentifier = (name: string) => {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n throw new Error(\n `Invalid SQLite search trace table name \"${name}\". Only alphanumeric and underscore names are allowed.`,\n );\n }\n};\n\nconst ensureSQLiteColumns = (\n db: Database,\n tableName: string,\n columns: Array<{ name: string; definition: string }>,\n) => {\n const pragma = db.prepare(`PRAGMA table_info(${tableName})`).all();\n const existing = new Set(\n Array.isArray(pragma)\n ? pragma\n .filter(\n (row): row is { name?: unknown } =>\n isObjectRecord(row) && \"name\" in row,\n )\n .map((row) => (typeof row.name === \"string\" ? row.name : undefined))\n .filter((name): name is string => typeof name === \"string\")\n : [],\n );\n\n for (const column of columns) {\n if (existing.has(column.name)) {\n continue;\n }\n db.exec(\n `ALTER TABLE ${tableName} ADD COLUMN ${column.name} ${column.definition}`,\n );\n }\n};\n\nconst getMissingSQLiteColumns = (\n db: Database,\n tableName: string,\n columns: Array<{ name: string; definition: string }>,\n): RAGSQLiteStoreMigrationIssue[] => {\n const pragma = db.prepare(`PRAGMA table_info(${tableName})`).all();\n const existing = new Set(\n Array.isArray(pragma)\n ? pragma\n .filter(\n (row): row is { name?: unknown } =>\n isObjectRecord(row) && \"name\" in row,\n )\n .map((row) => (typeof row.name === \"string\" ? row.name : undefined))\n .filter((name): name is string => typeof name === \"string\")\n : [],\n );\n\n return columns\n .filter((column) => !existing.has(column.name))\n .map((column) => ({\n columnName: column.name,\n definition: column.definition,\n tableName,\n }));\n};\n\ntype SQLiteStoreMigrationDescriptor = {\n tableName: string;\n columns: Array<{ name: string; definition: string }>;\n};\n\nconst getDefaultSQLiteStoreMigrationDescriptors =\n (): SQLiteStoreMigrationDescriptor[] => [\n {\n tableName: DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME,\n columns: [{ definition: \"TEXT\", name: \"corpus_group_key\" }],\n },\n {\n tableName: DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME,\n columns: [{ definition: \"TEXT\", name: \"corpus_group_key\" }],\n },\n {\n tableName: DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME,\n columns: [\n { definition: \"TEXT\", name: \"group_key\" },\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ],\n },\n ];\n\nconst summarizeSQLiteStoreMigrationIssues = (\n issues: RAGSQLiteStoreMigrationIssue[],\n) =>\n issues.length > 0\n ? `${issues.length} SQLite schema migration issue${issues.length === 1 ? \"\" : \"s\"} detected`\n : undefined;\n\nexport type SQLiteRAGStoreMigrationOptions = {\n db?: Database;\n path?: string;\n descriptors?: SQLiteStoreMigrationDescriptor[];\n};\n\nexport const inspectRAGSQLiteStoreMigrations = (\n options: SQLiteRAGStoreMigrationOptions = {},\n): RAGSQLiteStoreMigrationInspection => {\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n const descriptors =\n options.descriptors ?? getDefaultSQLiteStoreMigrationDescriptors();\n const issues = descriptors.flatMap((descriptor) =>\n getMissingSQLiteColumns(db, descriptor.tableName, descriptor.columns),\n );\n\n return {\n issues,\n summary: summarizeSQLiteStoreMigrationIssues(issues),\n };\n};\n\nexport const applyRAGSQLiteStoreMigrations = (\n options: SQLiteRAGStoreMigrationOptions = {},\n): RAGSQLiteStoreMigrationResult => {\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n const descriptors =\n options.descriptors ?? getDefaultSQLiteStoreMigrationDescriptors();\n const inspection = inspectRAGSQLiteStoreMigrations({\n db,\n descriptors,\n });\n\n for (const descriptor of descriptors) {\n ensureSQLiteColumns(db, descriptor.tableName, descriptor.columns);\n }\n\n return {\n ...inspection,\n applied: inspection.issues,\n };\n};\n\nconst mapSQLiteSearchTraceRow = (\n row: SQLiteSearchTraceRow,\n): RAGSearchTraceRecord => ({\n elapsedMs: row.elapsed_ms,\n finishedAt: row.finished_at,\n groupKey: row.group_key ?? undefined,\n id: row.id,\n label: row.label,\n metadata: parseJSONRecord(row.metadata_json),\n query: row.query,\n results: parseJSONArray(row.results_json, []),\n startedAt: row.started_at,\n summary: JSON.parse(row.summary_json),\n tags: normalizeStringArray(parseJSONArray(row.tags_json, [])),\n trace: JSON.parse(row.trace_json),\n});\n\nconst mapSQLiteSearchTracePruneHistoryRow = (\n row: SQLiteSearchTracePruneHistoryRow,\n): RAGSearchTracePruneRun => JSON.parse(row.run_json);\n\nconst mapSQLiteRetrievalComparisonHistoryRow = (\n row: SQLiteRetrievalComparisonHistoryRow,\n): RAGRetrievalComparisonRun => ({\n comparison: JSON.parse(row.comparison_json),\n corpusGroupKey: row.corpus_group_key ?? undefined,\n decisionSummary: row.decision_summary_json\n ? JSON.parse(row.decision_summary_json)\n : undefined,\n elapsedMs: row.elapsed_ms,\n finishedAt: row.finished_at,\n groupKey: row.group_key ?? undefined,\n id: row.id,\n label: row.label,\n startedAt: row.started_at,\n suiteId: row.suite_id,\n suiteLabel: row.suite_label,\n tags: normalizeStringArray(parseJSONArray(row.tags_json, [])),\n});\n\nconst mapSQLiteRetrievalReleaseDecisionRow = (\n row: SQLiteRetrievalReleaseDecisionRow,\n): RAGRetrievalReleaseDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalBaselineRow = (\n row: SQLiteRetrievalBaselineRow,\n): RAGRetrievalBaselineRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalReleaseIncidentRow = (\n row: SQLiteRetrievalReleaseIncidentRow,\n): RAGRetrievalReleaseIncidentRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffDecisionRow = (\n row: SQLiteRetrievalLaneHandoffDecisionRow,\n): RAGRetrievalLaneHandoffDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffIncidentRow = (\n row: SQLiteRetrievalLaneHandoffIncidentRow,\n): RAGRetrievalLaneHandoffIncidentRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffIncidentHistoryRow = (\n row: SQLiteRetrievalLaneHandoffIncidentHistoryRow,\n): RAGRetrievalLaneHandoffIncidentHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalIncidentRemediationDecisionRow = (\n row: SQLiteRetrievalIncidentRemediationDecisionRow,\n): RAGRetrievalIncidentRemediationDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalIncidentRemediationExecutionHistoryRow = (\n row: SQLiteRetrievalIncidentRemediationExecutionHistoryRow,\n): RAGRetrievalIncidentRemediationExecutionHistoryRecord =>\n JSON.parse(row.record_json);\n\nconst mapSQLiteLaneHandoffAutoCompletePolicyHistoryRow = (\n row: SQLiteLaneHandoffAutoCompletePolicyHistoryRow,\n): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord =>\n JSON.parse(row.record_json);\n\nconst mapSQLiteReleaseLanePolicyHistoryRow = (\n row: SQLiteReleaseLanePolicyHistoryRow,\n): RAGRetrievalReleaseLanePolicyHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteBaselineGatePolicyHistoryRow = (\n row: SQLiteBaselineGatePolicyHistoryRow,\n): RAGRetrievalBaselineGatePolicyHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteReleaseLaneEscalationPolicyHistoryRow = (\n row: SQLiteReleaseLaneEscalationPolicyHistoryRow,\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord =>\n JSON.parse(row.record_json);\n\nexport const createRAGSQLiteSearchTraceStore = (\n options: SQLiteRAGSearchTraceStoreOptions,\n): RAGSearchTraceStore => {\n const tableName = options.tableName ?? DEFAULT_SEARCH_TRACE_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tquery TEXT NOT NULL,\n\t\t\tlabel TEXT NOT NULL,\n\t\t\tgroup_key TEXT,\n\t\t\ttags_json TEXT,\n\t\t\tstarted_at INTEGER NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\telapsed_ms INTEGER NOT NULL,\n\t\t\ttrace_json TEXT NOT NULL,\n\t\t\tsummary_json TEXT NOT NULL,\n\t\t\tresults_json TEXT NOT NULL,\n\t\t\tmetadata_json TEXT\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_query_finished_at_idx ON ${tableName} (query, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_finished_at_idx ON ${tableName} (group_key, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tquery,\n\t\t\tlabel,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\ttrace_json,\n\t\t\tsummary_json,\n\t\t\tresults_json,\n\t\t\tmetadata_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tquery,\n\t\t\tlabel,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\ttrace_json,\n\t\t\tsummary_json,\n\t\t\tresults_json,\n\t\t\tmetadata_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tquery = excluded.query,\n\t\t\tlabel = excluded.label,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttags_json = excluded.tags_json,\n\t\t\tstarted_at = excluded.started_at,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\telapsed_ms = excluded.elapsed_ms,\n\t\t\ttrace_json = excluded.trace_json,\n\t\t\tsummary_json = excluded.summary_json,\n\t\t\tresults_json = excluded.results_json,\n\t\t\tmetadata_json = excluded.metadata_json\n\t`);\n const remove = db.prepare(`DELETE FROM ${tableName} WHERE id = ?`);\n\n return {\n listTraces(input) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input?.query) {\n where.push(\"query = ?\");\n params.push(input.query);\n }\n\n if (input?.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const traces = Array.isArray(rows)\n ? rows.filter(isSQLiteSearchTraceRow).map(mapSQLiteSearchTraceRow)\n : [];\n const filtered = input?.tag\n ? traces.filter((trace) =>\n (trace.tags ?? []).includes(input.tag as string),\n )\n : traces;\n\n return normalizeTraceSummaryRuns(filtered).slice(\n 0,\n input?.limit ?? DEFAULT_HISTORY_LIMIT,\n );\n },\n saveTrace(trace) {\n insert.run(\n trace.id,\n trace.query,\n trace.label,\n trace.groupKey ?? null,\n JSON.stringify(trace.tags ?? []),\n trace.startedAt,\n trace.finishedAt,\n trace.elapsedMs,\n JSON.stringify(trace.trace),\n JSON.stringify(trace.summary),\n JSON.stringify(trace.results),\n trace.metadata === undefined ? null : JSON.stringify(trace.metadata),\n );\n },\n pruneTraces(input) {\n const rows = db.prepare(`${listBase} ORDER BY finished_at DESC`).all();\n const traces = Array.isArray(rows)\n ? rows.filter(isSQLiteSearchTraceRow).map(mapSQLiteSearchTraceRow)\n : [];\n const pruned = applyRAGSearchTracePrunePolicy({\n input,\n traces,\n });\n\n for (const trace of pruned.removed) {\n remove.run(trace.id);\n }\n\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n };\n },\n };\n};\n\nexport const createRAGSQLiteSearchTracePruneHistoryStore = (\n options: SQLiteRAGSearchTracePruneHistoryStoreOptions,\n): RAGSearchTracePruneHistoryStore => {\n const tableName = options.tableName ?? \"rag_search_trace_prune_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\ttrigger TEXT NOT NULL,\n\t\t\tstarted_at INTEGER NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\telapsed_ms INTEGER NOT NULL,\n\t\t\trun_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_trigger_finished_at_idx ON ${tableName} (trigger, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\ttrigger,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\trun_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\ttrigger,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\trun_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\ttrigger = excluded.trigger,\n\t\t\tstarted_at = excluded.started_at,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\telapsed_ms = excluded.elapsed_ms,\n\t\t\trun_json = excluded.run_json\n\t`);\n\n return {\n listRuns(input) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input?.trigger) {\n where.push(\"trigger = ?\");\n params.push(input.trigger);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const runs = Array.isArray(rows)\n ? rows\n .filter(isSQLiteSearchTracePruneHistoryRow)\n .map(mapSQLiteSearchTracePruneHistoryRow)\n : [];\n const sorted = normalizeSearchTracePruneRuns(runs);\n return typeof input?.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRun(run) {\n insert.run(\n run.id,\n run.trigger,\n run.startedAt,\n run.finishedAt,\n run.elapsedMs,\n JSON.stringify(run),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalComparisonHistoryStore = (\n options: SQLiteRAGRetrievalComparisonHistoryStoreOptions,\n): RAGRetrievalComparisonHistoryStore => {\n const tableName =\n options.tableName ?? DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tsuite_label TEXT NOT NULL,\n\t\t\tlabel TEXT NOT NULL,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\ttags_json TEXT,\n\t\t\tstarted_at INTEGER NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\telapsed_ms INTEGER NOT NULL,\n\t\t\tcomparison_json TEXT NOT NULL,\n\t\t\tdecision_summary_json TEXT\n\t\t)\n\t`);\n ensureSQLiteColumns(db, tableName, [\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ]);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_finished_at_idx ON ${tableName} (group_key, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_finished_at_idx ON ${tableName} (corpus_group_key, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tsuite_label,\n\t\t\tlabel,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\tcomparison_json,\n\t\t\tdecision_summary_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tsuite_label,\n\t\t\tlabel,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\tcomparison_json,\n\t\t\tdecision_summary_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tsuite_label = excluded.suite_label,\n\t\t\tlabel = excluded.label,\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttags_json = excluded.tags_json,\n\t\t\tstarted_at = excluded.started_at,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\telapsed_ms = excluded.elapsed_ms,\n\t\t\tcomparison_json = excluded.comparison_json,\n\t\t\tdecision_summary_json = excluded.decision_summary_json\n\t`);\n\n return {\n listRuns(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const runs = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalComparisonHistoryRow)\n .map(mapSQLiteRetrievalComparisonHistoryRow)\n : [];\n const normalizedLabel = normalizeLabelFilter(input.label);\n const filtered = normalizeRetrievalComparisonRuns(\n runs.filter(\n (entry) =>\n (!input.tag || (entry.tags ?? []).includes(input.tag)) &&\n (!normalizedLabel ||\n entry.label.toLowerCase().includes(normalizedLabel) ||\n entry.suiteLabel.toLowerCase().includes(normalizedLabel)) &&\n matchesWinner(entry, input.winnerId),\n ),\n );\n\n return typeof input.limit === \"number\"\n ? filtered.slice(0, input.limit)\n : filtered;\n },\n saveRun(run) {\n insert.run(\n run.id,\n run.suiteId,\n run.suiteLabel,\n run.label,\n run.corpusGroupKey ?? null,\n run.groupKey ?? null,\n JSON.stringify(run.tags ?? []),\n run.startedAt,\n run.finishedAt,\n run.elapsedMs,\n JSON.stringify(run.comparison),\n run.decisionSummary === undefined\n ? null\n : JSON.stringify(run.decisionSummary),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalReleaseDecisionStore = (\n options: SQLiteRAGRetrievalReleaseDecisionStoreOptions,\n): RAGRetrievalReleaseDecisionStore => {\n const tableName =\n options.tableName ?? DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\tkind TEXT NOT NULL,\n\t\t\tdecided_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n ensureSQLiteColumns(db, tableName, [\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ]);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_decided_at_idx ON ${tableName} (corpus_group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_kind_decided_at_idx ON ${tableName} (kind, decided_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\tkind = excluded.kind,\n\t\t\tdecided_at = excluded.decided_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listDecisions(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.kind) {\n where.push(\"kind = ?\");\n params.push(input.kind);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY decided_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const decisions = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalReleaseDecisionRow)\n .map(mapSQLiteRetrievalReleaseDecisionRow)\n : [];\n const sorted = normalizeRetrievalReleaseDecisionRecords(decisions);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveDecision(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.kind,\n record.decidedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalBaselineStore = (\n options: SQLiteRAGRetrievalBaselineStoreOptions,\n): RAGRetrievalBaselineStore => {\n const tableName = options.tableName ?? DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\trollout_label TEXT,\n\t\t\tpromoted_at INTEGER NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\tversion INTEGER NOT NULL,\n\t\t\ttags_json TEXT,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n ensureSQLiteColumns(db, tableName, [\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ]);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_promoted_at_idx ON ${tableName} (group_key, promoted_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_promoted_at_idx ON ${tableName} (corpus_group_key, promoted_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_rollout_status_idx ON ${tableName} (group_key, rollout_label, status)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tpromoted_at,\n\t\t\tstatus,\n\t\t\tversion,\n\t\t\ttags_json,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tpromoted_at,\n\t\t\tstatus,\n\t\t\tversion,\n\t\t\ttags_json,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\trollout_label = excluded.rollout_label,\n\t\t\tpromoted_at = excluded.promoted_at,\n\t\t\tstatus = excluded.status,\n\t\t\tversion = excluded.version,\n\t\t\ttags_json = excluded.tags_json,\n\t\t\trecord_json = excluded.record_json\n\t`);\n const updateExisting = db.prepare(`\n\t\tUPDATE ${tableName}\n\t\tSET\n\t\t\tstatus = ?,\n\t\t\trecord_json = ?\n\t\tWHERE id = ?\n\t`);\n const currentVersion = db.prepare(`\n\t\tSELECT COALESCE(MAX(version), 0) AS max_version\n\t\tFROM ${tableName}\n\t\tWHERE group_key = ?\n\t`);\n const matchingRolloutRows = db.prepare(`\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tpromoted_at,\n\t\t\tstatus,\n\t\t\tversion,\n\t\t\ttags_json,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t\tWHERE group_key = ?\n\t\t\tAND (\n\t\t\t\t(rollout_label IS NULL AND ? IS NULL) OR\n\t\t\t\trollout_label = ?\n\t\t\t)\n\t`);\n\n const listBaselinesSync = (\n input: Parameters<RAGRetrievalBaselineStore[\"listBaselines\"]>[0] = {},\n ): RAGRetrievalBaselineRecord[] => {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY promoted_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const baselines = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalBaselineRow)\n .map(mapSQLiteRetrievalBaselineRow)\n : [];\n const tag = typeof input.tag === \"string\" ? input.tag : undefined;\n const filtered = tag\n ? baselines.filter((entry) => (entry.tags ?? []).includes(tag))\n : baselines;\n const sorted = normalizeRetrievalBaselineRecords(filtered);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n };\n\n return {\n getBaseline(groupKey) {\n const baselines = listBaselinesSync({ groupKey, limit: 1 });\n return Promise.resolve(baselines[0] ?? null);\n },\n listBaselines(input) {\n return Promise.resolve(listBaselinesSync(input));\n },\n saveBaseline(record) {\n const versionRow = currentVersion.get(record.groupKey) as\n | { max_version?: number }\n | undefined;\n const nextVersion =\n typeof record.version === \"number\"\n ? record.version\n : (versionRow?.max_version ?? 0) + 1;\n const nextRecord: RAGRetrievalBaselineRecord = {\n ...record,\n status: \"active\",\n version: nextVersion,\n };\n\n const rows = matchingRolloutRows.all(\n record.groupKey,\n record.rolloutLabel ?? null,\n record.rolloutLabel ?? null,\n );\n const existing = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalBaselineRow)\n .map(mapSQLiteRetrievalBaselineRow)\n : [];\n\n for (const entry of existing) {\n updateExisting.run(\n \"superseded\",\n JSON.stringify({\n ...entry,\n status: \"superseded\",\n }),\n entry.id,\n );\n }\n\n insert.run(\n nextRecord.id,\n nextRecord.corpusGroupKey ?? null,\n nextRecord.groupKey,\n nextRecord.rolloutLabel ?? null,\n nextRecord.promotedAt,\n nextRecord.status,\n nextRecord.version,\n JSON.stringify(nextRecord.tags ?? []),\n JSON.stringify(nextRecord),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalReleaseIncidentStore = (\n options: SQLiteRAGRetrievalReleaseIncidentStoreOptions,\n): RAGRetrievalReleaseIncidentStore => {\n const tableName =\n options.tableName ?? DEFAULT_RETRIEVAL_RELEASE_INCIDENT_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\tseverity TEXT NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\ttriggered_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_triggered_at_idx ON ${tableName} (group_key, triggered_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_status_idx ON ${tableName} (corpus_group_key, status, triggered_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tseverity = excluded.severity,\n\t\t\tstatus = excluded.status,\n\t\t\ttriggered_at = excluded.triggered_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listIncidents(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n if (input.severity) {\n where.push(\"severity = ?\");\n params.push(input.severity);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY triggered_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const incidents = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalReleaseIncidentRow)\n .map(mapSQLiteRetrievalReleaseIncidentRow)\n : [];\n const sorted = normalizeRetrievalReleaseIncidentRecords(incidents);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveIncident(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.severity,\n record.status,\n record.triggeredAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffDecisionStore = (\n options: SQLiteRAGRetrievalLaneHandoffDecisionStoreOptions,\n): RAGRetrievalLaneHandoffDecisionStore => {\n const tableName = options.tableName ?? \"rag_retrieval_lane_handoff_decisions\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\tsource_rollout_label TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT NOT NULL,\n\t\t\tkind TEXT NOT NULL,\n\t\t\tdecided_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_rollout_idx ON ${tableName} (corpus_group_key, source_rollout_label, target_rollout_label, decided_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tsource_rollout_label,\n\t\t\ttarget_rollout_label,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tsource_rollout_label,\n\t\t\ttarget_rollout_label,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\tsource_rollout_label = excluded.source_rollout_label,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tkind = excluded.kind,\n\t\t\tdecided_at = excluded.decided_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listDecisions(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.kind) {\n where.push(\"kind = ?\");\n params.push(input.kind);\n }\n\n if (input.sourceRolloutLabel) {\n where.push(\"source_rollout_label = ?\");\n params.push(input.sourceRolloutLabel);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY decided_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const decisions = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalLaneHandoffDecisionRow)\n .map(mapSQLiteRetrievalLaneHandoffDecisionRow)\n : [];\n const sorted = normalizeRetrievalLaneHandoffDecisionRecords(decisions);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveDecision(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.sourceRolloutLabel,\n record.targetRolloutLabel,\n record.kind,\n record.decidedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffIncidentStore = (\n options: SQLiteRAGRetrievalLaneHandoffIncidentStoreOptions,\n): RAGRetrievalLaneHandoffIncidentStore => {\n const tableName = options.tableName ?? \"rag_retrieval_lane_handoff_incidents\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\tsource_rollout_label TEXT,\n\t\t\tseverity TEXT NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\ttriggered_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_triggered_at_idx ON ${tableName} (group_key, triggered_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_status_idx ON ${tableName} (corpus_group_key, status, triggered_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tsource_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tsource_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tsource_rollout_label = excluded.source_rollout_label,\n\t\t\tseverity = excluded.severity,\n\t\t\tstatus = excluded.status,\n\t\t\ttriggered_at = excluded.triggered_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listIncidents(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n if (input.severity) {\n where.push(\"severity = ?\");\n params.push(input.severity);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY triggered_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const incidents = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalLaneHandoffIncidentRow)\n .map(mapSQLiteRetrievalLaneHandoffIncidentRow)\n : [];\n const sorted = normalizeRetrievalReleaseIncidentRecords(\n incidents as RAGRetrievalReleaseIncidentRecord[],\n ) as RAGRetrievalLaneHandoffIncidentRecord[];\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveIncident(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.sourceRolloutLabel ?? null,\n record.severity,\n record.status,\n record.triggeredAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffIncidentHistoryStore = (\n options: SQLiteRAGRetrievalLaneHandoffIncidentHistoryStoreOptions,\n): RAGRetrievalLaneHandoffIncidentHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_lane_handoff_incident_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tincident_id TEXT NOT NULL,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\taction TEXT NOT NULL,\n\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_incident_recorded_at_idx ON ${tableName} (incident_id, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tincident_id = excluded.incident_id,\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\taction = excluded.action,\n\t\t\trecorded_at = excluded.recorded_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.incidentId) {\n where.push(\"incident_id = ?\");\n params.push(input.incidentId);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n if (input.action) {\n where.push(\"action = ?\");\n params.push(input.action);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalLaneHandoffIncidentHistoryRow)\n .map(mapSQLiteRetrievalLaneHandoffIncidentHistoryRow)\n : [];\n\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.incidentId,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.action,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalIncidentRemediationDecisionStore = (\n options: SQLiteRAGRetrievalIncidentRemediationDecisionStoreOptions,\n): RAGRetrievalIncidentRemediationDecisionStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_incident_remediation_decisions\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tincident_id TEXT NOT NULL,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\tremediation_kind TEXT NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\tdecided_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_incident_status_idx ON ${tableName} (incident_id, status, decided_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tremediation_kind,\n\t\t\tstatus,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tremediation_kind,\n\t\t\tstatus,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tincident_id = excluded.incident_id,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tremediation_kind = excluded.remediation_kind,\n\t\t\tstatus = excluded.status,\n\t\t\tdecided_at = excluded.decided_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.incidentId) {\n where.push(\"incident_id = ?\");\n params.push(input.incidentId);\n }\n\n if (input.remediationKind) {\n where.push(\"remediation_kind = ?\");\n params.push(input.remediationKind);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY decided_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalIncidentRemediationDecisionRow)\n .map(mapSQLiteRetrievalIncidentRemediationDecisionRow)\n : [];\n const sorted =\n normalizeRetrievalIncidentRemediationDecisionRecords(records);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.incidentId,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.remediationKind,\n record.status,\n record.decidedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalIncidentRemediationExecutionHistoryStore =\n (\n options: SQLiteRAGRetrievalIncidentRemediationExecutionHistoryStoreOptions,\n ): RAGRetrievalIncidentRemediationExecutionHistoryStore => {\n const tableName =\n options.tableName ??\n \"rag_retrieval_incident_remediation_execution_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tincident_id TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\taction_kind TEXT NOT NULL,\n\t\t\tcode TEXT NOT NULL,\n\t\t\tblocked_by_guardrail INTEGER NOT NULL,\n\t\t\tidempotent_replay INTEGER NOT NULL,\n\t\t\texecuted_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_executed_at_idx ON ${tableName} (group_key, executed_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_incident_code_idx ON ${tableName} (incident_id, code, executed_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction_kind,\n\t\t\tcode,\n\t\t\tblocked_by_guardrail,\n\t\t\tidempotent_replay,\n\t\t\texecuted_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction_kind,\n\t\t\tcode,\n\t\t\tblocked_by_guardrail,\n\t\t\tidempotent_replay,\n\t\t\texecuted_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tincident_id = excluded.incident_id,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\taction_kind = excluded.action_kind,\n\t\t\tcode = excluded.code,\n\t\t\tblocked_by_guardrail = excluded.blocked_by_guardrail,\n\t\t\tidempotent_replay = excluded.idempotent_replay,\n\t\t\texecuted_at = excluded.executed_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.incidentId) {\n where.push(\"incident_id = ?\");\n params.push(input.incidentId);\n }\n\n if (input.actionKind) {\n where.push(\"action_kind = ?\");\n params.push(input.actionKind);\n }\n\n if (input.code) {\n where.push(\"code = ?\");\n params.push(input.code);\n }\n\n if (typeof input.blockedByGuardrail === \"boolean\") {\n where.push(\"blocked_by_guardrail = ?\");\n params.push(input.blockedByGuardrail ? 1 : 0);\n }\n\n if (typeof input.idempotentReplay === \"boolean\") {\n where.push(\"idempotent_replay = ?\");\n params.push(input.idempotentReplay ? 1 : 0);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY executed_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalIncidentRemediationExecutionHistoryRow)\n .map(mapSQLiteRetrievalIncidentRemediationExecutionHistoryRow)\n : [];\n const sorted =\n normalizeRetrievalIncidentRemediationExecutionHistoryRecords(records);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.incidentId ?? null,\n record.groupKey ?? null,\n record.targetRolloutLabel ?? null,\n record.action.kind,\n record.code,\n record.blockedByGuardrail ? 1 : 0,\n record.idempotentReplay ? 1 : 0,\n record.executedAt,\n JSON.stringify(record),\n );\n },\n };\n };\n\nexport const createRAGSQLiteRetrievalLaneHandoffAutoCompletePolicyHistoryStore =\n (\n options: SQLiteRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStoreOptions,\n ): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore => {\n const tableName =\n options.tableName ??\n \"rag_retrieval_lane_handoff_auto_complete_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\t\tid TEXT PRIMARY KEY,\n\t\t\t\tcorpus_group_key TEXT,\n\t\t\t\tgroup_key TEXT NOT NULL,\n\t\t\t\ttarget_rollout_label TEXT NOT NULL,\n\t\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\t\trecord_json TEXT NOT NULL\n\t\t\t)\n\t\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_target_idx ON ${tableName} (corpus_group_key, target_rollout_label, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\t\tSELECT\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\tFROM ${tableName}\n\t\t`;\n const insert = db.prepare(`\n\t\t\tINSERT INTO ${tableName} (\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\t\tgroup_key = excluded.group_key,\n\t\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\t\trecorded_at = excluded.recorded_at,\n\t\t\t\trecord_json = excluded.record_json\n\t\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteLaneHandoffAutoCompletePolicyHistoryRow)\n .map(mapSQLiteLaneHandoffAutoCompletePolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n };\n\nexport const createRAGSQLiteRetrievalReleaseLanePolicyHistoryStore = (\n options: SQLiteRAGRetrievalReleaseLanePolicyHistoryStoreOptions,\n): RAGRetrievalReleaseLanePolicyHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_release_lane_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\trollout_label TEXT NOT NULL,\n\t\t\tscope TEXT NOT NULL,\n\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_rollout_recorded_at_idx ON ${tableName} (rollout_label, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_scope_idx ON ${tableName} (group_key, scope, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\trollout_label = excluded.rollout_label,\n\t\t\tscope = excluded.scope,\n\t\t\trecorded_at = excluded.recorded_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.rolloutLabel) {\n where.push(\"rollout_label = ?\");\n params.push(input.rolloutLabel);\n }\n if (input.scope) {\n where.push(\"scope = ?\");\n params.push(input.scope);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteReleaseLanePolicyHistoryRow)\n .map(mapSQLiteReleaseLanePolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey ?? null,\n record.rolloutLabel,\n record.scope,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalBaselineGatePolicyHistoryStore = (\n options: SQLiteRAGRetrievalBaselineGatePolicyHistoryStoreOptions,\n): RAGRetrievalBaselineGatePolicyHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_baseline_gate_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\trollout_label TEXT NOT NULL,\n\t\t\tscope TEXT NOT NULL,\n\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_rollout_recorded_at_idx ON ${tableName} (rollout_label, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_scope_idx ON ${tableName} (group_key, scope, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\trollout_label = excluded.rollout_label,\n\t\t\tscope = excluded.scope,\n\t\t\trecorded_at = excluded.recorded_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.rolloutLabel) {\n where.push(\"rollout_label = ?\");\n params.push(input.rolloutLabel);\n }\n if (input.scope) {\n where.push(\"scope = ?\");\n params.push(input.scope);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteBaselineGatePolicyHistoryRow)\n .map(mapSQLiteBaselineGatePolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey ?? null,\n record.rolloutLabel,\n record.scope,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalReleaseLaneEscalationPolicyHistoryStore = (\n options: SQLiteRAGRetrievalReleaseLaneEscalationPolicyHistoryStoreOptions,\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_release_lane_escalation_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\t\tid TEXT PRIMARY KEY,\n\t\t\t\tcorpus_group_key TEXT,\n\t\t\t\tgroup_key TEXT NOT NULL,\n\t\t\t\ttarget_rollout_label TEXT NOT NULL,\n\t\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\t\trecord_json TEXT NOT NULL\n\t\t\t)\n\t\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_target_idx ON ${tableName} (corpus_group_key, target_rollout_label, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\t\tSELECT\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\tFROM ${tableName}\n\t\t`;\n const insert = db.prepare(`\n\t\t\tINSERT INTO ${tableName} (\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\t\tgroup_key = excluded.group_key,\n\t\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\t\trecorded_at = excluded.recorded_at,\n\t\t\t\trecord_json = excluded.record_json\n\t\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteReleaseLaneEscalationPolicyHistoryRow)\n .map(mapSQLiteReleaseLaneEscalationPolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGFileAnswerGroundingEvaluationHistoryStore = (\n path: string,\n): RAGAnswerGroundingEvaluationHistoryStore => ({\n async listRuns(input) {\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingEvaluationRun[];\n };\n const runs = Array.isArray(data.runs) ? data.runs : [];\n const filtered = input?.suiteId\n ? runs.filter((run) => run.suiteId === input.suiteId)\n : runs;\n\n return filtered\n .sort(toGroundingHistorySortOrder)\n .slice(0, input?.limit ?? DEFAULT_HISTORY_LIMIT);\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return [];\n }\n\n throw error;\n }\n },\n async saveRun(run) {\n let runs: RAGAnswerGroundingEvaluationRun[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingEvaluationRun[];\n };\n runs = Array.isArray(data.runs) ? data.runs : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const nextRuns = normalizeGroundingHistoryRuns([\n run,\n ...runs.filter((entry) => entry.id !== run.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n runs: nextRuns,\n },\n null,\n 2,\n ),\n );\n },\n async pruneRuns(input) {\n let runs: RAGAnswerGroundingEvaluationRun[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingEvaluationRun[];\n };\n runs = Array.isArray(data.runs) ? data.runs : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs,\n sort: normalizeGroundingHistoryRuns,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n runs: pruned.next,\n },\n null,\n 2,\n ),\n );\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n});\n\nexport const createRAGFileAnswerGroundingCaseDifficultyHistoryStore = (\n path: string,\n): RAGAnswerGroundingCaseDifficultyHistoryStore => ({\n async listRuns(input) {\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingCaseDifficultyRun[];\n };\n const runs = Array.isArray(data.runs) ? data.runs : [];\n const filtered = input?.suiteId\n ? runs.filter((run) => run.suiteId === input.suiteId)\n : runs;\n\n return normalizeGroundingDifficultyHistoryRuns(filtered).slice(\n 0,\n input?.limit ?? DEFAULT_HISTORY_LIMIT,\n );\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return [];\n }\n\n throw error;\n }\n },\n async saveRun(run) {\n let runs: RAGAnswerGroundingCaseDifficultyRun[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingCaseDifficultyRun[];\n };\n runs = Array.isArray(data.runs) ? data.runs : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const nextRuns = normalizeGroundingDifficultyHistoryRuns([\n run,\n ...runs.filter((entry) => entry.id !== run.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n runs: nextRuns,\n },\n null,\n 2,\n ),\n );\n },\n});\n\nexport const loadRAGEvaluationHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGEvaluationHistoryStore;\n suite: RAGEvaluationSuite;\n limit?: number;\n}): Promise<RAGEvaluationHistory> => {\n const runs = normalizeHistoryRuns(\n await Promise.resolve(store.listRuns({ limit, suiteId: suite.id })),\n );\n const latestRun = runs[0];\n const previousRun = runs[1];\n\n return {\n caseTraceSnapshots: buildEvaluationCaseTraceSnapshots({\n current: latestRun,\n previous: previousRun,\n }),\n retrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n runs,\n }),\n diff:\n latestRun && previousRun\n ? buildRAGEvaluationRunDiff({\n current: latestRun,\n previous: previousRun,\n })\n : undefined,\n latestRun,\n leaderboard: buildRAGEvaluationLeaderboard(runs),\n previousRun,\n runs,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const loadRAGEvaluationSuiteSnapshotHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGEvaluationSuiteSnapshotHistoryStore;\n suite: Pick<RAGEvaluationSuite, \"id\" | \"label\">;\n limit?: number;\n}): Promise<RAGEvaluationSuiteSnapshotHistory> => {\n const snapshots = normalizeEvaluationSuiteSnapshots(\n await Promise.resolve(\n store.listSnapshots({\n limit,\n suiteId: suite.id,\n }),\n ),\n );\n const latestSnapshot = snapshots[0];\n const previousSnapshot = snapshots[1];\n\n return {\n diff:\n latestSnapshot && previousSnapshot\n ? buildRAGEvaluationSuiteSnapshotDiff({\n current: latestSnapshot,\n previous: previousSnapshot,\n })\n : undefined,\n latestSnapshot,\n previousSnapshot,\n snapshots,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const loadRAGSearchTraceHistory = async ({\n store,\n query,\n groupKey,\n tag,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGSearchTraceStore;\n query?: string;\n groupKey?: string;\n tag?: string;\n limit?: number;\n}): Promise<RAGSearchTraceHistory> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ groupKey, limit, query, tag })),\n );\n const latestTrace = traces[0];\n const previousTrace = traces[1];\n\n return {\n diff:\n latestTrace && previousTrace\n ? buildRAGSearchTraceDiff({\n current: latestTrace,\n previous: previousTrace,\n })\n : undefined,\n latestTrace,\n previousTrace,\n groupKey,\n query,\n tag,\n retrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n runs: traces.map((trace) => ({\n finishedAt: trace.finishedAt,\n id: trace.id,\n label: trace.label,\n traceSummary: trace.summary,\n })),\n }),\n traces,\n };\n};\n\nexport const loadRAGSearchTraceGroupHistory = async ({\n store,\n tag,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGSearchTraceStore;\n tag?: string;\n limit?: number;\n}): Promise<RAGSearchTraceGroupHistory> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ limit, tag })),\n );\n const grouped = new Map<string, RAGSearchTraceRecord[]>();\n\n for (const trace of traces) {\n const groupKey = trace.groupKey ?? trace.query;\n const existing = grouped.get(groupKey);\n if (existing) {\n existing.push(trace);\n continue;\n }\n grouped.set(groupKey, [trace]);\n }\n\n const groups = Array.from(grouped.entries())\n .map(([groupKey, entries]): RAGSearchTraceGroupHistoryEntry => {\n const normalizedEntries = normalizeTraceSummaryRuns(entries);\n const latestTrace = normalizedEntries[0];\n const previousTrace = normalizedEntries[1];\n\n return {\n diff:\n latestTrace && previousTrace\n ? buildRAGSearchTraceDiff({\n current: latestTrace,\n previous: previousTrace,\n })\n : undefined,\n groupKey,\n latestTrace,\n previousTrace,\n retrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n runs: normalizedEntries.map((trace) => ({\n finishedAt: trace.finishedAt,\n id: trace.id,\n label: trace.label,\n traceSummary: trace.summary,\n })),\n }),\n traceCount: normalizedEntries.length,\n };\n })\n .sort((left, right) => {\n const leftFinishedAt = left.latestTrace?.finishedAt ?? 0;\n const rightFinishedAt = right.latestTrace?.finishedAt ?? 0;\n return rightFinishedAt - leftFinishedAt;\n });\n\n return {\n groups,\n tag,\n };\n};\n\nexport const summarizeRAGSearchTraceStore = async ({\n store,\n tag,\n}: {\n store: RAGSearchTraceStore;\n tag?: string;\n}): Promise<RAGSearchTraceStats> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ tag })),\n );\n\n return buildRAGSearchTraceStatsFromTraces(traces);\n};\n\nexport const previewRAGSearchTraceStorePrune = async ({\n store,\n input,\n}: {\n store: RAGSearchTraceStore;\n input?: RAGSearchTracePruneInput;\n}): Promise<RAGSearchTracePrunePreview> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ tag: input?.tag })),\n );\n const pruned = applyRAGSearchTracePrunePolicy({\n input,\n traces,\n });\n\n return {\n input,\n result: {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n },\n statsAfter: buildRAGSearchTraceStatsFromTraces(pruned.next),\n statsBefore: buildRAGSearchTraceStatsFromTraces(traces),\n };\n};\n\nexport const loadRAGAnswerGroundingEvaluationHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGAnswerGroundingEvaluationHistoryStore;\n suite: Pick<RAGEvaluationSuite, \"id\" | \"label\">;\n limit?: number;\n}): Promise<RAGAnswerGroundingEvaluationHistory> => {\n const runs = normalizeGroundingHistoryRuns(\n await Promise.resolve(\n store.listRuns({\n limit,\n suiteId: suite.id,\n }),\n ),\n );\n const latestRun = runs[0];\n const previousRun = runs[1];\n\n return {\n caseSnapshots: buildGroundingCaseSnapshots({\n current: latestRun,\n previous: previousRun,\n }),\n diff:\n latestRun && previousRun\n ? buildRAGAnswerGroundingEvaluationRunDiff({\n current: latestRun,\n previous: previousRun,\n })\n : undefined,\n latestRun,\n leaderboard: buildRAGAnswerGroundingEvaluationLeaderboard(runs),\n previousRun,\n runs,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const loadRAGAnswerGroundingCaseDifficultyHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGAnswerGroundingCaseDifficultyHistoryStore;\n suite: Pick<RAGEvaluationSuite, \"id\" | \"label\">;\n limit?: number;\n}): Promise<RAGAnswerGroundingCaseDifficultyHistory> => {\n const runs = normalizeGroundingDifficultyHistoryRuns(\n await Promise.resolve(\n store.listRuns({\n limit,\n suiteId: suite.id,\n }),\n ),\n );\n const latestRun = runs[0];\n const previousRun = runs[1];\n\n return {\n diff:\n latestRun && previousRun\n ? buildRAGAnswerGroundingCaseDifficultyRunDiff({\n current: latestRun,\n previous: previousRun,\n })\n : undefined,\n latestRun,\n previousRun,\n runs,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n trends: buildRAGAnswerGroundingCaseDifficultyTrends({ runs }),\n };\n};\n\nexport const persistRAGEvaluationSuiteRun = async ({\n store,\n run,\n}: {\n store: RAGEvaluationHistoryStore;\n run: RAGEvaluationSuiteRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGAnswerGroundingEvaluationRun = async ({\n store,\n run,\n}: {\n store: RAGAnswerGroundingEvaluationHistoryStore;\n run: RAGAnswerGroundingEvaluationRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGAnswerGroundingCaseDifficultyRun = async ({\n store,\n run,\n}: {\n store: RAGAnswerGroundingCaseDifficultyHistoryStore;\n run: RAGAnswerGroundingCaseDifficultyRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGSearchTraceRecord = async ({\n store,\n record,\n}: {\n store: RAGSearchTraceStore;\n record: RAGSearchTraceRecord;\n}) => {\n await Promise.resolve(store.saveTrace(record));\n return record;\n};\n\nexport const pruneRAGSearchTraceStore = async ({\n store,\n input,\n}: {\n store: RAGSearchTraceStore;\n input?: RAGSearchTracePruneInput;\n}): Promise<RAGSearchTracePruneResult> =>\n Promise.resolve(store.pruneTraces(input));\n\nexport const persistRAGSearchTracePruneRun = async ({\n store,\n run,\n}: {\n store: RAGSearchTracePruneHistoryStore;\n run: RAGSearchTracePruneRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGRetrievalComparisonRun = async ({\n store,\n run,\n}: {\n store: RAGRetrievalComparisonHistoryStore;\n run: RAGRetrievalComparisonRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const buildRAGRetrievalComparisonDecisionSummary = ({\n comparison,\n baselineRetrievalId,\n candidateRetrievalId,\n policy,\n}: {\n comparison: RAGRetrievalComparison;\n baselineRetrievalId?: string;\n candidateRetrievalId?: string;\n policy?: RAGRetrievalBaselineGatePolicy;\n}): RAGRetrievalComparisonDecisionSummary | undefined => {\n const baselineEntry =\n findRetrievalComparisonEntry(comparison, baselineRetrievalId) ??\n comparison.entries[0];\n const candidateEntry =\n findRetrievalComparisonEntry(comparison, candidateRetrievalId) ??\n comparison.entries.find(\n (entry) => entry.retrievalId !== baselineEntry?.retrievalId,\n ) ??\n comparison.entries[1];\n\n if (!baselineEntry && !candidateEntry) {\n return undefined;\n }\n\n const delta =\n baselineEntry && candidateEntry\n ? {\n averageF1Delta:\n candidateEntry.response.summary.averageF1 -\n baselineEntry.response.summary.averageF1,\n elapsedMsDelta:\n candidateEntry.response.elapsedMs -\n baselineEntry.response.elapsedMs,\n passingRateDelta:\n candidateEntry.response.passingRate -\n baselineEntry.response.passingRate,\n ...(countPresentationCueCases(baselineEntry, \"title\") > 0 ||\n countPresentationCueCases(candidateEntry, \"title\") > 0\n ? {\n presentationTitleCueCasesDelta:\n countPresentationCueCases(candidateEntry, \"title\") -\n countPresentationCueCases(baselineEntry, \"title\"),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"body\") > 0 ||\n countPresentationCueCases(candidateEntry, \"body\") > 0\n ? {\n presentationBodyCueCasesDelta:\n countPresentationCueCases(candidateEntry, \"body\") -\n countPresentationCueCases(baselineEntry, \"body\"),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"notes\") > 0 ||\n countPresentationCueCases(candidateEntry, \"notes\") > 0\n ? {\n presentationNotesCueCasesDelta:\n countPresentationCueCases(candidateEntry, \"notes\") -\n countPresentationCueCases(baselineEntry, \"notes\"),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"sheet\") > 0 ||\n countSpreadsheetCueCases(candidateEntry, \"sheet\") > 0\n ? {\n spreadsheetSheetCueCasesDelta:\n countSpreadsheetCueCases(candidateEntry, \"sheet\") -\n countSpreadsheetCueCases(baselineEntry, \"sheet\"),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"table\") > 0 ||\n countSpreadsheetCueCases(candidateEntry, \"table\") > 0\n ? {\n spreadsheetTableCueCasesDelta:\n countSpreadsheetCueCases(candidateEntry, \"table\") -\n countSpreadsheetCueCases(baselineEntry, \"table\"),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"column\") > 0 ||\n countSpreadsheetCueCases(candidateEntry, \"column\") > 0\n ? {\n spreadsheetColumnCueCasesDelta:\n countSpreadsheetCueCases(candidateEntry, \"column\") -\n countSpreadsheetCueCases(baselineEntry, \"column\"),\n }\n : {}),\n multiVectorCollapsedCasesDelta:\n (candidateEntry.traceSummary?.multiVectorCollapsedCases ?? 0) -\n (baselineEntry.traceSummary?.multiVectorCollapsedCases ?? 0),\n multiVectorLexicalHitCasesDelta:\n (candidateEntry.traceSummary?.multiVectorLexicalHitCases ?? 0) -\n (baselineEntry.traceSummary?.multiVectorLexicalHitCases ?? 0),\n multiVectorVectorHitCasesDelta:\n (candidateEntry.traceSummary?.multiVectorVectorHitCases ?? 0) -\n (baselineEntry.traceSummary?.multiVectorVectorHitCases ?? 0),\n evidenceReconcileCasesDelta:\n (candidateEntry.traceSummary?.stageCounts?.evidence_reconcile ??\n 0) -\n (baselineEntry.traceSummary?.stageCounts?.evidence_reconcile ?? 0),\n officeEvidenceReconcileCasesDelta:\n (candidateEntry.traceSummary?.officeEvidenceReconcileCases ?? 0) -\n (baselineEntry.traceSummary?.officeEvidenceReconcileCases ?? 0),\n pdfEvidenceReconcileCasesDelta:\n (candidateEntry.traceSummary?.pdfEvidenceReconcileCases ?? 0) -\n (baselineEntry.traceSummary?.pdfEvidenceReconcileCases ?? 0),\n runtimeCandidateBudgetExhaustedCasesDelta:\n (candidateEntry.traceSummary\n ?.runtimeCandidateBudgetExhaustedCases ?? 0) -\n (baselineEntry.traceSummary?.runtimeCandidateBudgetExhaustedCases ??\n 0),\n runtimeUnderfilledTopKCasesDelta:\n (candidateEntry.traceSummary?.runtimeUnderfilledTopKCases ?? 0) -\n (baselineEntry.traceSummary?.runtimeUnderfilledTopKCases ?? 0),\n }\n : undefined;\n\n return {\n baseline: baselineEntry\n ? {\n averageF1: baselineEntry.response.summary.averageF1,\n elapsedMs: baselineEntry.response.elapsedMs,\n label: baselineEntry.label,\n ...(countPresentationCueCases(baselineEntry, \"title\") > 0\n ? {\n presentationTitleCueCases: countPresentationCueCases(\n baselineEntry,\n \"title\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"body\") > 0\n ? {\n presentationBodyCueCases: countPresentationCueCases(\n baselineEntry,\n \"body\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"notes\") > 0\n ? {\n presentationNotesCueCases: countPresentationCueCases(\n baselineEntry,\n \"notes\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"sheet\") > 0\n ? {\n spreadsheetSheetCueCases: countSpreadsheetCueCases(\n baselineEntry,\n \"sheet\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"table\") > 0\n ? {\n spreadsheetTableCueCases: countSpreadsheetCueCases(\n baselineEntry,\n \"table\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"column\") > 0\n ? {\n spreadsheetColumnCueCases: countSpreadsheetCueCases(\n baselineEntry,\n \"column\",\n ),\n }\n : {}),\n multiVectorCollapsedCases:\n baselineEntry.traceSummary?.multiVectorCollapsedCases,\n multiVectorLexicalHitCases:\n baselineEntry.traceSummary?.multiVectorLexicalHitCases,\n multiVectorVectorHitCases:\n baselineEntry.traceSummary?.multiVectorVectorHitCases,\n evidenceReconcileCases:\n baselineEntry.traceSummary?.stageCounts?.evidence_reconcile,\n officeEvidenceReconcileCases:\n baselineEntry.traceSummary?.officeEvidenceReconcileCases,\n pdfEvidenceReconcileCases:\n baselineEntry.traceSummary?.pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCases:\n baselineEntry.traceSummary?.runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCases:\n baselineEntry.traceSummary?.runtimeUnderfilledTopKCases,\n passingRate: baselineEntry.response.passingRate,\n retrievalId: baselineEntry.retrievalId,\n }\n : undefined,\n baselineRetrievalId: baselineEntry?.retrievalId,\n candidate: candidateEntry\n ? {\n averageF1: candidateEntry.response.summary.averageF1,\n elapsedMs: candidateEntry.response.elapsedMs,\n label: candidateEntry.label,\n ...(countPresentationCueCases(candidateEntry, \"title\") > 0\n ? {\n presentationTitleCueCases: countPresentationCueCases(\n candidateEntry,\n \"title\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(candidateEntry, \"body\") > 0\n ? {\n presentationBodyCueCases: countPresentationCueCases(\n candidateEntry,\n \"body\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(candidateEntry, \"notes\") > 0\n ? {\n presentationNotesCueCases: countPresentationCueCases(\n candidateEntry,\n \"notes\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(candidateEntry, \"sheet\") > 0\n ? {\n spreadsheetSheetCueCases: countSpreadsheetCueCases(\n candidateEntry,\n \"sheet\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(candidateEntry, \"table\") > 0\n ? {\n spreadsheetTableCueCases: countSpreadsheetCueCases(\n candidateEntry,\n \"table\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(candidateEntry, \"column\") > 0\n ? {\n spreadsheetColumnCueCases: countSpreadsheetCueCases(\n candidateEntry,\n \"column\",\n ),\n }\n : {}),\n multiVectorCollapsedCases:\n candidateEntry.traceSummary?.multiVectorCollapsedCases,\n multiVectorLexicalHitCases:\n candidateEntry.traceSummary?.multiVectorLexicalHitCases,\n multiVectorVectorHitCases:\n candidateEntry.traceSummary?.multiVectorVectorHitCases,\n evidenceReconcileCases:\n candidateEntry.traceSummary?.stageCounts?.evidence_reconcile,\n officeEvidenceReconcileCases:\n candidateEntry.traceSummary?.officeEvidenceReconcileCases,\n pdfEvidenceReconcileCases:\n candidateEntry.traceSummary?.pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCases:\n candidateEntry.traceSummary?.runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCases:\n candidateEntry.traceSummary?.runtimeUnderfilledTopKCases,\n passingRate: candidateEntry.response.passingRate,\n retrievalId: candidateEntry.retrievalId,\n }\n : undefined,\n candidateRetrievalId: candidateEntry?.retrievalId,\n delta,\n fastest: comparison.summary.fastest,\n gate: evaluateRetrievalComparisonGate({ delta, policy }),\n winnerByAverageF1: comparison.summary.bestByAverageF1,\n winnerByPassingRate: comparison.summary.bestByPassingRate,\n ...(comparison.summary.bestByPresentationTitleCueCases\n ? {\n winnerByPresentationTitleCueCases:\n comparison.summary.bestByPresentationTitleCueCases,\n }\n : {}),\n ...(comparison.summary.bestByPresentationBodyCueCases\n ? {\n winnerByPresentationBodyCueCases:\n comparison.summary.bestByPresentationBodyCueCases,\n }\n : {}),\n ...(comparison.summary.bestByPresentationNotesCueCases\n ? {\n winnerByPresentationNotesCueCases:\n comparison.summary.bestByPresentationNotesCueCases,\n }\n : {}),\n ...(comparison.summary.bestBySpreadsheetSheetCueCases\n ? {\n winnerBySpreadsheetSheetCueCases:\n comparison.summary.bestBySpreadsheetSheetCueCases,\n }\n : {}),\n ...(comparison.summary.bestBySpreadsheetTableCueCases\n ? {\n winnerBySpreadsheetTableCueCases:\n comparison.summary.bestBySpreadsheetTableCueCases,\n }\n : {}),\n ...(comparison.summary.bestBySpreadsheetColumnCueCases\n ? {\n winnerBySpreadsheetColumnCueCases:\n comparison.summary.bestBySpreadsheetColumnCueCases,\n }\n : {}),\n winnerByMultivectorCollapsedCases:\n comparison.summary.bestByMultivectorCollapsedCases,\n winnerByMultivectorLexicalHitCases:\n comparison.summary.bestByMultivectorLexicalHitCases,\n winnerByMultivectorVectorHitCases:\n comparison.summary.bestByMultivectorVectorHitCases,\n winnerByEvidenceReconcileCases:\n comparison.summary.bestByEvidenceReconcileCases,\n winnerByOfficeEvidenceReconcileCases:\n comparison.summary.bestByOfficeEvidenceReconcileCases,\n winnerByPDFEvidenceReconcileCases:\n comparison.summary.bestByPDFEvidenceReconcileCases,\n winnerByLowestRuntimeCandidateBudgetExhaustedCases:\n comparison.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases,\n winnerByLowestRuntimeUnderfilledTopKCases:\n comparison.summary.bestByLowestRuntimeUnderfilledTopKCases,\n };\n};\n\nexport const loadRAGSearchTracePruneHistory = async ({\n store,\n limit,\n trigger,\n}: {\n store: RAGSearchTracePruneHistoryStore;\n limit?: number;\n trigger?: RAGSearchTracePruneRun[\"trigger\"];\n}) =>\n normalizeSearchTracePruneRuns(\n await Promise.resolve(store.listRuns({ limit, trigger })),\n );\n\nexport const loadRAGRetrievalComparisonHistory = async ({\n store,\n limit,\n suiteId,\n label,\n winnerId,\n corpusGroupKey,\n groupKey,\n tag,\n}: {\n store: RAGRetrievalComparisonHistoryStore;\n limit?: number;\n suiteId?: string;\n label?: string;\n winnerId?: string;\n corpusGroupKey?: string;\n groupKey?: string;\n tag?: string;\n}) =>\n normalizeRetrievalComparisonRuns(\n await Promise.resolve(\n store.listRuns({\n corpusGroupKey,\n groupKey,\n label,\n limit,\n suiteId,\n tag,\n winnerId,\n }),\n ),\n );\n\nexport const loadRAGRetrievalBaselines = async ({\n store,\n corpusGroupKey,\n groupKey,\n tag,\n limit,\n status,\n}: {\n store: RAGRetrievalBaselineStore;\n corpusGroupKey?: string;\n groupKey?: string;\n tag?: string;\n limit?: number;\n status?: RAGRetrievalBaselineRecord[\"status\"];\n}) =>\n normalizeRetrievalBaselineRecords(\n await Promise.resolve(\n store.listBaselines({\n corpusGroupKey,\n groupKey,\n limit,\n status,\n tag,\n }),\n ),\n );\n\nexport const persistRAGRetrievalBaseline = async ({\n store,\n record,\n}: {\n store: RAGRetrievalBaselineStore;\n record: RAGRetrievalBaselineRecord;\n}) => {\n await Promise.resolve(store.saveBaseline(record));\n return record;\n};\n\nexport const loadRAGRetrievalReleaseDecisions = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n kind,\n}: {\n store: RAGRetrievalReleaseDecisionStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n kind?: RAGRetrievalReleaseDecisionRecord[\"kind\"];\n}) =>\n normalizeRetrievalReleaseDecisionRecords(\n await Promise.resolve(\n store.listDecisions({ corpusGroupKey, groupKey, kind, limit }),\n ),\n );\n\nexport const loadRAGRetrievalLaneHandoffDecisions = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n kind,\n sourceRolloutLabel,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalLaneHandoffDecisionStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n kind?: RAGRetrievalLaneHandoffDecisionRecord[\"kind\"];\n sourceRolloutLabel?: RAGRetrievalLaneHandoffDecisionRecord[\"sourceRolloutLabel\"];\n targetRolloutLabel?: RAGRetrievalLaneHandoffDecisionRecord[\"targetRolloutLabel\"];\n}) =>\n normalizeRetrievalLaneHandoffDecisionRecords(\n await Promise.resolve(\n store.listDecisions({\n corpusGroupKey,\n groupKey,\n kind,\n limit,\n sourceRolloutLabel,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalReleaseIncidents = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n status,\n severity,\n}: {\n store: RAGRetrievalReleaseIncidentStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalReleaseIncidentRecord[\"targetRolloutLabel\"];\n status?: RAGRetrievalReleaseIncidentRecord[\"status\"];\n severity?: RAGRetrievalReleaseIncidentRecord[\"severity\"];\n}) =>\n normalizeRetrievalReleaseIncidentRecords(\n await Promise.resolve(\n store.listIncidents({\n corpusGroupKey,\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalLaneHandoffIncidents = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n status,\n severity,\n}: {\n store: RAGRetrievalLaneHandoffIncidentStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalLaneHandoffIncidentRecord[\"targetRolloutLabel\"];\n status?: RAGRetrievalLaneHandoffIncidentRecord[\"status\"];\n severity?: RAGRetrievalLaneHandoffIncidentRecord[\"severity\"];\n}) =>\n normalizeRetrievalReleaseIncidentRecords(\n (await Promise.resolve(\n store.listIncidents({\n corpusGroupKey,\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalReleaseIncidentRecord[],\n ) as RAGRetrievalLaneHandoffIncidentRecord[];\n\nexport const loadRAGRetrievalLaneHandoffIncidentHistory = async ({\n store,\n corpusGroupKey,\n action,\n groupKey,\n incidentId,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalLaneHandoffIncidentHistoryStore;\n corpusGroupKey?: string;\n action?: RAGRetrievalLaneHandoffIncidentHistoryRecord[\"action\"];\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalLaneHandoffIncidentRecord[\"targetRolloutLabel\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n action,\n groupKey,\n incidentId,\n limit,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalLaneHandoffIncidentHistoryRecord[];\n\nexport const loadRAGRetrievalIncidentRemediationDecisions = async ({\n store,\n groupKey,\n incidentId,\n limit,\n remediationKind,\n status,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalIncidentRemediationDecisionStore;\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n remediationKind?: RAGRetrievalIncidentRemediationDecisionRecord[\"remediationKind\"];\n status?: RAGRetrievalIncidentRemediationDecisionRecord[\"status\"];\n targetRolloutLabel?: RAGRetrievalIncidentRemediationDecisionRecord[\"targetRolloutLabel\"];\n}) =>\n normalizeRetrievalIncidentRemediationDecisionRecords(\n await Promise.resolve(\n store.listRecords({\n groupKey,\n incidentId,\n limit,\n remediationKind,\n status,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalIncidentRemediationExecutionHistory = async ({\n store,\n actionKind,\n blockedByGuardrail,\n code,\n groupKey,\n idempotentReplay,\n incidentId,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalIncidentRemediationExecutionHistoryStore;\n actionKind?: RAGRemediationAction[\"kind\"];\n blockedByGuardrail?: boolean;\n code?: RAGRetrievalIncidentRemediationExecutionHistoryRecord[\"code\"];\n groupKey?: string;\n idempotentReplay?: boolean;\n incidentId?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalIncidentRemediationExecutionHistoryRecord[\"targetRolloutLabel\"];\n}) =>\n normalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n await Promise.resolve(\n store.listRecords({\n actionKind,\n blockedByGuardrail,\n code,\n groupKey,\n idempotentReplay,\n incidentId,\n limit,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalLaneHandoffAutoCompletePolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[\"targetRolloutLabel\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalReleaseLanePolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n}: {\n store: RAGRetrievalReleaseLanePolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n rolloutLabel?: RAGRetrievalReleaseLanePolicyHistoryRecord[\"rolloutLabel\"];\n scope?: RAGRetrievalReleaseLanePolicyHistoryRecord[\"scope\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n }),\n )) as RAGRetrievalReleaseLanePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalBaselineGatePolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n}: {\n store: RAGRetrievalBaselineGatePolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n rolloutLabel?: RAGRetrievalBaselineGatePolicyHistoryRecord[\"rolloutLabel\"];\n scope?: RAGRetrievalBaselineGatePolicyHistoryRecord[\"scope\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n }),\n )) as RAGRetrievalBaselineGatePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalReleaseLaneEscalationPolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalReleaseLaneEscalationPolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[\"targetRolloutLabel\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n groupKey,\n limit,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[];\n\nexport const persistRAGRetrievalReleaseDecision = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseDecisionStore;\n record: RAGRetrievalReleaseDecisionRecord;\n}) => {\n await Promise.resolve(store.saveDecision(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffDecision = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffDecisionStore;\n record: RAGRetrievalLaneHandoffDecisionRecord;\n}) => {\n await Promise.resolve(store.saveDecision(record));\n return record;\n};\n\nexport const persistRAGRetrievalReleaseIncident = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseIncidentStore;\n record: RAGRetrievalReleaseIncidentRecord;\n}) => {\n await Promise.resolve(store.saveIncident(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffIncident = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffIncidentStore;\n record: RAGRetrievalLaneHandoffIncidentRecord;\n}) => {\n await Promise.resolve(store.saveIncident(record));\n return record;\n};\n\nexport const persistRAGRetrievalIncidentRemediationDecision = async ({\n store,\n record,\n}: {\n store: RAGRetrievalIncidentRemediationDecisionStore;\n record: RAGRetrievalIncidentRemediationDecisionRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalIncidentRemediationExecutionHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalIncidentRemediationExecutionHistoryStore;\n record: RAGRetrievalIncidentRemediationExecutionHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffIncidentHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffIncidentHistoryStore;\n record: RAGRetrievalLaneHandoffIncidentHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffAutoCompletePolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore;\n record: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalReleaseLanePolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseLanePolicyHistoryStore;\n record: RAGRetrievalReleaseLanePolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalBaselineGatePolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalBaselineGatePolicyHistoryStore;\n record: RAGRetrievalBaselineGatePolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalReleaseLaneEscalationPolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseLaneEscalationPolicyHistoryStore;\n record: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const createRAGSQLiteGovernanceStores = (\n options: SQLiteRAGGovernanceStoreBundleOptions = {},\n): Pick<\n RAGChatPluginConfig,\n | \"searchTraceStore\"\n | \"searchTracePruneHistoryStore\"\n | \"retrievalComparisonHistoryStore\"\n | \"retrievalBaselineStore\"\n | \"retrievalReleaseDecisionStore\"\n | \"retrievalLaneHandoffDecisionStore\"\n | \"retrievalLaneHandoffIncidentStore\"\n | \"retrievalLaneHandoffIncidentHistoryStore\"\n | \"retrievalLaneHandoffAutoCompletePolicyHistoryStore\"\n | \"retrievalReleaseLanePolicyHistoryStore\"\n | \"retrievalBaselineGatePolicyHistoryStore\"\n | \"retrievalReleaseLaneEscalationPolicyHistoryStore\"\n | \"retrievalReleaseIncidentStore\"\n | \"retrievalIncidentRemediationDecisionStore\"\n | \"retrievalIncidentRemediationExecutionHistoryStore\"\n> => {\n const prefix = options.tablePrefix?.trim();\n const table = (suffix: string) =>\n prefix && prefix.length > 0 ? `${prefix}_${suffix}` : suffix;\n\n return {\n searchTraceStore: createRAGSQLiteSearchTraceStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_search_traces\"),\n }),\n searchTracePruneHistoryStore: createRAGSQLiteSearchTracePruneHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_search_trace_prune_history\"),\n }),\n retrievalComparisonHistoryStore:\n createRAGSQLiteRetrievalComparisonHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_comparison_history\"),\n }),\n retrievalBaselineStore: createRAGSQLiteRetrievalBaselineStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_baselines\"),\n }),\n retrievalReleaseDecisionStore: createRAGSQLiteRetrievalReleaseDecisionStore(\n {\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_release_decisions\"),\n },\n ),\n retrievalLaneHandoffDecisionStore:\n createRAGSQLiteRetrievalLaneHandoffDecisionStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_lane_handoff_decisions\"),\n }),\n retrievalLaneHandoffIncidentStore:\n createRAGSQLiteRetrievalLaneHandoffIncidentStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_lane_handoff_incidents\"),\n }),\n retrievalLaneHandoffIncidentHistoryStore:\n createRAGSQLiteRetrievalLaneHandoffIncidentHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_lane_handoff_incident_history\"),\n }),\n retrievalLaneHandoffAutoCompletePolicyHistoryStore:\n createRAGSQLiteRetrievalLaneHandoffAutoCompletePolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\n \"rag_retrieval_lane_handoff_auto_complete_policy_history\",\n ),\n }),\n retrievalReleaseLanePolicyHistoryStore:\n createRAGSQLiteRetrievalReleaseLanePolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_release_lane_policy_history\"),\n }),\n retrievalBaselineGatePolicyHistoryStore:\n createRAGSQLiteRetrievalBaselineGatePolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_baseline_gate_policy_history\"),\n }),\n retrievalReleaseLaneEscalationPolicyHistoryStore:\n createRAGSQLiteRetrievalReleaseLaneEscalationPolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\n \"rag_retrieval_release_lane_escalation_policy_history\",\n ),\n }),\n retrievalReleaseIncidentStore: createRAGSQLiteRetrievalReleaseIncidentStore(\n {\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_release_incidents\"),\n },\n ),\n retrievalIncidentRemediationDecisionStore:\n createRAGSQLiteRetrievalIncidentRemediationDecisionStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_incident_remediation_decisions\"),\n }),\n retrievalIncidentRemediationExecutionHistoryStore:\n createRAGSQLiteRetrievalIncidentRemediationExecutionHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\n \"rag_retrieval_incident_remediation_execution_history\",\n ),\n }),\n };\n};\n\nexport const buildRAGEvaluationResponse = (\n cases: RAGEvaluationCaseResult[],\n): RAGEvaluationResponse => {\n const totalCases = cases.length;\n const corpusKeys = [\n ...new Set(cases.flatMap((entry) => entry.corpusKey ?? [])),\n ];\n const passedCases = cases.filter((entry) => entry.status === \"pass\").length;\n const partialCases = cases.filter(\n (entry) => entry.status === \"partial\",\n ).length;\n const failedCases = cases.filter((entry) => entry.status === \"fail\").length;\n\n return {\n cases,\n ...(corpusKeys.length > 0 ? { corpusKeys } : {}),\n elapsedMs: cases.reduce((sum, result) => sum + result.elapsedMs, 0),\n ok: true,\n passingRate: totalCases > 0 ? (passedCases / totalCases) * 100 : 0,\n summary: {\n averageF1:\n cases.reduce((sum, result) => sum + result.f1, 0) / (totalCases || 1),\n averageLatencyMs:\n cases.reduce((sum, result) => sum + result.elapsedMs, 0) /\n (totalCases || 1),\n averagePrecision:\n cases.reduce((sum, result) => sum + result.precision, 0) /\n (totalCases || 1),\n averageRecall:\n cases.reduce((sum, result) => sum + result.recall, 0) /\n (totalCases || 1),\n failedCases,\n partialCases,\n passedCases,\n totalCases,\n },\n totalCases,\n };\n};\n\nconst incrementFailureCounts = (\n target: Record<string, number>,\n failureClasses: string[] | undefined,\n) => {\n for (const failureClass of failureClasses ?? []) {\n target[failureClass] = (target[failureClass] ?? 0) + 1;\n }\n};\n\nconst sortEntityQualitySummaries = <\n T extends { passingRate: number; totalCases: number; label: string },\n>(\n entries: T[],\n) =>\n entries.sort((left, right) => {\n if (right.passingRate !== left.passingRate) {\n return right.passingRate - left.passingRate;\n }\n if (right.totalCases !== left.totalCases) {\n return right.totalCases - left.totalCases;\n }\n\n return left.label.localeCompare(right.label);\n });\n\nexport const buildRAGEvaluationEntityQualityView = (\n response: RAGEvaluationResponse,\n): RAGEvaluationEntityQualityView => {\n const bySource = new Map<string, RAGEvaluationEntityQualitySummary>();\n const byDocument = new Map<string, RAGEvaluationEntityQualitySummary>();\n for (const entry of response.cases) {\n const targets =\n entry.mode === \"source\"\n ? entry.expectedIds\n : entry.mode === \"documentId\"\n ? entry.expectedIds\n : [];\n const targetMap =\n entry.mode === \"source\"\n ? bySource\n : entry.mode === \"documentId\"\n ? byDocument\n : undefined;\n if (!targetMap) {\n continue;\n }\n for (const target of targets) {\n const current =\n targetMap.get(target) ??\n ({\n averageF1: 0,\n caseIds: [],\n entityType: entry.mode === \"source\" ? \"source\" : \"document\",\n failedCases: 0,\n failureCounts: {},\n key: target,\n label: target,\n passedCases: 0,\n passingRate: 0,\n partialCases: 0,\n totalCases: 0,\n } satisfies RAGEvaluationEntityQualitySummary);\n current.totalCases += 1;\n current.averageF1 += entry.f1;\n current.caseIds.push(entry.caseId);\n if (entry.status === \"pass\") {\n current.passedCases += 1;\n } else if (entry.status === \"partial\") {\n current.partialCases += 1;\n } else {\n current.failedCases += 1;\n }\n incrementFailureCounts(current.failureCounts, entry.failureClasses);\n targetMap.set(target, current);\n }\n }\n\n for (const map of [bySource, byDocument]) {\n for (const entry of map.values()) {\n entry.averageF1 =\n entry.totalCases > 0 ? entry.averageF1 / entry.totalCases : 0;\n entry.passingRate =\n entry.totalCases > 0 ? (entry.passedCases / entry.totalCases) * 100 : 0;\n }\n }\n\n return {\n byDocument: sortEntityQualitySummaries([...byDocument.values()]),\n bySource: sortEntityQualitySummaries([...bySource.values()]),\n };\n};\n\nexport const buildRAGAnswerGroundingEntityQualityView = (\n response: RAGAnswerGroundingEvaluationResponse,\n): RAGAnswerGroundingEntityQualityView => {\n const bySource = new Map<string, RAGAnswerGroundingEntityQualitySummary>();\n const byDocument = new Map<string, RAGAnswerGroundingEntityQualitySummary>();\n for (const entry of response.cases) {\n const targetMap =\n entry.mode === \"source\"\n ? bySource\n : entry.mode === \"documentId\"\n ? byDocument\n : undefined;\n if (!targetMap) {\n continue;\n }\n for (const target of entry.expectedIds) {\n const current =\n targetMap.get(target) ??\n ({\n averageCitationF1: 0,\n averageResolvedCitationRate: 0,\n caseIds: [],\n entityType: entry.mode === \"source\" ? \"source\" : \"document\",\n failedCases: 0,\n failureCounts: {},\n key: target,\n label: target,\n passedCases: 0,\n passingRate: 0,\n partialCases: 0,\n totalCases: 0,\n } satisfies RAGAnswerGroundingEntityQualitySummary);\n current.totalCases += 1;\n current.averageCitationF1 += entry.citationF1;\n current.averageResolvedCitationRate += entry.resolvedCitationRate;\n current.caseIds.push(entry.caseId);\n if (entry.status === \"pass\") {\n current.passedCases += 1;\n } else if (entry.status === \"partial\") {\n current.partialCases += 1;\n } else {\n current.failedCases += 1;\n }\n incrementFailureCounts(current.failureCounts, entry.failureClasses);\n targetMap.set(target, current);\n }\n }\n\n for (const map of [bySource, byDocument]) {\n for (const entry of map.values()) {\n entry.averageCitationF1 =\n entry.totalCases > 0 ? entry.averageCitationF1 / entry.totalCases : 0;\n entry.averageResolvedCitationRate =\n entry.totalCases > 0\n ? entry.averageResolvedCitationRate / entry.totalCases\n : 0;\n entry.passingRate =\n entry.totalCases > 0 ? (entry.passedCases / entry.totalCases) * 100 : 0;\n }\n }\n\n return {\n byDocument: sortEntityQualitySummaries([...byDocument.values()]),\n bySource: sortEntityQualitySummaries([...bySource.values()]),\n };\n};\n\nexport const evaluateRAGAnswerGroundingCase = ({\n caseIndex,\n caseInput,\n}: {\n caseIndex: number;\n caseInput: RAGAnswerGroundingEvaluationCase;\n}): RAGAnswerGroundingEvaluationCaseResult => {\n const mode = resolveEvaluationMode(caseInput);\n const expectedIds = normalizeExpectedIds(\n mode === \"chunkId\"\n ? (caseInput.expectedChunkIds ?? [])\n : mode === \"source\"\n ? (caseInput.expectedSources ?? [])\n : (caseInput.expectedDocumentIds ?? []),\n );\n const groundedAnswer = buildRAGGroundedAnswer(\n caseInput.answer,\n caseInput.sources,\n );\n const citedReferences = groundedAnswer.parts.flatMap((part) =>\n part.type === \"citation\" ? part.references : [],\n );\n const citedIds = normalizeExpectedIds(\n citedReferences.map((reference) => extractExpectedId(reference, mode)),\n );\n const expectedSet = new Set(expectedIds);\n const citedSet = new Set(citedIds);\n const matchedIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => citedSet.has(id)),\n );\n const missingIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => !citedSet.has(id)),\n );\n const extraIds = normalizeExpectedIds(\n [...citedSet].filter((id) => !expectedSet.has(id)),\n );\n const matchedCount = matchedIds.length;\n const expectedCount = expectedIds.length;\n const citedCount = citedIds.length;\n const precision = citedCount > 0 ? matchedCount / citedCount : 0;\n const recall = expectedCount > 0 ? matchedCount / expectedCount : 0;\n const citationF1 =\n precision + recall > 0\n ? (2 * precision * recall) / (precision + recall)\n : 0;\n const citationCount = groundedAnswer.parts.filter(\n (part) => part.type === \"citation\",\n ).length;\n const unresolvedCitationCount = new Set(\n groundedAnswer.ungroundedReferenceNumbers,\n ).size;\n const resolvedCitationCount = citedReferences.length;\n const resolvedCitationRate =\n citationCount > 0 ? Math.min(1, resolvedCitationCount / citationCount) : 0;\n\n return {\n answer: caseInput.answer,\n caseId: caseInput.id ?? `case-${caseIndex + 1}`,\n citationCount,\n citationF1,\n citationPrecision: precision,\n citationRecall: recall,\n citedIds,\n coverage: groundedAnswer.coverage,\n expectedCount,\n expectedIds,\n extraIds,\n groundedAnswer,\n hasCitations: groundedAnswer.hasCitations,\n label: caseInput.label,\n matchedCount,\n matchedIds,\n failureClasses: classifyRAGGroundingFailure({\n availableSources: caseInput.sources,\n citationCount,\n expectedCount,\n extraIds,\n matchedCount,\n missingIds,\n unresolvedCitationCount,\n }),\n metadata: caseInput.metadata,\n missingIds,\n mode,\n query: caseInput.query,\n referenceCount: groundedAnswer.references.length,\n resolvedCitationCount,\n resolvedCitationRate,\n status: buildAnswerGroundingStatus({\n coverage: groundedAnswer.coverage,\n expectedCount,\n matchedCount,\n resolvedCitationCount,\n unresolvedCitationCount,\n }),\n unresolvedCitationCount,\n };\n};\n\nexport const buildRAGAnswerGroundingEvaluationResponse = (\n cases: RAGAnswerGroundingEvaluationCaseResult[],\n): RAGAnswerGroundingEvaluationResponse => {\n const totalCases = cases.length;\n const passedCases = cases.filter((entry) => entry.status === \"pass\").length;\n const partialCases = cases.filter(\n (entry) => entry.status === \"partial\",\n ).length;\n const failedCases = cases.filter((entry) => entry.status === \"fail\").length;\n const groundedCases = cases.filter(\n (entry) => entry.coverage === \"grounded\",\n ).length;\n const partiallyGroundedCases = cases.filter(\n (entry) => entry.coverage === \"partial\",\n ).length;\n const ungroundedCases = cases.filter(\n (entry) => entry.coverage === \"ungrounded\",\n ).length;\n\n return {\n cases,\n ok: true,\n passingRate: totalCases > 0 ? (passedCases / totalCases) * 100 : 0,\n summary: {\n averageCitationF1:\n cases.reduce((sum, result) => sum + result.citationF1, 0) /\n (totalCases || 1),\n averageCitationPrecision:\n cases.reduce((sum, result) => sum + result.citationPrecision, 0) /\n (totalCases || 1),\n averageCitationRecall:\n cases.reduce((sum, result) => sum + result.citationRecall, 0) /\n (totalCases || 1),\n averageResolvedCitationRate:\n cases.reduce((sum, result) => sum + result.resolvedCitationRate, 0) /\n (totalCases || 1),\n failedCases,\n groundedCases,\n partiallyGroundedCases,\n passedCases,\n partialCases,\n totalCases,\n ungroundedCases,\n },\n totalCases,\n };\n};\n\nexport const evaluateRAGAnswerGrounding = (\n input: RAGAnswerGroundingEvaluationInput,\n): RAGAnswerGroundingEvaluationResponse =>\n buildRAGAnswerGroundingEvaluationResponse(\n input.cases.map((caseInput, caseIndex) =>\n evaluateRAGAnswerGroundingCase({ caseIndex, caseInput }),\n ),\n );\nexport const compareRAGRerankers = async ({\n collection,\n suite,\n rerankers,\n defaultTopK = DEFAULT_TOP_K,\n}: {\n collection: RAGCollection;\n suite: RAGEvaluationSuite;\n rerankers: RAGRerankerCandidate[];\n defaultTopK?: number;\n}): Promise<RAGRerankerComparison> => {\n const entries = await Promise.all(\n rerankers.map(async (candidate) => {\n const evaluated = await evaluateRAGCollectionCases({\n collection,\n defaultTopK,\n input: suite.input,\n includeTrace: true,\n rerank: candidate.rerank,\n });\n const response = buildRAGEvaluationResponse(\n evaluated.map((entry) => entry.caseResult),\n );\n\n return {\n caseTraceSnapshots:\n buildEvaluationCaseTraceSnapshotsFromEvaluated(evaluated),\n label: candidate.label ?? candidate.id,\n providerName:\n typeof candidate.rerank === \"function\"\n ? undefined\n : candidate.rerank?.providerName,\n response,\n rerankerId: candidate.id,\n traceSummary: summarizeRetrievalTraces(\n evaluated\n .map((entry) => entry.trace)\n .filter((trace): trace is RAGRetrievalTrace => Boolean(trace)),\n ),\n } satisfies RAGRerankerComparisonEntry;\n }),\n );\n\n const leaderboard = buildRAGEvaluationLeaderboard(\n entries.map((entry) => ({\n elapsedMs: entry.response.elapsedMs,\n finishedAt: 0,\n id: entry.rerankerId,\n label: entry.label,\n response: entry.response,\n startedAt: 0,\n suiteId: suite.id,\n traceSummary: entry.traceSummary,\n })),\n );\n\n return {\n entries,\n leaderboard,\n summary: summarizeRAGRerankerComparison(entries),\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\nconst summarizeEvaluationResponseComparison = <\n TEntry extends {\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n) => {\n if (entries.length === 0) {\n return {};\n }\n\n const byPassingRate = [...entries].sort((left, right) => {\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const byAverageF1 = [...entries].sort(\n (left, right) =>\n right.response.summary.averageF1 - left.response.summary.averageF1,\n );\n const byLatency = [...entries].sort(\n (left, right) =>\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs,\n );\n const getId = (entry: TEntry) =>\n typeof entry[idKey] === \"string\" ? (entry[idKey] as string) : undefined;\n\n return {\n bestByAverageF1: getId(byAverageF1[0] as TEntry),\n bestByPassingRate: getId(byPassingRate[0] as TEntry),\n fastest: getId(byLatency[0] as TEntry),\n };\n};\n\nconst selectComparisonEntryByTraceMetric = <\n TEntry extends {\n traceSummary?: RAGRetrievalTraceComparisonSummary;\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n metric: keyof Pick<\n RAGRetrievalTraceComparisonSummary,\n | \"multiVectorCollapsedCases\"\n | \"multiVectorLexicalHitCases\"\n | \"multiVectorVectorHitCases\"\n | \"officeEvidenceReconcileCases\"\n | \"officeParagraphEvidenceReconcileCases\"\n | \"officeListEvidenceReconcileCases\"\n | \"officeTableEvidenceReconcileCases\"\n | \"pdfEvidenceReconcileCases\"\n >,\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = left.traceSummary?.[metric] ?? 0;\n const rightMetric = right.traceSummary?.[metric] ?? 0;\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n const leftEvidenceScore =\n (left.traceSummary?.multiVectorCollapsedCases ?? 0) +\n (left.traceSummary?.multiVectorLexicalHitCases ?? 0) +\n (left.traceSummary?.multiVectorVectorHitCases ?? 0);\n const rightEvidenceScore =\n (right.traceSummary?.multiVectorCollapsedCases ?? 0) +\n (right.traceSummary?.multiVectorLexicalHitCases ?? 0) +\n (right.traceSummary?.multiVectorVectorHitCases ?? 0);\n if (rightEvidenceScore !== leftEvidenceScore) {\n return rightEvidenceScore - leftEvidenceScore;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || (winner.traceSummary?.[metric] ?? 0) === 0) {\n return undefined;\n }\n\n return typeof winner[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst selectComparisonEntryByLowestTraceMetric = <\n TEntry extends {\n traceSummary?: RAGRetrievalTraceComparisonSummary;\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n metric: keyof Pick<\n RAGRetrievalTraceComparisonSummary,\n \"runtimeCandidateBudgetExhaustedCases\" | \"runtimeUnderfilledTopKCases\"\n >,\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = left.traceSummary?.[metric] ?? 0;\n const rightMetric = right.traceSummary?.[metric] ?? 0;\n if (leftMetric !== rightMetric) {\n return leftMetric - rightMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst selectComparisonEntryByTraceStageCount = <\n TEntry extends {\n traceSummary?: RAGRetrievalTraceComparisonSummary;\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n stage: RAGRetrievalTraceStage,\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = left.traceSummary?.stageCounts?.[stage] ?? 0;\n const rightMetric = right.traceSummary?.stageCounts?.[stage] ?? 0;\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || (winner.traceSummary?.stageCounts?.[stage] ?? 0) === 0) {\n return undefined;\n }\n\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst countPresentationCueCases = <\n TEntry extends { caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[] },\n>(\n entry: TEntry,\n cue: \"body\" | \"notes\" | \"title\",\n) =>\n (entry.caseTraceSnapshots ?? []).filter(\n (snapshot) => snapshot.leadPresentationCue === cue,\n ).length;\n\nconst selectComparisonEntryByPresentationCueCases = <\n TEntry extends {\n caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[];\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n cue: \"body\" | \"notes\" | \"title\",\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = countPresentationCueCases(left, cue);\n const rightMetric = countPresentationCueCases(right, cue);\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || countPresentationCueCases(winner, cue) === 0) {\n return undefined;\n }\n\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst countSpreadsheetCueCases = <\n TEntry extends { caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[] },\n>(\n entry: TEntry,\n cue: \"column\" | \"sheet\" | \"table\",\n) =>\n (entry.caseTraceSnapshots ?? []).filter(\n (snapshot) => snapshot.leadSpreadsheetCue === cue,\n ).length;\n\nconst selectComparisonEntryBySpreadsheetCueCases = <\n TEntry extends {\n caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[];\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n cue: \"column\" | \"sheet\" | \"table\",\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = countSpreadsheetCueCases(left, cue);\n const rightMetric = countSpreadsheetCueCases(right, cue);\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || countSpreadsheetCueCases(winner, cue) === 0) {\n return undefined;\n }\n\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst resolveRetrievalMode = (\n candidate: RAGRetrievalCandidate,\n): RAGHybridRetrievalMode => {\n if (!candidate.retrieval) {\n return \"vector\";\n }\n\n return typeof candidate.retrieval === \"string\"\n ? candidate.retrieval\n : (candidate.retrieval.mode ?? \"vector\");\n};\nexport const compareRAGRetrievalStrategies = async ({\n collection,\n suite,\n retrievals,\n defaultTopK = DEFAULT_TOP_K,\n}: {\n collection: RAGCollection;\n suite: RAGEvaluationSuite;\n retrievals: RAGRetrievalCandidate[];\n defaultTopK?: number;\n}): Promise<RAGRetrievalComparison> => {\n const entries = await Promise.all(\n retrievals.map(async (candidate) => {\n const tracedCollection = {\n ...collection,\n search: (input) =>\n collection.search({\n ...input,\n queryTransform: candidate.queryTransform ?? input.queryTransform,\n rerank: candidate.rerank ?? input.rerank,\n retrieval: candidate.retrieval ?? input.retrieval,\n }),\n searchWithTrace: (input) =>\n collection.searchWithTrace({\n ...input,\n queryTransform: candidate.queryTransform ?? input.queryTransform,\n rerank: candidate.rerank ?? input.rerank,\n retrieval: candidate.retrieval ?? input.retrieval,\n }),\n } satisfies RAGCollection;\n const evaluated = await evaluateRAGCollectionCases({\n collection: {\n ...tracedCollection,\n },\n defaultTopK,\n input: suite.input,\n includeTrace: true,\n rerank: candidate.rerank,\n });\n const response = buildRAGEvaluationResponse(\n evaluated.map((entry) => entry.caseResult),\n );\n\n return {\n caseTraceSnapshots:\n buildEvaluationCaseTraceSnapshotsFromEvaluated(evaluated),\n label: candidate.label ?? candidate.id,\n response,\n retrievalId: candidate.id,\n retrievalMode: resolveRetrievalMode(candidate),\n traceSummary: summarizeRetrievalTraces(\n evaluated\n .map((entry) => entry.trace)\n .filter((trace): trace is RAGRetrievalTrace => Boolean(trace)),\n ),\n } satisfies RAGRetrievalComparisonEntry;\n }),\n );\n\n const leaderboard = buildRAGEvaluationLeaderboard(\n entries.map((entry) => ({\n elapsedMs: entry.response.elapsedMs,\n finishedAt: 0,\n id: entry.retrievalId,\n label: entry.label,\n response: entry.response,\n startedAt: 0,\n suiteId: suite.id,\n traceSummary: entry.traceSummary,\n })),\n );\n\n return {\n corpusKeys: [\n ...new Set(entries.flatMap((entry) => entry.response.corpusKeys ?? [])),\n ],\n entries,\n leaderboard,\n summary: summarizeRAGRetrievalComparison(entries),\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const summarizeRAGRetrievalTraces = (\n traces: RAGRetrievalTrace[],\n): RAGRetrievalTraceComparisonSummary | undefined =>\n summarizeRetrievalTraces(traces);\n\nexport const compareRAGRetrievalTraceSummaries = (\n current: RAGRetrievalTraceComparisonSummary,\n previous: RAGRetrievalTraceComparisonSummary,\n): RAGRetrievalTraceComparisonSummaryDiff => ({\n averageCandidateTopKDelta:\n current.averageCandidateTopK - previous.averageCandidateTopK,\n averageFinalCountDelta:\n current.averageFinalCount - previous.averageFinalCount,\n averageLexicalCountDelta:\n current.averageLexicalCount - previous.averageLexicalCount,\n averageLexicalTopKDelta:\n current.averageLexicalTopK - previous.averageLexicalTopK,\n averageVectorCountDelta:\n current.averageVectorCount - previous.averageVectorCount,\n balancedCasesDelta: current.balancedCases - previous.balancedCases,\n current,\n lexicalCasesDelta: current.lexicalCases - previous.lexicalCases,\n modeDelta: buildSummaryListDelta(current.modes, previous.modes),\n previous,\n roundRobinCasesDelta: current.roundRobinCases - previous.roundRobinCases,\n sourceBalanceStrategyDelta: buildSummaryListDelta(\n current.sourceBalanceStrategies,\n previous.sourceBalanceStrategies,\n ),\n stageCountsDelta: diffTraceSummaryStageCounts({\n current: current.stageCounts,\n previous: previous.stageCounts,\n }),\n totalCasesDelta: current.totalCases - previous.totalCases,\n transformedCasesDelta: current.transformedCases - previous.transformedCases,\n vectorCasesDelta: current.vectorCases - previous.vectorCases,\n variantCasesDelta: current.variantCases - previous.variantCases,\n multiVectorCasesDelta: current.multiVectorCases - previous.multiVectorCases,\n multiVectorVectorHitCasesDelta:\n current.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n multiVectorLexicalHitCasesDelta:\n current.multiVectorLexicalHitCases - previous.multiVectorLexicalHitCases,\n multiVectorCollapsedCasesDelta:\n current.multiVectorCollapsedCases - previous.multiVectorCollapsedCases,\n officeEvidenceReconcileCasesDelta:\n current.officeEvidenceReconcileCases -\n previous.officeEvidenceReconcileCases,\n officeParagraphEvidenceReconcileCasesDelta:\n (current.officeParagraphEvidenceReconcileCases ?? 0) -\n (previous.officeParagraphEvidenceReconcileCases ?? 0),\n officeListEvidenceReconcileCasesDelta:\n (current.officeListEvidenceReconcileCases ?? 0) -\n (previous.officeListEvidenceReconcileCases ?? 0),\n officeTableEvidenceReconcileCasesDelta:\n (current.officeTableEvidenceReconcileCases ?? 0) -\n (previous.officeTableEvidenceReconcileCases ?? 0),\n pdfEvidenceReconcileCasesDelta:\n current.pdfEvidenceReconcileCases - previous.pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCasesDelta:\n current.runtimeCandidateBudgetExhaustedCases -\n previous.runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCasesDelta:\n current.runtimeUnderfilledTopKCases - previous.runtimeUnderfilledTopKCases,\n});\n\nconst buildSearchTraceResultSnapshots = (\n results: Array<{\n chunkId: string;\n corpusKey?: string;\n score: number;\n source?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }>,\n): RAGSearchTraceResultSnapshot[] =>\n results.map((result) => ({\n chunkId: result.chunkId,\n corpusKey:\n result.corpusKey ??\n (typeof result.metadata?.corpusKey === \"string\"\n ? result.metadata.corpusKey\n : undefined),\n documentId:\n typeof result.metadata?.documentId === \"string\"\n ? result.metadata.documentId\n : undefined,\n score: result.score,\n source: result.source,\n title: result.title,\n }));\n\nexport const buildRAGSearchTraceRecord = (input: {\n trace: RAGRetrievalTrace;\n results?: Array<{\n chunkId: string;\n score: number;\n source?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }>;\n id?: string;\n label?: string;\n groupKey?: string;\n tags?: string[];\n startedAt?: number;\n finishedAt?: number;\n elapsedMs?: number;\n metadata?: Record<string, unknown>;\n}): RAGSearchTraceRecord => {\n const startedAt = input.startedAt ?? Date.now();\n const finishedAt = input.finishedAt ?? startedAt;\n const elapsedMs = input.elapsedMs ?? Math.max(0, finishedAt - startedAt);\n const summary =\n summarizeRetrievalTraces([input.trace]) ??\n summarizeRetrievalTraces([\n {\n ...input.trace,\n steps: [...input.trace.steps],\n },\n ]);\n\n if (!summary) {\n throw new Error(\"Failed to summarize retrieval trace\");\n }\n\n return {\n elapsedMs,\n finishedAt,\n groupKey: input.groupKey,\n id: input.id ?? generateId(),\n label: input.label ?? input.trace.query,\n metadata: input.metadata,\n query: input.trace.query,\n results: buildSearchTraceResultSnapshots(input.results ?? []),\n startedAt,\n summary,\n tags: normalizeTraceTags(input.tags),\n trace: input.trace,\n };\n};\n\nexport const buildRAGSearchTraceDiff = ({\n current,\n previous,\n}: {\n current: RAGSearchTraceRecord;\n previous?: RAGSearchTraceRecord;\n}): RAGSearchTraceDiff => {\n const currentChunkIds = current.results.map((entry) => entry.chunkId);\n const previousChunkIds =\n previous?.results.map((entry) => entry.chunkId) ?? [];\n const previousSet = new Set(previousChunkIds);\n const currentSet = new Set(currentChunkIds);\n\n return {\n addedChunkIds: currentChunkIds.filter(\n (chunkId) => !previousSet.has(chunkId),\n ),\n currentTraceId: current.id,\n previousTraceId: previous?.id,\n removedChunkIds: previousChunkIds.filter(\n (chunkId) => !currentSet.has(chunkId),\n ),\n retainedChunkIds: currentChunkIds.filter((chunkId) =>\n previousSet.has(chunkId),\n ),\n summaryDelta: previous?.summary\n ? compareRAGRetrievalTraceSummaries(current.summary, previous.summary)\n : undefined,\n topResultChanged:\n (current.results[0]?.chunkId ?? undefined) !==\n (previous?.results[0]?.chunkId ?? undefined),\n };\n};\n\nexport const buildRAGRetrievalTraceHistoryTrend = ({\n runs,\n}: {\n runs: RAGRetrievalTraceSummaryRun[];\n}): RAGRetrievalTraceTrend => {\n const sortedRuns = normalizeTraceSummaryRuns(runs);\n const runsWithSummary = sortedRuns.filter(\n (run) => run.traceSummary && run.label,\n );\n const traceSummaries = runsWithSummary\n .map((run) => run.traceSummary)\n .filter((summary): summary is RAGRetrievalTraceComparisonSummary =>\n Boolean(summary),\n );\n const summaryTrendWindows: RAGRetrievalTraceHistoryWindow[] = [];\n\n for (let index = 0; index < runsWithSummary.length - 1; index += 1) {\n const currentRun = runsWithSummary[index]!;\n const previousRun = runsWithSummary[index + 1]!;\n if (!currentRun.traceSummary || !previousRun.traceSummary) {\n continue;\n }\n const current = currentRun.traceSummary;\n const previous = previousRun.traceSummary;\n const delta = compareRAGRetrievalTraceSummaries(current, previous);\n summaryTrendWindows.push({\n current,\n currentRunId: currentRun.id,\n currentRunLabel: currentRun.label,\n delta,\n previous,\n previousRunId: previousRun.id,\n previousRunLabel: previousRun.label,\n });\n }\n\n const latest = runsWithSummary[0]?.traceSummary;\n const previous = runsWithSummary[1]?.traceSummary;\n const latestToPrevious =\n latest && previous\n ? compareRAGRetrievalTraceSummaries(latest, previous)\n : undefined;\n const listHistoryModes = traceSummaries.map((summary) => summary.modes);\n const listHistorySourceStrategies = traceSummaries.map(\n (summary) => summary.sourceBalanceStrategies,\n );\n const modes = summarizeListTurnover<RAGHybridRetrievalMode>({\n current: normalizeSummaryList(latest?.modes ?? []),\n history: listHistoryModes,\n previous: normalizeSummaryList(previous?.modes ?? []),\n });\n const sourceBalanceStrategies =\n summarizeListTurnover<RAGSourceBalanceStrategy>({\n current: normalizeSummaryList(latest?.sourceBalanceStrategies ?? []),\n history: listHistorySourceStrategies,\n previous: normalizeSummaryList(previous?.sourceBalanceStrategies ?? []),\n });\n const { aggregate, bestMetric, worstMetric } = buildTraceSummaryAggregate({\n summaries: traceSummaries,\n });\n const stageChurn = buildRAGRetrievalTraceStageChurn({\n windows: summaryTrendWindows,\n });\n\n return {\n aggregate,\n bestMetric,\n modeTurnover: modes,\n runsWithTraceSummary: traceSummaries.length,\n sourceBalanceStrategyTurnover: sourceBalanceStrategies,\n stageChurn,\n summaryTrendWindows,\n worstMetric,\n worstVolatileStage: stageChurn.find((entry) => entry.totalChanges > 0),\n latestToPrevious,\n };\n};\nexport const createRAGEvaluationSuite = (\n suite: RAGEvaluationSuite,\n): RAGEvaluationSuite => {\n const cases = suite.input.cases.map((entry) => ({\n ...entry,\n ...(entry.goldenSet === true ? { goldenSet: true } : {}),\n ...(entry.expectedChunkIds\n ? { expectedChunkIds: [...entry.expectedChunkIds] }\n : {}),\n ...(entry.expectedSources\n ? { expectedSources: [...entry.expectedSources] }\n : {}),\n ...(entry.expectedDocumentIds\n ? { expectedDocumentIds: [...entry.expectedDocumentIds] }\n : {}),\n ...(entry.hardNegativeChunkIds\n ? {\n hardNegativeChunkIds: normalizeExpectedIds(\n entry.hardNegativeChunkIds,\n ),\n }\n : {}),\n ...(entry.hardNegativeSources\n ? {\n hardNegativeSources: normalizeExpectedIds(entry.hardNegativeSources),\n }\n : {}),\n ...(entry.hardNegativeDocumentIds\n ? {\n hardNegativeDocumentIds: normalizeExpectedIds(\n entry.hardNegativeDocumentIds,\n ),\n }\n : {}),\n ...(entry.filter ? { filter: { ...entry.filter } } : {}),\n ...(entry.metadata ? { metadata: { ...entry.metadata } } : {}),\n ...(entry.retrieval ? { retrieval: entry.retrieval } : {}),\n }));\n const duplicateCaseIds = Array.from(\n new Set(\n cases\n .map((entry) => entry.id)\n .filter(\n (id, index, ids) =>\n typeof id === \"string\" && ids.indexOf(id) !== index,\n ),\n ),\n );\n if (duplicateCaseIds.length > 0) {\n throw new Error(\n `RAG evaluation suite contains duplicate case ids: ${duplicateCaseIds.join(\", \")}`,\n );\n }\n\n return {\n ...suite,\n input: {\n ...suite.input,\n cases,\n ...(suite.input.filter ? { filter: { ...suite.input.filter } } : {}),\n ...(suite.input.retrieval ? { retrieval: suite.input.retrieval } : {}),\n },\n ...(suite.metadata ? { metadata: { ...suite.metadata } } : {}),\n };\n};\n\nexport const addRAGEvaluationSuiteCase = ({\n suite,\n caseInput,\n index,\n}: {\n suite: RAGEvaluationSuite;\n caseInput: RAGEvaluationCase;\n index?: number;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n if (normalizedSuite.input.cases.some((entry) => entry.id === caseInput.id)) {\n throw new Error(\n `RAG evaluation suite already contains case id ${caseInput.id}`,\n );\n }\n\n const nextCases = [...normalizedSuite.input.cases];\n const insertAt =\n typeof index === \"number\" && Number.isFinite(index)\n ? Math.max(0, Math.min(nextCases.length, Math.trunc(index)))\n : nextCases.length;\n nextCases.splice(insertAt, 0, caseInput);\n\n return createRAGEvaluationSuite({\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: nextCases,\n },\n });\n};\n\nexport const updateRAGEvaluationSuiteCase = ({\n suite,\n caseId,\n caseInput,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n caseInput: RAGEvaluationCase;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const targetIndex = normalizedSuite.input.cases.findIndex(\n (entry) => entry.id === caseId,\n );\n if (targetIndex < 0) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n if (\n caseInput.id !== caseId &&\n normalizedSuite.input.cases.some((entry) => entry.id === caseInput.id)\n ) {\n throw new Error(\n `RAG evaluation suite already contains case id ${caseInput.id}`,\n );\n }\n\n const nextCases = [...normalizedSuite.input.cases];\n nextCases[targetIndex] = caseInput;\n\n return createRAGEvaluationSuite({\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: nextCases,\n },\n });\n};\n\nexport const removeRAGEvaluationSuiteCase = ({\n suite,\n caseId,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const nextCases = normalizedSuite.input.cases.filter(\n (entry) => entry.id !== caseId,\n );\n if (nextCases.length === normalizedSuite.input.cases.length) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n return {\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: nextCases,\n },\n };\n};\n\nexport const reorderRAGEvaluationSuiteCases = ({\n suite,\n caseIds,\n}: {\n suite: RAGEvaluationSuite;\n caseIds: string[];\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const caseMap = new Map(\n normalizedSuite.input.cases.map((entry) => [entry.id, entry]),\n );\n if (caseIds.length !== normalizedSuite.input.cases.length) {\n throw new Error(\n \"RAG evaluation suite reorder requires exactly one id per case\",\n );\n }\n const unknownCaseIds = caseIds.filter((id) => !caseMap.has(id));\n if (unknownCaseIds.length > 0) {\n throw new Error(\n `RAG evaluation suite reorder contains unknown case ids: ${unknownCaseIds.join(\", \")}`,\n );\n }\n if (new Set(caseIds).size !== caseIds.length) {\n throw new Error(\"RAG evaluation suite reorder contains duplicate case ids\");\n }\n\n return {\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: caseIds.map((id) => caseMap.get(id)!),\n },\n };\n};\n\nexport const setRAGEvaluationSuiteCaseGoldenSet = ({\n suite,\n caseId,\n goldenSet,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n goldenSet: boolean;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const target = normalizedSuite.input.cases.find(\n (entry) => entry.id === caseId,\n );\n if (!target) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n return updateRAGEvaluationSuiteCase({\n caseId,\n caseInput: {\n ...target,\n ...(goldenSet ? { goldenSet: true } : { goldenSet: undefined }),\n },\n suite: normalizedSuite,\n });\n};\n\nconst resolveHardNegativeCaseField = (\n kind: \"chunkId\" | \"source\" | \"documentId\",\n) =>\n kind === \"chunkId\"\n ? \"hardNegativeChunkIds\"\n : kind === \"source\"\n ? \"hardNegativeSources\"\n : \"hardNegativeDocumentIds\";\n\nexport const addRAGEvaluationSuiteCaseHardNegative = ({\n suite,\n caseId,\n kind,\n value,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n kind: \"chunkId\" | \"source\" | \"documentId\";\n value: string;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const target = normalizedSuite.input.cases.find(\n (entry) => entry.id === caseId,\n );\n if (!target) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n const field = resolveHardNegativeCaseField(kind);\n const nextValues = normalizeExpectedIds([\n ...normalizeStringArray(target[field]),\n value,\n ]);\n\n return updateRAGEvaluationSuiteCase({\n caseId,\n caseInput: {\n ...target,\n [field]: nextValues,\n },\n suite: normalizedSuite,\n });\n};\n\nexport const removeRAGEvaluationSuiteCaseHardNegative = ({\n suite,\n caseId,\n kind,\n value,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n kind: \"chunkId\" | \"source\" | \"documentId\";\n value: string;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const target = normalizedSuite.input.cases.find(\n (entry) => entry.id === caseId,\n );\n if (!target) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n const field = resolveHardNegativeCaseField(kind);\n const nextValues = normalizeStringArray(target[field]).filter(\n (entry) => entry !== value.trim(),\n );\n\n return updateRAGEvaluationSuiteCase({\n caseId,\n caseInput: {\n ...target,\n [field]: nextValues.length > 0 ? nextValues : undefined,\n },\n suite: normalizedSuite,\n });\n};\n\nexport const summarizeRAGEvaluationSuiteDataset = ({\n suite,\n}: {\n suite: RAGEvaluationSuite;\n}): RAGEvaluationSuiteDatasetSummary => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const cases = normalizedSuite.input.cases;\n\n return {\n caseCount: cases.length,\n goldenSetCount: cases.filter((entry) => entry.goldenSet === true).length,\n hardNegativeCaseCount: cases.filter(\n (entry) =>\n normalizeStringArray(entry.hardNegativeChunkIds).length > 0 ||\n normalizeStringArray(entry.hardNegativeSources).length > 0 ||\n normalizeStringArray(entry.hardNegativeDocumentIds).length > 0,\n ).length,\n hardNegativeChunkIdCount: cases.reduce(\n (sum, entry) =>\n sum + normalizeStringArray(entry.hardNegativeChunkIds).length,\n 0,\n ),\n hardNegativeDocumentIdCount: cases.reduce(\n (sum, entry) =>\n sum + normalizeStringArray(entry.hardNegativeDocumentIds).length,\n 0,\n ),\n hardNegativeSourceCount: cases.reduce(\n (sum, entry) =>\n sum + normalizeStringArray(entry.hardNegativeSources).length,\n 0,\n ),\n suiteId: normalizedSuite.id,\n };\n};\n\nexport const generateRAGEvaluationSuiteFromDocuments = ({\n suiteId,\n documents,\n label,\n description,\n maxCases = 20,\n topK = 5,\n scoreThreshold,\n filter,\n retrieval,\n includeGoldenSet = true,\n hardNegativePerCase = 1,\n metadata,\n}: RAGEvaluationSuiteGenerationOptions): RAGEvaluationSuite => {\n const normalizedDocuments = documents\n .filter(\n (document) =>\n typeof document.id === \"string\" &&\n document.id.trim().length > 0 &&\n typeof document.source === \"string\" &&\n document.source.trim().length > 0 &&\n typeof document.title === \"string\" &&\n document.title.trim().length > 0,\n )\n .sort((left, right) =>\n `${left.source}\\u0000${left.title}\\u0000${left.id}`.localeCompare(\n `${right.source}\\u0000${right.title}\\u0000${right.id}`,\n ),\n )\n .slice(0, Math.max(0, Math.trunc(maxCases)));\n\n const cases = normalizedDocuments.map((document, index) => {\n const negativeCandidates = normalizedDocuments\n .slice(index + 1)\n .concat(normalizedDocuments.slice(0, index))\n .filter((candidate) => candidate.id !== document.id);\n const hardNegativeDocumentIds = negativeCandidates\n .slice(0, Math.max(0, Math.trunc(hardNegativePerCase)))\n .map((candidate) => candidate.id);\n const hardNegativeSources = negativeCandidates\n .slice(0, Math.max(0, Math.trunc(hardNegativePerCase)))\n .map((candidate) => candidate.source);\n\n return {\n corpusKey: document.corpusKey,\n expectedDocumentIds: [document.id],\n expectedSources: [document.source],\n ...(includeGoldenSet ? { goldenSet: true } : {}),\n ...(hardNegativeDocumentIds.length > 0\n ? { hardNegativeDocumentIds }\n : {}),\n ...(hardNegativeSources.length > 0 ? { hardNegativeSources } : {}),\n id: `synthetic-${document.id}`,\n label: document.title,\n query: buildSyntheticEvaluationQuery(document),\n } satisfies RAGEvaluationCase;\n });\n\n return createRAGEvaluationSuite({\n description,\n id: suiteId,\n input: {\n cases,\n ...(filter ? { filter: { ...filter } } : {}),\n ...(typeof scoreThreshold === \"number\" ? { scoreThreshold } : {}),\n ...(typeof topK === \"number\" ? { topK } : {}),\n ...(retrieval ? { retrieval } : {}),\n },\n label,\n metadata,\n });\n};\n\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_SUITE_ID =\n \"rag-native-planner-larger-corpus\";\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_LABEL =\n \"Adaptive Native Planner Benchmark\";\nconst DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_SUITE_ID =\n \"rag-native-backend-larger-corpus\";\nconst DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_LABEL =\n \"Native Backend Comparison Benchmark\";\nconst DEFAULT_PRESENTATION_CUE_BENCHMARK_SUITE_ID =\n \"rag-presentation-cue-parity\";\nconst DEFAULT_PRESENTATION_CUE_BENCHMARK_LABEL = \"Presentation Cue Benchmark\";\nconst DEFAULT_SPREADSHEET_CUE_BENCHMARK_SUITE_ID = \"rag-spreadsheet-cue-parity\";\nconst DEFAULT_SPREADSHEET_CUE_BENCHMARK_LABEL = \"Spreadsheet Cue Benchmark\";\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY =\n \"Which launch checklist phrase is exact wording?\";\nconst DEFAULT_NATIVE_BACKEND_HYBRID_QUERY =\n \"aurora promotion checklist wording\";\nconst DEFAULT_NATIVE_BACKEND_FILTERED_QUERY =\n \"focus lane launch checklist wording\";\nconst DEFAULT_NATIVE_BACKEND_REORDERED_QUERY =\n \"exact aurora focus lane checklist wording\";\nconst DEFAULT_NATIVE_BACKEND_GUIDE_QUERY =\n \"which focus lane guide contains exact aurora promotion wording\";\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER = {\n lane: \"focus\",\n} satisfies Record<string, unknown>;\nconst DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS = [\n \"focus-distractor-0\",\n \"focus-distractor-1\",\n \"focus-distractor-2\",\n] as const;\n\nexport const createRAGNativeBackendBenchmarkMockEmbedding = async (\n text: string,\n): Promise<number[]> => {\n const normalized = text.toLowerCase();\n if (\n normalized.includes(\n \"launch checklist exact wording for aurora promotion\",\n ) ||\n normalized.includes(\"launch checklist exact wording\")\n ) {\n return [0.995, 0.005];\n }\n\n if (\n normalized.includes(\"aurora\") ||\n normalized.includes(\"checklist\") ||\n normalized.includes(\"focus lane\") ||\n normalized.includes(\"exact wording\") ||\n normalized.includes(\"guide\")\n ) {\n return [1, 0];\n }\n\n return [0, 1];\n};\n\nexport const createRAGNativeBackendBenchmarkCorpus = (input?: {\n backend?: \"generic\" | \"sqlite-native\" | \"postgres\";\n noiseCount?: number;\n}): RAGDocumentChunk[] => {\n const noiseCount = input?.noiseCount ?? 5_001;\n const backend = input?.backend ?? \"generic\";\n const genericChunks = [\n ...Array.from({ length: noiseCount }, (_, index) => ({\n chunkId: `noise:${index}`,\n corpusKey: \"noise\",\n embedding: [0, 1] as number[],\n metadata: {\n corpusKey: \"noise\",\n documentId: `noise-${index}`,\n lane: \"noise\",\n },\n source: `noise/${index}.md`,\n text: `Background operations note ${index}.`,\n })),\n ...Array.from({ length: 3 }, (_, index) => ({\n chunkId: `focus:distractor:${index}`,\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n corpusKey: \"focus\",\n documentId: `focus-distractor-${index}`,\n lane: \"focus\",\n },\n source: `focus/distractor-${index}.md`,\n text:\n index === 0\n ? \"aurora promotion checklist overview\"\n : index === 1\n ? \"launch checklist wording draft\"\n : \"focus lane promotion runbook notes\",\n })),\n {\n chunkId: \"focus:target\",\n corpusKey: \"focus\",\n embedding: [0.995, 0.005] as number[],\n metadata: {\n corpusKey: \"focus\",\n documentId: \"focus-target\",\n lane: \"focus\",\n },\n source: \"guide/planner-depth.md\",\n text: \"launch checklist exact wording for aurora promotion in the focus lane\",\n },\n ] satisfies RAGDocumentChunk[];\n\n const backendSpecificChunks =\n backend === \"sqlite-native\"\n ? [\n {\n chunkId: \"focus:sqlite:phrase-matrix\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"sqlite-native\",\n corpusKey: \"focus\",\n documentId: \"focus-sqlite-phrase-matrix\",\n lane: \"focus\",\n },\n source: \"guide/sqlite-phrase-matrix.md\",\n text: \"exact aurora focus lane checklist wording matrix for sqlite validation\",\n },\n {\n chunkId: \"focus:sqlite:guide-table\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"sqlite-native\",\n corpusKey: \"focus\",\n documentId: \"focus-sqlite-guide-table\",\n lane: \"focus\",\n },\n source: \"guide/sqlite-guide-table.md\",\n text: \"which focus lane guide contains aurora promotion wording draft table for sqlite operators\",\n },\n ]\n : backend === \"postgres\"\n ? [\n {\n chunkId: \"focus:postgres:appendix\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"postgres\",\n corpusKey: \"focus\",\n documentId: \"focus-postgres-appendix\",\n lane: \"focus\",\n },\n source: \"guide/postgres-appendix.md\",\n text: \"which focus lane guide contains exact aurora promotion wording appendix for postgres release review\",\n },\n {\n chunkId: \"focus:postgres:alternatives\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"postgres\",\n corpusKey: \"focus\",\n documentId: \"focus-postgres-alternatives\",\n lane: \"focus\",\n },\n source: \"guide/postgres-alternatives.md\",\n text: \"aurora promotion checklist wording alternatives and exact focus lane phrasing for postgres audits\",\n },\n ]\n : [];\n\n return [...genericChunks, ...backendSpecificChunks];\n};\n\nexport const createRAGAdaptiveNativePlannerBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Stress-tests larger-corpus native planner selection, candidate-budget pressure, and transformed-query recovery on filtered retrieval.\",\n id: input?.id ?? DEFAULT_NATIVE_PLANNER_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n \"focus-distractor-0\",\n \"focus-distractor-1\",\n \"focus-distractor-2\",\n ],\n id: \"planner-pressure-exact-phrase\",\n label: \"Exact phrase survives larger-corpus native pressure\",\n query: DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY,\n topK: input?.topK ?? 1,\n },\n ],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n retrieval: \"vector\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_NATIVE_PLANNER_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"adaptive_native_planner\",\n benchmarkScope: \"larger_corpus\",\n expectedSignals: [\n \"selected native planner profile\",\n \"candidate-budget exhaustion\",\n \"underfilled topk\",\n ],\n recommendedGroupKey: \"runtime-native-planner\",\n recommendedTags: [\"runtime\", \"native\", \"planner\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGAdaptiveNativePlannerBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite = input?.suite ?? createRAGAdaptiveNativePlannerBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"adaptive_native_planner_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGNativeBackendComparisonBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Captures larger-corpus native backend parity with filtered vector pressure and harder hybrid retrieval cases so sqlite-native and postgres runs can be compared over time.\",\n id: input?.id ?? DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-exact-phrase\",\n label: \"Exact phrase survives larger-corpus native pressure\",\n query: DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-hybrid-phrase\",\n label: \"Hybrid retrieval survives filtered lexical pressure\",\n query: DEFAULT_NATIVE_BACKEND_HYBRID_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-filtered-lane-query\",\n label: \"Filtered lane query survives broader corpus noise\",\n query: DEFAULT_NATIVE_BACKEND_FILTERED_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-reordered-phrase\",\n label: \"Reordered phrase survives transform pressure\",\n query: DEFAULT_NATIVE_BACKEND_REORDERED_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-guide-query\",\n label: \"Guide attribution survives filtered corpus pressure\",\n query: DEFAULT_NATIVE_BACKEND_GUIDE_QUERY,\n topK: input?.topK ?? 1,\n },\n ],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n retrieval: \"vector\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"native_backend_comparison\",\n benchmarkScope: \"larger_corpus\",\n expectedSignals: [\n \"backend-tagged runtime artifacts\",\n \"selected native planner profile\",\n \"hybrid filtered retrieval\",\n \"candidate-budget exhaustion\",\n \"underfilled topk\",\n \"query transform pressure\",\n ],\n recommendedGroupKey: \"runtime-native-backend-parity\",\n recommendedTags: [\"runtime\", \"backend\", \"native\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGNativeBackendComparisonBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite =\n input?.suite ?? createRAGNativeBackendComparisonBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"native_backend_comparison_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGPresentationCueBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Captures repeated-title presentation retrieval parity with explicit title-led, body-led, and notes-led slide cases so presentation cue weighting can be benchmarked over time.\",\n id: input?.id ?? DEFAULT_PRESENTATION_CUE_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"slide-title-doc\"],\n hardNegativeDocumentIds: [\"slide-body-doc\", \"slide-notes-doc\"],\n id: \"presentation-title-led\",\n label: \"Repeated-title deck selects title-led slide evidence\",\n query: \"Which presentation title covers the release handoff summary?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"slide-body-doc\"],\n hardNegativeDocumentIds: [\"slide-title-doc\", \"slide-notes-doc\"],\n id: \"presentation-body-led\",\n label: \"Repeated-title deck selects body-led slide evidence\",\n query: \"Which slide mentions escalation review in the body?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"slide-notes-doc\"],\n hardNegativeDocumentIds: [\"slide-title-doc\", \"slide-body-doc\"],\n id: \"presentation-notes-led\",\n label: \"Repeated-title deck selects notes-led slide evidence\",\n query: \"Which slide notes are the primary handoff evidence?\",\n topK: input?.topK ?? 1,\n },\n ],\n retrieval: \"hybrid\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_PRESENTATION_CUE_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"presentation_cue\",\n benchmarkScope: \"repeated_title_slides\",\n expectedSignals: [\n \"presentation title cue\",\n \"presentation body cue\",\n \"presentation notes cue\",\n ],\n recommendedGroupKey: \"presentation-cue-parity\",\n recommendedTags: [\"presentation\", \"cue\", \"slides\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGPresentationCueBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite = input?.suite ?? createRAGPresentationCueBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"presentation_cue_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGSpreadsheetCueBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Captures repeated spreadsheet-family retrieval parity with explicit sheet-led, table-led, and column-led workbook cases so spreadsheet cue weighting can be benchmarked over time.\",\n id: input?.id ?? DEFAULT_SPREADSHEET_CUE_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"sheet-led-doc\"],\n hardNegativeDocumentIds: [\"table-led-doc\", \"column-led-doc\"],\n id: \"spreadsheet-sheet-led\",\n label: \"Workbook selects sheet-led spreadsheet evidence\",\n query: \"Which spreadsheet sheet lists owner status and due date?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"table-led-doc\"],\n hardNegativeDocumentIds: [\"sheet-led-doc\", \"column-led-doc\"],\n id: \"spreadsheet-table-led\",\n label: \"Workbook selects table-led spreadsheet evidence\",\n query: \"Which spreadsheet table lists the escalation status rows?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"column-led-doc\"],\n hardNegativeDocumentIds: [\"sheet-led-doc\", \"table-led-doc\"],\n id: \"spreadsheet-column-led\",\n label: \"Workbook selects column-led spreadsheet evidence\",\n query: \"Which spreadsheet columns cover owner due date?\",\n topK: input?.topK ?? 1,\n },\n ],\n retrieval: \"hybrid\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_SPREADSHEET_CUE_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"spreadsheet_cue\",\n benchmarkScope: \"repeated_sheet_tables\",\n expectedSignals: [\n \"spreadsheet sheet cue\",\n \"spreadsheet table cue\",\n \"spreadsheet column cue\",\n ],\n recommendedGroupKey: \"spreadsheet-cue-parity\",\n recommendedTags: [\"spreadsheet\", \"cue\", \"workbook\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGSpreadsheetCueBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite = input?.suite ?? createRAGSpreadsheetCueBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"spreadsheet_cue_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGEvaluationSuiteSnapshot = ({\n suite,\n id,\n version = 1,\n createdAt = Date.now(),\n metadata,\n}: {\n suite: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n return {\n caseCount: normalizedSuite.input.cases.length,\n createdAt,\n id: id ?? `${normalizedSuite.id}:snapshot:${String(version)}`,\n label: normalizedSuite.label,\n description: normalizedSuite.description,\n metadata: metadata ? { ...metadata } : undefined,\n suite: normalizedSuite,\n suiteId: normalizedSuite.id,\n version,\n };\n};\n\nconst stableStringifyEvaluationCase = (entry: RAGEvaluationCase) =>\n JSON.stringify({\n ...entry,\n expectedChunkIds: entry.expectedChunkIds ?? [],\n expectedDocumentIds: entry.expectedDocumentIds ?? [],\n expectedSources: entry.expectedSources ?? [],\n goldenSet: entry.goldenSet === true,\n hardNegativeChunkIds: entry.hardNegativeChunkIds ?? [],\n hardNegativeDocumentIds: entry.hardNegativeDocumentIds ?? [],\n hardNegativeSources: entry.hardNegativeSources ?? [],\n filter: entry.filter ?? {},\n metadata: entry.metadata ?? {},\n retrieval: entry.retrieval ?? null,\n });\n\nexport const buildRAGEvaluationSuiteSnapshotDiff = ({\n current,\n previous,\n}: {\n current: RAGEvaluationSuiteSnapshot;\n previous?: RAGEvaluationSuiteSnapshot;\n}): RAGEvaluationSuiteSnapshotDiff => {\n const currentCases = current.suite.input.cases;\n const previousCases = previous?.suite.input.cases ?? [];\n const currentMap = new Map<string, RAGEvaluationCase>(\n currentCases.map((entry: RAGEvaluationCase) => [entry.id, entry]),\n );\n const previousMap = new Map<string, RAGEvaluationCase>(\n previousCases.map((entry: RAGEvaluationCase) => [entry.id, entry]),\n );\n const currentIds = currentCases.map((entry: RAGEvaluationCase) => entry.id);\n const previousIds = previousCases.map((entry: RAGEvaluationCase) => entry.id);\n\n const addedCaseIds = currentIds.filter((id: string) => !previousMap.has(id));\n const removedCaseIds = previousIds.filter(\n (id: string) => !currentMap.has(id),\n );\n const changedCaseIds = currentIds.filter((id: string) => {\n const currentCase = currentMap.get(id);\n const previousCase = previousMap.get(id);\n if (!currentCase || !previousCase) {\n return false;\n }\n return (\n stableStringifyEvaluationCase(currentCase) !==\n stableStringifyEvaluationCase(previousCase)\n );\n });\n const unchangedCaseIds = currentIds.filter((id: string) => {\n const currentCase = currentMap.get(id);\n const previousCase = previousMap.get(id);\n if (!currentCase || !previousCase) {\n return false;\n }\n return (\n stableStringifyEvaluationCase(currentCase) ===\n stableStringifyEvaluationCase(previousCase)\n );\n });\n const sharedIds = currentIds.filter((id: string) => previousMap.has(id));\n const orderChanged =\n sharedIds.length > 0 &&\n JSON.stringify(sharedIds) !==\n JSON.stringify(previousIds.filter((id: string) => currentMap.has(id)));\n\n return {\n addedCaseIds,\n caseCountDelta: current.caseCount - (previous?.caseCount ?? 0),\n changedCaseIds,\n currentSnapshotId: current.id,\n orderChanged,\n previousSnapshotId: previous?.id,\n removedCaseIds,\n suiteId: current.suiteId,\n unchangedCaseIds,\n };\n};\nexport const evaluateRAGCollection = async ({\n collection,\n input,\n defaultTopK = DEFAULT_TOP_K,\n rerank,\n}: {\n collection: RAGCollection;\n input: RAGEvaluationInput;\n defaultTopK?: number;\n rerank?: RAGRerankerProviderLike;\n}) => {\n const evaluated = await evaluateRAGCollectionCases({\n collection,\n defaultTopK,\n includeTrace: false,\n input,\n rerank,\n });\n\n return buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));\n};\nexport const executeDryRunRAGEvaluation = (\n input: RAGEvaluationInput,\n defaultTopK = DEFAULT_TOP_K,\n): RAGEvaluationCaseResult[] =>\n input.cases.map((caseInput, caseIndex) => {\n const mode = resolveEvaluationMode(caseInput);\n const expectedIds = normalizeExpectedIds(\n mode === \"chunkId\"\n ? (caseInput.expectedChunkIds ?? [])\n : mode === \"source\"\n ? (caseInput.expectedSources ?? [])\n : (caseInput.expectedDocumentIds ?? []),\n );\n const effectiveTopK =\n typeof caseInput.topK === \"number\"\n ? caseInput.topK\n : typeof input.topK === \"number\"\n ? input.topK\n : defaultTopK;\n\n return {\n caseId: caseInput.id ?? `case-${caseIndex + 1}`,\n elapsedMs: 0,\n expectedCount: expectedIds.length,\n expectedIds,\n failureClasses: classifyRAGEvaluationFailure({\n expectedCount: expectedIds.length,\n matchedCount: 0,\n missingIds: expectedIds,\n retrievedCount: 0,\n retrievedIds: [],\n }),\n f1: 0,\n label: caseInput.label,\n matchedCount: 0,\n matchedIds: [],\n missingIds: expectedIds,\n mode,\n precision: 0,\n query: caseInput.query,\n recall: 0,\n retrievedCount: 0,\n retrievedIds: [],\n status: expectedIds.length === 0 ? \"partial\" : \"fail\",\n topK: effectiveTopK,\n };\n });\nexport const runRAGEvaluationSuite = async ({\n suite,\n evaluate,\n overrides,\n artifacts,\n}: {\n suite: RAGEvaluationSuite;\n evaluate: (input: RAGEvaluationInput) => Promise<RAGEvaluationResponse>;\n overrides?: Partial<RAGEvaluationInput>;\n artifacts?: Pick<\n RAGEvaluationSuiteRun,\n \"traceSummary\" | \"caseTraceSnapshots\"\n >;\n}) => {\n const startedAt = Date.now();\n const response = await evaluate({\n ...suite.input,\n ...overrides,\n cases: overrides?.cases ?? suite.input.cases,\n });\n const finishedAt = Date.now();\n\n return {\n caseTraceSnapshots: artifacts?.caseTraceSnapshots,\n elapsedMs: finishedAt - startedAt,\n finishedAt,\n id: generateId(),\n label: suite.label ?? suite.id,\n metadata: suite.metadata,\n response,\n startedAt,\n suiteId: suite.id,\n traceSummary: artifacts?.traceSummary,\n } satisfies RAGEvaluationSuiteRun;\n};\nexport const summarizeRAGEvaluationCase = ({\n caseIndex,\n caseInput,\n query,\n mode,\n retrievedIds,\n expectedIds,\n elapsedMs,\n retrievedSources,\n trace,\n}: {\n caseIndex: number;\n caseInput: RAGEvaluationCase;\n mode: \"chunkId\" | \"source\" | \"documentId\";\n query: string;\n retrievedIds: string[];\n expectedIds: string[];\n elapsedMs: number;\n retrievedSources?: RAGSource[];\n trace?: RAGSearchTraceRecord | RAGRetrievalTrace;\n}): RAGEvaluationCaseResult => {\n const expectedSet = new Set(expectedIds);\n const retrievedSet = new Set(retrievedIds);\n const matchedIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => retrievedSet.has(id)),\n );\n const missingIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => !retrievedSet.has(id)),\n );\n const matchedCount = matchedIds.length;\n const retrievedCount = retrievedIds.length;\n const expectedCount = expectedIds.length;\n const precision = retrievedCount > 0 ? matchedCount / retrievedCount : 0;\n const recall = expectedCount > 0 ? matchedCount / expectedCount : 0;\n const f1 =\n precision + recall > 0\n ? (2 * precision * recall) / (precision + recall)\n : 0;\n const status: RAGEvaluationCaseResult[\"status\"] =\n expectedCount === 0\n ? \"partial\"\n : matchedCount === expectedCount\n ? \"pass\"\n : matchedCount > 0\n ? \"partial\"\n : \"fail\";\n\n return {\n caseId: caseInput.id ?? `case-${caseIndex + 1}`,\n corpusKey: caseInput.corpusKey,\n elapsedMs,\n expectedCount,\n expectedIds,\n failureClasses: classifyRAGEvaluationFailure({\n expectedCount,\n matchedCount,\n missingIds,\n retrievedCount,\n retrievedIds,\n retrievedSources,\n trace,\n }),\n f1,\n label: caseInput.label,\n matchedCount,\n matchedIds,\n metadata: caseInput.metadata,\n missingIds,\n mode,\n precision,\n query,\n recall,\n retrievedCount,\n retrievedIds,\n status,\n topK: typeof caseInput.topK === \"number\" ? caseInput.topK : DEFAULT_TOP_K,\n };\n};\nexport const summarizeRAGRerankerComparison = (\n entries: RAGRerankerComparisonEntry[],\n): RAGRerankerComparisonSummary => {\n return summarizeEvaluationResponseComparison(\n entries,\n \"rerankerId\",\n ) satisfies RAGRerankerComparisonSummary;\n};\nexport const summarizeRAGRetrievalComparison = (\n entries: RAGRetrievalComparisonEntry[],\n): RAGRetrievalComparisonSummary => ({\n ...summarizeEvaluationResponseComparison(entries, \"retrievalId\"),\n bestByPresentationTitleCueCases: selectComparisonEntryByPresentationCueCases(\n entries,\n \"retrievalId\",\n \"title\",\n ),\n bestByPresentationBodyCueCases: selectComparisonEntryByPresentationCueCases(\n entries,\n \"retrievalId\",\n \"body\",\n ),\n bestByPresentationNotesCueCases: selectComparisonEntryByPresentationCueCases(\n entries,\n \"retrievalId\",\n \"notes\",\n ),\n bestBySpreadsheetSheetCueCases: selectComparisonEntryBySpreadsheetCueCases(\n entries,\n \"retrievalId\",\n \"sheet\",\n ),\n bestBySpreadsheetTableCueCases: selectComparisonEntryBySpreadsheetCueCases(\n entries,\n \"retrievalId\",\n \"table\",\n ),\n bestBySpreadsheetColumnCueCases: selectComparisonEntryBySpreadsheetCueCases(\n entries,\n \"retrievalId\",\n \"column\",\n ),\n bestByMultivectorCollapsedCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"multiVectorCollapsedCases\",\n ),\n bestByMultivectorLexicalHitCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"multiVectorLexicalHitCases\",\n ),\n bestByMultivectorVectorHitCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"multiVectorVectorHitCases\",\n ),\n bestByEvidenceReconcileCases: selectComparisonEntryByTraceStageCount(\n entries,\n \"retrievalId\",\n \"evidence_reconcile\",\n ),\n bestByOfficeEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeEvidenceReconcileCases\",\n ),\n bestByOfficeParagraphEvidenceReconcileCases:\n selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeParagraphEvidenceReconcileCases\",\n ),\n bestByOfficeListEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeListEvidenceReconcileCases\",\n ),\n bestByOfficeTableEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeTableEvidenceReconcileCases\",\n ),\n bestByPDFEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"pdfEvidenceReconcileCases\",\n ),\n bestByLowestRuntimeCandidateBudgetExhaustedCases:\n selectComparisonEntryByLowestTraceMetric(\n entries,\n \"retrievalId\",\n \"runtimeCandidateBudgetExhaustedCases\",\n ),\n bestByLowestRuntimeUnderfilledTopKCases:\n selectComparisonEntryByLowestTraceMetric(\n entries,\n \"retrievalId\",\n \"runtimeUnderfilledTopKCases\",\n ),\n});\n",
6
6
  "import { open, rename, unlink } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\n// Atomic + durable write: write to tmp, fsync the tmp file, rename to dest, fsync\n// the parent dir. Survives both SIGTERM mid-write (rename atomicity) and power\n// loss / kernel panic after rename returns (dir fsync forces the rename onto disk).\nexport const writeFileAtomic = async (\n path: string,\n data: string,\n encoding: BufferEncoding = \"utf8\",\n): Promise<void> => {\n const tmpPath = `${path}.tmp.${process.pid}.${Math.random()\n .toString(36)\n .slice(2, 10)}`;\n const buffer = Buffer.from(data, encoding);\n let renamed = false;\n\n try {\n const fileHandle = await open(tmpPath, \"w\");\n try {\n await fileHandle.writeFile(buffer);\n await fileHandle.sync();\n } finally {\n await fileHandle.close();\n }\n\n await rename(tmpPath, path);\n renamed = true;\n\n // Best-effort directory fsync. Windows cannot open a directory as a file,\n // and some filesystems silently ignore it; treat any failure as non-fatal.\n try {\n const dirHandle = await open(dirname(path), \"r\");\n try {\n await dirHandle.sync();\n } finally {\n await dirHandle.close();\n }\n } catch {\n // intentionally ignored\n }\n } catch (error) {\n if (!renamed) {\n try {\n await unlink(tmpPath);\n } catch {\n // tmp may not exist if open/write failed before creating it\n }\n }\n throw error;\n }\n};\n",
7
7
  "import type {\n RAGCitation,\n RAGCitationReferenceMap,\n RAGExcerptModeCounts,\n RAGGroundedAnswer,\n RAGGroundedAnswerCitationDetail,\n RAGGroundedAnswerSectionSummary,\n RAGGroundingReference,\n RAGSource,\n} from \"@absolutejs/ai\";\n\nconst getContextString = (value: unknown) =>\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n\nconst getContextNumber = (value: unknown) =>\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n\nconst getAttachmentName = (source?: string, title?: string) => {\n const sourceAttachment = source?.split(\"/\").at(-1);\n if (sourceAttachment && sourceAttachment.includes(\".\")) {\n return sourceAttachment;\n }\n\n const titleAttachment = title?.split(\" · \").at(-1);\n if (titleAttachment && titleAttachment.includes(\".\")) {\n return titleAttachment;\n }\n\n return undefined;\n};\n\nconst buildContextLabel = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const emailKind = getContextString(metadata.emailKind);\n const officeBlockKindValue = getContextString(metadata.officeBlockKind);\n const officeBlockKind =\n officeBlockKindValue === \"table\" ||\n officeBlockKindValue === \"list\" ||\n officeBlockKindValue === \"paragraph\"\n ? officeBlockKindValue\n : undefined;\n if (emailKind === \"attachment\") {\n return \"Attachment evidence\";\n }\n\n if (emailKind === \"message\") {\n const from = getContextString(metadata.from);\n return from ? `Message from ${from}` : \"Message evidence\";\n }\n\n const page =\n getContextNumber(metadata.page) ??\n getContextNumber(metadata.pageNumber) ??\n (typeof metadata.pageIndex === \"number\"\n ? metadata.pageIndex + 1\n : undefined);\n const region =\n getContextNumber(metadata.regionNumber) ??\n (typeof metadata.regionIndex === \"number\"\n ? metadata.regionIndex + 1\n : undefined);\n if (page && region) {\n return `Page ${page} region ${region}`;\n }\n if (page) {\n return `Page ${page}`;\n }\n\n const sheet =\n getContextString(metadata.sheetName) ??\n (Array.isArray(metadata.sheetNames)\n ? getContextString(metadata.sheetNames[0])\n : undefined);\n if (sheet) {\n return `Sheet ${sheet}`;\n }\n\n const slide =\n getContextNumber(metadata.slide) ??\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n const slideTitle = getContextString(metadata.slideTitle);\n if (slide) {\n return slideTitle ? `Slide ${slide} · ${slideTitle}` : `Slide ${slide}`;\n }\n\n const archiveEntry =\n getContextString(metadata.archiveEntryPath) ??\n getContextString(metadata.entryPath);\n if (archiveEntry) {\n return `Archive entry ${archiveEntry}`;\n }\n\n const threadTopic = getContextString(metadata.threadTopic);\n if (threadTopic) {\n return `Thread ${threadTopic}`;\n }\n\n const speaker = getContextString(metadata.speaker);\n if (speaker) {\n return `Speaker ${speaker}`;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const officeSectionLabel =\n sectionPath.length > 0 ? sectionPath.join(\" > \") : sectionTitle;\n if (officeBlockKind === \"table\" && officeSectionLabel) {\n return `Office table block ${officeSectionLabel}`;\n }\n if (officeBlockKind === \"list\" && officeSectionLabel) {\n return `Office list block ${officeSectionLabel}`;\n }\n if (officeBlockKind === \"paragraph\" && officeSectionLabel) {\n return `Office paragraph block ${officeSectionLabel}`;\n }\n if (sectionTitle) {\n return `Section ${sectionTitle}`;\n }\n\n return undefined;\n};\n\nconst formatMediaTimestamp = (value: unknown) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n\n const totalSeconds = Math.floor(value / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const milliseconds = Math.floor(value % 1000);\n\n return `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(\n 2,\n \"0\",\n )}.${String(milliseconds).padStart(3, \"0\")}`;\n};\n\nconst formatMediaDurationLabel = (value: unknown) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n\n return formatMediaTimestamp(value);\n};\n\nconst formatOfficeListLevelsLabel = (value: unknown) => {\n if (!Array.isArray(value) || value.length === 0) {\n return undefined;\n }\n\n const levels = value\n .map((entry) => getContextNumber(entry))\n .filter((entry): entry is number => typeof entry === \"number\")\n .sort((left, right) => left - right);\n\n if (levels.length === 0) {\n return undefined;\n }\n\n const minLevel = levels[0];\n const maxLevel = levels[levels.length - 1];\n\n return minLevel === maxLevel\n ? `Office list level ${minLevel}`\n : `Office list levels ${minLevel}-${maxLevel}`;\n};\n\ntype OfficeCitationScope = {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n};\n\ntype GenericStructuredCitationScope = {\n familyPath: string[];\n kind: \"presentation_slide\" | \"spreadsheet_rows\";\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n};\n\nconst getOfficeTableCitationScope = (\n metadata?: Record<string, unknown>,\n): OfficeCitationScope | undefined => {\n if (!metadata) {\n return undefined;\n }\n\n const officeBlockKindValue = getContextString(metadata.officeBlockKind);\n const officeBlockKind =\n officeBlockKindValue === \"table\" ||\n officeBlockKindValue === \"list\" ||\n officeBlockKindValue === \"paragraph\"\n ? officeBlockKindValue\n : undefined;\n if (\n officeBlockKind !== \"table\" &&\n officeBlockKind !== \"list\" &&\n officeBlockKind !== \"paragraph\"\n ) {\n return undefined;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const officeContextText =\n officeBlockKind === \"table\"\n ? getContextString(metadata.officeTableContextText)\n : officeBlockKind === \"list\"\n ? getContextString(metadata.officeListContextText)\n : undefined;\n\n if (!sectionTitle) {\n return undefined;\n }\n\n return {\n blockKind: officeBlockKind,\n familyPath: (() => {\n const explicitGenericFamilyPath = Array.isArray(\n metadata.sectionFamilyPath,\n )\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitGenericOrdinalPath = Array.isArray(\n metadata.sectionOrdinalPath,\n )\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n if (\n explicitGenericFamilyPath.length > 0 &&\n explicitGenericFamilyPath.length === explicitGenericOrdinalPath.length\n ) {\n return explicitGenericFamilyPath;\n }\n\n const explicitOfficeFamilyPath = Array.isArray(metadata.officeFamilyPath)\n ? metadata.officeFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n return explicitOfficeFamilyPath.length > 0\n ? explicitOfficeFamilyPath\n : sectionPath.map((value) => value.replace(/\\s+\\((\\d+)\\)$/, \"\").trim());\n })(),\n pathDepth: sectionPath.length,\n ordinalPath: (() => {\n const explicitGenericFamilyPath = Array.isArray(\n metadata.sectionFamilyPath,\n )\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitGenericOrdinalPath = Array.isArray(\n metadata.sectionOrdinalPath,\n )\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n if (\n explicitGenericFamilyPath.length > 0 &&\n explicitGenericFamilyPath.length === explicitGenericOrdinalPath.length\n ) {\n return explicitGenericOrdinalPath;\n }\n\n const explicitOfficeOrdinalPath = Array.isArray(\n metadata.officeOrdinalPath,\n )\n ? metadata.officeOrdinalPath\n .map((value) =>\n typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined,\n )\n .filter((value): value is number => typeof value === \"number\")\n : [];\n return explicitOfficeOrdinalPath.length > 0\n ? explicitOfficeOrdinalPath\n : sectionPath.map((value) => {\n const match = value.match(/\\((\\d+)\\)$/);\n return match ? Number.parseInt(match[1] ?? \"1\", 10) : 1;\n });\n })(),\n sectionFamilyKey:\n getContextString(metadata.sectionSiblingFamilyKey) ??\n getContextString(metadata.officeSiblingFamilyKey) ??\n sectionPath\n .at(-1)\n ?.replace(/\\s+\\((\\d+)\\)$/, \"\")\n .trim() ??\n sectionTitle,\n sectionOrdinal:\n getContextNumber(metadata.sectionSiblingOrdinal) ??\n getContextNumber(metadata.officeSiblingOrdinal) ??\n (() => {\n const match = sectionTitle.match(/\\((\\d+)\\)$/);\n return match ? Number.parseInt(match[1] ?? \"1\", 10) : 1;\n })(),\n sectionTitle,\n hasContext: typeof officeContextText === \"string\",\n };\n};\n\nconst areOfficeCitationScopesComparable = (\n left:\n | {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n }\n | undefined,\n right:\n | {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n }\n | undefined,\n) => {\n if (!left || !right) {\n return false;\n }\n if (\n left.blockKind !== right.blockKind ||\n left.sectionFamilyKey !== right.sectionFamilyKey ||\n left.sectionOrdinal !== right.sectionOrdinal\n ) {\n return false;\n }\n const leftAncestorFamilyPath = left.familyPath.slice(0, -1);\n const rightAncestorFamilyPath = right.familyPath.slice(0, -1);\n const leftAncestorOrdinalPath = left.ordinalPath.slice(0, -1);\n const rightAncestorOrdinalPath = right.ordinalPath.slice(0, -1);\n const sharedDepth = Math.min(\n leftAncestorFamilyPath.length,\n rightAncestorFamilyPath.length,\n );\n for (let index = 0; index < sharedDepth; index += 1) {\n if (\n leftAncestorFamilyPath[index] !== rightAncestorFamilyPath[index] ||\n leftAncestorOrdinalPath[index] !== rightAncestorOrdinalPath[index]\n ) {\n return false;\n }\n }\n return true;\n};\n\nconst getGenericStructuredCitationScope = (\n metadata?: Record<string, unknown>,\n): GenericStructuredCitationScope | undefined => {\n if (!metadata || metadata.officeBlockKind || metadata.pageNumber) {\n return undefined;\n }\n\n const kind =\n metadata.sectionKind === \"spreadsheet_rows\" ||\n metadata.sectionKind === \"presentation_slide\"\n ? metadata.sectionKind\n : undefined;\n if (!kind) {\n return undefined;\n }\n\n const explicitFamilyPath = Array.isArray(metadata.sectionFamilyPath)\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitOrdinalPath = Array.isArray(metadata.sectionOrdinalPath)\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n let familyPath =\n explicitFamilyPath.length > 0 &&\n explicitFamilyPath.length === explicitOrdinalPath.length\n ? explicitFamilyPath\n : [];\n let ordinalPath =\n explicitFamilyPath.length > 0 &&\n explicitFamilyPath.length === explicitOrdinalPath.length\n ? explicitOrdinalPath\n : [];\n\n if (familyPath.length === 0) {\n if (kind === \"spreadsheet_rows\") {\n const sheetName = getContextString(metadata.sheetName) ?? \"Sheet\";\n const tableIndex = getContextNumber(metadata.spreadsheetTableIndex) ?? 1;\n familyPath = [sheetName, \"Spreadsheet Table\"];\n ordinalPath = [1, tableIndex];\n } else {\n const slideFamily = getContextString(metadata.slideTitle) ?? \"Slide\";\n const slideOrdinal =\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\" ? metadata.slideIndex + 1 : 1);\n familyPath = [slideFamily];\n ordinalPath = [slideOrdinal];\n }\n }\n\n const sectionFamilyKey =\n getContextString(metadata.sectionSiblingFamilyKey) ?? familyPath.at(-1);\n const sectionOrdinal =\n getContextNumber(metadata.sectionSiblingOrdinal) ?? ordinalPath.at(-1);\n if (!sectionFamilyKey || typeof sectionOrdinal !== \"number\") {\n return undefined;\n }\n\n return {\n familyPath,\n kind,\n ordinalPath,\n pathDepth: familyPath.length,\n sectionFamilyKey,\n sectionOrdinal,\n };\n};\n\nconst areGenericStructuredCitationScopesComparable = (\n left: GenericStructuredCitationScope | undefined,\n right: GenericStructuredCitationScope | undefined,\n) => {\n if (!left || !right) {\n return false;\n }\n if (\n left.kind !== right.kind ||\n left.sectionFamilyKey !== right.sectionFamilyKey ||\n left.sectionOrdinal !== right.sectionOrdinal\n ) {\n return false;\n }\n const leftAncestorFamilyPath = left.familyPath.slice(0, -1);\n const rightAncestorFamilyPath = right.familyPath.slice(0, -1);\n const leftAncestorOrdinalPath = left.ordinalPath.slice(0, -1);\n const rightAncestorOrdinalPath = right.ordinalPath.slice(0, -1);\n const sharedDepth = Math.min(\n leftAncestorFamilyPath.length,\n rightAncestorFamilyPath.length,\n );\n for (let index = 0; index < sharedDepth; index += 1) {\n if (\n leftAncestorFamilyPath[index] !== rightAncestorFamilyPath[index] ||\n leftAncestorOrdinalPath[index] !== rightAncestorOrdinalPath[index]\n ) {\n return false;\n }\n }\n return true;\n};\n\nconst getOfficeTableCitationPreference = (\n metadata?: Record<string, unknown>,\n) => {\n const scope = getOfficeTableCitationScope(metadata);\n if (!scope) {\n return 0;\n }\n\n return (\n scope.pathDepth * 10 +\n (scope.hasContext ? 1 : 0) +\n (scope.blockKind === \"list\" &&\n typeof metadata?.officeListGroupItemCount === \"number\" &&\n metadata.officeListGroupItemCount > 1\n ? 1\n : 0)\n );\n};\n\nconst getGenericStructuredCitationPreference = (\n metadata?: Record<string, unknown>,\n) => {\n const scope = getGenericStructuredCitationScope(metadata);\n if (!scope) {\n return 0;\n }\n\n return (\n scope.pathDepth * 10 +\n (scope.kind === \"spreadsheet_rows\" &&\n typeof metadata?.spreadsheetTableIndex === \"number\"\n ? 2\n : 0) +\n (Array.isArray(metadata?.spreadsheetHeaders) &&\n metadata.spreadsheetHeaders.length > 0\n ? 1\n : 0) +\n (typeof metadata?.slideNotesText === \"string\" &&\n metadata.slideNotesText.trim().length > 0\n ? 1\n : 0)\n );\n};\n\nconst buildLocatorLabel = (\n metadata?: Record<string, unknown>,\n source?: string,\n title?: string,\n) => {\n if (!metadata) {\n return undefined;\n }\n\n const page =\n getContextNumber(metadata.page) ??\n getContextNumber(metadata.pageNumber) ??\n (typeof metadata.pageIndex === \"number\"\n ? metadata.pageIndex + 1\n : undefined);\n const region =\n getContextNumber(metadata.regionNumber) ??\n (typeof metadata.regionIndex === \"number\"\n ? metadata.regionIndex + 1\n : undefined);\n if (page && region) {\n return `Page ${page} · Region ${region}`;\n }\n if (page) {\n return `Page ${page}`;\n }\n\n const sheet =\n getContextString(metadata.sheetName) ??\n (Array.isArray(metadata.sheetNames)\n ? getContextString(metadata.sheetNames[0])\n : undefined);\n if (sheet) {\n return `Sheet ${sheet}`;\n }\n\n const slide =\n getContextNumber(metadata.slide) ??\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n const slideTitle = getContextString(metadata.slideTitle);\n if (slide) {\n return slideTitle ? `Slide ${slide} · ${slideTitle}` : `Slide ${slide}`;\n }\n\n const archiveEntry =\n getContextString(metadata.archiveEntryPath) ??\n getContextString(metadata.entryPath);\n if (archiveEntry) {\n return `Archive entry ${archiveEntry}`;\n }\n\n const emailKind = getContextString(metadata.emailKind);\n const officeBlockKind = getContextString(metadata.officeBlockKind);\n const officeBlockNumber = getContextNumber(metadata.officeBlockNumber);\n const officeTableBodyRowStart = getContextNumber(\n metadata.officeTableBodyRowStart,\n );\n const officeTableBodyRowEnd = getContextNumber(\n metadata.officeTableBodyRowEnd,\n );\n if (emailKind === \"attachment\") {\n const attachmentName =\n getContextString(metadata.attachmentName) ??\n getAttachmentName(source, title);\n return attachmentName ? `Attachment ${attachmentName}` : \"Attachment\";\n }\n\n const mediaStart = formatMediaTimestamp(metadata.startMs);\n const mediaEnd = formatMediaTimestamp(metadata.endMs);\n if (mediaStart && mediaEnd) {\n return `Timestamp ${mediaStart} - ${mediaEnd}`;\n }\n\n if (mediaStart) {\n return `Timestamp ${mediaStart}`;\n }\n\n if (officeBlockNumber && officeBlockKind === \"table\") {\n if (\n typeof officeTableBodyRowStart === \"number\" &&\n typeof officeTableBodyRowEnd === \"number\"\n ) {\n return officeTableBodyRowStart === officeTableBodyRowEnd\n ? `Office table block ${officeBlockNumber} · Row ${officeTableBodyRowStart}`\n : `Office table block ${officeBlockNumber} · Rows ${officeTableBodyRowStart}-${officeTableBodyRowEnd}`;\n }\n return `Office table block ${officeBlockNumber}`;\n }\n if (officeBlockNumber && officeBlockKind === \"list\") {\n return `Office list block ${officeBlockNumber}`;\n }\n if (officeBlockNumber && officeBlockKind === \"paragraph\") {\n return `Office paragraph block ${officeBlockNumber}`;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n if (sectionPath.length > 0) {\n return `Section ${sectionPath.join(\" > \")}`;\n }\n\n return undefined;\n};\n\nconst formatTimestampLabel = (value: unknown) => {\n const timestamp =\n typeof value === \"number\" && Number.isFinite(value)\n ? value\n : typeof value === \"string\"\n ? Date.parse(value)\n : Number.NaN;\n if (!Number.isFinite(timestamp)) {\n return undefined;\n }\n\n return new Date(timestamp).toLocaleString(\"en-US\", {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n });\n};\n\nconst buildProvenanceLabel = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const threadTopic = getContextString(metadata.threadTopic);\n const from = getContextString(metadata.from);\n const sentAt =\n formatTimestampLabel(metadata.sentAt) ??\n formatTimestampLabel(metadata.receivedAt);\n const speaker = getContextString(metadata.speaker);\n const mediaKind = getContextString(metadata.mediaKind);\n const mediaSegmentCount = getContextNumber(metadata.mediaSegmentCount);\n const mediaSegmentGroupSize = getContextNumber(\n metadata.mediaSegmentGroupSize,\n );\n const mediaSegmentGroupIndex = getContextNumber(\n metadata.mediaSegmentGroupIndex,\n );\n const mediaChannel = getContextString(metadata.mediaChannel);\n const mediaSpeakerCount = getContextNumber(metadata.mediaSpeakerCount);\n const mediaDurationLabel = formatMediaDurationLabel(metadata.mediaDurationMs);\n const transcriptSource = getContextString(metadata.transcriptSource);\n const pdfTextMode = getContextString(metadata.pdfTextMode);\n const officeBlockKind = getContextString(metadata.officeBlockKind);\n const officeListContextText = getContextString(\n metadata.officeListContextText,\n );\n const officeListGroupItemCount = getContextNumber(\n metadata.officeListGroupItemCount,\n );\n const officeListLevelsLabel = formatOfficeListLevelsLabel(\n metadata.officeListLevels,\n );\n const officeTableHeaders = Array.isArray(metadata.officeTableHeaders)\n ? metadata.officeTableHeaders\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const officeTableColumnCount = getContextNumber(\n metadata.officeTableColumnCount,\n );\n const officeTableBodyRowCount = getContextNumber(\n metadata.officeTableBodyRowCount,\n );\n const officeTableBodyRowStart = getContextNumber(\n metadata.officeTableBodyRowStart,\n );\n const officeTableBodyRowEnd = getContextNumber(\n metadata.officeTableBodyRowEnd,\n );\n const officeTableContextText = getContextString(\n metadata.officeTableContextText,\n );\n const officeTableFollowUpText = getContextString(\n metadata.officeTableFollowUpText,\n );\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const ocrEngine = getContextString(metadata.ocrEngine);\n const ocrConfidence =\n getContextNumber(metadata.ocrRegionConfidence) ??\n getContextNumber(metadata.ocrConfidence);\n\n const labels = [\n pdfTextMode ? `PDF ${pdfTextMode}` : \"\",\n officeBlockKind ? `Office ${officeBlockKind}` : \"\",\n typeof officeListGroupItemCount === \"number\"\n ? `Office list ${officeListGroupItemCount} items`\n : \"\",\n officeListLevelsLabel ?? \"\",\n sectionPath.length > 0 && officeBlockKind\n ? `Source-aware office ${officeBlockKind} block ${sectionPath.join(\" > \")}`\n : \"\",\n officeListContextText ? `Office list context ${officeListContextText}` : \"\",\n officeTableHeaders.length > 0\n ? `Office table ${officeTableHeaders.join(\", \")}`\n : \"\",\n typeof officeTableColumnCount === \"number\"\n ? `Office table ${officeTableColumnCount} cols`\n : \"\",\n typeof officeTableBodyRowCount === \"number\"\n ? `Office table ${officeTableBodyRowCount} body rows`\n : \"\",\n typeof officeTableBodyRowStart === \"number\" &&\n typeof officeTableBodyRowEnd === \"number\"\n ? officeTableBodyRowStart === officeTableBodyRowEnd\n ? `Office table row ${officeTableBodyRowStart}`\n : `Office table rows ${officeTableBodyRowStart}-${officeTableBodyRowEnd}`\n : \"\",\n officeTableContextText\n ? `Office table context ${officeTableContextText}`\n : \"\",\n officeTableFollowUpText\n ? `Office table follow-up ${officeTableFollowUpText}`\n : \"\",\n ocrEngine ? `OCR ${ocrEngine}` : \"\",\n typeof ocrConfidence === \"number\"\n ? `Confidence ${ocrConfidence.toFixed(2)}`\n : \"\",\n mediaKind ? `Media ${mediaKind}` : \"\",\n mediaSegmentCount ? `${mediaSegmentCount} segments` : \"\",\n mediaSegmentGroupSize ? `${mediaSegmentGroupSize} grouped segments` : \"\",\n mediaSegmentGroupIndex !== undefined\n ? `Segment group ${mediaSegmentGroupIndex + 1}`\n : \"\",\n mediaChannel ? `Channel ${mediaChannel}` : \"\",\n mediaSpeakerCount ? `${mediaSpeakerCount} speakers` : \"\",\n mediaDurationLabel ? `Duration ${mediaDurationLabel}` : \"\",\n transcriptSource ? `Transcript ${transcriptSource}` : \"\",\n threadTopic ? `Thread ${threadTopic}` : \"\",\n speaker ? `Speaker ${speaker}` : \"\",\n from ? `Sender ${from}` : \"\",\n sentAt ? `Sent ${sentAt}` : \"\",\n ].filter((value) => value.length > 0);\n\n return labels.length > 0 ? labels.join(\" · \") : undefined;\n};\n\nconst buildSourceLabel = (source: RAGSource) =>\n source.source ?? source.title ?? source.chunkId;\n\nconst buildExcerpt = (text: string, maxLength = 160) => {\n const normalized = text.replaceAll(/\\s+/g, \" \").trim();\n if (normalized.length <= maxLength) {\n return normalized;\n }\n\n return `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;\n};\n\nconst selectPreferredExcerpt = (\n excerpts?: {\n chunkExcerpt?: string;\n windowExcerpt?: string;\n sectionExcerpt?: string;\n },\n sectionChunkCount?: number,\n) => {\n if (!excerpts) {\n return {\n excerpt: \"\",\n mode: \"chunk\" as const,\n reason: \"single_chunk\" as const,\n };\n }\n\n const chunkExcerpt = excerpts.chunkExcerpt?.trim() ?? \"\";\n const windowExcerpt = excerpts.windowExcerpt?.trim() ?? \"\";\n const sectionExcerpt = excerpts.sectionExcerpt?.trim() ?? \"\";\n if (\n sectionChunkCount &&\n sectionChunkCount > 1 &&\n chunkExcerpt.length > 0 &&\n chunkExcerpt.length < 72\n ) {\n if (sectionChunkCount <= 3 && sectionExcerpt) {\n return {\n excerpt: sectionExcerpt,\n mode: \"section\" as const,\n reason: \"section_small_enough\" as const,\n };\n }\n if (windowExcerpt) {\n return {\n excerpt: windowExcerpt,\n mode: \"window\" as const,\n reason: \"section_too_large_use_window\" as const,\n };\n }\n\n return {\n excerpt: chunkExcerpt,\n mode: \"chunk\" as const,\n reason: \"chunk_too_narrow\" as const,\n };\n }\n\n return {\n excerpt: chunkExcerpt || windowExcerpt || sectionExcerpt,\n mode: \"chunk\" as const,\n reason:\n (sectionChunkCount ?? 0) > 1\n ? (\"chunk_too_narrow\" as const)\n : (\"single_chunk\" as const),\n };\n};\n\nconst buildExcerptModeCounts = (\n references: Array<\n { excerptSelection?: { mode: \"chunk\" | \"window\" | \"section\" } } | undefined\n >,\n): RAGExcerptModeCounts =>\n references.reduce<RAGExcerptModeCounts>(\n (counts, reference) => {\n if (reference?.excerptSelection) {\n counts[reference.excerptSelection.mode] += 1;\n }\n return counts;\n },\n { chunk: 0, section: 0, window: 0 },\n );\n\nconst buildGroundingChunkExcerpts = (\n sources: RAGSource[],\n activeChunkId?: string,\n) => {\n if (sources.length === 0) {\n return undefined;\n }\n\n const activeSource =\n (activeChunkId\n ? sources.find((source) => source.chunkId === activeChunkId)\n : undefined) ?? sources[0];\n if (!activeSource) {\n return undefined;\n }\n\n const chunkMap = new Map(sources.map((source) => [source.chunkId, source]));\n const activeMetadata = activeSource.metadata ?? {};\n const previousChunkId = getContextString(activeMetadata.previousChunkId);\n const nextChunkId = getContextString(activeMetadata.nextChunkId);\n const sectionChunkId = getContextString(activeMetadata.sectionChunkId);\n const sectionSources = sectionChunkId\n ? sources\n .filter(\n (source) =>\n getContextString(source.metadata?.sectionChunkId) ===\n sectionChunkId,\n )\n .sort((left, right) => {\n const leftIndex =\n getContextNumber(left.metadata?.sectionChunkIndex) ??\n Number.MAX_SAFE_INTEGER;\n const rightIndex =\n getContextNumber(right.metadata?.sectionChunkIndex) ??\n Number.MAX_SAFE_INTEGER;\n if (leftIndex !== rightIndex) {\n return leftIndex - rightIndex;\n }\n return left.chunkId.localeCompare(right.chunkId);\n })\n : [activeSource];\n const collectText = (chunkIds: string[]) =>\n chunkIds\n .map((chunkId) => chunkMap.get(chunkId)?.text)\n .filter((text): text is string => typeof text === \"string\")\n .join(\"\\n\\n\");\n const orderedWindowIds = [\n previousChunkId,\n activeSource.chunkId,\n nextChunkId,\n ].filter(\n (chunkId, index, values): chunkId is string =>\n Boolean(chunkId) && values.indexOf(chunkId) === index,\n );\n\n return {\n chunkExcerpt: buildExcerpt(activeSource.text, 160),\n sectionExcerpt: buildExcerpt(\n sectionSources.map((source) => source.text).join(\"\\n\\n\"),\n 320,\n ),\n windowExcerpt: buildExcerpt(collectText(orderedWindowIds), 240),\n };\n};\n\nconst buildGroundingReferenceEvidenceLabel = (\n reference: RAGGroundingReference,\n) =>\n [reference.label, reference.locatorLabel, reference.contextLabel]\n .filter((value): value is string => Boolean(value && value.length > 0))\n .filter(\n (value, index, values) =>\n values.findIndex((entry) => entry === value) === index,\n )\n .join(\" · \");\n\nconst buildGroundingReferenceEvidenceSummary = (\n reference: RAGGroundingReference,\n) =>\n [\n reference.source ?? reference.title ?? reference.chunkId,\n reference.locatorLabel,\n reference.contextLabel,\n reference.provenanceLabel,\n ]\n .filter((value): value is string => Boolean(value && value.length > 0))\n .filter(\n (value, index, values) =>\n values.findIndex((entry) => entry === value) === index,\n )\n .join(\" · \");\n\nconst buildGroundingSectionKey = (reference: RAGGroundingReference) =>\n reference.contextLabel ??\n reference.locatorLabel ??\n reference.label ??\n reference.source ??\n reference.chunkId;\n\nconst buildGroundingSectionSummaryLine = (reference: RAGGroundingReference) =>\n [\n reference.source ?? reference.title ?? reference.chunkId,\n reference.locatorLabel,\n reference.contextLabel,\n reference.provenanceLabel,\n ]\n .filter((value): value is string => Boolean(value && value.length > 0))\n .filter(\n (value, index, values) =>\n values.findIndex((entry) => entry === value) === index,\n )\n .join(\" · \");\n\nconst buildGroundedAnswerCitationDetail = (\n reference: RAGGroundingReference,\n): RAGGroundedAnswerCitationDetail => ({\n contextLabel: reference.contextLabel,\n evidenceLabel: buildGroundingReferenceEvidenceLabel(reference),\n evidenceSummary: buildGroundingReferenceEvidenceSummary(reference),\n excerpt:\n selectPreferredExcerpt(\n reference.excerpts,\n getContextNumber(reference.metadata?.sectionChunkCount),\n ).excerpt || reference.excerpt,\n excerpts: reference.excerpts,\n excerptSelection: reference.excerptSelection,\n label: reference.label,\n locatorLabel: reference.locatorLabel,\n number: reference.number,\n provenanceLabel: reference.provenanceLabel,\n source: reference.source,\n title: reference.title,\n});\n\nexport const buildRAGCitationReferenceMap = (\n citations: RAGCitation[],\n): RAGCitationReferenceMap =>\n Object.fromEntries(\n citations.map((citation, index) => [citation.chunkId, index + 1]),\n );\n\nexport const buildRAGCitations = (sources: RAGSource[]) => {\n const unique = new Map<string, RAGCitation>();\n\n for (const source of sources) {\n const key = source.chunkId;\n const existing = unique.get(key);\n const hasBetterExisting =\n existing !== undefined && existing.score >= source.score;\n if (hasBetterExisting) continue;\n const excerpts = buildGroundingChunkExcerpts(sources, source.chunkId);\n const excerptSelection = selectPreferredExcerpt(\n excerpts,\n getContextNumber(source.metadata?.sectionChunkCount),\n );\n\n unique.set(key, {\n chunkId: source.chunkId,\n contextLabel:\n source.labels?.contextLabel ?? buildContextLabel(source.metadata),\n excerpt: excerptSelection.excerpt || buildExcerpt(source.text),\n excerpts,\n excerptSelection,\n key,\n label: buildSourceLabel(source),\n locatorLabel:\n source.labels?.locatorLabel ??\n buildLocatorLabel(source.metadata, source.source, source.title),\n metadata: source.metadata,\n provenanceLabel:\n source.labels?.provenanceLabel ?? buildProvenanceLabel(source.metadata),\n score: source.score,\n source: source.source,\n text: source.text,\n title: source.title,\n });\n }\n\n return [...unique.values()].sort((left, right) => {\n const leftOfficeScope = getOfficeTableCitationScope(left.metadata);\n const rightOfficeScope = getOfficeTableCitationScope(right.metadata);\n if (\n left.source === right.source &&\n areOfficeCitationScopesComparable(leftOfficeScope, rightOfficeScope)\n ) {\n const leftOfficePreference = getOfficeTableCitationPreference(\n left.metadata,\n );\n const rightOfficePreference = getOfficeTableCitationPreference(\n right.metadata,\n );\n if (rightOfficePreference !== leftOfficePreference) {\n return rightOfficePreference - leftOfficePreference;\n }\n }\n const leftGenericScope = getGenericStructuredCitationScope(left.metadata);\n const rightGenericScope = getGenericStructuredCitationScope(right.metadata);\n if (\n left.source === right.source &&\n areGenericStructuredCitationScopesComparable(\n leftGenericScope,\n rightGenericScope,\n )\n ) {\n const leftGenericPreference = getGenericStructuredCitationPreference(\n left.metadata,\n );\n const rightGenericPreference = getGenericStructuredCitationPreference(\n right.metadata,\n );\n if (rightGenericPreference !== leftGenericPreference) {\n return rightGenericPreference - leftGenericPreference;\n }\n }\n if (right.score !== left.score) {\n return right.score - left.score;\n }\n\n return left.label.localeCompare(right.label);\n });\n};\n\nexport const buildRAGGroundedAnswer = (\n content: string,\n sources: RAGSource[],\n): RAGGroundedAnswer => {\n const references = buildRAGGroundingReferences(sources);\n const sectionSummaries = buildRAGGroundedAnswerSectionSummaries(references);\n const referenceMap = new Map(\n references.map((reference) => [reference.number, reference]),\n );\n const parts: RAGGroundedAnswer[\"parts\"] = [];\n const ungroundedReferenceNumbers = new Set<number>();\n const citationPattern = /\\[(\\d+(?:\\s*,\\s*\\d+)*)\\]/g;\n let cursor = 0;\n\n for (const match of content.matchAll(citationPattern)) {\n const raw = match[0];\n const numbers = (match[1] ?? \"\")\n .split(\",\")\n .map((value) => Number.parseInt(value.trim(), 10))\n .filter((value) => Number.isInteger(value) && value > 0);\n const start = match.index ?? cursor;\n if (start > cursor) {\n parts.push({\n text: content.slice(cursor, start),\n type: \"text\",\n });\n }\n\n const resolvedReferences = numbers\n .map((number) => referenceMap.get(number))\n .filter((reference): reference is RAGGroundingReference =>\n Boolean(reference),\n );\n for (const number of numbers) {\n if (!referenceMap.has(number)) {\n ungroundedReferenceNumbers.add(number);\n }\n }\n const unresolvedNumbers = numbers.filter(\n (number) => !referenceMap.has(number),\n );\n\n parts.push({\n referenceNumbers: numbers,\n referenceDetails: resolvedReferences.map(\n buildGroundedAnswerCitationDetail,\n ),\n references: resolvedReferences,\n text: raw,\n type: \"citation\",\n unresolvedReferenceNumbers: unresolvedNumbers,\n });\n cursor = start + raw.length;\n }\n\n if (cursor < content.length || parts.length === 0) {\n parts.push({\n text: content.slice(cursor),\n type: \"text\",\n });\n }\n\n const hasCitations = parts.some((part) => part.type === \"citation\");\n const coverage: RAGGroundedAnswer[\"coverage\"] = !hasCitations\n ? \"ungrounded\"\n : ungroundedReferenceNumbers.size === 0\n ? \"grounded\"\n : references.length > 0\n ? \"partial\"\n : \"ungrounded\";\n\n return {\n content,\n coverage,\n excerptModeCounts: buildExcerptModeCounts([\n ...references,\n ...sectionSummaries,\n ]),\n hasCitations,\n parts,\n references,\n sectionSummaries,\n ungroundedReferenceNumbers: [...ungroundedReferenceNumbers].sort(\n (left, right) => left - right,\n ),\n };\n};\n\nexport const buildRAGGroundedAnswerSectionSummaries = (\n references: RAGGroundingReference[],\n): RAGGroundedAnswerSectionSummary[] => {\n const groups = new Map<string, RAGGroundedAnswerSectionSummary>();\n\n for (const reference of references) {\n const key = buildGroundingSectionKey(reference);\n const existing = groups.get(key);\n if (!existing) {\n const excerpts = reference.excerpts\n ? {\n chunkExcerpt: reference.excerpts.chunkExcerpt,\n sectionExcerpt: reference.excerpts.sectionExcerpt,\n windowExcerpt: reference.excerpts.windowExcerpt,\n }\n : undefined;\n groups.set(key, {\n chunkIds: [reference.chunkId],\n contextLabel: reference.contextLabel,\n count: 1,\n excerpt:\n selectPreferredExcerpt(\n excerpts,\n getContextNumber(reference.metadata?.sectionChunkCount),\n ).excerpt ||\n excerpts?.sectionExcerpt ||\n reference.excerpt,\n excerpts,\n excerptSelection: reference.excerptSelection,\n key,\n label: key,\n locatorLabel: reference.locatorLabel,\n provenanceLabel: reference.provenanceLabel,\n referenceNumbers: [reference.number],\n references: [reference],\n summary:\n buildGroundingSectionSummaryLine(reference) ||\n reference.label ||\n reference.chunkId,\n });\n continue;\n }\n\n existing.count += 1;\n if (!existing.chunkIds.includes(reference.chunkId)) {\n existing.chunkIds.push(reference.chunkId);\n }\n if (!existing.referenceNumbers.includes(reference.number)) {\n existing.referenceNumbers.push(reference.number);\n }\n existing.references.push(reference);\n if (!existing.contextLabel && reference.contextLabel) {\n existing.contextLabel = reference.contextLabel;\n }\n if (!existing.locatorLabel && reference.locatorLabel) {\n existing.locatorLabel = reference.locatorLabel;\n }\n if (!existing.provenanceLabel && reference.provenanceLabel) {\n existing.provenanceLabel = reference.provenanceLabel;\n }\n if (!existing.excerpts && reference.excerpts) {\n existing.excerpts = {\n chunkExcerpt: reference.excerpts.chunkExcerpt,\n sectionExcerpt: reference.excerpts.sectionExcerpt,\n windowExcerpt: reference.excerpts.windowExcerpt,\n };\n existing.excerpt = reference.excerpts.sectionExcerpt;\n }\n if (!existing.excerptSelection && reference.excerptSelection) {\n existing.excerptSelection = reference.excerptSelection;\n }\n }\n\n return [...groups.values()]\n .map((group) => ({\n ...group,\n referenceNumbers: [...group.referenceNumbers].sort(\n (left, right) => left - right,\n ),\n references: group.references\n .slice()\n .sort((left, right) => left.number - right.number),\n }))\n .sort((left, right) => {\n const leftFirst = left.referenceNumbers[0] ?? Number.POSITIVE_INFINITY;\n const rightFirst = right.referenceNumbers[0] ?? Number.POSITIVE_INFINITY;\n if (leftFirst !== rightFirst) {\n return leftFirst - rightFirst;\n }\n return left.label.localeCompare(right.label);\n });\n};\n\nexport const buildRAGGroundingReferences = (sources: RAGSource[]) => {\n const citations = buildRAGCitations(sources);\n const citationReferenceMap = buildRAGCitationReferenceMap(citations);\n\n return citations.map<RAGGroundingReference>((citation) => {\n const excerpts = buildGroundingChunkExcerpts(sources, citation.chunkId);\n const excerptSelection = selectPreferredExcerpt(\n excerpts,\n getContextNumber(citation.metadata?.sectionChunkCount),\n );\n return {\n chunkId: citation.chunkId,\n contextLabel:\n citation.contextLabel ?? buildContextLabel(citation.metadata),\n excerpt:\n excerptSelection.excerpt ||\n excerpts?.chunkExcerpt ||\n buildExcerpt(citation.text),\n excerpts,\n excerptSelection,\n label: citation.label,\n locatorLabel:\n citation.locatorLabel ??\n buildLocatorLabel(citation.metadata, citation.source, citation.title),\n metadata: citation.metadata,\n number: citationReferenceMap[citation.chunkId] ?? 0,\n provenanceLabel:\n citation.provenanceLabel ?? buildProvenanceLabel(citation.metadata),\n score: citation.score,\n source: citation.source,\n text: citation.text,\n title: citation.title,\n };\n });\n};\n",
8
8
  "import type {\n RAGAdminActionPresentation,\n RAGAdminActionRecord,\n RAGAdminJobPresentation,\n RAGAdminJobRecord,\n AIMessage,\n RAGAnswerGroundingCaseSnapshotPresentation,\n RAGAnswerGroundingEvaluationCaseDiff,\n RAGAnswerGroundingEvaluationHistory,\n RAGAnswerGroundingEntityQualitySummary,\n RAGAnswerGroundingEntityQualityView,\n RAGAnswerGroundingEvaluationResponse,\n RAGCorpusHealth,\n RAGCorpusHealthPresentation,\n RAGExtractorReadiness,\n RAGReadinessPresentation,\n RAGGroundingOverviewPresentation,\n RAGGroundingProviderCaseComparisonPresentation,\n RAGGroundingProviderOverviewPresentation,\n RAGGroundingProviderPresentation,\n RAGComparisonOverviewPresentation,\n RAGComparisonPresentation,\n RAGChunkGraph,\n RAGChunkExcerpts,\n RAGExcerptModeCounts,\n RAGExcerptPromotionReason,\n RAGExcerptSelection,\n RAGChunkGraphEdge,\n RAGChunkGraphNavigation,\n RAGChunkGraphNode,\n RAGChunkGraphSectionGroup,\n RAGChunkStructure,\n RAGDocumentChunkPreview,\n RAGLabelValueRow,\n RAGRerankerComparisonEntry,\n RAGRetrievalComparison,\n RAGRetrievalComparisonEntry,\n RAGRetrievalComparisonRun,\n RAGRetrievalReleaseGroupHistoryPresentation,\n RAGRetrievalReleaseHistoryRunPresentation,\n RAGRetrievalReleaseTimelineSummary,\n RAGRetrievalTraceHistoryWindow,\n RAGRetrievalTraceStep,\n RAGRetrievalTrace,\n RAGHybridRetrievalMode,\n RAGSourceBalanceStrategy,\n RAGQualityOverviewPresentation,\n RAGSectionRetrievalDiagnostic,\n RAGEvaluationCaseDiff,\n RAGEvaluationCaseTracePresentation,\n RAGEvaluationEntityQualitySummary,\n RAGEvaluationEntityQualityView,\n RAGEvaluationHistory,\n RAGAnswerGroundingHistoryPresentation,\n RAGEvaluationResponse,\n RAGEvaluationHistoryPresentation,\n RAGEvaluationHistoryStore,\n RAGEvaluationSuiteSnapshotHistory,\n RAGEvaluationSuiteSnapshotHistoryPresentation,\n RAGEvaluationSuiteSnapshotPresentation,\n RAGEntityQualityPresentation,\n RAGEntityQualityViewPresentation,\n RAGRerankerComparison,\n RAGAnswerWorkflowState,\n RAGRetrievalTracePresentation,\n RAGSource,\n RAGSourceLabels,\n RAGSourceGroup,\n RAGSourceSummary,\n RAGStreamStage,\n RAGSyncOverviewPresentation,\n RAGSyncSourcePresentation,\n RAGSyncSourceRecord,\n RAGSyncSourceRunPresentation,\n} from \"@absolutejs/ai\";\nimport {\n buildRAGCitationReferenceMap,\n buildRAGCitations,\n buildRAGGroundedAnswer,\n buildRAGGroundedAnswerSectionSummaries,\n buildRAGGroundingReferences,\n} from \"./grounding\";\nimport {\n buildRAGAnswerGroundingEntityQualityView,\n buildRAGEvaluationEntityQualityView,\n} from \"./quality\";\n\nexport {\n buildRAGCitationReferenceMap,\n buildRAGCitations,\n buildRAGGroundedAnswer,\n buildRAGGroundedAnswerSectionSummaries,\n buildRAGGroundingReferences,\n};\n\nconst buildSourceGroupKey = (source: RAGSource) =>\n source.source ?? source.title ?? source.chunkId;\n\nconst buildSourceLabel = (source: RAGSource) =>\n source.source ?? source.title ?? source.chunkId;\n\nconst getContextNumber = (value: unknown) =>\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n\nconst getContextString = (value: unknown) =>\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n\nconst isRAGRetrievalTrace = (value: unknown): value is RAGRetrievalTrace => {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const candidate = value as Record<string, unknown>;\n\n return (\n typeof candidate.query === \"string\" &&\n typeof candidate.transformedQuery === \"string\" &&\n Array.isArray(candidate.variantQueries) &&\n Array.isArray(candidate.steps)\n );\n};\n\nconst formatTimestampLabel = (value: unknown) => {\n const timestamp =\n typeof value === \"number\" && Number.isFinite(value)\n ? value\n : typeof value === \"string\"\n ? Date.parse(value)\n : Number.NaN;\n if (!Number.isFinite(timestamp)) {\n return undefined;\n }\n\n return new Date(timestamp).toLocaleString(\"en-US\", {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n });\n};\n\nconst formatRAGTraceValue = (value: unknown): string => {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (Array.isArray(value)) {\n return value.join(\", \");\n }\n if (value && typeof value === \"object\") {\n return JSON.stringify(value);\n }\n return \"n/a\";\n};\n\nconst formatLeadContinuityCue = (value: unknown) => {\n const cue = getContextString(value);\n switch (cue) {\n case \"immediate_follow_up\":\n return \"Immediate follow-up\";\n case \"near_follow_up\":\n return \"Near follow-up\";\n case \"close_follow_up\":\n return \"Close follow-up\";\n case \"delayed_follow_up\":\n return \"Delayed follow-up\";\n case \"immediate_prior\":\n return \"Immediate prior segment\";\n case \"near_prior\":\n return \"Near prior segment\";\n case \"close_prior\":\n return \"Close prior segment\";\n case \"delayed_prior\":\n return \"Delayed prior segment\";\n default:\n return undefined;\n }\n};\n\nconst formatLeadSpeakerAttributionCue = (value: unknown) => {\n const cue = getContextString(value);\n switch (cue) {\n case \"quoted_match\":\n return \"Quoted speaker match\";\n default:\n return undefined;\n }\n};\n\nconst formatLeadChannelAttributionCue = (value: unknown) => {\n const cue = getContextString(value);\n switch (cue) {\n case \"quoted_match\":\n return \"Quoted channel match\";\n default:\n return undefined;\n }\n};\n\nconst formatLeadMediaCueSummary = (input?: {\n leadSpeakerCue?: string;\n leadSpeakerAttributionCue?: string;\n leadChannelCue?: string;\n leadChannelAttributionCue?: string;\n leadContinuityCue?: string;\n}) => {\n const parts = [\n input?.leadSpeakerCue ? `speaker ${input.leadSpeakerCue}` : undefined,\n input?.leadSpeakerAttributionCue === \"quoted_match\"\n ? \"quoted speaker match\"\n : undefined,\n input?.leadChannelCue ? `channel ${input.leadChannelCue}` : undefined,\n input?.leadChannelAttributionCue === \"quoted_match\"\n ? \"quoted channel match\"\n : undefined,\n formatLeadContinuityCue(input?.leadContinuityCue),\n ].filter(\n (value): value is string => typeof value === \"string\" && value.length > 0,\n );\n\n return parts.length > 0 ? parts.join(\" · \") : \"none\";\n};\n\nconst formatRAGTraceMetadataRow = (\n key: string,\n value: unknown,\n): RAGLabelValueRow => ({\n label:\n key === \"sqliteQueryMode\"\n ? \"SQLite query mode\"\n : key === \"postgresQueryMode\"\n ? \"Postgres query mode\"\n : key === \"sqliteQueryPushdownMode\"\n ? \"SQLite pushdown mode\"\n : key === \"postgresQueryPushdownMode\"\n ? \"Postgres pushdown mode\"\n : key === \"sqliteQueryPushdownApplied\"\n ? \"SQLite pushdown applied\"\n : key === \"postgresQueryPushdownApplied\"\n ? \"Postgres pushdown applied\"\n : key === \"sqliteQueryPushdownClauseCount\"\n ? \"SQLite pushdown clauses\"\n : key === \"postgresQueryPushdownClauseCount\"\n ? \"Postgres pushdown clauses\"\n : key === \"sqliteQueryPushdownCoverageRatio\"\n ? \"SQLite pushdown coverage\"\n : key === \"postgresQueryPushdownCoverageRatio\"\n ? \"Postgres pushdown coverage\"\n : key === \"sqliteQueryTotalFilterClauseCount\"\n ? \"SQLite total filter clauses\"\n : key === \"postgresQueryTotalFilterClauseCount\"\n ? \"Postgres total filter clauses\"\n : key === \"sqliteQueryJsRemainderClauseCount\"\n ? \"SQLite JS remainder clauses\"\n : key === \"sqliteQueryMultiplierUsed\"\n ? \"SQLite query multiplier\"\n : key === \"sqliteQueryPlannerProfileUsed\"\n ? \"SQLite query profile\"\n : key === \"sqliteQueryCandidateLimitUsed\"\n ? \"SQLite candidate limit\"\n : key === \"sqliteQueryMaxBackfillsUsed\"\n ? \"SQLite max backfills\"\n : key === \"sqliteQueryMinResultsUsed\"\n ? \"SQLite min results\"\n : key === \"sqliteQueryFillPolicyUsed\"\n ? \"SQLite fill policy\"\n : key ===\n \"postgresQueryJsRemainderClauseCount\"\n ? \"Postgres JS remainder clauses\"\n : key ===\n \"postgresQueryMultiplierUsed\"\n ? \"Postgres query multiplier\"\n : key ===\n \"postgresQueryPlannerProfileUsed\"\n ? \"Postgres query profile\"\n : key ===\n \"postgresQueryCandidateLimitUsed\"\n ? \"Postgres candidate limit\"\n : key ===\n \"postgresQueryMaxBackfillsUsed\"\n ? \"Postgres max backfills\"\n : key ===\n \"postgresQueryMinResultsUsed\"\n ? \"Postgres min results\"\n : key ===\n \"postgresQueryFillPolicyUsed\"\n ? \"Postgres fill policy\"\n : key ===\n \"sqliteQueryJsRemainderRatio\"\n ? \"SQLite JS remainder share\"\n : key ===\n \"postgresQueryJsRemainderRatio\"\n ? \"Postgres JS remainder share\"\n : key ===\n \"sqliteQueryFilteredCandidates\"\n ? \"SQLite filtered candidates\"\n : key ===\n \"postgresQueryFilteredCandidates\"\n ? \"Postgres filtered candidates\"\n : key ===\n \"sqliteQueryInitialSearchK\"\n ? \"SQLite initial searchK\"\n : key ===\n \"postgresQueryInitialSearchK\"\n ? \"Postgres initial searchK\"\n : key ===\n \"sqliteQueryFinalSearchK\"\n ? \"SQLite final searchK\"\n : key ===\n \"postgresQueryFinalSearchK\"\n ? \"Postgres final searchK\"\n : key ===\n \"sqliteQuerySearchExpansionRatio\"\n ? \"SQLite search expansion\"\n : key ===\n \"postgresQuerySearchExpansionRatio\"\n ? \"Postgres search expansion\"\n : key ===\n \"sqliteQueryBackfillCount\"\n ? \"SQLite backfill count\"\n : key ===\n \"sqliteQueryBackfillLimitReached\"\n ? \"SQLite backfill limit reached\"\n : key ===\n \"sqliteQueryMinResultsSatisfied\"\n ? \"SQLite min results satisfied\"\n : key ===\n \"postgresQueryBackfillCount\"\n ? \"Postgres backfill count\"\n : key ===\n \"postgresQueryBackfillLimitReached\"\n ? \"Postgres backfill limit reached\"\n : key ===\n \"postgresQueryMinResultsSatisfied\"\n ? \"Postgres min results satisfied\"\n : key ===\n \"sqliteQueryReturnedCount\"\n ? \"SQLite returned hits\"\n : key ===\n \"postgresQueryReturnedCount\"\n ? \"Postgres returned hits\"\n : key ===\n \"sqliteQueryCandidateYieldRatio\"\n ? \"SQLite candidate yield\"\n : key ===\n \"postgresQueryCandidateYieldRatio\"\n ? \"Postgres candidate yield\"\n : key ===\n \"sqliteQueryTopKFillRatio\"\n ? \"SQLite topK fill rate\"\n : key ===\n \"postgresQueryTopKFillRatio\"\n ? \"Postgres topK fill rate\"\n : key ===\n \"sqliteQueryUnderfilledTopK\"\n ? \"SQLite underfilled topK\"\n : key ===\n \"postgresQueryUnderfilledTopK\"\n ? \"Postgres underfilled topK\"\n : key ===\n \"sqliteQueryCandidateBudgetExhausted\"\n ? \"SQLite candidate budget exhausted\"\n : key ===\n \"postgresQueryCandidateBudgetExhausted\"\n ? \"Postgres candidate budget exhausted\"\n : key ===\n \"sqliteQueryCandidateCoverage\"\n ? \"SQLite candidate coverage\"\n : key ===\n \"postgresQueryCandidateCoverage\"\n ? \"Postgres candidate coverage\"\n : key ===\n \"postgresIndexType\"\n ? \"Postgres index type\"\n : key ===\n \"postgresIndexName\"\n ? \"Postgres index name\"\n : key ===\n \"postgresIndexPresent\"\n ? \"Postgres index present\"\n : key ===\n \"postgresEstimatedRowCount\"\n ? \"Postgres estimated rows\"\n : key ===\n \"postgresTableBytes\"\n ? \"Postgres table bytes\"\n : key ===\n \"postgresIndexBytes\"\n ? \"Postgres index bytes\"\n : key ===\n \"postgresTotalBytes\"\n ? \"Postgres total bytes\"\n : key ===\n \"postgresIndexStorageRatio\"\n ? \"Postgres index storage ratio\"\n : key ===\n \"leadSpeakerCue\"\n ? \"Lead speaker cue\"\n : key ===\n \"leadSpeakerAttributionCue\"\n ? \"Lead speaker attribution\"\n : key ===\n \"leadChannelAttributionCue\"\n ? \"Lead channel attribution\"\n : key ===\n \"leadChannelCue\"\n ? \"Lead channel cue\"\n : key ===\n \"leadContinuityCue\"\n ? \"Lead continuity cue\"\n : key,\n value:\n key === \"sourceAwareChunkReason\"\n ? (formatSourceAwareChunkReason(value) ?? formatRAGTraceValue(value))\n : key === \"leadSpeakerAttributionCue\"\n ? (formatLeadSpeakerAttributionCue(value) ?? formatRAGTraceValue(value))\n : key === \"leadChannelAttributionCue\"\n ? (formatLeadChannelAttributionCue(value) ??\n formatRAGTraceValue(value))\n : key === \"leadContinuityCue\"\n ? (formatLeadContinuityCue(value) ?? formatRAGTraceValue(value))\n : formatRAGTraceValue(value),\n});\n\nexport const buildRAGRetrievalTracePresentation = (\n trace?: RAGRetrievalTrace,\n): RAGRetrievalTracePresentation => {\n if (!trace) {\n return {\n details: [],\n stats: [],\n steps: [],\n };\n }\n\n const stats: RAGLabelValueRow[] = [\n { label: \"Mode\", value: trace.mode },\n { label: \"Final Results\", value: String(trace.resultCounts.final) },\n {\n label: \"Vector Candidates\",\n value: String(trace.resultCounts.vector),\n },\n {\n label: \"Lexical Candidates\",\n value: String(trace.resultCounts.lexical),\n },\n ];\n const details: RAGLabelValueRow[] = [\n { label: \"Transformed query\", value: trace.transformedQuery },\n ...(trace.queryTransformLabel || trace.queryTransformProvider\n ? [\n {\n label: \"Query transform\",\n value:\n trace.queryTransformLabel ??\n trace.queryTransformProvider ??\n \"configured\",\n },\n ...(trace.queryTransformReason\n ? [\n {\n label: \"Query transform reason\",\n value: trace.queryTransformReason,\n },\n ]\n : []),\n ]\n : []),\n {\n label: \"Variant queries\",\n value:\n trace.variantQueries.length > 0\n ? trace.variantQueries.join(\" · \")\n : \"none\",\n },\n ...(trace.requestedMode && trace.requestedMode !== trace.mode\n ? [{ label: \"Requested mode\", value: trace.requestedMode }]\n : []),\n ...(trace.routingLabel || trace.routingProvider\n ? [\n {\n label: \"Routing decision\",\n value: trace.routingLabel ?? trace.routingProvider ?? \"configured\",\n },\n ...(trace.routingReason\n ? [\n {\n label: \"Routing reason\",\n value: trace.routingReason,\n },\n ]\n : []),\n ]\n : []),\n { label: \"Candidate topK\", value: String(trace.candidateTopK) },\n { label: \"Lexical topK\", value: String(trace.lexicalTopK) },\n ];\n const steps = trace.steps.map((step) => {\n const sqlitePlannerCues = formatSQLitePlannerCueSummary(step.metadata);\n const postgresPlannerCues = formatPostgresPlannerCueSummary(step.metadata);\n\n return {\n count: step.count,\n label: step.label,\n rows: [\n { label: \"stage\", value: step.stage },\n ...(typeof step.count === \"number\"\n ? [{ label: \"count\", value: String(step.count) }]\n : []),\n ...(typeof step.durationMs === \"number\"\n ? [{ label: \"durationMs\", value: String(step.durationMs) }]\n : []),\n ...(sqlitePlannerCues !== \"none\"\n ? [\n {\n label: \"SQLite planner cues\",\n value: sqlitePlannerCues,\n },\n ]\n : []),\n ...(postgresPlannerCues !== \"none\"\n ? [\n {\n label: \"Postgres planner cues\",\n value: postgresPlannerCues,\n },\n ]\n : []),\n ...Object.entries(step.metadata ?? {}).map(([key, value]) =>\n formatRAGTraceMetadataRow(key, value),\n ),\n ],\n stage: step.stage,\n };\n });\n\n return {\n details,\n stats,\n steps,\n };\n};\n\nconst formatCompactList = (values?: string[]) =>\n values && values.length > 0 ? values.join(\", \") : \"none\";\n\nconst formatCoverageMap = (entries?: Record<string, number>) => {\n if (!entries) {\n return \"none\";\n }\n\n const values = Object.entries(entries);\n return values.length > 0\n ? values.map(([key, value]) => `${key} ${value}`).join(\" · \")\n : \"none\";\n};\n\nconst formatByteSizeLabel = (value?: number) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return \"n/a\";\n }\n\n if (value < 1024) {\n return `${Math.round(value)} B`;\n }\n\n if (value < 1024 * 1024) {\n return `${(value / 1024).toFixed(value >= 10 * 1024 ? 0 : 1)} KiB`;\n }\n\n if (value < 1024 * 1024 * 1024) {\n return `${(value / (1024 * 1024)).toFixed(\n value >= 10 * 1024 * 1024 ? 0 : 1,\n )} MiB`;\n }\n\n return `${(value / (1024 * 1024 * 1024)).toFixed(\n value >= 10 * 1024 * 1024 * 1024 ? 0 : 1,\n )} GiB`;\n};\n\nconst formatDurationLabel = (value?: number) => {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return \"n/a\";\n }\n\n if (value < 1000) {\n return `${value}ms`;\n }\n\n if (value < 60000) {\n return `${(value / 1000).toFixed(value >= 10000 ? 0 : 1)}s`;\n }\n\n if (value < 3600000) {\n return `${(value / 60000).toFixed(value >= 600000 ? 0 : 1)}m`;\n }\n\n return `${(value / 3600000).toFixed(value >= 36000000 ? 0 : 1)}h`;\n};\n\nconst formatDateLabel = (value?: number) =>\n typeof value === \"number\" && Number.isFinite(value)\n ? new Date(value).toLocaleString(\"en-US\")\n : \"n/a\";\n\nconst formatAgeLabel = (value?: number) => {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return \"n/a\";\n }\n\n if (value < 1000) {\n return `${Math.round(value)}ms`;\n }\n\n if (value < 60000) {\n return `${(value / 1000).toFixed(value >= 10000 ? 0 : 1)}s`;\n }\n\n if (value < 3600000) {\n return `${(value / 60000).toFixed(value >= 600000 ? 0 : 1)}m`;\n }\n\n if (value < 86400000) {\n return `${(value / 3600000).toFixed(value >= 36000000 ? 0 : 1)}h`;\n }\n\n return `${(value / 86400000).toFixed(value >= 864000000 ? 0 : 1)}d`;\n};\n\nconst formatSourceAwareChunkReason = (value: unknown) => {\n const reason = getContextString(value);\n if (reason === \"section_boundary\") {\n return \"Chunk boundary section\";\n }\n if (reason === \"size_limit\") {\n return \"Chunk boundary size limit\";\n }\n if (reason === \"source_native_unit\") {\n return \"Chunk boundary source-native unit\";\n }\n return undefined;\n};\n\nconst buildSourceAwareUnitScopeLabel = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const sectionKind = getContextString(metadata.sectionKind);\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const pdfSemanticRole = getContextString(metadata.pdfSemanticRole);\n const pdfTextKind = getContextString(metadata.pdfTextKind);\n const officeBlockKindValue = getContextString(metadata.officeBlockKind);\n const officeBlockKind =\n officeBlockKindValue === \"table\" ||\n officeBlockKindValue === \"list\" ||\n officeBlockKindValue === \"paragraph\"\n ? officeBlockKindValue\n : undefined;\n const sheetName = getContextString(metadata.sheetName);\n const spreadsheetTableLabel = formatSpreadsheetTableLabel(\n getContextNumber(metadata.spreadsheetTableIndex),\n getContextNumber(metadata.spreadsheetTableCount),\n );\n const slideTitle = getContextString(metadata.slideTitle);\n const slideNumber =\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n\n if (\n sectionPath.length > 0 &&\n (sectionKind === \"markdown_heading\" ||\n sectionKind === \"html_heading\" ||\n sectionKind === \"office_heading\" ||\n sectionKind === undefined)\n ) {\n return `Source-aware section ${sectionPath.join(\" > \")}`;\n }\n\n if (sectionKind === \"pdf_block\") {\n if (pdfSemanticRole === \"figure_caption\" && sectionTitle) {\n return `Source-aware PDF figure caption ${sectionTitle}`;\n }\n if (pdfSemanticRole === \"figure_body\" && sectionTitle) {\n return `Source-aware PDF figure body ${sectionTitle}`;\n }\n if (pdfTextKind === \"table_like\" && sectionTitle) {\n return `Source-aware PDF table block ${sectionTitle}`;\n }\n if (sectionTitle) {\n return `Source-aware PDF block ${sectionTitle}`;\n }\n return \"Source-aware PDF block\";\n }\n\n if (sectionKind === \"office_block\") {\n const officeSectionLabel =\n sectionPath.length > 0 ? sectionPath.join(\" > \") : sectionTitle;\n if (officeBlockKind && officeSectionLabel) {\n return `Source-aware office ${officeBlockKind} block ${officeSectionLabel}`;\n }\n if (officeSectionLabel) {\n return `Source-aware office block ${officeSectionLabel}`;\n }\n return \"Source-aware office block\";\n }\n\n if (\n sectionKind === \"spreadsheet_rows\" ||\n (sectionKind === undefined &&\n (sheetName ||\n spreadsheetTableLabel ||\n getContextNumber(metadata.spreadsheetRowStart) !== undefined ||\n getContextNumber(metadata.spreadsheetRowEnd) !== undefined))\n ) {\n if (sheetName && spreadsheetTableLabel) {\n return `Source-aware spreadsheet ${sheetName} ${spreadsheetTableLabel}`;\n }\n if (sheetName) {\n return `Source-aware spreadsheet ${sheetName}`;\n }\n return \"Source-aware spreadsheet\";\n }\n\n if (sectionKind === \"presentation_slide\") {\n if (slideNumber && slideTitle) {\n return `Source-aware slide ${slideNumber} ${slideTitle}`;\n }\n if (slideTitle) {\n return `Source-aware slide ${slideTitle}`;\n }\n if (slideNumber) {\n return `Source-aware slide ${slideNumber}`;\n }\n return \"Source-aware slide\";\n }\n\n return undefined;\n};\n\nconst buildSyncOverviewLatestRow = (sources: RAGSyncSourceRecord[]) => {\n const latest = [...sources]\n .filter(\n (record) =>\n typeof record.lastSuccessfulSyncAt === \"number\" ||\n typeof record.lastSyncedAt === \"number\",\n )\n .sort(\n (left, right) =>\n (right.lastSuccessfulSyncAt ?? right.lastSyncedAt ?? 0) -\n (left.lastSuccessfulSyncAt ?? left.lastSyncedAt ?? 0),\n )[0];\n\n if (!latest) {\n return {\n label: \"Latest sync\",\n value: \"No completed run yet\",\n };\n }\n\n return {\n label: \"Latest sync\",\n value: [\n latest.label,\n typeof latest.documentCount === \"number\"\n ? `${latest.documentCount} docs`\n : \"\",\n typeof latest.chunkCount === \"number\"\n ? `${latest.chunkCount} chunks`\n : \"\",\n typeof latest.lastSyncDurationMs === \"number\"\n ? formatDurationLabel(latest.lastSyncDurationMs)\n : \"\",\n typeof latest.lastSuccessfulSyncAt === \"number\"\n ? formatDateLabel(latest.lastSuccessfulSyncAt)\n : typeof latest.lastSyncedAt === \"number\"\n ? formatDateLabel(latest.lastSyncedAt)\n : \"\",\n ]\n .filter(Boolean)\n .join(\" · \"),\n };\n};\n\nconst formatAdminActionLabel = (\n value: RAGAdminActionRecord[\"action\"] | RAGAdminJobRecord[\"action\"],\n) => value.replaceAll(\"_\", \" \");\n\nconst buildAdminTimingLabel = (input: {\n elapsedMs?: number;\n startedAt: number;\n}) =>\n typeof input.elapsedMs === \"number\"\n ? formatDurationLabel(input.elapsedMs)\n : formatDateLabel(input.startedAt);\n\nexport const buildRAGAdminJobPresentation = (\n job: RAGAdminJobRecord,\n): RAGAdminJobPresentation => ({\n id: job.id,\n action: job.action,\n status: job.status,\n summary: [\n job.status.toUpperCase(),\n formatAdminActionLabel(job.action),\n job.target,\n buildAdminTimingLabel(job),\n ]\n .filter(Boolean)\n .join(\" · \"),\n rows: [\n { label: \"Action\", value: formatAdminActionLabel(job.action) },\n { label: \"Status\", value: job.status },\n ...(job.target ? [{ label: \"Target\", value: job.target }] : []),\n { label: \"Timing\", value: buildAdminTimingLabel(job) },\n ...(job.error ? [{ label: \"Error\", value: job.error }] : []),\n ],\n});\n\nexport const buildRAGAdminJobPresentations = (\n jobs?: RAGAdminJobRecord[],\n): RAGAdminJobPresentation[] =>\n (jobs ?? []).slice(0, 3).map(buildRAGAdminJobPresentation);\n\nexport const buildRAGAdminActionPresentation = (\n action: RAGAdminActionRecord,\n): RAGAdminActionPresentation => ({\n id: action.id,\n action: action.action,\n status: action.status,\n summary: [\n action.status.toUpperCase(),\n formatAdminActionLabel(action.action),\n action.documentId ?? action.target,\n buildAdminTimingLabel(action),\n ]\n .filter(Boolean)\n .join(\" · \"),\n rows: [\n { label: \"Action\", value: formatAdminActionLabel(action.action) },\n { label: \"Status\", value: action.status },\n ...(action.documentId\n ? [{ label: \"Document\", value: action.documentId }]\n : action.target\n ? [{ label: \"Target\", value: action.target }]\n : []),\n { label: \"Timing\", value: buildAdminTimingLabel(action) },\n ...(action.error ? [{ label: \"Error\", value: action.error }] : []),\n ],\n});\n\nexport const buildRAGAdminActionPresentations = (\n actions?: RAGAdminActionRecord[],\n): RAGAdminActionPresentation[] =>\n (actions ?? []).slice(0, 3).map(buildRAGAdminActionPresentation);\n\nconst buildRAGSyncSourceRunPresentations = (\n source: RAGSyncSourceRecord,\n): RAGSyncSourceRunPresentation[] => {\n if (!Array.isArray(source.metadata?.recentRuns)) {\n return [];\n }\n\n return (source.metadata.recentRuns as Array<Record<string, unknown>>)\n .slice(0, 3)\n .map((entry, index) => {\n const trigger =\n typeof entry.trigger === \"string\" ? entry.trigger : \"sync\";\n const status =\n typeof entry.status === \"string\" ? entry.status : \"unknown\";\n const finishedAt =\n typeof entry.finishedAt === \"number\"\n ? formatDateLabel(entry.finishedAt)\n : \"n/a\";\n const duration =\n typeof entry.durationMs === \"number\"\n ? formatDurationLabel(entry.durationMs)\n : \"n/a\";\n const docs =\n typeof entry.documentCount === \"number\"\n ? `${entry.documentCount} docs`\n : \"n/a\";\n const chunks =\n typeof entry.chunkCount === \"number\"\n ? `${entry.chunkCount} chunks`\n : \"n/a\";\n const error =\n typeof entry.error === \"string\" && entry.error.length > 0\n ? entry.error\n : undefined;\n\n return {\n label: `Run ${index + 1}`,\n status,\n summary: `${trigger} · ${status} · ${docs} · ${chunks} · ${duration} · ${finishedAt}`,\n rows: [\n { label: \"Trigger\", value: trigger },\n { label: \"Status\", value: status },\n { label: \"Output\", value: `${docs} · ${chunks}` },\n { label: \"Duration\", value: duration },\n { label: \"Finished\", value: finishedAt },\n ...(error ? [{ label: \"Error\", value: error }] : []),\n ],\n };\n });\n};\n\nexport const buildRAGSyncSourcePresentation = (\n source: RAGSyncSourceRecord,\n): RAGSyncSourcePresentation => {\n const provider =\n typeof source.metadata?.provider === \"string\"\n ? source.metadata.provider\n : undefined;\n const accountMode =\n typeof source.metadata?.accountMode === \"string\"\n ? source.metadata.accountMode\n : undefined;\n const schedule =\n typeof source.metadata?.schedule === \"string\"\n ? source.metadata.schedule\n : undefined;\n const lastTrigger =\n typeof source.metadata?.lastTrigger === \"string\"\n ? source.metadata.lastTrigger\n : undefined;\n const liveReady =\n typeof source.metadata?.liveReady === \"string\"\n ? source.metadata.liveReady\n : undefined;\n const diagnosticSummary = source.diagnostics?.summary;\n const diagnosticTags =\n source.diagnostics?.entries.map((entry) =>\n entry.code\n .replace(/_/g, \" \")\n .replace(/\\b\\w/g, (letter) => letter.toUpperCase()),\n ) ?? [];\n const retryGuidance = source.diagnostics?.retryGuidance;\n\n return {\n id: source.id,\n label: source.label,\n kind: source.kind,\n status: source.status,\n summary: [\n source.kind,\n source.status,\n typeof source.documentCount === \"number\"\n ? `${source.documentCount} docs`\n : \"\",\n typeof source.chunkCount === \"number\"\n ? `${source.chunkCount} chunks`\n : \"\",\n typeof source.lastSyncDurationMs === \"number\"\n ? formatDurationLabel(source.lastSyncDurationMs)\n : \"\",\n typeof source.lastSuccessfulSyncAt === \"number\"\n ? `last success ${formatDateLabel(source.lastSuccessfulSyncAt)}`\n : typeof source.lastSyncedAt === \"number\"\n ? `last sync ${formatDateLabel(source.lastSyncedAt)}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\" · \"),\n rows: [\n ...(source.target ? [{ label: \"Target\", value: source.target }] : []),\n ...(provider ? [{ label: \"Provider\", value: provider }] : []),\n ...(accountMode ? [{ label: \"Account mode\", value: accountMode }] : []),\n ...(schedule ? [{ label: \"Schedule\", value: schedule }] : []),\n ...(lastTrigger ? [{ label: \"Last trigger\", value: lastTrigger }] : []),\n ...(typeof source.lastSuccessfulSyncAt === \"number\"\n ? [\n {\n label: \"Last success\",\n value: formatDateLabel(source.lastSuccessfulSyncAt),\n },\n ]\n : []),\n ...(typeof source.nextRetryAt === \"number\"\n ? [\n {\n label: \"Next retry\",\n value: formatDateLabel(source.nextRetryAt),\n },\n ]\n : []),\n ...(source.lastError\n ? [{ label: \"Last error\", value: source.lastError }]\n : []),\n ...(diagnosticSummary\n ? [{ label: \"Diagnostics\", value: diagnosticSummary }]\n : []),\n ...(retryGuidance\n ? [{ label: \"Retry guidance\", value: retryGuidance.reason }]\n : []),\n ],\n tags: [\n provider,\n accountMode ? `mode ${accountMode}` : undefined,\n liveReady,\n ...diagnosticTags,\n ].filter((value): value is string => Boolean(value)),\n extendedSummary: diagnosticSummary ?? source.description ?? liveReady,\n runs: buildRAGSyncSourceRunPresentations(source),\n };\n};\n\nexport const buildRAGSyncSourcePresentations = (\n sources?: RAGSyncSourceRecord[],\n): RAGSyncSourcePresentation[] =>\n (sources ?? []).map(buildRAGSyncSourcePresentation);\n\nexport const buildRAGReadinessPresentation = (\n readiness?: RAGExtractorReadiness,\n): RAGReadinessPresentation => {\n if (!readiness) {\n return {\n sections: [\n {\n label: \"Provider\",\n title: \"Unavailable\",\n summary: \"Readiness data is not available yet.\",\n },\n ],\n };\n }\n\n return {\n sections: [\n {\n label: \"Provider\",\n title: readiness.providerConfigured\n ? (readiness.providerName ?? \"Runtime provider routing\")\n : \"Not configured\",\n summary: readiness.providerConfigured\n ? readiness.model\n ? `Requests route through ${readiness.providerName ?? \"the runtime provider registry\"} with default model ${readiness.model}.`\n : `Requests route through ${readiness.providerName ?? \"the runtime provider registry\"}.`\n : \"Provider-backed retrieval is not configured yet.\",\n },\n {\n label: \"Embeddings\",\n title: readiness.embeddingConfigured\n ? readiness.embeddingModel === \"collection-managed embeddings\"\n ? \"Collection-managed\"\n : \"Configured\"\n : \"Missing\",\n summary: readiness.embeddingConfigured\n ? readiness.embeddingModel === \"collection-managed embeddings\"\n ? \"Embeddings come from the collection and vector store layer, so retrieval stays vector-backed without a separate top-level embedding provider.\"\n : (readiness.embeddingModel ?? \"Embedding model configured.\")\n : \"Embeddings are not configured yet.\",\n },\n {\n label: \"Retrieval Stack\",\n title: readiness.rerankerConfigured ? \"Reranker ready\" : \"Vector only\",\n summary: readiness.indexManagerConfigured\n ? \"Index manager configured.\"\n : \"Index manager not configured.\",\n },\n {\n label: \"Extractors\",\n title: readiness.extractorsConfigured\n ? `${readiness.extractorNames.length} configured`\n : \"None configured\",\n summary: readiness.extractorsConfigured\n ? `Configured extractors: ${formatCompactList(readiness.extractorNames)}`\n : \"No extractors configured.\",\n tags:\n readiness.extractorNames.length > 0\n ? readiness.extractorNames\n : [\"No extractors configured\"],\n },\n ],\n };\n};\n\nexport const buildRAGCorpusHealthPresentation = (\n health?: RAGCorpusHealth,\n): RAGCorpusHealthPresentation => {\n if (!health) {\n return {\n sections: [\n {\n label: \"Corpus health\",\n title: \"Unavailable\",\n summary: \"Corpus health is not available yet.\",\n },\n ],\n };\n }\n\n return {\n sections: [\n {\n label: \"Corpus coverage\",\n title: `Formats: ${formatCoverageMap(health.coverageByFormat)}`,\n summary: `Kinds: ${formatCoverageMap(health.coverageByKind)}`,\n rows: [\n {\n label: \"Average chunks per document\",\n value: health.averageChunksPerDocument.toFixed(2),\n },\n ],\n },\n {\n label: \"Chunk quality\",\n title: `${health.averageChunksPerDocument.toFixed(2)} avg chunks/doc`,\n summary: `Empty docs ${health.emptyDocuments} · empty chunks ${health.emptyChunks} · low signal ${health.lowSignalChunks}`,\n rows: [\n {\n label: \"Missing source\",\n value: String(health.documentsMissingSource),\n },\n {\n label: \"Missing title\",\n value: String(health.documentsMissingTitle),\n },\n {\n label: \"Missing metadata\",\n value: String(health.documentsMissingMetadata),\n },\n ],\n },\n {\n label: \"Freshness\",\n title: `${health.staleDocuments.length} stale docs`,\n summary: `Stale threshold ${formatAgeLabel(health.staleAfterMs)}`,\n rows: [\n {\n label: \"Oldest age\",\n value: formatAgeLabel(health.oldestDocumentAgeMs),\n },\n {\n label: \"Newest age\",\n value: formatAgeLabel(health.newestDocumentAgeMs),\n },\n ],\n },\n {\n label: \"Failures\",\n title: `${health.failedIngestJobs} ingest · ${health.failedAdminJobs} admin`,\n summary: `Duplicate sources ${health.duplicateSourceGroups.length} · duplicate ids ${health.duplicateDocumentIdGroups.length}`,\n rows: [\n {\n label: \"Failures by input\",\n value: formatCoverageMap(health.failuresByInputKind),\n },\n {\n label: \"Failures by extractor\",\n value: formatCoverageMap(health.failuresByExtractor),\n },\n {\n label: \"Failures by admin action\",\n value: formatCoverageMap(health.failuresByAdminAction),\n },\n ],\n },\n ],\n };\n};\n\nexport const buildRAGSyncOverviewPresentation = (\n sources?: RAGSyncSourceRecord[],\n): RAGSyncOverviewPresentation => {\n const records = sources ?? [];\n if (records.length === 0) {\n return {\n rows: [\n { label: \"Configured sync sources\", value: \"0\" },\n {\n label: \"Latest sync\",\n value: \"No sync sources configured yet.\",\n },\n ],\n sections: [\n {\n label: \"Sync overview\",\n title: \"No sync sources configured\",\n summary:\n \"Add sync sources to monitor directories, URLs, storage, or mailboxes.\",\n },\n ],\n };\n }\n\n const countByStatus = (status: RAGSyncSourceRecord[\"status\"]) =>\n records.filter((record) => record.status === status).length;\n\n return {\n rows: [\n { label: \"Configured sync sources\", value: String(records.length) },\n { label: \"Completed\", value: String(countByStatus(\"completed\")) },\n { label: \"Running\", value: String(countByStatus(\"running\")) },\n {\n label: \"Failed\",\n value: String(countByStatus(\"failed\")),\n },\n buildSyncOverviewLatestRow(records),\n ],\n sections: [\n {\n label: \"Sync overview\",\n title: `${records.length} configured`,\n summary: `${countByStatus(\"completed\")} completed · ${countByStatus(\"running\")} running · ${countByStatus(\"failed\")} failed`,\n },\n {\n label: \"Latest sync\",\n title: buildSyncOverviewLatestRow(records).value,\n summary: \"Most recent completed or last-known sync activity.\",\n },\n ],\n };\n};\n\nconst formatMediaTimestamp = (value: unknown) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n\n const totalSeconds = Math.floor(value / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const milliseconds = Math.floor(value % 1000);\n\n return `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(\n 2,\n \"0\",\n )}.${String(milliseconds).padStart(3, \"0\")}`;\n};\n\nconst getAttachmentName = (source?: string, title?: string) => {\n const sourceAttachment = source?.split(\"/\").at(-1);\n if (sourceAttachment && sourceAttachment.includes(\".\")) {\n return sourceAttachment;\n }\n\n const titleAttachment = title?.split(\" · \").at(-1);\n if (titleAttachment && titleAttachment.includes(\".\")) {\n return titleAttachment;\n }\n\n return undefined;\n};\n\nconst getSpreadsheetHeaders = (metadata?: Record<string, unknown>) =>\n Array.isArray(metadata?.spreadsheetHeaders)\n ? metadata.spreadsheetHeaders\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n\nconst formatSpreadsheetColumnRange = (\n columnStart?: string,\n columnEnd?: string,\n) => {\n if (typeof columnStart !== \"string\" || columnStart.length === 0) {\n return undefined;\n }\n if (typeof columnEnd !== \"string\" || columnEnd.length === 0) {\n return `Columns ${columnStart}`;\n }\n if (columnStart === columnEnd) {\n return `Columns ${columnStart}`;\n }\n\n return `Columns ${columnStart}-${columnEnd}`;\n};\n\nconst formatSpreadsheetRowRange = (rowStart?: number, rowEnd?: number) => {\n if (typeof rowStart !== \"number\" || !Number.isFinite(rowStart)) {\n return undefined;\n }\n if (\n typeof rowEnd !== \"number\" &&\n typeof rowStart === \"number\" &&\n Number.isFinite(rowStart)\n ) {\n return `Rows ${rowStart}`;\n }\n if (rowStart === rowEnd) {\n return `Rows ${rowStart}`;\n }\n\n return `Rows ${rowStart}-${rowEnd}`;\n};\n\nconst formatSpreadsheetTableLabel = (\n tableIndex?: number,\n tableCount?: number,\n) => {\n if (\n typeof tableIndex !== \"number\" ||\n !Number.isFinite(tableIndex) ||\n tableIndex < 1\n ) {\n return undefined;\n }\n\n if (\n typeof tableCount === \"number\" &&\n Number.isFinite(tableCount) &&\n tableCount >= tableIndex\n ) {\n return `Table ${tableIndex} of ${tableCount}`;\n }\n\n return `Table ${tableIndex}`;\n};\n\nconst formatOfficeListLevelsLabel = (value: unknown) => {\n if (!Array.isArray(value) || value.length === 0) {\n return undefined;\n }\n\n const levels = value\n .map((entry) => getContextNumber(entry))\n .filter((entry): entry is number => typeof entry === \"number\")\n .sort((left, right) => left - right);\n\n if (levels.length === 0) {\n return undefined;\n }\n\n const minLevel = levels[0];\n const maxLevel = levels[levels.length - 1];\n\n return minLevel === maxLevel\n ? `Office list level ${minLevel}`\n : `Office list levels ${minLevel}-${maxLevel}`;\n};\n\nconst formatMediaDurationLabel = (value: unknown) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n\n return formatMediaTimestamp(value);\n};\n\nconst buildContextLabel = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const pdfTextKind = getContextString(metadata.pdfTextKind);\n const pdfSemanticRole = getContextString(metadata.pdfSemanticRole);\n const pdfTableBodyRowStart = getContextNumber(metadata.pdfTableBodyRowStart);\n const pdfTableBodyRowEnd = getContextNumber(metadata.pdfTableBodyRowEnd);\n const officeBlockKindValue = getContextString(metadata.officeBlockKind);\n const officeBlockKind =\n officeBlockKindValue === \"table\" ||\n officeBlockKindValue === \"list\" ||\n officeBlockKindValue === \"paragraph\"\n ? officeBlockKindValue\n : undefined;\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n if (pdfSemanticRole === \"figure_caption\" && sectionTitle) {\n return `PDF figure caption ${sectionTitle}`;\n }\n if (pdfSemanticRole === \"figure_body\" && sectionTitle) {\n return `PDF figure body ${sectionTitle}`;\n }\n if (pdfTextKind === \"table_like\" && sectionTitle) {\n return `PDF table block ${sectionTitle}`;\n }\n if (pdfTextKind === \"paragraph\" && sectionTitle) {\n return `PDF text block ${sectionTitle}`;\n }\n if (officeBlockKind === \"table\" && sectionTitle) {\n return `Office table block ${sectionPath.join(\" > \") || sectionTitle}`;\n }\n if (officeBlockKind === \"list\" && sectionTitle) {\n return `Office list block ${sectionPath.join(\" > \") || sectionTitle}`;\n }\n if (officeBlockKind === \"paragraph\" && sectionTitle) {\n return `Office paragraph block ${sectionPath.join(\" > \") || sectionTitle}`;\n }\n\n const emailKind = getContextString(metadata.emailKind);\n if (emailKind === \"attachment\") {\n const attachmentName = getContextString(metadata.attachmentName);\n const threadTopic = getContextString(metadata.threadTopic);\n return attachmentName\n ? threadTopic\n ? `Attachment evidence ${attachmentName} in ${threadTopic}`\n : `Attachment evidence ${attachmentName}`\n : \"Attachment evidence\";\n }\n\n if (emailKind === \"message\") {\n const threadTopic = getContextString(metadata.threadTopic);\n const from = getContextString(metadata.from);\n if (threadTopic) {\n return from\n ? `Message in ${threadTopic} from ${from}`\n : `Message in ${threadTopic}`;\n }\n return from ? `Message from ${from}` : \"Message evidence\";\n }\n\n const page =\n getContextNumber(metadata.page) ??\n getContextNumber(metadata.pageNumber) ??\n (typeof metadata.pageIndex === \"number\"\n ? metadata.pageIndex + 1\n : undefined);\n const region =\n getContextNumber(metadata.regionNumber) ??\n (typeof metadata.regionIndex === \"number\"\n ? metadata.regionIndex + 1\n : undefined);\n const hasOCRTrace =\n typeof metadata.ocrRegionConfidence === \"number\" ||\n typeof metadata.ocrConfidence === \"number\" ||\n getContextString(metadata.pdfTextMode) === \"ocr\" ||\n typeof metadata.ocrRegionCount === \"number\";\n const ocrPageStart = getContextNumber(metadata.ocrPageStart);\n const ocrPageEnd = getContextNumber(metadata.ocrPageEnd);\n if (page && region) {\n if (hasOCRTrace) {\n return `OCR page ${page} region ${region}`;\n }\n return `Page ${page} region ${region}`;\n }\n if (page) {\n if (hasOCRTrace) {\n return `OCR page ${page}`;\n }\n return `Page ${page}`;\n }\n if (\n hasOCRTrace &&\n typeof ocrPageStart === \"number\" &&\n typeof ocrPageEnd === \"number\"\n ) {\n return ocrPageStart === ocrPageEnd\n ? `OCR page ${ocrPageStart}`\n : `OCR pages ${ocrPageStart}-${ocrPageEnd}`;\n }\n\n const sheet =\n getContextString(metadata.sheetName) ??\n (Array.isArray(metadata.sheetNames)\n ? getContextString(metadata.sheetNames[0])\n : undefined);\n if (sheet) {\n const tableLabel = formatSpreadsheetTableLabel(\n getContextNumber(metadata.spreadsheetTableIndex),\n getContextNumber(metadata.spreadsheetTableCount),\n );\n const columnRange = formatSpreadsheetColumnRange(\n getContextString(metadata.spreadsheetColumnStart),\n getContextString(metadata.spreadsheetColumnEnd),\n );\n const rowRange = formatSpreadsheetRowRange(\n getContextNumber(metadata.spreadsheetRowStart),\n getContextNumber(metadata.spreadsheetRowEnd),\n );\n const headers = getSpreadsheetHeaders(metadata);\n if (tableLabel && rowRange && columnRange) {\n return `Sheet ${sheet} ${tableLabel} ${rowRange} ${columnRange}`;\n }\n if (tableLabel && rowRange) {\n return `Sheet ${sheet} ${tableLabel} ${rowRange}`;\n }\n if (tableLabel && columnRange) {\n return `Sheet ${sheet} ${tableLabel} ${columnRange}`;\n }\n if (tableLabel) {\n return `Sheet ${sheet} ${tableLabel}`;\n }\n if (rowRange && columnRange) {\n return `Sheet ${sheet} ${rowRange} ${columnRange}`;\n }\n if (rowRange) {\n return `Sheet ${sheet} ${rowRange}`;\n }\n if (columnRange) {\n return `Sheet ${sheet} ${columnRange}`;\n }\n if (headers.length > 0) {\n return `Sheet ${sheet} by ${headers.slice(0, 2).join(\", \")}`;\n }\n return `Sheet ${sheet}`;\n }\n\n const slide =\n getContextNumber(metadata.slide) ??\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n const slideTitle = getContextString(metadata.slideTitle);\n if (slide) {\n if (slideTitle) {\n return `Slide ${slide} ${slideTitle}`;\n }\n return `Slide ${slide}`;\n }\n\n const archiveEntry =\n getContextString(metadata.archiveFullPath) ??\n getContextString(metadata.archivePath) ??\n getContextString(metadata.archiveEntryPath) ??\n getContextString(metadata.entryPath);\n if (archiveEntry) {\n return `Archive entry ${archiveEntry}`;\n }\n\n const threadTopic = getContextString(metadata.threadTopic);\n if (threadTopic) {\n return `Thread ${threadTopic}`;\n }\n\n const speaker = getContextString(metadata.speaker);\n if (speaker) {\n return `Speaker ${speaker}`;\n }\n if (sectionTitle) {\n return `Section ${sectionTitle}`;\n }\n\n return undefined;\n};\n\nconst buildLocatorLabel = (\n metadata?: Record<string, unknown>,\n source?: string,\n title?: string,\n) => {\n if (!metadata) {\n return undefined;\n }\n\n const pdfTextKind = getContextString(metadata.pdfTextKind);\n const pdfSemanticRole = getContextString(metadata.pdfSemanticRole);\n const officeBlockKind = getContextString(metadata.officeBlockKind);\n const pdfBlockNumber = getContextNumber(metadata.pdfBlockNumber);\n const pdfTableBodyRowStart = getContextNumber(metadata.pdfTableBodyRowStart);\n const pdfTableBodyRowEnd = getContextNumber(metadata.pdfTableBodyRowEnd);\n const officeBlockNumber = getContextNumber(metadata.officeBlockNumber);\n const officeTableBodyRowStart = getContextNumber(\n metadata.officeTableBodyRowStart,\n );\n const officeTableBodyRowEnd = getContextNumber(\n metadata.officeTableBodyRowEnd,\n );\n const spreadsheetRowStart = getContextNumber(metadata.spreadsheetRowStart);\n const spreadsheetRowEnd = getContextNumber(metadata.spreadsheetRowEnd);\n const slideTitle = getContextString(metadata.slideTitle);\n\n const page =\n getContextNumber(metadata.page) ??\n getContextNumber(metadata.pageNumber) ??\n (typeof metadata.pageIndex === \"number\"\n ? metadata.pageIndex + 1\n : undefined);\n const region =\n getContextNumber(metadata.regionNumber) ??\n (typeof metadata.regionIndex === \"number\"\n ? metadata.regionIndex + 1\n : undefined);\n const ocrPageStart = getContextNumber(metadata.ocrPageStart);\n const ocrPageEnd = getContextNumber(metadata.ocrPageEnd);\n if (page && region) {\n return `Page ${page} · Region ${region}`;\n }\n if (page && pdfBlockNumber && pdfSemanticRole === \"figure_caption\") {\n return `Page ${page} · Figure Caption ${pdfBlockNumber}`;\n }\n if (page && pdfBlockNumber && pdfSemanticRole === \"figure_body\") {\n return `Page ${page} · Figure Body ${pdfBlockNumber}`;\n }\n if (page && pdfBlockNumber && pdfTextKind === \"table_like\") {\n if (\n typeof pdfTableBodyRowStart === \"number\" &&\n typeof pdfTableBodyRowEnd === \"number\"\n ) {\n return pdfTableBodyRowStart === pdfTableBodyRowEnd\n ? `Page ${page} · Table Block ${pdfBlockNumber} · Row ${pdfTableBodyRowStart}`\n : `Page ${page} · Table Block ${pdfBlockNumber} · Rows ${pdfTableBodyRowStart}-${pdfTableBodyRowEnd}`;\n }\n return `Page ${page} · Table Block ${pdfBlockNumber}`;\n }\n if (page && pdfBlockNumber) {\n return `Page ${page} · Text Block ${pdfBlockNumber}`;\n }\n if (page) {\n return `Page ${page}`;\n }\n if (typeof ocrPageStart === \"number\" && typeof ocrPageEnd === \"number\") {\n return ocrPageStart === ocrPageEnd\n ? `Page ${ocrPageStart}`\n : `Pages ${ocrPageStart}-${ocrPageEnd}`;\n }\n\n const sheet =\n getContextString(metadata.sheetName) ??\n (Array.isArray(metadata.sheetNames)\n ? getContextString(metadata.sheetNames[0])\n : undefined);\n if (sheet) {\n const tableLabel = formatSpreadsheetTableLabel(\n getContextNumber(metadata.spreadsheetTableIndex),\n getContextNumber(metadata.spreadsheetTableCount),\n );\n const columnRange = formatSpreadsheetColumnRange(\n getContextString(metadata.spreadsheetColumnStart),\n getContextString(metadata.spreadsheetColumnEnd),\n );\n const rowRange = formatSpreadsheetRowRange(\n spreadsheetRowStart,\n spreadsheetRowEnd,\n );\n if (tableLabel && rowRange && columnRange) {\n return `Sheet ${sheet} · ${tableLabel} · ${rowRange} · ${columnRange}`;\n }\n if (tableLabel && rowRange) {\n return `Sheet ${sheet} · ${tableLabel} · ${rowRange}`;\n }\n if (tableLabel && columnRange) {\n return `Sheet ${sheet} · ${tableLabel} · ${columnRange}`;\n }\n if (tableLabel) {\n return `Sheet ${sheet} · ${tableLabel}`;\n }\n if (rowRange && columnRange) {\n return `Sheet ${sheet} · ${rowRange} · ${columnRange}`;\n }\n if (rowRange) {\n return `Sheet ${sheet} · ${rowRange}`;\n }\n return columnRange ? `Sheet ${sheet} · ${columnRange}` : `Sheet ${sheet}`;\n }\n\n const slide =\n getContextNumber(metadata.slide) ??\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n if (slide) {\n return slideTitle ? `Slide ${slide} · ${slideTitle}` : `Slide ${slide}`;\n }\n\n const archiveEntry =\n getContextString(metadata.archiveFullPath) ??\n getContextString(metadata.archivePath) ??\n getContextString(metadata.archiveEntryPath) ??\n getContextString(metadata.entryPath);\n if (archiveEntry) {\n return `Archive entry ${archiveEntry}`;\n }\n\n const emailKind = getContextString(metadata.emailKind);\n if (emailKind === \"attachment\") {\n const attachmentName =\n getContextString(metadata.attachmentName) ??\n getAttachmentName(source, title);\n const replyDepth = getContextNumber(metadata.replyDepth);\n if (attachmentName && replyDepth && replyDepth > 0) {\n return `Attachment ${attachmentName} · Reply depth ${replyDepth}`;\n }\n return attachmentName ? `Attachment ${attachmentName}` : \"Attachment\";\n }\n\n const mediaStart = formatMediaTimestamp(metadata.startMs);\n const mediaEnd = formatMediaTimestamp(metadata.endMs);\n if (mediaStart && mediaEnd) {\n return `Timestamp ${mediaStart} - ${mediaEnd}`;\n }\n\n if (mediaStart) {\n return `Timestamp ${mediaStart}`;\n }\n\n if (officeBlockNumber && officeBlockKind === \"table\") {\n if (\n typeof officeTableBodyRowStart === \"number\" &&\n typeof officeTableBodyRowEnd === \"number\"\n ) {\n return officeTableBodyRowStart === officeTableBodyRowEnd\n ? `Office table block ${officeBlockNumber} · Row ${officeTableBodyRowStart}`\n : `Office table block ${officeBlockNumber} · Rows ${officeTableBodyRowStart}-${officeTableBodyRowEnd}`;\n }\n return `Office table block ${officeBlockNumber}`;\n }\n if (officeBlockNumber && officeBlockKind === \"list\") {\n return `Office list block ${officeBlockNumber}`;\n }\n if (officeBlockNumber && officeBlockKind === \"paragraph\") {\n return `Office paragraph block ${officeBlockNumber}`;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n if (sectionPath.length > 0) {\n return `Section ${sectionPath.join(\" > \")}`;\n }\n\n return undefined;\n};\n\nconst buildProvenanceLabel = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const threadTopic = getContextString(metadata.threadTopic);\n const replyDepth = getContextNumber(metadata.replyDepth);\n const threadMessageCount = getContextNumber(metadata.threadMessageCount);\n const threadRootMessageId = getContextString(metadata.threadRootMessageId);\n const from = getContextString(metadata.from);\n const sentAt =\n formatTimestampLabel(metadata.sentAt) ??\n formatTimestampLabel(metadata.receivedAt);\n const speaker = getContextString(metadata.speaker);\n const mediaKind = getContextString(metadata.mediaKind);\n const transcriptSource = getContextString(metadata.transcriptSource);\n const mediaSpeakerCount = getContextNumber(metadata.mediaSpeakerCount);\n const mediaSegmentCount = getContextNumber(metadata.mediaSegmentCount);\n const mediaSegmentGroupSize = getContextNumber(\n metadata.mediaSegmentGroupSize,\n );\n const mediaSegmentGroupIndex = getContextNumber(\n metadata.mediaSegmentGroupIndex,\n );\n const mediaChannel = getContextString(metadata.mediaChannel);\n const mediaDurationLabel = formatMediaDurationLabel(metadata.mediaDurationMs);\n const mediaSegmentWindowDurationLabel = formatMediaDurationLabel(\n metadata.mediaSegmentGroupDurationMs,\n );\n const mediaSegmentGapLabel = formatMediaDurationLabel(\n metadata.mediaSegmentGapFromPreviousMs,\n );\n const spreadsheetHeaders = getSpreadsheetHeaders(metadata);\n const pdfTableHeaders = Array.isArray(metadata.pdfTableHeaders)\n ? metadata.pdfTableHeaders\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const pdfTableColumnCount = getContextNumber(metadata.pdfTableColumnCount);\n const pdfTableBodyRowCount = getContextNumber(metadata.pdfTableBodyRowCount);\n const spreadsheetColumnRange = formatSpreadsheetColumnRange(\n getContextString(metadata.spreadsheetColumnStart),\n getContextString(metadata.spreadsheetColumnEnd),\n );\n const slideNotesText = getContextString(metadata.slideNotesText);\n const pdfTextMode = getContextString(metadata.pdfTextMode);\n const pdfEvidenceMode = getContextString(metadata.pdfEvidenceMode);\n const pdfEvidenceOrigin = getContextString(metadata.pdfEvidenceOrigin);\n const pdfEvidenceSupplement = getContextString(\n metadata.pdfEvidenceSupplement,\n );\n const pdfTextKind = getContextString(metadata.pdfTextKind);\n const pdfSemanticRole = getContextString(metadata.pdfSemanticRole);\n const officeBlockKind = getContextString(metadata.officeBlockKind);\n const officeListContextText = getContextString(\n metadata.officeListContextText,\n );\n const officeListGroupItemCount = getContextNumber(\n metadata.officeListGroupItemCount,\n );\n const officeListLevelsLabel = formatOfficeListLevelsLabel(\n metadata.officeListLevels,\n );\n const officeTableHeaders = Array.isArray(metadata.officeTableHeaders)\n ? metadata.officeTableHeaders\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const officeTableColumnCount = getContextNumber(\n metadata.officeTableColumnCount,\n );\n const officeTableBodyRowCount = getContextNumber(\n metadata.officeTableBodyRowCount,\n );\n const officeTableBodyRowStart = getContextNumber(\n metadata.officeTableBodyRowStart,\n );\n const officeTableBodyRowEnd = getContextNumber(\n metadata.officeTableBodyRowEnd,\n );\n const officeTableContextText = getContextString(\n metadata.officeTableContextText,\n );\n const officeTableFollowUpText = getContextString(\n metadata.officeTableFollowUpText,\n );\n const ocrEngine = getContextString(metadata.ocrEngine);\n const extractorRegistryMatch = getContextString(\n metadata.extractorRegistryMatch,\n );\n const chunkingProfile = getContextString(metadata.chunkingProfile);\n const archiveDepth = getContextNumber(metadata.archiveDepth);\n const archiveNestedDepth = getContextNumber(metadata.archiveNestedDepth);\n const archiveContainerPath = getContextString(metadata.archiveContainerPath);\n const archiveRootName = getContextString(metadata.archiveRootName);\n const sourceAwareChunkReason = formatSourceAwareChunkReason(\n metadata.sourceAwareChunkReason,\n );\n const sourceAwareUnitScope = buildSourceAwareUnitScopeLabel(metadata);\n const spreadsheetTableLabel = formatSpreadsheetTableLabel(\n getContextNumber(metadata.spreadsheetTableIndex),\n getContextNumber(metadata.spreadsheetTableCount),\n );\n const ocrConfidence =\n getContextNumber(metadata.ocrRegionConfidence) ??\n getContextNumber(metadata.ocrConfidence);\n const ocrAverageConfidence =\n getContextNumber(metadata.ocrPageAverageConfidence) ??\n getContextNumber(metadata.ocrAverageConfidence);\n const ocrMinConfidence =\n getContextNumber(metadata.ocrPageMinConfidence) ??\n getContextNumber(metadata.ocrMinConfidence);\n const ocrMaxConfidence =\n getContextNumber(metadata.ocrPageMaxConfidence) ??\n getContextNumber(metadata.ocrMaxConfidence);\n const ocrRegionCount = getContextNumber(metadata.ocrRegionCount);\n const pdfTableBodyRowStart = getContextNumber(metadata.pdfTableBodyRowStart);\n const pdfTableBodyRowEnd = getContextNumber(metadata.pdfTableBodyRowEnd);\n\n const labels = [\n pdfTextMode ? `PDF ${pdfTextMode}` : \"\",\n pdfEvidenceMode ? `PDF evidence ${pdfEvidenceMode}` : \"\",\n pdfEvidenceOrigin ? `PDF origin ${pdfEvidenceOrigin}` : \"\",\n pdfEvidenceSupplement ? `PDF supplement ${pdfEvidenceSupplement}` : \"\",\n pdfSemanticRole === \"figure_caption\" ? \"PDF figure caption\" : \"\",\n pdfSemanticRole === \"figure_body\" ? \"PDF figure body\" : \"\",\n pdfSemanticRole === \"figure_caption\"\n ? \"\"\n : pdfSemanticRole === \"figure_body\"\n ? \"\"\n : pdfTextKind === \"table_like\"\n ? \"PDF table block\"\n : pdfTextKind === \"paragraph\"\n ? \"PDF text block\"\n : \"\",\n officeBlockKind ? `Office ${officeBlockKind}` : \"\",\n typeof officeListGroupItemCount === \"number\"\n ? `Office list ${officeListGroupItemCount} items`\n : \"\",\n officeListLevelsLabel ?? \"\",\n ocrEngine ? `OCR ${ocrEngine}` : \"\",\n extractorRegistryMatch ? `Extractor ${extractorRegistryMatch}` : \"\",\n chunkingProfile ? `Chunking ${chunkingProfile}` : \"\",\n sourceAwareChunkReason ?? \"\",\n sourceAwareUnitScope ?? \"\",\n typeof ocrConfidence === \"number\"\n ? `Confidence ${ocrConfidence.toFixed(2)}`\n : \"\",\n typeof ocrAverageConfidence === \"number\" &&\n ocrAverageConfidence !== ocrConfidence\n ? `Average ${ocrAverageConfidence.toFixed(2)}`\n : \"\",\n typeof ocrMinConfidence === \"number\" &&\n typeof ocrMaxConfidence === \"number\" &&\n ocrMinConfidence !== ocrMaxConfidence\n ? `Range ${ocrMinConfidence.toFixed(2)}-${ocrMaxConfidence.toFixed(2)}`\n : \"\",\n typeof ocrRegionCount === \"number\" ? `${ocrRegionCount} regions` : \"\",\n pdfTableHeaders.length > 0 ? `PDF table ${pdfTableHeaders.join(\", \")}` : \"\",\n typeof pdfTableColumnCount === \"number\"\n ? `PDF table ${pdfTableColumnCount} cols`\n : \"\",\n typeof pdfTableBodyRowCount === \"number\"\n ? `PDF table ${pdfTableBodyRowCount} body rows`\n : \"\",\n typeof pdfTableBodyRowStart === \"number\" &&\n typeof pdfTableBodyRowEnd === \"number\"\n ? pdfTableBodyRowStart === pdfTableBodyRowEnd\n ? `PDF table row ${pdfTableBodyRowStart}`\n : `PDF table rows ${pdfTableBodyRowStart}-${pdfTableBodyRowEnd}`\n : \"\",\n officeListContextText ? `Office list context ${officeListContextText}` : \"\",\n officeTableHeaders.length > 0\n ? `Office table ${officeTableHeaders.join(\", \")}`\n : \"\",\n typeof officeTableColumnCount === \"number\"\n ? `Office table ${officeTableColumnCount} cols`\n : \"\",\n typeof officeTableBodyRowCount === \"number\"\n ? `Office table ${officeTableBodyRowCount} body rows`\n : \"\",\n typeof officeTableBodyRowStart === \"number\" &&\n typeof officeTableBodyRowEnd === \"number\"\n ? officeTableBodyRowStart === officeTableBodyRowEnd\n ? `Office table row ${officeTableBodyRowStart}`\n : `Office table rows ${officeTableBodyRowStart}-${officeTableBodyRowEnd}`\n : \"\",\n officeTableContextText\n ? `Office table context ${officeTableContextText}`\n : \"\",\n officeTableFollowUpText\n ? `Office table follow-up ${officeTableFollowUpText}`\n : \"\",\n spreadsheetHeaders.length > 0\n ? `Spreadsheet ${spreadsheetHeaders.join(\", \")}`\n : \"\",\n spreadsheetColumnRange ? `Spreadsheet ${spreadsheetColumnRange}` : \"\",\n spreadsheetTableLabel ? `Spreadsheet ${spreadsheetTableLabel}` : \"\",\n mediaKind ? `Media ${mediaKind}` : \"\",\n mediaSegmentCount ? `${mediaSegmentCount} segments` : \"\",\n mediaSegmentGroupSize ? `${mediaSegmentGroupSize} grouped segments` : \"\",\n mediaSegmentGroupIndex !== undefined\n ? `Segment group ${mediaSegmentGroupIndex + 1}`\n : \"\",\n mediaChannel ? `Channel ${mediaChannel}` : \"\",\n mediaSpeakerCount ? `${mediaSpeakerCount} speakers` : \"\",\n mediaDurationLabel ? `Duration ${mediaDurationLabel}` : \"\",\n mediaSegmentWindowDurationLabel\n ? `Segment window ${mediaSegmentWindowDurationLabel}`\n : \"\",\n mediaSegmentGapLabel\n ? `Gap ${mediaSegmentGapLabel} from previous window`\n : \"\",\n transcriptSource ? `Transcript ${transcriptSource}` : \"\",\n threadTopic ? `Thread ${threadTopic}` : \"\",\n threadRootMessageId ? `Thread root ${threadRootMessageId}` : \"\",\n threadMessageCount ? `${threadMessageCount} thread messages` : \"\",\n replyDepth ? `Reply depth ${replyDepth}` : \"\",\n slideNotesText ? \"Speaker notes\" : \"\",\n archiveDepth ? `Archive depth ${archiveDepth}` : \"\",\n archiveNestedDepth ? `Archive nested depth ${archiveNestedDepth}` : \"\",\n archiveContainerPath ? `Archive container ${archiveContainerPath}` : \"\",\n archiveRootName ? `Archive root ${archiveRootName}` : \"\",\n speaker ? `Speaker ${speaker}` : \"\",\n from ? `Sender ${from}` : \"\",\n sentAt ? `Sent ${sentAt}` : \"\",\n ].filter((value) => value.length > 0);\n\n return labels.length > 0 ? labels.join(\" · \") : undefined;\n};\n\nexport const buildRAGSourceLabels = ({\n metadata,\n source,\n title,\n}: {\n metadata?: Record<string, unknown>;\n source?: string;\n title?: string;\n}): RAGSourceLabels | undefined => {\n const contextLabel = buildContextLabel(metadata);\n const locatorLabel = buildLocatorLabel(metadata, source, title);\n const provenanceLabel = buildProvenanceLabel(metadata);\n\n if (!contextLabel && !locatorLabel && !provenanceLabel) {\n return undefined;\n }\n\n return {\n contextLabel,\n locatorLabel,\n provenanceLabel,\n };\n};\n\nexport const buildRAGChunkStructure = (\n metadata?: Record<string, unknown>,\n): RAGChunkStructure | undefined => {\n if (!metadata) {\n return undefined;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath.filter(\n (value): value is string =>\n typeof value === \"string\" && value.trim().length > 0,\n )\n : undefined;\n const sectionKind =\n metadata.sectionKind === \"markdown_heading\" ||\n metadata.sectionKind === \"html_heading\" ||\n metadata.sectionKind === \"office_heading\" ||\n metadata.sectionKind === \"office_block\" ||\n metadata.sectionKind === \"pdf_block\" ||\n metadata.sectionKind === \"spreadsheet_rows\" ||\n metadata.sectionKind === \"presentation_slide\"\n ? metadata.sectionKind\n : undefined;\n const section: NonNullable<RAGChunkStructure[\"section\"]> = {\n depth: getContextNumber(metadata.sectionDepth),\n kind: sectionKind,\n path: sectionPath && sectionPath.length > 0 ? sectionPath : undefined,\n title: getContextString(metadata.sectionTitle),\n };\n const sequence: NonNullable<RAGChunkStructure[\"sequence\"]> = {\n nextChunkId: getContextString(metadata.nextChunkId),\n previousChunkId: getContextString(metadata.previousChunkId),\n sectionChunkCount: getContextNumber(metadata.sectionChunkCount),\n sectionChunkId: getContextString(metadata.sectionChunkId),\n sectionChunkIndex: getContextNumber(metadata.sectionChunkIndex),\n };\n\n if (\n !section.title &&\n (!section.path || section.path.length === 0) &&\n typeof section.depth !== \"number\" &&\n !section.kind &&\n !sequence.nextChunkId &&\n !sequence.previousChunkId &&\n typeof sequence.sectionChunkCount !== \"number\" &&\n !sequence.sectionChunkId &&\n typeof sequence.sectionChunkIndex !== \"number\"\n ) {\n return undefined;\n }\n\n return {\n section:\n section.title ||\n (section.path && section.path.length > 0) ||\n typeof section.depth === \"number\" ||\n section.kind\n ? section\n : undefined,\n sequence:\n sequence.nextChunkId ||\n sequence.previousChunkId ||\n typeof sequence.sectionChunkCount === \"number\" ||\n sequence.sectionChunkId ||\n typeof sequence.sectionChunkIndex === \"number\"\n ? sequence\n : undefined,\n };\n};\n\nconst buildExcerpt = (text: string, maxLength = 160) => {\n const normalized = text.replaceAll(/\\s+/g, \" \").trim();\n if (normalized.length <= maxLength) {\n return normalized;\n }\n\n return `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;\n};\n\ntype ExcerptChunkInput = Pick<\n RAGSource,\n \"chunkId\" | \"metadata\" | \"structure\" | \"text\"\n>;\n\nexport const buildRAGChunkExcerpts = (\n chunks: ExcerptChunkInput[],\n activeChunkId?: string,\n): RAGChunkExcerpts | undefined => {\n if (chunks.length === 0) {\n return undefined;\n }\n\n const graph = buildRAGChunkGraph(\n chunks.map((chunk) => ({\n chunkId: chunk.chunkId,\n metadata: chunk.metadata,\n structure: chunk.structure,\n })),\n );\n const navigation = buildRAGChunkGraphNavigation(graph, activeChunkId);\n const activeChunk =\n chunks.find((chunk) => chunk.chunkId === navigation.activeChunkId) ??\n chunks[0];\n if (!activeChunk) {\n return undefined;\n }\n\n const chunkMap = new Map(chunks.map((chunk) => [chunk.chunkId, chunk]));\n const orderedSectionIds =\n navigation.sectionNodes.length > 0\n ? navigation.sectionNodes.map((node) => node.chunkId)\n : [activeChunk.chunkId];\n const orderedWindowIds =\n navigation.sectionNodes.length > 0\n ? (() => {\n const activeIndex = navigation.sectionNodes.findIndex(\n (node) => node.chunkId === activeChunk.chunkId,\n );\n const startIndex = Math.max(0, activeIndex - 2);\n const endIndex = Math.min(\n navigation.sectionNodes.length,\n activeIndex + 3,\n );\n return navigation.sectionNodes\n .slice(startIndex, endIndex)\n .map((node) => node.chunkId);\n })()\n : [\n navigation.previousNode?.chunkId,\n activeChunk.chunkId,\n navigation.nextNode?.chunkId,\n ].filter(\n (chunkId, index, ids): chunkId is string =>\n Boolean(chunkId) && ids.indexOf(chunkId) === index,\n );\n\n const collectText = (chunkIds: string[]) =>\n chunkIds\n .map((chunkId) => chunkMap.get(chunkId)?.text)\n .filter((text): text is string => typeof text === \"string\")\n .join(\"\\n\\n\");\n\n return {\n chunkExcerpt: buildExcerpt(activeChunk.text, 160),\n sectionExcerpt: buildExcerpt(collectText(orderedSectionIds), 320),\n windowExcerpt: buildExcerpt(collectText(orderedWindowIds), 240),\n };\n};\n\nexport const buildRAGPreferredExcerpt = (\n excerpts?: RAGChunkExcerpts,\n structure?: RAGChunkStructure,\n) => {\n const selection = buildRAGExcerptSelection(excerpts, structure);\n return selection.excerpt;\n};\n\nexport const buildRAGExcerptSelection = (\n excerpts?: RAGChunkExcerpts,\n structure?: RAGChunkStructure,\n): RAGExcerptSelection & { excerpt: string } => {\n if (!excerpts) {\n return {\n excerpt: \"\",\n mode: \"chunk\",\n reason: \"single_chunk\",\n };\n }\n\n const chunkLength = excerpts.chunkExcerpt.trim().length;\n const sectionChunkCount = structure?.sequence?.sectionChunkCount ?? 1;\n if (sectionChunkCount > 1 && chunkLength > 0 && chunkLength < 72) {\n if (sectionChunkCount <= 3 && excerpts.sectionExcerpt.trim().length > 0) {\n return {\n excerpt: excerpts.sectionExcerpt,\n mode: \"section\",\n reason: \"section_small_enough\",\n };\n }\n if (excerpts.windowExcerpt.trim().length > 0) {\n return {\n excerpt: excerpts.windowExcerpt,\n mode: \"window\",\n reason: \"section_too_large_use_window\",\n };\n }\n\n return {\n excerpt: excerpts.chunkExcerpt,\n mode: \"chunk\",\n reason: \"chunk_too_narrow\",\n };\n }\n\n return {\n excerpt: excerpts.chunkExcerpt,\n mode: \"chunk\",\n reason: sectionChunkCount > 1 ? \"chunk_too_narrow\" : \"single_chunk\",\n };\n};\n\nexport const buildRAGExcerptModeCounts = (\n selections: Array<RAGExcerptSelection | undefined>,\n): RAGExcerptModeCounts =>\n selections.reduce<RAGExcerptModeCounts>(\n (counts, selection) => {\n if (selection) {\n counts[selection.mode] += 1;\n }\n return counts;\n },\n { chunk: 0, section: 0, window: 0 },\n );\n\ntype GraphChunkInput = Pick<\n RAGSource,\n \"chunkId\" | \"metadata\" | \"source\" | \"title\" | \"labels\" | \"structure\"\n> &\n Partial<Pick<RAGSource, \"score\">>;\n\nexport const buildRAGChunkGraph = (\n chunks: GraphChunkInput[],\n): RAGChunkGraph => {\n const nodes: RAGChunkGraphNode[] = [];\n const edges: RAGChunkGraphEdge[] = [];\n const edgeKeys = new Set<string>();\n const sections = new Map<string, RAGChunkGraphSectionGroup>();\n\n for (const chunk of chunks) {\n const labels =\n chunk.labels ??\n buildRAGSourceLabels({\n metadata: chunk.metadata,\n source: chunk.source,\n title: chunk.title,\n });\n const structure = chunk.structure ?? buildRAGChunkStructure(chunk.metadata);\n\n nodes.push({\n chunkId: chunk.chunkId,\n contextLabel: labels?.contextLabel,\n label: chunk.source ?? chunk.title ?? chunk.chunkId,\n locatorLabel: labels?.locatorLabel,\n provenanceLabel: labels?.provenanceLabel,\n score: chunk.score,\n source: chunk.source,\n structure,\n title: chunk.title,\n });\n\n const previousChunkId = structure?.sequence?.previousChunkId;\n if (previousChunkId) {\n const key = `previous:${previousChunkId}:${chunk.chunkId}`;\n if (!edgeKeys.has(key)) {\n edgeKeys.add(key);\n edges.push({\n fromChunkId: previousChunkId,\n relation: \"previous\",\n toChunkId: chunk.chunkId,\n });\n }\n }\n\n const nextChunkId = structure?.sequence?.nextChunkId;\n if (nextChunkId) {\n const key = `next:${chunk.chunkId}:${nextChunkId}`;\n if (!edgeKeys.has(key)) {\n edgeKeys.add(key);\n edges.push({\n fromChunkId: chunk.chunkId,\n relation: \"next\",\n toChunkId: nextChunkId,\n });\n }\n }\n\n const sectionId = structure?.sequence?.sectionChunkId;\n if (sectionId) {\n const existing = sections.get(sectionId);\n if (!existing) {\n sections.set(sectionId, {\n childSectionIds: [],\n chunkCount: structure.sequence?.sectionChunkCount ?? 1,\n chunkIds: [chunk.chunkId],\n depth: structure.section?.depth,\n id: sectionId,\n kind: structure.section?.kind,\n leadChunkId: chunk.chunkId,\n path: structure.section?.path,\n title: structure.section?.title,\n });\n continue;\n }\n\n if (!existing.chunkIds.includes(chunk.chunkId)) {\n existing.chunkIds.push(chunk.chunkId);\n }\n existing.chunkCount = Math.max(\n existing.chunkCount,\n structure.sequence?.sectionChunkCount ?? existing.chunkCount,\n );\n }\n }\n\n for (const section of sections.values()) {\n section.chunkIds.sort((left, right) => {\n const leftNode = nodes.find((node) => node.chunkId === left);\n const rightNode = nodes.find((node) => node.chunkId === right);\n const leftIndex =\n leftNode?.structure?.sequence?.sectionChunkIndex ??\n Number.MAX_SAFE_INTEGER;\n const rightIndex =\n rightNode?.structure?.sequence?.sectionChunkIndex ??\n Number.MAX_SAFE_INTEGER;\n if (leftIndex !== rightIndex) {\n return leftIndex - rightIndex;\n }\n\n return left.localeCompare(right);\n });\n section.leadChunkId = section.chunkIds[0];\n }\n\n const sectionPathIndex = new Map<string, RAGChunkGraphSectionGroup>();\n for (const section of sections.values()) {\n const path =\n section.path && section.path.length > 0\n ? section.path\n : section.title\n ? [section.title]\n : undefined;\n if (path && path.length > 0) {\n sectionPathIndex.set(path.join(\"\\u0000\"), section);\n }\n }\n\n for (const section of sections.values()) {\n const path =\n section.path && section.path.length > 0\n ? section.path\n : section.title\n ? [section.title]\n : undefined;\n if (!path || path.length < 2) {\n continue;\n }\n\n const parent = sectionPathIndex.get(path.slice(0, -1).join(\"\\u0000\"));\n if (!parent || parent.id === section.id) {\n continue;\n }\n\n section.parentSectionId = parent.id;\n if (!parent.childSectionIds.includes(section.id)) {\n parent.childSectionIds.push(section.id);\n }\n\n if (parent.leadChunkId && section.leadChunkId) {\n const parentKey = `section_parent:${section.leadChunkId}:${parent.leadChunkId}`;\n if (!edgeKeys.has(parentKey)) {\n edgeKeys.add(parentKey);\n edges.push({\n fromChunkId: section.leadChunkId,\n relation: \"section_parent\",\n toChunkId: parent.leadChunkId,\n });\n }\n\n const childKey = `section_child:${parent.leadChunkId}:${section.leadChunkId}`;\n if (!edgeKeys.has(childKey)) {\n edgeKeys.add(childKey);\n edges.push({\n fromChunkId: parent.leadChunkId,\n relation: \"section_child\",\n toChunkId: section.leadChunkId,\n });\n }\n }\n }\n\n nodes.sort((left, right) => {\n const leftSection =\n left.structure?.sequence?.sectionChunkIndex ?? Number.MAX_SAFE_INTEGER;\n const rightSection =\n right.structure?.sequence?.sectionChunkIndex ?? Number.MAX_SAFE_INTEGER;\n if (leftSection !== rightSection) {\n return leftSection - rightSection;\n }\n\n const leftScore = left.score ?? Number.NEGATIVE_INFINITY;\n const rightScore = right.score ?? Number.NEGATIVE_INFINITY;\n if (leftScore !== rightScore) {\n return rightScore - leftScore;\n }\n\n return left.label.localeCompare(right.label);\n });\n\n return {\n edges,\n nodes,\n sections: [...sections.values()].sort((left, right) =>\n (left.title ?? left.id).localeCompare(right.title ?? right.id),\n ),\n };\n};\n\nexport const buildRAGChunkPreviewGraph = (\n preview: Pick<RAGDocumentChunkPreview, \"chunks\" | \"document\">,\n): RAGChunkGraph =>\n buildRAGChunkGraph(\n preview.chunks.map((chunk) => ({\n chunkId: chunk.chunkId,\n labels: chunk.labels,\n metadata: chunk.metadata,\n source: chunk.source ?? preview.document.source,\n structure: chunk.structure,\n title: chunk.title ?? preview.document.title,\n })),\n );\n\nexport const buildRAGChunkPreviewNavigation = (\n preview: Pick<RAGDocumentChunkPreview, \"chunks\" | \"document\">,\n activeChunkId?: string,\n): RAGChunkGraphNavigation =>\n buildRAGChunkGraphNavigation(\n buildRAGChunkPreviewGraph(preview),\n activeChunkId,\n );\n\nexport const buildRAGChunkGraphNavigation = (\n graph: RAGChunkGraph,\n activeChunkId?: string,\n): RAGChunkGraphNavigation => {\n if (graph.nodes.length === 0) {\n return {\n activeChunkId,\n childSections: [],\n siblingSections: [],\n sectionNodes: [],\n };\n }\n\n const activeNode =\n (activeChunkId\n ? graph.nodes.find((node) => node.chunkId === activeChunkId)\n : undefined) ?? graph.nodes[0];\n const resolvedActiveChunkId = activeNode?.chunkId;\n const previousNode = activeNode?.structure?.sequence?.previousChunkId\n ? graph.nodes.find(\n (node) =>\n node.chunkId === activeNode.structure?.sequence?.previousChunkId,\n )\n : undefined;\n const nextNode = activeNode?.structure?.sequence?.nextChunkId\n ? graph.nodes.find(\n (node) => node.chunkId === activeNode.structure?.sequence?.nextChunkId,\n )\n : undefined;\n const section = activeNode?.structure?.sequence?.sectionChunkId\n ? graph.sections.find(\n (entry) => entry.id === activeNode.structure?.sequence?.sectionChunkId,\n )\n : undefined;\n const parentSection = section?.parentSectionId\n ? graph.sections.find((entry) => entry.id === section.parentSectionId)\n : undefined;\n const childSections = section\n ? section.childSectionIds\n .map((sectionId) =>\n graph.sections.find((entry) => entry.id === sectionId),\n )\n .filter((entry): entry is RAGChunkGraphSectionGroup => Boolean(entry))\n : [];\n const siblingSections = section?.parentSectionId\n ? graph.sections.filter(\n (entry) =>\n entry.parentSectionId === section.parentSectionId &&\n entry.id !== section.id,\n )\n : [];\n const sectionNodes = section\n ? section.chunkIds\n .map((chunkId) => graph.nodes.find((node) => node.chunkId === chunkId))\n .filter((node): node is RAGChunkGraphNode => Boolean(node))\n : activeNode\n ? [activeNode]\n : [];\n\n return {\n activeChunkId: resolvedActiveChunkId,\n activeNode,\n childSections,\n nextNode,\n parentSection,\n previousNode,\n section,\n siblingSections,\n sectionNodes,\n };\n};\nexport const buildRAGRetrievedState = (messages: AIMessage[]) => {\n const message = getLatestRetrievedMessage(messages);\n\n if (!message) {\n return null;\n }\n\n const sources = message.sources ?? [];\n const citations = buildRAGCitations(sources);\n const sectionDiagnostics = buildRAGSectionRetrievalDiagnostics(\n sources,\n isRAGRetrievalTrace(message.retrievalTrace)\n ? message.retrievalTrace\n : undefined,\n );\n const sourceSummaries = buildRAGSourceSummaries(sources);\n const groundedAnswer = buildRAGGroundedAnswer(message.content, sources);\n\n return {\n citationReferenceMap: buildRAGCitationReferenceMap(citations),\n citations,\n conversationId: message.conversationId,\n excerptModeCounts: buildRAGExcerptModeCounts([\n ...citations.map((citation) => citation.excerptSelection),\n ...sourceSummaries.map((summary) => summary.excerptSelection),\n ]),\n groundedAnswer,\n messageId: message.id,\n retrievalDurationMs: message.retrievalDurationMs,\n retrievalStartedAt: message.retrievalStartedAt,\n retrievedAt: message.retrievedAt,\n trace: isRAGRetrievalTrace(message.retrievalTrace)\n ? message.retrievalTrace\n : undefined,\n sectionDiagnostics,\n sourceGroups: buildRAGSourceGroups(sources),\n sourceSummaries,\n sources,\n };\n};\nexport const buildRAGSourceSummaries = (sources: RAGSource[]) => {\n const sourceGroups = buildRAGSourceGroups(sources);\n const citations = buildRAGCitations(sources);\n const citationReferenceMap = buildRAGCitationReferenceMap(citations);\n\n return sourceGroups.map<RAGSourceSummary>((group) => {\n const groupCitations = citations.filter((citation) =>\n group.chunks.some((chunk) => chunk.chunkId === citation.chunkId),\n );\n const leadChunk = getPreferredSourceLeadChunk(group.chunks);\n const excerpts = leadChunk\n ? buildRAGChunkExcerpts(group.chunks, leadChunk.chunkId)\n : undefined;\n const structure =\n leadChunk?.structure ?? buildRAGChunkStructure(leadChunk?.metadata);\n const excerptSelection = buildRAGExcerptSelection(excerpts, structure);\n\n return {\n bestScore: group.bestScore,\n citationNumbers: groupCitations.map(\n (citation) => citationReferenceMap[citation.chunkId] ?? 0,\n ),\n citations: groupCitations,\n chunkIds: group.chunks.map((chunk) => chunk.chunkId),\n contextLabel:\n leadChunk?.labels?.contextLabel ??\n buildContextLabel(leadChunk?.metadata),\n count: group.count,\n excerpt: excerptSelection.excerpt || buildExcerpt(leadChunk?.text ?? \"\"),\n excerpts,\n excerptSelection,\n key: group.key,\n label: group.label,\n locatorLabel:\n leadChunk?.labels?.locatorLabel ??\n buildLocatorLabel(\n leadChunk?.metadata,\n leadChunk?.source,\n leadChunk?.title,\n ),\n provenanceLabel:\n leadChunk?.labels?.provenanceLabel ??\n buildProvenanceLabel(leadChunk?.metadata),\n structure,\n source: group.source,\n title: group.title,\n };\n });\n};\n\nconst getSectionPathFromSource = (source: RAGSource) => {\n const path =\n source.structure?.section?.path ??\n (Array.isArray(source.metadata?.sectionPath)\n ? source.metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : []);\n\n return path.length > 0 ? path : undefined;\n};\n\nconst isBlockAwareContextLabel = (value?: string) =>\n typeof value === \"string\" &&\n (value.startsWith(\"PDF \") ||\n value.startsWith(\"Office \") ||\n value.startsWith(\"Slide \"));\n\nconst getStructuredSectionScoreWeight = (\n metadata?: Record<string, unknown>,\n) => {\n if (!metadata) {\n return 1;\n }\n\n const pdfTextKind = getContextString(metadata.pdfTextKind);\n const officeBlockKind = getContextString(metadata.officeBlockKind);\n const sectionKind = getContextString(metadata.sectionKind);\n const slideTitle = getContextString(metadata.slideTitle);\n const slideNotesText = getContextString(metadata.slideNotesText);\n\n if (pdfTextKind === \"table_like\") {\n return 1.28;\n }\n if (officeBlockKind === \"table\" || officeBlockKind === \"list\") {\n return 1.24;\n }\n if (\n sectionKind === \"pdf_block\" ||\n sectionKind === \"office_block\" ||\n officeBlockKind === \"paragraph\" ||\n pdfTextKind === \"paragraph\"\n ) {\n return 1.12;\n }\n if (sectionKind === \"presentation_slide\" && slideNotesText) {\n return 1.2;\n }\n if (sectionKind === \"presentation_slide\" && slideTitle) {\n return 1.14;\n }\n\n return 1;\n};\n\nconst getStructuredSourceLeadScore = (source: RAGSource) =>\n source.score * getStructuredSectionScoreWeight(source.metadata);\n\nconst getPDFLeadEvidencePreference = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return 0;\n }\n\n const pdfEvidenceMode = getContextString(metadata.pdfEvidenceMode);\n const pdfEvidenceOrigin = getContextString(metadata.pdfEvidenceOrigin);\n const pdfEvidenceSupplement = getContextString(\n metadata.pdfEvidenceSupplement,\n );\n\n if (\n pdfEvidenceMode === \"hybrid\" &&\n pdfEvidenceOrigin === \"native\" &&\n pdfEvidenceSupplement === \"ocr\"\n ) {\n return 3;\n }\n if (pdfEvidenceMode === \"native\" && pdfEvidenceOrigin === \"native\") {\n return 2;\n }\n if (pdfEvidenceMode === \"ocr\" && pdfEvidenceOrigin === \"ocr\") {\n return 1;\n }\n\n return 0;\n};\n\nconst getPDFLeadScope = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const pageNumber =\n getContextNumber(metadata.pageNumber) ??\n getContextNumber(metadata.page) ??\n (typeof metadata.pageIndex === \"number\"\n ? metadata.pageIndex + 1\n : undefined);\n const sectionTitle = getContextString(metadata.sectionTitle);\n const sourceNativeKind = getContextString(metadata.sourceNativeKind);\n\n if (typeof pageNumber !== \"number\" && !sectionTitle && !sourceNativeKind) {\n return undefined;\n }\n\n return {\n pageNumber,\n sectionTitle,\n sourceNativeKind,\n };\n};\n\ntype OfficeLeadScope = {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n};\n\ntype GenericStructuredLeadScope = {\n familyPath: string[];\n kind: \"presentation_slide\" | \"spreadsheet_rows\";\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n};\n\nconst getOfficeLeadScope = (\n metadata?: Record<string, unknown>,\n): OfficeLeadScope | undefined => {\n if (!metadata) {\n return undefined;\n }\n\n const officeBlockKindValue = getContextString(metadata.officeBlockKind);\n const officeBlockKind =\n officeBlockKindValue === \"table\" ||\n officeBlockKindValue === \"list\" ||\n officeBlockKindValue === \"paragraph\"\n ? officeBlockKindValue\n : undefined;\n if (\n officeBlockKind !== \"table\" &&\n officeBlockKind !== \"list\" &&\n officeBlockKind !== \"paragraph\"\n ) {\n return undefined;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const officeContextText =\n officeBlockKind === \"table\"\n ? getContextString(metadata.officeTableContextText)\n : officeBlockKind === \"list\"\n ? getContextString(metadata.officeListContextText)\n : undefined;\n\n if (!sectionTitle) {\n return undefined;\n }\n\n return {\n blockKind: officeBlockKind,\n familyPath: (() => {\n const explicitGenericFamilyPath = Array.isArray(\n metadata.sectionFamilyPath,\n )\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitGenericOrdinalPath = Array.isArray(\n metadata.sectionOrdinalPath,\n )\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n if (\n explicitGenericFamilyPath.length > 0 &&\n explicitGenericFamilyPath.length === explicitGenericOrdinalPath.length\n ) {\n return explicitGenericFamilyPath;\n }\n\n const explicitOfficeFamilyPath = Array.isArray(metadata.officeFamilyPath)\n ? metadata.officeFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n return explicitOfficeFamilyPath.length > 0\n ? explicitOfficeFamilyPath\n : sectionPath.map((value) => value.replace(/\\s+\\((\\d+)\\)$/, \"\").trim());\n })(),\n pathDepth: sectionPath.length,\n ordinalPath: (() => {\n const explicitGenericFamilyPath = Array.isArray(\n metadata.sectionFamilyPath,\n )\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitGenericOrdinalPath = Array.isArray(\n metadata.sectionOrdinalPath,\n )\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n if (\n explicitGenericFamilyPath.length > 0 &&\n explicitGenericFamilyPath.length === explicitGenericOrdinalPath.length\n ) {\n return explicitGenericOrdinalPath;\n }\n\n const explicitOfficeOrdinalPath = Array.isArray(\n metadata.officeOrdinalPath,\n )\n ? metadata.officeOrdinalPath\n .map((value) =>\n typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined,\n )\n .filter((value): value is number => typeof value === \"number\")\n : [];\n return explicitOfficeOrdinalPath.length > 0\n ? explicitOfficeOrdinalPath\n : sectionPath.map((value) => {\n const match = value.match(/\\((\\d+)\\)$/);\n return match ? Number.parseInt(match[1] ?? \"1\", 10) : 1;\n });\n })(),\n sectionFamilyKey:\n getContextString(metadata.sectionSiblingFamilyKey) ??\n getContextString(metadata.officeSiblingFamilyKey) ??\n sectionPath\n .at(-1)\n ?.replace(/\\s+\\((\\d+)\\)$/, \"\")\n .trim() ??\n sectionTitle,\n sectionOrdinal:\n getContextNumber(metadata.sectionSiblingOrdinal) ??\n getContextNumber(metadata.officeSiblingOrdinal) ??\n (() => {\n const match = sectionTitle.match(/\\((\\d+)\\)$/);\n return match ? Number.parseInt(match[1] ?? \"1\", 10) : 1;\n })(),\n sectionTitle,\n hasContext: typeof officeContextText === \"string\",\n };\n};\n\nconst areOfficeLeadScopesComparable = (\n left:\n | {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n }\n | undefined,\n right:\n | {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n }\n | undefined,\n) => {\n if (!left || !right) {\n return false;\n }\n if (\n left.blockKind !== right.blockKind ||\n left.sectionFamilyKey !== right.sectionFamilyKey ||\n left.sectionOrdinal !== right.sectionOrdinal\n ) {\n return false;\n }\n const leftAncestorFamilyPath = left.familyPath.slice(0, -1);\n const rightAncestorFamilyPath = right.familyPath.slice(0, -1);\n const leftAncestorOrdinalPath = left.ordinalPath.slice(0, -1);\n const rightAncestorOrdinalPath = right.ordinalPath.slice(0, -1);\n const sharedDepth = Math.min(\n leftAncestorFamilyPath.length,\n rightAncestorFamilyPath.length,\n );\n for (let index = 0; index < sharedDepth; index += 1) {\n if (\n leftAncestorFamilyPath[index] !== rightAncestorFamilyPath[index] ||\n leftAncestorOrdinalPath[index] !== rightAncestorOrdinalPath[index]\n ) {\n return false;\n }\n }\n return true;\n};\n\nconst getGenericStructuredLeadScope = (\n metadata?: Record<string, unknown>,\n): GenericStructuredLeadScope | undefined => {\n if (!metadata || metadata.officeBlockKind || metadata.pageNumber) {\n return undefined;\n }\n\n const kind =\n metadata.sectionKind === \"spreadsheet_rows\" ||\n metadata.sectionKind === \"presentation_slide\"\n ? metadata.sectionKind\n : undefined;\n if (!kind) {\n return undefined;\n }\n\n const explicitFamilyPath = Array.isArray(metadata.sectionFamilyPath)\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitOrdinalPath = Array.isArray(metadata.sectionOrdinalPath)\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n let familyPath =\n explicitFamilyPath.length > 0 &&\n explicitFamilyPath.length === explicitOrdinalPath.length\n ? explicitFamilyPath\n : [];\n let ordinalPath =\n explicitFamilyPath.length > 0 &&\n explicitFamilyPath.length === explicitOrdinalPath.length\n ? explicitOrdinalPath\n : [];\n\n if (familyPath.length === 0) {\n if (kind === \"spreadsheet_rows\") {\n const sheetName = getContextString(metadata.sheetName) ?? \"Sheet\";\n const tableIndex = getContextNumber(metadata.spreadsheetTableIndex) ?? 1;\n familyPath = [sheetName, \"Spreadsheet Table\"];\n ordinalPath = [1, tableIndex];\n } else {\n const slideFamily = getContextString(metadata.slideTitle) ?? \"Slide\";\n const slideOrdinal =\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\" ? metadata.slideIndex + 1 : 1);\n familyPath = [slideFamily];\n ordinalPath = [slideOrdinal];\n }\n }\n\n const sectionFamilyKey =\n getContextString(metadata.sectionSiblingFamilyKey) ?? familyPath.at(-1);\n const sectionOrdinal =\n getContextNumber(metadata.sectionSiblingOrdinal) ?? ordinalPath.at(-1);\n if (!sectionFamilyKey || typeof sectionOrdinal !== \"number\") {\n return undefined;\n }\n\n return {\n familyPath,\n kind,\n ordinalPath,\n pathDepth: familyPath.length,\n sectionFamilyKey,\n sectionOrdinal,\n };\n};\n\nconst areGenericStructuredLeadScopesComparable = (\n left: GenericStructuredLeadScope | undefined,\n right: GenericStructuredLeadScope | undefined,\n) => {\n if (!left || !right) {\n return false;\n }\n if (\n left.kind !== right.kind ||\n left.sectionFamilyKey !== right.sectionFamilyKey ||\n left.sectionOrdinal !== right.sectionOrdinal\n ) {\n return false;\n }\n const leftAncestorFamilyPath = left.familyPath.slice(0, -1);\n const rightAncestorFamilyPath = right.familyPath.slice(0, -1);\n const leftAncestorOrdinalPath = left.ordinalPath.slice(0, -1);\n const rightAncestorOrdinalPath = right.ordinalPath.slice(0, -1);\n const sharedDepth = Math.min(\n leftAncestorFamilyPath.length,\n rightAncestorFamilyPath.length,\n );\n for (let index = 0; index < sharedDepth; index += 1) {\n if (\n leftAncestorFamilyPath[index] !== rightAncestorFamilyPath[index] ||\n leftAncestorOrdinalPath[index] !== rightAncestorOrdinalPath[index]\n ) {\n return false;\n }\n }\n return true;\n};\n\nconst getOfficeLeadEvidencePreference = (\n metadata?: Record<string, unknown>,\n) => {\n const scope = getOfficeLeadScope(metadata);\n if (!scope) {\n return 0;\n }\n\n return (\n scope.pathDepth * 10 +\n (scope.hasContext ? 1 : 0) +\n (scope.blockKind === \"list\" &&\n typeof metadata?.officeListGroupItemCount === \"number\" &&\n metadata.officeListGroupItemCount > 1\n ? 1\n : 0)\n );\n};\n\nconst getGenericStructuredLeadPreference = (\n metadata?: Record<string, unknown>,\n) => {\n const scope = getGenericStructuredLeadScope(metadata);\n if (!scope) {\n return 0;\n }\n\n return (\n scope.pathDepth * 10 +\n (scope.kind === \"spreadsheet_rows\" &&\n typeof metadata?.spreadsheetTableIndex === \"number\"\n ? 2\n : 0) +\n (Array.isArray(metadata?.spreadsheetHeaders) &&\n metadata.spreadsheetHeaders.length > 0\n ? 1\n : 0) +\n (typeof metadata?.slideNotesText === \"string\" &&\n metadata.slideNotesText.trim().length > 0\n ? 1\n : 0)\n );\n};\n\nconst getPreferredSourceLeadChunk = (chunks: RAGSource[]) =>\n chunks.slice().sort((left, right) => {\n const leftOfficeScope = getOfficeLeadScope(left.metadata);\n const rightOfficeScope = getOfficeLeadScope(right.metadata);\n if (\n left.source === right.source &&\n areOfficeLeadScopesComparable(leftOfficeScope, rightOfficeScope)\n ) {\n const leftOfficePreference = getOfficeLeadEvidencePreference(\n left.metadata,\n );\n const rightOfficePreference = getOfficeLeadEvidencePreference(\n right.metadata,\n );\n if (rightOfficePreference !== leftOfficePreference) {\n return rightOfficePreference - leftOfficePreference;\n }\n }\n const leftGenericScope = getGenericStructuredLeadScope(left.metadata);\n const rightGenericScope = getGenericStructuredLeadScope(right.metadata);\n if (\n left.source === right.source &&\n areGenericStructuredLeadScopesComparable(\n leftGenericScope,\n rightGenericScope,\n )\n ) {\n const leftGenericPreference = getGenericStructuredLeadPreference(\n left.metadata,\n );\n const rightGenericPreference = getGenericStructuredLeadPreference(\n right.metadata,\n );\n if (rightGenericPreference !== leftGenericPreference) {\n return rightGenericPreference - leftGenericPreference;\n }\n }\n const leftWeightedScore = getStructuredSourceLeadScore(left);\n const rightWeightedScore = getStructuredSourceLeadScore(right);\n if (rightWeightedScore !== leftWeightedScore) {\n return rightWeightedScore - leftWeightedScore;\n }\n const leftScope = getPDFLeadScope(left.metadata);\n const rightScope = getPDFLeadScope(right.metadata);\n if (\n left.source === right.source &&\n leftScope &&\n rightScope &&\n ((leftScope.sectionTitle &&\n rightScope.sectionTitle &&\n leftScope.sectionTitle === rightScope.sectionTitle) ||\n (typeof leftScope.pageNumber === \"number\" &&\n typeof rightScope.pageNumber === \"number\" &&\n leftScope.pageNumber === rightScope.pageNumber))\n ) {\n const leftEvidencePreference = getPDFLeadEvidencePreference(\n left.metadata,\n );\n const rightEvidencePreference = getPDFLeadEvidencePreference(\n right.metadata,\n );\n if (rightEvidencePreference !== leftEvidencePreference) {\n return rightEvidencePreference - leftEvidencePreference;\n }\n }\n if (right.score !== left.score) {\n return right.score - left.score;\n }\n\n return left.chunkId.localeCompare(right.chunkId);\n })[0];\n\nexport const buildRAGSectionRetrievalDiagnostics = (\n sources: RAGSource[],\n trace?: RAGRetrievalTrace,\n): RAGSectionRetrievalDiagnostic[] => {\n const totalScore = sources.reduce(\n (sum, source) =>\n sum + source.score * getStructuredSectionScoreWeight(source.metadata),\n 0,\n );\n if (sources.length === 0 || totalScore <= 0) {\n return [];\n }\n\n const sections = new Map<\n string,\n {\n key: string;\n label: string;\n path?: string[];\n parentLabel?: string;\n count: number;\n bestScore: number;\n totalScore: number;\n topChunkId?: string;\n topSource?: string;\n vectorHits: number;\n lexicalHits: number;\n hybridHits: number;\n primaryHits: number;\n transformedHits: number;\n variantHits: number;\n sourceSet: Set<string>;\n }\n >();\n\n for (const source of sources) {\n const structuredScore =\n source.score * getStructuredSectionScoreWeight(source.metadata);\n const path = getSectionPathFromSource(source);\n if (!path) {\n continue;\n }\n\n const key = path.join(\" > \");\n const label = path.at(-1) ?? key;\n const parentLabel =\n path.length > 1 ? path.slice(0, -1).join(\" > \") : undefined;\n const existing = sections.get(key);\n const channels = Array.isArray(source.metadata?.retrievalChannels)\n ? source.metadata.retrievalChannels.filter(\n (value): value is \"vector\" | \"lexical\" =>\n value === \"vector\" || value === \"lexical\",\n )\n : [];\n const isHybrid =\n channels.includes(\"vector\") && channels.includes(\"lexical\");\n const vectorHits = channels.includes(\"vector\") ? 1 : 0;\n const lexicalHits = channels.includes(\"lexical\") ? 1 : 0;\n const hybridHits = isHybrid ? 1 : 0;\n const queryOrigins = Array.isArray(source.metadata?.retrievalQueryOrigins)\n ? source.metadata.retrievalQueryOrigins.filter(\n (value): value is \"primary\" | \"transformed\" | \"variant\" =>\n value === \"primary\" ||\n value === \"transformed\" ||\n value === \"variant\",\n )\n : source.metadata?.retrievalQueryOrigin === \"primary\" ||\n source.metadata?.retrievalQueryOrigin === \"transformed\" ||\n source.metadata?.retrievalQueryOrigin === \"variant\"\n ? [source.metadata.retrievalQueryOrigin]\n : [];\n const primaryHits = queryOrigins.includes(\"primary\") ? 1 : 0;\n const transformedHits = queryOrigins.includes(\"transformed\") ? 1 : 0;\n const variantHits = queryOrigins.includes(\"variant\") ? 1 : 0;\n if (!existing) {\n sections.set(key, {\n bestScore: source.score,\n count: 1,\n hybridHits,\n key,\n label,\n lexicalHits,\n parentLabel,\n path,\n primaryHits,\n sourceSet: new Set(source.source ? [source.source] : []),\n topChunkId: source.chunkId,\n topSource: source.source,\n totalScore: structuredScore,\n transformedHits,\n variantHits,\n vectorHits,\n });\n continue;\n }\n\n existing.count += 1;\n existing.totalScore += structuredScore;\n if (source.source) {\n existing.sourceSet.add(source.source);\n }\n existing.vectorHits += vectorHits;\n existing.lexicalHits += lexicalHits;\n existing.hybridHits += hybridHits;\n existing.primaryHits += primaryHits;\n existing.transformedHits += transformedHits;\n existing.variantHits += variantHits;\n if (source.score > existing.bestScore) {\n existing.bestScore = source.score;\n existing.topChunkId = source.chunkId;\n existing.topSource = source.source;\n }\n }\n\n const diagnostics = [...sections.values()];\n const strongestBestHit = diagnostics.reduce(\n (highest, section) => Math.max(highest, section.bestScore),\n 0,\n );\n const parentLabelByKey = new Map(\n diagnostics.map((section) => [section.key, section.parentLabel] as const),\n );\n const stageSectionCounts = new Map(\n (trace?.steps ?? [])\n .filter(\n (step) =>\n Array.isArray(step.sectionCounts) && step.sectionCounts.length > 0,\n )\n .map((step) => [step.stage, step.sectionCounts ?? []] as const),\n );\n const stageSectionScores = new Map(\n (trace?.steps ?? [])\n .filter(\n (step) =>\n Array.isArray(step.sectionScores) && step.sectionScores.length > 0,\n )\n .map((step) => [step.stage, step.sectionScores ?? []] as const),\n );\n\n return diagnostics\n .map<RAGSectionRetrievalDiagnostic>((section) => {\n const siblingPool = diagnostics.filter(\n (entry) => entry.parentLabel === section.parentLabel,\n );\n const siblings = siblingPool.filter((entry) => entry.key !== section.key);\n const strongestSibling = siblings\n .slice()\n .sort((left, right) => right.totalScore - left.totalScore)[0];\n const parentTotal = siblingPool.reduce(\n (sum, entry) => sum + entry.totalScore,\n 0,\n );\n const scoreShare = section.totalScore / totalScore;\n const parentShare =\n parentTotal > 0 ? section.totalScore / parentTotal : undefined;\n const topChunk = sources.find(\n (source) => source.chunkId === section.topChunkId,\n );\n const topContextLabel =\n topChunk?.labels?.contextLabel ?? buildContextLabel(topChunk?.metadata);\n const topLocatorLabel =\n topChunk?.labels?.locatorLabel ??\n buildLocatorLabel(\n topChunk?.metadata,\n topChunk?.source,\n topChunk?.title,\n );\n const sourceAwareChunkReason = formatSourceAwareChunkReason(\n topChunk?.metadata?.sourceAwareChunkReason,\n );\n const sourceAwareUnitScopeLabel = buildSourceAwareUnitScopeLabel(\n topChunk?.metadata,\n );\n const parentDistribution =\n parentTotal > 0\n ? siblingPool\n .map((entry) => ({\n count: entry.count,\n isActive: entry.key === section.key,\n key: entry.key,\n label: entry.label,\n parentShare: entry.totalScore / parentTotal,\n totalScore: entry.totalScore,\n }))\n .sort((left, right) => right.totalScore - left.totalScore)\n : [];\n const reasons: RAGSectionRetrievalDiagnostic[\"reasons\"] = [];\n const stageCounts =\n trace?.steps\n .map((step) => ({\n count:\n step.sectionCounts?.find((entry) => entry.key === section.key)\n ?.count ?? 0,\n stage: step.stage,\n }))\n .filter((entry) => entry.count > 0) ?? [];\n const stageWeights = stageCounts.map((entry) => {\n const previousStageEntry =\n stageCounts[\n stageCounts.findIndex(\n (candidate) => candidate.stage === entry.stage,\n ) - 1\n ];\n const stageEntries =\n stageSectionCounts\n .get(entry.stage)\n ?.filter((candidate) => candidate.count > 0) ?? [];\n const stageScoreEntries =\n stageSectionScores\n .get(entry.stage)\n ?.filter((candidate) => candidate.totalScore > 0) ?? [];\n const stageTotal = stageEntries.reduce(\n (sum, candidate) => sum + candidate.count,\n 0,\n );\n const stageScoreTotal = stageScoreEntries.reduce(\n (sum, candidate) => sum + candidate.totalScore,\n 0,\n );\n const siblingStageEntries = stageEntries.filter(\n (candidate) =>\n candidate.key !== section.key &&\n parentLabelByKey.get(candidate.key) === section.parentLabel,\n );\n const parentStageEntries = stageEntries.filter(\n (candidate) =>\n parentLabelByKey.get(candidate.key) === section.parentLabel,\n );\n const siblingStageScoreEntries = stageScoreEntries.filter(\n (candidate) =>\n candidate.key !== section.key &&\n parentLabelByKey.get(candidate.key) === section.parentLabel,\n );\n const parentStageScoreEntries = stageScoreEntries.filter(\n (candidate) =>\n parentLabelByKey.get(candidate.key) === section.parentLabel,\n );\n const strongestStageSibling = siblingStageEntries\n .slice()\n .sort((left, right) => right.count - left.count)[0];\n const parentStageTotal = parentStageEntries.reduce(\n (sum, candidate) => sum + candidate.count,\n 0,\n );\n const activeStageScore = stageScoreEntries.find(\n (candidate) => candidate.key === section.key,\n )?.totalScore;\n const strongestStageScoreSibling = siblingStageScoreEntries\n .slice()\n .sort((left, right) => right.totalScore - left.totalScore)[0];\n const parentStageScoreTotal = parentStageScoreEntries.reduce(\n (sum, candidate) => sum + candidate.totalScore,\n 0,\n );\n const stageShare = stageTotal > 0 ? entry.count / stageTotal : 0;\n const retentionRate =\n typeof previousStageEntry?.count === \"number\" &&\n previousStageEntry.count > 0\n ? entry.count / previousStageEntry.count\n : undefined;\n const countDelta =\n typeof previousStageEntry?.count === \"number\"\n ? entry.count - previousStageEntry.count\n : undefined;\n const parentStageShare =\n parentStageTotal > 0 ? entry.count / parentStageTotal : undefined;\n const stageScoreShare =\n typeof activeStageScore === \"number\" && stageScoreTotal > 0\n ? activeStageScore / stageScoreTotal\n : undefined;\n const parentStageScoreShare =\n typeof activeStageScore === \"number\" && parentStageScoreTotal > 0\n ? activeStageScore / parentStageScoreTotal\n : undefined;\n const stageShareGap =\n stageTotal > 0 && strongestStageSibling\n ? entry.count / stageTotal -\n strongestStageSibling.count / stageTotal\n : undefined;\n const parentStageShareGap =\n parentStageTotal > 0 && strongestStageSibling\n ? entry.count / parentStageTotal -\n strongestStageSibling.count / parentStageTotal\n : undefined;\n const stageScoreShareGap =\n typeof activeStageScore === \"number\" &&\n stageScoreTotal > 0 &&\n strongestStageScoreSibling\n ? activeStageScore / stageScoreTotal -\n strongestStageScoreSibling.totalScore / stageScoreTotal\n : undefined;\n const parentStageScoreShareGap =\n typeof activeStageScore === \"number\" &&\n parentStageScoreTotal > 0 &&\n strongestStageScoreSibling\n ? activeStageScore / parentStageScoreTotal -\n strongestStageScoreSibling.totalScore / parentStageScoreTotal\n : undefined;\n const reasons: RAGSectionRetrievalDiagnostic[\"stageWeights\"][number][\"reasons\"] =\n [];\n if (\n entry.stage === \"rerank\" &&\n stageShare > 0.5 &&\n (typeof stageShareGap !== \"number\" || stageShareGap > 0)\n ) {\n reasons.push(\"rerank_preserved_lead\");\n }\n if (entry.stage === \"finalize\" && stageShare >= 0.5) {\n reasons.push(\"final_stage_concentration\");\n }\n if (\n entry.stage === \"finalize\" &&\n typeof parentStageShare === \"number\" &&\n parentStageShare >= 0.6 &&\n (typeof parentStageShareGap !== \"number\" || parentStageShareGap > 0)\n ) {\n reasons.push(\"final_stage_dominant_within_parent\");\n }\n if (\n strongestStageSibling &&\n ((typeof stageShareGap === \"number\" && stageShareGap <= 0.1) ||\n (typeof parentStageShareGap === \"number\" &&\n parentStageShareGap <= 0.1))\n ) {\n reasons.push(\"stage_runner_up_pressure\");\n }\n if (typeof countDelta === \"number\") {\n if (countDelta > 0) {\n reasons.push(\"stage_expanded\");\n } else if (countDelta < 0) {\n reasons.push(\"stage_narrowed\");\n } else {\n reasons.push(\"stage_held\");\n }\n }\n\n return {\n count: entry.count,\n countDelta,\n parentStageScoreShare,\n parentStageShare,\n parentStageShareGap,\n previousCount: previousStageEntry?.count,\n previousStage: previousStageEntry?.stage,\n reasons,\n retentionRate,\n stage: entry.stage,\n stageScoreShare,\n stageScoreShareGap,\n stageShare,\n stageShareGap,\n totalScore: activeStageScore,\n strongestSiblingCount: strongestStageSibling?.count,\n strongestSiblingLabel: strongestStageSibling\n ? (diagnostics.find(\n (candidate) => candidate.key === strongestStageSibling.key,\n )?.label ?? strongestStageSibling.key)\n : undefined,\n };\n });\n const firstSeenStage = stageCounts[0]?.stage;\n const lastSeenStage = stageCounts.at(-1)?.stage;\n const peakStageEntry = stageCounts.reduce<\n (typeof stageCounts)[number] | undefined\n >(\n (highest, entry) =>\n !highest || entry.count > highest.count ? entry : highest,\n undefined,\n );\n const finalStageEntry = stageCounts.at(-1);\n const peakCount = peakStageEntry?.count ?? section.count;\n const finalCount = finalStageEntry?.count;\n const finalRetentionRate =\n typeof finalCount === \"number\" && peakCount > 0\n ? finalCount / peakCount\n : undefined;\n const dropFromPeak =\n typeof finalCount === \"number\" ? peakCount - finalCount : undefined;\n const queryAttributionReasons: RAGSectionRetrievalDiagnostic[\"queryAttribution\"][\"reasons\"] =\n [];\n const queryAttributionMode =\n section.primaryHits > 0 &&\n section.transformedHits === 0 &&\n section.variantHits === 0\n ? \"primary\"\n : section.transformedHits > 0 &&\n section.primaryHits === 0 &&\n section.variantHits === 0\n ? \"transformed\"\n : section.variantHits > 0 &&\n section.primaryHits === 0 &&\n section.transformedHits === 0\n ? \"variant\"\n : \"mixed\";\n if (queryAttributionMode === \"primary\") {\n queryAttributionReasons.push(\"base_query_only\");\n }\n if (queryAttributionMode === \"transformed\") {\n queryAttributionReasons.push(\"transformed_query_only\");\n queryAttributionReasons.push(\"transform_introduced\");\n }\n if (queryAttributionMode === \"variant\") {\n queryAttributionReasons.push(\"variant_only\");\n queryAttributionReasons.push(\"variant_supported\");\n }\n if (queryAttributionMode === \"mixed\") {\n queryAttributionReasons.push(\"mixed_query_sources\");\n if (section.variantHits > 0) {\n queryAttributionReasons.push(\"variant_supported\");\n }\n if (section.transformedHits > 0 && section.primaryHits === 0) {\n queryAttributionReasons.push(\"transform_introduced\");\n }\n }\n\n if (section.bestScore >= strongestBestHit) {\n reasons.push(\"best_hit\");\n }\n if (section.count > 1) {\n reasons.push(\"multi_hit_section\");\n }\n if (siblings.length === 0) {\n reasons.push(\"only_section_in_parent\");\n } else if (\n !strongestSibling ||\n section.totalScore >= strongestSibling.totalScore\n ) {\n reasons.push(\"dominant_within_parent\");\n }\n if (scoreShare >= 0.5 || (parentShare ?? 0) >= 0.6) {\n reasons.push(\"concentrated_evidence\");\n }\n\n const summaryParts = [\n isBlockAwareContextLabel(topContextLabel) ? topContextLabel : \"\",\n `${section.count} hit${section.count === 1 ? \"\" : \"s\"}`,\n `${(scoreShare * 100).toFixed(0)}% score share`,\n `vector ${section.vectorHits} · lexical ${section.lexicalHits} · hybrid ${section.hybridHits}`,\n typeof parentShare === \"number\"\n ? `${(parentShare * 100).toFixed(0)}% of parent section set`\n : \"\",\n sourceAwareChunkReason ? `boundary ${sourceAwareChunkReason}` : \"\",\n sourceAwareUnitScopeLabel ? `scope ${sourceAwareUnitScopeLabel}` : \"\",\n strongestSibling\n ? `ahead of ${strongestSibling.label} by ${(section.totalScore - strongestSibling.totalScore).toFixed(2)}`\n : \"no sibling competition\",\n ].filter(Boolean);\n\n return {\n averageScore: section.totalScore / section.count,\n bestScore: section.bestScore,\n count: section.count,\n key: section.key,\n label: section.label,\n parentLabel: section.parentLabel,\n parentDistribution,\n parentShare,\n parentShareGap:\n typeof parentShare === \"number\" && strongestSibling && parentTotal > 0\n ? parentShare - strongestSibling.totalScore / parentTotal\n : undefined,\n path: section.path,\n firstSeenStage,\n finalCount,\n finalRetentionRate,\n lastSeenStage,\n dropFromPeak,\n peakCount,\n peakStage: peakStageEntry?.stage,\n queryAttribution: {\n mode: queryAttributionMode,\n primaryHits: section.primaryHits,\n reasons: queryAttributionReasons,\n transformedHits: section.transformedHits,\n variantHits: section.variantHits,\n },\n requestedMode: trace?.requestedMode,\n retrievalMode: trace?.mode,\n routingLabel: trace?.routingLabel,\n routingProvider: trace?.routingProvider,\n routingReason: trace?.routingReason,\n queryTransformLabel: trace?.queryTransformLabel,\n queryTransformProvider: trace?.queryTransformProvider,\n queryTransformReason: trace?.queryTransformReason,\n reasons,\n evidenceReconcileApplied: trace?.steps.some(\n (step) => step.stage === \"evidence_reconcile\",\n ),\n rerankApplied: trace?.steps.some(\n (step) => step.stage === \"rerank\" && step.metadata?.applied === true,\n ),\n scoreShare,\n scoreThresholdApplied: trace?.steps.some(\n (step) => step.stage === \"score_filter\",\n ),\n stageCounts,\n stageWeights,\n siblingCount: siblings.length,\n siblingScoreGap: strongestSibling\n ? section.totalScore - strongestSibling.totalScore\n : undefined,\n sourceCount: section.sourceSet.size,\n sourceAwareChunkReasonLabel: sourceAwareChunkReason,\n sourceAwareUnitScopeLabel,\n topContextLabel,\n topLocatorLabel,\n sourceBalanceApplied: trace?.steps.some(\n (step) => step.stage === \"source_balance\",\n ),\n strongestSiblingLabel: strongestSibling?.label,\n strongestSiblingScore: strongestSibling?.totalScore,\n summary: summaryParts.join(\" · \"),\n topChunkId: section.topChunkId,\n topSource: section.topSource,\n totalScore: section.totalScore,\n hybridHits: section.hybridHits,\n lexicalHits: section.lexicalHits,\n vectorHits: section.vectorHits,\n };\n })\n .sort((left, right) => {\n if (right.totalScore !== left.totalScore) {\n return right.totalScore - left.totalScore;\n }\n if (right.bestScore !== left.bestScore) {\n return right.bestScore - left.bestScore;\n }\n return left.label.localeCompare(right.label);\n });\n};\n\nexport type RAGStreamProgress = {\n stage: RAGStreamStage;\n conversationId?: string;\n messageId?: string;\n retrievalStartedAt?: number;\n retrievedAt?: number;\n retrievalDurationMs?: number;\n hasContent: boolean;\n hasRetrieved: boolean;\n hasSources: boolean;\n hasThinking: boolean;\n hasToolCalls: boolean;\n isComplete: boolean;\n isError: boolean;\n isIdle: boolean;\n isRetrieving: boolean;\n isRetrieved: boolean;\n isStreaming: boolean;\n isSubmitting: boolean;\n sourceCount: number;\n latestMessage: AIMessage | undefined;\n};\n\nconst buildStreamProgressState = (messages: AIMessage[]) => {\n const latestMessage = getLatestAssistantMessage(messages);\n const retrieved = latestMessage\n ? buildRAGRetrievedState(messages)\n : undefined;\n\n return {\n conversationId: latestMessage?.conversationId,\n latestMessage,\n messageId: latestMessage?.id,\n retrieved,\n sourceCount:\n retrieved?.sources.length ?? latestMessage?.sources?.length ?? 0,\n };\n};\n\nexport const buildRAGStreamProgress = ({\n error,\n isStreaming,\n messages,\n}: {\n error: string | null;\n isStreaming: boolean;\n messages: AIMessage[];\n}): RAGStreamProgress => {\n const stage = resolveRAGStreamStage({\n error,\n isStreaming,\n messages,\n });\n const state = buildStreamProgressState(messages);\n const hasSources = state.sourceCount > 0;\n const hasRetrieved =\n stage === \"retrieved\" ||\n state.retrieved !== undefined ||\n state.latestMessage?.retrievedAt !== undefined;\n const hasThinking =\n typeof state.latestMessage?.thinking === \"string\" &&\n state.latestMessage.thinking.length > 0;\n const hasToolCalls = (state.latestMessage?.toolCalls?.length ?? 0) > 0;\n\n return {\n conversationId: state.conversationId,\n hasContent:\n typeof state.latestMessage?.content === \"string\" &&\n state.latestMessage.content.length > 0,\n hasRetrieved,\n hasSources,\n hasThinking,\n hasToolCalls,\n isComplete: stage === \"complete\",\n isError: stage === \"error\",\n isIdle: stage === \"idle\",\n isRetrieved: stage === \"retrieved\",\n isRetrieving: stage === \"submitting\" || stage === \"retrieving\",\n isStreaming: stage === \"streaming\",\n isSubmitting: stage === \"submitting\",\n latestMessage: state.latestMessage,\n messageId: state.messageId,\n retrievalDurationMs: state.retrieved?.retrievalDurationMs,\n retrievalStartedAt: state.retrieved?.retrievalStartedAt,\n retrievedAt: state.retrieved?.retrievedAt,\n sourceCount: state.sourceCount,\n stage,\n };\n};\n\nexport type RAGStreamProgressState = ReturnType<typeof buildRAGStreamProgress>;\nexport const buildRAGAnswerWorkflowState = ({\n error,\n isStreaming,\n messages,\n}: {\n error: string | null;\n isStreaming: boolean;\n messages: AIMessage[];\n}): RAGAnswerWorkflowState => {\n const latestAssistantMessage = getLatestAssistantMessage(messages);\n const sources = getLatestRAGSources(messages);\n const sourceGroups = buildRAGSourceGroups(sources);\n const citations = buildRAGCitations(sources);\n const citationReferenceMap = buildRAGCitationReferenceMap(citations);\n const sourceSummaries = buildRAGSourceSummaries(sources);\n const groundingReferences = buildRAGGroundingReferences(sources);\n const groundedAnswer = buildRAGGroundedAnswer(\n latestAssistantMessage?.content ?? \"\",\n sources,\n );\n const retrieval = buildRAGRetrievedState(messages);\n const sectionDiagnostics = buildRAGSectionRetrievalDiagnostics(\n sources,\n retrieval?.trace,\n );\n const progress = buildRAGStreamProgress({\n error,\n isStreaming,\n messages,\n });\n\n return {\n excerptModeCounts: buildRAGExcerptModeCounts([\n ...citations.map((citation) => citation.excerptSelection),\n ...sourceSummaries.map((summary) => summary.excerptSelection),\n ...groundingReferences.map((reference) => reference.excerptSelection),\n ...groundedAnswer.sectionSummaries.map(\n (summary) => summary.excerptSelection,\n ),\n ]),\n citationReferenceMap,\n citations,\n coverage: groundedAnswer.coverage,\n error,\n groundedAnswer,\n groundingReferences,\n hasCitations: groundedAnswer.hasCitations,\n hasGrounding: groundingReferences.length > 0,\n hasRetrieved: progress.hasRetrieved,\n hasSources: sources.length > 0,\n isAnswerStreaming: progress.isStreaming,\n isComplete: progress.isComplete,\n isError: progress.isError,\n isIdle: progress.isIdle,\n isRetrieved: progress.isRetrieved,\n isRetrieving: progress.isRetrieving,\n isRunning:\n progress.isSubmitting || progress.isRetrieving || progress.isStreaming,\n isSubmitting: progress.isSubmitting,\n latestAssistantMessage,\n messages,\n retrieval,\n retrievalDurationMs: retrieval?.retrievalDurationMs,\n retrievalStartedAt: retrieval?.retrievalStartedAt,\n retrievedAt: retrieval?.retrievedAt,\n sectionDiagnostics,\n sourceGroups,\n sourceSummaries,\n sources,\n stage: progress.stage,\n ungroundedReferenceNumbers: groundedAnswer.ungroundedReferenceNumbers,\n };\n};\n\nexport const buildRAGSourceGroups = (sources: RAGSource[]) => {\n const groups = new Map<string, RAGSourceGroup>();\n\n for (const source of sources) {\n updateSourceGroup(groups, source);\n }\n\n return [...groups.values()].sort((left, right) => {\n if (right.bestScore !== left.bestScore) {\n return right.bestScore - left.bestScore;\n }\n\n return left.label.localeCompare(right.label);\n });\n};\n\nconst buildSourceGroup = (source: RAGSource, key: string): RAGSourceGroup => ({\n bestScore: source.score,\n chunks: [source],\n count: 1,\n key,\n label: buildSourceLabel(source),\n labels:\n source.labels ??\n buildRAGSourceLabels({\n metadata: source.metadata,\n source: source.source,\n title: source.title,\n }),\n structure: source.structure ?? buildRAGChunkStructure(source.metadata),\n source: source.source,\n title: source.title,\n});\n\nconst updateSourceGroup = (\n groups: Map<string, RAGSourceGroup>,\n source: RAGSource,\n) => {\n const key = buildSourceGroupKey(source);\n const existing = groups.get(key);\n if (!existing) {\n groups.set(key, buildSourceGroup(source, key));\n\n return;\n }\n\n existing.bestScore = Math.max(existing.bestScore, source.score);\n existing.count += 1;\n existing.chunks.push(source);\n const leadChunk = getPreferredSourceLeadChunk(existing.chunks);\n if (leadChunk) {\n existing.label = buildSourceLabel(leadChunk);\n existing.labels =\n leadChunk.labels ??\n buildRAGSourceLabels({\n metadata: leadChunk.metadata,\n source: leadChunk.source,\n title: leadChunk.title,\n });\n existing.structure =\n leadChunk.structure ?? buildRAGChunkStructure(leadChunk.metadata);\n existing.source = leadChunk.source;\n existing.title = leadChunk.title;\n }\n};\nexport const getLatestAssistantMessage = (messages: AIMessage[]) => {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message?.role === \"assistant\") {\n return message;\n }\n }\n\n return undefined;\n};\nexport const getLatestRAGSources = (messages: AIMessage[]) =>\n getLatestAssistantMessage(messages)?.sources ?? [];\nexport const getLatestRetrievedMessage = (messages: AIMessage[]) => {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (\n message?.role === \"assistant\" &&\n (typeof message.retrievedAt === \"number\" ||\n (message.sources?.length ?? 0) > 0)\n ) {\n return message;\n }\n }\n\n return undefined;\n};\nexport const resolveRAGStreamStage = ({\n error,\n isStreaming,\n messages,\n}: {\n error: string | null;\n isStreaming: boolean;\n messages: AIMessage[];\n}) => {\n if (error) {\n return \"error\";\n }\n\n const assistantMessage = getLatestAssistantMessage(messages);\n if (!assistantMessage) {\n return isStreaming ? \"submitting\" : \"idle\";\n }\n\n const isRetrieving =\n typeof assistantMessage.retrievalStartedAt === \"number\" &&\n typeof assistantMessage.retrievedAt !== \"number\";\n\n if (isRetrieving) {\n return \"retrieving\";\n }\n\n if (!isStreaming) {\n return \"complete\";\n }\n\n const hasRetrieved = typeof assistantMessage.retrievedAt === \"number\";\n const hasContent =\n assistantMessage.content.trim().length > 0 ||\n assistantMessage.thinking?.trim().length ||\n (assistantMessage.toolCalls?.length ?? 0) > 0 ||\n (assistantMessage.images?.length ?? 0) > 0;\n\n if (hasRetrieved && !hasContent) {\n return \"retrieved\";\n }\n\n return \"streaming\";\n};\n\nconst formatSignedDelta = (value: number, decimals = 0, suffix = \"\") =>\n `${value >= 0 ? \"+\" : \"\"}${value.toFixed(decimals)}${suffix}`;\n\nconst formatEvaluationPassingRate = (value: number) => `${value.toFixed(1)}%`;\n\nconst formatEvaluationSummary = (response: RAGEvaluationResponse) =>\n `${response.summary.totalCases} total · f1 ${response.summary.averageF1.toFixed(\n 3,\n )} · latency ${response.summary.averageLatencyMs.toFixed(1)}ms`;\n\nconst formatGroundingHistorySummaryValue = (response: {\n summary: {\n passedCases: number;\n totalCases: number;\n groundedCases: number;\n partialCases: number;\n ungroundedCases: number;\n averageResolvedCitationRate: number;\n averageCitationF1: number;\n };\n}) =>\n `${response.summary.passedCases}/${response.summary.totalCases} pass · grounded ${response.summary.groundedCases} · partial ${response.summary.partialCases} · ungrounded ${response.summary.ungroundedCases} · resolved citations ${(response.summary.averageResolvedCitationRate * 100).toFixed(1)}% · citation f1 ${response.summary.averageCitationF1.toFixed(3)}`;\n\nconst formatHistoryCaseLabels = (cases: RAGEvaluationCaseDiff[]) =>\n cases.length > 0\n ? cases.map((entry) => entry.label ?? entry.caseId).join(\", \")\n : \"none\";\n\nconst buildComparisonCaseLeadLabel = (snapshot?: {\n topLocatorLabel?: string;\n topContextLabel?: string;\n sourceAwareUnitScopeLabel?: string;\n sourceAwareChunkReasonLabel?: string;\n}) =>\n snapshot?.topLocatorLabel ??\n snapshot?.topContextLabel ??\n snapshot?.sourceAwareUnitScopeLabel ??\n snapshot?.sourceAwareChunkReasonLabel;\n\nconst formatComparisonLeadCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const labels = Array.from(\n new Set(\n (entry.caseTraceSnapshots ?? [])\n .map((snapshot) => buildComparisonCaseLeadLabel(snapshot))\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ).slice(0, 3);\n\n return labels.length > 0 ? labels.join(\" · \") : \"none\";\n};\n\nconst formatComparisonLeadMediaCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const labels = Array.from(\n new Set(\n (entry.caseTraceSnapshots ?? [])\n .map((snapshot) =>\n formatLeadMediaCueSummary({\n leadSpeakerCue: snapshot.leadSpeakerCue,\n leadSpeakerAttributionCue: snapshot.leadSpeakerAttributionCue,\n leadChannelCue: snapshot.leadChannelCue,\n leadChannelAttributionCue: snapshot.leadChannelAttributionCue,\n leadContinuityCue: snapshot.leadContinuityCue,\n }),\n )\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value !== \"none\",\n ),\n ),\n ).slice(0, 3);\n\n return labels.length > 0 ? labels.join(\" · \") : \"none\";\n};\n\nconst formatComparisonPresentationCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const labels = Array.from(\n new Set(\n (entry.caseTraceSnapshots ?? [])\n .map((snapshot) => snapshot.leadPresentationCue)\n .filter(\n (value): value is \"body\" | \"notes\" | \"title\" =>\n value === \"body\" || value === \"notes\" || value === \"title\",\n ),\n ),\n ).map((value) =>\n value === \"notes\" ? \"notes\" : value === \"title\" ? \"title\" : \"body\",\n );\n\n return labels.length > 0 ? labels.join(\" / \") : \"none\";\n};\n\nconst formatLeadPresentationCue = (\n cue?: \"body\" | \"notes\" | \"title\",\n): string => {\n if (cue === \"notes\" || cue === \"title\" || cue === \"body\") {\n return cue;\n }\n\n return \"none\";\n};\n\nconst formatSQLitePlannerCueSummary = (input?: {\n sqliteQueryMode?: string;\n sqliteQueryPushdownMode?: string;\n sqliteQueryPushdownApplied?: boolean;\n sqliteQueryPushdownClauseCount?: number;\n sqliteQueryPushdownCoverageRatio?: number;\n sqliteQueryTotalFilterClauseCount?: number;\n sqliteQueryJsRemainderClauseCount?: number;\n sqliteQueryPlannerProfileUsed?: string;\n sqliteQueryMultiplierUsed?: number;\n sqliteQueryCandidateLimitUsed?: number;\n sqliteQueryMaxBackfillsUsed?: number;\n sqliteQueryMinResultsUsed?: number;\n sqliteQueryFillPolicyUsed?: string;\n sqliteQueryJsRemainderRatio?: number;\n sqliteQueryFilteredCandidates?: number;\n sqliteQueryInitialSearchK?: number;\n sqliteQueryFinalSearchK?: number;\n sqliteQuerySearchExpansionRatio?: number;\n sqliteQueryBackfillCount?: number;\n sqliteQueryBackfillLimitReached?: boolean;\n sqliteQueryMinResultsSatisfied?: boolean;\n sqliteQueryReturnedCount?: number;\n sqliteQueryCandidateYieldRatio?: number;\n sqliteQueryTopKFillRatio?: number;\n sqliteQueryUnderfilledTopK?: boolean;\n sqliteQueryCandidateBudgetExhausted?: boolean;\n sqliteQueryCandidateCoverage?: string;\n}) => {\n const plannerJudgment =\n typeof input?.sqliteQuerySearchExpansionRatio === \"number\" &&\n typeof input?.sqliteQueryCandidateYieldRatio === \"number\" &&\n input.sqliteQuerySearchExpansionRatio >= 2 &&\n input.sqliteQueryCandidateYieldRatio < 0.25\n ? \"expensive backfill\"\n : typeof input?.sqliteQueryTopKFillRatio === \"number\" &&\n typeof input?.sqliteQueryCandidateYieldRatio === \"number\" &&\n input.sqliteQueryTopKFillRatio >= 1 &&\n input.sqliteQueryCandidateYieldRatio >= 0.5\n ? \"efficient fill\"\n : input?.sqliteQueryPushdownMode === \"full\" &&\n typeof input?.sqliteQueryPushdownCoverageRatio === \"number\" &&\n input.sqliteQueryPushdownCoverageRatio >= 1\n ? \"full pushdown\"\n : input?.sqliteQueryPushdownMode === \"partial\" &&\n typeof input?.sqliteQueryJsRemainderRatio === \"number\" &&\n input.sqliteQueryJsRemainderRatio >= 0.5\n ? \"heavy js remainder\"\n : undefined;\n\n const parts = [\n input?.sqliteQueryMode ? `mode ${input.sqliteQueryMode}` : undefined,\n input?.sqliteQueryPushdownMode\n ? `pushdown ${input.sqliteQueryPushdownMode}`\n : undefined,\n typeof input?.sqliteQueryPushdownApplied === \"boolean\"\n ? input.sqliteQueryPushdownApplied\n ? \"pushdown applied\"\n : \"pushdown skipped\"\n : undefined,\n typeof input?.sqliteQueryPushdownClauseCount === \"number\"\n ? `clauses ${input.sqliteQueryPushdownClauseCount}`\n : undefined,\n typeof input?.sqliteQueryPushdownCoverageRatio === \"number\"\n ? `pushdown ${(input.sqliteQueryPushdownCoverageRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.sqliteQueryJsRemainderClauseCount === \"number\"\n ? `js remainder ${input.sqliteQueryJsRemainderClauseCount}`\n : undefined,\n input?.sqliteQueryPlannerProfileUsed\n ? `profile ${input.sqliteQueryPlannerProfileUsed}`\n : undefined,\n typeof input?.sqliteQueryMultiplierUsed === \"number\"\n ? `x${input.sqliteQueryMultiplierUsed}`\n : undefined,\n typeof input?.sqliteQueryCandidateLimitUsed === \"number\"\n ? `cap ${input.sqliteQueryCandidateLimitUsed}`\n : undefined,\n typeof input?.sqliteQueryMaxBackfillsUsed === \"number\"\n ? `backfills ${input.sqliteQueryMaxBackfillsUsed}`\n : undefined,\n typeof input?.sqliteQueryMinResultsUsed === \"number\"\n ? `min ${input.sqliteQueryMinResultsUsed}`\n : undefined,\n input?.sqliteQueryFillPolicyUsed\n ? `fill ${input.sqliteQueryFillPolicyUsed}`\n : undefined,\n typeof input?.sqliteQueryJsRemainderRatio === \"number\"\n ? `js ${(input.sqliteQueryJsRemainderRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.sqliteQueryTotalFilterClauseCount === \"number\"\n ? `total clauses ${input.sqliteQueryTotalFilterClauseCount}`\n : undefined,\n typeof input?.sqliteQueryFilteredCandidates === \"number\"\n ? `filtered ${input.sqliteQueryFilteredCandidates}`\n : undefined,\n typeof input?.sqliteQueryInitialSearchK === \"number\" &&\n typeof input?.sqliteQueryFinalSearchK === \"number\"\n ? `searchK ${input.sqliteQueryInitialSearchK}->${input.sqliteQueryFinalSearchK}`\n : typeof input?.sqliteQueryFinalSearchK === \"number\"\n ? `searchK ${input.sqliteQueryFinalSearchK}`\n : undefined,\n typeof input?.sqliteQuerySearchExpansionRatio === \"number\"\n ? `expand ${(input.sqliteQuerySearchExpansionRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.sqliteQueryBackfillCount === \"number\"\n ? `backfill ${input.sqliteQueryBackfillCount}`\n : undefined,\n typeof input?.sqliteQueryBackfillLimitReached === \"boolean\" &&\n input.sqliteQueryBackfillLimitReached\n ? \"backfill limit reached\"\n : undefined,\n typeof input?.sqliteQueryMinResultsSatisfied === \"boolean\" &&\n input.sqliteQueryMinResultsSatisfied\n ? \"min satisfied\"\n : undefined,\n typeof input?.sqliteQueryReturnedCount === \"number\"\n ? `returned ${input.sqliteQueryReturnedCount}`\n : undefined,\n typeof input?.sqliteQueryCandidateYieldRatio === \"number\"\n ? `yield ${(input.sqliteQueryCandidateYieldRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.sqliteQueryTopKFillRatio === \"number\"\n ? `fill ${(input.sqliteQueryTopKFillRatio * 100).toFixed(0)}%`\n : undefined,\n input?.sqliteQueryCandidateCoverage\n ? `coverage ${input.sqliteQueryCandidateCoverage}`\n : undefined,\n typeof input?.sqliteQueryUnderfilledTopK === \"boolean\" &&\n input.sqliteQueryUnderfilledTopK\n ? \"underfilled topK\"\n : undefined,\n typeof input?.sqliteQueryCandidateBudgetExhausted === \"boolean\" &&\n input.sqliteQueryCandidateBudgetExhausted\n ? \"budget exhausted\"\n : undefined,\n plannerJudgment,\n ].filter((value): value is string => typeof value === \"string\");\n\n return parts.length > 0 ? parts.join(\" · \") : \"none\";\n};\n\nconst formatPostgresPlannerCueSummary = (input?: {\n postgresQueryMode?: string;\n postgresQueryPushdownMode?: string;\n postgresQueryPushdownApplied?: boolean;\n postgresQueryPushdownClauseCount?: number;\n postgresQueryPushdownCoverageRatio?: number;\n postgresQueryTotalFilterClauseCount?: number;\n postgresQueryJsRemainderClauseCount?: number;\n postgresQueryPlannerProfileUsed?: string;\n postgresQueryMultiplierUsed?: number;\n postgresQueryCandidateLimitUsed?: number;\n postgresQueryMaxBackfillsUsed?: number;\n postgresQueryMinResultsUsed?: number;\n postgresQueryFillPolicyUsed?: string;\n postgresQueryJsRemainderRatio?: number;\n postgresQueryFilteredCandidates?: number;\n postgresQueryInitialSearchK?: number;\n postgresQueryFinalSearchK?: number;\n postgresQuerySearchExpansionRatio?: number;\n postgresQueryBackfillCount?: number;\n postgresQueryBackfillLimitReached?: boolean;\n postgresQueryMinResultsSatisfied?: boolean;\n postgresQueryReturnedCount?: number;\n postgresQueryCandidateYieldRatio?: number;\n postgresQueryTopKFillRatio?: number;\n postgresQueryUnderfilledTopK?: boolean;\n postgresQueryCandidateBudgetExhausted?: boolean;\n postgresQueryCandidateCoverage?: string;\n postgresIndexType?: string;\n postgresIndexName?: string;\n postgresIndexPresent?: boolean;\n postgresEstimatedRowCount?: number;\n postgresTableBytes?: number;\n postgresIndexBytes?: number;\n postgresTotalBytes?: number;\n postgresIndexStorageRatio?: number;\n}) => {\n const plannerJudgment =\n typeof input?.postgresQuerySearchExpansionRatio === \"number\" &&\n typeof input?.postgresQueryCandidateYieldRatio === \"number\" &&\n input.postgresQuerySearchExpansionRatio >= 2 &&\n input.postgresQueryCandidateYieldRatio < 0.25\n ? \"expensive backfill\"\n : typeof input?.postgresQueryTopKFillRatio === \"number\" &&\n typeof input?.postgresQueryCandidateYieldRatio === \"number\" &&\n input.postgresQueryTopKFillRatio >= 1 &&\n input.postgresQueryCandidateYieldRatio >= 0.5\n ? \"efficient fill\"\n : input?.postgresQueryPushdownMode === \"full\" &&\n typeof input?.postgresQueryPushdownCoverageRatio === \"number\" &&\n input.postgresQueryPushdownCoverageRatio >= 1\n ? \"full pushdown\"\n : input?.postgresQueryPushdownMode === \"partial\" &&\n typeof input?.postgresQueryJsRemainderRatio === \"number\" &&\n input.postgresQueryJsRemainderRatio >= 0.5\n ? \"heavy js remainder\"\n : undefined;\n const healthJudgment =\n input?.postgresIndexPresent === false\n ? \"index missing\"\n : typeof input?.postgresIndexStorageRatio === \"number\" &&\n input.postgresIndexStorageRatio >= 0.7\n ? \"index-heavy storage\"\n : typeof input?.postgresEstimatedRowCount === \"number\" &&\n input.postgresEstimatedRowCount >= 1000 &&\n input.postgresIndexPresent === true\n ? \"indexed larger corpus\"\n : undefined;\n\n const parts = [\n input?.postgresQueryMode ? `mode ${input.postgresQueryMode}` : undefined,\n input?.postgresIndexType ? `index ${input.postgresIndexType}` : undefined,\n typeof input?.postgresIndexPresent === \"boolean\"\n ? input.postgresIndexPresent\n ? \"index present\"\n : \"index missing\"\n : undefined,\n typeof input?.postgresEstimatedRowCount === \"number\"\n ? `rows ${input.postgresEstimatedRowCount}`\n : undefined,\n typeof input?.postgresTableBytes === \"number\"\n ? `table ${formatByteSizeLabel(input.postgresTableBytes)}`\n : undefined,\n typeof input?.postgresIndexBytes === \"number\"\n ? `index ${formatByteSizeLabel(input.postgresIndexBytes)}`\n : undefined,\n typeof input?.postgresIndexStorageRatio === \"number\"\n ? `index share ${(input.postgresIndexStorageRatio * 100).toFixed(0)}%`\n : undefined,\n input?.postgresQueryPushdownMode\n ? `pushdown ${input.postgresQueryPushdownMode}`\n : undefined,\n typeof input?.postgresQueryPushdownApplied === \"boolean\"\n ? input.postgresQueryPushdownApplied\n ? \"pushdown on\"\n : \"pushdown off\"\n : undefined,\n typeof input?.postgresQueryPushdownClauseCount === \"number\"\n ? `clauses ${input.postgresQueryPushdownClauseCount}`\n : undefined,\n typeof input?.postgresQueryPushdownCoverageRatio === \"number\"\n ? `pushdown ${(input.postgresQueryPushdownCoverageRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.postgresQueryJsRemainderClauseCount === \"number\"\n ? `js remainder ${input.postgresQueryJsRemainderClauseCount}`\n : undefined,\n input?.postgresQueryPlannerProfileUsed\n ? `profile ${input.postgresQueryPlannerProfileUsed}`\n : undefined,\n typeof input?.postgresQueryMultiplierUsed === \"number\"\n ? `x${input.postgresQueryMultiplierUsed}`\n : undefined,\n typeof input?.postgresQueryCandidateLimitUsed === \"number\"\n ? `cap ${input.postgresQueryCandidateLimitUsed}`\n : undefined,\n typeof input?.postgresQueryMaxBackfillsUsed === \"number\"\n ? `backfills ${input.postgresQueryMaxBackfillsUsed}`\n : undefined,\n typeof input?.postgresQueryMinResultsUsed === \"number\"\n ? `min ${input.postgresQueryMinResultsUsed}`\n : undefined,\n input?.postgresQueryFillPolicyUsed\n ? `fill ${input.postgresQueryFillPolicyUsed}`\n : undefined,\n typeof input?.postgresQueryJsRemainderRatio === \"number\"\n ? `js ${(input.postgresQueryJsRemainderRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.postgresQueryTotalFilterClauseCount === \"number\"\n ? `total clauses ${input.postgresQueryTotalFilterClauseCount}`\n : undefined,\n typeof input?.postgresQueryFilteredCandidates === \"number\"\n ? `filtered ${input.postgresQueryFilteredCandidates}`\n : undefined,\n typeof input?.postgresQueryInitialSearchK === \"number\" &&\n typeof input?.postgresQueryFinalSearchK === \"number\"\n ? `searchK ${input.postgresQueryInitialSearchK}->${input.postgresQueryFinalSearchK}`\n : typeof input?.postgresQueryFinalSearchK === \"number\"\n ? `searchK ${input.postgresQueryFinalSearchK}`\n : undefined,\n typeof input?.postgresQuerySearchExpansionRatio === \"number\"\n ? `expand ${(input.postgresQuerySearchExpansionRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.postgresQueryBackfillCount === \"number\"\n ? `backfill ${input.postgresQueryBackfillCount}`\n : undefined,\n typeof input?.postgresQueryBackfillLimitReached === \"boolean\" &&\n input.postgresQueryBackfillLimitReached\n ? \"backfill limit reached\"\n : undefined,\n typeof input?.postgresQueryMinResultsSatisfied === \"boolean\" &&\n input.postgresQueryMinResultsSatisfied\n ? \"min satisfied\"\n : undefined,\n typeof input?.postgresQueryReturnedCount === \"number\"\n ? `returned ${input.postgresQueryReturnedCount}`\n : undefined,\n typeof input?.postgresQueryCandidateYieldRatio === \"number\"\n ? `yield ${(input.postgresQueryCandidateYieldRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.postgresQueryTopKFillRatio === \"number\"\n ? `fill ${(input.postgresQueryTopKFillRatio * 100).toFixed(0)}%`\n : undefined,\n input?.postgresQueryCandidateCoverage\n ? `coverage ${input.postgresQueryCandidateCoverage}`\n : undefined,\n typeof input?.postgresQueryUnderfilledTopK === \"boolean\" &&\n input.postgresQueryUnderfilledTopK\n ? \"underfilled topK\"\n : undefined,\n typeof input?.postgresQueryCandidateBudgetExhausted === \"boolean\" &&\n input.postgresQueryCandidateBudgetExhausted\n ? \"budget exhausted\"\n : undefined,\n plannerJudgment,\n healthJudgment,\n ].filter((value): value is string => typeof value === \"string\");\n\n return parts.length > 0 ? parts.join(\" · \") : \"none\";\n};\n\nconst formatComparisonSQLitePlannerCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const labels = Array.from(\n new Set(\n (entry.caseTraceSnapshots ?? [])\n .map((snapshot) =>\n formatSQLitePlannerCueSummary({\n sqliteQueryBackfillCount: snapshot.sqliteQueryBackfillCount,\n sqliteQueryCandidateBudgetExhausted:\n snapshot.sqliteQueryCandidateBudgetExhausted,\n sqliteQueryCandidateCoverage: snapshot.sqliteQueryCandidateCoverage,\n sqliteQueryFilteredCandidates:\n snapshot.sqliteQueryFilteredCandidates,\n sqliteQueryFinalSearchK: snapshot.sqliteQueryFinalSearchK,\n sqliteQueryInitialSearchK: snapshot.sqliteQueryInitialSearchK,\n sqliteQuerySearchExpansionRatio:\n snapshot.sqliteQuerySearchExpansionRatio,\n sqliteQueryJsRemainderClauseCount:\n snapshot.sqliteQueryJsRemainderClauseCount,\n sqliteQueryCandidateLimitUsed:\n snapshot.sqliteQueryCandidateLimitUsed,\n sqliteQueryMaxBackfillsUsed: snapshot.sqliteQueryMaxBackfillsUsed,\n sqliteQueryMinResultsUsed: snapshot.sqliteQueryMinResultsUsed,\n sqliteQueryFillPolicyUsed: snapshot.sqliteQueryFillPolicyUsed,\n sqliteQueryMode: snapshot.sqliteQueryMode,\n sqliteQueryPushdownApplied: snapshot.sqliteQueryPushdownApplied,\n sqliteQueryPushdownClauseCount:\n snapshot.sqliteQueryPushdownClauseCount,\n sqliteQueryPushdownCoverageRatio:\n snapshot.sqliteQueryPushdownCoverageRatio,\n sqliteQueryPushdownMode: snapshot.sqliteQueryPushdownMode,\n sqliteQueryTotalFilterClauseCount:\n snapshot.sqliteQueryTotalFilterClauseCount,\n sqliteQueryReturnedCount: snapshot.sqliteQueryReturnedCount,\n sqliteQueryBackfillLimitReached:\n snapshot.sqliteQueryBackfillLimitReached,\n sqliteQueryMinResultsSatisfied:\n snapshot.sqliteQueryMinResultsSatisfied,\n sqliteQueryCandidateYieldRatio:\n snapshot.sqliteQueryCandidateYieldRatio,\n sqliteQueryTopKFillRatio: snapshot.sqliteQueryTopKFillRatio,\n sqliteQueryJsRemainderRatio: snapshot.sqliteQueryJsRemainderRatio,\n sqliteQueryUnderfilledTopK: snapshot.sqliteQueryUnderfilledTopK,\n }),\n )\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value !== \"none\",\n ),\n ),\n ).slice(0, 3);\n\n return labels.length > 0 ? labels.join(\" · \") : \"none\";\n};\n\nconst formatComparisonPostgresPlannerCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const labels = Array.from(\n new Set(\n (entry.caseTraceSnapshots ?? [])\n .map((snapshot) =>\n formatPostgresPlannerCueSummary({\n postgresQueryBackfillCount: snapshot.postgresQueryBackfillCount,\n postgresQueryCandidateBudgetExhausted:\n snapshot.postgresQueryCandidateBudgetExhausted,\n postgresQueryCandidateCoverage:\n snapshot.postgresQueryCandidateCoverage,\n postgresQueryFilteredCandidates:\n snapshot.postgresQueryFilteredCandidates,\n postgresQueryFinalSearchK: snapshot.postgresQueryFinalSearchK,\n postgresQueryInitialSearchK: snapshot.postgresQueryInitialSearchK,\n postgresQuerySearchExpansionRatio:\n snapshot.postgresQuerySearchExpansionRatio,\n postgresQueryJsRemainderClauseCount:\n snapshot.postgresQueryJsRemainderClauseCount,\n postgresQueryCandidateLimitUsed:\n snapshot.postgresQueryCandidateLimitUsed,\n postgresQueryMaxBackfillsUsed:\n snapshot.postgresQueryMaxBackfillsUsed,\n postgresQueryMinResultsUsed: snapshot.postgresQueryMinResultsUsed,\n postgresQueryFillPolicyUsed: snapshot.postgresQueryFillPolicyUsed,\n postgresQueryMultiplierUsed: snapshot.postgresQueryMultiplierUsed,\n postgresQueryMode: snapshot.postgresQueryMode,\n postgresQueryPushdownApplied: snapshot.postgresQueryPushdownApplied,\n postgresQueryPushdownClauseCount:\n snapshot.postgresQueryPushdownClauseCount,\n postgresQueryPushdownCoverageRatio:\n snapshot.postgresQueryPushdownCoverageRatio,\n postgresQueryPushdownMode: snapshot.postgresQueryPushdownMode,\n postgresQueryTotalFilterClauseCount:\n snapshot.postgresQueryTotalFilterClauseCount,\n postgresQueryReturnedCount: snapshot.postgresQueryReturnedCount,\n postgresQueryBackfillLimitReached:\n snapshot.postgresQueryBackfillLimitReached,\n postgresQueryMinResultsSatisfied:\n snapshot.postgresQueryMinResultsSatisfied,\n postgresQueryCandidateYieldRatio:\n snapshot.postgresQueryCandidateYieldRatio,\n postgresQueryTopKFillRatio: snapshot.postgresQueryTopKFillRatio,\n postgresQueryJsRemainderRatio:\n snapshot.postgresQueryJsRemainderRatio,\n postgresEstimatedRowCount: snapshot.postgresEstimatedRowCount,\n postgresIndexBytes: snapshot.postgresIndexBytes,\n postgresIndexName: snapshot.postgresIndexName,\n postgresIndexPresent: snapshot.postgresIndexPresent,\n postgresIndexStorageRatio: snapshot.postgresIndexStorageRatio,\n postgresIndexType: snapshot.postgresIndexType,\n postgresTableBytes: snapshot.postgresTableBytes,\n postgresTotalBytes: snapshot.postgresTotalBytes,\n postgresQueryUnderfilledTopK: snapshot.postgresQueryUnderfilledTopK,\n }),\n )\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value !== \"none\",\n ),\n ),\n ).slice(0, 3);\n\n return labels.length > 0 ? labels.join(\" · \") : \"none\";\n};\n\nconst formatComparisonLeadDrift = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n if (\n !leader?.caseTraceSnapshots?.length ||\n !entry.caseTraceSnapshots?.length\n ) {\n return \"none\";\n }\n\n const leaderCases = new Map(\n leader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot]),\n );\n\n const drift = entry.caseTraceSnapshots\n .map((snapshot) => {\n const leaderSnapshot = leaderCases.get(snapshot.caseId);\n const currentLead = buildComparisonCaseLeadLabel(snapshot);\n const leaderLead = buildComparisonCaseLeadLabel(leaderSnapshot);\n if (!currentLead || !leaderLead || currentLead === leaderLead) {\n return undefined;\n }\n\n return `${snapshot.label ?? snapshot.caseId} ${leaderLead}→${currentLead}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return drift.length > 0 ? drift.join(\" · \") : \"none\";\n};\n\nconst formatComparisonLeadMediaDrift = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n if (\n !leader?.caseTraceSnapshots?.length ||\n !entry.caseTraceSnapshots?.length\n ) {\n return \"none\";\n }\n\n const leaderCases = new Map(\n leader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot]),\n );\n\n const drift = entry.caseTraceSnapshots\n .map((snapshot) => {\n const leaderSnapshot = leaderCases.get(snapshot.caseId);\n const currentMediaCues = formatLeadMediaCueSummary({\n leadSpeakerCue: snapshot.leadSpeakerCue,\n leadSpeakerAttributionCue: snapshot.leadSpeakerAttributionCue,\n leadChannelCue: snapshot.leadChannelCue,\n leadChannelAttributionCue: snapshot.leadChannelAttributionCue,\n leadContinuityCue: snapshot.leadContinuityCue,\n });\n const leaderMediaCues = formatLeadMediaCueSummary({\n leadSpeakerCue: leaderSnapshot?.leadSpeakerCue,\n leadSpeakerAttributionCue: leaderSnapshot?.leadSpeakerAttributionCue,\n leadChannelCue: leaderSnapshot?.leadChannelCue,\n leadChannelAttributionCue: leaderSnapshot?.leadChannelAttributionCue,\n leadContinuityCue: leaderSnapshot?.leadContinuityCue,\n });\n if (\n currentMediaCues === \"none\" ||\n leaderMediaCues === \"none\" ||\n currentMediaCues === leaderMediaCues\n ) {\n return undefined;\n }\n\n return `${snapshot.label ?? snapshot.caseId} ${leaderMediaCues}→${currentMediaCues}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return drift.length > 0 ? drift.join(\" · \") : \"none\";\n};\n\nconst formatComparisonSQLitePlannerDrift = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n if (\n !leader?.caseTraceSnapshots?.length ||\n !entry.caseTraceSnapshots?.length\n ) {\n return \"none\";\n }\n\n const leaderCases = new Map(\n leader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot]),\n );\n\n const drift = entry.caseTraceSnapshots\n .map((snapshot) => {\n const leaderSnapshot = leaderCases.get(snapshot.caseId);\n const currentPlanner = formatSQLitePlannerCueSummary(snapshot);\n const leaderPlanner = formatSQLitePlannerCueSummary(leaderSnapshot);\n if (\n currentPlanner === \"none\" ||\n leaderPlanner === \"none\" ||\n currentPlanner === leaderPlanner\n ) {\n return undefined;\n }\n\n return `${snapshot.label ?? snapshot.caseId} ${leaderPlanner}→${currentPlanner}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return drift.length > 0 ? drift.join(\" · \") : \"none\";\n};\n\nconst formatComparisonPostgresPlannerDrift = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n if (\n !leader?.caseTraceSnapshots?.length ||\n !entry.caseTraceSnapshots?.length\n ) {\n return \"none\";\n }\n\n const leaderCases = new Map(\n leader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot]),\n );\n\n const drift = entry.caseTraceSnapshots\n .map((snapshot) => {\n const leaderSnapshot = leaderCases.get(snapshot.caseId);\n const currentPlanner = formatPostgresPlannerCueSummary(snapshot);\n const leaderPlanner = formatPostgresPlannerCueSummary(leaderSnapshot);\n if (\n currentPlanner === \"none\" ||\n leaderPlanner === \"none\" ||\n currentPlanner === leaderPlanner\n ) {\n return undefined;\n }\n\n return `${snapshot.label ?? snapshot.caseId} ${leaderPlanner}→${currentPlanner}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return drift.length > 0 ? drift.join(\" · \") : \"none\";\n};\n\nconst formatComparisonRoutingCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const trace = entry.traceSummary;\n if (!trace) {\n return \"none\";\n }\n\n const parts = [\n `modes ${formatTraceModes(trace.modes)}`,\n `balance ${formatSourceBalanceStrategies(trace.sourceBalanceStrategies)}`,\n `rewrites ${formatTraceRatio(trace.transformedCases, trace.totalCases)}`,\n `variants ${formatTraceRatio(trace.variantCases, trace.totalCases)}`,\n ].filter((value) => !value.endsWith(\"n/a\"));\n\n return parts.length > 0 ? parts.join(\" · \") : \"none\";\n};\n\nconst formatComparisonRoutingDrift = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const trace = entry.traceSummary;\n const leaderTrace = leader?.traceSummary;\n if (!trace || !leaderTrace || entry === leader) {\n return \"none\";\n }\n\n const deltas: string[] = [];\n const currentModes = formatTraceModes(trace.modes);\n const previousModes = formatTraceModes(leaderTrace.modes);\n if (currentModes !== previousModes) {\n deltas.push(`modes ${previousModes}→${currentModes}`);\n }\n\n const currentBalance = formatSourceBalanceStrategies(\n trace.sourceBalanceStrategies,\n );\n const previousBalance = formatSourceBalanceStrategies(\n leaderTrace.sourceBalanceStrategies,\n );\n if (currentBalance !== previousBalance) {\n deltas.push(`balance ${previousBalance}→${currentBalance}`);\n }\n\n const transformedDelta =\n trace.transformedCases - leaderTrace.transformedCases;\n if (transformedDelta !== 0) {\n deltas.push(`rewrites ${formatTraceCountDelta(transformedDelta)}`);\n }\n\n const variantDelta = trace.variantCases - leaderTrace.variantCases;\n if (variantDelta !== 0) {\n deltas.push(`variants ${formatTraceCountDelta(variantDelta)}`);\n }\n\n return deltas.length > 0 ? deltas.slice(0, 3).join(\" · \") : \"none\";\n};\n\nconst formatHistoryRoutingShift = (history?: RAGEvaluationHistory) => {\n const delta = history?.diff?.traceSummaryDelta;\n if (!delta) {\n return \"none\";\n }\n\n const shifts: string[] = [];\n if (delta.modesChanged) {\n shifts.push(\"modes changed\");\n }\n if (delta.sourceBalanceStrategiesChanged) {\n shifts.push(\"balance changed\");\n }\n if (delta.transformedCases !== 0) {\n shifts.push(`rewrites ${formatTraceCountDelta(delta.transformedCases)}`);\n }\n if (delta.variantCases !== 0) {\n shifts.push(`variants ${formatTraceCountDelta(delta.variantCases)}`);\n }\n\n return shifts.length > 0 ? shifts.join(\" · \") : \"none\";\n};\n\nconst formatHistorySQLitePlannerShift = (history?: RAGEvaluationHistory) => {\n if (!history?.caseTraceSnapshots.length) {\n return \"none\";\n }\n\n const shifts = history.caseTraceSnapshots\n .map((entry) => {\n const previousPlanner = formatSQLitePlannerCueSummary({\n sqliteQueryBackfillCount: entry.previousSqliteQueryBackfillCount,\n sqliteQueryCandidateBudgetExhausted:\n entry.previousSqliteQueryCandidateBudgetExhausted,\n sqliteQueryCandidateCoverage:\n entry.previousSqliteQueryCandidateCoverage,\n sqliteQueryFilteredCandidates:\n entry.previousSqliteQueryFilteredCandidates,\n sqliteQueryFinalSearchK: entry.previousSqliteQueryFinalSearchK,\n sqliteQueryInitialSearchK: entry.previousSqliteQueryInitialSearchK,\n sqliteQuerySearchExpansionRatio:\n entry.previousSqliteQuerySearchExpansionRatio,\n sqliteQueryJsRemainderClauseCount:\n entry.previousSqliteQueryJsRemainderClauseCount,\n sqliteQueryCandidateLimitUsed:\n entry.previousSqliteQueryCandidateLimitUsed,\n sqliteQueryMaxBackfillsUsed: entry.previousSqliteQueryMaxBackfillsUsed,\n sqliteQueryMinResultsUsed: entry.previousSqliteQueryMinResultsUsed,\n sqliteQueryFillPolicyUsed: entry.previousSqliteQueryFillPolicyUsed,\n sqliteQueryMode: entry.previousSqliteQueryMode,\n sqliteQueryPushdownApplied: entry.previousSqliteQueryPushdownApplied,\n sqliteQueryPushdownClauseCount:\n entry.previousSqliteQueryPushdownClauseCount,\n sqliteQueryPushdownCoverageRatio:\n entry.previousSqliteQueryPushdownCoverageRatio,\n sqliteQueryPushdownMode: entry.previousSqliteQueryPushdownMode,\n sqliteQueryTotalFilterClauseCount:\n entry.previousSqliteQueryTotalFilterClauseCount,\n sqliteQueryJsRemainderRatio: entry.previousSqliteQueryJsRemainderRatio,\n sqliteQueryReturnedCount: entry.previousSqliteQueryReturnedCount,\n sqliteQueryBackfillLimitReached:\n entry.previousSqliteQueryBackfillLimitReached,\n sqliteQueryMinResultsSatisfied:\n entry.previousSqliteQueryMinResultsSatisfied,\n sqliteQueryCandidateYieldRatio:\n entry.previousSqliteQueryCandidateYieldRatio,\n sqliteQueryTopKFillRatio: entry.previousSqliteQueryTopKFillRatio,\n sqliteQueryUnderfilledTopK: entry.previousSqliteQueryUnderfilledTopK,\n });\n const currentPlanner = formatSQLitePlannerCueSummary(entry);\n\n if (\n previousPlanner === \"none\" ||\n currentPlanner === \"none\" ||\n previousPlanner === currentPlanner\n ) {\n return undefined;\n }\n\n return `${entry.label ?? entry.caseId} ${previousPlanner}→${currentPlanner}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return shifts.length > 0 ? shifts.join(\" · \") : \"none\";\n};\n\nconst formatHistoryPostgresPlannerShift = (history?: RAGEvaluationHistory) => {\n if (!history?.caseTraceSnapshots.length) {\n return \"none\";\n }\n\n const shifts = history.caseTraceSnapshots\n .map((entry) => {\n const previousPlanner = formatPostgresPlannerCueSummary({\n postgresQueryBackfillCount: entry.previousPostgresQueryBackfillCount,\n postgresQueryCandidateBudgetExhausted:\n entry.previousPostgresQueryCandidateBudgetExhausted,\n postgresQueryCandidateCoverage:\n entry.previousPostgresQueryCandidateCoverage,\n postgresQueryFilteredCandidates:\n entry.previousPostgresQueryFilteredCandidates,\n postgresQueryFinalSearchK: entry.previousPostgresQueryFinalSearchK,\n postgresQueryInitialSearchK: entry.previousPostgresQueryInitialSearchK,\n postgresQuerySearchExpansionRatio:\n entry.previousPostgresQuerySearchExpansionRatio,\n postgresQueryJsRemainderClauseCount:\n entry.previousPostgresQueryJsRemainderClauseCount,\n postgresQueryCandidateLimitUsed:\n entry.previousPostgresQueryCandidateLimitUsed,\n postgresQueryMaxBackfillsUsed:\n entry.previousPostgresQueryMaxBackfillsUsed,\n postgresQueryMinResultsUsed: entry.previousPostgresQueryMinResultsUsed,\n postgresQueryFillPolicyUsed: entry.previousPostgresQueryFillPolicyUsed,\n postgresQueryMultiplierUsed: entry.previousPostgresQueryMultiplierUsed,\n postgresQueryMode: entry.previousPostgresQueryMode,\n postgresQueryPushdownApplied:\n entry.previousPostgresQueryPushdownApplied,\n postgresQueryPushdownClauseCount:\n entry.previousPostgresQueryPushdownClauseCount,\n postgresQueryPushdownCoverageRatio:\n entry.previousPostgresQueryPushdownCoverageRatio,\n postgresQueryPushdownMode: entry.previousPostgresQueryPushdownMode,\n postgresQueryTotalFilterClauseCount:\n entry.previousPostgresQueryTotalFilterClauseCount,\n postgresQueryJsRemainderRatio:\n entry.previousPostgresQueryJsRemainderRatio,\n postgresQueryReturnedCount: entry.previousPostgresQueryReturnedCount,\n postgresQueryBackfillLimitReached:\n entry.previousPostgresQueryBackfillLimitReached,\n postgresQueryMinResultsSatisfied:\n entry.previousPostgresQueryMinResultsSatisfied,\n postgresQueryCandidateYieldRatio:\n entry.previousPostgresQueryCandidateYieldRatio,\n postgresQueryTopKFillRatio: entry.previousPostgresQueryTopKFillRatio,\n postgresQueryUnderfilledTopK:\n entry.previousPostgresQueryUnderfilledTopK,\n });\n const currentPlanner = formatPostgresPlannerCueSummary(entry);\n if (\n previousPlanner === \"none\" ||\n currentPlanner === \"none\" ||\n previousPlanner === currentPlanner\n ) {\n return undefined;\n }\n\n return `${entry.label ?? entry.caseId} ${previousPlanner}→${currentPlanner}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return shifts.length > 0 ? shifts.join(\" · \") : \"none\";\n};\n\nconst formatTraceLeadChanges = (\n changes?: Array<{\n caseId: string;\n label?: string;\n previousLead?: string;\n currentLead: string;\n }>,\n) =>\n changes && changes.length > 0\n ? changes\n .slice(0, 3)\n .map((entry) => {\n const label = entry.label ?? entry.caseId;\n const previousLead = entry.previousLead ?? \"n/a\";\n return `${label} ${previousLead}→${entry.currentLead}`;\n })\n .join(\" · \")\n : \"none\";\n\nconst formatGroundingHistoryCaseLabels = (\n cases: RAGAnswerGroundingEvaluationCaseDiff[],\n) =>\n cases.length > 0\n ? cases.map((entry) => entry.label ?? entry.caseId).join(\", \")\n : \"none\";\n\nconst formatRerankerComparisonHeadline = (entry: RAGRerankerComparisonEntry) =>\n [\n entry.label,\n `passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n `f1 ${entry.response.summary.averageF1.toFixed(3)}`,\n `latency ${entry.response.summary.averageLatencyMs.toFixed(1)}ms`,\n ].join(\" · \");\n\nconst formatRetrievalComparisonHeadline = (\n entry: RAGRetrievalComparisonEntry,\n) =>\n [\n entry.label,\n `mode ${entry.retrievalMode}`,\n `passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n `f1 ${entry.response.summary.averageF1.toFixed(3)}`,\n `latency ${entry.response.summary.averageLatencyMs.toFixed(1)}ms`,\n ].join(\" · \");\n\nconst formatTraceModes = (modes: RAGHybridRetrievalMode[]) =>\n modes.length > 0 ? modes.join(\" / \") : \"n/a\";\n\nconst formatSourceBalanceStrategies = (\n strategies: RAGSourceBalanceStrategy[],\n) => (strategies.length > 0 ? strategies.join(\" / \") : \"n/a\");\n\nconst formatTraceStageSummary = (\n stageCounts: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n >,\n) => {\n const topStages = Object.entries(stageCounts)\n .sort((left, right) => right[1] - left[1])\n .slice(0, 3);\n\n return topStages.length > 0\n ? topStages.map(([stage, count]) => `${stage} ${count}`).join(\" · \")\n : \"n/a\";\n};\n\nconst formatTraceRatio = (count: number, total: number) => `${count}/${total}`;\n\nconst formatTraceCountDelta = (value: number) =>\n `${value >= 0 ? \"+\" : \"\"}${value}`;\n\nconst buildComparisonOverviewPresentation = <\n TEntry extends {\n label: string;\n response: {\n passingRate: number;\n summary: {\n averageF1: number;\n averageLatencyMs: number;\n };\n };\n },\n>(input: {\n entries: TEntry[];\n summary: {\n bestByPassingRate?: string;\n bestByAverageF1?: string;\n fastest?: string;\n bestByPresentationTitleCueCases?: string;\n bestByPresentationBodyCueCases?: string;\n bestByPresentationNotesCueCases?: string;\n bestBySpreadsheetSheetCueCases?: string;\n bestBySpreadsheetTableCueCases?: string;\n bestBySpreadsheetColumnCueCases?: string;\n bestByMultivectorCollapsedCases?: string;\n bestByMultivectorLexicalHitCases?: string;\n bestByMultivectorVectorHitCases?: string;\n bestByEvidenceReconcileCases?: string;\n bestByOfficeEvidenceReconcileCases?: string;\n bestByOfficeParagraphEvidenceReconcileCases?: string;\n bestByOfficeListEvidenceReconcileCases?: string;\n bestByOfficeTableEvidenceReconcileCases?: string;\n bestByPDFEvidenceReconcileCases?: string;\n bestByLowestRuntimeCandidateBudgetExhaustedCases?: string;\n bestByLowestRuntimeUnderfilledTopKCases?: string;\n };\n resolveLabel: (id?: string) => string;\n resolveEntry: (id?: string) => TEntry | undefined;\n}): RAGComparisonOverviewPresentation => {\n const winnerLabel = input.resolveLabel(input.summary.bestByPassingRate);\n const winnerEntry = input.resolveEntry(input.summary.bestByPassingRate);\n const rows: RAGLabelValueRow[] = [\n {\n label: \"Best passing rate\",\n value: input.resolveLabel(input.summary.bestByPassingRate),\n },\n {\n label: \"Best average F1\",\n value: input.resolveLabel(input.summary.bestByAverageF1),\n },\n {\n label: \"Fastest\",\n value: input.resolveLabel(input.summary.fastest),\n },\n ];\n\n if (input.summary.bestByMultivectorCollapsedCases) {\n rows.push({\n label: \"Best multivector collapse\",\n value: input.resolveLabel(input.summary.bestByMultivectorCollapsedCases),\n });\n }\n if (input.summary.bestByMultivectorLexicalHitCases) {\n rows.push({\n label: \"Best multivector lexical hits\",\n value: input.resolveLabel(input.summary.bestByMultivectorLexicalHitCases),\n });\n }\n if (input.summary.bestByMultivectorVectorHitCases) {\n rows.push({\n label: \"Best multivector vector hits\",\n value: input.resolveLabel(input.summary.bestByMultivectorVectorHitCases),\n });\n }\n if (input.summary.bestByEvidenceReconcileCases) {\n rows.push({\n label: \"Best evidence reconcile\",\n value: input.resolveLabel(input.summary.bestByEvidenceReconcileCases),\n });\n }\n if (input.summary.bestByPresentationTitleCueCases) {\n rows.push({\n label: \"Best presentation title cue\",\n value: input.resolveLabel(input.summary.bestByPresentationTitleCueCases),\n });\n }\n if (input.summary.bestByPresentationBodyCueCases) {\n rows.push({\n label: \"Best presentation body cue\",\n value: input.resolveLabel(input.summary.bestByPresentationBodyCueCases),\n });\n }\n if (input.summary.bestByPresentationNotesCueCases) {\n rows.push({\n label: \"Best presentation notes cue\",\n value: input.resolveLabel(input.summary.bestByPresentationNotesCueCases),\n });\n }\n if (input.summary.bestBySpreadsheetSheetCueCases) {\n rows.push({\n label: \"Best spreadsheet sheet cue\",\n value: input.resolveLabel(input.summary.bestBySpreadsheetSheetCueCases),\n });\n }\n if (input.summary.bestBySpreadsheetTableCueCases) {\n rows.push({\n label: \"Best spreadsheet table cue\",\n value: input.resolveLabel(input.summary.bestBySpreadsheetTableCueCases),\n });\n }\n if (input.summary.bestBySpreadsheetColumnCueCases) {\n rows.push({\n label: \"Best spreadsheet column cue\",\n value: input.resolveLabel(input.summary.bestBySpreadsheetColumnCueCases),\n });\n }\n if (input.summary.bestByOfficeEvidenceReconcileCases) {\n rows.push({\n label: \"Best office structure reconcile (docx/xlsx/pptx)\",\n value: input.resolveLabel(\n input.summary.bestByOfficeEvidenceReconcileCases,\n ),\n });\n }\n if (input.summary.bestByOfficeParagraphEvidenceReconcileCases) {\n rows.push({\n label: \"Best office narrative reconcile\",\n value: input.resolveLabel(\n input.summary.bestByOfficeParagraphEvidenceReconcileCases,\n ),\n });\n }\n if (input.summary.bestByOfficeListEvidenceReconcileCases) {\n rows.push({\n label: \"Best office checklist reconcile\",\n value: input.resolveLabel(\n input.summary.bestByOfficeListEvidenceReconcileCases,\n ),\n });\n }\n if (input.summary.bestByOfficeTableEvidenceReconcileCases) {\n rows.push({\n label: \"Best office table reconcile\",\n value: input.resolveLabel(\n input.summary.bestByOfficeTableEvidenceReconcileCases,\n ),\n });\n }\n if (input.summary.bestByPDFEvidenceReconcileCases) {\n rows.push({\n label: \"Best PDF native evidence\",\n value: input.resolveLabel(input.summary.bestByPDFEvidenceReconcileCases),\n });\n }\n if (input.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases) {\n rows.push({\n label: \"Lowest runtime budget exhaustion\",\n value: input.resolveLabel(\n input.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases,\n ),\n });\n }\n if (input.summary.bestByLowestRuntimeUnderfilledTopKCases) {\n rows.push({\n label: \"Lowest runtime underfilled TopK\",\n value: input.resolveLabel(\n input.summary.bestByLowestRuntimeUnderfilledTopKCases,\n ),\n });\n }\n\n return {\n rows,\n winnerLabel,\n summary: winnerEntry\n ? `passing ${formatEvaluationPassingRate(winnerEntry.response.passingRate)} · f1 ${winnerEntry.response.summary.averageF1.toFixed(3)} · latency ${winnerEntry.response.summary.averageLatencyMs.toFixed(1)}ms`\n : \"Stored benchmark comparison\",\n };\n};\n\nexport const buildRAGComparisonTraceSummaryRows = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n): RAGLabelValueRow[] => {\n const trace = entry.traceSummary;\n const rows: RAGLabelValueRow[] = [\n {\n label: \"Lead cues\",\n value: formatComparisonLeadCueSummary(entry),\n },\n {\n label: \"Lead media cues\",\n value: formatComparisonLeadMediaCueSummary(entry),\n },\n {\n label: \"Presentation cues\",\n value: formatComparisonPresentationCueSummary(entry),\n },\n {\n label: \"SQLite planner cues\",\n value: formatComparisonSQLitePlannerCueSummary(entry),\n },\n {\n label: \"Postgres planner cues\",\n value: formatComparisonPostgresPlannerCueSummary(entry),\n },\n {\n label: \"Routing cues\",\n value: formatComparisonRoutingCueSummary(entry),\n },\n ];\n\n if (!trace) {\n rows.unshift({ label: \"Trace\", value: \"Unavailable\" });\n return rows;\n }\n\n rows.push(\n { label: \"Modes\", value: formatTraceModes(trace.modes) },\n {\n label: \"Balance\",\n value: formatSourceBalanceStrategies(trace.sourceBalanceStrategies),\n },\n { label: \"Avg final\", value: trace.averageFinalCount.toFixed(1) },\n { label: \"Avg vector\", value: trace.averageVectorCount.toFixed(1) },\n { label: \"Avg lexical\", value: trace.averageLexicalCount.toFixed(1) },\n {\n label: \"Balanced\",\n value: formatTraceRatio(trace.balancedCases, trace.totalCases),\n },\n {\n label: \"Round robin\",\n value: formatTraceRatio(trace.roundRobinCases, trace.totalCases),\n },\n {\n label: \"Transforms\",\n value: formatTraceRatio(trace.transformedCases, trace.totalCases),\n },\n {\n label: \"Variants\",\n value: formatTraceRatio(trace.variantCases, trace.totalCases),\n },\n {\n label: \"Multivector\",\n value: `${formatTraceRatio(\n trace.multiVectorCases,\n trace.totalCases,\n )} · collapse ${formatTraceRatio(\n trace.multiVectorCollapsedCases,\n trace.totalCases,\n )} · lexical ${formatTraceRatio(\n trace.multiVectorLexicalHitCases,\n trace.totalCases,\n )} · vector ${formatTraceRatio(\n trace.multiVectorVectorHitCases,\n trace.totalCases,\n )}`,\n },\n {\n label: \"Runtime\",\n value: `budget ${formatTraceRatio(\n trace.runtimeCandidateBudgetExhaustedCases,\n trace.totalCases,\n )} · underfilled ${formatTraceRatio(\n trace.runtimeUnderfilledTopKCases,\n trace.totalCases,\n )}`,\n },\n {\n label: \"Evidence reconcile (office/pdf)\",\n value: `all ${formatTraceRatio(\n trace.stageCounts.evidence_reconcile ?? 0,\n trace.totalCases,\n )} · office structure ${formatTraceRatio(\n trace.officeEvidenceReconcileCases,\n trace.totalCases,\n )} · narrative ${formatTraceRatio(\n trace.officeParagraphEvidenceReconcileCases ?? 0,\n trace.totalCases,\n )} · checklist ${formatTraceRatio(\n trace.officeListEvidenceReconcileCases ?? 0,\n trace.totalCases,\n )} · table ${formatTraceRatio(\n trace.officeTableEvidenceReconcileCases ?? 0,\n trace.totalCases,\n )} · pdf native ${formatTraceRatio(\n trace.pdfEvidenceReconcileCases,\n trace.totalCases,\n )}`,\n },\n {\n label: \"TopK\",\n value: `${trace.averageCandidateTopK.toFixed(\n 1,\n )} / ${trace.averageLexicalTopK.toFixed(1)}`,\n },\n {\n label: \"Stages\",\n value: formatTraceStageSummary(trace.stageCounts),\n },\n );\n\n return rows;\n};\n\nexport const buildRAGComparisonTraceDiffRows = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n): RAGLabelValueRow[] => {\n const trace = entry.traceSummary;\n const leadDriftRow = {\n label: \"Lead drift vs leader\",\n value: formatComparisonLeadDrift(entry, leader),\n } satisfies RAGLabelValueRow;\n const leadMediaDriftRow = {\n label: \"Lead media shift vs leader\",\n value: formatComparisonLeadMediaDrift(entry, leader),\n } satisfies RAGLabelValueRow;\n const sqlitePlannerDriftRow = {\n label: \"SQLite planner shift vs leader\",\n value: formatComparisonSQLitePlannerDrift(entry, leader),\n } satisfies RAGLabelValueRow;\n const postgresPlannerDriftRow = {\n label: \"Postgres planner shift vs leader\",\n value: formatComparisonPostgresPlannerDrift(entry, leader),\n } satisfies RAGLabelValueRow;\n const routingDriftRow = {\n label: \"Routing shift vs leader\",\n value: formatComparisonRoutingDrift(entry, leader),\n } satisfies RAGLabelValueRow;\n\n if (!trace) {\n return [\n { label: \"Trace\", value: \"Unavailable for comparison\" },\n leadDriftRow,\n leadMediaDriftRow,\n sqlitePlannerDriftRow,\n postgresPlannerDriftRow,\n routingDriftRow,\n ];\n }\n\n const leaderTrace = leader?.traceSummary;\n if (!leaderTrace) {\n return [\n { label: \"Baseline\", value: \"Leader trace unavailable\" },\n leadDriftRow,\n leadMediaDriftRow,\n sqlitePlannerDriftRow,\n postgresPlannerDriftRow,\n routingDriftRow,\n ];\n }\n\n if (entry === leader) {\n return [\n { label: \"Baseline\", value: \"Leader strategy\" },\n leadDriftRow,\n leadMediaDriftRow,\n sqlitePlannerDriftRow,\n postgresPlannerDriftRow,\n routingDriftRow,\n ];\n }\n\n const stageDelta = Object.keys({\n ...leaderTrace.stageCounts,\n ...trace.stageCounts,\n })\n .map((stage) => {\n const typedStage = stage as RAGRetrievalTraceStep[\"stage\"];\n const delta =\n (trace.stageCounts[typedStage] ?? 0) -\n (leaderTrace.stageCounts[typedStage] ?? 0);\n return delta === 0\n ? null\n : `${typedStage} ${formatTraceCountDelta(delta)}`;\n })\n .filter((value): value is string => Boolean(value))\n .slice(0, 3)\n .join(\" · \");\n\n const rows: RAGLabelValueRow[] = [{ label: \"Baseline\", value: leader.label }];\n\n if (formatTraceModes(trace.modes) !== formatTraceModes(leaderTrace.modes)) {\n rows.push({\n label: \"Modes vs leader\",\n value: `${formatTraceModes(trace.modes)} vs ${formatTraceModes(\n leaderTrace.modes,\n )}`,\n });\n }\n\n if (\n formatSourceBalanceStrategies(trace.sourceBalanceStrategies) !==\n formatSourceBalanceStrategies(leaderTrace.sourceBalanceStrategies)\n ) {\n rows.push({\n label: \"Balance vs leader\",\n value: `${formatSourceBalanceStrategies(\n trace.sourceBalanceStrategies,\n )} vs ${formatSourceBalanceStrategies(\n leaderTrace.sourceBalanceStrategies,\n )}`,\n });\n }\n\n rows.push(\n leadDriftRow,\n leadMediaDriftRow,\n sqlitePlannerDriftRow,\n postgresPlannerDriftRow,\n routingDriftRow,\n );\n\n rows.push(\n {\n label: \"Final delta\",\n value: formatSignedDelta(\n trace.averageFinalCount - leaderTrace.averageFinalCount,\n 1,\n ),\n },\n {\n label: \"Vector delta\",\n value: formatSignedDelta(\n trace.averageVectorCount - leaderTrace.averageVectorCount,\n 1,\n ),\n },\n {\n label: \"Lexical delta\",\n value: formatSignedDelta(\n trace.averageLexicalCount - leaderTrace.averageLexicalCount,\n 1,\n ),\n },\n {\n label: \"Transform delta\",\n value: formatTraceCountDelta(\n trace.transformedCases - leaderTrace.transformedCases,\n ),\n },\n {\n label: \"Balanced delta\",\n value: formatTraceCountDelta(\n trace.balancedCases - leaderTrace.balancedCases,\n ),\n },\n {\n label: \"Round robin delta\",\n value: formatTraceCountDelta(\n trace.roundRobinCases - leaderTrace.roundRobinCases,\n ),\n },\n {\n label: \"Runtime budget delta\",\n value: formatTraceCountDelta(\n trace.runtimeCandidateBudgetExhaustedCases -\n leaderTrace.runtimeCandidateBudgetExhaustedCases,\n ),\n },\n {\n label: \"Runtime underfilled delta\",\n value: formatTraceCountDelta(\n trace.runtimeUnderfilledTopKCases -\n leaderTrace.runtimeUnderfilledTopKCases,\n ),\n },\n );\n\n if (stageDelta) {\n rows.push({ label: \"Stage delta\", value: stageDelta });\n }\n\n return rows;\n};\n\nexport const buildRAGRetrievalComparisonPresentations = (\n comparison: RAGRetrievalComparison,\n): RAGComparisonPresentation[] => {\n const leader = comparison.entries[0];\n return comparison.entries.map((entry) => ({\n diffLabel: leader?.label ?? \"Leader\",\n diffRows: buildRAGComparisonTraceDiffRows(entry, leader),\n summary: formatRetrievalComparisonHeadline(entry),\n id: entry.retrievalId,\n label: entry.label,\n traceSummaryRows: buildRAGComparisonTraceSummaryRows(entry),\n }));\n};\n\nexport const buildRAGRetrievalComparisonOverviewPresentation = (\n comparison: RAGRetrievalComparison,\n): RAGComparisonOverviewPresentation =>\n buildComparisonOverviewPresentation({\n entries: comparison.entries,\n resolveEntry: (id?: string) =>\n comparison.entries.find((entry) => entry.retrievalId === id),\n resolveLabel: (id?: string) =>\n comparison.entries.find((entry) => entry.retrievalId === id)?.label ??\n id ??\n \"n/a\",\n summary: comparison.summary,\n });\n\nexport const buildRAGRerankerComparisonPresentations = (\n comparison: RAGRerankerComparison,\n): RAGComparisonPresentation[] => {\n const leader = comparison.entries[0];\n return comparison.entries.map((entry) => ({\n diffLabel: leader?.label ?? \"Leader\",\n diffRows: buildRAGComparisonTraceDiffRows(entry, leader),\n summary: formatRerankerComparisonHeadline(entry),\n id: entry.rerankerId,\n label: entry.label,\n traceSummaryRows: buildRAGComparisonTraceSummaryRows(entry),\n }));\n};\n\nexport const buildRAGRerankerComparisonOverviewPresentation = (\n comparison: RAGRerankerComparison,\n): RAGComparisonOverviewPresentation =>\n buildComparisonOverviewPresentation({\n entries: comparison.entries,\n resolveEntry: (id?: string) =>\n comparison.entries.find((entry) => entry.rerankerId === id),\n resolveLabel: (id?: string) =>\n comparison.entries.find((entry) => entry.rerankerId === id)?.label ??\n id ??\n \"n/a\",\n summary: comparison.summary,\n });\n\nexport const buildRAGGroundingProviderPresentations = (\n entries: Array<{\n providerKey: string;\n label: string;\n elapsedMs: number;\n response: RAGAnswerGroundingEvaluationResponse;\n }>,\n): RAGGroundingProviderPresentation[] =>\n entries.map((entry) => ({\n summary: [\n entry.label,\n `passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n `citation f1 ${entry.response.summary.averageCitationF1.toFixed(3)}`,\n `resolved ${formatEvaluationPassingRate(\n entry.response.summary.averageResolvedCitationRate,\n )}`,\n `latency ${entry.elapsedMs.toFixed(1)}ms`,\n ].join(\" · \"),\n id: entry.providerKey,\n label: entry.label,\n }));\n\nexport const buildRAGGroundingProviderOverviewPresentation = (input: {\n entries: Array<{\n providerKey: string;\n label: string;\n elapsedMs: number;\n response: RAGAnswerGroundingEvaluationResponse;\n }>;\n summary: {\n bestByPassingRate?: string;\n bestByAverageCitationF1?: string;\n bestByResolvedCitationRate?: string;\n fastest?: string;\n };\n}): RAGGroundingProviderOverviewPresentation => {\n const resolveLabel = (key?: string) =>\n input.entries.find((entry) => entry.providerKey === key)?.label ??\n key ??\n \"n/a\";\n const winnerLabel = resolveLabel(input.summary.bestByPassingRate);\n const winnerEntry = input.entries.find(\n (entry) => entry.providerKey === input.summary.bestByPassingRate,\n );\n\n return {\n rows: [\n {\n label: \"Best passing rate\",\n value: resolveLabel(input.summary.bestByPassingRate),\n },\n {\n label: \"Best citation F1\",\n value: resolveLabel(input.summary.bestByAverageCitationF1),\n },\n {\n label: \"Best resolved citations\",\n value: resolveLabel(input.summary.bestByResolvedCitationRate),\n },\n {\n label: \"Fastest\",\n value: resolveLabel(input.summary.fastest),\n },\n ],\n winnerLabel,\n summary: winnerEntry\n ? `passing ${formatEvaluationPassingRate(winnerEntry.response.passingRate)} · citation f1 ${winnerEntry.response.summary.averageCitationF1.toFixed(3)} · resolved ${formatEvaluationPassingRate(winnerEntry.response.summary.averageResolvedCitationRate)}`\n : \"Stored workflow evaluation\",\n };\n};\n\nexport const buildRAGRetrievalOverviewPresentation = (\n comparison: RAGRetrievalComparison,\n): RAGQualityOverviewPresentation => ({\n rows: buildRAGRetrievalComparisonOverviewPresentation(comparison).rows,\n});\n\nexport const buildRAGRerankerOverviewPresentation = (\n comparison: RAGRerankerComparison,\n): RAGQualityOverviewPresentation => ({\n rows: buildRAGRerankerComparisonOverviewPresentation(comparison).rows,\n});\n\nexport const buildRAGGroundingOverviewPresentation = (input: {\n groundingEvaluation: RAGAnswerGroundingEvaluationResponse;\n groundingProviderOverview?: RAGGroundingProviderOverviewPresentation | null;\n}): RAGGroundingOverviewPresentation => ({\n rows: [\n {\n label: \"Grounding\",\n value: formatGroundingHistorySummaryValue(input.groundingEvaluation),\n },\n ...(input.groundingProviderOverview?.rows ?? [\n {\n label: \"Grounding providers\",\n value: \"Configure an AI provider to compare grounded answers.\",\n },\n ]),\n ],\n});\n\nexport const buildRAGQualityOverviewPresentation = (input: {\n retrievalComparison: RAGRetrievalComparison;\n rerankerComparison: RAGRerankerComparison;\n groundingEvaluation: RAGAnswerGroundingEvaluationResponse;\n groundingProviderOverview?: RAGGroundingProviderOverviewPresentation | null;\n}): RAGQualityOverviewPresentation => ({\n rows: [\n ...buildRAGRetrievalOverviewPresentation(input.retrievalComparison).rows,\n ...buildRAGRerankerOverviewPresentation(input.rerankerComparison).rows,\n ...buildRAGGroundingOverviewPresentation({\n groundingEvaluation: input.groundingEvaluation,\n groundingProviderOverview: input.groundingProviderOverview,\n }).rows,\n ],\n});\n\nexport const buildRAGGroundingProviderCaseComparisonPresentations = (\n comparisons: Array<{\n caseId: string;\n label: string;\n entries: Array<{\n providerKey: string;\n label: string;\n status: string;\n coverage: string;\n citationF1: number;\n resolvedCitationRate: number;\n matchedIds: string[];\n missingIds: string[];\n extraIds: string[];\n answerExcerpt: string;\n }>;\n summary: {\n bestByStatus?: string;\n bestByCitationF1?: string;\n bestByResolvedCitationRate?: string;\n };\n }>,\n): RAGGroundingProviderCaseComparisonPresentation[] =>\n comparisons.map((comparison) => {\n const resolveLabel = (key?: string) =>\n comparison.entries.find((entry) => entry.providerKey === key)?.label ??\n key ??\n \"n/a\";\n\n return {\n caseId: comparison.caseId,\n label: comparison.label,\n rows: [\n {\n label: \"Best grounded\",\n value: resolveLabel(comparison.summary.bestByStatus),\n },\n {\n label: \"Best citation F1\",\n value: resolveLabel(comparison.summary.bestByCitationF1),\n },\n {\n label: \"Best resolved citations\",\n value: resolveLabel(comparison.summary.bestByResolvedCitationRate),\n },\n ...comparison.entries.map((entry) => ({\n label: entry.label,\n value: [\n entry.status.toUpperCase(),\n `coverage ${entry.coverage}`,\n `f1 ${entry.citationF1.toFixed(3)}`,\n `resolved ${formatEvaluationPassingRate(\n entry.resolvedCitationRate,\n )}`,\n `matched ${entry.matchedIds.join(\", \") || \"none\"}`,\n `missing ${entry.missingIds.join(\", \") || \"none\"}`,\n `extra ${entry.extraIds.join(\", \") || \"none\"}`,\n `answer ${entry.answerExcerpt || \"n/a\"}`,\n ].join(\" · \"),\n })),\n ],\n summary: [\n `Best grounded: ${resolveLabel(comparison.summary.bestByStatus)}`,\n `Best citation F1: ${resolveLabel(\n comparison.summary.bestByCitationF1,\n )}`,\n `Best resolved citations: ${resolveLabel(\n comparison.summary.bestByResolvedCitationRate,\n )}`,\n ].join(\" · \"),\n };\n });\n\nexport const buildRAGEvaluationHistoryRows = (\n history?: RAGEvaluationHistory,\n): RAGLabelValueRow[] => {\n if (!history?.latestRun) {\n return [{ label: \"History\", value: \"No persisted benchmark runs yet.\" }];\n }\n\n const rows: RAGLabelValueRow[] = [\n { label: \"Runs recorded\", value: String(history.runs.length) },\n {\n label: \"Latest\",\n value: `${history.latestRun.label} · ${formatEvaluationSummary(\n history.latestRun.response,\n )}`,\n },\n ];\n\n if (history.latestRun.traceSummary) {\n rows.push({\n label: \"Latest trace\",\n value: `${formatTraceModes(\n history.latestRun.traceSummary.modes,\n )} · balance ${formatSourceBalanceStrategies(\n history.latestRun.traceSummary.sourceBalanceStrategies,\n )} · final ${history.latestRun.traceSummary.averageFinalCount.toFixed(\n 1,\n )} · vector ${history.latestRun.traceSummary.averageVectorCount.toFixed(\n 1,\n )} · lexical ${history.latestRun.traceSummary.averageLexicalCount.toFixed(\n 1,\n )}`,\n });\n }\n\n if (history.previousRun) {\n rows.push({\n label: \"Previous\",\n value: `${history.previousRun.label} · ${formatEvaluationSummary(\n history.previousRun.response,\n )}`,\n });\n }\n\n if (!history.diff) {\n rows.push({\n label: \"History diff\",\n value: \"Run the benchmark again to diff regressions over time.\",\n });\n return rows;\n }\n\n rows.push(\n {\n label: \"Passing delta\",\n value: formatSignedDelta(history.diff.summaryDelta.passingRate, 1, \"%\"),\n },\n {\n label: \"Average F1 delta\",\n value: formatSignedDelta(history.diff.summaryDelta.averageF1, 3),\n },\n {\n label: \"Latency delta\",\n value: formatSignedDelta(\n history.diff.summaryDelta.averageLatencyMs,\n 1,\n \"ms\",\n ),\n },\n {\n label: \"Improved\",\n value: formatHistoryCaseLabels(history.diff.improvedCases),\n },\n {\n label: \"Regressed\",\n value: formatHistoryCaseLabels(history.diff.regressedCases),\n },\n {\n label: \"Lead drift\",\n value: formatTraceLeadChanges(history.diff.traceLeadChanges),\n },\n {\n label: \"SQLite planner shift\",\n value: formatHistorySQLitePlannerShift(history),\n },\n {\n label: \"Postgres planner shift\",\n value: formatHistoryPostgresPlannerShift(history),\n },\n {\n label: \"Trace routing shift\",\n value: formatHistoryRoutingShift(history),\n },\n );\n\n if (history.previousRun) {\n const currentEntityView = buildRAGEvaluationEntityQualityView(\n history.latestRun.response,\n );\n const previousEntityView = buildRAGEvaluationEntityQualityView(\n history.previousRun.response,\n );\n rows.push(\n {\n label: \"Source regression hotspots\",\n value: formatEntityRegressionHotspots(\n currentEntityView.bySource,\n previousEntityView.bySource,\n (entry) => entry.averageF1,\n \"f1\",\n ),\n },\n {\n label: \"Document regression hotspots\",\n value: formatEntityRegressionHotspots(\n currentEntityView.byDocument,\n previousEntityView.byDocument,\n (entry) => entry.averageF1,\n \"f1\",\n ),\n },\n );\n }\n\n if (history.diff.traceSummaryDelta) {\n rows.push(\n {\n label: \"Trace mode shift\",\n value: history.diff.traceSummaryDelta.modesChanged\n ? \"changed\"\n : \"stable\",\n },\n {\n label: \"Trace balance shift\",\n value: history.diff.traceSummaryDelta.sourceBalanceStrategiesChanged\n ? \"changed\"\n : \"stable\",\n },\n {\n label: \"Trace final delta\",\n value: formatSignedDelta(\n history.diff.traceSummaryDelta.averageFinalCount,\n 1,\n ),\n },\n {\n label: \"Trace vector delta\",\n value: formatSignedDelta(\n history.diff.traceSummaryDelta.averageVectorCount,\n 1,\n ),\n },\n {\n label: \"Trace lexical delta\",\n value: formatSignedDelta(\n history.diff.traceSummaryDelta.averageLexicalCount,\n 1,\n ),\n },\n {\n label: \"Trace balanced delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.balancedCases,\n ),\n },\n {\n label: \"Trace round robin delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.roundRobinCases,\n ),\n },\n {\n label: \"Trace transform delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.transformedCases,\n ),\n },\n {\n label: \"Trace variant delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.variantCases,\n ),\n },\n );\n\n const evidenceReconcileDelta =\n history.diff.traceSummaryDelta.stageCounts?.evidence_reconcile;\n if (typeof evidenceReconcileDelta === \"number\") {\n rows.push({\n label: \"Trace evidence reconcile delta (all)\",\n value: formatTraceCountDelta(evidenceReconcileDelta),\n });\n }\n if (\n typeof history.diff.traceSummaryDelta\n .officeEvidenceReconcileCasesDelta === \"number\"\n ) {\n rows.push({\n label: \"Trace office structure evidence reconcile delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.officeEvidenceReconcileCasesDelta,\n ),\n });\n }\n if (\n typeof history.diff.traceSummaryDelta\n .officeParagraphEvidenceReconcileCasesDelta === \"number\"\n ) {\n rows.push({\n label: \"Trace office narrative evidence reconcile delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta\n .officeParagraphEvidenceReconcileCasesDelta,\n ),\n });\n }\n if (\n typeof history.diff.traceSummaryDelta\n .officeListEvidenceReconcileCasesDelta === \"number\"\n ) {\n rows.push({\n label: \"Trace office checklist evidence reconcile delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.officeListEvidenceReconcileCasesDelta,\n ),\n });\n }\n if (\n typeof history.diff.traceSummaryDelta\n .officeTableEvidenceReconcileCasesDelta === \"number\"\n ) {\n rows.push({\n label: \"Trace office table evidence reconcile delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.officeTableEvidenceReconcileCasesDelta,\n ),\n });\n }\n const officeReconcileDeltas = [\n typeof history.diff.traceSummaryDelta\n .officeParagraphEvidenceReconcileCasesDelta === \"number\"\n ? `narrative=${formatTraceCountDelta(\n history.diff.traceSummaryDelta\n .officeParagraphEvidenceReconcileCasesDelta,\n )}`\n : null,\n typeof history.diff.traceSummaryDelta\n .officeListEvidenceReconcileCasesDelta === \"number\"\n ? `checklist=${formatTraceCountDelta(\n history.diff.traceSummaryDelta\n .officeListEvidenceReconcileCasesDelta,\n )}`\n : null,\n typeof history.diff.traceSummaryDelta\n .officeTableEvidenceReconcileCasesDelta === \"number\"\n ? `table=${formatTraceCountDelta(\n history.diff.traceSummaryDelta\n .officeTableEvidenceReconcileCasesDelta,\n )}`\n : null,\n ].filter((value): value is string => Boolean(value));\n if (officeReconcileDeltas.length > 0) {\n rows.push({\n label: \"Trace office reconcile deltas\",\n value: officeReconcileDeltas.join(\", \"),\n });\n }\n if (\n typeof history.diff.traceSummaryDelta.pdfEvidenceReconcileCasesDelta ===\n \"number\"\n ) {\n rows.push({\n label: \"Trace PDF native evidence reconcile delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.pdfEvidenceReconcileCasesDelta,\n ),\n });\n }\n\n const stageDelta = Object.entries(\n history.diff.traceSummaryDelta.stageCounts ?? {},\n )\n .map(([stage, count]) => `${stage} ${formatTraceCountDelta(count)}`)\n .join(\", \");\n\n if (stageDelta) {\n rows.push({ label: \"Trace stage delta\", value: stageDelta });\n }\n }\n\n if (history.caseTraceSnapshots.length > 0) {\n const changedCases = history.caseTraceSnapshots.filter(\n (entry) => entry.traceChange === \"changed\",\n );\n rows.push({\n label: \"Trace drift cases\",\n value:\n changedCases.length > 0\n ? changedCases\n .map((entry) => entry.label ?? entry.caseId)\n .slice(0, 4)\n .join(\", \")\n : \"none\",\n });\n rows.push({\n label: \"Lead media cues\",\n value:\n Array.from(\n new Set(\n history.caseTraceSnapshots\n .map((entry) =>\n formatLeadMediaCueSummary({\n leadChannelAttributionCue: entry.leadChannelAttributionCue,\n leadChannelCue: entry.leadChannelCue,\n leadContinuityCue: entry.leadContinuityCue,\n leadSpeakerAttributionCue: entry.leadSpeakerAttributionCue,\n leadSpeakerCue: entry.leadSpeakerCue,\n }),\n )\n .filter((value) => value !== \"none\"),\n ),\n )\n .slice(0, 3)\n .join(\" · \") || \"none\",\n });\n rows.push({\n label: \"Presentation cues\",\n value:\n Array.from(\n new Set(\n history.caseTraceSnapshots\n .map((entry) =>\n formatLeadPresentationCue(entry.leadPresentationCue),\n )\n .filter((value) => value !== \"none\"),\n ),\n )\n .slice(0, 3)\n .join(\" / \") || \"none\",\n });\n }\n\n return rows;\n};\n\nexport const buildRAGEvaluationCaseTracePresentations = (\n history?: RAGEvaluationHistory,\n): RAGEvaluationCaseTracePresentation[] => {\n if (!history?.caseTraceSnapshots.length) {\n return [];\n }\n\n return history.caseTraceSnapshots.map((entry) => {\n const label = entry.label ?? entry.caseId;\n const currentMode = entry.traceMode ?? \"no-trace\";\n const previousMode = entry.previousTraceMode ?? \"n/a\";\n const currentBalance = entry.sourceBalanceStrategy ?? \"cap\";\n const previousBalance = entry.previousSourceBalanceStrategy ?? \"n/a\";\n const currentVariants =\n entry.variantQueries.length > 0\n ? entry.variantQueries.join(\", \")\n : \"none\";\n const previousVariants =\n entry.previousVariantQueries.length > 0\n ? entry.previousVariantQueries.join(\", \")\n : \"none\";\n const currentStages =\n Object.keys(entry.stageCounts).length > 0\n ? Object.entries(entry.stageCounts)\n .map(([stage, count]) => `${stage} ${count}`)\n .join(\", \")\n : \"none\";\n const previousStages =\n Object.keys(entry.previousStageCounts).length > 0\n ? Object.entries(entry.previousStageCounts)\n .map(([stage, count]) => `${stage} ${count}`)\n .join(\", \")\n : \"none\";\n const currentLeadContext = entry.topContextLabel ?? \"n/a\";\n const previousLeadContext = entry.previousTopContextLabel ?? \"n/a\";\n const currentLeadLocation = entry.topLocatorLabel ?? \"n/a\";\n const previousLeadLocation = entry.previousTopLocatorLabel ?? \"n/a\";\n const currentBoundary = entry.sourceAwareChunkReasonLabel ?? \"n/a\";\n const previousBoundary = entry.previousSourceAwareChunkReasonLabel ?? \"n/a\";\n const currentScope = entry.sourceAwareUnitScopeLabel ?? \"n/a\";\n const previousScope = entry.previousSourceAwareUnitScopeLabel ?? \"n/a\";\n const currentMediaCues = formatLeadMediaCueSummary({\n leadChannelAttributionCue: entry.leadChannelAttributionCue,\n leadChannelCue: entry.leadChannelCue,\n leadContinuityCue: entry.leadContinuityCue,\n leadSpeakerAttributionCue: entry.leadSpeakerAttributionCue,\n leadSpeakerCue: entry.leadSpeakerCue,\n });\n const previousMediaCues = formatLeadMediaCueSummary({\n leadChannelAttributionCue: entry.previousLeadChannelAttributionCue,\n leadChannelCue: entry.previousLeadChannelCue,\n leadContinuityCue: entry.previousLeadContinuityCue,\n leadSpeakerAttributionCue: entry.previousLeadSpeakerAttributionCue,\n leadSpeakerCue: entry.previousLeadSpeakerCue,\n });\n const currentPresentationCue = formatLeadPresentationCue(\n entry.leadPresentationCue,\n );\n const previousPresentationCue = formatLeadPresentationCue(\n entry.previousLeadPresentationCue,\n );\n const leadSummary =\n entry.topLocatorLabel ??\n entry.topContextLabel ??\n entry.sourceAwareUnitScopeLabel ??\n \"n/a\";\n const previousLeadSummary =\n entry.previousTopLocatorLabel ??\n entry.previousTopContextLabel ??\n entry.previousSourceAwareUnitScopeLabel ??\n \"n/a\";\n\n return {\n caseId: entry.caseId,\n label,\n summary: `${entry.traceChange} · ${previousMode}→${currentMode} · ${previousBalance}→${currentBalance} · lead ${previousLeadSummary}→${leadSummary} · final ${\n entry.previousFinalCount ?? 0\n }→${entry.finalCount}`,\n traceChange: entry.traceChange,\n rows: [\n { label: \"Query\", value: entry.query },\n { label: \"Trace change\", value: entry.traceChange },\n { label: \"Mode\", value: `${previousMode}→${currentMode}` },\n {\n label: \"Balance\",\n value: `${previousBalance}→${currentBalance}`,\n },\n {\n label: \"Transformed query\",\n value: `${\n entry.previousTransformedQuery?.trim() || \"n/a\"\n }→${entry.transformedQuery?.trim() || \"n/a\"}`,\n },\n {\n label: \"Final\",\n value: `${entry.previousFinalCount ?? 0}→${entry.finalCount}`,\n },\n {\n label: \"Vector\",\n value: `${entry.previousVectorCount ?? 0}→${entry.vectorCount}`,\n },\n {\n label: \"Lexical\",\n value: `${entry.previousLexicalCount ?? 0}→${entry.lexicalCount}`,\n },\n {\n label: \"Candidate topK\",\n value: `${entry.previousCandidateTopK ?? 0}→${entry.candidateTopK}`,\n },\n {\n label: \"Lexical topK\",\n value: `${entry.previousLexicalTopK ?? 0}→${entry.lexicalTopK}`,\n },\n {\n label: \"Variants\",\n value: `${previousVariants}→${currentVariants}`,\n },\n {\n label: \"Lead context\",\n value: `${previousLeadContext}→${currentLeadContext}`,\n },\n {\n label: \"Lead location\",\n value: `${previousLeadLocation}→${currentLeadLocation}`,\n },\n {\n label: \"Chunk boundary\",\n value: `${previousBoundary}→${currentBoundary}`,\n },\n {\n label: \"Source-aware scope\",\n value: `${previousScope}→${currentScope}`,\n },\n {\n label: \"Lead media cues\",\n value: `${previousMediaCues}→${currentMediaCues}`,\n },\n {\n label: \"Lead presentation cues\",\n value: `${previousPresentationCue}→${currentPresentationCue}`,\n },\n {\n label: \"Stages\",\n value: `${previousStages}→${currentStages}`,\n },\n { label: \"Status\", value: entry.status },\n ],\n };\n });\n};\n\nexport const buildRAGEvaluationHistoryPresentation = (\n history?: RAGEvaluationHistory,\n): RAGEvaluationHistoryPresentation => ({\n caseTraces: buildRAGEvaluationCaseTracePresentations(history),\n rows: buildRAGEvaluationHistoryRows(history),\n summary: history?.latestRun\n ? history.latestRun.label\n : \"No persisted benchmark runs yet.\",\n});\n\nexport const buildRAGEvaluationSuiteSnapshotRows = (\n history?: RAGEvaluationSuiteSnapshotHistory,\n): RAGLabelValueRow[] => {\n if (!history?.latestSnapshot) {\n return [\n { label: \"Suite snapshots\", value: \"No saved suite snapshots yet.\" },\n ];\n }\n\n const rows: RAGLabelValueRow[] = [\n {\n label: \"Snapshots recorded\",\n value: String(history.snapshots.length),\n },\n {\n label: \"Latest snapshot\",\n value: `v${history.latestSnapshot.version} · ${history.latestSnapshot.caseCount} cases`,\n },\n ];\n\n if (history.previousSnapshot) {\n rows.push({\n label: \"Previous snapshot\",\n value: `v${history.previousSnapshot.version} · ${history.previousSnapshot.caseCount} cases`,\n });\n }\n\n if (!history.diff) {\n rows.push({\n label: \"Snapshot diff\",\n value: \"Save another suite snapshot to compare dataset changes.\",\n });\n return rows;\n }\n\n rows.push(\n {\n label: \"Case count change\",\n value: formatSignedDelta(history.diff.caseCountDelta),\n },\n {\n label: \"Added cases\",\n value:\n history.diff.addedCaseIds.length > 0\n ? history.diff.addedCaseIds.join(\", \")\n : \"none\",\n },\n {\n label: \"Removed cases\",\n value:\n history.diff.removedCaseIds.length > 0\n ? history.diff.removedCaseIds.join(\", \")\n : \"none\",\n },\n {\n label: \"Changed cases\",\n value:\n history.diff.changedCaseIds.length > 0\n ? history.diff.changedCaseIds.join(\", \")\n : \"none\",\n },\n {\n label: \"Order changed\",\n value: history.diff.orderChanged ? \"changed\" : \"stable\",\n },\n );\n\n return rows;\n};\n\nexport const buildRAGEvaluationSuiteSnapshotPresentations = (\n history?: RAGEvaluationSuiteSnapshotHistory,\n): RAGEvaluationSuiteSnapshotPresentation[] =>\n (history?.snapshots ?? []).map((snapshot) => ({\n id: snapshot.id,\n label: snapshot.label ?? snapshot.suiteId,\n rows: [\n { label: \"Version\", value: `v${snapshot.version}` },\n { label: \"Created\", value: formatDateLabel(snapshot.createdAt) },\n { label: \"Cases\", value: String(snapshot.caseCount) },\n {\n label: \"Case ids\",\n value:\n snapshot.suite.input.cases.map((entry) => entry.id).join(\", \") ||\n \"none\",\n },\n ],\n summary: `v${snapshot.version} · ${snapshot.caseCount} cases`,\n version: snapshot.version,\n }));\n\nexport const buildRAGEvaluationSuiteSnapshotHistoryPresentation = (\n history?: RAGEvaluationSuiteSnapshotHistory,\n): RAGEvaluationSuiteSnapshotHistoryPresentation => ({\n rows: buildRAGEvaluationSuiteSnapshotRows(history),\n snapshots: buildRAGEvaluationSuiteSnapshotPresentations(history),\n summary: history?.latestSnapshot\n ? `v${history.latestSnapshot.version}`\n : \"No saved suite snapshots yet.\",\n});\n\nconst isRuntimeGateReason = (reason: string) =>\n /runtime|candidate-budget|underfilled/i.test(reason);\n\nconst getFixtureVariantsFromRunTags = (tags?: string[]): string[] =>\n (tags ?? [])\n .filter((tag) => tag.startsWith(\"fixture:\"))\n .map((tag) => tag.slice(\"fixture:\".length))\n .filter((tag, index, all) => tag.length > 0 && all.indexOf(tag) === index);\n\nconst buildRAGRetrievalReleaseHistoryRunPresentation = (\n run: RAGRetrievalComparisonRun,\n): RAGRetrievalReleaseHistoryRunPresentation => {\n const runtimeGateReasons = (\n run.decisionSummary?.gate?.reasons ??\n run.releaseVerdict?.gate?.reasons ??\n []\n ).filter(isRuntimeGateReason);\n const rows: RAGLabelValueRow[] = [\n { label: \"Finished\", value: formatDateLabel(run.finishedAt) },\n {\n label: \"Passing-rate winner\",\n value: run.comparison.summary.bestByPassingRate ?? \"n/a\",\n },\n {\n label: \"Average F1 winner\",\n value: run.comparison.summary.bestByAverageF1 ?? \"n/a\",\n },\n ];\n const fixtureVariants = getFixtureVariantsFromRunTags(run.tags);\n\n if (fixtureVariants.length > 0) {\n rows.push({\n label: \"Fixture variant\",\n value: fixtureVariants.join(\", \"),\n });\n }\n const officeWinnerSummaries = [\n run.comparison.summary.bestByOfficeParagraphEvidenceReconcileCases\n ? `narrative=${run.comparison.summary.bestByOfficeParagraphEvidenceReconcileCases}`\n : null,\n run.comparison.summary.bestByOfficeListEvidenceReconcileCases\n ? `checklist=${run.comparison.summary.bestByOfficeListEvidenceReconcileCases}`\n : null,\n run.comparison.summary.bestByOfficeTableEvidenceReconcileCases\n ? `table=${run.comparison.summary.bestByOfficeTableEvidenceReconcileCases}`\n : null,\n ].filter((value): value is string => Boolean(value));\n if (officeWinnerSummaries.length > 0) {\n rows.push({\n label: \"Office reconcile winners (docx/xlsx/pptx)\",\n value: officeWinnerSummaries.join(\", \"),\n });\n }\n const presentationCueWinners = [\n run.comparison.summary.bestByPresentationTitleCueCases\n ? `title=${run.comparison.summary.bestByPresentationTitleCueCases}`\n : null,\n run.comparison.summary.bestByPresentationBodyCueCases\n ? `body=${run.comparison.summary.bestByPresentationBodyCueCases}`\n : null,\n run.comparison.summary.bestByPresentationNotesCueCases\n ? `notes=${run.comparison.summary.bestByPresentationNotesCueCases}`\n : null,\n ].filter((value): value is string => Boolean(value));\n if (presentationCueWinners.length > 0) {\n rows.push({\n label: \"Presentation cue winners\",\n value: presentationCueWinners.join(\", \"),\n });\n }\n const spreadsheetCueWinners = [\n run.comparison.summary.bestBySpreadsheetSheetCueCases\n ? `sheet=${run.comparison.summary.bestBySpreadsheetSheetCueCases}`\n : null,\n run.comparison.summary.bestBySpreadsheetTableCueCases\n ? `table=${run.comparison.summary.bestBySpreadsheetTableCueCases}`\n : null,\n run.comparison.summary.bestBySpreadsheetColumnCueCases\n ? `column=${run.comparison.summary.bestBySpreadsheetColumnCueCases}`\n : null,\n ].filter((value): value is string => Boolean(value));\n if (spreadsheetCueWinners.length > 0) {\n rows.push({\n label: \"Spreadsheet cue winners\",\n value: spreadsheetCueWinners.join(\", \"),\n });\n }\n if (run.comparison.summary.bestByPresentationTitleCueCases) {\n rows.push({\n label: \"Best presentation title cue\",\n value: run.comparison.summary.bestByPresentationTitleCueCases,\n });\n }\n if (run.comparison.summary.bestByPresentationBodyCueCases) {\n rows.push({\n label: \"Best presentation body cue\",\n value: run.comparison.summary.bestByPresentationBodyCueCases,\n });\n }\n if (run.comparison.summary.bestByPresentationNotesCueCases) {\n rows.push({\n label: \"Best presentation notes cue\",\n value: run.comparison.summary.bestByPresentationNotesCueCases,\n });\n }\n if (run.comparison.summary.bestBySpreadsheetSheetCueCases) {\n rows.push({\n label: \"Best spreadsheet sheet cue\",\n value: run.comparison.summary.bestBySpreadsheetSheetCueCases,\n });\n }\n if (run.comparison.summary.bestBySpreadsheetTableCueCases) {\n rows.push({\n label: \"Best spreadsheet table cue\",\n value: run.comparison.summary.bestBySpreadsheetTableCueCases,\n });\n }\n if (run.comparison.summary.bestBySpreadsheetColumnCueCases) {\n rows.push({\n label: \"Best spreadsheet column cue\",\n value: run.comparison.summary.bestBySpreadsheetColumnCueCases,\n });\n }\n if (run.comparison.summary.bestByOfficeParagraphEvidenceReconcileCases) {\n rows.push({\n label: \"Best office narrative reconcile\",\n value: run.comparison.summary.bestByOfficeParagraphEvidenceReconcileCases,\n });\n }\n if (run.comparison.summary.bestByOfficeListEvidenceReconcileCases) {\n rows.push({\n label: \"Best office checklist reconcile\",\n value: run.comparison.summary.bestByOfficeListEvidenceReconcileCases,\n });\n }\n if (run.comparison.summary.bestByOfficeTableEvidenceReconcileCases) {\n rows.push({\n label: \"Best office table reconcile\",\n value: run.comparison.summary.bestByOfficeTableEvidenceReconcileCases,\n });\n }\n\n if (run.comparison.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases) {\n rows.push({\n label: \"Lowest runtime budget exhaustion\",\n value:\n run.comparison.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases,\n });\n }\n\n if (run.comparison.summary.bestByLowestRuntimeUnderfilledTopKCases) {\n rows.push({\n label: \"Lowest runtime underfilled TopK\",\n value: run.comparison.summary.bestByLowestRuntimeUnderfilledTopKCases,\n });\n }\n\n rows.push(\n {\n label: \"Gate status\",\n value:\n run.decisionSummary?.gate?.status ??\n run.releaseVerdict?.gate?.status ??\n \"n/a\",\n },\n {\n label: \"Runtime gate failures\",\n value:\n runtimeGateReasons.length > 0 ? runtimeGateReasons.join(\"; \") : \"none\",\n },\n );\n\n return {\n label: run.label,\n rows,\n runId: run.id,\n summary:\n runtimeGateReasons.length > 0\n ? `${run.label} · runtime gate blocked`\n : `${run.label} · ${run.comparison.summary.bestByPassingRate ?? \"n/a\"} leads passing rate`,\n };\n};\n\nexport const buildRAGRetrievalReleaseGroupHistoryPresentation = (input: {\n timeline?: RAGRetrievalReleaseTimelineSummary;\n runs?: RAGRetrievalComparisonRun[];\n}): RAGRetrievalReleaseGroupHistoryPresentation => {\n const recentRuns = (input.runs ?? []).map(\n buildRAGRetrievalReleaseHistoryRunPresentation,\n );\n const fixtureVariants = (input.runs ?? [])\n .flatMap((run) => getFixtureVariantsFromRunTags(run.tags))\n .filter((tag, index, all) => all.indexOf(tag) === index);\n const runtimeBlockedRuns = recentRuns.filter((entry) =>\n entry.rows.some(\n (row) => row.label === \"Runtime gate failures\" && row.value !== \"none\",\n ),\n ).length;\n const rows: RAGLabelValueRow[] = [\n {\n label: \"Latest decision\",\n value: input.timeline?.latestDecisionKind ?? \"none\",\n },\n {\n label: \"Latest decision at\",\n value: formatDateLabel(input.timeline?.latestDecisionAt),\n },\n {\n label: \"Last promoted\",\n value: formatDateLabel(input.timeline?.lastPromotedAt),\n },\n {\n label: \"Last reverted\",\n value: formatDateLabel(input.timeline?.lastRevertedAt),\n },\n {\n label: \"Recent runtime-blocked runs\",\n value: String(runtimeBlockedRuns),\n },\n ];\n\n if (fixtureVariants.length > 0) {\n rows.push({\n label: \"Fixture variants\",\n value: fixtureVariants.join(\", \"),\n });\n }\n\n return {\n recentRuns,\n rows,\n summary: input.timeline?.latestDecisionKind\n ? `${input.timeline.latestDecisionKind} · ${recentRuns.length} recent runs`\n : recentRuns.length > 0\n ? `${recentRuns.length} recent runs`\n : \"No release history yet.\",\n };\n};\n\nexport const buildRAGAnswerGroundingCaseSnapshotPresentations = (\n history?: RAGAnswerGroundingEvaluationHistory,\n): RAGAnswerGroundingCaseSnapshotPresentation[] => {\n if (!history?.caseSnapshots.length) {\n return [];\n }\n\n return history.caseSnapshots.map((entry) => {\n const label = entry.label ?? entry.caseId;\n return {\n answerChange: entry.answerChange,\n caseId: entry.caseId,\n label,\n rows: [\n {\n label: \"Query\",\n value: entry.query?.trim().length ? entry.query : \"n/a\",\n },\n { label: \"Answer change\", value: entry.answerChange },\n { label: \"Coverage\", value: entry.coverage },\n {\n label: \"Resolved citations\",\n value: `${entry.resolvedCitationCount}/${entry.citationCount}`,\n },\n {\n label: \"Resolved citation rate\",\n value: entry.resolvedCitationRate.toFixed(3),\n },\n { label: \"Citation F1\", value: entry.citationF1.toFixed(3) },\n {\n label: \"Reference count\",\n value: String(entry.referenceCount),\n },\n {\n label: \"Cited IDs\",\n value: entry.citedIds.length > 0 ? entry.citedIds.join(\", \") : \"none\",\n },\n {\n label: \"Matched IDs\",\n value:\n entry.matchedIds.length > 0 ? entry.matchedIds.join(\", \") : \"none\",\n },\n {\n label: \"Missing IDs\",\n value:\n entry.missingIds.length > 0 ? entry.missingIds.join(\", \") : \"none\",\n },\n {\n label: \"Extra IDs\",\n value: entry.extraIds.length > 0 ? entry.extraIds.join(\", \") : \"none\",\n },\n {\n label: \"Unresolved refs\",\n value:\n entry.ungroundedReferenceNumbers.length > 0\n ? entry.ungroundedReferenceNumbers.join(\", \")\n : \"none\",\n },\n {\n label: \"Answer\",\n value: entry.answer.trim().length > 0 ? entry.answer : \"n/a\",\n },\n {\n label: \"Previous answer\",\n value:\n entry.previousAnswer && entry.previousAnswer.trim().length > 0\n ? entry.previousAnswer\n : \"n/a\",\n },\n ],\n summary: `${entry.answerChange} · ${entry.coverage} · resolved ${entry.resolvedCitationCount}/${entry.citationCount} · refs ${entry.referenceCount}`,\n };\n });\n};\n\nexport const buildRAGAnswerGroundingHistoryRows = (\n history?: RAGAnswerGroundingEvaluationHistory,\n): RAGLabelValueRow[] => {\n if (!history?.latestRun) {\n return [{ label: \"History\", value: \"No persisted provider runs yet.\" }];\n }\n\n const rows: RAGLabelValueRow[] = [\n { label: \"Runs recorded\", value: String(history.runs.length) },\n {\n label: \"Latest\",\n value: `${history.latestRun.label} · ${formatGroundingHistorySummaryValue(\n history.latestRun.response,\n )}`,\n },\n ];\n\n if (history.previousRun) {\n rows.push({\n label: \"Previous\",\n value: `${history.previousRun.label} · ${formatGroundingHistorySummaryValue(\n history.previousRun.response,\n )}`,\n });\n }\n\n if (history.leaderboard[0]) {\n rows.push({\n label: \"Best recorded\",\n value: `#${history.leaderboard[0].rank} · ${history.leaderboard[0].label} · passing ${formatEvaluationPassingRate(\n history.leaderboard[0].passingRate,\n )} · citation f1 ${history.leaderboard[0].averageCitationF1.toFixed(\n 3,\n )} · resolved ${formatEvaluationPassingRate(\n history.leaderboard[0].averageResolvedCitationRate,\n )}`,\n });\n }\n\n if (history.caseSnapshots.length > 0) {\n const changedAnswers = history.caseSnapshots.filter(\n (entry) => entry.answerChange === \"changed\",\n ).length;\n rows.push({\n label: \"Answer drift\",\n value: `${changedAnswers}/${history.caseSnapshots.length} changed`,\n });\n }\n\n if (!history.diff) {\n rows.push({\n label: \"History diff\",\n value:\n \"Run the provider comparison again to diff grounding regressions over time.\",\n });\n return rows;\n }\n\n rows.push(\n {\n label: \"Passing delta\",\n value: formatSignedDelta(history.diff.summaryDelta.passingRate, 1, \"%\"),\n },\n {\n label: \"Citation F1 delta\",\n value: formatSignedDelta(history.diff.summaryDelta.averageCitationF1, 3),\n },\n {\n label: \"Resolved citation delta\",\n value: formatSignedDelta(\n history.diff.summaryDelta.averageResolvedCitationRate * 100,\n 1,\n \"%\",\n ),\n },\n {\n label: \"Improved\",\n value: formatGroundingHistoryCaseLabels(history.diff.improvedCases),\n },\n {\n label: \"Regressed\",\n value: formatGroundingHistoryCaseLabels(history.diff.regressedCases),\n },\n );\n\n if (history.previousRun) {\n const currentEntityView = buildRAGAnswerGroundingEntityQualityView(\n history.latestRun.response,\n );\n const previousEntityView = buildRAGAnswerGroundingEntityQualityView(\n history.previousRun.response,\n );\n rows.push(\n {\n label: \"Source regression hotspots\",\n value: formatEntityRegressionHotspots(\n currentEntityView.bySource,\n previousEntityView.bySource,\n (entry) => entry.averageCitationF1,\n \"citation f1\",\n ),\n },\n {\n label: \"Document regression hotspots\",\n value: formatEntityRegressionHotspots(\n currentEntityView.byDocument,\n previousEntityView.byDocument,\n (entry) => entry.averageCitationF1,\n \"citation f1\",\n ),\n },\n );\n }\n\n return rows;\n};\n\nexport const buildRAGAnswerGroundingHistoryPresentation = (\n history?: RAGAnswerGroundingEvaluationHistory,\n): RAGAnswerGroundingHistoryPresentation => ({\n caseSnapshots: buildRAGAnswerGroundingCaseSnapshotPresentations(history),\n rows: buildRAGAnswerGroundingHistoryRows(history),\n summary: history?.latestRun\n ? history.latestRun.label\n : \"No persisted provider runs yet.\",\n});\n\nconst formatFailureCounts = (failureCounts: Record<string, number>) => {\n const entries = Object.entries(failureCounts).sort((left, right) => {\n if (right[1] !== left[1]) {\n return right[1] - left[1];\n }\n\n return left[0].localeCompare(right[0]);\n });\n\n return entries.length > 0\n ? entries.map(([key, count]) => `${key} ${count}`).join(\" · \")\n : \"none\";\n};\n\nconst formatFailureCountDelta = (\n current: Record<string, number>,\n previous: Record<string, number>,\n) => {\n const deltas = Object.keys({ ...current, ...previous })\n .map((key) => ({\n delta: (current[key] ?? 0) - (previous[key] ?? 0),\n key,\n }))\n .filter((entry) => entry.delta > 0)\n .sort((left, right) => {\n if (right.delta !== left.delta) {\n return right.delta - left.delta;\n }\n\n return left.key.localeCompare(right.key);\n });\n\n return deltas.length > 0\n ? deltas\n .slice(0, 3)\n .map((entry) => `${entry.key} +${entry.delta}`)\n .join(\" · \")\n : \"stable\";\n};\n\nconst formatEntityRegressionHotspots = <\n T extends {\n key: string;\n label: string;\n passingRate: number;\n failureCounts: Record<string, number>;\n },\n>(\n currentEntries: T[],\n previousEntries: T[],\n metricSelector: (entry: T) => number,\n metricLabel: string,\n) => {\n const previousMap = new Map(\n previousEntries.map((entry) => [entry.key, entry]),\n );\n const regressions = currentEntries\n .map((entry) => {\n const previous = previousMap.get(entry.key);\n const passDelta = entry.passingRate - (previous?.passingRate ?? 0);\n const metricDelta =\n metricSelector(entry) - (previous ? metricSelector(previous) : 0);\n const failureDelta = formatFailureCountDelta(\n entry.failureCounts,\n previous?.failureCounts ?? {},\n );\n\n return {\n entry,\n failureDelta,\n metricDelta,\n passDelta,\n };\n })\n .filter(\n (entry) =>\n entry.passDelta < 0 ||\n entry.metricDelta < 0 ||\n entry.failureDelta !== \"stable\",\n )\n .sort((left, right) => {\n if (left.passDelta !== right.passDelta) {\n return left.passDelta - right.passDelta;\n }\n if (left.metricDelta !== right.metricDelta) {\n return left.metricDelta - right.metricDelta;\n }\n\n return left.entry.label.localeCompare(right.entry.label);\n });\n\n return regressions.length > 0\n ? regressions\n .slice(0, 3)\n .map(\n ({ entry, failureDelta, metricDelta, passDelta }) =>\n `${entry.label} pass ${formatSignedDelta(\n passDelta,\n 1,\n \"%\",\n )} · ${metricLabel} ${formatSignedDelta(\n metricDelta,\n 3,\n )} · ${failureDelta}`,\n )\n .join(\" | \")\n : \"none\";\n};\n\nconst buildEvaluationEntityPresentation = (\n entry: RAGEvaluationEntityQualitySummary,\n): RAGEntityQualityPresentation => ({\n key: entry.key,\n label: entry.label,\n rows: [\n { label: \"Entity type\", value: entry.entityType },\n { label: \"Cases\", value: String(entry.totalCases) },\n {\n label: \"Status mix\",\n value: `${entry.passedCases} pass · ${entry.partialCases} partial · ${entry.failedCases} fail`,\n },\n {\n label: \"Passing rate\",\n value: formatEvaluationPassingRate(entry.passingRate),\n },\n { label: \"Average F1\", value: entry.averageF1.toFixed(3) },\n {\n label: \"Failure classes\",\n value: formatFailureCounts(entry.failureCounts),\n },\n {\n label: \"Cases\",\n value: entry.caseIds.length > 0 ? entry.caseIds.join(\", \") : \"none\",\n },\n ],\n summary: `${entry.entityType} · passing ${formatEvaluationPassingRate(\n entry.passingRate,\n )} · f1 ${entry.averageF1.toFixed(3)} · failures ${formatFailureCounts(\n entry.failureCounts,\n )}`,\n});\n\nconst buildGroundingEntityPresentation = (\n entry: RAGAnswerGroundingEntityQualitySummary,\n): RAGEntityQualityPresentation => ({\n key: entry.key,\n label: entry.label,\n rows: [\n { label: \"Entity type\", value: entry.entityType },\n { label: \"Cases\", value: String(entry.totalCases) },\n {\n label: \"Status mix\",\n value: `${entry.passedCases} pass · ${entry.partialCases} partial · ${entry.failedCases} fail`,\n },\n {\n label: \"Passing rate\",\n value: formatEvaluationPassingRate(entry.passingRate),\n },\n {\n label: \"Average citation F1\",\n value: entry.averageCitationF1.toFixed(3),\n },\n {\n label: \"Average resolved citation rate\",\n value: formatEvaluationPassingRate(\n entry.averageResolvedCitationRate * 100,\n ),\n },\n {\n label: \"Failure classes\",\n value: formatFailureCounts(entry.failureCounts),\n },\n {\n label: \"Cases\",\n value: entry.caseIds.length > 0 ? entry.caseIds.join(\", \") : \"none\",\n },\n ],\n summary: `${entry.entityType} · passing ${formatEvaluationPassingRate(\n entry.passingRate,\n )} · citation f1 ${entry.averageCitationF1.toFixed(\n 3,\n )} · failures ${formatFailureCounts(entry.failureCounts)}`,\n});\n\nexport const buildRAGEvaluationEntityQualityPresentation = (\n view: RAGEvaluationEntityQualityView,\n entityType: \"source\" | \"document\",\n): RAGEntityQualityViewPresentation => {\n const entities =\n entityType === \"source\"\n ? view.bySource.map(buildEvaluationEntityPresentation)\n : view.byDocument.map(buildEvaluationEntityPresentation);\n\n return {\n entities,\n rows: [\n { label: \"Entity type\", value: entityType },\n { label: \"Entities tracked\", value: String(entities.length) },\n {\n label: \"Best coverage\",\n value: entities[0]?.summary ?? \"No entity quality data yet.\",\n },\n ],\n summary:\n entities[0]?.label ??\n `No ${entityType === \"source\" ? \"source\" : \"document\"} quality data yet.`,\n };\n};\n\nexport const buildRAGAnswerGroundingEntityQualityPresentation = (\n view: RAGAnswerGroundingEntityQualityView,\n entityType: \"source\" | \"document\",\n): RAGEntityQualityViewPresentation => {\n const entities =\n entityType === \"source\"\n ? view.bySource.map(buildGroundingEntityPresentation)\n : view.byDocument.map(buildGroundingEntityPresentation);\n\n return {\n entities,\n rows: [\n { label: \"Entity type\", value: entityType },\n { label: \"Entities tracked\", value: String(entities.length) },\n {\n label: \"Best coverage\",\n value: entities[0]?.summary ?? \"No entity quality data yet.\",\n },\n ],\n summary:\n entities[0]?.label ??\n `No ${entityType === \"source\" ? \"source\" : \"document\"} quality data yet.`,\n };\n};\n"
9
9
  ],
10
- "mappings": "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ACE,oCACA,kCACA,QACE,mCACA,iCACA,QACE,+BACA,4BACA,QACE,sCACA,oCACA,QACE,qCACA,mCACA,QACE,6BACA,yBACA,QACE,+BACA,2BACA,QACE,mCACA,2BACA,QACE,qCACA,6BACA,QACE,6BACA,0BACA,QACE,+BACA,4BACA,QACE,+BACA,4BACA,QACE,iCACA,8BACA,QACE,wCACA,sCACA,QACE,0CACA,wCACA,QACE,iCACA,8BACA,QACE,mCACA,gCACA,QACE,sBACA,wBACA,QACE,sBACA,wBACA,QACE,yBACA,2BACA,QACE,8BACA,4BACA,QACE,uBACA,yBACA,QACE,uBACA,yBACA,QACE,uBACA,yBACA,QACE,8BACA,iCACA,QACE,mBACA,qBACA,QACE,8BACA,6BACA,QACE,8BACA,6BACA,QACE,mBACA,qBACA,QACE,sBACA,wBACA;AAAA,EAC1I,OACE,QAAQ,2BACH,6BAA6B,KAAK,KAAK,oBAAoB,KAAK,IACjE,QAAQ,8BACL,gCAAgC,KAAK,KAAK,oBAAoB,KAAK,IACpE,QAAQ,8BACL,gCAAgC,KAAK,KACtC,oBAAoB,KAAK,IACzB,QAAQ,sBACL,wBAAwB,KAAK,KAAK,oBAAoB,KAAK,IAC5D,oBAAoB,KAAK;AACvC;AAEO,IAAM,qCAAqC,CAChD,UACkC;AAAA,EAClC,IAAI,CAAC,OAAO;AAAA,IACV,OAAO;AAAA,MACL,SAAS,CAAC;AAAA,MACV,OAAO,CAAC;AAAA,MACR,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,QAA4B;AAAA,IAChC,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK;AAAA,IACnC,EAAE,OAAO,iBAAiB,OAAO,OAAO,MAAM,aAAa,KAAK,EAAE;AAAA,IAClE;AAAA,MACE,OAAO;AAAA,MACP,OAAO,OAAO,MAAM,aAAa,MAAM;AAAA,IACzC;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,OAAO,MAAM,aAAa,OAAO;AAAA,IAC1C;AAAA,EACF;AAAA,EACA,MAAM,UAA8B;AAAA,IAClC,EAAE,OAAO,qBAAqB,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",
10
+ "mappings": "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ACE,oCACA,kCACA,QACE,mCACA,iCACA,QACE,+BACA,4BACA,QACE,sCACA,oCACA,QACE,qCACA,mCACA,QACE,6BACA,yBACA,QACE,+BACA,2BACA,QACE,mCACA,2BACA,QACE,qCACA,6BACA,QACE,6BACA,0BACA,QACE,+BACA,4BACA,QACE,+BACA,4BACA,QACE,iCACA,8BACA,QACE,wCACA,sCACA,QACE,0CACA,wCACA,QACE,iCACA,8BACA,QACE,mCACA,gCACA,QACE,sBACA,wBACA,QACE,sBACA,wBACA,QACE,yBACA,2BACA,QACE,8BACA,4BACA,QACE,uBACA,yBACA,QACE,uBACA,yBACA,QACE,uBACA,yBACA,QACE,8BACA,iCACA,QACE,mBACA,qBACA,QACE,8BACA,6BACA,QACE,8BACA,6BACA,QACE,mBACA,qBACA,QACE,sBACA,wBACA;AAAA,EAC1I,OACE,QAAQ,2BACH,6BAA6B,KAAK,KAAK,oBAAoB,KAAK,IACjE,QAAQ,8BACL,gCAAgC,KAAK,KAAK,oBAAoB,KAAK,IACpE,QAAQ,8BACL,gCAAgC,KAAK,KACtC,oBAAoB,KAAK,IACzB,QAAQ,sBACL,wBAAwB,KAAK,KAAK,oBAAoB,KAAK,IAC5D,oBAAoB,KAAK;AACvC;AAEO,IAAM,qCAAqC,CAChD,UACkC;AAAA,EAClC,IAAI,CAAC,OAAO;AAAA,IACV,OAAO;AAAA,MACL,SAAS,CAAC;AAAA,MACV,OAAO,CAAC;AAAA,MACR,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,QAA4B;AAAA,IAChC,EAAE,OAAO,QAAQ,OAAO,MAAM,KAAK;AAAA,IACnC,EAAE,OAAO,iBAAiB,OAAO,OAAO,MAAM,aAAa,KAAK,EAAE;AAAA,IAClE;AAAA,MACE,OAAO;AAAA,MACP,OAAO,OAAO,MAAM,aAAa,MAAM;AAAA,IACzC;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO,OAAO,MAAM,aAAa,OAAO;AAAA,IAC1C;AAAA,EACF;AAAA,EACA,MAAM,UAA8B;AAAA,IAClC,EAAE,OAAO,qBAAqB,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",
11
11
  "debugId": "9122D6C98F283A5964756E2164756E21",
12
12
  "names": []
13
13
  }