@absolutejs/absolute 0.19.0-beta.635 → 0.19.0-beta.637
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.
- package/dist/ai/client/index.js +17 -3
- package/dist/ai/client/index.js.map +4 -4
- package/dist/ai/client/ui.js +17 -3
- package/dist/ai/client/ui.js.map +4 -4
- package/dist/ai/index.js +59 -9
- package/dist/ai/index.js.map +8 -8
- package/dist/ai/rag/quality.js +17 -3
- package/dist/ai/rag/quality.js.map +4 -4
- package/dist/ai/rag/ui.js +17 -3
- package/dist/ai/rag/ui.js.map +4 -4
- package/dist/angular/ai/index.js +17 -3
- package/dist/angular/ai/index.js.map +4 -4
- package/dist/react/ai/index.js +17 -3
- package/dist/react/ai/index.js.map +4 -4
- package/dist/src/react/ai/useRAG.d.ts +2 -0
- package/dist/src/svelte/ai/createRAG.d.ts +2 -0
- package/dist/src/vue/ai/useRAG.d.ts +16 -0
- package/dist/src/vue/ai/useRAGEvaluate.d.ts +8 -0
- package/dist/src/vue/ai/useRAGIndexAdmin.d.ts +4 -0
- package/dist/src/vue/ai/useRAGSearch.d.ts +2 -0
- package/dist/svelte/ai/index.js +17 -3
- package/dist/svelte/ai/index.js.map +4 -4
- package/dist/types/ai.d.ts +9 -0
- package/dist/vue/ai/index.js +17 -3
- package/dist/vue/ai/index.js.map +4 -4
- package/package.json +7 -7
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { AIClientMessage, AIServerMessage } from './ai';\nimport type { HMRClientMessage } from './messages';\n\n/* Type guard for AI client messages */\nexport const isValidAIClientMessage = (\n\tdata: unknown\n): data is AIClientMessage => {\n\tif (!data || typeof data !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (!('type' in data) || typeof data.type !== 'string') {\n\t\treturn false;\n\t}\n\n\tswitch (data.type) {\n\t\tcase 'message':\n\t\t\treturn 'content' in data && typeof data.content === 'string';\n\t\tcase 'cancel':\n\t\t\treturn (\n\t\t\t\t'conversationId' in data &&\n\t\t\t\ttypeof data.conversationId === 'string'\n\t\t\t);\n\t\tcase 'branch':\n\t\t\treturn (\n\t\t\t\t'messageId' in data &&\n\t\t\t\ttypeof data.messageId === 'string' &&\n\t\t\t\t'content' in data &&\n\t\t\t\ttypeof data.content === 'string' &&\n\t\t\t\t'conversationId' in data &&\n\t\t\t\ttypeof data.conversationId === 'string'\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n};\n\n/* Type guard for AI server messages */\nexport const isValidAIServerMessage = (\n\tdata: unknown\n): data is AIServerMessage => {\n\tif (!data || typeof data !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (!('type' in data) || typeof data.type !== 'string') {\n\t\treturn false;\n\t}\n\n\tswitch (data.type) {\n\t\tcase 'chunk':\n\t\t\treturn (\n\t\t\t\t'content' in data &&\n\t\t\t\ttypeof data.content === 'string' &&\n\t\t\t\t'messageId' in data &&\n\t\t\t\t'conversationId' in data\n\t\t\t);\n\t\tcase 'thinking':\n\t\t\treturn (\n\t\t\t\t'content' in data &&\n\t\t\t\ttypeof data.content === 'string' &&\n\t\t\t\t'messageId' in data &&\n\t\t\t\t'conversationId' in data\n\t\t\t);\n\t\tcase 'tool_status':\n\t\t\treturn (\n\t\t\t\t'name' in data &&\n\t\t\t\t'status' in data &&\n\t\t\t\t'messageId' in data &&\n\t\t\t\t'conversationId' in data\n\t\t\t);\n\t\tcase 'image':\n\t\t\treturn (\n\t\t\t\t'data' in data &&\n\t\t\t\ttypeof data.data === 'string' &&\n\t\t\t\t'format' in data &&\n\t\t\t\ttypeof data.format === 'string' &&\n\t\t\t\t'isPartial' in data &&\n\t\t\t\ttypeof data.isPartial === 'boolean' &&\n\t\t\t\t'messageId' in data &&\n\t\t\t\t'conversationId' in data\n\t\t\t);\n\t\tcase 'complete':\n\t\t\treturn 'messageId' in data && 'conversationId' in data;\n\t\tcase 'rag_retrieved':\n\t\t\treturn (\n\t\t\t\t'conversationId' in data &&\n\t\t\t\t'messageId' in data &&\n\t\t\t\t'sources' in data &&\n\t\t\t\tArray.isArray(data.sources)\n\t\t\t);\n\t\tcase 'error':\n\t\t\treturn 'message' in data && typeof data.message === 'string';\n\t\tdefault:\n\t\t\treturn false;\n\t}\n};\n\n/* Type guard for HMR client messages */\nexport const isValidHMRClientMessage = (\n\tdata: unknown\n): data is HMRClientMessage => {\n\tif (!data || typeof data !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (!('type' in data) || typeof data.type !== 'string') {\n\t\treturn false;\n\t}\n\n\tswitch (data.type) {\n\t\tcase 'ping':\n\t\t\treturn true;\n\t\tcase 'ready':\n\t\t\treturn true;\n\t\tcase 'request-rebuild':\n\t\t\treturn true;\n\t\tcase 'hydration-error':\n\t\t\treturn true;\n\t\tcase 'hmr-timing':\n\t\t\treturn true;\n\t\tdefault:\n\t\t\treturn false;\n\t}\n};\n",
|
|
6
6
|
"export const ANGULAR_INIT_TIMEOUT_MS = 500;\nexport const ANSI_ESCAPE_LENGTH = 3;\nexport const ASCII_SPACE = 32;\nexport const BASE_36_RADIX = 36;\nexport const BUN_BUILD_WARNING_SUPPRESSION =\n\t'wildcard sideEffects are not supported yet';\nexport const BODY_SLICE_LENGTH = 2000;\nexport const BYTES_PER_KILOBYTE = 1024;\nexport const CLI_ARGS_OFFSET = 3;\nexport const CSS_ERROR_RESOLVE_DELAY_MS = 50;\nexport const CSS_MAX_CHECK_ATTEMPTS = 10;\nexport const CSS_MAX_PARSE_TIMEOUT_MS = 500;\nexport const CSS_SHEET_READY_TIMEOUT_MS = 100;\nexport const DEFAULT_CHUNK_SIZE = 16_384;\nexport const DEFAULT_DEBOUNCE_MS = 15;\nexport const DEFAULT_PORT = 3000;\nexport const DEV_SERVER_RESTART_DEBOUNCE_MS = 100;\nexport const DOM_UPDATE_DELAY_MS = 50;\nexport const FILE_PROTOCOL_PREFIX_LENGTH = 7;\nexport const FOCUS_ID_PREFIX_LENGTH = 3;\nexport const FOCUS_IDX_PREFIX_LENGTH = 4;\nexport const FOCUS_NAME_PREFIX_LENGTH = 5;\nexport const HMR_UPDATE_TIMEOUT_MS = 2000;\nexport const HOOK_SIGNATURE_LENGTH = 12;\nexport const EXCLUDE_LAST_OFFSET = -1;\nexport const HTTP_STATUS_OK = 200;\nexport const HTTP_STATUS_BAD_REQUEST = 400;\nexport const HTTP_STATUS_NOT_FOUND = 404;\nexport const HOURS_IN_DAY = 24;\nexport const HOURS_IN_HALF_DAY = 12;\nexport const MAX_ERROR_LENGTH = 200;\nexport const MAX_RECONNECT_ATTEMPTS = 60;\nexport const MILLISECONDS_IN_A_SECOND = 1000;\nexport const MINUTES_IN_AN_HOUR = 60;\nexport const SECONDS_IN_A_MINUTE = 60;\nexport const MILLISECONDS_IN_A_MINUTE =\n\tMILLISECONDS_IN_A_SECOND * SECONDS_IN_A_MINUTE;\nexport const MILLISECONDS_IN_A_DAY =\n\tMILLISECONDS_IN_A_SECOND *\n\tSECONDS_IN_A_MINUTE *\n\tMINUTES_IN_AN_HOUR *\n\tHOURS_IN_DAY;\nexport const OVERLAY_FADE_DURATION_MS = 150;\nexport const PING_INTERVAL_MS = 30_000;\nexport const RAF_BATCH_COUNT = 3;\nexport const RANDOM_ID_END_INDEX = 11;\nexport const REBUILD_BATCH_DELAY_MS = 10;\nexport const REBUILD_RELOAD_DELAY_MS = 200;\nexport const RECONNECT_INITIAL_DELAY_MS = 500;\nexport const RECONNECT_POLL_INTERVAL_MS = 300;\nexport const RAG_CHUNK_ID_PAD_LENGTH = 3;\nexport const RAG_DOCUMENT_ID_PREVIEW_LENGTH = 32;\nexport const RAG_DOCUMENT_SLUG_MAX_LENGTH = 48;\nexport const RAG_MIN_CHUNK_LENGTH_FLOOR = 120;\nexport const RAG_NATIVE_QUERY_CANDIDATE_LIMIT = 1000;\nexport const RAG_SEARCH_SCORE_DECIMAL_PLACES = 3;\nexport const RAG_VECTOR_DIMENSIONS_DEFAULT = 24;\nexport const REACT_STREAM_SLOT_FAST_DELAY_MS = 5;\nexport const REACT_STREAM_SLOT_SLOW_DELAY_MS = 20;\nexport const SIGINT_EXIT_CODE = 130;\nexport const SIGTERM_EXIT_CODE = 143;\nexport const SVELTE_CSS_LOAD_TIMEOUT_MS = 500;\nexport const TIME_PRECISION = 2;\nexport const TWO_THIRDS = 2 / 3;\nexport const UNFOUND_INDEX = -1;\nexport const WEBSOCKET_NORMAL_CLOSURE = 1000;\n",
|
|
7
|
-
"import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport type { Database } from 'bun:sqlite';\nimport type {\n\tRAGAnswerGroundingCaseDifficultyDiffEntry,\n\tRAGAnswerGroundingCaseDifficultyHistory,\n\tRAGAnswerGroundingCaseDifficultyHistoryStore,\n\tRAGAnswerGroundingCaseDifficultyRun,\n\tRAGAnswerGroundingCaseDifficultyRunDiff,\n\tRAGAnswerGroundingEvaluationCaseDiff,\n\tRAGAnswerGroundingEvaluationCase,\n\tRAGAnswerGroundingEvaluationCaseDifficultyEntry,\n\tRAGAnswerGroundingEvaluationCaseSnapshot,\n\tRAGAnswerGroundingEvaluationCaseResult,\n\tRAGAnswerGroundingEvaluationHistory,\n\tRAGAnswerGroundingEvaluationLeaderboardEntry,\n\tRAGAnswerGroundingEvaluationHistoryStore,\n\tRAGAnswerGroundingEvaluationInput,\n\tRAGAnswerGroundingEvaluationResponse,\n\tRAGAnswerGroundingEvaluationRun,\n\tRAGAnswerGroundingEvaluationRunDiff,\n\tRAGCollection,\n\tRAGIndexedDocument,\n\tRAGEvaluationCase,\n\tRAGEvaluationCaseDiff,\n\tRAGEvaluationCaseTraceSnapshot,\n\tRAGEvaluationCaseResult,\n\tRAGEvaluationHistory,\n\tRAGEvaluationHistoryStore,\n\tRAGEvaluationHistoryPruneInput,\n\tRAGEvaluationHistoryPruneResult,\n\tRAGEvaluationInput,\n\tRAGEvaluationLeaderboardEntry,\n\tRAGEvaluationResponse,\n\tRAGEvaluationRunDiff,\n\tRAGLabelValueRow,\n\tRAGComparisonPresentation,\n\tRAGComparisonOverviewPresentation,\n\tRAGGroundingProviderPresentation,\n\tRAGGroundingProviderOverviewPresentation,\n\tRAGGroundingProviderCaseComparisonPresentation,\n\tRAGGroundingOverviewPresentation,\n\tRAGQualityOverviewPresentation,\n\tRAGEvaluationSuite,\n\tRAGEvaluationSuiteGenerationOptions,\n\tRAGEvaluationSuiteDatasetSummary,\n\tRAGEvaluationSuiteSnapshot,\n\tRAGEvaluationSuiteSnapshotDiff,\n\tRAGEvaluationSuiteSnapshotHistory,\n\tRAGEvaluationSuiteSnapshotHistoryStore,\n\tRAGEvaluationSuiteRun,\n\tRAGEvaluationEntityQualitySummary,\n\tRAGEvaluationEntityQualityView,\n\tRAGAnswerGroundingEntityQualitySummary,\n\tRAGAnswerGroundingEntityQualityView,\n\tRAGRetrievalTraceSummaryRun,\n\tRAGHybridRetrievalMode,\n\tRAGSourceBalanceStrategy,\n\tRAGRetrievalCandidate,\n\tRAGRetrievalComparison,\n\tRAGRetrievalBaselineGatePolicy,\n\tRAGRetrievalBaselineGatePolicyHistoryRecord,\n\tRAGRetrievalBaselineGatePolicyHistoryStore,\n\tRAGRetrievalComparisonDecisionSummary,\n\tRAGRetrievalComparisonGateResult,\n\tRAGRetrievalReleaseVerdict,\n\tRAGRetrievalComparisonHistoryStore,\n\tRAGRetrievalBaselineRecord,\n\tRAGRetrievalBaselineStore,\n\tRAGRetrievalLaneHandoffDecisionRecord,\n\tRAGRetrievalLaneHandoffDecisionStore,\n\tRAGRetrievalLaneHandoffIncidentHistoryRecord,\n\tRAGRetrievalLaneHandoffIncidentHistoryStore,\n\tRAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n\tRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore,\n\tRAGRetrievalLaneHandoffIncidentRecord,\n\tRAGRetrievalLaneHandoffIncidentStore,\n\tRAGRetrievalIncidentRemediationDecisionRecord,\n\tRAGRetrievalIncidentRemediationDecisionStore,\n\tRAGRetrievalIncidentRemediationExecutionHistoryRecord,\n\tRAGRetrievalIncidentRemediationExecutionHistoryStore,\n\tRAGRetrievalReleaseDecisionRecord,\n\tRAGRetrievalReleaseLanePolicyHistoryRecord,\n\tRAGRetrievalReleaseLanePolicyHistoryStore,\n\tRAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n\tRAGRetrievalReleaseLaneEscalationPolicyHistoryStore,\n\tRAGRetrievalReleaseDecisionStore,\n\tRAGRetrievalReleaseIncidentRecord,\n\tRAGRetrievalReleaseIncidentStore,\n\tRAGRetrievalComparisonRun,\n\tRAGRetrievalComparisonEntry,\n\tRAGRetrievalTrace,\n\tRAGRetrievalTraceComparisonSummary,\n\tRAGRetrievalTraceComparisonSummaryDiff,\n\tRAGRetrievalTraceStep,\n\tRAGRetrievalTraceStage,\n\tRAGQueryResult,\n\tRAGTraceSummaryListTrend,\n\tRAGTraceSummaryTrendDirection,\n\tRAGTraceSummaryNumericDelta,\n\tRAGTraceSummaryStageTrend,\n\tRAGTraceSummaryStageCountsDelta,\n\tRAGRetrievalComparisonSummary,\n\tRAGRetrievalTraceHistoryWindow,\n\tRAGRerankerCandidate,\n\tRAGRerankerComparison,\n\tRAGRerankerComparisonEntry,\n\tRAGRerankerComparisonSummary,\n\tRAGRerankerProviderLike,\n\tRAGRetrievalTraceTrend,\n\tRAGSearchTraceDiff,\n\tRAGSearchTraceGroupHistory,\n\tRAGSearchTraceGroupHistoryEntry,\n\tRAGSearchTraceHistory,\n\tRAGChatPluginConfig,\n\tRAGSearchTracePruneInput,\n\tRAGSearchTracePruneHistoryStore,\n\tRAGSearchTracePruneRun,\n\tRAGSearchTracePrunePreview,\n\tRAGSearchTracePruneResult,\n\tRAGSearchTraceRecord,\n\tRAGSearchTraceResultSnapshot,\n\tRAGSearchTraceStats,\n\tRAGSearchTraceStore,\n\tRAGRemediationAction,\n\tRAGSource,\n\tRAGCollectionSearchParams,\n\tRAGSQLiteStoreMigrationInspection,\n\tRAGSQLiteStoreMigrationIssue,\n\tRAGSQLiteStoreMigrationResult\n} from '../../../types/ai';\nimport { generateId } from '../protocol';\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\ttypeof value === 'string' && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n\nconst getTraceLabelNumber = (value: unknown) =>\n\ttypeof value === 'number' && Number.isFinite(value) ? value : undefined;\n\nconst formatTraceSpreadsheetTableLabel = (\n\ttableIndex?: number,\n\ttableCount?: number\n) => {\n\tif (\n\t\ttypeof tableIndex !== 'number' ||\n\t\t!Number.isFinite(tableIndex) ||\n\t\ttableIndex < 1\n\t) {\n\t\treturn undefined;\n\t}\n\n\tif (\n\t\ttypeof tableCount === 'number' &&\n\t\tNumber.isFinite(tableCount) &&\n\t\ttableCount >= tableIndex\n\t) {\n\t\treturn `Table ${tableIndex} of ${tableCount}`;\n\t}\n\n\treturn `Table ${tableIndex}`;\n};\n\nconst formatTraceSourceAwareChunkReason = (value: unknown) => {\n\tconst reason = getTraceLabelString(value);\n\tif (reason === 'section_boundary') {\n\t\treturn 'Chunk boundary section';\n\t}\n\tif (reason === 'size_limit') {\n\t\treturn 'Chunk boundary size limit';\n\t}\n\tif (reason === 'source_native_unit') {\n\t\treturn 'Chunk boundary source-native unit';\n\t}\n\treturn undefined;\n};\n\nconst buildTraceSourceAwareUnitScopeLabel = (\n\tmetadata?: Record<string, unknown>\n) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst sectionKind = getTraceLabelString(metadata.sectionKind);\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath\n\t\t\t\t.map((value) => getTraceLabelString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\tconst sectionTitle =\n\t\tgetTraceLabelString(metadata.sectionTitle) ?? sectionPath.at(-1);\n\tconst pdfTextKind = getTraceLabelString(metadata.pdfTextKind);\n\tconst officeBlockKind = getTraceLabelString(metadata.officeBlockKind);\n\tconst sheetName = getTraceLabelString(metadata.sheetName);\n\tconst spreadsheetTableLabel = formatTraceSpreadsheetTableLabel(\n\t\tgetTraceLabelNumber(metadata.spreadsheetTableIndex),\n\t\tgetTraceLabelNumber(metadata.spreadsheetTableCount)\n\t);\n\tconst slideTitle = getTraceLabelString(metadata.slideTitle);\n\tconst slideNumber =\n\t\tgetTraceLabelNumber(metadata.slideNumber) ??\n\t\t(typeof metadata.slideIndex === 'number'\n\t\t\t? metadata.slideIndex + 1\n\t\t\t: undefined);\n\n\tif (\n\t\tsectionPath.length > 0 &&\n\t\t(sectionKind === 'markdown_heading' ||\n\t\t\tsectionKind === 'html_heading' ||\n\t\t\tsectionKind === 'office_heading' ||\n\t\t\tsectionKind === undefined)\n\t) {\n\t\treturn `Source-aware section ${sectionPath.join(' > ')}`;\n\t}\n\n\tif (sectionKind === 'pdf_block') {\n\t\tif (pdfTextKind === 'table_like' && sectionTitle) {\n\t\t\treturn `Source-aware PDF table block ${sectionTitle}`;\n\t\t}\n\t\tif (sectionTitle) {\n\t\t\treturn `Source-aware PDF block ${sectionTitle}`;\n\t\t}\n\t\treturn 'Source-aware PDF block';\n\t}\n\n\tif (sectionKind === 'office_block') {\n\t\tif (officeBlockKind && sectionTitle) {\n\t\t\treturn `Source-aware office ${officeBlockKind} block ${sectionTitle}`;\n\t\t}\n\t\tif (sectionTitle) {\n\t\t\treturn `Source-aware office block ${sectionTitle}`;\n\t\t}\n\t\treturn 'Source-aware office block';\n\t}\n\n\tif (\n\t\tsectionKind === 'spreadsheet_rows' ||\n\t\t(sectionKind === undefined &&\n\t\t\t(sheetName ||\n\t\t\t\tspreadsheetTableLabel ||\n\t\t\t\tgetTraceLabelNumber(metadata.spreadsheetRowStart) !==\n\t\t\t\t\tundefined ||\n\t\t\t\tgetTraceLabelNumber(metadata.spreadsheetRowEnd) !== undefined))\n\t) {\n\t\tif (sheetName && spreadsheetTableLabel) {\n\t\t\treturn `Source-aware spreadsheet ${sheetName} ${spreadsheetTableLabel}`;\n\t\t}\n\t\tif (sheetName) {\n\t\t\treturn `Source-aware spreadsheet ${sheetName}`;\n\t\t}\n\t\treturn 'Source-aware spreadsheet';\n\t}\n\n\tif (sectionKind === 'presentation_slide') {\n\t\tif (slideNumber && slideTitle) {\n\t\t\treturn `Source-aware slide ${slideNumber} ${slideTitle}`;\n\t\t}\n\t\tif (slideTitle) {\n\t\t\treturn `Source-aware slide ${slideTitle}`;\n\t\t}\n\t\tif (slideNumber) {\n\t\t\treturn `Source-aware slide ${slideNumber}`;\n\t\t}\n\t\treturn 'Source-aware slide';\n\t}\n\n\treturn undefined;\n};\n\nconst buildEvaluationLeadSnapshot = (input?: {\n\tmetadata?: Record<string, unknown>;\n\tsource?: string;\n\ttitle?: string;\n}): Pick<\n\tRAGEvaluationCaseTraceSnapshot,\n\t| 'topContextLabel'\n\t| 'topLocatorLabel'\n\t| 'sourceAwareChunkReasonLabel'\n\t| 'sourceAwareUnitScopeLabel'\n> => {\n\tconst labels = buildRAGSourceLabels({\n\t\tmetadata: input?.metadata,\n\t\tsource: input?.source,\n\t\ttitle: input?.title\n\t});\n\n\treturn {\n\t\tsourceAwareChunkReasonLabel: formatTraceSourceAwareChunkReason(\n\t\t\tinput?.metadata?.sourceAwareChunkReason\n\t\t),\n\t\tsourceAwareUnitScopeLabel: buildTraceSourceAwareUnitScopeLabel(\n\t\t\tinput?.metadata\n\t\t),\n\t\ttopContextLabel: labels?.contextLabel,\n\t\ttopLocatorLabel: labels?.locatorLabel\n\t};\n};\n\nconst buildEvaluationLeadMediaCueSnapshot = (\n\ttrace?: RAGRetrievalTrace\n): Pick<\n\tRAGEvaluationCaseTraceSnapshot,\n\t| 'leadSpeakerCue'\n\t| 'leadSpeakerAttributionCue'\n\t| 'leadChannelCue'\n\t| 'leadChannelAttributionCue'\n\t| 'leadContinuityCue'\n> => {\n\tconst rerankStep = trace?.steps.find((step) => step.stage === 'rerank');\n\tconst metadata = rerankStep?.metadata ?? {};\n\n\treturn {\n\t\tleadChannelAttributionCue:\n\t\t\ttypeof metadata.leadChannelAttributionCue === 'string'\n\t\t\t\t? metadata.leadChannelAttributionCue\n\t\t\t\t: undefined,\n\t\tleadChannelCue:\n\t\t\ttypeof metadata.leadChannelCue === 'string'\n\t\t\t\t? metadata.leadChannelCue\n\t\t\t\t: undefined,\n\t\tleadContinuityCue:\n\t\t\ttypeof metadata.leadContinuityCue === 'string'\n\t\t\t\t? metadata.leadContinuityCue\n\t\t\t\t: undefined,\n\t\tleadSpeakerAttributionCue:\n\t\t\ttypeof metadata.leadSpeakerAttributionCue === 'string'\n\t\t\t\t? metadata.leadSpeakerAttributionCue\n\t\t\t\t: undefined,\n\t\tleadSpeakerCue:\n\t\t\ttypeof metadata.leadSpeakerCue === 'string'\n\t\t\t\t? metadata.leadSpeakerCue\n\t\t\t\t: undefined\n\t};\n};\n\nconst buildEvaluationSQLiteQueryPlanSnapshot = (\n\ttrace?: RAGRetrievalTrace\n): Pick<\n\tRAGEvaluationCaseTraceSnapshot,\n\t| 'sqliteQueryMode'\n\t| 'sqliteQueryPushdownMode'\n\t| 'sqliteQueryPushdownApplied'\n\t| 'sqliteQueryPushdownClauseCount'\n\t| 'sqliteQueryTotalFilterClauseCount'\n\t| 'sqliteQueryJsRemainderClauseCount'\n\t| 'sqliteQueryMultiplierUsed'\n\t| 'sqliteQueryCandidateLimitUsed'\n\t| 'sqliteQueryMaxBackfillsUsed'\n\t| 'sqliteQueryMinResultsUsed'\n\t| 'sqliteQueryPushdownCoverageRatio'\n\t| 'sqliteQueryJsRemainderRatio'\n\t| 'sqliteQueryFilteredCandidates'\n\t| 'sqliteQueryInitialSearchK'\n\t| 'sqliteQueryFinalSearchK'\n\t| 'sqliteQuerySearchExpansionRatio'\n\t| 'sqliteQueryBackfillCount'\n\t| 'sqliteQueryBackfillLimitReached'\n\t| 'sqliteQueryMinResultsSatisfied'\n\t| 'sqliteQueryReturnedCount'\n\t| 'sqliteQueryCandidateYieldRatio'\n\t| 'sqliteQueryTopKFillRatio'\n\t| 'sqliteQueryUnderfilledTopK'\n\t| 'sqliteQueryCandidateBudgetExhausted'\n\t| 'sqliteQueryCandidateCoverage'\n> => {\n\tconst vectorStep = trace?.steps.find(\n\t\t(step) => step.stage === 'vector_search'\n\t);\n\tconst metadata = vectorStep?.metadata ?? {};\n\n\treturn {\n\t\tsqliteQueryBackfillCount:\n\t\t\ttypeof metadata.sqliteQueryBackfillCount === 'number'\n\t\t\t\t? metadata.sqliteQueryBackfillCount\n\t\t\t\t: undefined,\n\t\tsqliteQueryCandidateBudgetExhausted:\n\t\t\ttypeof metadata.sqliteQueryCandidateBudgetExhausted === 'boolean'\n\t\t\t\t? metadata.sqliteQueryCandidateBudgetExhausted\n\t\t\t\t: undefined,\n\t\tsqliteQueryCandidateCoverage:\n\t\t\tmetadata.sqliteQueryCandidateCoverage === 'empty' ||\n\t\t\tmetadata.sqliteQueryCandidateCoverage === 'under_target' ||\n\t\t\tmetadata.sqliteQueryCandidateCoverage === 'target_sized' ||\n\t\t\tmetadata.sqliteQueryCandidateCoverage === 'broad'\n\t\t\t\t? metadata.sqliteQueryCandidateCoverage\n\t\t\t\t: undefined,\n\t\tsqliteQueryFilteredCandidates:\n\t\t\ttypeof metadata.sqliteQueryFilteredCandidates === 'number'\n\t\t\t\t? metadata.sqliteQueryFilteredCandidates\n\t\t\t\t: undefined,\n\t\tsqliteQueryFinalSearchK:\n\t\t\ttypeof metadata.sqliteQueryFinalSearchK === 'number'\n\t\t\t\t? metadata.sqliteQueryFinalSearchK\n\t\t\t\t: undefined,\n\t\tsqliteQueryInitialSearchK:\n\t\t\ttypeof metadata.sqliteQueryInitialSearchK === 'number'\n\t\t\t\t? metadata.sqliteQueryInitialSearchK\n\t\t\t\t: undefined,\n\t\tsqliteQuerySearchExpansionRatio:\n\t\t\ttypeof metadata.sqliteQuerySearchExpansionRatio === 'number'\n\t\t\t\t? metadata.sqliteQuerySearchExpansionRatio\n\t\t\t\t: undefined,\n\t\tsqliteQueryMode:\n\t\t\tmetadata.sqliteQueryMode === 'json_fallback' ||\n\t\t\tmetadata.sqliteQueryMode === 'native_vec0'\n\t\t\t\t? metadata.sqliteQueryMode\n\t\t\t\t: undefined,\n\t\tsqliteQueryPushdownMode:\n\t\t\tmetadata.sqliteQueryPushdownMode === 'none' ||\n\t\t\tmetadata.sqliteQueryPushdownMode === 'partial' ||\n\t\t\tmetadata.sqliteQueryPushdownMode === 'full'\n\t\t\t\t? metadata.sqliteQueryPushdownMode\n\t\t\t\t: undefined,\n\t\tsqliteQueryPushdownApplied:\n\t\t\ttypeof metadata.sqliteQueryPushdownApplied === 'boolean'\n\t\t\t\t? metadata.sqliteQueryPushdownApplied\n\t\t\t\t: undefined,\n\t\tsqliteQueryPushdownClauseCount:\n\t\t\ttypeof metadata.sqliteQueryPushdownClauseCount === 'number'\n\t\t\t\t? metadata.sqliteQueryPushdownClauseCount\n\t\t\t\t: undefined,\n\t\tsqliteQueryTotalFilterClauseCount:\n\t\t\ttypeof metadata.sqliteQueryTotalFilterClauseCount === 'number'\n\t\t\t\t? metadata.sqliteQueryTotalFilterClauseCount\n\t\t\t\t: undefined,\n\t\tsqliteQueryJsRemainderClauseCount:\n\t\t\ttypeof metadata.sqliteQueryJsRemainderClauseCount === 'number'\n\t\t\t\t? metadata.sqliteQueryJsRemainderClauseCount\n\t\t\t\t: undefined,\n\t\tsqliteQueryMultiplierUsed:\n\t\t\ttypeof metadata.sqliteQueryMultiplierUsed === 'number'\n\t\t\t\t? metadata.sqliteQueryMultiplierUsed\n\t\t\t\t: undefined,\n\t\tsqliteQueryCandidateLimitUsed:\n\t\t\ttypeof metadata.sqliteQueryCandidateLimitUsed === 'number'\n\t\t\t\t? metadata.sqliteQueryCandidateLimitUsed\n\t\t\t\t: undefined,\n\t\tsqliteQueryMaxBackfillsUsed:\n\t\t\ttypeof metadata.sqliteQueryMaxBackfillsUsed === 'number'\n\t\t\t\t? metadata.sqliteQueryMaxBackfillsUsed\n\t\t\t\t: undefined,\n\t\tsqliteQueryMinResultsUsed:\n\t\t\ttypeof metadata.sqliteQueryMinResultsUsed === 'number'\n\t\t\t\t? metadata.sqliteQueryMinResultsUsed\n\t\t\t\t: undefined,\n\t\tsqliteQueryPushdownCoverageRatio:\n\t\t\ttypeof metadata.sqliteQueryPushdownCoverageRatio === 'number'\n\t\t\t\t? metadata.sqliteQueryPushdownCoverageRatio\n\t\t\t\t: undefined,\n\t\tsqliteQueryJsRemainderRatio:\n\t\t\ttypeof metadata.sqliteQueryJsRemainderRatio === 'number'\n\t\t\t\t? metadata.sqliteQueryJsRemainderRatio\n\t\t\t\t: undefined,\n\t\tsqliteQueryReturnedCount:\n\t\t\ttypeof metadata.sqliteQueryReturnedCount === 'number'\n\t\t\t\t? metadata.sqliteQueryReturnedCount\n\t\t\t\t: undefined,\n\t\tsqliteQueryCandidateYieldRatio:\n\t\t\ttypeof metadata.sqliteQueryCandidateYieldRatio === 'number'\n\t\t\t\t? metadata.sqliteQueryCandidateYieldRatio\n\t\t\t\t: undefined,\n\t\tsqliteQueryBackfillLimitReached:\n\t\t\ttypeof metadata.sqliteQueryBackfillLimitReached === 'boolean'\n\t\t\t\t? metadata.sqliteQueryBackfillLimitReached\n\t\t\t\t: undefined,\n\t\tsqliteQueryMinResultsSatisfied:\n\t\t\ttypeof metadata.sqliteQueryMinResultsSatisfied === 'boolean'\n\t\t\t\t? metadata.sqliteQueryMinResultsSatisfied\n\t\t\t\t: undefined,\n\t\tsqliteQueryTopKFillRatio:\n\t\t\ttypeof metadata.sqliteQueryTopKFillRatio === 'number'\n\t\t\t\t? metadata.sqliteQueryTopKFillRatio\n\t\t\t\t: undefined,\n\t\tsqliteQueryUnderfilledTopK:\n\t\t\ttypeof metadata.sqliteQueryUnderfilledTopK === 'boolean'\n\t\t\t\t? metadata.sqliteQueryUnderfilledTopK\n\t\t\t\t: undefined\n\t};\n};\n\nconst buildEvaluationPostgresQueryPlanSnapshot = (\n\ttrace?: RAGRetrievalTrace\n): Pick<\n\tRAGEvaluationCaseTraceSnapshot,\n\t| 'postgresQueryMode'\n\t| 'postgresQueryPushdownMode'\n\t| 'postgresQueryPushdownApplied'\n\t| 'postgresQueryPushdownClauseCount'\n\t| 'postgresQueryTotalFilterClauseCount'\n\t| 'postgresQueryJsRemainderClauseCount'\n\t| 'postgresQueryMultiplierUsed'\n\t| 'postgresQueryCandidateLimitUsed'\n\t| 'postgresQueryMaxBackfillsUsed'\n\t| 'postgresQueryMinResultsUsed'\n\t| 'postgresQueryPushdownCoverageRatio'\n\t| 'postgresQueryJsRemainderRatio'\n\t| 'postgresQueryFilteredCandidates'\n\t| 'postgresQueryInitialSearchK'\n\t| 'postgresQueryFinalSearchK'\n\t| 'postgresQuerySearchExpansionRatio'\n\t| 'postgresQueryBackfillCount'\n\t| 'postgresQueryBackfillLimitReached'\n\t| 'postgresQueryMinResultsSatisfied'\n\t| 'postgresQueryReturnedCount'\n\t| 'postgresQueryCandidateYieldRatio'\n\t| 'postgresQueryTopKFillRatio'\n\t| 'postgresQueryUnderfilledTopK'\n\t| 'postgresQueryCandidateBudgetExhausted'\n\t| 'postgresQueryCandidateCoverage'\n> => {\n\tconst vectorStep = trace?.steps.find(\n\t\t(step) => step.stage === 'vector_search'\n\t);\n\tconst metadata = vectorStep?.metadata ?? {};\n\n\treturn {\n\t\tpostgresQueryBackfillCount:\n\t\t\ttypeof metadata.postgresQueryBackfillCount === 'number'\n\t\t\t\t? metadata.postgresQueryBackfillCount\n\t\t\t\t: undefined,\n\t\tpostgresQueryCandidateBudgetExhausted:\n\t\t\ttypeof metadata.postgresQueryCandidateBudgetExhausted === 'boolean'\n\t\t\t\t? metadata.postgresQueryCandidateBudgetExhausted\n\t\t\t\t: undefined,\n\t\tpostgresQueryCandidateCoverage:\n\t\t\tmetadata.postgresQueryCandidateCoverage === 'empty' ||\n\t\t\tmetadata.postgresQueryCandidateCoverage === 'under_target' ||\n\t\t\tmetadata.postgresQueryCandidateCoverage === 'target_sized' ||\n\t\t\tmetadata.postgresQueryCandidateCoverage === 'broad'\n\t\t\t\t? metadata.postgresQueryCandidateCoverage\n\t\t\t\t: undefined,\n\t\tpostgresQueryFilteredCandidates:\n\t\t\ttypeof metadata.postgresQueryFilteredCandidates === 'number'\n\t\t\t\t? metadata.postgresQueryFilteredCandidates\n\t\t\t\t: undefined,\n\t\tpostgresQueryFinalSearchK:\n\t\t\ttypeof metadata.postgresQueryFinalSearchK === 'number'\n\t\t\t\t? metadata.postgresQueryFinalSearchK\n\t\t\t\t: undefined,\n\t\tpostgresQueryInitialSearchK:\n\t\t\ttypeof metadata.postgresQueryInitialSearchK === 'number'\n\t\t\t\t? metadata.postgresQueryInitialSearchK\n\t\t\t\t: undefined,\n\t\tpostgresQuerySearchExpansionRatio:\n\t\t\ttypeof metadata.postgresQuerySearchExpansionRatio === 'number'\n\t\t\t\t? metadata.postgresQuerySearchExpansionRatio\n\t\t\t\t: undefined,\n\t\tpostgresQueryMode:\n\t\t\tmetadata.postgresQueryMode === 'native_pgvector'\n\t\t\t\t? metadata.postgresQueryMode\n\t\t\t\t: undefined,\n\t\tpostgresQueryPushdownMode:\n\t\t\tmetadata.postgresQueryPushdownMode === 'none' ||\n\t\t\tmetadata.postgresQueryPushdownMode === 'partial' ||\n\t\t\tmetadata.postgresQueryPushdownMode === 'full'\n\t\t\t\t? metadata.postgresQueryPushdownMode\n\t\t\t\t: undefined,\n\t\tpostgresQueryPushdownApplied:\n\t\t\ttypeof metadata.postgresQueryPushdownApplied === 'boolean'\n\t\t\t\t? metadata.postgresQueryPushdownApplied\n\t\t\t\t: undefined,\n\t\tpostgresQueryPushdownClauseCount:\n\t\t\ttypeof metadata.postgresQueryPushdownClauseCount === 'number'\n\t\t\t\t? metadata.postgresQueryPushdownClauseCount\n\t\t\t\t: undefined,\n\t\tpostgresQueryTotalFilterClauseCount:\n\t\t\ttypeof metadata.postgresQueryTotalFilterClauseCount === 'number'\n\t\t\t\t? metadata.postgresQueryTotalFilterClauseCount\n\t\t\t\t: undefined,\n\t\tpostgresQueryJsRemainderClauseCount:\n\t\t\ttypeof metadata.postgresQueryJsRemainderClauseCount === 'number'\n\t\t\t\t? metadata.postgresQueryJsRemainderClauseCount\n\t\t\t\t: undefined,\n\t\tpostgresQueryMultiplierUsed:\n\t\t\ttypeof metadata.postgresQueryMultiplierUsed === 'number'\n\t\t\t\t? metadata.postgresQueryMultiplierUsed\n\t\t\t\t: undefined,\n\t\tpostgresQueryCandidateLimitUsed:\n\t\t\ttypeof metadata.postgresQueryCandidateLimitUsed === 'number'\n\t\t\t\t? metadata.postgresQueryCandidateLimitUsed\n\t\t\t\t: undefined,\n\t\tpostgresQueryMaxBackfillsUsed:\n\t\t\ttypeof metadata.postgresQueryMaxBackfillsUsed === 'number'\n\t\t\t\t? metadata.postgresQueryMaxBackfillsUsed\n\t\t\t\t: undefined,\n\t\tpostgresQueryMinResultsUsed:\n\t\t\ttypeof metadata.postgresQueryMinResultsUsed === 'number'\n\t\t\t\t? metadata.postgresQueryMinResultsUsed\n\t\t\t\t: undefined,\n\t\tpostgresQueryPushdownCoverageRatio:\n\t\t\ttypeof metadata.postgresQueryPushdownCoverageRatio === 'number'\n\t\t\t\t? metadata.postgresQueryPushdownCoverageRatio\n\t\t\t\t: undefined,\n\t\tpostgresQueryJsRemainderRatio:\n\t\t\ttypeof metadata.postgresQueryJsRemainderRatio === 'number'\n\t\t\t\t? metadata.postgresQueryJsRemainderRatio\n\t\t\t\t: undefined,\n\t\tpostgresQueryReturnedCount:\n\t\t\ttypeof metadata.postgresQueryReturnedCount === 'number'\n\t\t\t\t? metadata.postgresQueryReturnedCount\n\t\t\t\t: undefined,\n\t\tpostgresQueryCandidateYieldRatio:\n\t\t\ttypeof metadata.postgresQueryCandidateYieldRatio === 'number'\n\t\t\t\t? metadata.postgresQueryCandidateYieldRatio\n\t\t\t\t: undefined,\n\t\tpostgresQueryBackfillLimitReached:\n\t\t\ttypeof metadata.postgresQueryBackfillLimitReached === 'boolean'\n\t\t\t\t? metadata.postgresQueryBackfillLimitReached\n\t\t\t\t: undefined,\n\t\tpostgresQueryMinResultsSatisfied:\n\t\t\ttypeof metadata.postgresQueryMinResultsSatisfied === 'boolean'\n\t\t\t\t? metadata.postgresQueryMinResultsSatisfied\n\t\t\t\t: undefined,\n\t\tpostgresQueryTopKFillRatio:\n\t\t\ttypeof metadata.postgresQueryTopKFillRatio === 'number'\n\t\t\t\t? metadata.postgresQueryTopKFillRatio\n\t\t\t\t: undefined,\n\t\tpostgresQueryUnderfilledTopK:\n\t\t\ttypeof metadata.postgresQueryUnderfilledTopK === 'boolean'\n\t\t\t\t? metadata.postgresQueryUnderfilledTopK\n\t\t\t\t: undefined\n\t};\n};\nconst DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME =\n\t'rag_retrieval_comparison_history';\nconst DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME =\n\t'rag_retrieval_release_decisions';\nconst DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME = 'rag_retrieval_baselines';\nconst DEFAULT_RETRIEVAL_RELEASE_INCIDENT_TABLE_NAME =\n\t'rag_retrieval_release_incidents';\ntype BunSQLiteModule = {\n\tDatabase: new (path?: string) => Database;\n};\n\ntype ImportMetaWithRequire = ImportMeta & {\n\trequire?: (specifier: string) => unknown;\n};\n\nconst loadBunSQLiteModule = (): BunSQLiteModule => {\n\tconst runtimeRequire = (import.meta as ImportMetaWithRequire).require;\n\tif (typeof runtimeRequire !== 'function') {\n\t\tthrow new Error(\n\t\t\t'SQLite trace storage requires Bun runtime support for import.meta.require.'\n\t\t);\n\t}\n\n\treturn runtimeRequire('bun:sqlite') as BunSQLiteModule;\n};\n\nconst normalizeStringArray = (value: unknown) => {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\n\treturn value\n\t\t.filter((candidate) => typeof candidate === 'string')\n\t\t.map((candidate) => candidate.trim())\n\t\t.filter((candidate) => candidate.length > 0);\n};\n\nconst normalizeLabelFilter = (value?: string) => {\n\tif (typeof value !== 'string') {\n\t\treturn undefined;\n\t}\n\n\tconst normalized = value.trim().toLowerCase();\n\treturn normalized.length > 0 ? normalized : undefined;\n};\n\nconst normalizeRetrievalBaselineRecords = (\n\trecords: RAGRetrievalBaselineRecord[]\n) => [...records].sort((left, right) => right.promotedAt - left.promotedAt);\n\nconst normalizeRetrievalReleaseDecisionRecords = (\n\trecords: RAGRetrievalReleaseDecisionRecord[]\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalLaneHandoffDecisionRecords = (\n\trecords: RAGRetrievalLaneHandoffDecisionRecord[]\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalReleaseIncidentRecords = (\n\trecords: RAGRetrievalReleaseIncidentRecord[]\n) => [...records].sort((left, right) => right.triggeredAt - left.triggeredAt);\n\nconst normalizeRetrievalIncidentRemediationDecisionRecords = (\n\trecords: RAGRetrievalIncidentRemediationDecisionRecord[]\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalIncidentRemediationExecutionHistoryRecords = (\n\trecords: RAGRetrievalIncidentRemediationExecutionHistoryRecord[]\n) => [...records].sort((left, right) => right.executedAt - left.executedAt);\n\nconst matchesWinner = (run: RAGRetrievalComparisonRun, winnerId?: string) => {\n\tif (!winnerId) {\n\t\treturn true;\n\t}\n\n\treturn (\n\t\trun.comparison.summary.bestByPassingRate === winnerId ||\n\t\trun.decisionSummary?.winnerByPassingRate === winnerId\n\t);\n};\n\nconst findRetrievalComparisonEntry = (\n\tcomparison: RAGRetrievalComparison,\n\tretrievalId?: string\n) => {\n\tif (!retrievalId) {\n\t\treturn undefined;\n\t}\n\n\treturn comparison.entries.find(\n\t\t(entry) => entry.retrievalId === retrievalId\n\t);\n};\n\nconst evaluateRetrievalComparisonGate = ({\n\tdelta,\n\tpolicy\n}: {\n\tdelta?: {\n\t\tpassingRateDelta: number;\n\t\taverageF1Delta: number;\n\t\telapsedMsDelta: number;\n\t};\n\tpolicy?: RAGRetrievalBaselineGatePolicy;\n}): RAGRetrievalComparisonGateResult | undefined => {\n\tif (!delta || !policy) {\n\t\treturn undefined;\n\t}\n\n\tconst reasons: string[] = [];\n\tif (\n\t\ttypeof policy.minPassingRateDelta === 'number' &&\n\t\tdelta.passingRateDelta < policy.minPassingRateDelta\n\t) {\n\t\treasons.push(\n\t\t\t`passing rate delta ${delta.passingRateDelta} is below ${policy.minPassingRateDelta}`\n\t\t);\n\t}\n\tif (\n\t\ttypeof policy.minAverageF1Delta === 'number' &&\n\t\tdelta.averageF1Delta < policy.minAverageF1Delta\n\t) {\n\t\treasons.push(\n\t\t\t`average F1 delta ${delta.averageF1Delta} is below ${policy.minAverageF1Delta}`\n\t\t);\n\t}\n\tif (\n\t\ttypeof policy.maxElapsedMsDelta === 'number' &&\n\t\tdelta.elapsedMsDelta > policy.maxElapsedMsDelta\n\t) {\n\t\treasons.push(\n\t\t\t`elapsed ms delta ${delta.elapsedMsDelta} exceeds ${policy.maxElapsedMsDelta}`\n\t\t);\n\t}\n\n\tif (reasons.length === 0) {\n\t\treturn {\n\t\t\tpolicy,\n\t\t\treasons: [],\n\t\t\tstatus: 'pass'\n\t\t};\n\t}\n\n\treturn {\n\t\tpolicy,\n\t\treasons,\n\t\tstatus: policy.severity === 'warn' ? 'warn' : 'fail'\n\t};\n};\n\nexport const buildRAGRetrievalReleaseVerdict = ({\n\tgroupKey,\n\tdecisionSummary\n}: {\n\tgroupKey?: string;\n\tdecisionSummary?: RAGRetrievalComparisonDecisionSummary;\n}): RAGRetrievalReleaseVerdict | undefined => {\n\tif (!decisionSummary) {\n\t\treturn undefined;\n\t}\n\n\tconst gate = decisionSummary.gate;\n\tconst delta = decisionSummary.delta;\n\tconst baselineRetrievalId = decisionSummary.baselineRetrievalId;\n\tconst candidateRetrievalId = decisionSummary.candidateRetrievalId;\n\n\tif (gate) {\n\t\tif (gate.status === 'pass') {\n\t\t\treturn {\n\t\t\t\tbaselineGroupKey: groupKey,\n\t\t\t\tbaselineRetrievalId,\n\t\t\t\tcandidateRetrievalId,\n\t\t\t\tdelta,\n\t\t\t\tgate,\n\t\t\t\tstatus: 'pass',\n\t\t\t\tsummary: 'Candidate passed the active baseline gate.'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tbaselineGroupKey: groupKey,\n\t\t\tbaselineRetrievalId,\n\t\t\tcandidateRetrievalId,\n\t\t\tdelta,\n\t\t\tgate,\n\t\t\tstatus: gate.status,\n\t\t\tsummary:\n\t\t\t\tgate.status === 'warn'\n\t\t\t\t\t? 'Candidate triggered a baseline gate warning.'\n\t\t\t\t\t: 'Candidate failed the active baseline gate.'\n\t\t};\n\t}\n\n\tif (delta) {\n\t\treturn {\n\t\t\tbaselineGroupKey: groupKey,\n\t\t\tbaselineRetrievalId,\n\t\t\tcandidateRetrievalId,\n\t\t\tdelta,\n\t\t\tstatus:\n\t\t\t\tdelta.passingRateDelta < 0 || delta.averageF1Delta < 0\n\t\t\t\t\t? 'needs_review'\n\t\t\t\t\t: 'pass',\n\t\t\tsummary:\n\t\t\t\tdelta.passingRateDelta < 0 || delta.averageF1Delta < 0\n\t\t\t\t\t? 'Candidate should be reviewed before promotion.'\n\t\t\t\t\t: 'Candidate improved or matched the baseline.'\n\t\t};\n\t}\n\n\treturn {\n\t\tbaselineGroupKey: groupKey,\n\t\tbaselineRetrievalId,\n\t\tcandidateRetrievalId,\n\t\tstatus: 'needs_review',\n\t\tsummary: 'No explicit baseline verdict could be determined.'\n\t};\n};\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> =>\n\tBoolean(value) && typeof value === 'object';\n\nconst parseJSONRecord = (value: string | null) => {\n\tif (value === null) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(value);\n\n\t\treturn isObjectRecord(parsed) ? parsed : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n};\n\nconst parseJSONArray = <T>(value: string | null, fallback: T[]): T[] => {\n\tif (value === null) {\n\t\treturn fallback;\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(value);\n\n\t\treturn Array.isArray(parsed) ? (parsed as T[]) : fallback;\n\t} catch {\n\t\treturn fallback;\n\t}\n};\n\nconst normalizeExpectedIds = (input: string[]) =>\n\tArray.from(new Set(input.map((item) => item.trim()).filter(Boolean)));\n\nconst hasSourceExtension = (\n\tvalue: string | undefined,\n\textensions: string[]\n) => {\n\tif (!value) {\n\t\treturn false;\n\t}\n\tconst normalized = value.trim().toLowerCase();\n\n\treturn extensions.some((extension) => normalized.endsWith(extension));\n};\n\nconst hasMetadataNumber = (\n\tmetadata: Record<string, unknown> | undefined,\n\tkey: string\n) => typeof metadata?.[key] === 'number';\n\nconst hasMetadataString = (\n\tmetadata: Record<string, unknown> | undefined,\n\tkey: string\n) => typeof metadata?.[key] === 'string' && metadata[key] !== '';\n\nconst hasMetadataArray = (\n\tmetadata: Record<string, unknown> | undefined,\n\tkey: string\n) => Array.isArray(metadata?.[key]) && metadata[key].length > 0;\n\nconst detectSectionEvidence = (\n\tids: string[],\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tsources.some(\n\t\t(source) =>\n\t\t\thasMetadataArray(source.metadata, 'sectionPath') ||\n\t\t\thasMetadataString(source.metadata, 'sectionTitle') ||\n\t\t\thasMetadataString(source.metadata, 'sectionKind')\n\t);\n\nconst detectSectionGraphEvidence = (\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tsources.some(\n\t\t(source) =>\n\t\t\thasMetadataString(source.metadata, 'sectionChunkId') ||\n\t\t\thasMetadataNumber(source.metadata, 'sectionChunkIndex') ||\n\t\t\t(hasMetadataNumber(source.metadata, 'sectionChunkCount') &&\n\t\t\t\tNumber(source.metadata?.sectionChunkCount) > 1)\n\t);\n\nconst detectSectionHierarchyEvidence = (\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tsources.some((source) => {\n\t\tconst path = Array.isArray(source.metadata?.sectionPath)\n\t\t\t? source.metadata.sectionPath.filter(\n\t\t\t\t\t(entry): entry is string =>\n\t\t\t\t\t\ttypeof entry === 'string' && entry.trim().length > 0\n\t\t\t\t)\n\t\t\t: [];\n\n\t\treturn path.length > 1;\n\t});\n\nconst detectSpreadsheetEvidence = (\n\tids: string[],\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tids.some((id) =>\n\t\thasSourceExtension(id, ['.xlsx', '.xls', '.csv', '.ods', '.tsv'])\n\t) ||\n\tsources.some(\n\t\t(source) =>\n\t\t\thasSourceExtension(source.source, [\n\t\t\t\t'.xlsx',\n\t\t\t\t'.xls',\n\t\t\t\t'.csv',\n\t\t\t\t'.ods',\n\t\t\t\t'.tsv'\n\t\t\t]) ||\n\t\t\thasMetadataString(source.metadata, 'sheetName') ||\n\t\t\thasMetadataNumber(source.metadata, 'spreadsheetRowStart') ||\n\t\t\thasMetadataNumber(source.metadata, 'spreadsheetTableIndex')\n\t);\n\nconst detectMediaEvidence = (\n\tids: string[],\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tids.some((id) =>\n\t\thasSourceExtension(id, [\n\t\t\t'.mp3',\n\t\t\t'.wav',\n\t\t\t'.m4a',\n\t\t\t'.aac',\n\t\t\t'.ogg',\n\t\t\t'.flac',\n\t\t\t'.mp4',\n\t\t\t'.mov',\n\t\t\t'.mkv',\n\t\t\t'.webm'\n\t\t])\n\t) ||\n\tsources.some(\n\t\t(source) =>\n\t\t\thasSourceExtension(source.source, [\n\t\t\t\t'.mp3',\n\t\t\t\t'.wav',\n\t\t\t\t'.m4a',\n\t\t\t\t'.aac',\n\t\t\t\t'.ogg',\n\t\t\t\t'.flac',\n\t\t\t\t'.mp4',\n\t\t\t\t'.mov',\n\t\t\t\t'.mkv',\n\t\t\t\t'.webm'\n\t\t\t]) ||\n\t\t\thasMetadataString(source.metadata, 'mediaKind') ||\n\t\t\thasMetadataString(source.metadata, 'speaker') ||\n\t\t\thasMetadataNumber(source.metadata, 'startMs')\n\t);\n\nconst detectOCREvidence = (\n\tids: string[],\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tids.some((id) =>\n\t\thasSourceExtension(id, ['.png', '.jpg', '.jpeg', '.webp'])\n\t) ||\n\tsources.some(\n\t\t(source) =>\n\t\t\thasSourceExtension(source.source, [\n\t\t\t\t'.png',\n\t\t\t\t'.jpg',\n\t\t\t\t'.jpeg',\n\t\t\t\t'.webp'\n\t\t\t]) ||\n\t\t\thasMetadataNumber(source.metadata, 'ocrConfidence') ||\n\t\t\thasMetadataNumber(source.metadata, 'ocrRegionConfidence') ||\n\t\t\thasMetadataString(source.metadata, 'ocrEngine') ||\n\t\t\tsource.metadata?.pdfTextMode === 'ocr'\n\t);\n\nconst getRetrievalTrace = (\n\ttrace: RAGSearchTraceRecord | RAGRetrievalTrace | undefined\n) => (trace && 'trace' in trace ? trace.trace : trace);\n\nconst classifyRAGEvaluationFailure = (input: {\n\texpectedCount: number;\n\tmatchedCount: number;\n\tmissingIds: string[];\n\tretrievedCount: number;\n\tretrievedIds: string[];\n\tretrievedSources?: RAGSource[];\n\ttrace?: RAGSearchTraceRecord | RAGRetrievalTrace;\n}): NonNullable<RAGEvaluationCaseResult['failureClasses']> => {\n\tconst classes: NonNullable<RAGEvaluationCaseResult['failureClasses']> = [];\n\tif (input.expectedCount === 0) {\n\t\tclasses.push('no_expected_targets');\n\t}\n\tif (input.retrievedCount === 0) {\n\t\tclasses.push('no_results');\n\t}\n\tif (input.expectedCount > 0 && input.matchedCount === 0) {\n\t\tclasses.push('no_match');\n\t}\n\tif (\n\t\tinput.expectedCount > 0 &&\n\t\tinput.matchedCount > 0 &&\n\t\tinput.matchedCount < input.expectedCount\n\t) {\n\t\tclasses.push('partial_recall');\n\t}\n\tif (input.retrievedIds.length > input.matchedCount) {\n\t\tclasses.push('extra_noise');\n\t}\n\tconst sourceSignals = input.retrievedSources ?? [];\n\tconst relevantIds = [...input.missingIds, ...input.retrievedIds];\n\tif (\n\t\t(input.missingIds.length > 0 || input.matchedCount === 0) &&\n\t\tdetectSectionEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('section_evidence_miss');\n\t\tif (detectSectionGraphEvidence(sourceSignals)) {\n\t\t\tclasses.push('section_graph_miss');\n\t\t}\n\t\tif (detectSectionHierarchyEvidence(sourceSignals)) {\n\t\t\tclasses.push('section_hierarchy_miss');\n\t\t}\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.matchedCount === 0) &&\n\t\tdetectSpreadsheetEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('spreadsheet_evidence_miss');\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.matchedCount === 0) &&\n\t\tdetectMediaEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('media_evidence_miss');\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.matchedCount === 0) &&\n\t\tdetectOCREvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('ocr_evidence_miss');\n\t}\n\tconst retrievalTrace = getRetrievalTrace(input.trace);\n\tif (\n\t\t(input.retrievedCount === 0 || input.matchedCount === 0) &&\n\t\t(retrievalTrace?.routingLabel || retrievalTrace?.routingReason)\n\t) {\n\t\tclasses.push('routing_miss');\n\t}\n\n\treturn classes;\n};\n\nconst classifyRAGGroundingFailure = (input: {\n\texpectedCount: number;\n\tmatchedCount: number;\n\tmissingIds: string[];\n\textraIds: string[];\n\tcitationCount: number;\n\tunresolvedCitationCount: number;\n\tavailableSources?: RAGSource[];\n}): NonNullable<RAGAnswerGroundingEvaluationCaseResult['failureClasses']> => {\n\tconst classes: NonNullable<\n\t\tRAGAnswerGroundingEvaluationCaseResult['failureClasses']\n\t> = [];\n\tif (input.expectedCount === 0) {\n\t\tclasses.push('no_expected_targets');\n\t}\n\tif (input.citationCount === 0) {\n\t\tclasses.push('no_citations');\n\t}\n\tif (input.unresolvedCitationCount > 0) {\n\t\tclasses.push('unresolved_citations');\n\t}\n\tif (\n\t\tinput.missingIds.length > 0 ||\n\t\tinput.matchedCount < input.expectedCount\n\t) {\n\t\tclasses.push('missing_expected_sources');\n\t}\n\tif (input.extraIds.length > 0) {\n\t\tclasses.push('extra_citations');\n\t}\n\tconst sourceSignals = input.availableSources ?? [];\n\tconst relevantIds = [...input.missingIds, ...input.extraIds];\n\tif (\n\t\t(input.missingIds.length > 0 || input.citationCount === 0) &&\n\t\tdetectSectionEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('section_source_miss');\n\t\tif (detectSectionGraphEvidence(sourceSignals)) {\n\t\t\tclasses.push('section_graph_source_miss');\n\t\t}\n\t\tif (detectSectionHierarchyEvidence(sourceSignals)) {\n\t\t\tclasses.push('section_hierarchy_source_miss');\n\t\t}\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.citationCount === 0) &&\n\t\tdetectSpreadsheetEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('spreadsheet_source_miss');\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.citationCount === 0) &&\n\t\tdetectMediaEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('media_source_miss');\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.citationCount === 0) &&\n\t\tdetectOCREvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('ocr_source_miss');\n\t}\n\n\treturn classes;\n};\n\nconst normalizeSyntheticText = (value: string) =>\n\tvalue\n\t\t.replace(/^#+\\s*/gm, '')\n\t\t.replace(/`+/g, '')\n\t\t.replace(/\\[(.*?)\\]\\((.*?)\\)/g, '$1')\n\t\t.replace(/\\s+/g, ' ')\n\t\t.trim();\n\nconst buildSyntheticEvaluationQuery = (document: RAGIndexedDocument) => {\n\tconst title = normalizeSyntheticText(document.title);\n\tconst sourceTail = normalizeSyntheticText(\n\t\tdocument.source.split('/').at(-1) ?? document.source\n\t);\n\tconst text = normalizeSyntheticText(document.text ?? '');\n\tconst firstSentence =\n\t\ttext\n\t\t\t.split(/(?<=[.!?])\\s+/)\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.find((entry) => entry.length >= 24) ??\n\t\ttext\n\t\t\t.split(/\\n+/)\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.find((entry) => entry.length >= 24) ??\n\t\ttitle ??\n\t\tsourceTail;\n\tconst prefixedSentence =\n\t\ttitle.length > 0 &&\n\t\tfirstSentence.toLowerCase().startsWith(title.toLowerCase())\n\t\t\t? firstSentence\n\t\t\t: [title, firstSentence].filter(Boolean).join(' ');\n\tconst queryTerms = normalizeSyntheticText(prefixedSentence)\n\t\t.split(/\\s+/)\n\t\t.slice(0, 12)\n\t\t.join(' ');\n\n\treturn queryTerms.length > 0 ? queryTerms : sourceTail;\n};\n\nconst resolveEvaluationMode = (caseInput: {\n\texpectedChunkIds?: string[];\n\texpectedSources?: string[];\n\texpectedDocumentIds?: string[];\n}): 'chunkId' | 'source' | 'documentId' => {\n\tif (normalizeStringArray(caseInput.expectedChunkIds).length > 0) {\n\t\treturn 'chunkId';\n\t}\n\tif (normalizeStringArray(caseInput.expectedSources).length > 0) {\n\t\treturn 'source';\n\t}\n\n\treturn 'documentId';\n};\n\nconst getDocumentId = (source: RAGSource): string => {\n\tconst metadataDocumentId =\n\t\ttypeof source.metadata?.documentId === 'string'\n\t\t\t? source.metadata.documentId\n\t\t\t: undefined;\n\tif (metadataDocumentId) {\n\t\treturn metadataDocumentId;\n\t}\n\tif (source.source) {\n\t\treturn source.source;\n\t}\n\n\tconst [documentId] = source.chunkId.split(':');\n\n\treturn documentId ?? source.chunkId;\n};\n\nconst extractExpectedId = (\n\tsource: RAGSource,\n\tmode: 'chunkId' | 'source' | 'documentId'\n): string =>\n\tmode === 'chunkId'\n\t\t? source.chunkId\n\t\t: mode === 'source'\n\t\t\t? (source.source ?? source.title ?? source.chunkId)\n\t\t\t: getDocumentId(source);\n\nconst buildSources = (\n\tresults: Array<{\n\t\tchunkId: string;\n\t\tchunkText: string;\n\t\tscore: number;\n\t\ttitle?: string;\n\t\tsource?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t}>\n) =>\n\tresults.map((result) => ({\n\t\tchunkId: result.chunkId,\n\t\tmetadata: result.metadata,\n\t\tscore: Number.isFinite(result.score) ? result.score : 0,\n\t\tsource: result.source,\n\t\ttext: result.chunkText,\n\t\ttitle: result.title\n\t}));\n\nconst buildAnswerGroundingStatus = ({\n\tcoverage,\n\texpectedCount,\n\tmatchedCount,\n\tunresolvedCitationCount,\n\tresolvedCitationCount\n}: {\n\tcoverage: RAGAnswerGroundingEvaluationCaseResult['coverage'];\n\texpectedCount: number;\n\tmatchedCount: number;\n\tunresolvedCitationCount: number;\n\tresolvedCitationCount: number;\n}): RAGAnswerGroundingEvaluationCaseResult['status'] => {\n\tif (expectedCount > 0) {\n\t\tif (\n\t\t\tmatchedCount === expectedCount &&\n\t\t\tunresolvedCitationCount === 0 &&\n\t\t\tcoverage !== 'ungrounded'\n\t\t) {\n\t\t\treturn 'pass';\n\t\t}\n\n\t\tif (matchedCount > 0 || resolvedCitationCount > 0) {\n\t\t\treturn 'partial';\n\t\t}\n\n\t\treturn 'fail';\n\t}\n\n\tif (coverage === 'grounded' && unresolvedCitationCount === 0) {\n\t\treturn 'pass';\n\t}\n\n\tif (resolvedCitationCount > 0 || coverage === 'partial') {\n\t\treturn 'partial';\n\t}\n\n\treturn 'fail';\n};\n\nexport const buildRAGEvaluationLeaderboard = (\n\truns: RAGEvaluationSuiteRun[]\n) => {\n\tconst sorted = [...runs].sort((left, right) => {\n\t\tif (right.response.passingRate !== left.response.passingRate) {\n\t\t\treturn right.response.passingRate - left.response.passingRate;\n\t\t}\n\t\tif (\n\t\t\tright.response.summary.averageF1 !== left.response.summary.averageF1\n\t\t) {\n\t\t\treturn (\n\t\t\t\tright.response.summary.averageF1 -\n\t\t\t\tleft.response.summary.averageF1\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\tleft.response.summary.averageLatencyMs -\n\t\t\tright.response.summary.averageLatencyMs\n\t\t);\n\t});\n\n\treturn sorted.map<RAGEvaluationLeaderboardEntry>((run, index) => ({\n\t\taverageF1: run.response.summary.averageF1,\n\t\taverageLatencyMs: run.response.summary.averageLatencyMs,\n\t\tlabel: run.label,\n\t\tpassingRate: run.response.passingRate,\n\t\trank: index + 1,\n\t\trunId: run.id,\n\t\tsuiteId: run.suiteId,\n\t\ttotalCases: run.response.totalCases\n\t}));\n};\n\nexport const buildRAGAnswerGroundingEvaluationLeaderboard = (\n\truns: RAGAnswerGroundingEvaluationRun[]\n) => {\n\tconst sorted = [...runs].sort((left, right) => {\n\t\tif (right.response.passingRate !== left.response.passingRate) {\n\t\t\treturn right.response.passingRate - left.response.passingRate;\n\t\t}\n\t\tif (\n\t\t\tright.response.summary.averageCitationF1 !==\n\t\t\tleft.response.summary.averageCitationF1\n\t\t) {\n\t\t\treturn (\n\t\t\t\tright.response.summary.averageCitationF1 -\n\t\t\t\tleft.response.summary.averageCitationF1\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tright.response.summary.averageResolvedCitationRate !==\n\t\t\tleft.response.summary.averageResolvedCitationRate\n\t\t) {\n\t\t\treturn (\n\t\t\t\tright.response.summary.averageResolvedCitationRate -\n\t\t\t\tleft.response.summary.averageResolvedCitationRate\n\t\t\t);\n\t\t}\n\n\t\treturn left.elapsedMs - right.elapsedMs;\n\t});\n\n\treturn sorted.map<RAGAnswerGroundingEvaluationLeaderboardEntry>(\n\t\t(run, index) => ({\n\t\t\taverageCitationF1: run.response.summary.averageCitationF1,\n\t\t\taverageResolvedCitationRate:\n\t\t\t\trun.response.summary.averageResolvedCitationRate,\n\t\t\tlabel: run.label,\n\t\t\tpassingRate: run.response.passingRate,\n\t\t\trank: index + 1,\n\t\t\trunId: run.id,\n\t\t\tsuiteId: run.suiteId,\n\t\t\ttotalCases: run.response.totalCases\n\t\t})\n\t);\n};\n\nconst buildTraceStageCounts = (traces: RAGRetrievalTrace[]) => {\n\tconst counts: Partial<\n\t\tRecord<RAGRetrievalTrace['steps'][number]['stage'], number>\n\t> = {};\n\n\tfor (const trace of traces) {\n\t\tfor (const step of trace.steps) {\n\t\t\tcounts[step.stage] = (counts[step.stage] ?? 0) + 1;\n\t\t}\n\t}\n\n\treturn counts;\n};\n\nconst diffTraceStageCounts = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: Partial<\n\t\tRecord<RAGRetrievalTrace['steps'][number]['stage'], number>\n\t>;\n\tprevious: Partial<\n\t\tRecord<RAGRetrievalTrace['steps'][number]['stage'], number>\n\t>;\n}) => {\n\tconst next: Partial<\n\t\tRecord<RAGRetrievalTrace['steps'][number]['stage'], number>\n\t> = {};\n\tconst stages = new Set([\n\t\t...Object.keys(current),\n\t\t...Object.keys(previous)\n\t] as RAGRetrievalTrace['steps'][number]['stage'][]);\n\n\tfor (const stage of stages) {\n\t\tconst delta = (current[stage] ?? 0) - (previous[stage] ?? 0);\n\t\tif (delta !== 0) {\n\t\t\tnext[stage] = delta;\n\t\t}\n\t}\n\n\treturn next;\n};\n\nconst normalizeSummaryList = <T extends string>(values: T[]) =>\n\tArray.from(new Set(values)).sort();\n\nconst buildSummaryListDelta = <T extends string>(\n\tcurrent: T[],\n\tprevious: T[]\n) => {\n\tconst currentSet = new Set(current);\n\tconst previousSet = new Set(previous);\n\tconst added = current.filter((value) => !previousSet.has(value));\n\tconst removed = previous.filter((value) => !currentSet.has(value));\n\n\treturn {\n\t\tadded: normalizeSummaryList(Array.from(new Set(added))),\n\t\tcurrent: normalizeSummaryList(current),\n\t\tprevious: normalizeSummaryList(previous),\n\t\tremoved: normalizeSummaryList(Array.from(new Set(removed)))\n\t};\n};\n\nfunction summarizeListTurnover<T extends string>(params: {\n\tcurrent: T[];\n\tprevious: T[];\n\thistory: T[][];\n}): RAGTraceSummaryListTrend<T> {\n\tconst { current, previous, history } = params;\n\tconst currentSet = new Set(current);\n\tconst previousSet = new Set(previous);\n\tconst frequency: Record<string, number> = {};\n\n\tfor (const entry of history) {\n\t\tfor (const value of entry) {\n\t\t\tfrequency[value] = (frequency[value] ?? 0) + 1;\n\t\t}\n\t}\n\n\treturn {\n\t\tappeared: normalizeSummaryList(\n\t\t\tArray.from(\n\t\t\t\tnew Set(current.filter((value) => !previousSet.has(value)))\n\t\t\t)\n\t\t),\n\t\tcurrent: normalizeSummaryList(current),\n\t\tdisappeared: normalizeSummaryList(\n\t\t\tArray.from(\n\t\t\t\tnew Set(previous.filter((value) => !currentSet.has(value)))\n\t\t\t)\n\t\t),\n\t\tfrequency,\n\t\tprevious: normalizeSummaryList(previous),\n\t\tstable: normalizeSummaryList(\n\t\t\tArray.from(\n\t\t\t\tnew Set(current.filter((value) => previousSet.has(value)))\n\t\t\t)\n\t\t)\n\t};\n}\n\nconst diffTraceSummaryStageCounts = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGRetrievalTraceComparisonSummary['stageCounts'];\n\tprevious: RAGRetrievalTraceComparisonSummary['stageCounts'];\n}) => {\n\tconst stages = new Set([\n\t\t...Object.keys(current),\n\t\t...Object.keys(previous)\n\t]) as Set<RAGRetrievalTraceStep['stage']>;\n\tconst next: Partial<\n\t\tRecord<RAGRetrievalTraceStage, RAGTraceSummaryStageCountsDelta>\n\t> = {};\n\n\tfor (const stage of stages) {\n\t\tconst currentCount = current[stage] ?? 0;\n\t\tconst previousCount = previous[stage] ?? 0;\n\t\tconst delta = currentCount - previousCount;\n\t\tif (delta !== 0 || currentCount !== 0 || previousCount !== 0) {\n\t\t\tnext[stage] = {\n\t\t\t\tcurrent: currentCount,\n\t\t\t\tdelta,\n\t\t\t\tprevious: previousCount\n\t\t\t};\n\t\t}\n\t}\n\n\treturn next;\n};\n\nconst roundTraceAverage = (value: number, total: number) =>\n\ttotal > 0 ? Number((value / total).toFixed(2)) : 0;\n\nconst buildTraceSummaryDirection = (\n\tdelta: number\n): RAGTraceSummaryTrendDirection =>\n\tdelta > 0 ? 'up' : delta < 0 ? 'down' : 'flat';\n\nconst buildTraceSummaryAggregate = ({\n\tsummaries\n}: {\n\tsummaries: RAGRetrievalTraceComparisonSummary[];\n}): {\n\taggregate: RAGTraceSummaryNumericDelta[];\n\tbestMetric: RAGTraceSummaryNumericDelta | undefined;\n\tworstMetric: RAGTraceSummaryNumericDelta | undefined;\n} => {\n\tif (summaries.length === 0) {\n\t\tconst aggregate: RAGTraceSummaryNumericDelta[] = [\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'totalCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'averageFinalCount',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'averageVectorCount',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'averageLexicalCount',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'averageCandidateTopK',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'averageLexicalTopK',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'vectorCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'lexicalCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'balancedCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'roundRobinCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'transformedCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'variantCases',\n\t\t\t\tprevious: 0\n\t\t\t}\n\t\t];\n\n\t\treturn {\n\t\t\taggregate,\n\t\t\tbestMetric: undefined,\n\t\t\tworstMetric: undefined\n\t\t};\n\t}\n\n\tconst latest = summaries[0]!;\n\tconst previous = summaries[summaries.length - 1]!;\n\tconst aggregate: RAGTraceSummaryNumericDelta[] = [\n\t\t{\n\t\t\tcurrent: latest.totalCases,\n\t\t\tdelta: latest.totalCases - previous.totalCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.totalCases - previous.totalCases\n\t\t\t),\n\t\t\tmetric: 'totalCases',\n\t\t\tprevious: previous.totalCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.averageFinalCount,\n\t\t\tdelta: latest.averageFinalCount - previous.averageFinalCount,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.averageFinalCount - previous.averageFinalCount\n\t\t\t),\n\t\t\tmetric: 'averageFinalCount',\n\t\t\tprevious: previous.averageFinalCount\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.averageVectorCount,\n\t\t\tdelta: latest.averageVectorCount - previous.averageVectorCount,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.averageVectorCount - previous.averageVectorCount\n\t\t\t),\n\t\t\tmetric: 'averageVectorCount',\n\t\t\tprevious: previous.averageVectorCount\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.averageLexicalCount,\n\t\t\tdelta: latest.averageLexicalCount - previous.averageLexicalCount,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.averageLexicalCount - previous.averageLexicalCount\n\t\t\t),\n\t\t\tmetric: 'averageLexicalCount',\n\t\t\tprevious: previous.averageLexicalCount\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.averageCandidateTopK,\n\t\t\tdelta: latest.averageCandidateTopK - previous.averageCandidateTopK,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.averageCandidateTopK - previous.averageCandidateTopK\n\t\t\t),\n\t\t\tmetric: 'averageCandidateTopK',\n\t\t\tprevious: previous.averageCandidateTopK\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.averageLexicalTopK,\n\t\t\tdelta: latest.averageLexicalTopK - previous.averageLexicalTopK,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.averageLexicalTopK - previous.averageLexicalTopK\n\t\t\t),\n\t\t\tmetric: 'averageLexicalTopK',\n\t\t\tprevious: previous.averageLexicalTopK\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.vectorCases,\n\t\t\tdelta: latest.vectorCases - previous.vectorCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.vectorCases - previous.vectorCases\n\t\t\t),\n\t\t\tmetric: 'vectorCases',\n\t\t\tprevious: previous.vectorCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.lexicalCases,\n\t\t\tdelta: latest.lexicalCases - previous.lexicalCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.lexicalCases - previous.lexicalCases\n\t\t\t),\n\t\t\tmetric: 'lexicalCases',\n\t\t\tprevious: previous.lexicalCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.balancedCases,\n\t\t\tdelta: latest.balancedCases - previous.balancedCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.balancedCases - previous.balancedCases\n\t\t\t),\n\t\t\tmetric: 'balancedCases',\n\t\t\tprevious: previous.balancedCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.roundRobinCases,\n\t\t\tdelta: latest.roundRobinCases - previous.roundRobinCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.roundRobinCases - previous.roundRobinCases\n\t\t\t),\n\t\t\tmetric: 'roundRobinCases',\n\t\t\tprevious: previous.roundRobinCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.transformedCases,\n\t\t\tdelta: latest.transformedCases - previous.transformedCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.transformedCases - previous.transformedCases\n\t\t\t),\n\t\t\tmetric: 'transformedCases',\n\t\t\tprevious: previous.transformedCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.variantCases,\n\t\t\tdelta: latest.variantCases - previous.variantCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.variantCases - previous.variantCases\n\t\t\t),\n\t\t\tmetric: 'variantCases',\n\t\t\tprevious: previous.variantCases\n\t\t}\n\t];\n\tconst absoluteSorted = [...aggregate].sort(\n\t\t(left, right) =>\n\t\t\tMath.abs(right.delta) - Math.abs(left.delta) ||\n\t\t\tleft.metric.localeCompare(right.metric)\n\t);\n\n\treturn {\n\t\taggregate,\n\t\tbestMetric: absoluteSorted[0],\n\t\tworstMetric: absoluteSorted[absoluteSorted.length - 1]\n\t};\n};\n\nconst buildRAGRetrievalTraceStageChurn = ({\n\twindows\n}: {\n\twindows: RAGRetrievalTraceHistoryWindow[];\n}): RAGTraceSummaryStageTrend[] => {\n\tconst stages = new Set<RAGRetrievalTraceStep['stage']>();\n\tfor (const window of windows) {\n\t\tfor (const stage of Object.keys(window.current.stageCounts) as Array<\n\t\t\tRAGRetrievalTraceStep['stage']\n\t\t>) {\n\t\t\tstages.add(stage);\n\t\t}\n\t\tfor (const stage of Object.keys(window.previous.stageCounts) as Array<\n\t\t\tRAGRetrievalTraceStep['stage']\n\t\t>) {\n\t\t\tstages.add(stage);\n\t\t}\n\t}\n\n\treturn [...stages]\n\t\t.map((stage) => {\n\t\t\tlet netDelta = 0;\n\t\t\tlet totalChanges = 0;\n\t\t\tfor (const window of windows) {\n\t\t\t\tconst delta = window.delta?.stageCountsDelta[stage]?.delta ?? 0;\n\t\t\t\tnetDelta += delta;\n\t\t\t\ttotalChanges += Math.abs(delta);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tlatestDelta:\n\t\t\t\t\twindows[0]?.delta?.stageCountsDelta[stage]?.delta ?? 0,\n\t\t\t\tnetDelta,\n\t\t\t\tstage,\n\t\t\t\ttotalChanges\n\t\t\t};\n\t\t})\n\t\t.sort(\n\t\t\t(left, right) =>\n\t\t\t\tright.totalChanges - left.totalChanges ||\n\t\t\t\tleft.stage.localeCompare(right.stage)\n\t\t);\n};\n\nconst summarizeRetrievalTraces = (\n\ttraces: RAGRetrievalTrace[]\n): RAGRetrievalTraceComparisonSummary | undefined => {\n\tif (traces.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst totalCases = traces.length;\n\tconst modeSet = new Set<RAGHybridRetrievalMode>();\n\tconst sourceBalanceStrategySet = new Set<RAGSourceBalanceStrategy>();\n\tlet vectorCases = 0;\n\tlet lexicalCases = 0;\n\tlet balancedCases = 0;\n\tlet roundRobinCases = 0;\n\tlet transformedCases = 0;\n\tlet variantCases = 0;\n\tlet finalCountSum = 0;\n\tlet vectorCountSum = 0;\n\tlet lexicalCountSum = 0;\n\tlet candidateTopKSum = 0;\n\tlet lexicalTopKSum = 0;\n\n\tfor (const trace of traces) {\n\t\tmodeSet.add(trace.mode);\n\t\tsourceBalanceStrategySet.add(trace.sourceBalanceStrategy ?? 'cap');\n\t\tif (trace.runVector) {\n\t\t\tvectorCases += 1;\n\t\t}\n\t\tif (trace.runLexical) {\n\t\t\tlexicalCases += 1;\n\t\t}\n\t\tif (typeof trace.maxResultsPerSource === 'number') {\n\t\t\tbalancedCases += 1;\n\t\t\tif (trace.sourceBalanceStrategy === 'round_robin') {\n\t\t\t\troundRobinCases += 1;\n\t\t\t}\n\t\t}\n\t\tif (trace.transformedQuery !== trace.query) {\n\t\t\ttransformedCases += 1;\n\t\t}\n\t\tif (trace.variantQueries.length > 0) {\n\t\t\tvariantCases += 1;\n\t\t}\n\t\tfinalCountSum += trace.resultCounts.final;\n\t\tvectorCountSum += trace.resultCounts.vector;\n\t\tlexicalCountSum += trace.resultCounts.lexical;\n\t\tcandidateTopKSum += trace.candidateTopK;\n\t\tlexicalTopKSum += trace.lexicalTopK;\n\t}\n\n\treturn {\n\t\taverageCandidateTopK: roundTraceAverage(candidateTopKSum, totalCases),\n\t\taverageFinalCount: roundTraceAverage(finalCountSum, totalCases),\n\t\taverageLexicalCount: roundTraceAverage(lexicalCountSum, totalCases),\n\t\taverageLexicalTopK: roundTraceAverage(lexicalTopKSum, totalCases),\n\t\tbalancedCases,\n\t\taverageVectorCount: roundTraceAverage(vectorCountSum, totalCases),\n\t\tlexicalCases,\n\t\tmodes: Array.from(modeSet),\n\t\troundRobinCases,\n\t\tsourceBalanceStrategies: Array.from(sourceBalanceStrategySet),\n\t\tstageCounts: buildTraceStageCounts(traces),\n\t\ttotalCases,\n\t\ttransformedCases,\n\t\tvariantCases,\n\t\tvectorCases\n\t};\n};\n\nconst evaluateRAGCollectionCases = async ({\n\tcollection,\n\tinput,\n\tdefaultTopK = DEFAULT_TOP_K,\n\trerank,\n\tincludeTrace = false\n}: {\n\tcollection: RAGCollection;\n\tinput: RAGEvaluationInput;\n\tdefaultTopK?: number;\n\trerank?: RAGRerankerProviderLike;\n\tincludeTrace?: boolean;\n}): Promise<\n\tArray<{\n\t\tcaseResult: RAGEvaluationCaseResult;\n\t\ttrace?: RAGRetrievalTrace;\n\t\tfilter?: Record<string, unknown>;\n\t\tretrieval?: RAGCollectionSearchParams['retrieval'];\n\t\ttopResult?: RAGQueryResult;\n\t}>\n> => {\n\tif (input.dryRun) {\n\t\treturn executeDryRunRAGEvaluation(input, defaultTopK).map(\n\t\t\t(caseResult, caseIndex) => ({\n\t\t\t\tcaseResult,\n\t\t\t\tfilter:\n\t\t\t\t\ttypeof input.cases?.[caseIndex]?.filter === 'object'\n\t\t\t\t\t\t? input.cases[caseIndex]?.filter\n\t\t\t\t\t\t: input.filter,\n\t\t\t\tretrieval:\n\t\t\t\t\tinput.cases?.[caseIndex]?.retrieval ?? input.retrieval,\n\t\t\t\ttopResult: undefined,\n\t\t\t\ttrace: undefined\n\t\t\t})\n\t\t);\n\t}\n\n\treturn Promise.all(\n\t\tinput.cases.map(async (caseInput, caseIndex) => {\n\t\t\tconst startedAt = Date.now();\n\t\t\tconst mode = resolveEvaluationMode(caseInput);\n\t\t\tconst query = caseInput.query.trim();\n\t\t\tconst expectedIds = normalizeExpectedIds(\n\t\t\t\tmode === 'chunkId'\n\t\t\t\t\t? (caseInput.expectedChunkIds ?? [])\n\t\t\t\t\t: mode === 'source'\n\t\t\t\t\t\t? (caseInput.expectedSources ?? [])\n\t\t\t\t\t\t: (caseInput.expectedDocumentIds ?? [])\n\t\t\t);\n\t\t\tconst topK =\n\t\t\t\ttypeof caseInput.topK === 'number'\n\t\t\t\t\t? caseInput.topK\n\t\t\t\t\t: typeof input.topK === 'number'\n\t\t\t\t\t\t? input.topK\n\t\t\t\t\t\t: defaultTopK;\n\t\t\tconst searchInput = {\n\t\t\t\tfilter: caseInput.corpusKey\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...((typeof caseInput.filter === 'object'\n\t\t\t\t\t\t\t\t? caseInput.filter\n\t\t\t\t\t\t\t\t: input.filter) ?? {}),\n\t\t\t\t\t\t\tcorpusKey: caseInput.corpusKey\n\t\t\t\t\t\t}\n\t\t\t\t\t: typeof caseInput.filter === 'object'\n\t\t\t\t\t\t? caseInput.filter\n\t\t\t\t\t\t: input.filter,\n\t\t\t\tmodel: caseInput.model ?? input.model,\n\t\t\t\tquery,\n\t\t\t\trerank,\n\t\t\t\tscoreThreshold:\n\t\t\t\t\ttypeof caseInput.scoreThreshold === 'number'\n\t\t\t\t\t\t? caseInput.scoreThreshold\n\t\t\t\t\t\t: input.scoreThreshold,\n\t\t\t\tretrieval: caseInput.retrieval ?? input.retrieval,\n\t\t\t\ttopK\n\t\t\t};\n\t\t\tconst searchOutcome = includeTrace\n\t\t\t\t? await collection.searchWithTrace(searchInput)\n\t\t\t\t: {\n\t\t\t\t\t\tresults: await collection.search(searchInput),\n\t\t\t\t\t\ttrace: undefined\n\t\t\t\t\t};\n\t\t\tconst sources = buildSources(searchOutcome.results);\n\t\t\tconst elapsedMs = Date.now() - startedAt;\n\t\t\tconst retrievedIds = normalizeExpectedIds(\n\t\t\t\tsources.map((source) => extractExpectedId(source, mode))\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcaseResult: summarizeRAGEvaluationCase({\n\t\t\t\t\tcaseIndex,\n\t\t\t\t\tcaseInput: { ...caseInput, topK },\n\t\t\t\t\telapsedMs,\n\t\t\t\t\texpectedIds,\n\t\t\t\t\tmode,\n\t\t\t\t\tquery,\n\t\t\t\t\tretrievedIds,\n\t\t\t\t\tretrievedSources: sources,\n\t\t\t\t\ttrace: searchOutcome.trace\n\t\t\t\t}),\n\t\t\t\ttrace: searchOutcome.trace,\n\t\t\t\tfilter: searchInput.filter,\n\t\t\t\tretrieval: searchInput.retrieval,\n\t\t\t\ttopResult: searchOutcome.results[0]\n\t\t\t};\n\t\t})\n\t);\n};\n\nexport const buildRAGAnswerGroundingCaseDifficultyLeaderboard = (\n\tentries: Array<{\n\t\tlabel: string;\n\t\tresponse: RAGAnswerGroundingEvaluationResponse;\n\t}>\n) => {\n\tconst grouped = new Map<\n\t\tstring,\n\t\t{\n\t\t\tcaseId: string;\n\t\t\tlabel?: string;\n\t\t\tquery?: string;\n\t\t\tpassCount: number;\n\t\t\tpartialCount: number;\n\t\t\tfailCount: number;\n\t\t\tgroundedCount: number;\n\t\t\ttotalEvaluations: number;\n\t\t\ttotalCitationF1: number;\n\t\t\ttotalResolvedCitationRate: number;\n\t\t}\n\t>();\n\n\tfor (const entry of entries) {\n\t\tfor (const result of entry.response.cases) {\n\t\t\tconst current = grouped.get(result.caseId) ?? {\n\t\t\t\tcaseId: result.caseId,\n\t\t\t\tfailCount: 0,\n\t\t\t\tgroundedCount: 0,\n\t\t\t\tlabel: result.label,\n\t\t\t\tpassCount: 0,\n\t\t\t\tpartialCount: 0,\n\t\t\t\tquery: result.query,\n\t\t\t\ttotalCitationF1: 0,\n\t\t\t\ttotalEvaluations: 0,\n\t\t\t\ttotalResolvedCitationRate: 0\n\t\t\t};\n\t\t\tcurrent.label ??= result.label;\n\t\t\tcurrent.query ??= result.query;\n\t\t\tcurrent.totalEvaluations += 1;\n\t\t\tcurrent.totalCitationF1 += result.citationF1;\n\t\t\tcurrent.totalResolvedCitationRate += result.resolvedCitationRate;\n\t\t\tif (result.status === 'pass') {\n\t\t\t\tcurrent.passCount += 1;\n\t\t\t} else if (result.status === 'partial') {\n\t\t\t\tcurrent.partialCount += 1;\n\t\t\t} else {\n\t\t\t\tcurrent.failCount += 1;\n\t\t\t}\n\t\t\tif (result.coverage === 'grounded') {\n\t\t\t\tcurrent.groundedCount += 1;\n\t\t\t}\n\t\t\tgrouped.set(result.caseId, current);\n\t\t}\n\t}\n\n\tconst ranked = Array.from(grouped.values()).sort((left, right) => {\n\t\tconst leftPassRate = left.passCount / left.totalEvaluations;\n\t\tconst rightPassRate = right.passCount / right.totalEvaluations;\n\t\tif (leftPassRate !== rightPassRate) {\n\t\t\treturn leftPassRate - rightPassRate;\n\t\t}\n\t\tconst leftCitationF1 = left.totalCitationF1 / left.totalEvaluations;\n\t\tconst rightCitationF1 = right.totalCitationF1 / right.totalEvaluations;\n\t\tif (leftCitationF1 !== rightCitationF1) {\n\t\t\treturn leftCitationF1 - rightCitationF1;\n\t\t}\n\t\tconst leftResolved =\n\t\t\tleft.totalResolvedCitationRate / left.totalEvaluations;\n\t\tconst rightResolved =\n\t\t\tright.totalResolvedCitationRate / right.totalEvaluations;\n\t\tif (leftResolved !== rightResolved) {\n\t\t\treturn leftResolved - rightResolved;\n\t\t}\n\n\t\treturn left.caseId.localeCompare(right.caseId);\n\t});\n\n\treturn ranked.map<RAGAnswerGroundingEvaluationCaseDifficultyEntry>(\n\t\t(entry, index) => ({\n\t\t\taverageCitationF1: entry.totalCitationF1 / entry.totalEvaluations,\n\t\t\taverageResolvedCitationRate:\n\t\t\t\tentry.totalResolvedCitationRate / entry.totalEvaluations,\n\t\t\tcaseId: entry.caseId,\n\t\t\tfailRate: (entry.failCount / entry.totalEvaluations) * 100,\n\t\t\tgroundedRate: (entry.groundedCount / entry.totalEvaluations) * 100,\n\t\t\tlabel: entry.label,\n\t\t\tpassRate: (entry.passCount / entry.totalEvaluations) * 100,\n\t\t\tpartialRate: (entry.partialCount / entry.totalEvaluations) * 100,\n\t\t\tquery: entry.query,\n\t\t\trank: index + 1,\n\t\t\ttotalEvaluations: entry.totalEvaluations\n\t\t})\n\t);\n};\n\nconst buildGroundingDifficultyDiffEntry = (\n\tcurrent: RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n\tprevious?: RAGAnswerGroundingEvaluationCaseDifficultyEntry\n): RAGAnswerGroundingCaseDifficultyDiffEntry => ({\n\tcaseId: current.caseId,\n\tcurrentAverageCitationF1: current.averageCitationF1,\n\tcurrentFailRate: current.failRate,\n\tcurrentPassRate: current.passRate,\n\tcurrentRank: current.rank,\n\tlabel: current.label,\n\tpreviousAverageCitationF1: previous?.averageCitationF1,\n\tpreviousFailRate: previous?.failRate,\n\tpreviousPassRate: previous?.passRate,\n\tpreviousRank: previous?.rank,\n\tquery: current.query\n});\n\nconst buildRAGAnswerGroundingCaseDifficultyTrends = ({\n\truns\n}: {\n\truns: RAGAnswerGroundingCaseDifficultyRun[];\n}) => {\n\tconst movementCounts = new Map<\n\t\tstring,\n\t\t{\n\t\t\tlabel?: string;\n\t\t\tharder: number;\n\t\t\teasier: number;\n\t\t\tunchanged: number;\n\t\t}\n\t>();\n\n\tfor (let index = 0; index < runs.length - 1; index += 1) {\n\t\tconst current = runs[index];\n\t\tconst previous = runs[index + 1];\n\t\tif (!current || !previous) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst diff = buildRAGAnswerGroundingCaseDifficultyRunDiff({\n\t\t\tcurrent,\n\t\t\tprevious\n\t\t});\n\n\t\tfor (const entry of diff.harderCases) {\n\t\t\tconst currentCounts = movementCounts.get(entry.caseId) ?? {\n\t\t\t\teasier: 0,\n\t\t\t\tharder: 0,\n\t\t\t\tlabel: entry.label,\n\t\t\t\tunchanged: 0\n\t\t\t};\n\t\t\tcurrentCounts.harder += 1;\n\t\t\tcurrentCounts.label ??= entry.label;\n\t\t\tmovementCounts.set(entry.caseId, currentCounts);\n\t\t}\n\n\t\tfor (const entry of diff.easierCases) {\n\t\t\tconst currentCounts = movementCounts.get(entry.caseId) ?? {\n\t\t\t\teasier: 0,\n\t\t\t\tharder: 0,\n\t\t\t\tlabel: entry.label,\n\t\t\t\tunchanged: 0\n\t\t\t};\n\t\t\tcurrentCounts.easier += 1;\n\t\t\tcurrentCounts.label ??= entry.label;\n\t\t\tmovementCounts.set(entry.caseId, currentCounts);\n\t\t}\n\n\t\tfor (const entry of diff.unchangedCases) {\n\t\t\tconst currentCounts = movementCounts.get(entry.caseId) ?? {\n\t\t\t\teasier: 0,\n\t\t\t\tharder: 0,\n\t\t\t\tlabel: entry.label,\n\t\t\t\tunchanged: 0\n\t\t\t};\n\t\t\tcurrentCounts.unchanged += 1;\n\t\t\tcurrentCounts.label ??= entry.label;\n\t\t\tmovementCounts.set(entry.caseId, currentCounts);\n\t\t}\n\t}\n\n\tconst movementEntries = [...movementCounts.entries()];\n\tconst mostOftenHarderCaseIds = movementEntries\n\t\t.filter(([, counts]) => counts.harder > 0)\n\t\t.sort((left, right) => {\n\t\t\tif (right[1].harder !== left[1].harder) {\n\t\t\t\treturn right[1].harder - left[1].harder;\n\t\t\t}\n\t\t\treturn left[0].localeCompare(right[0]);\n\t\t})\n\t\t.map(([caseId]) => caseId);\n\tconst mostOftenEasierCaseIds = movementEntries\n\t\t.filter(([, counts]) => counts.easier > 0)\n\t\t.sort((left, right) => {\n\t\t\tif (right[1].easier !== left[1].easier) {\n\t\t\t\treturn right[1].easier - left[1].easier;\n\t\t\t}\n\t\t\treturn left[0].localeCompare(right[0]);\n\t\t})\n\t\t.map(([caseId]) => caseId);\n\n\treturn {\n\t\teasiestCaseIds:\n\t\t\truns[runs.length - 1]?.entries\n\t\t\t\t.map((entry) => entry.caseId)\n\t\t\t\t.reverse() ?? [],\n\t\thardestCaseIds: runs[0]?.entries.map((entry) => entry.caseId) ?? [],\n\t\tmostOftenEasierCaseIds,\n\t\tmostOftenHarderCaseIds,\n\t\tmovementCounts: Object.fromEntries(\n\t\t\tmovementEntries.map(([caseId, counts]) => [\n\t\t\t\tcaseId,\n\t\t\t\t{\n\t\t\t\t\teasier: counts.easier,\n\t\t\t\t\tharder: counts.harder,\n\t\t\t\t\tunchanged: counts.unchanged\n\t\t\t\t}\n\t\t\t])\n\t\t)\n\t};\n};\n\nexport const buildRAGAnswerGroundingCaseDifficultyRunDiff = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGAnswerGroundingCaseDifficultyRun;\n\tprevious?: RAGAnswerGroundingCaseDifficultyRun;\n}): RAGAnswerGroundingCaseDifficultyRunDiff => {\n\tconst previousEntries = new Map(\n\t\t(previous?.entries ?? []).map((entry) => [entry.caseId, entry])\n\t);\n\tconst diffs = current.entries.map((entry) =>\n\t\tbuildGroundingDifficultyDiffEntry(\n\t\t\tentry,\n\t\t\tpreviousEntries.get(entry.caseId)\n\t\t)\n\t);\n\n\treturn {\n\t\tcurrentRunId: current.id,\n\t\teasierCases: diffs.filter((entry) => {\n\t\t\tconst previousRank = entry.previousRank ?? entry.currentRank;\n\t\t\treturn entry.currentRank > previousRank;\n\t\t}),\n\t\tharderCases: diffs.filter((entry) => {\n\t\t\tconst previousRank = entry.previousRank ?? Number.MAX_SAFE_INTEGER;\n\t\t\treturn entry.currentRank < previousRank;\n\t\t}),\n\t\tpreviousRunId: previous?.id,\n\t\tsuiteId: current.suiteId,\n\t\tunchangedCases: diffs.filter((entry) => {\n\t\t\tconst previousRank = entry.previousRank ?? entry.currentRank;\n\t\t\treturn entry.currentRank === previousRank;\n\t\t})\n\t};\n};\n\nconst toHistorySortOrder = (\n\tleft: RAGEvaluationSuiteRun,\n\tright: RAGEvaluationSuiteRun\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeHistoryRuns = (runs: RAGEvaluationSuiteRun[]) =>\n\t[...runs].sort(toHistorySortOrder);\n\nconst normalizeRetrievalComparisonRuns = (runs: RAGRetrievalComparisonRun[]) =>\n\t[...runs].sort((left, right) => right.finishedAt - left.finishedAt);\n\nconst toTraceSummaryRunSortOrder = (\n\tleft: RAGRetrievalTraceSummaryRun,\n\tright: RAGRetrievalTraceSummaryRun\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeTraceSummaryRuns = <TRun extends RAGRetrievalTraceSummaryRun>(\n\truns: TRun[]\n) => [...runs].sort(toTraceSummaryRunSortOrder);\n\nconst applyRAGEvaluationHistoryPrunePolicy = <\n\tTRun extends {\n\t\tid: string;\n\t\tsuiteId: string;\n\t\tfinishedAt?: number;\n\t\tcreatedAt?: number;\n\t}\n>({\n\tinput,\n\truns,\n\tsort\n}: {\n\tinput?: RAGEvaluationHistoryPruneInput;\n\truns: TRun[];\n\tsort: (runs: TRun[]) => TRun[];\n}): {\n\tnext: TRun[];\n\tremoved: TRun[];\n\tkeptCount: number;\n\tremovedCount: number;\n} => {\n\tconst sorted = sort(runs);\n\tconst targeted = sorted.filter(\n\t\t(run) => !input?.suiteId || run.suiteId === input.suiteId\n\t);\n\tconst untouched = sorted.filter(\n\t\t(run) => input?.suiteId && run.suiteId !== input.suiteId\n\t);\n\tconst now = input?.now ?? Date.now();\n\tlet kept = [...targeted];\n\n\tif (\n\t\ttypeof input?.maxAgeMs === 'number' &&\n\t\tNumber.isFinite(input.maxAgeMs)\n\t) {\n\t\tconst cutoff = now - input.maxAgeMs;\n\t\tkept = kept.filter((run) => {\n\t\t\tconst timestamp = run.finishedAt ?? run.createdAt ?? 0;\n\t\t\treturn timestamp >= cutoff;\n\t\t});\n\t}\n\n\tif (\n\t\ttypeof input?.maxRunsPerSuite === 'number' &&\n\t\tNumber.isFinite(input.maxRunsPerSuite) &&\n\t\tinput.maxRunsPerSuite >= 0\n\t) {\n\t\tconst remainingBySuite = new Map<string, number>();\n\t\tkept = kept.filter((run) => {\n\t\t\tconst current = remainingBySuite.get(run.suiteId) ?? 0;\n\t\t\tif (current >= input.maxRunsPerSuite!) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tremainingBySuite.set(run.suiteId, current + 1);\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tconst keptIds = new Set(kept.map((run) => run.id));\n\tconst removed = targeted.filter((run) => !keptIds.has(run.id));\n\tconst next = sort([...untouched, ...kept]);\n\n\treturn {\n\t\tkeptCount: next.length,\n\t\tnext,\n\t\tremoved,\n\t\tremovedCount: removed.length\n\t};\n};\n\nconst applyRAGSearchTracePrunePolicy = ({\n\tinput,\n\ttraces\n}: {\n\tinput?: RAGSearchTracePruneInput;\n\ttraces: RAGSearchTraceRecord[];\n}) => {\n\tconst sorted = normalizeTraceSummaryRuns(traces);\n\tconst matchesTag = (trace: RAGSearchTraceRecord) =>\n\t\t!input?.tag || (trace.tags ?? []).includes(input.tag);\n\tconst targeted = sorted.filter(matchesTag);\n\tconst untouched = sorted.filter((trace) => !matchesTag(trace));\n\tconst now = input?.now ?? Date.now();\n\tlet kept = [...targeted];\n\n\tif (\n\t\ttypeof input?.maxAgeMs === 'number' &&\n\t\tNumber.isFinite(input.maxAgeMs)\n\t) {\n\t\tconst cutoff = now - input.maxAgeMs;\n\t\tkept = kept.filter((trace) => trace.finishedAt >= cutoff);\n\t}\n\n\tif (\n\t\ttypeof input?.maxRecordsPerQuery === 'number' &&\n\t\tNumber.isFinite(input.maxRecordsPerQuery) &&\n\t\tinput.maxRecordsPerQuery >= 0\n\t) {\n\t\tconst remainingByQuery = new Map<string, number>();\n\t\tkept = kept.filter((trace) => {\n\t\t\tconst current = remainingByQuery.get(trace.query) ?? 0;\n\t\t\tif (current >= input.maxRecordsPerQuery!) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tremainingByQuery.set(trace.query, current + 1);\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tif (\n\t\ttypeof input?.maxRecordsPerGroup === 'number' &&\n\t\tNumber.isFinite(input.maxRecordsPerGroup) &&\n\t\tinput.maxRecordsPerGroup >= 0\n\t) {\n\t\tconst remainingByGroup = new Map<string, number>();\n\t\tkept = kept.filter((trace) => {\n\t\t\tif (!trace.groupKey) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst current = remainingByGroup.get(trace.groupKey) ?? 0;\n\t\t\tif (current >= input.maxRecordsPerGroup!) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tremainingByGroup.set(trace.groupKey, current + 1);\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tconst keptIds = new Set(kept.map((trace) => trace.id));\n\tconst removed = targeted.filter((trace) => !keptIds.has(trace.id));\n\tconst next = normalizeTraceSummaryRuns([...untouched, ...kept]);\n\n\treturn {\n\t\tkeptCount: next.length,\n\t\tnext,\n\t\tremoved,\n\t\tremovedCount: removed.length\n\t};\n};\n\nconst buildRAGSearchTraceStatsFromTraces = (\n\ttraces: RAGSearchTraceRecord[]\n): RAGSearchTraceStats => {\n\tconst queryKeys = new Set<string>();\n\tconst groupKeys = new Set<string>();\n\tconst tagCounts = new Map<string, number>();\n\tlet oldestFinishedAt: number | undefined;\n\tlet newestFinishedAt: number | undefined;\n\n\tfor (const trace of traces) {\n\t\tqueryKeys.add(trace.query);\n\t\tif (trace.groupKey) {\n\t\t\tgroupKeys.add(trace.groupKey);\n\t\t}\n\t\tfor (const tag of trace.tags ?? []) {\n\t\t\ttagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);\n\t\t}\n\t\toldestFinishedAt =\n\t\t\ttypeof oldestFinishedAt === 'number'\n\t\t\t\t? Math.min(oldestFinishedAt, trace.finishedAt)\n\t\t\t\t: trace.finishedAt;\n\t\tnewestFinishedAt =\n\t\t\ttypeof newestFinishedAt === 'number'\n\t\t\t\t? Math.max(newestFinishedAt, trace.finishedAt)\n\t\t\t\t: trace.finishedAt;\n\t}\n\n\treturn {\n\t\tgroupCount: groupKeys.size,\n\t\tnewestFinishedAt,\n\t\toldestFinishedAt,\n\t\tqueryCount: queryKeys.size,\n\t\ttagCounts: Object.fromEntries(tagCounts.entries()),\n\t\ttotalTraces: traces.length\n\t};\n};\n\nconst normalizeTraceTags = (tags?: string[]) =>\n\tArray.from(\n\t\tnew Set((tags ?? []).map((tag) => tag.trim()).filter(Boolean))\n\t).sort((left, right) => left.localeCompare(right));\n\nconst toGroundingHistorySortOrder = (\n\tleft: RAGAnswerGroundingEvaluationRun,\n\tright: RAGAnswerGroundingEvaluationRun\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeGroundingHistoryRuns = (\n\truns: RAGAnswerGroundingEvaluationRun[]\n) => [...runs].sort(toGroundingHistorySortOrder);\n\nconst toSearchTracePruneRunSortOrder = (\n\tleft: RAGSearchTracePruneRun,\n\tright: RAGSearchTracePruneRun\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeSearchTracePruneRuns = (runs: RAGSearchTracePruneRun[]) =>\n\t[...runs].sort(toSearchTracePruneRunSortOrder);\n\nconst toGroundingDifficultyHistorySortOrder = (\n\tleft: RAGAnswerGroundingCaseDifficultyRun,\n\tright: RAGAnswerGroundingCaseDifficultyRun\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeGroundingDifficultyHistoryRuns = (\n\truns: RAGAnswerGroundingCaseDifficultyRun[]\n) => [...runs].sort(toGroundingDifficultyHistorySortOrder);\n\nconst buildCaseDiff = (\n\tcurrentCase: RAGEvaluationCaseResult,\n\tpreviousCase?: RAGEvaluationCaseResult\n): RAGEvaluationCaseDiff => ({\n\tcaseId: currentCase.caseId,\n\tcurrentF1: currentCase.f1,\n\tcurrentMatchedIds: currentCase.matchedIds,\n\tcurrentMissingIds: currentCase.missingIds,\n\tcurrentStatus: currentCase.status,\n\tlabel: currentCase.label,\n\tpreviousF1: previousCase?.f1,\n\tpreviousMatchedIds: previousCase?.matchedIds ?? [],\n\tpreviousMissingIds: previousCase?.missingIds ?? [],\n\tpreviousStatus: previousCase?.status,\n\tpreviousFailureClasses: previousCase?.failureClasses ?? [],\n\tquery: currentCase.query,\n\tcurrentFailureClasses: currentCase.failureClasses ?? []\n});\n\nconst buildGroundingCaseDiff = (\n\tcurrentCase: RAGAnswerGroundingEvaluationCaseResult,\n\tpreviousCase?: RAGAnswerGroundingEvaluationCaseResult\n): RAGAnswerGroundingEvaluationCaseDiff => ({\n\tanswerChanged:\n\t\ttypeof previousCase?.answer === 'string'\n\t\t\t? previousCase.answer !== currentCase.answer\n\t\t\t: true,\n\tcaseId: currentCase.caseId,\n\tcurrentCitationF1: currentCase.citationF1,\n\tcurrentCitedIds: currentCase.citedIds,\n\tcurrentCoverage: currentCase.coverage,\n\tcurrentExtraIds: currentCase.extraIds,\n\tcurrentMatchedIds: currentCase.matchedIds,\n\tcurrentMissingIds: currentCase.missingIds,\n\tcurrentReferenceCount: currentCase.referenceCount,\n\tcurrentResolvedCitationCount: currentCase.resolvedCitationCount,\n\tcurrentAnswer: currentCase.answer,\n\tcurrentStatus: currentCase.status,\n\tcurrentUngroundedReferenceNumbers:\n\t\tcurrentCase.groundedAnswer.ungroundedReferenceNumbers,\n\tcurrentUnresolvedCitationCount: currentCase.unresolvedCitationCount,\n\tlabel: currentCase.label,\n\tpreviousAnswer: previousCase?.answer,\n\tpreviousCitationF1: previousCase?.citationF1,\n\tpreviousCitedIds: previousCase?.citedIds ?? [],\n\tpreviousCoverage: previousCase?.coverage,\n\tpreviousExtraIds: previousCase?.extraIds ?? [],\n\tpreviousFailureClasses: previousCase?.failureClasses ?? [],\n\tpreviousMatchedIds: previousCase?.matchedIds ?? [],\n\tpreviousMissingIds: previousCase?.missingIds ?? [],\n\tpreviousReferenceCount: previousCase?.referenceCount,\n\tpreviousResolvedCitationCount: previousCase?.resolvedCitationCount,\n\tpreviousStatus: previousCase?.status,\n\tpreviousUngroundedReferenceNumbers:\n\t\tpreviousCase?.groundedAnswer.ungroundedReferenceNumbers ?? [],\n\tpreviousUnresolvedCitationCount: previousCase?.unresolvedCitationCount,\n\tquery: currentCase.query,\n\tcurrentFailureClasses: currentCase.failureClasses ?? []\n});\n\nconst buildGroundingCaseSnapshots = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent?: RAGAnswerGroundingEvaluationRun;\n\tprevious?: RAGAnswerGroundingEvaluationRun;\n}): RAGAnswerGroundingEvaluationCaseSnapshot[] => {\n\tif (!current) {\n\t\treturn [];\n\t}\n\n\tconst previousCases = new Map(\n\t\t(previous?.response.cases ?? []).map((entry) => [entry.caseId, entry])\n\t);\n\n\treturn current.response.cases.map((entry) => {\n\t\tconst previousCase = previousCases.get(entry.caseId);\n\t\treturn {\n\t\t\tanswer: entry.answer,\n\t\t\tanswerChange:\n\t\t\t\ttypeof previousCase?.answer === 'string'\n\t\t\t\t\t? previousCase.answer === entry.answer\n\t\t\t\t\t\t? 'unchanged'\n\t\t\t\t\t\t: 'changed'\n\t\t\t\t\t: 'new',\n\t\t\tcaseId: entry.caseId,\n\t\t\tcitationCount: entry.citationCount,\n\t\t\tcitationF1: entry.citationF1,\n\t\t\tcitedIds: entry.citedIds,\n\t\t\tcoverage: entry.coverage,\n\t\t\textraIds: entry.extraIds,\n\t\t\tfailureClasses: entry.failureClasses,\n\t\t\tlabel: entry.label,\n\t\t\tmatchedIds: entry.matchedIds,\n\t\t\tmissingIds: entry.missingIds,\n\t\t\tpreviousAnswer: previousCase?.answer,\n\t\t\tquery: entry.query,\n\t\t\treferenceCount: entry.referenceCount,\n\t\t\tresolvedCitationCount: entry.resolvedCitationCount,\n\t\t\tresolvedCitationRate: entry.resolvedCitationRate,\n\t\t\tstatus: entry.status,\n\t\t\tungroundedReferenceNumbers:\n\t\t\t\tentry.groundedAnswer.ungroundedReferenceNumbers,\n\t\t\tunresolvedCitationCount: entry.unresolvedCitationCount\n\t\t};\n\t});\n};\n\nconst areStageCountsEqual = (\n\tleft: Partial<Record<RAGRetrievalTraceStage, number>>,\n\tright: Partial<Record<RAGRetrievalTraceStage, number>>\n) => {\n\tconst keys = new Set([\n\t\t...Object.keys(left),\n\t\t...Object.keys(right)\n\t]) as Set<RAGRetrievalTraceStage>;\n\n\tfor (const key of keys) {\n\t\tif ((left[key] ?? 0) !== (right[key] ?? 0)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n};\n\nconst buildEvaluationCaseTraceSnapshot = ({\n\tcaseResult,\n\tfilter,\n\tretrieval,\n\tcurrentTrace,\n\tpreviousTrace,\n\tcurrentSnapshot,\n\ttopResult\n}: {\n\tcaseResult: RAGEvaluationCaseResult;\n\tfilter?: Record<string, unknown>;\n\tretrieval?: RAGCollectionSearchParams['retrieval'];\n\tcurrentTrace?: RAGRetrievalTrace;\n\tpreviousTrace?: RAGEvaluationCaseTraceSnapshot;\n\tcurrentSnapshot?: RAGEvaluationCaseTraceSnapshot;\n\ttopResult?: RAGQueryResult;\n}): RAGEvaluationCaseTraceSnapshot => {\n\tconst stageCounts = currentTrace\n\t\t? buildTraceStageCounts([currentTrace])\n\t\t: {};\n\tconst previousStageCounts = previousTrace?.stageCounts ?? {};\n\tconst currentLeadSnapshot =\n\t\ttopResult || currentSnapshot\n\t\t\t? buildEvaluationLeadSnapshot({\n\t\t\t\t\tmetadata: topResult?.metadata,\n\t\t\t\t\tsource: topResult?.source,\n\t\t\t\t\ttitle: topResult?.title\n\t\t\t\t})\n\t\t\t: {};\n\tconst topContextLabel =\n\t\tcurrentLeadSnapshot.topContextLabel ?? currentSnapshot?.topContextLabel;\n\tconst topLocatorLabel =\n\t\tcurrentLeadSnapshot.topLocatorLabel ?? currentSnapshot?.topLocatorLabel;\n\tconst sourceAwareChunkReasonLabel =\n\t\tcurrentLeadSnapshot.sourceAwareChunkReasonLabel ??\n\t\tcurrentSnapshot?.sourceAwareChunkReasonLabel;\n\tconst sourceAwareUnitScopeLabel =\n\t\tcurrentLeadSnapshot.sourceAwareUnitScopeLabel ??\n\t\tcurrentSnapshot?.sourceAwareUnitScopeLabel;\n\tconst currentLeadMediaCueSnapshot = currentTrace\n\t\t? buildEvaluationLeadMediaCueSnapshot(currentTrace)\n\t\t: {};\n\tconst currentSQLiteQueryPlanSnapshot = currentTrace\n\t\t? buildEvaluationSQLiteQueryPlanSnapshot(currentTrace)\n\t\t: {};\n\tconst currentPostgresQueryPlanSnapshot = currentTrace\n\t\t? buildEvaluationPostgresQueryPlanSnapshot(currentTrace)\n\t\t: {};\n\tconst leadSpeakerCue =\n\t\tcurrentLeadMediaCueSnapshot.leadSpeakerCue ??\n\t\tcurrentSnapshot?.leadSpeakerCue;\n\tconst leadSpeakerAttributionCue =\n\t\tcurrentLeadMediaCueSnapshot.leadSpeakerAttributionCue ??\n\t\tcurrentSnapshot?.leadSpeakerAttributionCue;\n\tconst leadChannelCue =\n\t\tcurrentLeadMediaCueSnapshot.leadChannelCue ??\n\t\tcurrentSnapshot?.leadChannelCue;\n\tconst leadChannelAttributionCue =\n\t\tcurrentLeadMediaCueSnapshot.leadChannelAttributionCue ??\n\t\tcurrentSnapshot?.leadChannelAttributionCue;\n\tconst leadContinuityCue =\n\t\tcurrentLeadMediaCueSnapshot.leadContinuityCue ??\n\t\tcurrentSnapshot?.leadContinuityCue;\n\tconst sqliteQueryMode =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryMode ??\n\t\tcurrentSnapshot?.sqliteQueryMode;\n\tconst sqliteQueryPushdownMode =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryPushdownMode ??\n\t\tcurrentSnapshot?.sqliteQueryPushdownMode;\n\tconst sqliteQueryPushdownApplied =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryPushdownApplied ??\n\t\tcurrentSnapshot?.sqliteQueryPushdownApplied;\n\tconst sqliteQueryPushdownClauseCount =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryPushdownClauseCount ??\n\t\tcurrentSnapshot?.sqliteQueryPushdownClauseCount;\n\tconst sqliteQueryTotalFilterClauseCount =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryTotalFilterClauseCount ??\n\t\tcurrentSnapshot?.sqliteQueryTotalFilterClauseCount;\n\tconst sqliteQueryJsRemainderClauseCount =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryJsRemainderClauseCount ??\n\t\tcurrentSnapshot?.sqliteQueryJsRemainderClauseCount;\n\tconst sqliteQueryMultiplierUsed =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryMultiplierUsed ??\n\t\tcurrentSnapshot?.sqliteQueryMultiplierUsed;\n\tconst sqliteQueryCandidateLimitUsed =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryCandidateLimitUsed ??\n\t\tcurrentSnapshot?.sqliteQueryCandidateLimitUsed;\n\tconst sqliteQueryMaxBackfillsUsed =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryMaxBackfillsUsed ??\n\t\tcurrentSnapshot?.sqliteQueryMaxBackfillsUsed;\n\tconst sqliteQueryMinResultsUsed =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryMinResultsUsed ??\n\t\tcurrentSnapshot?.sqliteQueryMinResultsUsed;\n\tconst sqliteQueryPushdownCoverageRatio =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryPushdownCoverageRatio ??\n\t\tcurrentSnapshot?.sqliteQueryPushdownCoverageRatio;\n\tconst sqliteQueryJsRemainderRatio =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryJsRemainderRatio ??\n\t\tcurrentSnapshot?.sqliteQueryJsRemainderRatio;\n\tconst sqliteQueryFilteredCandidates =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryFilteredCandidates ??\n\t\tcurrentSnapshot?.sqliteQueryFilteredCandidates;\n\tconst sqliteQueryInitialSearchK =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryInitialSearchK ??\n\t\tcurrentSnapshot?.sqliteQueryInitialSearchK;\n\tconst sqliteQueryFinalSearchK =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryFinalSearchK ??\n\t\tcurrentSnapshot?.sqliteQueryFinalSearchK;\n\tconst sqliteQuerySearchExpansionRatio =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQuerySearchExpansionRatio ??\n\t\tcurrentSnapshot?.sqliteQuerySearchExpansionRatio;\n\tconst sqliteQueryBackfillCount =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryBackfillCount ??\n\t\tcurrentSnapshot?.sqliteQueryBackfillCount;\n\tconst sqliteQueryBackfillLimitReached =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryBackfillLimitReached ??\n\t\tcurrentSnapshot?.sqliteQueryBackfillLimitReached;\n\tconst sqliteQueryMinResultsSatisfied =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryMinResultsSatisfied ??\n\t\tcurrentSnapshot?.sqliteQueryMinResultsSatisfied;\n\tconst sqliteQueryReturnedCount =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryReturnedCount ??\n\t\tcurrentSnapshot?.sqliteQueryReturnedCount;\n\tconst sqliteQueryCandidateYieldRatio =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryCandidateYieldRatio ??\n\t\tcurrentSnapshot?.sqliteQueryCandidateYieldRatio;\n\tconst sqliteQueryTopKFillRatio =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryTopKFillRatio ??\n\t\tcurrentSnapshot?.sqliteQueryTopKFillRatio;\n\tconst sqliteQueryUnderfilledTopK =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryUnderfilledTopK ??\n\t\tcurrentSnapshot?.sqliteQueryUnderfilledTopK;\n\tconst sqliteQueryCandidateBudgetExhausted =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryCandidateBudgetExhausted ??\n\t\tcurrentSnapshot?.sqliteQueryCandidateBudgetExhausted;\n\tconst sqliteQueryCandidateCoverage =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryCandidateCoverage ??\n\t\tcurrentSnapshot?.sqliteQueryCandidateCoverage;\n\tconst postgresQueryMode =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryMode ??\n\t\tcurrentSnapshot?.postgresQueryMode;\n\tconst postgresQueryPushdownMode =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryPushdownMode ??\n\t\tcurrentSnapshot?.postgresQueryPushdownMode;\n\tconst postgresQueryPushdownApplied =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryPushdownApplied ??\n\t\tcurrentSnapshot?.postgresQueryPushdownApplied;\n\tconst postgresQueryPushdownClauseCount =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryPushdownClauseCount ??\n\t\tcurrentSnapshot?.postgresQueryPushdownClauseCount;\n\tconst postgresQueryTotalFilterClauseCount =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryTotalFilterClauseCount ??\n\t\tcurrentSnapshot?.postgresQueryTotalFilterClauseCount;\n\tconst postgresQueryJsRemainderClauseCount =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryJsRemainderClauseCount ??\n\t\tcurrentSnapshot?.postgresQueryJsRemainderClauseCount;\n\tconst postgresQueryMultiplierUsed =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryMultiplierUsed ??\n\t\tcurrentSnapshot?.postgresQueryMultiplierUsed;\n\tconst postgresQueryCandidateLimitUsed =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryCandidateLimitUsed ??\n\t\tcurrentSnapshot?.postgresQueryCandidateLimitUsed;\n\tconst postgresQueryMaxBackfillsUsed =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryMaxBackfillsUsed ??\n\t\tcurrentSnapshot?.postgresQueryMaxBackfillsUsed;\n\tconst postgresQueryMinResultsUsed =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryMinResultsUsed ??\n\t\tcurrentSnapshot?.postgresQueryMinResultsUsed;\n\tconst postgresQueryPushdownCoverageRatio =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryPushdownCoverageRatio ??\n\t\tcurrentSnapshot?.postgresQueryPushdownCoverageRatio;\n\tconst postgresQueryJsRemainderRatio =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryJsRemainderRatio ??\n\t\tcurrentSnapshot?.postgresQueryJsRemainderRatio;\n\tconst postgresQueryFilteredCandidates =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryFilteredCandidates ??\n\t\tcurrentSnapshot?.postgresQueryFilteredCandidates;\n\tconst postgresQueryInitialSearchK =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryInitialSearchK ??\n\t\tcurrentSnapshot?.postgresQueryInitialSearchK;\n\tconst postgresQueryFinalSearchK =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryFinalSearchK ??\n\t\tcurrentSnapshot?.postgresQueryFinalSearchK;\n\tconst postgresQuerySearchExpansionRatio =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQuerySearchExpansionRatio ??\n\t\tcurrentSnapshot?.postgresQuerySearchExpansionRatio;\n\tconst postgresQueryBackfillCount =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryBackfillCount ??\n\t\tcurrentSnapshot?.postgresQueryBackfillCount;\n\tconst postgresQueryBackfillLimitReached =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryBackfillLimitReached ??\n\t\tcurrentSnapshot?.postgresQueryBackfillLimitReached;\n\tconst postgresQueryMinResultsSatisfied =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryMinResultsSatisfied ??\n\t\tcurrentSnapshot?.postgresQueryMinResultsSatisfied;\n\tconst postgresQueryReturnedCount =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryReturnedCount ??\n\t\tcurrentSnapshot?.postgresQueryReturnedCount;\n\tconst postgresQueryCandidateYieldRatio =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryCandidateYieldRatio ??\n\t\tcurrentSnapshot?.postgresQueryCandidateYieldRatio;\n\tconst postgresQueryTopKFillRatio =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryTopKFillRatio ??\n\t\tcurrentSnapshot?.postgresQueryTopKFillRatio;\n\tconst postgresQueryUnderfilledTopK =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryUnderfilledTopK ??\n\t\tcurrentSnapshot?.postgresQueryUnderfilledTopK;\n\tconst postgresQueryCandidateBudgetExhausted =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryCandidateBudgetExhausted ??\n\t\tcurrentSnapshot?.postgresQueryCandidateBudgetExhausted;\n\tconst postgresQueryCandidateCoverage =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryCandidateCoverage ??\n\t\tcurrentSnapshot?.postgresQueryCandidateCoverage;\n\tconst currentFilterSignature = JSON.stringify(filter ?? undefined);\n\tconst previousFilterSignature = JSON.stringify(\n\t\tpreviousTrace?.inputFilter ?? undefined\n\t);\n\tconst currentRetrievalSignature = JSON.stringify(retrieval ?? undefined);\n\tconst previousRetrievalSignature = JSON.stringify(\n\t\tpreviousTrace?.inputRetrieval ?? undefined\n\t);\n\tconst traceChange = !previousTrace\n\t\t? currentTrace\n\t\t\t? 'new'\n\t\t\t: 'unchanged'\n\t\t: previousTrace.traceMode !== currentTrace?.mode ||\n\t\t\t previousFilterSignature !== currentFilterSignature ||\n\t\t\t previousRetrievalSignature !== currentRetrievalSignature ||\n\t\t\t previousTrace.sourceBalanceStrategy !==\n\t\t\t\t\tcurrentTrace?.sourceBalanceStrategy ||\n\t\t\t previousTrace.transformedQuery !==\n\t\t\t\t\t(currentTrace?.transformedQuery || undefined) ||\n\t\t\t previousTrace.variantQueries.join('|') !==\n\t\t\t\t\t(currentTrace?.variantQueries ?? []).join('|') ||\n\t\t\t previousTrace.finalCount !==\n\t\t\t\t\t(currentTrace?.resultCounts.final ?? 0) ||\n\t\t\t previousTrace.vectorCount !==\n\t\t\t\t\t(currentTrace?.resultCounts.vector ?? 0) ||\n\t\t\t previousTrace.lexicalCount !==\n\t\t\t\t\t(currentTrace?.resultCounts.lexical ?? 0) ||\n\t\t\t previousTrace.candidateTopK !==\n\t\t\t\t\t(currentTrace?.candidateTopK ?? 0) ||\n\t\t\t previousTrace.lexicalTopK !== (currentTrace?.lexicalTopK ?? 0) ||\n\t\t\t previousTrace.topContextLabel !== topContextLabel ||\n\t\t\t previousTrace.topLocatorLabel !== topLocatorLabel ||\n\t\t\t previousTrace.sourceAwareChunkReasonLabel !==\n\t\t\t\t\tsourceAwareChunkReasonLabel ||\n\t\t\t previousTrace.sourceAwareUnitScopeLabel !==\n\t\t\t\t\tsourceAwareUnitScopeLabel ||\n\t\t\t previousTrace.leadSpeakerCue !== leadSpeakerCue ||\n\t\t\t previousTrace.leadSpeakerAttributionCue !==\n\t\t\t\t\tleadSpeakerAttributionCue ||\n\t\t\t previousTrace.leadChannelCue !== leadChannelCue ||\n\t\t\t previousTrace.leadChannelAttributionCue !==\n\t\t\t\t\tleadChannelAttributionCue ||\n\t\t\t previousTrace.leadContinuityCue !== leadContinuityCue ||\n\t\t\t previousTrace.sqliteQueryMode !== sqliteQueryMode ||\n\t\t\t previousTrace.sqliteQueryPushdownMode !==\n\t\t\t\t\tsqliteQueryPushdownMode ||\n\t\t\t previousTrace.sqliteQueryPushdownApplied !==\n\t\t\t\t\tsqliteQueryPushdownApplied ||\n\t\t\t previousTrace.sqliteQueryPushdownClauseCount !==\n\t\t\t\t\tsqliteQueryPushdownClauseCount ||\n\t\t\t previousTrace.sqliteQueryTotalFilterClauseCount !==\n\t\t\t\t\tsqliteQueryTotalFilterClauseCount ||\n\t\t\t previousTrace.sqliteQueryJsRemainderClauseCount !==\n\t\t\t\t\tsqliteQueryJsRemainderClauseCount ||\n\t\t\t previousTrace.sqliteQueryMultiplierUsed !==\n\t\t\t\t\tsqliteQueryMultiplierUsed ||\n\t\t\t previousTrace.sqliteQueryCandidateLimitUsed !==\n\t\t\t\t\tsqliteQueryCandidateLimitUsed ||\n\t\t\t previousTrace.sqliteQueryMaxBackfillsUsed !==\n\t\t\t\t\tsqliteQueryMaxBackfillsUsed ||\n\t\t\t previousTrace.sqliteQueryMinResultsUsed !==\n\t\t\t\t\tsqliteQueryMinResultsUsed ||\n\t\t\t previousTrace.sqliteQueryPushdownCoverageRatio !==\n\t\t\t\t\tsqliteQueryPushdownCoverageRatio ||\n\t\t\t previousTrace.sqliteQueryJsRemainderRatio !==\n\t\t\t\t\tsqliteQueryJsRemainderRatio ||\n\t\t\t previousTrace.sqliteQueryFilteredCandidates !==\n\t\t\t\t\tsqliteQueryFilteredCandidates ||\n\t\t\t previousTrace.sqliteQueryInitialSearchK !==\n\t\t\t\t\tsqliteQueryInitialSearchK ||\n\t\t\t previousTrace.sqliteQueryFinalSearchK !==\n\t\t\t\t\tsqliteQueryFinalSearchK ||\n\t\t\t previousTrace.sqliteQuerySearchExpansionRatio !==\n\t\t\t\t\tsqliteQuerySearchExpansionRatio ||\n\t\t\t previousTrace.sqliteQueryBackfillCount !==\n\t\t\t\t\tsqliteQueryBackfillCount ||\n\t\t\t previousTrace.sqliteQueryBackfillLimitReached !==\n\t\t\t\t\tsqliteQueryBackfillLimitReached ||\n\t\t\t previousTrace.sqliteQueryMinResultsSatisfied !==\n\t\t\t\t\tsqliteQueryMinResultsSatisfied ||\n\t\t\t previousTrace.sqliteQueryReturnedCount !==\n\t\t\t\t\tsqliteQueryReturnedCount ||\n\t\t\t previousTrace.sqliteQueryCandidateYieldRatio !==\n\t\t\t\t\tsqliteQueryCandidateYieldRatio ||\n\t\t\t previousTrace.sqliteQueryTopKFillRatio !==\n\t\t\t\t\tsqliteQueryTopKFillRatio ||\n\t\t\t previousTrace.sqliteQueryUnderfilledTopK !==\n\t\t\t\t\tsqliteQueryUnderfilledTopK ||\n\t\t\t previousTrace.sqliteQueryCandidateBudgetExhausted !==\n\t\t\t\t\tsqliteQueryCandidateBudgetExhausted ||\n\t\t\t previousTrace.sqliteQueryCandidateCoverage !==\n\t\t\t\t\tsqliteQueryCandidateCoverage ||\n\t\t\t previousTrace.postgresQueryMode !== postgresQueryMode ||\n\t\t\t previousTrace.postgresQueryPushdownMode !==\n\t\t\t\t\tpostgresQueryPushdownMode ||\n\t\t\t previousTrace.postgresQueryPushdownApplied !==\n\t\t\t\t\tpostgresQueryPushdownApplied ||\n\t\t\t previousTrace.postgresQueryPushdownClauseCount !==\n\t\t\t\t\tpostgresQueryPushdownClauseCount ||\n\t\t\t previousTrace.postgresQueryTotalFilterClauseCount !==\n\t\t\t\t\tpostgresQueryTotalFilterClauseCount ||\n\t\t\t previousTrace.postgresQueryJsRemainderClauseCount !==\n\t\t\t\t\tpostgresQueryJsRemainderClauseCount ||\n\t\t\t previousTrace.postgresQueryMultiplierUsed !==\n\t\t\t\t\tpostgresQueryMultiplierUsed ||\n\t\t\t previousTrace.postgresQueryCandidateLimitUsed !==\n\t\t\t\t\tpostgresQueryCandidateLimitUsed ||\n\t\t\t previousTrace.postgresQueryMaxBackfillsUsed !==\n\t\t\t\t\tpostgresQueryMaxBackfillsUsed ||\n\t\t\t previousTrace.postgresQueryMinResultsUsed !==\n\t\t\t\t\tpostgresQueryMinResultsUsed ||\n\t\t\t previousTrace.postgresQueryPushdownCoverageRatio !==\n\t\t\t\t\tpostgresQueryPushdownCoverageRatio ||\n\t\t\t previousTrace.postgresQueryJsRemainderRatio !==\n\t\t\t\t\tpostgresQueryJsRemainderRatio ||\n\t\t\t previousTrace.postgresQueryFilteredCandidates !==\n\t\t\t\t\tpostgresQueryFilteredCandidates ||\n\t\t\t previousTrace.postgresQueryInitialSearchK !==\n\t\t\t\t\tpostgresQueryInitialSearchK ||\n\t\t\t previousTrace.postgresQueryFinalSearchK !==\n\t\t\t\t\tpostgresQueryFinalSearchK ||\n\t\t\t previousTrace.postgresQuerySearchExpansionRatio !==\n\t\t\t\t\tpostgresQuerySearchExpansionRatio ||\n\t\t\t previousTrace.postgresQueryBackfillCount !==\n\t\t\t\t\tpostgresQueryBackfillCount ||\n\t\t\t previousTrace.postgresQueryBackfillLimitReached !==\n\t\t\t\t\tpostgresQueryBackfillLimitReached ||\n\t\t\t previousTrace.postgresQueryMinResultsSatisfied !==\n\t\t\t\t\tpostgresQueryMinResultsSatisfied ||\n\t\t\t previousTrace.postgresQueryReturnedCount !==\n\t\t\t\t\tpostgresQueryReturnedCount ||\n\t\t\t previousTrace.postgresQueryCandidateYieldRatio !==\n\t\t\t\t\tpostgresQueryCandidateYieldRatio ||\n\t\t\t previousTrace.postgresQueryTopKFillRatio !==\n\t\t\t\t\tpostgresQueryTopKFillRatio ||\n\t\t\t previousTrace.postgresQueryUnderfilledTopK !==\n\t\t\t\t\tpostgresQueryUnderfilledTopK ||\n\t\t\t previousTrace.postgresQueryCandidateBudgetExhausted !==\n\t\t\t\t\tpostgresQueryCandidateBudgetExhausted ||\n\t\t\t previousTrace.postgresQueryCandidateCoverage !==\n\t\t\t\t\tpostgresQueryCandidateCoverage ||\n\t\t\t !areStageCountsEqual(previousStageCounts, stageCounts)\n\t\t\t? 'changed'\n\t\t\t: 'unchanged';\n\n\treturn {\n\t\tcandidateTopK: currentTrace?.candidateTopK ?? 0,\n\t\tcaseId: caseResult.caseId,\n\t\tcorpusKey: caseResult.corpusKey,\n\t\tinputFilter: filter,\n\t\tfinalCount: currentTrace?.resultCounts.final ?? 0,\n\t\tlabel: caseResult.label,\n\t\tlexicalCount: currentTrace?.resultCounts.lexical ?? 0,\n\t\tlexicalTopK: currentTrace?.lexicalTopK ?? 0,\n\t\tinputRetrieval: retrieval,\n\t\tpreviousCandidateTopK: previousTrace?.candidateTopK,\n\t\tpreviousFinalCount: previousTrace?.finalCount,\n\t\tpreviousLexicalCount: previousTrace?.lexicalCount,\n\t\tpreviousLexicalTopK: previousTrace?.lexicalTopK,\n\t\tpreviousInputFilter: previousTrace?.inputFilter,\n\t\tpreviousInputRetrieval: previousTrace?.inputRetrieval,\n\t\tpreviousLeadChannelAttributionCue:\n\t\t\tpreviousTrace?.leadChannelAttributionCue,\n\t\tpreviousLeadChannelCue: previousTrace?.leadChannelCue,\n\t\tpreviousLeadContinuityCue: previousTrace?.leadContinuityCue,\n\t\tpreviousLeadSpeakerAttributionCue:\n\t\t\tpreviousTrace?.leadSpeakerAttributionCue,\n\t\tpreviousLeadSpeakerCue: previousTrace?.leadSpeakerCue,\n\t\tpreviousSqliteQueryBackfillCount:\n\t\t\tpreviousTrace?.sqliteQueryBackfillCount,\n\t\tpreviousSqliteQueryBackfillLimitReached:\n\t\t\tpreviousTrace?.sqliteQueryBackfillLimitReached,\n\t\tpreviousSqliteQueryMinResultsSatisfied:\n\t\t\tpreviousTrace?.sqliteQueryMinResultsSatisfied,\n\t\tpreviousSqliteQueryCandidateBudgetExhausted:\n\t\t\tpreviousTrace?.sqliteQueryCandidateBudgetExhausted,\n\t\tpreviousSqliteQueryCandidateCoverage:\n\t\t\tpreviousTrace?.sqliteQueryCandidateCoverage,\n\t\tpreviousSqliteQueryFilteredCandidates:\n\t\t\tpreviousTrace?.sqliteQueryFilteredCandidates,\n\t\tpreviousSqliteQueryFinalSearchK: previousTrace?.sqliteQueryFinalSearchK,\n\t\tpreviousSqliteQueryInitialSearchK:\n\t\t\tpreviousTrace?.sqliteQueryInitialSearchK,\n\t\tpreviousSqliteQuerySearchExpansionRatio:\n\t\t\tpreviousTrace?.sqliteQuerySearchExpansionRatio,\n\t\tpreviousSqliteQueryMode: previousTrace?.sqliteQueryMode,\n\t\tpreviousSqliteQueryPushdownMode: previousTrace?.sqliteQueryPushdownMode,\n\t\tpreviousSqliteQueryPushdownApplied:\n\t\t\tpreviousTrace?.sqliteQueryPushdownApplied,\n\t\tpreviousSqliteQueryPushdownClauseCount:\n\t\t\tpreviousTrace?.sqliteQueryPushdownClauseCount,\n\t\tpreviousSqliteQueryTotalFilterClauseCount:\n\t\t\tpreviousTrace?.sqliteQueryTotalFilterClauseCount,\n\t\tpreviousSqliteQueryJsRemainderClauseCount:\n\t\t\tpreviousTrace?.sqliteQueryJsRemainderClauseCount,\n\t\tpreviousSqliteQueryMultiplierUsed:\n\t\t\tpreviousTrace?.sqliteQueryMultiplierUsed,\n\t\tpreviousSqliteQueryCandidateLimitUsed:\n\t\t\tpreviousTrace?.sqliteQueryCandidateLimitUsed,\n\t\tpreviousSqliteQueryMaxBackfillsUsed:\n\t\t\tpreviousTrace?.sqliteQueryMaxBackfillsUsed,\n\t\tpreviousSqliteQueryMinResultsUsed:\n\t\t\tpreviousTrace?.sqliteQueryMinResultsUsed,\n\t\tpreviousSqliteQueryPushdownCoverageRatio:\n\t\t\tpreviousTrace?.sqliteQueryPushdownCoverageRatio,\n\t\tpreviousSqliteQueryJsRemainderRatio:\n\t\t\tpreviousTrace?.sqliteQueryJsRemainderRatio,\n\t\tpreviousSqliteQueryReturnedCount:\n\t\t\tpreviousTrace?.sqliteQueryReturnedCount,\n\t\tpreviousSqliteQueryCandidateYieldRatio:\n\t\t\tpreviousTrace?.sqliteQueryCandidateYieldRatio,\n\t\tpreviousSqliteQueryTopKFillRatio:\n\t\t\tpreviousTrace?.sqliteQueryTopKFillRatio,\n\t\tpreviousSqliteQueryUnderfilledTopK:\n\t\t\tpreviousTrace?.sqliteQueryUnderfilledTopK,\n\t\tpreviousPostgresQueryBackfillCount:\n\t\t\tpreviousTrace?.postgresQueryBackfillCount,\n\t\tpreviousPostgresQueryBackfillLimitReached:\n\t\t\tpreviousTrace?.postgresQueryBackfillLimitReached,\n\t\tpreviousPostgresQueryMinResultsSatisfied:\n\t\t\tpreviousTrace?.postgresQueryMinResultsSatisfied,\n\t\tpreviousPostgresQueryCandidateBudgetExhausted:\n\t\t\tpreviousTrace?.postgresQueryCandidateBudgetExhausted,\n\t\tpreviousPostgresQueryCandidateCoverage:\n\t\t\tpreviousTrace?.postgresQueryCandidateCoverage,\n\t\tpreviousPostgresQueryFilteredCandidates:\n\t\t\tpreviousTrace?.postgresQueryFilteredCandidates,\n\t\tpreviousPostgresQueryFinalSearchK:\n\t\t\tpreviousTrace?.postgresQueryFinalSearchK,\n\t\tpreviousPostgresQueryInitialSearchK:\n\t\t\tpreviousTrace?.postgresQueryInitialSearchK,\n\t\tpreviousPostgresQuerySearchExpansionRatio:\n\t\t\tpreviousTrace?.postgresQuerySearchExpansionRatio,\n\t\tpreviousPostgresQueryMode: previousTrace?.postgresQueryMode,\n\t\tpreviousPostgresQueryPushdownMode:\n\t\t\tpreviousTrace?.postgresQueryPushdownMode,\n\t\tpreviousPostgresQueryPushdownApplied:\n\t\t\tpreviousTrace?.postgresQueryPushdownApplied,\n\t\tpreviousPostgresQueryPushdownClauseCount:\n\t\t\tpreviousTrace?.postgresQueryPushdownClauseCount,\n\t\tpreviousPostgresQueryTotalFilterClauseCount:\n\t\t\tpreviousTrace?.postgresQueryTotalFilterClauseCount,\n\t\tpreviousPostgresQueryJsRemainderClauseCount:\n\t\t\tpreviousTrace?.postgresQueryJsRemainderClauseCount,\n\t\tpreviousPostgresQueryMultiplierUsed:\n\t\t\tpreviousTrace?.postgresQueryMultiplierUsed,\n\t\tpreviousPostgresQueryCandidateLimitUsed:\n\t\t\tpreviousTrace?.postgresQueryCandidateLimitUsed,\n\t\tpreviousPostgresQueryMaxBackfillsUsed:\n\t\t\tpreviousTrace?.postgresQueryMaxBackfillsUsed,\n\t\tpreviousPostgresQueryMinResultsUsed:\n\t\t\tpreviousTrace?.postgresQueryMinResultsUsed,\n\t\tpreviousPostgresQueryPushdownCoverageRatio:\n\t\t\tpreviousTrace?.postgresQueryPushdownCoverageRatio,\n\t\tpreviousPostgresQueryJsRemainderRatio:\n\t\t\tpreviousTrace?.postgresQueryJsRemainderRatio,\n\t\tpreviousPostgresQueryReturnedCount:\n\t\t\tpreviousTrace?.postgresQueryReturnedCount,\n\t\tpreviousPostgresQueryCandidateYieldRatio:\n\t\t\tpreviousTrace?.postgresQueryCandidateYieldRatio,\n\t\tpreviousPostgresQueryTopKFillRatio:\n\t\t\tpreviousTrace?.postgresQueryTopKFillRatio,\n\t\tpreviousPostgresQueryUnderfilledTopK:\n\t\t\tpreviousTrace?.postgresQueryUnderfilledTopK,\n\t\tpreviousSourceBalanceStrategy: previousTrace?.sourceBalanceStrategy,\n\t\tpreviousSourceAwareChunkReasonLabel:\n\t\t\tpreviousTrace?.sourceAwareChunkReasonLabel,\n\t\tpreviousStageCounts,\n\t\tpreviousTopContextLabel: previousTrace?.topContextLabel,\n\t\tpreviousTopLocatorLabel: previousTrace?.topLocatorLabel,\n\t\tpreviousTraceMode: previousTrace?.traceMode,\n\t\tpreviousTransformedQuery: previousTrace?.transformedQuery,\n\t\tpreviousSourceAwareUnitScopeLabel:\n\t\t\tpreviousTrace?.sourceAwareUnitScopeLabel,\n\t\tpreviousVariantQueries: previousTrace?.variantQueries ?? [],\n\t\tpreviousVectorCount: previousTrace?.vectorCount,\n\t\tquery: caseResult.query,\n\t\tleadChannelAttributionCue,\n\t\tleadChannelCue,\n\t\tleadContinuityCue,\n\t\tleadSpeakerAttributionCue,\n\t\tleadSpeakerCue,\n\t\tsqliteQueryBackfillCount,\n\t\tsqliteQueryBackfillLimitReached,\n\t\tsqliteQueryMinResultsSatisfied,\n\t\tsqliteQueryCandidateBudgetExhausted,\n\t\tsqliteQueryCandidateCoverage,\n\t\tsqliteQueryFilteredCandidates,\n\t\tsqliteQueryFinalSearchK,\n\t\tsqliteQueryInitialSearchK,\n\t\tsqliteQuerySearchExpansionRatio,\n\t\tsqliteQueryMode,\n\t\tsqliteQueryPushdownMode,\n\t\tsqliteQueryPushdownApplied,\n\t\tsqliteQueryPushdownClauseCount,\n\t\tsqliteQueryTotalFilterClauseCount,\n\t\tsqliteQueryJsRemainderClauseCount,\n\t\tsqliteQueryMultiplierUsed,\n\t\tsqliteQueryCandidateLimitUsed,\n\t\tsqliteQueryMaxBackfillsUsed,\n\t\tsqliteQueryMinResultsUsed,\n\t\tsqliteQueryPushdownCoverageRatio,\n\t\tsqliteQueryJsRemainderRatio,\n\t\tsqliteQueryReturnedCount,\n\t\tsqliteQueryCandidateYieldRatio,\n\t\tsqliteQueryTopKFillRatio,\n\t\tsqliteQueryUnderfilledTopK,\n\t\tpostgresQueryBackfillCount,\n\t\tpostgresQueryBackfillLimitReached,\n\t\tpostgresQueryMinResultsSatisfied,\n\t\tpostgresQueryCandidateBudgetExhausted,\n\t\tpostgresQueryCandidateCoverage,\n\t\tpostgresQueryFilteredCandidates,\n\t\tpostgresQueryFinalSearchK,\n\t\tpostgresQueryInitialSearchK,\n\t\tpostgresQuerySearchExpansionRatio,\n\t\tpostgresQueryMode,\n\t\tpostgresQueryPushdownMode,\n\t\tpostgresQueryPushdownApplied,\n\t\tpostgresQueryPushdownClauseCount,\n\t\tpostgresQueryTotalFilterClauseCount,\n\t\tpostgresQueryJsRemainderClauseCount,\n\t\tpostgresQueryMultiplierUsed,\n\t\tpostgresQueryCandidateLimitUsed,\n\t\tpostgresQueryMaxBackfillsUsed,\n\t\tpostgresQueryMinResultsUsed,\n\t\tpostgresQueryPushdownCoverageRatio,\n\t\tpostgresQueryJsRemainderRatio,\n\t\tpostgresQueryReturnedCount,\n\t\tpostgresQueryCandidateYieldRatio,\n\t\tpostgresQueryTopKFillRatio,\n\t\tpostgresQueryUnderfilledTopK,\n\t\tsourceAwareChunkReasonLabel,\n\t\tsourceAwareUnitScopeLabel,\n\t\tstageCounts,\n\t\tstatus: caseResult.status,\n\t\tsourceBalanceStrategy: currentTrace?.sourceBalanceStrategy,\n\t\ttopContextLabel,\n\t\ttopLocatorLabel,\n\t\ttraceChange,\n\t\ttraceMode: currentTrace?.mode,\n\t\ttransformedQuery: currentTrace?.transformedQuery || undefined,\n\t\tvariantQueries: currentTrace?.variantQueries ?? [],\n\t\tvectorCount: currentTrace?.resultCounts.vector ?? 0\n\t};\n};\n\nconst buildEvaluationCaseTraceSnapshotsFromEvaluated = (\n\tevaluated: Array<{\n\t\tcaseResult: RAGEvaluationCaseResult;\n\t\ttrace?: RAGRetrievalTrace;\n\t\tfilter?: Record<string, unknown>;\n\t\tretrieval?: RAGCollectionSearchParams['retrieval'];\n\t\ttopResult?: RAGQueryResult;\n\t}>\n): RAGEvaluationCaseTraceSnapshot[] =>\n\tevaluated.map(({ caseResult, filter, retrieval, trace, topResult }) =>\n\t\tbuildEvaluationCaseTraceSnapshot({\n\t\t\tcaseResult,\n\t\t\tfilter,\n\t\t\tretrieval,\n\t\t\tcurrentTrace: trace,\n\t\t\ttopResult\n\t\t})\n\t);\n\nconst buildEvaluationCaseTraceSnapshots = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent?: RAGEvaluationSuiteRun;\n\tprevious?: RAGEvaluationSuiteRun;\n}): RAGEvaluationCaseTraceSnapshot[] => {\n\tif (!current) {\n\t\treturn [];\n\t}\n\n\tconst currentTraces = new Map(\n\t\t(current.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry])\n\t);\n\tconst previousTraces = new Map(\n\t\t(previous?.caseTraceSnapshots ?? []).map((entry) => [\n\t\t\tentry.caseId,\n\t\t\tentry\n\t\t])\n\t);\n\n\treturn current.response.cases.map((caseResult) =>\n\t\tbuildEvaluationCaseTraceSnapshot({\n\t\t\tcaseResult,\n\t\t\tcurrentSnapshot: currentTraces.get(caseResult.caseId),\n\t\t\tcurrentTrace: (() => {\n\t\t\t\tconst currentSnapshot = currentTraces.get(caseResult.caseId);\n\t\t\t\tif (!currentSnapshot) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcandidateTopK: currentSnapshot.candidateTopK,\n\t\t\t\t\tlexicalTopK: currentSnapshot.lexicalTopK,\n\t\t\t\t\tmode: currentSnapshot.traceMode ?? 'vector',\n\t\t\t\t\tquery: caseResult.query,\n\t\t\t\t\tresultCounts: {\n\t\t\t\t\t\tfinal: currentSnapshot.finalCount,\n\t\t\t\t\t\tfused: currentSnapshot.finalCount,\n\t\t\t\t\t\tlexical: currentSnapshot.lexicalCount,\n\t\t\t\t\t\treranked: currentSnapshot.finalCount,\n\t\t\t\t\t\tvector: currentSnapshot.vectorCount\n\t\t\t\t\t},\n\t\t\t\t\trunLexical: currentSnapshot.lexicalCount > 0,\n\t\t\t\t\trunVector: currentSnapshot.vectorCount > 0,\n\t\t\t\t\tsourceBalanceStrategy:\n\t\t\t\t\t\tcurrentSnapshot.sourceBalanceStrategy ?? 'cap',\n\t\t\t\t\tsteps: [],\n\t\t\t\t\ttopK: caseResult.topK,\n\t\t\t\t\ttransformedQuery:\n\t\t\t\t\t\tcurrentSnapshot.transformedQuery ?? caseResult.query,\n\t\t\t\t\tvariantQueries: currentSnapshot.variantQueries\n\t\t\t\t} satisfies RAGRetrievalTrace;\n\t\t\t})(),\n\t\t\tpreviousTrace: previousTraces.get(caseResult.caseId)\n\t\t})\n\t);\n};\n\nconst getStatusRank = (status: RAGEvaluationCaseResult['status']) =>\n\tstatus === 'pass' ? 2 : status === 'partial' ? 1 : 0;\n\nconst buildCaseTraceLeadLabel = (\n\ttrace?: Pick<\n\t\tRAGEvaluationCaseTraceSnapshot,\n\t\t| 'topLocatorLabel'\n\t\t| 'topContextLabel'\n\t\t| 'sourceAwareUnitScopeLabel'\n\t\t| 'sourceAwareChunkReasonLabel'\n\t>\n) =>\n\ttrace?.topLocatorLabel ??\n\ttrace?.topContextLabel ??\n\ttrace?.sourceAwareUnitScopeLabel ??\n\ttrace?.sourceAwareChunkReasonLabel;\n\nexport const buildRAGEvaluationRunDiff = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGEvaluationSuiteRun;\n\tprevious?: RAGEvaluationSuiteRun;\n}): RAGEvaluationRunDiff => {\n\tconst previousCases = new Map(\n\t\t(previous?.response.cases ?? []).map((entry) => [entry.caseId, entry])\n\t);\n\tconst diffs = current.response.cases.map((entry) =>\n\t\tbuildCaseDiff(entry, previousCases.get(entry.caseId))\n\t);\n\tconst regressedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) <\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\tconst improvedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) >\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\tconst unchangedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) ===\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\tconst previousCaseTraces = new Map(\n\t\t(previous?.caseTraceSnapshots ?? []).map((entry) => [\n\t\t\tentry.caseId,\n\t\t\tentry\n\t\t])\n\t);\n\tconst traceLeadChanges = (current.caseTraceSnapshots ?? [])\n\t\t.map((entry) => {\n\t\t\tconst previousEntry = previousCaseTraces.get(entry.caseId);\n\t\t\tconst currentLead = buildCaseTraceLeadLabel(entry);\n\t\t\tconst previousLead = buildCaseTraceLeadLabel(previousEntry);\n\t\t\tif (!currentLead || currentLead === previousLead) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcaseId: entry.caseId,\n\t\t\t\tcurrentLead,\n\t\t\t\tlabel: entry.label,\n\t\t\t\tpreviousLead\n\t\t\t};\n\t\t})\n\t\t.filter(\n\t\t\t(entry): entry is NonNullable<typeof entry> =>\n\t\t\t\ttypeof entry !== 'undefined'\n\t\t);\n\n\treturn {\n\t\tcurrentRunId: current.id,\n\t\timprovedCases,\n\t\tpreviousRunId: previous?.id,\n\t\tregressedCases,\n\t\tsuiteId: current.suiteId,\n\t\ttraceLeadChanges:\n\t\t\ttraceLeadChanges.length > 0 ? traceLeadChanges : undefined,\n\t\tsummaryDelta: {\n\t\t\taverageF1:\n\t\t\t\tcurrent.response.summary.averageF1 -\n\t\t\t\t(previous?.response.summary.averageF1 ?? 0),\n\t\t\taverageLatencyMs:\n\t\t\t\tcurrent.response.summary.averageLatencyMs -\n\t\t\t\t(previous?.response.summary.averageLatencyMs ?? 0),\n\t\t\tfailedCases:\n\t\t\t\tcurrent.response.summary.failedCases -\n\t\t\t\t(previous?.response.summary.failedCases ?? 0),\n\t\t\tpassedCases:\n\t\t\t\tcurrent.response.summary.passedCases -\n\t\t\t\t(previous?.response.summary.passedCases ?? 0),\n\t\t\tpassingRate:\n\t\t\t\tcurrent.response.passingRate -\n\t\t\t\t(previous?.response.passingRate ?? 0),\n\t\t\tpartialCases:\n\t\t\t\tcurrent.response.summary.partialCases -\n\t\t\t\t(previous?.response.summary.partialCases ?? 0)\n\t\t},\n\t\ttraceSummaryDelta:\n\t\t\tcurrent.traceSummary || previous?.traceSummary\n\t\t\t\t? {\n\t\t\t\t\t\taverageCandidateTopK:\n\t\t\t\t\t\t\t(current.traceSummary?.averageCandidateTopK ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.averageCandidateTopK ?? 0),\n\t\t\t\t\t\taverageFinalCount:\n\t\t\t\t\t\t\t(current.traceSummary?.averageFinalCount ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.averageFinalCount ?? 0),\n\t\t\t\t\t\taverageLexicalCount:\n\t\t\t\t\t\t\t(current.traceSummary?.averageLexicalCount ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.averageLexicalCount ?? 0),\n\t\t\t\t\t\taverageLexicalTopK:\n\t\t\t\t\t\t\t(current.traceSummary?.averageLexicalTopK ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.averageLexicalTopK ?? 0),\n\t\t\t\t\t\taverageVectorCount:\n\t\t\t\t\t\t\t(current.traceSummary?.averageVectorCount ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.averageVectorCount ?? 0),\n\t\t\t\t\t\tbalancedCases:\n\t\t\t\t\t\t\t(current.traceSummary?.balancedCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.balancedCases ?? 0),\n\t\t\t\t\t\tlexicalCases:\n\t\t\t\t\t\t\t(current.traceSummary?.lexicalCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.lexicalCases ?? 0),\n\t\t\t\t\t\tmodesChanged:\n\t\t\t\t\t\t\t(current.traceSummary?.modes ?? []).join('|') !==\n\t\t\t\t\t\t\t(previous?.traceSummary?.modes ?? []).join('|'),\n\t\t\t\t\t\troundRobinCases:\n\t\t\t\t\t\t\t(current.traceSummary?.roundRobinCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.roundRobinCases ?? 0),\n\t\t\t\t\t\tstageCounts: diffTraceStageCounts({\n\t\t\t\t\t\t\tcurrent: current.traceSummary?.stageCounts ?? {},\n\t\t\t\t\t\t\tprevious: previous?.traceSummary?.stageCounts ?? {}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tsourceBalanceStrategiesChanged:\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tcurrent.traceSummary?.sourceBalanceStrategies ??\n\t\t\t\t\t\t\t\t[]\n\t\t\t\t\t\t\t).join('|') !==\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tprevious?.traceSummary\n\t\t\t\t\t\t\t\t\t?.sourceBalanceStrategies ?? []\n\t\t\t\t\t\t\t).join('|'),\n\t\t\t\t\t\ttransformedCases:\n\t\t\t\t\t\t\t(current.traceSummary?.transformedCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.transformedCases ?? 0),\n\t\t\t\t\t\tvariantCases:\n\t\t\t\t\t\t\t(current.traceSummary?.variantCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.variantCases ?? 0),\n\t\t\t\t\t\tvectorCases:\n\t\t\t\t\t\t\t(current.traceSummary?.vectorCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.vectorCases ?? 0)\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\tunchangedCases\n\t};\n};\n\nexport const buildRAGAnswerGroundingEvaluationRunDiff = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGAnswerGroundingEvaluationRun;\n\tprevious?: RAGAnswerGroundingEvaluationRun;\n}): RAGAnswerGroundingEvaluationRunDiff => {\n\tconst previousCases = new Map(\n\t\t(previous?.response.cases ?? []).map((entry) => [entry.caseId, entry])\n\t);\n\tconst diffs = current.response.cases.map((entry) =>\n\t\tbuildGroundingCaseDiff(entry, previousCases.get(entry.caseId))\n\t);\n\tconst regressedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) <\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\tconst improvedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) >\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\tconst unchangedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) ===\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\n\treturn {\n\t\tcurrentRunId: current.id,\n\t\timprovedCases,\n\t\tpreviousRunId: previous?.id,\n\t\tregressedCases,\n\t\tsuiteId: current.suiteId,\n\t\tsummaryDelta: {\n\t\t\taverageCitationF1:\n\t\t\t\tcurrent.response.summary.averageCitationF1 -\n\t\t\t\t(previous?.response.summary.averageCitationF1 ?? 0),\n\t\t\taverageResolvedCitationRate:\n\t\t\t\tcurrent.response.summary.averageResolvedCitationRate -\n\t\t\t\t(previous?.response.summary.averageResolvedCitationRate ?? 0),\n\t\t\tfailedCases:\n\t\t\t\tcurrent.response.summary.failedCases -\n\t\t\t\t(previous?.response.summary.failedCases ?? 0),\n\t\t\tpassedCases:\n\t\t\t\tcurrent.response.summary.passedCases -\n\t\t\t\t(previous?.response.summary.passedCases ?? 0),\n\t\t\tpassingRate:\n\t\t\t\tcurrent.response.passingRate -\n\t\t\t\t(previous?.response.passingRate ?? 0),\n\t\t\tpartialCases:\n\t\t\t\tcurrent.response.summary.partialCases -\n\t\t\t\t(previous?.response.summary.partialCases ?? 0)\n\t\t},\n\t\tunchangedCases\n\t};\n};\n\nexport const createRAGFileEvaluationHistoryStore = (\n\tpath: string\n): RAGEvaluationHistoryStore => ({\n\tlistRuns: async ({ limit, suiteId } = {}) => {\n\t\tlet parsed: RAGEvaluationSuiteRun[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) => !suiteId || entry.suiteId === suiteId\n\t\t);\n\t\tconst sorted = normalizeHistoryRuns(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveRun: async (run) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeHistoryRuns([\n\t\t\trun,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGEvaluationSuiteRun) => entry.id !== run.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t},\n\tpruneRuns: async (input) => {\n\t\tlet existing: RAGEvaluationSuiteRun[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\texisting = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\tinput,\n\t\t\truns: existing,\n\t\t\tsort: normalizeHistoryRuns\n\t\t});\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(pruned.next, null, '\\t') + '\\n',\n\t\t\t'utf8'\n\t\t);\n\t\treturn {\n\t\t\tkeptCount: pruned.keptCount,\n\t\t\tremovedCount: pruned.removedCount\n\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t}\n});\n\nconst normalizeEvaluationSuiteSnapshots = (\n\tsnapshots: RAGEvaluationSuiteSnapshot[]\n) =>\n\t[...snapshots].sort((left, right) => {\n\t\tif (right.createdAt !== left.createdAt) {\n\t\t\treturn right.createdAt - left.createdAt;\n\t\t}\n\t\tif (right.version !== left.version) {\n\t\t\treturn right.version - left.version;\n\t\t}\n\t\treturn right.id.localeCompare(left.id);\n\t});\n\nexport const createRAGFileEvaluationSuiteSnapshotHistoryStore = (\n\tpath: string\n): RAGEvaluationSuiteSnapshotHistoryStore => ({\n\tlistSnapshots: async ({ limit, suiteId } = {}) => {\n\t\tlet parsed: RAGEvaluationSuiteSnapshot[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) => !suiteId || entry.suiteId === suiteId\n\t\t);\n\t\tconst sorted = normalizeEvaluationSuiteSnapshots(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveSnapshot: async (snapshot) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeEvaluationSuiteSnapshots([\n\t\t\tsnapshot,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGEvaluationSuiteSnapshot) => entry.id !== snapshot.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t},\n\tpruneSnapshots: async (input) => {\n\t\tlet existing: RAGEvaluationSuiteSnapshot[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\texisting = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\tinput,\n\t\t\truns: existing,\n\t\t\tsort: normalizeEvaluationSuiteSnapshots\n\t\t});\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(pruned.next, null, '\\t') + '\\n',\n\t\t\t'utf8'\n\t\t);\n\t\treturn {\n\t\t\tkeptCount: pruned.keptCount,\n\t\t\tremovedCount: pruned.removedCount\n\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t}\n});\n\nexport const createRAGFileRetrievalComparisonHistoryStore = (\n\tpath: string\n): RAGRetrievalComparisonHistoryStore => ({\n\tlistRuns: async ({\n\t\tgroupKey,\n\t\tlabel,\n\t\tlimit,\n\t\tsuiteId,\n\t\ttag,\n\t\twinnerId\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalComparisonRun[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst normalizedLabel = normalizeLabelFilter(label);\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!suiteId || entry.suiteId === suiteId) &&\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!tag || (entry.tags ?? []).includes(tag)) &&\n\t\t\t\t(!normalizedLabel ||\n\t\t\t\t\tentry.label.toLowerCase().includes(normalizedLabel) ||\n\t\t\t\t\tentry.suiteLabel.toLowerCase().includes(normalizedLabel)) &&\n\t\t\t\tmatchesWinner(entry, winnerId)\n\t\t);\n\t\tconst sorted = normalizeRetrievalComparisonRuns(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveRun: async (run) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalComparisonRuns([\n\t\t\trun,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGRetrievalComparisonRun) => entry.id !== run.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalBaselineStore = (\n\tpath: string\n): RAGRetrievalBaselineStore => {\n\tconst listBaselines: RAGRetrievalBaselineStore['listBaselines'] = async ({\n\t\tgroupKey,\n\t\tlimit,\n\t\ttag,\n\t\tstatus\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalBaselineRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!tag || (entry.tags ?? []).includes(tag)) &&\n\t\t\t\t(!status || entry.status === status)\n\t\t);\n\t\tconst sorted = normalizeRetrievalBaselineRecords(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t};\n\n\treturn {\n\t\tgetBaseline: async (groupKey) => {\n\t\t\tconst baselines = await Promise.resolve(\n\t\t\t\tlistBaselines({ groupKey, limit: 1 })\n\t\t\t);\n\t\t\treturn baselines[0] ?? null;\n\t\t},\n\t\tlistBaselines,\n\t\tsaveBaseline: async (record) => {\n\t\t\tconst existing = await (async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t})();\n\t\t\tconst currentVersion =\n\t\t\t\texisting\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(entry: RAGRetrievalBaselineRecord) =>\n\t\t\t\t\t\t\tentry.groupKey === record.groupKey\n\t\t\t\t\t)\n\t\t\t\t\t.reduce(\n\t\t\t\t\t\t(max, entry) => Math.max(max, entry.version ?? 0),\n\t\t\t\t\t\t0\n\t\t\t\t\t) ?? 0;\n\t\t\tconst next = normalizeRetrievalBaselineRecords([\n\t\t\t\t{\n\t\t\t\t\t...record,\n\t\t\t\t\tstatus: 'active',\n\t\t\t\t\tversion:\n\t\t\t\t\t\ttypeof record.version === 'number'\n\t\t\t\t\t\t\t? record.version\n\t\t\t\t\t\t\t: currentVersion + 1\n\t\t\t\t},\n\t\t\t\t...existing.map((entry: RAGRetrievalBaselineRecord) =>\n\t\t\t\t\tentry.groupKey === record.groupKey &&\n\t\t\t\t\t(entry.rolloutLabel ?? undefined) ===\n\t\t\t\t\t\t(record.rolloutLabel ?? undefined)\n\t\t\t\t\t\t? { ...entry, status: 'superseded' as const }\n\t\t\t\t\t\t: entry\n\t\t\t\t)\n\t\t\t]);\n\t\t\tawait mkdir(dirname(path), { recursive: true });\n\t\t\tawait writeFile(\n\t\t\t\tpath,\n\t\t\t\tJSON.stringify(next, null, '\\t') + '\\n',\n\t\t\t\t'utf8'\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGFileRetrievalReleaseDecisionStore = (\n\tpath: string\n): RAGRetrievalReleaseDecisionStore => ({\n\tlistDecisions: async ({ groupKey, kind, limit } = {}) => {\n\t\tlet parsed: RAGRetrievalReleaseDecisionRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!kind || entry.kind === kind)\n\t\t);\n\t\tconst sorted = normalizeRetrievalReleaseDecisionRecords(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveDecision: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalReleaseDecisionRecords([\n\t\t\trecord,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGRetrievalReleaseDecisionRecord) =>\n\t\t\t\t\tentry.id !== record.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalLaneHandoffDecisionStore = (\n\tpath: string\n): RAGRetrievalLaneHandoffDecisionStore => ({\n\tlistDecisions: async ({\n\t\tgroupKey,\n\t\tkind,\n\t\tlimit,\n\t\tsourceRolloutLabel,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalLaneHandoffDecisionRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!kind || entry.kind === kind) &&\n\t\t\t\t(!sourceRolloutLabel ||\n\t\t\t\t\tentry.sourceRolloutLabel === sourceRolloutLabel) &&\n\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t);\n\t\tconst sorted = normalizeRetrievalLaneHandoffDecisionRecords(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveDecision: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalLaneHandoffDecisionRecords([\n\t\t\trecord,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGRetrievalLaneHandoffDecisionRecord) =>\n\t\t\t\t\tentry.id !== record.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalReleaseIncidentStore = (\n\tpath: string\n): RAGRetrievalReleaseIncidentStore => ({\n\tlistIncidents: async ({\n\t\tcorpusGroupKey,\n\t\tgroupKey,\n\t\tlimit,\n\t\tseverity,\n\t\tstatus,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalReleaseIncidentRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!corpusGroupKey || entry.corpusGroupKey === corpusGroupKey) &&\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel) &&\n\t\t\t\t(!severity || entry.severity === severity) &&\n\t\t\t\t(!status || entry.status === status)\n\t\t);\n\t\tconst sorted = normalizeRetrievalReleaseIncidentRecords(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveIncident: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalReleaseIncidentRecords([\n\t\t\trecord,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGRetrievalReleaseIncidentRecord) =>\n\t\t\t\t\tentry.id !== record.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalLaneHandoffIncidentStore = (\n\tpath: string\n): RAGRetrievalLaneHandoffIncidentStore => ({\n\tlistIncidents: async ({\n\t\tgroupKey,\n\t\tlimit,\n\t\tseverity,\n\t\tstatus,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalLaneHandoffIncidentRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel) &&\n\t\t\t\t(!severity || entry.severity === severity) &&\n\t\t\t\t(!status || entry.status === status)\n\t\t);\n\t\tconst sorted = normalizeRetrievalReleaseIncidentRecords(\n\t\t\tfiltered as RAGRetrievalReleaseIncidentRecord[]\n\t\t) as RAGRetrievalLaneHandoffIncidentRecord[];\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveIncident: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalReleaseIncidentRecords([\n\t\t\trecord as RAGRetrievalReleaseIncidentRecord,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGRetrievalLaneHandoffIncidentRecord) =>\n\t\t\t\t\tentry.id !== record.id\n\t\t\t)\n\t\t]) as RAGRetrievalLaneHandoffIncidentRecord[];\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalLaneHandoffIncidentHistoryStore = (\n\tpath: string\n): RAGRetrievalLaneHandoffIncidentHistoryStore => ({\n\tlistRecords: async ({\n\t\taction,\n\t\tgroupKey,\n\t\tincidentId,\n\t\tlimit,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalLaneHandoffIncidentHistoryRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!action || entry.action === action) &&\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!incidentId || entry.incidentId === incidentId) &&\n\t\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t\t)\n\t\t\t.sort((left, right) => right.recordedAt - left.recordedAt);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = [record, ...existing].sort(\n\t\t\t(\n\t\t\t\tleft: RAGRetrievalLaneHandoffIncidentHistoryRecord,\n\t\t\t\tright: RAGRetrievalLaneHandoffIncidentHistoryRecord\n\t\t\t) => right.recordedAt - left.recordedAt\n\t\t);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalIncidentRemediationDecisionStore = (\n\tpath: string\n): RAGRetrievalIncidentRemediationDecisionStore => ({\n\tlistRecords: async ({\n\t\tgroupKey,\n\t\tincidentId,\n\t\tlimit,\n\t\tremediationKind,\n\t\tstatus,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalIncidentRemediationDecisionRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered = normalizeRetrievalIncidentRemediationDecisionRecords(\n\t\t\tparsed\n\t\t).filter(\n\t\t\t(entry) =>\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!incidentId || entry.incidentId === incidentId) &&\n\t\t\t\t(!remediationKind ||\n\t\t\t\t\tentry.remediationKind === remediationKind) &&\n\t\t\t\t(!status || entry.status === status) &&\n\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalIncidentRemediationDecisionRecords([\n\t\t\trecord,\n\t\t\t...existing\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalIncidentRemediationExecutionHistoryStore = (\n\tpath: string\n): RAGRetrievalIncidentRemediationExecutionHistoryStore => ({\n\tlistRecords: async ({\n\t\tactionKind,\n\t\tblockedByGuardrail,\n\t\tcode,\n\t\tgroupKey,\n\t\tidempotentReplay,\n\t\tincidentId,\n\t\tlimit,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalIncidentRemediationExecutionHistoryRecord[] =\n\t\t\t[];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered =\n\t\t\tnormalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n\t\t\t\tparsed\n\t\t\t).filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!incidentId || entry.incidentId === incidentId) &&\n\t\t\t\t\t(!actionKind || entry.action.kind === actionKind) &&\n\t\t\t\t\t(!code || entry.code === code) &&\n\t\t\t\t\t(typeof blockedByGuardrail !== 'boolean' ||\n\t\t\t\t\t\tentry.blockedByGuardrail === blockedByGuardrail) &&\n\t\t\t\t\t(typeof idempotentReplay !== 'boolean' ||\n\t\t\t\t\t\tentry.idempotentReplay === idempotentReplay) &&\n\t\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t\t);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next =\n\t\t\tnormalizeRetrievalIncidentRemediationExecutionHistoryRecords([\n\t\t\t\trecord,\n\t\t\t\t...existing\n\t\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalLaneHandoffAutoCompletePolicyHistoryStore = (\n\tpath: string\n): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore => ({\n\tlistRecords: async ({ groupKey, limit, targetRolloutLabel } = {}) => {\n\t\tlet parsed: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[] =\n\t\t\t[];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered = parsed\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t\t)\n\t\t\t.sort((left, right) => right.recordedAt - left.recordedAt);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = [record, ...existing].sort(\n\t\t\t(\n\t\t\t\tleft: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n\t\t\t\tright: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord\n\t\t\t) => right.recordedAt - left.recordedAt\n\t\t);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalReleaseLanePolicyHistoryStore = (\n\tpath: string\n): RAGRetrievalReleaseLanePolicyHistoryStore => ({\n\tlistRecords: async ({ groupKey, limit, rolloutLabel, scope } = {}) => {\n\t\tlet parsed: RAGRetrievalReleaseLanePolicyHistoryRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered = parsed\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!rolloutLabel || entry.rolloutLabel === rolloutLabel) &&\n\t\t\t\t\t(!scope || entry.scope === scope)\n\t\t\t)\n\t\t\t.sort((left, right) => right.recordedAt - left.recordedAt);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = [record, ...existing].sort(\n\t\t\t(\n\t\t\t\tleft: RAGRetrievalReleaseLanePolicyHistoryRecord,\n\t\t\t\tright: RAGRetrievalReleaseLanePolicyHistoryRecord\n\t\t\t) => right.recordedAt - left.recordedAt\n\t\t);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalBaselineGatePolicyHistoryStore = (\n\tpath: string\n): RAGRetrievalBaselineGatePolicyHistoryStore => ({\n\tlistRecords: async ({ groupKey, limit, rolloutLabel, scope } = {}) => {\n\t\tlet parsed: RAGRetrievalBaselineGatePolicyHistoryRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered = parsed\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!rolloutLabel || entry.rolloutLabel === rolloutLabel) &&\n\t\t\t\t\t(!scope || entry.scope === scope)\n\t\t\t)\n\t\t\t.sort((left, right) => right.recordedAt - left.recordedAt);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = [record, ...existing].sort(\n\t\t\t(\n\t\t\t\tleft: RAGRetrievalBaselineGatePolicyHistoryRecord,\n\t\t\t\tright: RAGRetrievalBaselineGatePolicyHistoryRecord\n\t\t\t) => right.recordedAt - left.recordedAt\n\t\t);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalReleaseLaneEscalationPolicyHistoryStore = (\n\tpath: string\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryStore => ({\n\tlistRecords: async ({ groupKey, limit, targetRolloutLabel } = {}) => {\n\t\tlet parsed: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered = parsed\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t\t)\n\t\t\t.sort((left, right) => right.recordedAt - left.recordedAt);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = [record, ...existing].sort(\n\t\t\t(\n\t\t\t\tleft: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n\t\t\t\tright: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord\n\t\t\t) => right.recordedAt - left.recordedAt\n\t\t);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileSearchTraceStore = (\n\tpath: string\n): RAGSearchTraceStore => ({\n\tasync listTraces(input) {\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\ttraces?: RAGSearchTraceRecord[];\n\t\t\t};\n\t\t\tconst traces = Array.isArray(data.traces) ? data.traces : [];\n\t\t\tconst filtered = traces.filter((trace) => {\n\t\t\t\tif (input?.query && trace.query !== input.query) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (input?.groupKey && trace.groupKey !== input.groupKey) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (input?.tag && !(trace.tags ?? []).includes(input.tag)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\treturn normalizeTraceSummaryRuns(filtered).slice(\n\t\t\t\t0,\n\t\t\t\tinput?.limit ?? DEFAULT_HISTORY_LIMIT\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror &&\n\t\t\t\ttypeof error === 'object' &&\n\t\t\t\t'code' in error &&\n\t\t\t\terror.code === 'ENOENT'\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t},\n\tasync saveTrace(trace) {\n\t\tlet traces: RAGSearchTraceRecord[] = [];\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\ttraces?: RAGSearchTraceRecord[];\n\t\t\t};\n\t\t\ttraces = Array.isArray(data.traces) ? data.traces : [];\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t!error ||\n\t\t\t\ttypeof error !== 'object' ||\n\t\t\t\t!('code' in error) ||\n\t\t\t\terror.code !== 'ENOENT'\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst nextTraces = normalizeTraceSummaryRuns([\n\t\t\ttrace,\n\t\t\t...traces.filter((entry) => entry.id !== trace.id)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\ttraces: nextTraces\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)\n\t\t);\n\t},\n\tasync pruneTraces(input) {\n\t\tlet traces: RAGSearchTraceRecord[] = [];\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\ttraces?: RAGSearchTraceRecord[];\n\t\t\t};\n\t\t\ttraces = Array.isArray(data.traces) ? data.traces : [];\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t!error ||\n\t\t\t\ttypeof error !== 'object' ||\n\t\t\t\t!('code' in error) ||\n\t\t\t\terror.code !== 'ENOENT'\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst pruned = applyRAGSearchTracePrunePolicy({\n\t\t\tinput,\n\t\t\ttraces\n\t\t});\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\ttraces: pruned.next\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)\n\t\t);\n\n\t\treturn {\n\t\t\tkeptCount: pruned.keptCount,\n\t\t\tremovedCount: pruned.removedCount\n\t\t};\n\t}\n});\n\nexport const createRAGFileSearchTracePruneHistoryStore = (\n\tpath: string\n): RAGSearchTracePruneHistoryStore => ({\n\tlistRuns: async (input) => {\n\t\tlet parsed: RAGSearchTracePruneRun[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) => !input?.trigger || entry.trigger === input.trigger\n\t\t);\n\t\tconst sorted = normalizeSearchTracePruneRuns(filtered);\n\t\treturn typeof input?.limit === 'number'\n\t\t\t? sorted.slice(0, input.limit)\n\t\t\t: sorted;\n\t},\n\tsaveRun: async (run) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeSearchTracePruneRuns([\n\t\t\trun,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGSearchTracePruneRun) => entry.id !== run.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport type SQLiteRAGSearchTraceStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGEvaluationHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGEvaluationSuiteSnapshotHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGAnswerGroundingEvaluationHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGSearchTracePruneHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalComparisonHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseDecisionStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalBaselineStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseIncidentStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffDecisionStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffIncidentStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffIncidentHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalIncidentRemediationDecisionStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalIncidentRemediationExecutionHistoryStoreOptions =\n\t{\n\t\tdb?: Database;\n\t\tpath?: string;\n\t\ttableName?: string;\n\t};\n\nexport type SQLiteRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStoreOptions =\n\t{\n\t\tdb?: Database;\n\t\tpath?: string;\n\t\ttableName?: string;\n\t};\n\nexport type SQLiteRAGRetrievalReleaseLanePolicyHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalBaselineGatePolicyHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseLaneEscalationPolicyHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGGovernanceStoreBundleOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttablePrefix?: string;\n};\n\nexport const createRAGSQLiteEvaluationHistoryStore = (\n\toptions: SQLiteRAGEvaluationHistoryStoreOptions\n): RAGEvaluationHistoryStore => {\n\tconst tableName = options.tableName ?? 'rag_evaluation_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`\n\t);\n\n\tconst 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\treturn {\n\t\tlistRuns(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\t\t\tif (input.suiteId) {\n\t\t\t\twhere.push('suite_id = ?');\n\t\t\t\tparams.push(input.suiteId);\n\t\t\t}\n\t\t\tconst sql =\n\t\t\t\t`SELECT record_json FROM ${tableName}` +\n\t\t\t\t`${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY finished_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params) as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst runs = normalizeHistoryRuns(\n\t\t\t\trows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(row.record_json) as RAGEvaluationSuiteRun\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? runs.slice(0, input.limit)\n\t\t\t\t: runs;\n\t\t},\n\t\tsaveRun(run) {\n\t\t\tinsert.run(\n\t\t\t\trun.id,\n\t\t\t\trun.suiteId,\n\t\t\t\trun.finishedAt,\n\t\t\t\tJSON.stringify(run)\n\t\t\t);\n\t\t},\n\t\tpruneRuns(input) {\n\t\t\tconst allRows = db\n\t\t\t\t.prepare(`SELECT record_json FROM ${tableName}`)\n\t\t\t\t.all() as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\t\tinput,\n\t\t\t\truns: allRows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(row.record_json) as RAGEvaluationSuiteRun\n\t\t\t\t),\n\t\t\t\tsort: normalizeHistoryRuns\n\t\t\t});\n\t\t\tfor (const run of pruned.removed) {\n\t\t\t\tdb.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(run.id);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkeptCount: pruned.keptCount,\n\t\t\t\tremovedCount: pruned.removedCount\n\t\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteEvaluationSuiteSnapshotHistoryStore = (\n\toptions: SQLiteRAGEvaluationSuiteSnapshotHistoryStoreOptions\n): RAGEvaluationSuiteSnapshotHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_evaluation_suite_snapshot_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_suite_created_at_idx ON ${tableName} (suite_id, created_at DESC, version DESC)`\n\t);\n\n\tconst 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\treturn {\n\t\tlistSnapshots(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\t\t\tif (input.suiteId) {\n\t\t\t\twhere.push('suite_id = ?');\n\t\t\t\tparams.push(input.suiteId);\n\t\t\t}\n\t\t\tconst sql =\n\t\t\t\t`SELECT record_json FROM ${tableName}` +\n\t\t\t\t`${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY created_at DESC, version DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params) as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst snapshots = normalizeEvaluationSuiteSnapshots(\n\t\t\t\trows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(\n\t\t\t\t\t\t\trow.record_json\n\t\t\t\t\t\t) as RAGEvaluationSuiteSnapshot\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? snapshots.slice(0, input.limit)\n\t\t\t\t: snapshots;\n\t\t},\n\t\tsaveSnapshot(snapshot) {\n\t\t\tinsert.run(\n\t\t\t\tsnapshot.id,\n\t\t\t\tsnapshot.suiteId,\n\t\t\t\tsnapshot.version,\n\t\t\t\tsnapshot.createdAt,\n\t\t\t\tJSON.stringify(snapshot)\n\t\t\t);\n\t\t},\n\t\tpruneSnapshots(input) {\n\t\t\tconst allRows = db\n\t\t\t\t.prepare(`SELECT record_json FROM ${tableName}`)\n\t\t\t\t.all() as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\t\tinput,\n\t\t\t\truns: allRows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(\n\t\t\t\t\t\t\trow.record_json\n\t\t\t\t\t\t) as RAGEvaluationSuiteSnapshot\n\t\t\t\t),\n\t\t\t\tsort: normalizeEvaluationSuiteSnapshots\n\t\t\t});\n\t\t\tfor (const snapshot of pruned.removed) {\n\t\t\t\tdb.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(\n\t\t\t\t\tsnapshot.id\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkeptCount: pruned.keptCount,\n\t\t\t\tremovedCount: pruned.removedCount\n\t\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteAnswerGroundingEvaluationHistoryStore = (\n\toptions: SQLiteRAGAnswerGroundingEvaluationHistoryStoreOptions\n): RAGAnswerGroundingEvaluationHistoryStore => {\n\tconst tableName = options.tableName ?? 'rag_answer_grounding_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`\n\t);\n\n\tconst 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\treturn {\n\t\tlistRuns(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\t\t\tif (input.suiteId) {\n\t\t\t\twhere.push('suite_id = ?');\n\t\t\t\tparams.push(input.suiteId);\n\t\t\t}\n\t\t\tconst sql =\n\t\t\t\t`SELECT record_json FROM ${tableName}` +\n\t\t\t\t`${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY finished_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params) as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst runs = normalizeGroundingHistoryRuns(\n\t\t\t\trows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(\n\t\t\t\t\t\t\trow.record_json\n\t\t\t\t\t\t) as RAGAnswerGroundingEvaluationRun\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? runs.slice(0, input.limit)\n\t\t\t\t: runs;\n\t\t},\n\t\tsaveRun(run) {\n\t\t\tinsert.run(\n\t\t\t\trun.id,\n\t\t\t\trun.suiteId,\n\t\t\t\trun.finishedAt,\n\t\t\t\tJSON.stringify(run)\n\t\t\t);\n\t\t},\n\t\tpruneRuns(input) {\n\t\t\tconst allRows = db\n\t\t\t\t.prepare(`SELECT record_json FROM ${tableName}`)\n\t\t\t\t.all() as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\t\tinput,\n\t\t\t\truns: allRows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(\n\t\t\t\t\t\t\trow.record_json\n\t\t\t\t\t\t) as RAGAnswerGroundingEvaluationRun\n\t\t\t\t),\n\t\t\t\tsort: normalizeGroundingHistoryRuns\n\t\t\t});\n\t\t\tfor (const run of pruned.removed) {\n\t\t\t\tdb.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(run.id);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkeptCount: pruned.keptCount,\n\t\t\t\tremovedCount: pruned.removedCount\n\t\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t\t}\n\t};\n};\n\ntype SQLiteSearchTraceRow = {\n\tid: string;\n\tquery: string;\n\tlabel: string;\n\tgroup_key: string | null;\n\ttags_json: string | null;\n\tstarted_at: number;\n\tfinished_at: number;\n\telapsed_ms: number;\n\ttrace_json: string;\n\tsummary_json: string;\n\tresults_json: string;\n\tmetadata_json: string | null;\n};\n\ntype SQLiteSearchTracePruneHistoryRow = {\n\tid: string;\n\ttrigger: string;\n\tstarted_at: number;\n\tfinished_at: number;\n\telapsed_ms: number;\n\trun_json: string;\n};\n\nconst isSQLiteSearchTraceRow = (\n\tvalue: unknown\n): value is SQLiteSearchTraceRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\ttypeof value.query === 'string' &&\n\ttypeof value.label === 'string' &&\n\t(typeof value.group_key === 'string' || value.group_key === null) &&\n\t(typeof value.tags_json === 'string' || value.tags_json === null) &&\n\ttypeof value.started_at === 'number' &&\n\ttypeof value.finished_at === 'number' &&\n\ttypeof value.elapsed_ms === 'number' &&\n\ttypeof value.trace_json === 'string' &&\n\ttypeof value.summary_json === 'string' &&\n\ttypeof value.results_json === 'string' &&\n\t(typeof value.metadata_json === 'string' || value.metadata_json === null);\n\nconst isSQLiteSearchTracePruneHistoryRow = (\n\tvalue: unknown\n): value is SQLiteSearchTracePruneHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\ttypeof value.trigger === 'string' &&\n\ttypeof value.started_at === 'number' &&\n\ttypeof value.finished_at === 'number' &&\n\ttypeof value.elapsed_ms === 'number' &&\n\ttypeof value.run_json === 'string';\n\ntype SQLiteRetrievalComparisonHistoryRow = {\n\tid: string;\n\tsuite_id: string;\n\tsuite_label: string;\n\tlabel: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string | null;\n\ttags_json: string | null;\n\tstarted_at: number;\n\tfinished_at: number;\n\telapsed_ms: number;\n\tcomparison_json: string;\n\tdecision_summary_json: string | null;\n};\n\nconst isSQLiteRetrievalComparisonHistoryRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalComparisonHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\ttypeof value.suite_id === 'string' &&\n\ttypeof value.suite_label === 'string' &&\n\ttypeof value.label === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\t(typeof value.group_key === 'string' || value.group_key === null) &&\n\t(typeof value.tags_json === 'string' || value.tags_json === null) &&\n\ttypeof value.started_at === 'number' &&\n\ttypeof value.finished_at === 'number' &&\n\ttypeof value.elapsed_ms === 'number' &&\n\ttypeof value.comparison_json === 'string' &&\n\t(typeof value.decision_summary_json === 'string' ||\n\t\tvalue.decision_summary_json === null);\n\ntype SQLiteRetrievalReleaseDecisionRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\tkind: string;\n\tdecided_at: number;\n\trecord_json: string;\n};\n\nconst isSQLiteRetrievalReleaseDecisionRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalReleaseDecisionRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\ttypeof value.kind === 'string' &&\n\ttypeof value.decided_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\ntype SQLiteRetrievalBaselineRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\trollout_label: string | null;\n\tpromoted_at: number;\n\tstatus: string;\n\tversion: number;\n\ttags_json: string | null;\n\trecord_json: string;\n};\n\nconst isSQLiteRetrievalBaselineRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalBaselineRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\t(typeof value.rollout_label === 'string' || value.rollout_label === null) &&\n\ttypeof value.promoted_at === 'number' &&\n\ttypeof value.status === 'string' &&\n\ttypeof value.version === 'number' &&\n\t(typeof value.tags_json === 'string' || value.tags_json === null) &&\n\ttypeof value.record_json === 'string';\n\ntype SQLiteRetrievalReleaseIncidentRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\ttarget_rollout_label: string | null;\n\tseverity: string;\n\tstatus: string;\n\ttriggered_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffDecisionRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\tsource_rollout_label: string;\n\ttarget_rollout_label: string;\n\tkind: string;\n\tdecided_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffIncidentRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\ttarget_rollout_label: string | null;\n\tsource_rollout_label: string | null;\n\tseverity: string;\n\tstatus: string;\n\ttriggered_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffIncidentHistoryRow = {\n\tid: string;\n\tincident_id: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\ttarget_rollout_label: string | null;\n\taction: string;\n\trecorded_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteRetrievalIncidentRemediationDecisionRow = {\n\tid: string;\n\tincident_id: string;\n\tgroup_key: string;\n\ttarget_rollout_label: string | null;\n\tremediation_kind: string;\n\tstatus: string;\n\tdecided_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteRetrievalIncidentRemediationExecutionHistoryRow = {\n\tid: string;\n\tincident_id: string | null;\n\tgroup_key: string | null;\n\ttarget_rollout_label: string | null;\n\taction_kind: string;\n\tcode: string;\n\tblocked_by_guardrail: number;\n\tidempotent_replay: number;\n\texecuted_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteLaneHandoffAutoCompletePolicyHistoryRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\ttarget_rollout_label: string;\n\trecorded_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteReleaseLanePolicyHistoryRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string | null;\n\trollout_label: string;\n\tscope: string;\n\trecorded_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteBaselineGatePolicyHistoryRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string | null;\n\trollout_label: string;\n\tscope: string;\n\trecorded_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteReleaseLaneEscalationPolicyHistoryRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\ttarget_rollout_label: string;\n\trecorded_at: number;\n\trecord_json: string;\n};\n\nconst isSQLiteRetrievalReleaseIncidentRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalReleaseIncidentRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\t(typeof value.target_rollout_label === 'string' ||\n\t\tvalue.target_rollout_label === null) &&\n\ttypeof value.severity === 'string' &&\n\ttypeof value.status === 'string' &&\n\ttypeof value.triggered_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteRetrievalLaneHandoffDecisionRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalLaneHandoffDecisionRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\ttypeof value.source_rollout_label === 'string' &&\n\ttypeof value.target_rollout_label === 'string' &&\n\ttypeof value.kind === 'string' &&\n\ttypeof value.decided_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteRetrievalLaneHandoffIncidentRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalLaneHandoffIncidentRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\t(typeof value.target_rollout_label === 'string' ||\n\t\tvalue.target_rollout_label === null) &&\n\t(typeof value.source_rollout_label === 'string' ||\n\t\tvalue.source_rollout_label === null) &&\n\ttypeof value.severity === 'string' &&\n\ttypeof value.status === 'string' &&\n\ttypeof value.triggered_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteRetrievalLaneHandoffIncidentHistoryRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalLaneHandoffIncidentHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\ttypeof value.incident_id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\t(typeof value.target_rollout_label === 'string' ||\n\t\tvalue.target_rollout_label === null) &&\n\ttypeof value.action === 'string' &&\n\ttypeof value.recorded_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteRetrievalIncidentRemediationDecisionRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalIncidentRemediationDecisionRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\ttypeof value.incident_id === 'string' &&\n\ttypeof value.group_key === 'string' &&\n\t(typeof value.target_rollout_label === 'string' ||\n\t\tvalue.target_rollout_label === null) &&\n\ttypeof value.remediation_kind === 'string' &&\n\ttypeof value.status === 'string' &&\n\ttypeof value.decided_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteRetrievalIncidentRemediationExecutionHistoryRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalIncidentRemediationExecutionHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.incident_id === 'string' || value.incident_id === null) &&\n\t(typeof value.group_key === 'string' || value.group_key === null) &&\n\t(typeof value.target_rollout_label === 'string' ||\n\t\tvalue.target_rollout_label === null) &&\n\ttypeof value.action_kind === 'string' &&\n\ttypeof value.code === 'string' &&\n\ttypeof value.blocked_by_guardrail === 'number' &&\n\ttypeof value.idempotent_replay === 'number' &&\n\ttypeof value.executed_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteLaneHandoffAutoCompletePolicyHistoryRow = (\n\tvalue: unknown\n): value is SQLiteLaneHandoffAutoCompletePolicyHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\ttypeof value.target_rollout_label === 'string' &&\n\ttypeof value.recorded_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteReleaseLanePolicyHistoryRow = (\n\tvalue: unknown\n): value is SQLiteReleaseLanePolicyHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\t(typeof value.group_key === 'string' || value.group_key === null) &&\n\ttypeof value.rollout_label === 'string' &&\n\ttypeof value.scope === 'string' &&\n\ttypeof value.recorded_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteBaselineGatePolicyHistoryRow = (\n\tvalue: unknown\n): value is SQLiteBaselineGatePolicyHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\t(typeof value.group_key === 'string' || value.group_key === null) &&\n\ttypeof value.rollout_label === 'string' &&\n\ttypeof value.scope === 'string' &&\n\ttypeof value.recorded_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteReleaseLaneEscalationPolicyHistoryRow = (\n\tvalue: unknown\n): value is SQLiteReleaseLaneEscalationPolicyHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\ttypeof value.target_rollout_label === 'string' &&\n\ttypeof value.recorded_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst assertSupportedIdentifier = (name: string) => {\n\tif (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n\t\tthrow new Error(\n\t\t\t`Invalid SQLite search trace table name \"${name}\". Only alphanumeric and underscore names are allowed.`\n\t\t);\n\t}\n};\n\nconst ensureSQLiteColumns = (\n\tdb: Database,\n\ttableName: string,\n\tcolumns: Array<{ name: string; definition: string }>\n) => {\n\tconst pragma = db.prepare(`PRAGMA table_info(${tableName})`).all();\n\tconst existing = new Set(\n\t\tArray.isArray(pragma)\n\t\t\t? pragma\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(row): row is { name?: unknown } =>\n\t\t\t\t\t\t\tisObjectRecord(row) && 'name' in row\n\t\t\t\t\t)\n\t\t\t\t\t.map((row) =>\n\t\t\t\t\t\ttypeof row.name === 'string' ? row.name : undefined\n\t\t\t\t\t)\n\t\t\t\t\t.filter((name): name is string => typeof name === 'string')\n\t\t\t: []\n\t);\n\n\tfor (const column of columns) {\n\t\tif (existing.has(column.name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tdb.exec(\n\t\t\t`ALTER TABLE ${tableName} ADD COLUMN ${column.name} ${column.definition}`\n\t\t);\n\t}\n};\n\nconst getMissingSQLiteColumns = (\n\tdb: Database,\n\ttableName: string,\n\tcolumns: Array<{ name: string; definition: string }>\n): RAGSQLiteStoreMigrationIssue[] => {\n\tconst pragma = db.prepare(`PRAGMA table_info(${tableName})`).all();\n\tconst existing = new Set(\n\t\tArray.isArray(pragma)\n\t\t\t? pragma\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(row): row is { name?: unknown } =>\n\t\t\t\t\t\t\tisObjectRecord(row) && 'name' in row\n\t\t\t\t\t)\n\t\t\t\t\t.map((row) =>\n\t\t\t\t\t\ttypeof row.name === 'string' ? row.name : undefined\n\t\t\t\t\t)\n\t\t\t\t\t.filter((name): name is string => typeof name === 'string')\n\t\t\t: []\n\t);\n\n\treturn columns\n\t\t.filter((column) => !existing.has(column.name))\n\t\t.map((column) => ({\n\t\t\tcolumnName: column.name,\n\t\t\tdefinition: column.definition,\n\t\t\ttableName\n\t\t}));\n};\n\ntype SQLiteStoreMigrationDescriptor = {\n\ttableName: string;\n\tcolumns: Array<{ name: string; definition: string }>;\n};\n\nconst getDefaultSQLiteStoreMigrationDescriptors =\n\t(): SQLiteStoreMigrationDescriptor[] => [\n\t\t{\n\t\t\ttableName: DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME,\n\t\t\tcolumns: [{ definition: 'TEXT', name: 'corpus_group_key' }]\n\t\t},\n\t\t{\n\t\t\ttableName: DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME,\n\t\t\tcolumns: [{ definition: 'TEXT', name: 'corpus_group_key' }]\n\t\t},\n\t\t{\n\t\t\ttableName: DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME,\n\t\t\tcolumns: [\n\t\t\t\t{ definition: 'TEXT', name: 'group_key' },\n\t\t\t\t{ definition: 'TEXT', name: 'corpus_group_key' }\n\t\t\t]\n\t\t}\n\t];\n\nconst summarizeSQLiteStoreMigrationIssues = (\n\tissues: RAGSQLiteStoreMigrationIssue[]\n) =>\n\tissues.length > 0\n\t\t? `${issues.length} SQLite schema migration issue${issues.length === 1 ? '' : 's'} detected`\n\t\t: undefined;\n\nexport type SQLiteRAGStoreMigrationOptions = {\n\tdb?: Database;\n\tpath?: string;\n\tdescriptors?: SQLiteStoreMigrationDescriptor[];\n};\n\nexport const inspectRAGSQLiteStoreMigrations = (\n\toptions: SQLiteRAGStoreMigrationOptions = {}\n): RAGSQLiteStoreMigrationInspection => {\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\tconst descriptors =\n\t\toptions.descriptors ?? getDefaultSQLiteStoreMigrationDescriptors();\n\tconst issues = descriptors.flatMap((descriptor) =>\n\t\tgetMissingSQLiteColumns(db, descriptor.tableName, descriptor.columns)\n\t);\n\n\treturn {\n\t\tissues,\n\t\tsummary: summarizeSQLiteStoreMigrationIssues(issues)\n\t};\n};\n\nexport const applyRAGSQLiteStoreMigrations = (\n\toptions: SQLiteRAGStoreMigrationOptions = {}\n): RAGSQLiteStoreMigrationResult => {\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\tconst descriptors =\n\t\toptions.descriptors ?? getDefaultSQLiteStoreMigrationDescriptors();\n\tconst inspection = inspectRAGSQLiteStoreMigrations({\n\t\tdb,\n\t\tdescriptors\n\t});\n\n\tfor (const descriptor of descriptors) {\n\t\tensureSQLiteColumns(db, descriptor.tableName, descriptor.columns);\n\t}\n\n\treturn {\n\t\t...inspection,\n\t\tapplied: inspection.issues\n\t};\n};\n\nconst mapSQLiteSearchTraceRow = (\n\trow: SQLiteSearchTraceRow\n): RAGSearchTraceRecord => ({\n\telapsedMs: row.elapsed_ms,\n\tfinishedAt: row.finished_at,\n\tgroupKey: row.group_key ?? undefined,\n\tid: row.id,\n\tlabel: row.label,\n\tmetadata: parseJSONRecord(row.metadata_json),\n\tquery: row.query,\n\tresults: parseJSONArray(row.results_json, []),\n\tstartedAt: row.started_at,\n\tsummary: JSON.parse(row.summary_json),\n\ttags: normalizeStringArray(parseJSONArray(row.tags_json, [])),\n\ttrace: JSON.parse(row.trace_json)\n});\n\nconst mapSQLiteSearchTracePruneHistoryRow = (\n\trow: SQLiteSearchTracePruneHistoryRow\n): RAGSearchTracePruneRun => JSON.parse(row.run_json);\n\nconst mapSQLiteRetrievalComparisonHistoryRow = (\n\trow: SQLiteRetrievalComparisonHistoryRow\n): RAGRetrievalComparisonRun => ({\n\tcomparison: JSON.parse(row.comparison_json),\n\tcorpusGroupKey: row.corpus_group_key ?? undefined,\n\tdecisionSummary: row.decision_summary_json\n\t\t? JSON.parse(row.decision_summary_json)\n\t\t: undefined,\n\telapsedMs: row.elapsed_ms,\n\tfinishedAt: row.finished_at,\n\tgroupKey: row.group_key ?? undefined,\n\tid: row.id,\n\tlabel: row.label,\n\tstartedAt: row.started_at,\n\tsuiteId: row.suite_id,\n\tsuiteLabel: row.suite_label,\n\ttags: normalizeStringArray(parseJSONArray(row.tags_json, []))\n});\n\nconst mapSQLiteRetrievalReleaseDecisionRow = (\n\trow: SQLiteRetrievalReleaseDecisionRow\n): RAGRetrievalReleaseDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalBaselineRow = (\n\trow: SQLiteRetrievalBaselineRow\n): RAGRetrievalBaselineRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalReleaseIncidentRow = (\n\trow: SQLiteRetrievalReleaseIncidentRow\n): RAGRetrievalReleaseIncidentRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffDecisionRow = (\n\trow: SQLiteRetrievalLaneHandoffDecisionRow\n): RAGRetrievalLaneHandoffDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffIncidentRow = (\n\trow: SQLiteRetrievalLaneHandoffIncidentRow\n): RAGRetrievalLaneHandoffIncidentRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffIncidentHistoryRow = (\n\trow: SQLiteRetrievalLaneHandoffIncidentHistoryRow\n): RAGRetrievalLaneHandoffIncidentHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalIncidentRemediationDecisionRow = (\n\trow: SQLiteRetrievalIncidentRemediationDecisionRow\n): RAGRetrievalIncidentRemediationDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalIncidentRemediationExecutionHistoryRow = (\n\trow: SQLiteRetrievalIncidentRemediationExecutionHistoryRow\n): RAGRetrievalIncidentRemediationExecutionHistoryRecord =>\n\tJSON.parse(row.record_json);\n\nconst mapSQLiteLaneHandoffAutoCompletePolicyHistoryRow = (\n\trow: SQLiteLaneHandoffAutoCompletePolicyHistoryRow\n): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord =>\n\tJSON.parse(row.record_json);\n\nconst mapSQLiteReleaseLanePolicyHistoryRow = (\n\trow: SQLiteReleaseLanePolicyHistoryRow\n): RAGRetrievalReleaseLanePolicyHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteBaselineGatePolicyHistoryRow = (\n\trow: SQLiteBaselineGatePolicyHistoryRow\n): RAGRetrievalBaselineGatePolicyHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteReleaseLaneEscalationPolicyHistoryRow = (\n\trow: SQLiteReleaseLaneEscalationPolicyHistoryRow\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord =>\n\tJSON.parse(row.record_json);\n\nexport const createRAGSQLiteSearchTraceStore = (\n\toptions: SQLiteRAGSearchTraceStoreOptions\n): RAGSearchTraceStore => {\n\tconst tableName = options.tableName ?? DEFAULT_SEARCH_TRACE_TABLE_NAME;\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_query_finished_at_idx ON ${tableName} (query, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_finished_at_idx ON ${tableName} (group_key, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`\n\t);\n\n\tconst 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\tconst 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\tconst remove = db.prepare(`DELETE FROM ${tableName} WHERE id = ?`);\n\n\treturn {\n\t\tlistTraces(input) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input?.query) {\n\t\t\t\twhere.push('query = ?');\n\t\t\t\tparams.push(input.query);\n\t\t\t}\n\n\t\t\tif (input?.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY finished_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst traces = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteSearchTraceRow)\n\t\t\t\t\t\t.map(mapSQLiteSearchTraceRow)\n\t\t\t\t: [];\n\t\t\tconst filtered = input?.tag\n\t\t\t\t? traces.filter((trace) =>\n\t\t\t\t\t\t(trace.tags ?? []).includes(input.tag as string)\n\t\t\t\t\t)\n\t\t\t\t: traces;\n\n\t\t\treturn normalizeTraceSummaryRuns(filtered).slice(\n\t\t\t\t0,\n\t\t\t\tinput?.limit ?? DEFAULT_HISTORY_LIMIT\n\t\t\t);\n\t\t},\n\t\tsaveTrace(trace) {\n\t\t\tinsert.run(\n\t\t\t\ttrace.id,\n\t\t\t\ttrace.query,\n\t\t\t\ttrace.label,\n\t\t\t\ttrace.groupKey ?? null,\n\t\t\t\tJSON.stringify(trace.tags ?? []),\n\t\t\t\ttrace.startedAt,\n\t\t\t\ttrace.finishedAt,\n\t\t\t\ttrace.elapsedMs,\n\t\t\t\tJSON.stringify(trace.trace),\n\t\t\t\tJSON.stringify(trace.summary),\n\t\t\t\tJSON.stringify(trace.results),\n\t\t\t\ttrace.metadata === undefined\n\t\t\t\t\t? null\n\t\t\t\t\t: JSON.stringify(trace.metadata)\n\t\t\t);\n\t\t},\n\t\tpruneTraces(input) {\n\t\t\tconst rows = db\n\t\t\t\t.prepare(`${listBase} ORDER BY finished_at DESC`)\n\t\t\t\t.all();\n\t\t\tconst traces = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteSearchTraceRow)\n\t\t\t\t\t\t.map(mapSQLiteSearchTraceRow)\n\t\t\t\t: [];\n\t\t\tconst pruned = applyRAGSearchTracePrunePolicy({\n\t\t\t\tinput,\n\t\t\t\ttraces\n\t\t\t});\n\n\t\t\tfor (const trace of pruned.removed) {\n\t\t\t\tremove.run(trace.id);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tkeptCount: pruned.keptCount,\n\t\t\t\tremovedCount: pruned.removedCount\n\t\t\t};\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteSearchTracePruneHistoryStore = (\n\toptions: SQLiteRAGSearchTracePruneHistoryStoreOptions\n): RAGSearchTracePruneHistoryStore => {\n\tconst tableName = options.tableName ?? 'rag_search_trace_prune_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_trigger_finished_at_idx ON ${tableName} (trigger, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRuns(input) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input?.trigger) {\n\t\t\t\twhere.push('trigger = ?');\n\t\t\t\tparams.push(input.trigger);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY finished_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst runs = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteSearchTracePruneHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteSearchTracePruneHistoryRow)\n\t\t\t\t: [];\n\t\t\tconst sorted = normalizeSearchTracePruneRuns(runs);\n\t\t\treturn typeof input?.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveRun(run) {\n\t\t\tinsert.run(\n\t\t\t\trun.id,\n\t\t\t\trun.trigger,\n\t\t\t\trun.startedAt,\n\t\t\t\trun.finishedAt,\n\t\t\t\trun.elapsedMs,\n\t\t\t\tJSON.stringify(run)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalComparisonHistoryStore = (\n\toptions: SQLiteRAGRetrievalComparisonHistoryStoreOptions\n): RAGRetrievalComparisonHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ?? DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME;\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tensureSQLiteColumns(db, tableName, [\n\t\t{ definition: 'TEXT', name: 'corpus_group_key' }\n\t]);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_finished_at_idx ON ${tableName} (group_key, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_finished_at_idx ON ${tableName} (corpus_group_key, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRuns(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.suiteId) {\n\t\t\t\twhere.push('suite_id = ?');\n\t\t\t\tparams.push(input.suiteId);\n\t\t\t}\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY finished_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst runs = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalComparisonHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalComparisonHistoryRow)\n\t\t\t\t: [];\n\t\t\tconst normalizedLabel = normalizeLabelFilter(input.label);\n\t\t\tconst filtered = normalizeRetrievalComparisonRuns(\n\t\t\t\truns.filter(\n\t\t\t\t\t(entry) =>\n\t\t\t\t\t\t(!input.tag ||\n\t\t\t\t\t\t\t(entry.tags ?? []).includes(input.tag)) &&\n\t\t\t\t\t\t(!normalizedLabel ||\n\t\t\t\t\t\t\tentry.label\n\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t.includes(normalizedLabel) ||\n\t\t\t\t\t\t\tentry.suiteLabel\n\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t.includes(normalizedLabel)) &&\n\t\t\t\t\t\tmatchesWinner(entry, input.winnerId)\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? filtered.slice(0, input.limit)\n\t\t\t\t: filtered;\n\t\t},\n\t\tsaveRun(run) {\n\t\t\tinsert.run(\n\t\t\t\trun.id,\n\t\t\t\trun.suiteId,\n\t\t\t\trun.suiteLabel,\n\t\t\t\trun.label,\n\t\t\t\trun.corpusGroupKey ?? null,\n\t\t\t\trun.groupKey ?? null,\n\t\t\t\tJSON.stringify(run.tags ?? []),\n\t\t\t\trun.startedAt,\n\t\t\t\trun.finishedAt,\n\t\t\t\trun.elapsedMs,\n\t\t\t\tJSON.stringify(run.comparison),\n\t\t\t\trun.decisionSummary === undefined\n\t\t\t\t\t? null\n\t\t\t\t\t: JSON.stringify(run.decisionSummary)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalReleaseDecisionStore = (\n\toptions: SQLiteRAGRetrievalReleaseDecisionStoreOptions\n): RAGRetrievalReleaseDecisionStore => {\n\tconst tableName =\n\t\toptions.tableName ?? DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME;\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tensureSQLiteColumns(db, tableName, [\n\t\t{ definition: 'TEXT', name: 'corpus_group_key' }\n\t]);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_decided_at_idx ON ${tableName} (corpus_group_key, decided_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_kind_decided_at_idx ON ${tableName} (kind, decided_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistDecisions(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.kind) {\n\t\t\t\twhere.push('kind = ?');\n\t\t\t\tparams.push(input.kind);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY decided_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst decisions = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalReleaseDecisionRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalReleaseDecisionRow)\n\t\t\t\t: [];\n\t\t\tconst sorted = normalizeRetrievalReleaseDecisionRecords(decisions);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveDecision(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.kind,\n\t\t\t\trecord.decidedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalBaselineStore = (\n\toptions: SQLiteRAGRetrievalBaselineStoreOptions\n): RAGRetrievalBaselineStore => {\n\tconst tableName =\n\t\toptions.tableName ?? DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME;\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tensureSQLiteColumns(db, tableName, [\n\t\t{ definition: 'TEXT', name: 'corpus_group_key' }\n\t]);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_promoted_at_idx ON ${tableName} (group_key, promoted_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_promoted_at_idx ON ${tableName} (corpus_group_key, promoted_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_rollout_status_idx ON ${tableName} (group_key, rollout_label, status)`\n\t);\n\n\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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\tconst listBaselinesSync = (\n\t\tinput: Parameters<RAGRetrievalBaselineStore['listBaselines']>[0] = {}\n\t): RAGRetrievalBaselineRecord[] => {\n\t\tconst where: string[] = [];\n\t\tconst params: Array<string | number> = [];\n\n\t\tif (input.corpusGroupKey) {\n\t\t\twhere.push('corpus_group_key = ?');\n\t\t\tparams.push(input.corpusGroupKey);\n\t\t}\n\n\t\tif (input.groupKey) {\n\t\t\twhere.push('group_key = ?');\n\t\t\tparams.push(input.groupKey);\n\t\t}\n\n\t\tif (input.status) {\n\t\t\twhere.push('status = ?');\n\t\t\tparams.push(input.status);\n\t\t}\n\n\t\tconst sql =\n\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t'ORDER BY promoted_at DESC';\n\t\tconst rows = db.prepare(sql).all(...params);\n\t\tconst baselines = Array.isArray(rows)\n\t\t\t? rows\n\t\t\t\t\t.filter(isSQLiteRetrievalBaselineRow)\n\t\t\t\t\t.map(mapSQLiteRetrievalBaselineRow)\n\t\t\t: [];\n\t\tconst tag = typeof input.tag === 'string' ? input.tag : undefined;\n\t\tconst filtered = tag\n\t\t\t? baselines.filter((entry) => (entry.tags ?? []).includes(tag))\n\t\t\t: baselines;\n\t\tconst sorted = normalizeRetrievalBaselineRecords(filtered);\n\n\t\treturn typeof input.limit === 'number'\n\t\t\t? sorted.slice(0, input.limit)\n\t\t\t: sorted;\n\t};\n\n\treturn {\n\t\tgetBaseline(groupKey) {\n\t\t\tconst baselines = listBaselinesSync({ groupKey, limit: 1 });\n\t\t\treturn Promise.resolve(baselines[0] ?? null);\n\t\t},\n\t\tlistBaselines(input) {\n\t\t\treturn Promise.resolve(listBaselinesSync(input));\n\t\t},\n\t\tsaveBaseline(record) {\n\t\t\tconst versionRow = currentVersion.get(record.groupKey) as\n\t\t\t\t| { max_version?: number }\n\t\t\t\t| undefined;\n\t\t\tconst nextVersion =\n\t\t\t\ttypeof record.version === 'number'\n\t\t\t\t\t? record.version\n\t\t\t\t\t: (versionRow?.max_version ?? 0) + 1;\n\t\t\tconst nextRecord: RAGRetrievalBaselineRecord = {\n\t\t\t\t...record,\n\t\t\t\tstatus: 'active',\n\t\t\t\tversion: nextVersion\n\t\t\t};\n\n\t\t\tconst rows = matchingRolloutRows.all(\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.rolloutLabel ?? null,\n\t\t\t\trecord.rolloutLabel ?? null\n\t\t\t);\n\t\t\tconst existing = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalBaselineRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalBaselineRow)\n\t\t\t\t: [];\n\n\t\t\tfor (const entry of existing) {\n\t\t\t\tupdateExisting.run(\n\t\t\t\t\t'superseded',\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstatus: 'superseded'\n\t\t\t\t\t}),\n\t\t\t\t\tentry.id\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tinsert.run(\n\t\t\t\tnextRecord.id,\n\t\t\t\tnextRecord.corpusGroupKey ?? null,\n\t\t\t\tnextRecord.groupKey,\n\t\t\t\tnextRecord.rolloutLabel ?? null,\n\t\t\t\tnextRecord.promotedAt,\n\t\t\t\tnextRecord.status,\n\t\t\t\tnextRecord.version,\n\t\t\t\tJSON.stringify(nextRecord.tags ?? []),\n\t\t\t\tJSON.stringify(nextRecord)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalReleaseIncidentStore = (\n\toptions: SQLiteRAGRetrievalReleaseIncidentStoreOptions\n): RAGRetrievalReleaseIncidentStore => {\n\tconst tableName =\n\t\toptions.tableName ?? DEFAULT_RETRIEVAL_RELEASE_INCIDENT_TABLE_NAME;\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_triggered_at_idx ON ${tableName} (group_key, triggered_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_status_idx ON ${tableName} (corpus_group_key, status, triggered_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistIncidents(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tif (input.severity) {\n\t\t\t\twhere.push('severity = ?');\n\t\t\t\tparams.push(input.severity);\n\t\t\t}\n\n\t\t\tif (input.status) {\n\t\t\t\twhere.push('status = ?');\n\t\t\t\tparams.push(input.status);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY triggered_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst incidents = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalReleaseIncidentRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalReleaseIncidentRow)\n\t\t\t\t: [];\n\t\t\tconst sorted = normalizeRetrievalReleaseIncidentRecords(incidents);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveIncident(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.targetRolloutLabel ?? null,\n\t\t\t\trecord.severity,\n\t\t\t\trecord.status,\n\t\t\t\trecord.triggeredAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffDecisionStore = (\n\toptions: SQLiteRAGRetrievalLaneHandoffDecisionStoreOptions\n): RAGRetrievalLaneHandoffDecisionStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_lane_handoff_decisions';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_rollout_idx ON ${tableName} (corpus_group_key, source_rollout_label, target_rollout_label, decided_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistDecisions(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.kind) {\n\t\t\t\twhere.push('kind = ?');\n\t\t\t\tparams.push(input.kind);\n\t\t\t}\n\n\t\t\tif (input.sourceRolloutLabel) {\n\t\t\t\twhere.push('source_rollout_label = ?');\n\t\t\t\tparams.push(input.sourceRolloutLabel);\n\t\t\t}\n\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY decided_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst decisions = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalLaneHandoffDecisionRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalLaneHandoffDecisionRow)\n\t\t\t\t: [];\n\t\t\tconst sorted =\n\t\t\t\tnormalizeRetrievalLaneHandoffDecisionRecords(decisions);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveDecision(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.sourceRolloutLabel,\n\t\t\t\trecord.targetRolloutLabel,\n\t\t\t\trecord.kind,\n\t\t\t\trecord.decidedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffIncidentStore = (\n\toptions: SQLiteRAGRetrievalLaneHandoffIncidentStoreOptions\n): RAGRetrievalLaneHandoffIncidentStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_lane_handoff_incidents';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_triggered_at_idx ON ${tableName} (group_key, triggered_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_status_idx ON ${tableName} (corpus_group_key, status, triggered_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistIncidents(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tif (input.severity) {\n\t\t\t\twhere.push('severity = ?');\n\t\t\t\tparams.push(input.severity);\n\t\t\t}\n\n\t\t\tif (input.status) {\n\t\t\t\twhere.push('status = ?');\n\t\t\t\tparams.push(input.status);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY triggered_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst incidents = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalLaneHandoffIncidentRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalLaneHandoffIncidentRow)\n\t\t\t\t: [];\n\t\t\tconst sorted = normalizeRetrievalReleaseIncidentRecords(\n\t\t\t\tincidents as RAGRetrievalReleaseIncidentRecord[]\n\t\t\t) as RAGRetrievalLaneHandoffIncidentRecord[];\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveIncident(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.targetRolloutLabel ?? null,\n\t\t\t\trecord.sourceRolloutLabel ?? null,\n\t\t\t\trecord.severity,\n\t\t\t\trecord.status,\n\t\t\t\trecord.triggeredAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffIncidentHistoryStore = (\n\toptions: SQLiteRAGRetrievalLaneHandoffIncidentHistoryStoreOptions\n): RAGRetrievalLaneHandoffIncidentHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_lane_handoff_incident_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_incident_recorded_at_idx ON ${tableName} (incident_id, recorded_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRecords(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.incidentId) {\n\t\t\t\twhere.push('incident_id = ?');\n\t\t\t\tparams.push(input.incidentId);\n\t\t\t}\n\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tif (input.action) {\n\t\t\t\twhere.push('action = ?');\n\t\t\t\tparams.push(input.action);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY recorded_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalLaneHandoffIncidentHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalLaneHandoffIncidentHistoryRow)\n\t\t\t\t: [];\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? records.slice(0, input.limit)\n\t\t\t\t: records;\n\t\t},\n\t\tsaveRecord(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.incidentId,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.targetRolloutLabel ?? null,\n\t\t\t\trecord.action,\n\t\t\t\trecord.recordedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalIncidentRemediationDecisionStore = (\n\toptions: SQLiteRAGRetrievalIncidentRemediationDecisionStoreOptions\n): RAGRetrievalIncidentRemediationDecisionStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_incident_remediation_decisions';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_incident_status_idx ON ${tableName} (incident_id, status, decided_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRecords(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.incidentId) {\n\t\t\t\twhere.push('incident_id = ?');\n\t\t\t\tparams.push(input.incidentId);\n\t\t\t}\n\n\t\t\tif (input.remediationKind) {\n\t\t\t\twhere.push('remediation_kind = ?');\n\t\t\t\tparams.push(input.remediationKind);\n\t\t\t}\n\n\t\t\tif (input.status) {\n\t\t\t\twhere.push('status = ?');\n\t\t\t\tparams.push(input.status);\n\t\t\t}\n\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY decided_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalIncidentRemediationDecisionRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalIncidentRemediationDecisionRow)\n\t\t\t\t: [];\n\t\t\tconst sorted =\n\t\t\t\tnormalizeRetrievalIncidentRemediationDecisionRecords(records);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveRecord(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.incidentId,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.targetRolloutLabel ?? null,\n\t\t\t\trecord.remediationKind,\n\t\t\t\trecord.status,\n\t\t\t\trecord.decidedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalIncidentRemediationExecutionHistoryStore =\n\t(\n\t\toptions: SQLiteRAGRetrievalIncidentRemediationExecutionHistoryStoreOptions\n\t): RAGRetrievalIncidentRemediationExecutionHistoryStore => {\n\t\tconst tableName =\n\t\t\toptions.tableName ??\n\t\t\t'rag_retrieval_incident_remediation_execution_history';\n\t\tassertSupportedIdentifier(tableName);\n\n\t\tconst db =\n\t\t\toptions.db ??\n\t\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\t\tdb.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\t\tdb.exec(\n\t\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_executed_at_idx ON ${tableName} (group_key, executed_at DESC)`\n\t\t);\n\t\tdb.exec(\n\t\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_incident_code_idx ON ${tableName} (incident_id, code, executed_at DESC)`\n\t\t);\n\n\t\tconst 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\t\tconst 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\t\treturn {\n\t\t\tlistRecords(input = {}) {\n\t\t\t\tconst where: string[] = [];\n\t\t\t\tconst params: Array<string | number> = [];\n\n\t\t\t\tif (input.groupKey) {\n\t\t\t\t\twhere.push('group_key = ?');\n\t\t\t\t\tparams.push(input.groupKey);\n\t\t\t\t}\n\n\t\t\t\tif (input.incidentId) {\n\t\t\t\t\twhere.push('incident_id = ?');\n\t\t\t\t\tparams.push(input.incidentId);\n\t\t\t\t}\n\n\t\t\t\tif (input.actionKind) {\n\t\t\t\t\twhere.push('action_kind = ?');\n\t\t\t\t\tparams.push(input.actionKind);\n\t\t\t\t}\n\n\t\t\t\tif (input.code) {\n\t\t\t\t\twhere.push('code = ?');\n\t\t\t\t\tparams.push(input.code);\n\t\t\t\t}\n\n\t\t\t\tif (typeof input.blockedByGuardrail === 'boolean') {\n\t\t\t\t\twhere.push('blocked_by_guardrail = ?');\n\t\t\t\t\tparams.push(input.blockedByGuardrail ? 1 : 0);\n\t\t\t\t}\n\n\t\t\t\tif (typeof input.idempotentReplay === 'boolean') {\n\t\t\t\t\twhere.push('idempotent_replay = ?');\n\t\t\t\t\tparams.push(input.idempotentReplay ? 1 : 0);\n\t\t\t\t}\n\n\t\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t\t}\n\n\t\t\t\tconst sql =\n\t\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t\t'ORDER BY executed_at DESC';\n\t\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t\t? rows\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\tisSQLiteRetrievalIncidentRemediationExecutionHistoryRow\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tmapSQLiteRetrievalIncidentRemediationExecutionHistoryRow\n\t\t\t\t\t\t\t)\n\t\t\t\t\t: [];\n\t\t\t\tconst sorted =\n\t\t\t\t\tnormalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n\t\t\t\t\t\trecords\n\t\t\t\t\t);\n\n\t\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t\t: sorted;\n\t\t\t},\n\t\t\tsaveRecord(record) {\n\t\t\t\tinsert.run(\n\t\t\t\t\trecord.id,\n\t\t\t\t\trecord.incidentId ?? null,\n\t\t\t\t\trecord.groupKey ?? null,\n\t\t\t\t\trecord.targetRolloutLabel ?? null,\n\t\t\t\t\trecord.action.kind,\n\t\t\t\t\trecord.code,\n\t\t\t\t\trecord.blockedByGuardrail ? 1 : 0,\n\t\t\t\t\trecord.idempotentReplay ? 1 : 0,\n\t\t\t\t\trecord.executedAt,\n\t\t\t\t\tJSON.stringify(record)\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t};\n\nexport const createRAGSQLiteRetrievalLaneHandoffAutoCompletePolicyHistoryStore =\n\t(\n\t\toptions: SQLiteRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStoreOptions\n\t): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore => {\n\t\tconst tableName =\n\t\t\toptions.tableName ??\n\t\t\t'rag_retrieval_lane_handoff_auto_complete_policy_history';\n\t\tassertSupportedIdentifier(tableName);\n\n\t\tconst db =\n\t\t\toptions.db ??\n\t\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\t\tdb.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\t\tdb.exec(\n\t\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`\n\t\t);\n\t\tdb.exec(\n\t\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_target_idx ON ${tableName} (corpus_group_key, target_rollout_label, recorded_at DESC)`\n\t\t);\n\n\t\tconst 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\t\tconst 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\t\treturn {\n\t\t\tlistRecords(input = {}) {\n\t\t\t\tconst where: string[] = [];\n\t\t\t\tconst params: Array<string | number> = [];\n\n\t\t\t\tif (input.corpusGroupKey) {\n\t\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t\t}\n\t\t\t\tif (input.groupKey) {\n\t\t\t\t\twhere.push('group_key = ?');\n\t\t\t\t\tparams.push(input.groupKey);\n\t\t\t\t}\n\t\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t\t}\n\n\t\t\t\tconst sql =\n\t\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t\t'ORDER BY recorded_at DESC';\n\t\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t\t? rows\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\tisSQLiteLaneHandoffAutoCompletePolicyHistoryRow\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tmapSQLiteLaneHandoffAutoCompletePolicyHistoryRow\n\t\t\t\t\t\t\t)\n\t\t\t\t\t: [];\n\t\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t\t? records.slice(0, input.limit)\n\t\t\t\t\t: records;\n\t\t\t},\n\t\t\tsaveRecord(record) {\n\t\t\t\tinsert.run(\n\t\t\t\t\trecord.id,\n\t\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\t\trecord.groupKey,\n\t\t\t\t\trecord.targetRolloutLabel,\n\t\t\t\t\trecord.recordedAt,\n\t\t\t\t\tJSON.stringify(record)\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t};\n\nexport const createRAGSQLiteRetrievalReleaseLanePolicyHistoryStore = (\n\toptions: SQLiteRAGRetrievalReleaseLanePolicyHistoryStoreOptions\n): RAGRetrievalReleaseLanePolicyHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_release_lane_policy_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_rollout_recorded_at_idx ON ${tableName} (rollout_label, recorded_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_scope_idx ON ${tableName} (group_key, scope, recorded_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRecords(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\t\t\tif (input.rolloutLabel) {\n\t\t\t\twhere.push('rollout_label = ?');\n\t\t\t\tparams.push(input.rolloutLabel);\n\t\t\t}\n\t\t\tif (input.scope) {\n\t\t\t\twhere.push('scope = ?');\n\t\t\t\tparams.push(input.scope);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY recorded_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteReleaseLanePolicyHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteReleaseLanePolicyHistoryRow)\n\t\t\t\t: [];\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? records.slice(0, input.limit)\n\t\t\t\t: records;\n\t\t},\n\t\tsaveRecord(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey ?? null,\n\t\t\t\trecord.rolloutLabel,\n\t\t\t\trecord.scope,\n\t\t\t\trecord.recordedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalBaselineGatePolicyHistoryStore = (\n\toptions: SQLiteRAGRetrievalBaselineGatePolicyHistoryStoreOptions\n): RAGRetrievalBaselineGatePolicyHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_baseline_gate_policy_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_rollout_recorded_at_idx ON ${tableName} (rollout_label, recorded_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_scope_idx ON ${tableName} (group_key, scope, recorded_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRecords(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\t\t\tif (input.rolloutLabel) {\n\t\t\t\twhere.push('rollout_label = ?');\n\t\t\t\tparams.push(input.rolloutLabel);\n\t\t\t}\n\t\t\tif (input.scope) {\n\t\t\t\twhere.push('scope = ?');\n\t\t\t\tparams.push(input.scope);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY recorded_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteBaselineGatePolicyHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteBaselineGatePolicyHistoryRow)\n\t\t\t\t: [];\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? records.slice(0, input.limit)\n\t\t\t\t: records;\n\t\t},\n\t\tsaveRecord(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey ?? null,\n\t\t\t\trecord.rolloutLabel,\n\t\t\t\trecord.scope,\n\t\t\t\trecord.recordedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalReleaseLaneEscalationPolicyHistoryStore = (\n\toptions: SQLiteRAGRetrievalReleaseLaneEscalationPolicyHistoryStoreOptions\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ??\n\t\t'rag_retrieval_release_lane_escalation_policy_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_target_idx ON ${tableName} (corpus_group_key, target_rollout_label, recorded_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRecords(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY recorded_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteReleaseLaneEscalationPolicyHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteReleaseLaneEscalationPolicyHistoryRow)\n\t\t\t\t: [];\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? records.slice(0, input.limit)\n\t\t\t\t: records;\n\t\t},\n\t\tsaveRecord(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.targetRolloutLabel,\n\t\t\t\trecord.recordedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGFileAnswerGroundingEvaluationHistoryStore = (\n\tpath: string\n): RAGAnswerGroundingEvaluationHistoryStore => ({\n\tasync listRuns(input) {\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\truns?: RAGAnswerGroundingEvaluationRun[];\n\t\t\t};\n\t\t\tconst runs = Array.isArray(data.runs) ? data.runs : [];\n\t\t\tconst filtered = input?.suiteId\n\t\t\t\t? runs.filter((run) => run.suiteId === input.suiteId)\n\t\t\t\t: runs;\n\n\t\t\treturn filtered\n\t\t\t\t.sort(toGroundingHistorySortOrder)\n\t\t\t\t.slice(0, input?.limit ?? DEFAULT_HISTORY_LIMIT);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror &&\n\t\t\t\ttypeof error === 'object' &&\n\t\t\t\t'code' in error &&\n\t\t\t\terror.code === 'ENOENT'\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t},\n\tasync saveRun(run) {\n\t\tlet runs: RAGAnswerGroundingEvaluationRun[] = [];\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\truns?: RAGAnswerGroundingEvaluationRun[];\n\t\t\t};\n\t\t\truns = Array.isArray(data.runs) ? data.runs : [];\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t!error ||\n\t\t\t\ttypeof error !== 'object' ||\n\t\t\t\t!('code' in error) ||\n\t\t\t\terror.code !== 'ENOENT'\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst nextRuns = normalizeGroundingHistoryRuns([\n\t\t\trun,\n\t\t\t...runs.filter((entry) => entry.id !== run.id)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\truns: nextRuns\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)\n\t\t);\n\t},\n\tasync pruneRuns(input) {\n\t\tlet runs: RAGAnswerGroundingEvaluationRun[] = [];\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\truns?: RAGAnswerGroundingEvaluationRun[];\n\t\t\t};\n\t\t\truns = Array.isArray(data.runs) ? data.runs : [];\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t!error ||\n\t\t\t\ttypeof error !== 'object' ||\n\t\t\t\t!('code' in error) ||\n\t\t\t\terror.code !== 'ENOENT'\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\tinput,\n\t\t\truns,\n\t\t\tsort: normalizeGroundingHistoryRuns\n\t\t});\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\truns: pruned.next\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)\n\t\t);\n\t\treturn {\n\t\t\tkeptCount: pruned.keptCount,\n\t\t\tremovedCount: pruned.removedCount\n\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t}\n});\n\nexport const createRAGFileAnswerGroundingCaseDifficultyHistoryStore = (\n\tpath: string\n): RAGAnswerGroundingCaseDifficultyHistoryStore => ({\n\tasync listRuns(input) {\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\truns?: RAGAnswerGroundingCaseDifficultyRun[];\n\t\t\t};\n\t\t\tconst runs = Array.isArray(data.runs) ? data.runs : [];\n\t\t\tconst filtered = input?.suiteId\n\t\t\t\t? runs.filter((run) => run.suiteId === input.suiteId)\n\t\t\t\t: runs;\n\n\t\t\treturn normalizeGroundingDifficultyHistoryRuns(filtered).slice(\n\t\t\t\t0,\n\t\t\t\tinput?.limit ?? DEFAULT_HISTORY_LIMIT\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror &&\n\t\t\t\ttypeof error === 'object' &&\n\t\t\t\t'code' in error &&\n\t\t\t\terror.code === 'ENOENT'\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t},\n\tasync saveRun(run) {\n\t\tlet runs: RAGAnswerGroundingCaseDifficultyRun[] = [];\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\truns?: RAGAnswerGroundingCaseDifficultyRun[];\n\t\t\t};\n\t\t\truns = Array.isArray(data.runs) ? data.runs : [];\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t!error ||\n\t\t\t\ttypeof error !== 'object' ||\n\t\t\t\t!('code' in error) ||\n\t\t\t\terror.code !== 'ENOENT'\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst nextRuns = normalizeGroundingDifficultyHistoryRuns([\n\t\t\trun,\n\t\t\t...runs.filter((entry) => entry.id !== run.id)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\truns: nextRuns\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)\n\t\t);\n\t}\n});\n\nexport const loadRAGEvaluationHistory = async ({\n\tstore,\n\tsuite,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGEvaluationHistoryStore;\n\tsuite: RAGEvaluationSuite;\n\tlimit?: number;\n}): Promise<RAGEvaluationHistory> => {\n\tconst runs = normalizeHistoryRuns(\n\t\tawait Promise.resolve(store.listRuns({ limit, suiteId: suite.id }))\n\t);\n\tconst latestRun = runs[0];\n\tconst previousRun = runs[1];\n\n\treturn {\n\t\tcaseTraceSnapshots: buildEvaluationCaseTraceSnapshots({\n\t\t\tcurrent: latestRun,\n\t\t\tprevious: previousRun\n\t\t}),\n\t\tretrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n\t\t\truns\n\t\t}),\n\t\tdiff:\n\t\t\tlatestRun && previousRun\n\t\t\t\t? buildRAGEvaluationRunDiff({\n\t\t\t\t\t\tcurrent: latestRun,\n\t\t\t\t\t\tprevious: previousRun\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\tlatestRun,\n\t\tleaderboard: buildRAGEvaluationLeaderboard(runs),\n\t\tpreviousRun,\n\t\truns,\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id\n\t};\n};\n\nexport const loadRAGEvaluationSuiteSnapshotHistory = async ({\n\tstore,\n\tsuite,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGEvaluationSuiteSnapshotHistoryStore;\n\tsuite: Pick<RAGEvaluationSuite, 'id' | 'label'>;\n\tlimit?: number;\n}): Promise<RAGEvaluationSuiteSnapshotHistory> => {\n\tconst snapshots = normalizeEvaluationSuiteSnapshots(\n\t\tawait Promise.resolve(\n\t\t\tstore.listSnapshots({\n\t\t\t\tlimit,\n\t\t\t\tsuiteId: suite.id\n\t\t\t})\n\t\t)\n\t);\n\tconst latestSnapshot = snapshots[0];\n\tconst previousSnapshot = snapshots[1];\n\n\treturn {\n\t\tdiff:\n\t\t\tlatestSnapshot && previousSnapshot\n\t\t\t\t? buildRAGEvaluationSuiteSnapshotDiff({\n\t\t\t\t\t\tcurrent: latestSnapshot,\n\t\t\t\t\t\tprevious: previousSnapshot\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\tlatestSnapshot,\n\t\tpreviousSnapshot,\n\t\tsnapshots,\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id\n\t};\n};\n\nexport const loadRAGSearchTraceHistory = async ({\n\tstore,\n\tquery,\n\tgroupKey,\n\ttag,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGSearchTraceStore;\n\tquery?: string;\n\tgroupKey?: string;\n\ttag?: string;\n\tlimit?: number;\n}): Promise<RAGSearchTraceHistory> => {\n\tconst traces = normalizeTraceSummaryRuns(\n\t\tawait Promise.resolve(store.listTraces({ groupKey, limit, query, tag }))\n\t);\n\tconst latestTrace = traces[0];\n\tconst previousTrace = traces[1];\n\n\treturn {\n\t\tdiff:\n\t\t\tlatestTrace && previousTrace\n\t\t\t\t? buildRAGSearchTraceDiff({\n\t\t\t\t\t\tcurrent: latestTrace,\n\t\t\t\t\t\tprevious: previousTrace\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\tlatestTrace,\n\t\tpreviousTrace,\n\t\tgroupKey,\n\t\tquery,\n\t\ttag,\n\t\tretrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n\t\t\truns: traces.map((trace) => ({\n\t\t\t\tfinishedAt: trace.finishedAt,\n\t\t\t\tid: trace.id,\n\t\t\t\tlabel: trace.label,\n\t\t\t\ttraceSummary: trace.summary\n\t\t\t}))\n\t\t}),\n\t\ttraces\n\t};\n};\n\nexport const loadRAGSearchTraceGroupHistory = async ({\n\tstore,\n\ttag,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGSearchTraceStore;\n\ttag?: string;\n\tlimit?: number;\n}): Promise<RAGSearchTraceGroupHistory> => {\n\tconst traces = normalizeTraceSummaryRuns(\n\t\tawait Promise.resolve(store.listTraces({ limit, tag }))\n\t);\n\tconst grouped = new Map<string, RAGSearchTraceRecord[]>();\n\n\tfor (const trace of traces) {\n\t\tconst groupKey = trace.groupKey ?? trace.query;\n\t\tconst existing = grouped.get(groupKey);\n\t\tif (existing) {\n\t\t\texisting.push(trace);\n\t\t\tcontinue;\n\t\t}\n\t\tgrouped.set(groupKey, [trace]);\n\t}\n\n\tconst groups = Array.from(grouped.entries())\n\t\t.map(([groupKey, entries]): RAGSearchTraceGroupHistoryEntry => {\n\t\t\tconst normalizedEntries = normalizeTraceSummaryRuns(entries);\n\t\t\tconst latestTrace = normalizedEntries[0];\n\t\t\tconst previousTrace = normalizedEntries[1];\n\n\t\t\treturn {\n\t\t\t\tdiff:\n\t\t\t\t\tlatestTrace && previousTrace\n\t\t\t\t\t\t? buildRAGSearchTraceDiff({\n\t\t\t\t\t\t\t\tcurrent: latestTrace,\n\t\t\t\t\t\t\t\tprevious: previousTrace\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: undefined,\n\t\t\t\tgroupKey,\n\t\t\t\tlatestTrace,\n\t\t\t\tpreviousTrace,\n\t\t\t\tretrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n\t\t\t\t\truns: normalizedEntries.map((trace) => ({\n\t\t\t\t\t\tfinishedAt: trace.finishedAt,\n\t\t\t\t\t\tid: trace.id,\n\t\t\t\t\t\tlabel: trace.label,\n\t\t\t\t\t\ttraceSummary: trace.summary\n\t\t\t\t\t}))\n\t\t\t\t}),\n\t\t\t\ttraceCount: normalizedEntries.length\n\t\t\t};\n\t\t})\n\t\t.sort((left, right) => {\n\t\t\tconst leftFinishedAt = left.latestTrace?.finishedAt ?? 0;\n\t\t\tconst rightFinishedAt = right.latestTrace?.finishedAt ?? 0;\n\t\t\treturn rightFinishedAt - leftFinishedAt;\n\t\t});\n\n\treturn {\n\t\tgroups,\n\t\ttag\n\t};\n};\n\nexport const summarizeRAGSearchTraceStore = async ({\n\tstore,\n\ttag\n}: {\n\tstore: RAGSearchTraceStore;\n\ttag?: string;\n}): Promise<RAGSearchTraceStats> => {\n\tconst traces = normalizeTraceSummaryRuns(\n\t\tawait Promise.resolve(store.listTraces({ tag }))\n\t);\n\n\treturn buildRAGSearchTraceStatsFromTraces(traces);\n};\n\nexport const previewRAGSearchTraceStorePrune = async ({\n\tstore,\n\tinput\n}: {\n\tstore: RAGSearchTraceStore;\n\tinput?: RAGSearchTracePruneInput;\n}): Promise<RAGSearchTracePrunePreview> => {\n\tconst traces = normalizeTraceSummaryRuns(\n\t\tawait Promise.resolve(store.listTraces({ tag: input?.tag }))\n\t);\n\tconst pruned = applyRAGSearchTracePrunePolicy({\n\t\tinput,\n\t\ttraces\n\t});\n\n\treturn {\n\t\tinput,\n\t\tresult: {\n\t\t\tkeptCount: pruned.keptCount,\n\t\t\tremovedCount: pruned.removedCount\n\t\t},\n\t\tstatsAfter: buildRAGSearchTraceStatsFromTraces(pruned.next),\n\t\tstatsBefore: buildRAGSearchTraceStatsFromTraces(traces)\n\t};\n};\n\nexport const loadRAGAnswerGroundingEvaluationHistory = async ({\n\tstore,\n\tsuite,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGAnswerGroundingEvaluationHistoryStore;\n\tsuite: Pick<RAGEvaluationSuite, 'id' | 'label'>;\n\tlimit?: number;\n}): Promise<RAGAnswerGroundingEvaluationHistory> => {\n\tconst runs = normalizeGroundingHistoryRuns(\n\t\tawait Promise.resolve(\n\t\t\tstore.listRuns({\n\t\t\t\tlimit,\n\t\t\t\tsuiteId: suite.id\n\t\t\t})\n\t\t)\n\t);\n\tconst latestRun = runs[0];\n\tconst previousRun = runs[1];\n\n\treturn {\n\t\tcaseSnapshots: buildGroundingCaseSnapshots({\n\t\t\tcurrent: latestRun,\n\t\t\tprevious: previousRun\n\t\t}),\n\t\tdiff:\n\t\t\tlatestRun && previousRun\n\t\t\t\t? buildRAGAnswerGroundingEvaluationRunDiff({\n\t\t\t\t\t\tcurrent: latestRun,\n\t\t\t\t\t\tprevious: previousRun\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\tlatestRun,\n\t\tleaderboard: buildRAGAnswerGroundingEvaluationLeaderboard(runs),\n\t\tpreviousRun,\n\t\truns,\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id\n\t};\n};\n\nexport const loadRAGAnswerGroundingCaseDifficultyHistory = async ({\n\tstore,\n\tsuite,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGAnswerGroundingCaseDifficultyHistoryStore;\n\tsuite: Pick<RAGEvaluationSuite, 'id' | 'label'>;\n\tlimit?: number;\n}): Promise<RAGAnswerGroundingCaseDifficultyHistory> => {\n\tconst runs = normalizeGroundingDifficultyHistoryRuns(\n\t\tawait Promise.resolve(\n\t\t\tstore.listRuns({\n\t\t\t\tlimit,\n\t\t\t\tsuiteId: suite.id\n\t\t\t})\n\t\t)\n\t);\n\tconst latestRun = runs[0];\n\tconst previousRun = runs[1];\n\n\treturn {\n\t\tdiff:\n\t\t\tlatestRun && previousRun\n\t\t\t\t? buildRAGAnswerGroundingCaseDifficultyRunDiff({\n\t\t\t\t\t\tcurrent: latestRun,\n\t\t\t\t\t\tprevious: previousRun\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\tlatestRun,\n\t\tpreviousRun,\n\t\truns,\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id,\n\t\ttrends: buildRAGAnswerGroundingCaseDifficultyTrends({ runs })\n\t};\n};\n\nexport const persistRAGEvaluationSuiteRun = async ({\n\tstore,\n\trun\n}: {\n\tstore: RAGEvaluationHistoryStore;\n\trun: RAGEvaluationSuiteRun;\n}) => {\n\tawait Promise.resolve(store.saveRun(run));\n\treturn run;\n};\n\nexport const persistRAGAnswerGroundingEvaluationRun = async ({\n\tstore,\n\trun\n}: {\n\tstore: RAGAnswerGroundingEvaluationHistoryStore;\n\trun: RAGAnswerGroundingEvaluationRun;\n}) => {\n\tawait Promise.resolve(store.saveRun(run));\n\treturn run;\n};\n\nexport const persistRAGAnswerGroundingCaseDifficultyRun = async ({\n\tstore,\n\trun\n}: {\n\tstore: RAGAnswerGroundingCaseDifficultyHistoryStore;\n\trun: RAGAnswerGroundingCaseDifficultyRun;\n}) => {\n\tawait Promise.resolve(store.saveRun(run));\n\treturn run;\n};\n\nexport const persistRAGSearchTraceRecord = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGSearchTraceStore;\n\trecord: RAGSearchTraceRecord;\n}) => {\n\tawait Promise.resolve(store.saveTrace(record));\n\treturn record;\n};\n\nexport const pruneRAGSearchTraceStore = async ({\n\tstore,\n\tinput\n}: {\n\tstore: RAGSearchTraceStore;\n\tinput?: RAGSearchTracePruneInput;\n}): Promise<RAGSearchTracePruneResult> =>\n\tPromise.resolve(store.pruneTraces(input));\n\nexport const persistRAGSearchTracePruneRun = async ({\n\tstore,\n\trun\n}: {\n\tstore: RAGSearchTracePruneHistoryStore;\n\trun: RAGSearchTracePruneRun;\n}) => {\n\tawait Promise.resolve(store.saveRun(run));\n\treturn run;\n};\n\nexport const persistRAGRetrievalComparisonRun = async ({\n\tstore,\n\trun\n}: {\n\tstore: RAGRetrievalComparisonHistoryStore;\n\trun: RAGRetrievalComparisonRun;\n}) => {\n\tawait Promise.resolve(store.saveRun(run));\n\treturn run;\n};\n\nexport const buildRAGRetrievalComparisonDecisionSummary = ({\n\tcomparison,\n\tbaselineRetrievalId,\n\tcandidateRetrievalId,\n\tpolicy\n}: {\n\tcomparison: RAGRetrievalComparison;\n\tbaselineRetrievalId?: string;\n\tcandidateRetrievalId?: string;\n\tpolicy?: RAGRetrievalBaselineGatePolicy;\n}): RAGRetrievalComparisonDecisionSummary | undefined => {\n\tconst baselineEntry =\n\t\tfindRetrievalComparisonEntry(comparison, baselineRetrievalId) ??\n\t\tcomparison.entries[0];\n\tconst candidateEntry =\n\t\tfindRetrievalComparisonEntry(comparison, candidateRetrievalId) ??\n\t\tcomparison.entries.find(\n\t\t\t(entry) => entry.retrievalId !== baselineEntry?.retrievalId\n\t\t) ??\n\t\tcomparison.entries[1];\n\n\tif (!baselineEntry && !candidateEntry) {\n\t\treturn undefined;\n\t}\n\n\tconst delta =\n\t\tbaselineEntry && candidateEntry\n\t\t\t? {\n\t\t\t\t\taverageF1Delta:\n\t\t\t\t\t\tcandidateEntry.response.summary.averageF1 -\n\t\t\t\t\t\tbaselineEntry.response.summary.averageF1,\n\t\t\t\t\telapsedMsDelta:\n\t\t\t\t\t\tcandidateEntry.response.elapsedMs -\n\t\t\t\t\t\tbaselineEntry.response.elapsedMs,\n\t\t\t\t\tpassingRateDelta:\n\t\t\t\t\t\tcandidateEntry.response.passingRate -\n\t\t\t\t\t\tbaselineEntry.response.passingRate\n\t\t\t\t}\n\t\t\t: undefined;\n\n\treturn {\n\t\tbaseline: baselineEntry\n\t\t\t? {\n\t\t\t\t\taverageF1: baselineEntry.response.summary.averageF1,\n\t\t\t\t\telapsedMs: baselineEntry.response.elapsedMs,\n\t\t\t\t\tlabel: baselineEntry.label,\n\t\t\t\t\tpassingRate: baselineEntry.response.passingRate,\n\t\t\t\t\tretrievalId: baselineEntry.retrievalId\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tbaselineRetrievalId: baselineEntry?.retrievalId,\n\t\tcandidate: candidateEntry\n\t\t\t? {\n\t\t\t\t\taverageF1: candidateEntry.response.summary.averageF1,\n\t\t\t\t\telapsedMs: candidateEntry.response.elapsedMs,\n\t\t\t\t\tlabel: candidateEntry.label,\n\t\t\t\t\tpassingRate: candidateEntry.response.passingRate,\n\t\t\t\t\tretrievalId: candidateEntry.retrievalId\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tcandidateRetrievalId: candidateEntry?.retrievalId,\n\t\tdelta,\n\t\tfastest: comparison.summary.fastest,\n\t\tgate: evaluateRetrievalComparisonGate({ delta, policy }),\n\t\twinnerByAverageF1: comparison.summary.bestByAverageF1,\n\t\twinnerByPassingRate: comparison.summary.bestByPassingRate\n\t};\n};\n\nexport const loadRAGSearchTracePruneHistory = async ({\n\tstore,\n\tlimit,\n\ttrigger\n}: {\n\tstore: RAGSearchTracePruneHistoryStore;\n\tlimit?: number;\n\ttrigger?: RAGSearchTracePruneRun['trigger'];\n}) =>\n\tnormalizeSearchTracePruneRuns(\n\t\tawait Promise.resolve(store.listRuns({ limit, trigger }))\n\t);\n\nexport const loadRAGRetrievalComparisonHistory = async ({\n\tstore,\n\tlimit,\n\tsuiteId,\n\tlabel,\n\twinnerId,\n\tcorpusGroupKey,\n\tgroupKey,\n\ttag\n}: {\n\tstore: RAGRetrievalComparisonHistoryStore;\n\tlimit?: number;\n\tsuiteId?: string;\n\tlabel?: string;\n\twinnerId?: string;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\ttag?: string;\n}) =>\n\tnormalizeRetrievalComparisonRuns(\n\t\tawait Promise.resolve(\n\t\t\tstore.listRuns({\n\t\t\t\tcorpusGroupKey,\n\t\t\t\tgroupKey,\n\t\t\t\tlabel,\n\t\t\t\tlimit,\n\t\t\t\tsuiteId,\n\t\t\t\ttag,\n\t\t\t\twinnerId\n\t\t\t})\n\t\t)\n\t);\n\nexport const loadRAGRetrievalBaselines = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\ttag,\n\tlimit,\n\tstatus\n}: {\n\tstore: RAGRetrievalBaselineStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\ttag?: string;\n\tlimit?: number;\n\tstatus?: RAGRetrievalBaselineRecord['status'];\n}) =>\n\tnormalizeRetrievalBaselineRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listBaselines({\n\t\t\t\tcorpusGroupKey,\n\t\t\t\tgroupKey,\n\t\t\t\tlimit,\n\t\t\t\tstatus,\n\t\t\t\ttag\n\t\t\t})\n\t\t)\n\t);\n\nexport const persistRAGRetrievalBaseline = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalBaselineStore;\n\trecord: RAGRetrievalBaselineRecord;\n}) => {\n\tawait Promise.resolve(store.saveBaseline(record));\n\treturn record;\n};\n\nexport const loadRAGRetrievalReleaseDecisions = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\tkind\n}: {\n\tstore: RAGRetrievalReleaseDecisionStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\tkind?: RAGRetrievalReleaseDecisionRecord['kind'];\n}) =>\n\tnormalizeRetrievalReleaseDecisionRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listDecisions({ corpusGroupKey, groupKey, kind, limit })\n\t\t)\n\t);\n\nexport const loadRAGRetrievalLaneHandoffDecisions = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\tkind,\n\tsourceRolloutLabel,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalLaneHandoffDecisionStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\tkind?: RAGRetrievalLaneHandoffDecisionRecord['kind'];\n\tsourceRolloutLabel?: RAGRetrievalLaneHandoffDecisionRecord['sourceRolloutLabel'];\n\ttargetRolloutLabel?: RAGRetrievalLaneHandoffDecisionRecord['targetRolloutLabel'];\n}) =>\n\tnormalizeRetrievalLaneHandoffDecisionRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listDecisions({\n\t\t\t\tcorpusGroupKey,\n\t\t\t\tgroupKey,\n\t\t\t\tkind,\n\t\t\t\tlimit,\n\t\t\t\tsourceRolloutLabel,\n\t\t\t\ttargetRolloutLabel\n\t\t\t})\n\t\t)\n\t);\n\nexport const loadRAGRetrievalReleaseIncidents = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\ttargetRolloutLabel,\n\tstatus,\n\tseverity\n}: {\n\tstore: RAGRetrievalReleaseIncidentStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalReleaseIncidentRecord['targetRolloutLabel'];\n\tstatus?: RAGRetrievalReleaseIncidentRecord['status'];\n\tseverity?: RAGRetrievalReleaseIncidentRecord['severity'];\n}) =>\n\tnormalizeRetrievalReleaseIncidentRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listIncidents({\n\t\t\t\tcorpusGroupKey,\n\t\t\t\tgroupKey,\n\t\t\t\tlimit,\n\t\t\t\tseverity,\n\t\t\t\tstatus,\n\t\t\t\ttargetRolloutLabel\n\t\t\t})\n\t\t)\n\t);\n\nexport const loadRAGRetrievalLaneHandoffIncidents = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\ttargetRolloutLabel,\n\tstatus,\n\tseverity\n}: {\n\tstore: RAGRetrievalLaneHandoffIncidentStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalLaneHandoffIncidentRecord['targetRolloutLabel'];\n\tstatus?: RAGRetrievalLaneHandoffIncidentRecord['status'];\n\tseverity?: RAGRetrievalLaneHandoffIncidentRecord['severity'];\n}) =>\n\tnormalizeRetrievalReleaseIncidentRecords(\n\t\t(await Promise.resolve(\n\t\t\tstore.listIncidents({\n\t\t\t\tcorpusGroupKey,\n\t\t\t\tgroupKey,\n\t\t\t\tlimit,\n\t\t\t\tseverity,\n\t\t\t\tstatus,\n\t\t\t\ttargetRolloutLabel\n\t\t\t})\n\t\t)) as RAGRetrievalReleaseIncidentRecord[]\n\t) as RAGRetrievalLaneHandoffIncidentRecord[];\n\nexport const loadRAGRetrievalLaneHandoffIncidentHistory = async ({\n\tstore,\n\tcorpusGroupKey,\n\taction,\n\tgroupKey,\n\tincidentId,\n\tlimit,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalLaneHandoffIncidentHistoryStore;\n\tcorpusGroupKey?: string;\n\taction?: RAGRetrievalLaneHandoffIncidentHistoryRecord['action'];\n\tgroupKey?: string;\n\tincidentId?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalLaneHandoffIncidentRecord['targetRolloutLabel'];\n}) =>\n\t(await Promise.resolve(\n\t\tstore.listRecords({\n\t\t\tcorpusGroupKey,\n\t\t\taction,\n\t\t\tgroupKey,\n\t\t\tincidentId,\n\t\t\tlimit,\n\t\t\ttargetRolloutLabel\n\t\t})\n\t)) as RAGRetrievalLaneHandoffIncidentHistoryRecord[];\n\nexport const loadRAGRetrievalIncidentRemediationDecisions = async ({\n\tstore,\n\tgroupKey,\n\tincidentId,\n\tlimit,\n\tremediationKind,\n\tstatus,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalIncidentRemediationDecisionStore;\n\tgroupKey?: string;\n\tincidentId?: string;\n\tlimit?: number;\n\tremediationKind?: RAGRetrievalIncidentRemediationDecisionRecord['remediationKind'];\n\tstatus?: RAGRetrievalIncidentRemediationDecisionRecord['status'];\n\ttargetRolloutLabel?: RAGRetrievalIncidentRemediationDecisionRecord['targetRolloutLabel'];\n}) =>\n\tnormalizeRetrievalIncidentRemediationDecisionRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listRecords({\n\t\t\t\tgroupKey,\n\t\t\t\tincidentId,\n\t\t\t\tlimit,\n\t\t\t\tremediationKind,\n\t\t\t\tstatus,\n\t\t\t\ttargetRolloutLabel\n\t\t\t})\n\t\t)\n\t);\n\nexport const loadRAGRetrievalIncidentRemediationExecutionHistory = async ({\n\tstore,\n\tactionKind,\n\tblockedByGuardrail,\n\tcode,\n\tgroupKey,\n\tidempotentReplay,\n\tincidentId,\n\tlimit,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalIncidentRemediationExecutionHistoryStore;\n\tactionKind?: RAGRemediationAction['kind'];\n\tblockedByGuardrail?: boolean;\n\tcode?: RAGRetrievalIncidentRemediationExecutionHistoryRecord['code'];\n\tgroupKey?: string;\n\tidempotentReplay?: boolean;\n\tincidentId?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalIncidentRemediationExecutionHistoryRecord['targetRolloutLabel'];\n}) =>\n\tnormalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listRecords({\n\t\t\t\tactionKind,\n\t\t\t\tblockedByGuardrail,\n\t\t\t\tcode,\n\t\t\t\tgroupKey,\n\t\t\t\tidempotentReplay,\n\t\t\t\tincidentId,\n\t\t\t\tlimit,\n\t\t\t\ttargetRolloutLabel\n\t\t\t})\n\t\t)\n\t);\n\nexport const loadRAGRetrievalLaneHandoffAutoCompletePolicyHistory = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord['targetRolloutLabel'];\n}) =>\n\t(await Promise.resolve(\n\t\tstore.listRecords({\n\t\t\tcorpusGroupKey,\n\t\t\tgroupKey,\n\t\t\tlimit,\n\t\t\ttargetRolloutLabel\n\t\t})\n\t)) as RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalReleaseLanePolicyHistory = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\trolloutLabel,\n\tscope\n}: {\n\tstore: RAGRetrievalReleaseLanePolicyHistoryStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\trolloutLabel?: RAGRetrievalReleaseLanePolicyHistoryRecord['rolloutLabel'];\n\tscope?: RAGRetrievalReleaseLanePolicyHistoryRecord['scope'];\n}) =>\n\t(await Promise.resolve(\n\t\tstore.listRecords({\n\t\t\tcorpusGroupKey,\n\t\t\tgroupKey,\n\t\t\tlimit,\n\t\t\trolloutLabel,\n\t\t\tscope\n\t\t})\n\t)) as RAGRetrievalReleaseLanePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalBaselineGatePolicyHistory = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\trolloutLabel,\n\tscope\n}: {\n\tstore: RAGRetrievalBaselineGatePolicyHistoryStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\trolloutLabel?: RAGRetrievalBaselineGatePolicyHistoryRecord['rolloutLabel'];\n\tscope?: RAGRetrievalBaselineGatePolicyHistoryRecord['scope'];\n}) =>\n\t(await Promise.resolve(\n\t\tstore.listRecords({\n\t\t\tcorpusGroupKey,\n\t\t\tgroupKey,\n\t\t\tlimit,\n\t\t\trolloutLabel,\n\t\t\tscope\n\t\t})\n\t)) as RAGRetrievalBaselineGatePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalReleaseLaneEscalationPolicyHistory = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalReleaseLaneEscalationPolicyHistoryStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord['targetRolloutLabel'];\n}) =>\n\t(await Promise.resolve(\n\t\tstore.listRecords({\n\t\t\tgroupKey,\n\t\t\tlimit,\n\t\t\ttargetRolloutLabel\n\t\t})\n\t)) as RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[];\n\nexport const persistRAGRetrievalReleaseDecision = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalReleaseDecisionStore;\n\trecord: RAGRetrievalReleaseDecisionRecord;\n}) => {\n\tawait Promise.resolve(store.saveDecision(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalLaneHandoffDecision = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalLaneHandoffDecisionStore;\n\trecord: RAGRetrievalLaneHandoffDecisionRecord;\n}) => {\n\tawait Promise.resolve(store.saveDecision(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalReleaseIncident = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalReleaseIncidentStore;\n\trecord: RAGRetrievalReleaseIncidentRecord;\n}) => {\n\tawait Promise.resolve(store.saveIncident(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalLaneHandoffIncident = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalLaneHandoffIncidentStore;\n\trecord: RAGRetrievalLaneHandoffIncidentRecord;\n}) => {\n\tawait Promise.resolve(store.saveIncident(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalIncidentRemediationDecision = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalIncidentRemediationDecisionStore;\n\trecord: RAGRetrievalIncidentRemediationDecisionRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalIncidentRemediationExecutionHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalIncidentRemediationExecutionHistoryStore;\n\trecord: RAGRetrievalIncidentRemediationExecutionHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalLaneHandoffIncidentHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalLaneHandoffIncidentHistoryStore;\n\trecord: RAGRetrievalLaneHandoffIncidentHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalLaneHandoffAutoCompletePolicyHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore;\n\trecord: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalReleaseLanePolicyHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalReleaseLanePolicyHistoryStore;\n\trecord: RAGRetrievalReleaseLanePolicyHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalBaselineGatePolicyHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalBaselineGatePolicyHistoryStore;\n\trecord: RAGRetrievalBaselineGatePolicyHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalReleaseLaneEscalationPolicyHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalReleaseLaneEscalationPolicyHistoryStore;\n\trecord: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const createRAGSQLiteGovernanceStores = (\n\toptions: SQLiteRAGGovernanceStoreBundleOptions = {}\n): Pick<\n\tRAGChatPluginConfig,\n\t| 'searchTraceStore'\n\t| 'searchTracePruneHistoryStore'\n\t| 'retrievalComparisonHistoryStore'\n\t| 'retrievalBaselineStore'\n\t| 'retrievalReleaseDecisionStore'\n\t| 'retrievalLaneHandoffDecisionStore'\n\t| 'retrievalLaneHandoffIncidentStore'\n\t| 'retrievalLaneHandoffIncidentHistoryStore'\n\t| 'retrievalLaneHandoffAutoCompletePolicyHistoryStore'\n\t| 'retrievalReleaseLanePolicyHistoryStore'\n\t| 'retrievalBaselineGatePolicyHistoryStore'\n\t| 'retrievalReleaseLaneEscalationPolicyHistoryStore'\n\t| 'retrievalReleaseIncidentStore'\n\t| 'retrievalIncidentRemediationDecisionStore'\n\t| 'retrievalIncidentRemediationExecutionHistoryStore'\n> => {\n\tconst prefix = options.tablePrefix?.trim();\n\tconst table = (suffix: string) =>\n\t\tprefix && prefix.length > 0 ? `${prefix}_${suffix}` : suffix;\n\n\treturn {\n\t\tsearchTraceStore: createRAGSQLiteSearchTraceStore({\n\t\t\tdb: options.db,\n\t\t\tpath: options.path,\n\t\t\ttableName: table('rag_search_traces')\n\t\t}),\n\t\tsearchTracePruneHistoryStore:\n\t\t\tcreateRAGSQLiteSearchTracePruneHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_search_trace_prune_history')\n\t\t\t}),\n\t\tretrievalComparisonHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalComparisonHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_comparison_history')\n\t\t\t}),\n\t\tretrievalBaselineStore: createRAGSQLiteRetrievalBaselineStore({\n\t\t\tdb: options.db,\n\t\t\tpath: options.path,\n\t\t\ttableName: table('rag_retrieval_baselines')\n\t\t}),\n\t\tretrievalReleaseDecisionStore:\n\t\t\tcreateRAGSQLiteRetrievalReleaseDecisionStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_release_decisions')\n\t\t\t}),\n\t\tretrievalLaneHandoffDecisionStore:\n\t\t\tcreateRAGSQLiteRetrievalLaneHandoffDecisionStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_lane_handoff_decisions')\n\t\t\t}),\n\t\tretrievalLaneHandoffIncidentStore:\n\t\t\tcreateRAGSQLiteRetrievalLaneHandoffIncidentStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_lane_handoff_incidents')\n\t\t\t}),\n\t\tretrievalLaneHandoffIncidentHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalLaneHandoffIncidentHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_lane_handoff_incident_history')\n\t\t\t}),\n\t\tretrievalLaneHandoffAutoCompletePolicyHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalLaneHandoffAutoCompletePolicyHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table(\n\t\t\t\t\t'rag_retrieval_lane_handoff_auto_complete_policy_history'\n\t\t\t\t)\n\t\t\t}),\n\t\tretrievalReleaseLanePolicyHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalReleaseLanePolicyHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_release_lane_policy_history')\n\t\t\t}),\n\t\tretrievalBaselineGatePolicyHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalBaselineGatePolicyHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_baseline_gate_policy_history')\n\t\t\t}),\n\t\tretrievalReleaseLaneEscalationPolicyHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalReleaseLaneEscalationPolicyHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table(\n\t\t\t\t\t'rag_retrieval_release_lane_escalation_policy_history'\n\t\t\t\t)\n\t\t\t}),\n\t\tretrievalReleaseIncidentStore:\n\t\t\tcreateRAGSQLiteRetrievalReleaseIncidentStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_release_incidents')\n\t\t\t}),\n\t\tretrievalIncidentRemediationDecisionStore:\n\t\t\tcreateRAGSQLiteRetrievalIncidentRemediationDecisionStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_incident_remediation_decisions')\n\t\t\t}),\n\t\tretrievalIncidentRemediationExecutionHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalIncidentRemediationExecutionHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table(\n\t\t\t\t\t'rag_retrieval_incident_remediation_execution_history'\n\t\t\t\t)\n\t\t\t})\n\t};\n};\n\nexport const buildRAGEvaluationResponse = (\n\tcases: RAGEvaluationCaseResult[]\n): RAGEvaluationResponse => {\n\tconst totalCases = cases.length;\n\tconst corpusKeys = [\n\t\t...new Set(cases.flatMap((entry) => entry.corpusKey ?? []))\n\t];\n\tconst passedCases = cases.filter((entry) => entry.status === 'pass').length;\n\tconst partialCases = cases.filter(\n\t\t(entry) => entry.status === 'partial'\n\t).length;\n\tconst failedCases = cases.filter((entry) => entry.status === 'fail').length;\n\n\treturn {\n\t\tcases,\n\t\t...(corpusKeys.length > 0 ? { corpusKeys } : {}),\n\t\telapsedMs: cases.reduce((sum, result) => sum + result.elapsedMs, 0),\n\t\tok: true,\n\t\tpassingRate: totalCases > 0 ? (passedCases / totalCases) * 100 : 0,\n\t\tsummary: {\n\t\t\taverageF1:\n\t\t\t\tcases.reduce((sum, result) => sum + result.f1, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\taverageLatencyMs:\n\t\t\t\tcases.reduce((sum, result) => sum + result.elapsedMs, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\taveragePrecision:\n\t\t\t\tcases.reduce((sum, result) => sum + result.precision, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\taverageRecall:\n\t\t\t\tcases.reduce((sum, result) => sum + result.recall, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\tfailedCases,\n\t\t\tpartialCases,\n\t\t\tpassedCases,\n\t\t\ttotalCases\n\t\t},\n\t\ttotalCases\n\t};\n};\n\nconst incrementFailureCounts = (\n\ttarget: Record<string, number>,\n\tfailureClasses: string[] | undefined\n) => {\n\tfor (const failureClass of failureClasses ?? []) {\n\t\ttarget[failureClass] = (target[failureClass] ?? 0) + 1;\n\t}\n};\n\nconst sortEntityQualitySummaries = <\n\tT extends { passingRate: number; totalCases: number; label: string }\n>(\n\tentries: T[]\n) =>\n\tentries.sort((left, right) => {\n\t\tif (right.passingRate !== left.passingRate) {\n\t\t\treturn right.passingRate - left.passingRate;\n\t\t}\n\t\tif (right.totalCases !== left.totalCases) {\n\t\t\treturn right.totalCases - left.totalCases;\n\t\t}\n\n\t\treturn left.label.localeCompare(right.label);\n\t});\n\nexport const buildRAGEvaluationEntityQualityView = (\n\tresponse: RAGEvaluationResponse\n): RAGEvaluationEntityQualityView => {\n\tconst bySource = new Map<string, RAGEvaluationEntityQualitySummary>();\n\tconst byDocument = new Map<string, RAGEvaluationEntityQualitySummary>();\n\tfor (const entry of response.cases) {\n\t\tconst targets =\n\t\t\tentry.mode === 'source'\n\t\t\t\t? entry.expectedIds\n\t\t\t\t: entry.mode === 'documentId'\n\t\t\t\t\t? entry.expectedIds\n\t\t\t\t\t: [];\n\t\tconst targetMap =\n\t\t\tentry.mode === 'source'\n\t\t\t\t? bySource\n\t\t\t\t: entry.mode === 'documentId'\n\t\t\t\t\t? byDocument\n\t\t\t\t\t: undefined;\n\t\tif (!targetMap) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const target of targets) {\n\t\t\tconst current =\n\t\t\t\ttargetMap.get(target) ??\n\t\t\t\t({\n\t\t\t\t\taverageF1: 0,\n\t\t\t\t\tcaseIds: [],\n\t\t\t\t\tentityType: entry.mode === 'source' ? 'source' : 'document',\n\t\t\t\t\tfailedCases: 0,\n\t\t\t\t\tfailureCounts: {},\n\t\t\t\t\tkey: target,\n\t\t\t\t\tlabel: target,\n\t\t\t\t\tpassedCases: 0,\n\t\t\t\t\tpassingRate: 0,\n\t\t\t\t\tpartialCases: 0,\n\t\t\t\t\ttotalCases: 0\n\t\t\t\t} satisfies RAGEvaluationEntityQualitySummary);\n\t\t\tcurrent.totalCases += 1;\n\t\t\tcurrent.averageF1 += entry.f1;\n\t\t\tcurrent.caseIds.push(entry.caseId);\n\t\t\tif (entry.status === 'pass') {\n\t\t\t\tcurrent.passedCases += 1;\n\t\t\t} else if (entry.status === 'partial') {\n\t\t\t\tcurrent.partialCases += 1;\n\t\t\t} else {\n\t\t\t\tcurrent.failedCases += 1;\n\t\t\t}\n\t\t\tincrementFailureCounts(current.failureCounts, entry.failureClasses);\n\t\t\ttargetMap.set(target, current);\n\t\t}\n\t}\n\n\tfor (const map of [bySource, byDocument]) {\n\t\tfor (const entry of map.values()) {\n\t\t\tentry.averageF1 =\n\t\t\t\tentry.totalCases > 0 ? entry.averageF1 / entry.totalCases : 0;\n\t\t\tentry.passingRate =\n\t\t\t\tentry.totalCases > 0\n\t\t\t\t\t? (entry.passedCases / entry.totalCases) * 100\n\t\t\t\t\t: 0;\n\t\t}\n\t}\n\n\treturn {\n\t\tbyDocument: sortEntityQualitySummaries([...byDocument.values()]),\n\t\tbySource: sortEntityQualitySummaries([...bySource.values()])\n\t};\n};\n\nexport const buildRAGAnswerGroundingEntityQualityView = (\n\tresponse: RAGAnswerGroundingEvaluationResponse\n): RAGAnswerGroundingEntityQualityView => {\n\tconst bySource = new Map<string, RAGAnswerGroundingEntityQualitySummary>();\n\tconst byDocument = new Map<\n\t\tstring,\n\t\tRAGAnswerGroundingEntityQualitySummary\n\t>();\n\tfor (const entry of response.cases) {\n\t\tconst targetMap =\n\t\t\tentry.mode === 'source'\n\t\t\t\t? bySource\n\t\t\t\t: entry.mode === 'documentId'\n\t\t\t\t\t? byDocument\n\t\t\t\t\t: undefined;\n\t\tif (!targetMap) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const target of entry.expectedIds) {\n\t\t\tconst current =\n\t\t\t\ttargetMap.get(target) ??\n\t\t\t\t({\n\t\t\t\t\taverageCitationF1: 0,\n\t\t\t\t\taverageResolvedCitationRate: 0,\n\t\t\t\t\tcaseIds: [],\n\t\t\t\t\tentityType: entry.mode === 'source' ? 'source' : 'document',\n\t\t\t\t\tfailedCases: 0,\n\t\t\t\t\tfailureCounts: {},\n\t\t\t\t\tkey: target,\n\t\t\t\t\tlabel: target,\n\t\t\t\t\tpassedCases: 0,\n\t\t\t\t\tpassingRate: 0,\n\t\t\t\t\tpartialCases: 0,\n\t\t\t\t\ttotalCases: 0\n\t\t\t\t} satisfies RAGAnswerGroundingEntityQualitySummary);\n\t\t\tcurrent.totalCases += 1;\n\t\t\tcurrent.averageCitationF1 += entry.citationF1;\n\t\t\tcurrent.averageResolvedCitationRate += entry.resolvedCitationRate;\n\t\t\tcurrent.caseIds.push(entry.caseId);\n\t\t\tif (entry.status === 'pass') {\n\t\t\t\tcurrent.passedCases += 1;\n\t\t\t} else if (entry.status === 'partial') {\n\t\t\t\tcurrent.partialCases += 1;\n\t\t\t} else {\n\t\t\t\tcurrent.failedCases += 1;\n\t\t\t}\n\t\t\tincrementFailureCounts(current.failureCounts, entry.failureClasses);\n\t\t\ttargetMap.set(target, current);\n\t\t}\n\t}\n\n\tfor (const map of [bySource, byDocument]) {\n\t\tfor (const entry of map.values()) {\n\t\t\tentry.averageCitationF1 =\n\t\t\t\tentry.totalCases > 0\n\t\t\t\t\t? entry.averageCitationF1 / entry.totalCases\n\t\t\t\t\t: 0;\n\t\t\tentry.averageResolvedCitationRate =\n\t\t\t\tentry.totalCases > 0\n\t\t\t\t\t? entry.averageResolvedCitationRate / entry.totalCases\n\t\t\t\t\t: 0;\n\t\t\tentry.passingRate =\n\t\t\t\tentry.totalCases > 0\n\t\t\t\t\t? (entry.passedCases / entry.totalCases) * 100\n\t\t\t\t\t: 0;\n\t\t}\n\t}\n\n\treturn {\n\t\tbyDocument: sortEntityQualitySummaries([...byDocument.values()]),\n\t\tbySource: sortEntityQualitySummaries([...bySource.values()])\n\t};\n};\n\nexport const evaluateRAGAnswerGroundingCase = ({\n\tcaseIndex,\n\tcaseInput\n}: {\n\tcaseIndex: number;\n\tcaseInput: RAGAnswerGroundingEvaluationCase;\n}): RAGAnswerGroundingEvaluationCaseResult => {\n\tconst mode = resolveEvaluationMode(caseInput);\n\tconst expectedIds = normalizeExpectedIds(\n\t\tmode === 'chunkId'\n\t\t\t? (caseInput.expectedChunkIds ?? [])\n\t\t\t: mode === 'source'\n\t\t\t\t? (caseInput.expectedSources ?? [])\n\t\t\t\t: (caseInput.expectedDocumentIds ?? [])\n\t);\n\tconst groundedAnswer = buildRAGGroundedAnswer(\n\t\tcaseInput.answer,\n\t\tcaseInput.sources\n\t);\n\tconst citedReferences = groundedAnswer.parts.flatMap((part) =>\n\t\tpart.type === 'citation' ? part.references : []\n\t);\n\tconst citedIds = normalizeExpectedIds(\n\t\tcitedReferences.map((reference) => extractExpectedId(reference, mode))\n\t);\n\tconst expectedSet = new Set(expectedIds);\n\tconst citedSet = new Set(citedIds);\n\tconst matchedIds = normalizeExpectedIds(\n\t\t[...expectedSet].filter((id) => citedSet.has(id))\n\t);\n\tconst missingIds = normalizeExpectedIds(\n\t\t[...expectedSet].filter((id) => !citedSet.has(id))\n\t);\n\tconst extraIds = normalizeExpectedIds(\n\t\t[...citedSet].filter((id) => !expectedSet.has(id))\n\t);\n\tconst matchedCount = matchedIds.length;\n\tconst expectedCount = expectedIds.length;\n\tconst citedCount = citedIds.length;\n\tconst precision = citedCount > 0 ? matchedCount / citedCount : 0;\n\tconst recall = expectedCount > 0 ? matchedCount / expectedCount : 0;\n\tconst citationF1 =\n\t\tprecision + recall > 0\n\t\t\t? (2 * precision * recall) / (precision + recall)\n\t\t\t: 0;\n\tconst citationCount = groundedAnswer.parts.filter(\n\t\t(part) => part.type === 'citation'\n\t).length;\n\tconst unresolvedCitationCount = new Set(\n\t\tgroundedAnswer.ungroundedReferenceNumbers\n\t).size;\n\tconst resolvedCitationCount = citedReferences.length;\n\tconst resolvedCitationRate =\n\t\tcitationCount > 0\n\t\t\t? Math.min(1, resolvedCitationCount / citationCount)\n\t\t\t: 0;\n\n\treturn {\n\t\tanswer: caseInput.answer,\n\t\tcaseId: caseInput.id ?? `case-${caseIndex + 1}`,\n\t\tcitationCount,\n\t\tcitationF1,\n\t\tcitationPrecision: precision,\n\t\tcitationRecall: recall,\n\t\tcitedIds,\n\t\tcoverage: groundedAnswer.coverage,\n\t\texpectedCount,\n\t\texpectedIds,\n\t\textraIds,\n\t\tgroundedAnswer,\n\t\thasCitations: groundedAnswer.hasCitations,\n\t\tlabel: caseInput.label,\n\t\tmatchedCount,\n\t\tmatchedIds,\n\t\tfailureClasses: classifyRAGGroundingFailure({\n\t\t\tavailableSources: caseInput.sources,\n\t\t\tcitationCount,\n\t\t\texpectedCount,\n\t\t\textraIds,\n\t\t\tmatchedCount,\n\t\t\tmissingIds,\n\t\t\tunresolvedCitationCount\n\t\t}),\n\t\tmetadata: caseInput.metadata,\n\t\tmissingIds,\n\t\tmode,\n\t\tquery: caseInput.query,\n\t\treferenceCount: groundedAnswer.references.length,\n\t\tresolvedCitationCount,\n\t\tresolvedCitationRate,\n\t\tstatus: buildAnswerGroundingStatus({\n\t\t\tcoverage: groundedAnswer.coverage,\n\t\t\texpectedCount,\n\t\t\tmatchedCount,\n\t\t\tresolvedCitationCount,\n\t\t\tunresolvedCitationCount\n\t\t}),\n\t\tunresolvedCitationCount\n\t};\n};\n\nexport const buildRAGAnswerGroundingEvaluationResponse = (\n\tcases: RAGAnswerGroundingEvaluationCaseResult[]\n): RAGAnswerGroundingEvaluationResponse => {\n\tconst totalCases = cases.length;\n\tconst passedCases = cases.filter((entry) => entry.status === 'pass').length;\n\tconst partialCases = cases.filter(\n\t\t(entry) => entry.status === 'partial'\n\t).length;\n\tconst failedCases = cases.filter((entry) => entry.status === 'fail').length;\n\tconst groundedCases = cases.filter(\n\t\t(entry) => entry.coverage === 'grounded'\n\t).length;\n\tconst partiallyGroundedCases = cases.filter(\n\t\t(entry) => entry.coverage === 'partial'\n\t).length;\n\tconst ungroundedCases = cases.filter(\n\t\t(entry) => entry.coverage === 'ungrounded'\n\t).length;\n\n\treturn {\n\t\tcases,\n\t\tok: true,\n\t\tpassingRate: totalCases > 0 ? (passedCases / totalCases) * 100 : 0,\n\t\tsummary: {\n\t\t\taverageCitationF1:\n\t\t\t\tcases.reduce((sum, result) => sum + result.citationF1, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\taverageCitationPrecision:\n\t\t\t\tcases.reduce(\n\t\t\t\t\t(sum, result) => sum + result.citationPrecision,\n\t\t\t\t\t0\n\t\t\t\t) / (totalCases || 1),\n\t\t\taverageCitationRecall:\n\t\t\t\tcases.reduce((sum, result) => sum + result.citationRecall, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\taverageResolvedCitationRate:\n\t\t\t\tcases.reduce(\n\t\t\t\t\t(sum, result) => sum + result.resolvedCitationRate,\n\t\t\t\t\t0\n\t\t\t\t) / (totalCases || 1),\n\t\t\tfailedCases,\n\t\t\tgroundedCases,\n\t\t\tpartiallyGroundedCases,\n\t\t\tpassedCases,\n\t\t\tpartialCases,\n\t\t\ttotalCases,\n\t\t\tungroundedCases\n\t\t},\n\t\ttotalCases\n\t};\n};\n\nexport const evaluateRAGAnswerGrounding = (\n\tinput: RAGAnswerGroundingEvaluationInput\n): RAGAnswerGroundingEvaluationResponse =>\n\tbuildRAGAnswerGroundingEvaluationResponse(\n\t\tinput.cases.map((caseInput, caseIndex) =>\n\t\t\tevaluateRAGAnswerGroundingCase({ caseIndex, caseInput })\n\t\t)\n\t);\nexport const compareRAGRerankers = async ({\n\tcollection,\n\tsuite,\n\trerankers,\n\tdefaultTopK = DEFAULT_TOP_K\n}: {\n\tcollection: RAGCollection;\n\tsuite: RAGEvaluationSuite;\n\trerankers: RAGRerankerCandidate[];\n\tdefaultTopK?: number;\n}): Promise<RAGRerankerComparison> => {\n\tconst entries = await Promise.all(\n\t\trerankers.map(async (candidate) => {\n\t\t\tconst evaluated = await evaluateRAGCollectionCases({\n\t\t\t\tcollection,\n\t\t\t\tdefaultTopK,\n\t\t\t\tinput: suite.input,\n\t\t\t\tincludeTrace: true,\n\t\t\t\trerank: candidate.rerank\n\t\t\t});\n\t\t\tconst response = buildRAGEvaluationResponse(\n\t\t\t\tevaluated.map((entry) => entry.caseResult)\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcaseTraceSnapshots:\n\t\t\t\t\tbuildEvaluationCaseTraceSnapshotsFromEvaluated(evaluated),\n\t\t\t\tlabel: candidate.label ?? candidate.id,\n\t\t\t\tproviderName:\n\t\t\t\t\ttypeof candidate.rerank === 'function'\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: candidate.rerank?.providerName,\n\t\t\t\tresponse,\n\t\t\t\trerankerId: candidate.id,\n\t\t\t\ttraceSummary: summarizeRetrievalTraces(\n\t\t\t\t\tevaluated\n\t\t\t\t\t\t.map((entry) => entry.trace)\n\t\t\t\t\t\t.filter((trace): trace is RAGRetrievalTrace =>\n\t\t\t\t\t\t\tBoolean(trace)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t} satisfies RAGRerankerComparisonEntry;\n\t\t})\n\t);\n\n\tconst leaderboard = buildRAGEvaluationLeaderboard(\n\t\tentries.map((entry) => ({\n\t\t\telapsedMs: entry.response.elapsedMs,\n\t\t\tfinishedAt: 0,\n\t\t\tid: entry.rerankerId,\n\t\t\tlabel: entry.label,\n\t\t\tresponse: entry.response,\n\t\t\tstartedAt: 0,\n\t\t\tsuiteId: suite.id,\n\t\t\ttraceSummary: entry.traceSummary\n\t\t}))\n\t);\n\n\treturn {\n\t\tentries,\n\t\tleaderboard,\n\t\tsummary: summarizeRAGRerankerComparison(entries),\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id\n\t};\n};\nconst summarizeEvaluationResponseComparison = <\n\tTEntry extends {\n\t\tresponse: RAGEvaluationResponse;\n\t\t[key: string]: unknown;\n\t}\n>(\n\tentries: TEntry[],\n\tidKey: keyof TEntry\n) => {\n\tif (entries.length === 0) {\n\t\treturn {};\n\t}\n\n\tconst byPassingRate = [...entries].sort((left, right) => {\n\t\tif (right.response.passingRate !== left.response.passingRate) {\n\t\t\treturn right.response.passingRate - left.response.passingRate;\n\t\t}\n\t\tif (\n\t\t\tright.response.summary.averageF1 !== left.response.summary.averageF1\n\t\t) {\n\t\t\treturn (\n\t\t\t\tright.response.summary.averageF1 -\n\t\t\t\tleft.response.summary.averageF1\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\tleft.response.summary.averageLatencyMs -\n\t\t\tright.response.summary.averageLatencyMs\n\t\t);\n\t});\n\tconst byAverageF1 = [...entries].sort(\n\t\t(left, right) =>\n\t\t\tright.response.summary.averageF1 - left.response.summary.averageF1\n\t);\n\tconst byLatency = [...entries].sort(\n\t\t(left, right) =>\n\t\t\tleft.response.summary.averageLatencyMs -\n\t\t\tright.response.summary.averageLatencyMs\n\t);\n\tconst getId = (entry: TEntry) =>\n\t\ttypeof entry[idKey] === 'string' ? (entry[idKey] as string) : undefined;\n\n\treturn {\n\t\tbestByAverageF1: getId(byAverageF1[0] as TEntry),\n\t\tbestByPassingRate: getId(byPassingRate[0] as TEntry),\n\t\tfastest: getId(byLatency[0] as TEntry)\n\t};\n};\nconst resolveRetrievalMode = (\n\tcandidate: RAGRetrievalCandidate\n): RAGHybridRetrievalMode => {\n\tif (!candidate.retrieval) {\n\t\treturn 'vector';\n\t}\n\n\treturn typeof candidate.retrieval === 'string'\n\t\t? candidate.retrieval\n\t\t: (candidate.retrieval.mode ?? 'vector');\n};\nexport const compareRAGRetrievalStrategies = async ({\n\tcollection,\n\tsuite,\n\tretrievals,\n\tdefaultTopK = DEFAULT_TOP_K\n}: {\n\tcollection: RAGCollection;\n\tsuite: RAGEvaluationSuite;\n\tretrievals: RAGRetrievalCandidate[];\n\tdefaultTopK?: number;\n}): Promise<RAGRetrievalComparison> => {\n\tconst entries = await Promise.all(\n\t\tretrievals.map(async (candidate) => {\n\t\t\tconst tracedCollection = {\n\t\t\t\t...collection,\n\t\t\t\tsearch: (input) =>\n\t\t\t\t\tcollection.search({\n\t\t\t\t\t\t...input,\n\t\t\t\t\t\tqueryTransform:\n\t\t\t\t\t\t\tcandidate.queryTransform ?? input.queryTransform,\n\t\t\t\t\t\trerank: candidate.rerank ?? input.rerank,\n\t\t\t\t\t\tretrieval: candidate.retrieval ?? input.retrieval\n\t\t\t\t\t}),\n\t\t\t\tsearchWithTrace: (input) =>\n\t\t\t\t\tcollection.searchWithTrace({\n\t\t\t\t\t\t...input,\n\t\t\t\t\t\tqueryTransform:\n\t\t\t\t\t\t\tcandidate.queryTransform ?? input.queryTransform,\n\t\t\t\t\t\trerank: candidate.rerank ?? input.rerank,\n\t\t\t\t\t\tretrieval: candidate.retrieval ?? input.retrieval\n\t\t\t\t\t})\n\t\t\t} satisfies RAGCollection;\n\t\t\tconst evaluated = await evaluateRAGCollectionCases({\n\t\t\t\tcollection: {\n\t\t\t\t\t...tracedCollection\n\t\t\t\t},\n\t\t\t\tdefaultTopK,\n\t\t\t\tinput: suite.input,\n\t\t\t\tincludeTrace: true,\n\t\t\t\trerank: candidate.rerank\n\t\t\t});\n\t\t\tconst response = buildRAGEvaluationResponse(\n\t\t\t\tevaluated.map((entry) => entry.caseResult)\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcaseTraceSnapshots:\n\t\t\t\t\tbuildEvaluationCaseTraceSnapshotsFromEvaluated(evaluated),\n\t\t\t\tlabel: candidate.label ?? candidate.id,\n\t\t\t\tresponse,\n\t\t\t\tretrievalId: candidate.id,\n\t\t\t\tretrievalMode: resolveRetrievalMode(candidate),\n\t\t\t\ttraceSummary: summarizeRetrievalTraces(\n\t\t\t\t\tevaluated\n\t\t\t\t\t\t.map((entry) => entry.trace)\n\t\t\t\t\t\t.filter((trace): trace is RAGRetrievalTrace =>\n\t\t\t\t\t\t\tBoolean(trace)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t} satisfies RAGRetrievalComparisonEntry;\n\t\t})\n\t);\n\n\tconst leaderboard = buildRAGEvaluationLeaderboard(\n\t\tentries.map((entry) => ({\n\t\t\telapsedMs: entry.response.elapsedMs,\n\t\t\tfinishedAt: 0,\n\t\t\tid: entry.retrievalId,\n\t\t\tlabel: entry.label,\n\t\t\tresponse: entry.response,\n\t\t\tstartedAt: 0,\n\t\t\tsuiteId: suite.id,\n\t\t\ttraceSummary: entry.traceSummary\n\t\t}))\n\t);\n\n\treturn {\n\t\tcorpusKeys: [\n\t\t\t...new Set(\n\t\t\t\tentries.flatMap((entry) => entry.response.corpusKeys ?? [])\n\t\t\t)\n\t\t],\n\t\tentries,\n\t\tleaderboard,\n\t\tsummary: summarizeRAGRetrievalComparison(entries),\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id\n\t};\n};\n\nexport const summarizeRAGRetrievalTraces = (\n\ttraces: RAGRetrievalTrace[]\n): RAGRetrievalTraceComparisonSummary | undefined =>\n\tsummarizeRetrievalTraces(traces);\n\nexport const compareRAGRetrievalTraceSummaries = (\n\tcurrent: RAGRetrievalTraceComparisonSummary,\n\tprevious: RAGRetrievalTraceComparisonSummary\n): RAGRetrievalTraceComparisonSummaryDiff => ({\n\taverageCandidateTopKDelta:\n\t\tcurrent.averageCandidateTopK - previous.averageCandidateTopK,\n\taverageFinalCountDelta:\n\t\tcurrent.averageFinalCount - previous.averageFinalCount,\n\taverageLexicalCountDelta:\n\t\tcurrent.averageLexicalCount - previous.averageLexicalCount,\n\taverageLexicalTopKDelta:\n\t\tcurrent.averageLexicalTopK - previous.averageLexicalTopK,\n\taverageVectorCountDelta:\n\t\tcurrent.averageVectorCount - previous.averageVectorCount,\n\tbalancedCasesDelta: current.balancedCases - previous.balancedCases,\n\tcurrent,\n\tlexicalCasesDelta: current.lexicalCases - previous.lexicalCases,\n\tmodeDelta: buildSummaryListDelta(current.modes, previous.modes),\n\tprevious,\n\troundRobinCasesDelta: current.roundRobinCases - previous.roundRobinCases,\n\tsourceBalanceStrategyDelta: buildSummaryListDelta(\n\t\tcurrent.sourceBalanceStrategies,\n\t\tprevious.sourceBalanceStrategies\n\t),\n\tstageCountsDelta: diffTraceSummaryStageCounts({\n\t\tcurrent: current.stageCounts,\n\t\tprevious: previous.stageCounts\n\t}),\n\ttotalCasesDelta: current.totalCases - previous.totalCases,\n\ttransformedCasesDelta: current.transformedCases - previous.transformedCases,\n\tvectorCasesDelta: current.vectorCases - previous.vectorCases,\n\tvariantCasesDelta: current.variantCases - previous.variantCases\n});\n\nconst buildSearchTraceResultSnapshots = (\n\tresults: Array<{\n\t\tchunkId: string;\n\t\tcorpusKey?: string;\n\t\tscore: number;\n\t\tsource?: string;\n\t\ttitle?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t}>\n): RAGSearchTraceResultSnapshot[] =>\n\tresults.map((result) => ({\n\t\tchunkId: result.chunkId,\n\t\tcorpusKey:\n\t\t\tresult.corpusKey ??\n\t\t\t(typeof result.metadata?.corpusKey === 'string'\n\t\t\t\t? result.metadata.corpusKey\n\t\t\t\t: undefined),\n\t\tdocumentId:\n\t\t\ttypeof result.metadata?.documentId === 'string'\n\t\t\t\t? result.metadata.documentId\n\t\t\t\t: undefined,\n\t\tscore: result.score,\n\t\tsource: result.source,\n\t\ttitle: result.title\n\t}));\n\nexport const buildRAGSearchTraceRecord = (input: {\n\ttrace: RAGRetrievalTrace;\n\tresults?: Array<{\n\t\tchunkId: string;\n\t\tscore: number;\n\t\tsource?: string;\n\t\ttitle?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t}>;\n\tid?: string;\n\tlabel?: string;\n\tgroupKey?: string;\n\ttags?: string[];\n\tstartedAt?: number;\n\tfinishedAt?: number;\n\telapsedMs?: number;\n\tmetadata?: Record<string, unknown>;\n}): RAGSearchTraceRecord => {\n\tconst startedAt = input.startedAt ?? Date.now();\n\tconst finishedAt = input.finishedAt ?? startedAt;\n\tconst elapsedMs = input.elapsedMs ?? Math.max(0, finishedAt - startedAt);\n\tconst summary =\n\t\tsummarizeRetrievalTraces([input.trace]) ??\n\t\tsummarizeRetrievalTraces([\n\t\t\t{\n\t\t\t\t...input.trace,\n\t\t\t\tsteps: [...input.trace.steps]\n\t\t\t}\n\t\t]);\n\n\tif (!summary) {\n\t\tthrow new Error('Failed to summarize retrieval trace');\n\t}\n\n\treturn {\n\t\telapsedMs,\n\t\tfinishedAt,\n\t\tgroupKey: input.groupKey,\n\t\tid: input.id ?? generateId(),\n\t\tlabel: input.label ?? input.trace.query,\n\t\tmetadata: input.metadata,\n\t\tquery: input.trace.query,\n\t\tresults: buildSearchTraceResultSnapshots(input.results ?? []),\n\t\tstartedAt,\n\t\tsummary,\n\t\ttags: normalizeTraceTags(input.tags),\n\t\ttrace: input.trace\n\t};\n};\n\nexport const buildRAGSearchTraceDiff = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGSearchTraceRecord;\n\tprevious?: RAGSearchTraceRecord;\n}): RAGSearchTraceDiff => {\n\tconst currentChunkIds = current.results.map((entry) => entry.chunkId);\n\tconst previousChunkIds =\n\t\tprevious?.results.map((entry) => entry.chunkId) ?? [];\n\tconst previousSet = new Set(previousChunkIds);\n\tconst currentSet = new Set(currentChunkIds);\n\n\treturn {\n\t\taddedChunkIds: currentChunkIds.filter(\n\t\t\t(chunkId) => !previousSet.has(chunkId)\n\t\t),\n\t\tcurrentTraceId: current.id,\n\t\tpreviousTraceId: previous?.id,\n\t\tremovedChunkIds: previousChunkIds.filter(\n\t\t\t(chunkId) => !currentSet.has(chunkId)\n\t\t),\n\t\tretainedChunkIds: currentChunkIds.filter((chunkId) =>\n\t\t\tpreviousSet.has(chunkId)\n\t\t),\n\t\tsummaryDelta: previous?.summary\n\t\t\t? compareRAGRetrievalTraceSummaries(\n\t\t\t\t\tcurrent.summary,\n\t\t\t\t\tprevious.summary\n\t\t\t\t)\n\t\t\t: undefined,\n\t\ttopResultChanged:\n\t\t\t(current.results[0]?.chunkId ?? undefined) !==\n\t\t\t(previous?.results[0]?.chunkId ?? undefined)\n\t};\n};\n\nexport const buildRAGRetrievalTraceHistoryTrend = ({\n\truns\n}: {\n\truns: RAGRetrievalTraceSummaryRun[];\n}): RAGRetrievalTraceTrend => {\n\tconst sortedRuns = normalizeTraceSummaryRuns(runs);\n\tconst runsWithSummary = sortedRuns.filter(\n\t\t(run) => run.traceSummary && run.label\n\t);\n\tconst traceSummaries = runsWithSummary\n\t\t.map((run) => run.traceSummary)\n\t\t.filter((summary): summary is RAGRetrievalTraceComparisonSummary =>\n\t\t\tBoolean(summary)\n\t\t);\n\tconst summaryTrendWindows: RAGRetrievalTraceHistoryWindow[] = [];\n\n\tfor (let index = 0; index < runsWithSummary.length - 1; index += 1) {\n\t\tconst currentRun = runsWithSummary[index]!;\n\t\tconst previousRun = runsWithSummary[index + 1]!;\n\t\tif (!currentRun.traceSummary || !previousRun.traceSummary) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst current = currentRun.traceSummary;\n\t\tconst previous = previousRun.traceSummary;\n\t\tconst delta = compareRAGRetrievalTraceSummaries(current, previous);\n\t\tsummaryTrendWindows.push({\n\t\t\tcurrent,\n\t\t\tcurrentRunId: currentRun.id,\n\t\t\tcurrentRunLabel: currentRun.label,\n\t\t\tdelta,\n\t\t\tprevious,\n\t\t\tpreviousRunId: previousRun.id,\n\t\t\tpreviousRunLabel: previousRun.label\n\t\t});\n\t}\n\n\tconst latest = runsWithSummary[0]?.traceSummary;\n\tconst previous = runsWithSummary[1]?.traceSummary;\n\tconst latestToPrevious =\n\t\tlatest && previous\n\t\t\t? compareRAGRetrievalTraceSummaries(latest, previous)\n\t\t\t: undefined;\n\tconst listHistoryModes = traceSummaries.map((summary) => summary.modes);\n\tconst listHistorySourceStrategies = traceSummaries.map(\n\t\t(summary) => summary.sourceBalanceStrategies\n\t);\n\tconst modes = summarizeListTurnover<RAGHybridRetrievalMode>({\n\t\tcurrent: normalizeSummaryList(latest?.modes ?? []),\n\t\thistory: listHistoryModes,\n\t\tprevious: normalizeSummaryList(previous?.modes ?? [])\n\t});\n\tconst sourceBalanceStrategies =\n\t\tsummarizeListTurnover<RAGSourceBalanceStrategy>({\n\t\t\tcurrent: normalizeSummaryList(\n\t\t\t\tlatest?.sourceBalanceStrategies ?? []\n\t\t\t),\n\t\t\thistory: listHistorySourceStrategies,\n\t\t\tprevious: normalizeSummaryList(\n\t\t\t\tprevious?.sourceBalanceStrategies ?? []\n\t\t\t)\n\t\t});\n\tconst { aggregate, bestMetric, worstMetric } = buildTraceSummaryAggregate({\n\t\tsummaries: traceSummaries\n\t});\n\tconst stageChurn = buildRAGRetrievalTraceStageChurn({\n\t\twindows: summaryTrendWindows\n\t});\n\n\treturn {\n\t\taggregate,\n\t\tbestMetric,\n\t\tmodeTurnover: modes,\n\t\trunsWithTraceSummary: traceSummaries.length,\n\t\tsourceBalanceStrategyTurnover: sourceBalanceStrategies,\n\t\tstageChurn,\n\t\tsummaryTrendWindows,\n\t\tworstMetric,\n\t\tworstVolatileStage: stageChurn.find((entry) => entry.totalChanges > 0),\n\t\tlatestToPrevious\n\t};\n};\nexport const createRAGEvaluationSuite = (\n\tsuite: RAGEvaluationSuite\n): RAGEvaluationSuite => {\n\tconst cases = suite.input.cases.map((entry) => ({\n\t\t...entry,\n\t\t...(entry.goldenSet === true ? { goldenSet: true } : {}),\n\t\t...(entry.expectedChunkIds\n\t\t\t? { expectedChunkIds: [...entry.expectedChunkIds] }\n\t\t\t: {}),\n\t\t...(entry.expectedSources\n\t\t\t? { expectedSources: [...entry.expectedSources] }\n\t\t\t: {}),\n\t\t...(entry.expectedDocumentIds\n\t\t\t? { expectedDocumentIds: [...entry.expectedDocumentIds] }\n\t\t\t: {}),\n\t\t...(entry.hardNegativeChunkIds\n\t\t\t? {\n\t\t\t\t\thardNegativeChunkIds: normalizeExpectedIds(\n\t\t\t\t\t\tentry.hardNegativeChunkIds\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(entry.hardNegativeSources\n\t\t\t? {\n\t\t\t\t\thardNegativeSources: normalizeExpectedIds(\n\t\t\t\t\t\tentry.hardNegativeSources\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(entry.hardNegativeDocumentIds\n\t\t\t? {\n\t\t\t\t\thardNegativeDocumentIds: normalizeExpectedIds(\n\t\t\t\t\t\tentry.hardNegativeDocumentIds\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(entry.filter ? { filter: { ...entry.filter } } : {}),\n\t\t...(entry.metadata ? { metadata: { ...entry.metadata } } : {}),\n\t\t...(entry.retrieval ? { retrieval: entry.retrieval } : {})\n\t}));\n\tconst duplicateCaseIds = Array.from(\n\t\tnew Set(\n\t\t\tcases\n\t\t\t\t.map((entry) => entry.id)\n\t\t\t\t.filter(\n\t\t\t\t\t(id, index, ids) =>\n\t\t\t\t\t\ttypeof id === 'string' && ids.indexOf(id) !== index\n\t\t\t\t)\n\t\t)\n\t);\n\tif (duplicateCaseIds.length > 0) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite contains duplicate case ids: ${duplicateCaseIds.join(', ')}`\n\t\t);\n\t}\n\n\treturn {\n\t\t...suite,\n\t\tinput: {\n\t\t\t...suite.input,\n\t\t\tcases,\n\t\t\t...(suite.input.filter\n\t\t\t\t? { filter: { ...suite.input.filter } }\n\t\t\t\t: {}),\n\t\t\t...(suite.input.retrieval\n\t\t\t\t? { retrieval: suite.input.retrieval }\n\t\t\t\t: {})\n\t\t},\n\t\t...(suite.metadata ? { metadata: { ...suite.metadata } } : {})\n\t};\n};\n\nexport const addRAGEvaluationSuiteCase = ({\n\tsuite,\n\tcaseInput,\n\tindex\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseInput: RAGEvaluationCase;\n\tindex?: number;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tif (\n\t\tnormalizedSuite.input.cases.some((entry) => entry.id === caseInput.id)\n\t) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite already contains case id ${caseInput.id}`\n\t\t);\n\t}\n\n\tconst nextCases = [...normalizedSuite.input.cases];\n\tconst insertAt =\n\t\ttypeof index === 'number' && Number.isFinite(index)\n\t\t\t? Math.max(0, Math.min(nextCases.length, Math.trunc(index)))\n\t\t\t: nextCases.length;\n\tnextCases.splice(insertAt, 0, caseInput);\n\n\treturn createRAGEvaluationSuite({\n\t\t...normalizedSuite,\n\t\tinput: {\n\t\t\t...normalizedSuite.input,\n\t\t\tcases: nextCases\n\t\t}\n\t});\n};\n\nexport const updateRAGEvaluationSuiteCase = ({\n\tsuite,\n\tcaseId,\n\tcaseInput\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseId: string;\n\tcaseInput: RAGEvaluationCase;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst targetIndex = normalizedSuite.input.cases.findIndex(\n\t\t(entry) => entry.id === caseId\n\t);\n\tif (targetIndex < 0) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite does not contain case id ${caseId}`\n\t\t);\n\t}\n\tif (\n\t\tcaseInput.id !== caseId &&\n\t\tnormalizedSuite.input.cases.some((entry) => entry.id === caseInput.id)\n\t) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite already contains case id ${caseInput.id}`\n\t\t);\n\t}\n\n\tconst nextCases = [...normalizedSuite.input.cases];\n\tnextCases[targetIndex] = caseInput;\n\n\treturn createRAGEvaluationSuite({\n\t\t...normalizedSuite,\n\t\tinput: {\n\t\t\t...normalizedSuite.input,\n\t\t\tcases: nextCases\n\t\t}\n\t});\n};\n\nexport const removeRAGEvaluationSuiteCase = ({\n\tsuite,\n\tcaseId\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseId: string;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst nextCases = normalizedSuite.input.cases.filter(\n\t\t(entry) => entry.id !== caseId\n\t);\n\tif (nextCases.length === normalizedSuite.input.cases.length) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite does not contain case id ${caseId}`\n\t\t);\n\t}\n\n\treturn {\n\t\t...normalizedSuite,\n\t\tinput: {\n\t\t\t...normalizedSuite.input,\n\t\t\tcases: nextCases\n\t\t}\n\t};\n};\n\nexport const reorderRAGEvaluationSuiteCases = ({\n\tsuite,\n\tcaseIds\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseIds: string[];\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst caseMap = new Map(\n\t\tnormalizedSuite.input.cases.map((entry) => [entry.id, entry])\n\t);\n\tif (caseIds.length !== normalizedSuite.input.cases.length) {\n\t\tthrow new Error(\n\t\t\t'RAG evaluation suite reorder requires exactly one id per case'\n\t\t);\n\t}\n\tconst unknownCaseIds = caseIds.filter((id) => !caseMap.has(id));\n\tif (unknownCaseIds.length > 0) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite reorder contains unknown case ids: ${unknownCaseIds.join(', ')}`\n\t\t);\n\t}\n\tif (new Set(caseIds).size !== caseIds.length) {\n\t\tthrow new Error(\n\t\t\t'RAG evaluation suite reorder contains duplicate case ids'\n\t\t);\n\t}\n\n\treturn {\n\t\t...normalizedSuite,\n\t\tinput: {\n\t\t\t...normalizedSuite.input,\n\t\t\tcases: caseIds.map((id) => caseMap.get(id)!)\n\t\t}\n\t};\n};\n\nexport const setRAGEvaluationSuiteCaseGoldenSet = ({\n\tsuite,\n\tcaseId,\n\tgoldenSet\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseId: string;\n\tgoldenSet: boolean;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst target = normalizedSuite.input.cases.find(\n\t\t(entry) => entry.id === caseId\n\t);\n\tif (!target) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite does not contain case id ${caseId}`\n\t\t);\n\t}\n\n\treturn updateRAGEvaluationSuiteCase({\n\t\tcaseId,\n\t\tcaseInput: {\n\t\t\t...target,\n\t\t\t...(goldenSet ? { goldenSet: true } : { goldenSet: undefined })\n\t\t},\n\t\tsuite: normalizedSuite\n\t});\n};\n\nconst resolveHardNegativeCaseField = (\n\tkind: 'chunkId' | 'source' | 'documentId'\n) =>\n\tkind === 'chunkId'\n\t\t? 'hardNegativeChunkIds'\n\t\t: kind === 'source'\n\t\t\t? 'hardNegativeSources'\n\t\t\t: 'hardNegativeDocumentIds';\n\nexport const addRAGEvaluationSuiteCaseHardNegative = ({\n\tsuite,\n\tcaseId,\n\tkind,\n\tvalue\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseId: string;\n\tkind: 'chunkId' | 'source' | 'documentId';\n\tvalue: string;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst target = normalizedSuite.input.cases.find(\n\t\t(entry) => entry.id === caseId\n\t);\n\tif (!target) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite does not contain case id ${caseId}`\n\t\t);\n\t}\n\n\tconst field = resolveHardNegativeCaseField(kind);\n\tconst nextValues = normalizeExpectedIds([\n\t\t...normalizeStringArray(target[field]),\n\t\tvalue\n\t]);\n\n\treturn updateRAGEvaluationSuiteCase({\n\t\tcaseId,\n\t\tcaseInput: {\n\t\t\t...target,\n\t\t\t[field]: nextValues\n\t\t},\n\t\tsuite: normalizedSuite\n\t});\n};\n\nexport const removeRAGEvaluationSuiteCaseHardNegative = ({\n\tsuite,\n\tcaseId,\n\tkind,\n\tvalue\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseId: string;\n\tkind: 'chunkId' | 'source' | 'documentId';\n\tvalue: string;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst target = normalizedSuite.input.cases.find(\n\t\t(entry) => entry.id === caseId\n\t);\n\tif (!target) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite does not contain case id ${caseId}`\n\t\t);\n\t}\n\n\tconst field = resolveHardNegativeCaseField(kind);\n\tconst nextValues = normalizeStringArray(target[field]).filter(\n\t\t(entry) => entry !== value.trim()\n\t);\n\n\treturn updateRAGEvaluationSuiteCase({\n\t\tcaseId,\n\t\tcaseInput: {\n\t\t\t...target,\n\t\t\t[field]: nextValues.length > 0 ? nextValues : undefined\n\t\t},\n\t\tsuite: normalizedSuite\n\t});\n};\n\nexport const summarizeRAGEvaluationSuiteDataset = ({\n\tsuite\n}: {\n\tsuite: RAGEvaluationSuite;\n}): RAGEvaluationSuiteDatasetSummary => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst cases = normalizedSuite.input.cases;\n\n\treturn {\n\t\tcaseCount: cases.length,\n\t\tgoldenSetCount: cases.filter((entry) => entry.goldenSet === true)\n\t\t\t.length,\n\t\thardNegativeCaseCount: cases.filter(\n\t\t\t(entry) =>\n\t\t\t\tnormalizeStringArray(entry.hardNegativeChunkIds).length > 0 ||\n\t\t\t\tnormalizeStringArray(entry.hardNegativeSources).length > 0 ||\n\t\t\t\tnormalizeStringArray(entry.hardNegativeDocumentIds).length > 0\n\t\t).length,\n\t\thardNegativeChunkIdCount: cases.reduce(\n\t\t\t(sum, entry) =>\n\t\t\t\tsum + normalizeStringArray(entry.hardNegativeChunkIds).length,\n\t\t\t0\n\t\t),\n\t\thardNegativeDocumentIdCount: cases.reduce(\n\t\t\t(sum, entry) =>\n\t\t\t\tsum +\n\t\t\t\tnormalizeStringArray(entry.hardNegativeDocumentIds).length,\n\t\t\t0\n\t\t),\n\t\thardNegativeSourceCount: cases.reduce(\n\t\t\t(sum, entry) =>\n\t\t\t\tsum + normalizeStringArray(entry.hardNegativeSources).length,\n\t\t\t0\n\t\t),\n\t\tsuiteId: normalizedSuite.id\n\t};\n};\n\nexport const generateRAGEvaluationSuiteFromDocuments = ({\n\tsuiteId,\n\tdocuments,\n\tlabel,\n\tdescription,\n\tmaxCases = 20,\n\ttopK = 5,\n\tscoreThreshold,\n\tfilter,\n\tretrieval,\n\tincludeGoldenSet = true,\n\thardNegativePerCase = 1,\n\tmetadata\n}: RAGEvaluationSuiteGenerationOptions): RAGEvaluationSuite => {\n\tconst normalizedDocuments = documents\n\t\t.filter(\n\t\t\t(document) =>\n\t\t\t\ttypeof document.id === 'string' &&\n\t\t\t\tdocument.id.trim().length > 0 &&\n\t\t\t\ttypeof document.source === 'string' &&\n\t\t\t\tdocument.source.trim().length > 0 &&\n\t\t\t\ttypeof document.title === 'string' &&\n\t\t\t\tdocument.title.trim().length > 0\n\t\t)\n\t\t.sort((left, right) =>\n\t\t\t`${left.source}\\u0000${left.title}\\u0000${left.id}`.localeCompare(\n\t\t\t\t`${right.source}\\u0000${right.title}\\u0000${right.id}`\n\t\t\t)\n\t\t)\n\t\t.slice(0, Math.max(0, Math.trunc(maxCases)));\n\n\tconst cases = normalizedDocuments.map((document, index) => {\n\t\tconst negativeCandidates = normalizedDocuments\n\t\t\t.slice(index + 1)\n\t\t\t.concat(normalizedDocuments.slice(0, index))\n\t\t\t.filter((candidate) => candidate.id !== document.id);\n\t\tconst hardNegativeDocumentIds = negativeCandidates\n\t\t\t.slice(0, Math.max(0, Math.trunc(hardNegativePerCase)))\n\t\t\t.map((candidate) => candidate.id);\n\t\tconst hardNegativeSources = negativeCandidates\n\t\t\t.slice(0, Math.max(0, Math.trunc(hardNegativePerCase)))\n\t\t\t.map((candidate) => candidate.source);\n\n\t\treturn {\n\t\t\tcorpusKey: document.corpusKey,\n\t\t\texpectedDocumentIds: [document.id],\n\t\t\texpectedSources: [document.source],\n\t\t\t...(includeGoldenSet ? { goldenSet: true } : {}),\n\t\t\t...(hardNegativeDocumentIds.length > 0\n\t\t\t\t? { hardNegativeDocumentIds }\n\t\t\t\t: {}),\n\t\t\t...(hardNegativeSources.length > 0 ? { hardNegativeSources } : {}),\n\t\t\tid: `synthetic-${document.id}`,\n\t\t\tlabel: document.title,\n\t\t\tquery: buildSyntheticEvaluationQuery(document)\n\t\t} satisfies RAGEvaluationCase;\n\t});\n\n\treturn createRAGEvaluationSuite({\n\t\tdescription,\n\t\tid: suiteId,\n\t\tinput: {\n\t\t\tcases,\n\t\t\t...(filter ? { filter: { ...filter } } : {}),\n\t\t\t...(typeof scoreThreshold === 'number' ? { scoreThreshold } : {}),\n\t\t\t...(typeof topK === 'number' ? { topK } : {}),\n\t\t\t...(retrieval ? { retrieval } : {})\n\t\t},\n\t\tlabel,\n\t\tmetadata\n\t});\n};\n\nexport const createRAGEvaluationSuiteSnapshot = ({\n\tsuite,\n\tid,\n\tversion = 1,\n\tcreatedAt = Date.now(),\n\tmetadata\n}: {\n\tsuite: RAGEvaluationSuite;\n\tid?: string;\n\tversion?: number;\n\tcreatedAt?: number;\n\tmetadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\treturn {\n\t\tcaseCount: normalizedSuite.input.cases.length,\n\t\tcreatedAt,\n\t\tid: id ?? `${normalizedSuite.id}:snapshot:${String(version)}`,\n\t\tlabel: normalizedSuite.label,\n\t\tdescription: normalizedSuite.description,\n\t\tmetadata: metadata ? { ...metadata } : undefined,\n\t\tsuite: normalizedSuite,\n\t\tsuiteId: normalizedSuite.id,\n\t\tversion\n\t};\n};\n\nconst stableStringifyEvaluationCase = (entry: RAGEvaluationCase) =>\n\tJSON.stringify({\n\t\t...entry,\n\t\texpectedChunkIds: entry.expectedChunkIds ?? [],\n\t\texpectedDocumentIds: entry.expectedDocumentIds ?? [],\n\t\texpectedSources: entry.expectedSources ?? [],\n\t\tgoldenSet: entry.goldenSet === true,\n\t\thardNegativeChunkIds: entry.hardNegativeChunkIds ?? [],\n\t\thardNegativeDocumentIds: entry.hardNegativeDocumentIds ?? [],\n\t\thardNegativeSources: entry.hardNegativeSources ?? [],\n\t\tfilter: entry.filter ?? {},\n\t\tmetadata: entry.metadata ?? {},\n\t\tretrieval: entry.retrieval ?? null\n\t});\n\nexport const buildRAGEvaluationSuiteSnapshotDiff = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGEvaluationSuiteSnapshot;\n\tprevious?: RAGEvaluationSuiteSnapshot;\n}): RAGEvaluationSuiteSnapshotDiff => {\n\tconst currentCases = current.suite.input.cases;\n\tconst previousCases = previous?.suite.input.cases ?? [];\n\tconst currentMap = new Map<string, RAGEvaluationCase>(\n\t\tcurrentCases.map((entry: RAGEvaluationCase) => [entry.id, entry])\n\t);\n\tconst previousMap = new Map<string, RAGEvaluationCase>(\n\t\tpreviousCases.map((entry: RAGEvaluationCase) => [entry.id, entry])\n\t);\n\tconst currentIds = currentCases.map((entry: RAGEvaluationCase) => entry.id);\n\tconst previousIds = previousCases.map(\n\t\t(entry: RAGEvaluationCase) => entry.id\n\t);\n\n\tconst addedCaseIds = currentIds.filter(\n\t\t(id: string) => !previousMap.has(id)\n\t);\n\tconst removedCaseIds = previousIds.filter(\n\t\t(id: string) => !currentMap.has(id)\n\t);\n\tconst changedCaseIds = currentIds.filter((id: string) => {\n\t\tconst currentCase = currentMap.get(id);\n\t\tconst previousCase = previousMap.get(id);\n\t\tif (!currentCase || !previousCase) {\n\t\t\treturn false;\n\t\t}\n\t\treturn (\n\t\t\tstableStringifyEvaluationCase(currentCase) !==\n\t\t\tstableStringifyEvaluationCase(previousCase)\n\t\t);\n\t});\n\tconst unchangedCaseIds = currentIds.filter((id: string) => {\n\t\tconst currentCase = currentMap.get(id);\n\t\tconst previousCase = previousMap.get(id);\n\t\tif (!currentCase || !previousCase) {\n\t\t\treturn false;\n\t\t}\n\t\treturn (\n\t\t\tstableStringifyEvaluationCase(currentCase) ===\n\t\t\tstableStringifyEvaluationCase(previousCase)\n\t\t);\n\t});\n\tconst sharedIds = currentIds.filter((id: string) => previousMap.has(id));\n\tconst orderChanged =\n\t\tsharedIds.length > 0 &&\n\t\tJSON.stringify(sharedIds) !==\n\t\t\tJSON.stringify(\n\t\t\t\tpreviousIds.filter((id: string) => currentMap.has(id))\n\t\t\t);\n\n\treturn {\n\t\taddedCaseIds,\n\t\tcaseCountDelta: current.caseCount - (previous?.caseCount ?? 0),\n\t\tchangedCaseIds,\n\t\tcurrentSnapshotId: current.id,\n\t\torderChanged,\n\t\tpreviousSnapshotId: previous?.id,\n\t\tremovedCaseIds,\n\t\tsuiteId: current.suiteId,\n\t\tunchangedCaseIds\n\t};\n};\nexport const evaluateRAGCollection = async ({\n\tcollection,\n\tinput,\n\tdefaultTopK = DEFAULT_TOP_K,\n\trerank\n}: {\n\tcollection: RAGCollection;\n\tinput: RAGEvaluationInput;\n\tdefaultTopK?: number;\n\trerank?: RAGRerankerProviderLike;\n}) => {\n\tconst evaluated = await evaluateRAGCollectionCases({\n\t\tcollection,\n\t\tdefaultTopK,\n\t\tincludeTrace: false,\n\t\tinput,\n\t\trerank\n\t});\n\n\treturn buildRAGEvaluationResponse(\n\t\tevaluated.map((entry) => entry.caseResult)\n\t);\n};\nexport const executeDryRunRAGEvaluation = (\n\tinput: RAGEvaluationInput,\n\tdefaultTopK = DEFAULT_TOP_K\n): RAGEvaluationCaseResult[] =>\n\tinput.cases.map((caseInput, caseIndex) => {\n\t\tconst mode = resolveEvaluationMode(caseInput);\n\t\tconst expectedIds = normalizeExpectedIds(\n\t\t\tmode === 'chunkId'\n\t\t\t\t? (caseInput.expectedChunkIds ?? [])\n\t\t\t\t: mode === 'source'\n\t\t\t\t\t? (caseInput.expectedSources ?? [])\n\t\t\t\t\t: (caseInput.expectedDocumentIds ?? [])\n\t\t);\n\t\tconst effectiveTopK =\n\t\t\ttypeof caseInput.topK === 'number'\n\t\t\t\t? caseInput.topK\n\t\t\t\t: typeof input.topK === 'number'\n\t\t\t\t\t? input.topK\n\t\t\t\t\t: defaultTopK;\n\n\t\treturn {\n\t\t\tcaseId: caseInput.id ?? `case-${caseIndex + 1}`,\n\t\t\telapsedMs: 0,\n\t\t\texpectedCount: expectedIds.length,\n\t\t\texpectedIds,\n\t\t\tfailureClasses: classifyRAGEvaluationFailure({\n\t\t\t\texpectedCount: expectedIds.length,\n\t\t\t\tmatchedCount: 0,\n\t\t\t\tmissingIds: expectedIds,\n\t\t\t\tretrievedCount: 0,\n\t\t\t\tretrievedIds: []\n\t\t\t}),\n\t\t\tf1: 0,\n\t\t\tlabel: caseInput.label,\n\t\t\tmatchedCount: 0,\n\t\t\tmatchedIds: [],\n\t\t\tmissingIds: expectedIds,\n\t\t\tmode,\n\t\t\tprecision: 0,\n\t\t\tquery: caseInput.query,\n\t\t\trecall: 0,\n\t\t\tretrievedCount: 0,\n\t\t\tretrievedIds: [],\n\t\t\tstatus: expectedIds.length === 0 ? 'partial' : 'fail',\n\t\t\ttopK: effectiveTopK\n\t\t};\n\t});\nexport const runRAGEvaluationSuite = async ({\n\tsuite,\n\tevaluate,\n\toverrides,\n\tartifacts\n}: {\n\tsuite: RAGEvaluationSuite;\n\tevaluate: (input: RAGEvaluationInput) => Promise<RAGEvaluationResponse>;\n\toverrides?: Partial<RAGEvaluationInput>;\n\tartifacts?: Pick<\n\t\tRAGEvaluationSuiteRun,\n\t\t'traceSummary' | 'caseTraceSnapshots'\n\t>;\n}) => {\n\tconst startedAt = Date.now();\n\tconst response = await evaluate({\n\t\t...suite.input,\n\t\t...overrides,\n\t\tcases: overrides?.cases ?? suite.input.cases\n\t});\n\tconst finishedAt = Date.now();\n\n\treturn {\n\t\tcaseTraceSnapshots: artifacts?.caseTraceSnapshots,\n\t\telapsedMs: finishedAt - startedAt,\n\t\tfinishedAt,\n\t\tid: generateId(),\n\t\tlabel: suite.label ?? suite.id,\n\t\tmetadata: suite.metadata,\n\t\tresponse,\n\t\tstartedAt,\n\t\tsuiteId: suite.id,\n\t\ttraceSummary: artifacts?.traceSummary\n\t} satisfies RAGEvaluationSuiteRun;\n};\nexport const summarizeRAGEvaluationCase = ({\n\tcaseIndex,\n\tcaseInput,\n\tquery,\n\tmode,\n\tretrievedIds,\n\texpectedIds,\n\telapsedMs,\n\tretrievedSources,\n\ttrace\n}: {\n\tcaseIndex: number;\n\tcaseInput: RAGEvaluationCase;\n\tmode: 'chunkId' | 'source' | 'documentId';\n\tquery: string;\n\tretrievedIds: string[];\n\texpectedIds: string[];\n\telapsedMs: number;\n\tretrievedSources?: RAGSource[];\n\ttrace?: RAGSearchTraceRecord | RAGRetrievalTrace;\n}): RAGEvaluationCaseResult => {\n\tconst expectedSet = new Set(expectedIds);\n\tconst retrievedSet = new Set(retrievedIds);\n\tconst matchedIds = normalizeExpectedIds(\n\t\t[...expectedSet].filter((id) => retrievedSet.has(id))\n\t);\n\tconst missingIds = normalizeExpectedIds(\n\t\t[...expectedSet].filter((id) => !retrievedSet.has(id))\n\t);\n\tconst matchedCount = matchedIds.length;\n\tconst retrievedCount = retrievedIds.length;\n\tconst expectedCount = expectedIds.length;\n\tconst precision = retrievedCount > 0 ? matchedCount / retrievedCount : 0;\n\tconst recall = expectedCount > 0 ? matchedCount / expectedCount : 0;\n\tconst f1 =\n\t\tprecision + recall > 0\n\t\t\t? (2 * precision * recall) / (precision + recall)\n\t\t\t: 0;\n\tconst status: RAGEvaluationCaseResult['status'] =\n\t\texpectedCount === 0\n\t\t\t? 'partial'\n\t\t\t: matchedCount === expectedCount\n\t\t\t\t? 'pass'\n\t\t\t\t: matchedCount > 0\n\t\t\t\t\t? 'partial'\n\t\t\t\t\t: 'fail';\n\n\treturn {\n\t\tcaseId: caseInput.id ?? `case-${caseIndex + 1}`,\n\t\tcorpusKey: caseInput.corpusKey,\n\t\telapsedMs,\n\t\texpectedCount,\n\t\texpectedIds,\n\t\tfailureClasses: classifyRAGEvaluationFailure({\n\t\t\texpectedCount,\n\t\t\tmatchedCount,\n\t\t\tmissingIds,\n\t\t\tretrievedCount,\n\t\t\tretrievedIds,\n\t\t\tretrievedSources,\n\t\t\ttrace\n\t\t}),\n\t\tf1,\n\t\tlabel: caseInput.label,\n\t\tmatchedCount,\n\t\tmatchedIds,\n\t\tmetadata: caseInput.metadata,\n\t\tmissingIds,\n\t\tmode,\n\t\tprecision,\n\t\tquery,\n\t\trecall,\n\t\tretrievedCount,\n\t\tretrievedIds,\n\t\tstatus,\n\t\ttopK:\n\t\t\ttypeof caseInput.topK === 'number' ? caseInput.topK : DEFAULT_TOP_K\n\t};\n};\nexport const summarizeRAGRerankerComparison = (\n\tentries: RAGRerankerComparisonEntry[]\n): RAGRerankerComparisonSummary => {\n\treturn summarizeEvaluationResponseComparison(\n\t\tentries,\n\t\t'rerankerId'\n\t) satisfies RAGRerankerComparisonSummary;\n};\nexport const summarizeRAGRetrievalComparison = (\n\tentries: RAGRetrievalComparisonEntry[]\n): RAGRetrievalComparisonSummary =>\n\tsummarizeEvaluationResponseComparison(\n\t\tentries,\n\t\t'retrievalId'\n\t) satisfies RAGRetrievalComparisonSummary;\n",
|
|
7
|
+
"import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport type { Database } from 'bun:sqlite';\nimport type {\n\tRAGAnswerGroundingCaseDifficultyDiffEntry,\n\tRAGAnswerGroundingCaseDifficultyHistory,\n\tRAGAnswerGroundingCaseDifficultyHistoryStore,\n\tRAGAnswerGroundingCaseDifficultyRun,\n\tRAGAnswerGroundingCaseDifficultyRunDiff,\n\tRAGAnswerGroundingEvaluationCaseDiff,\n\tRAGAnswerGroundingEvaluationCase,\n\tRAGAnswerGroundingEvaluationCaseDifficultyEntry,\n\tRAGAnswerGroundingEvaluationCaseSnapshot,\n\tRAGAnswerGroundingEvaluationCaseResult,\n\tRAGAnswerGroundingEvaluationHistory,\n\tRAGAnswerGroundingEvaluationLeaderboardEntry,\n\tRAGAnswerGroundingEvaluationHistoryStore,\n\tRAGAnswerGroundingEvaluationInput,\n\tRAGAnswerGroundingEvaluationResponse,\n\tRAGAnswerGroundingEvaluationRun,\n\tRAGAnswerGroundingEvaluationRunDiff,\n\tRAGCollection,\n\tRAGIndexedDocument,\n\tRAGEvaluationCase,\n\tRAGEvaluationCaseDiff,\n\tRAGEvaluationCaseTraceSnapshot,\n\tRAGEvaluationCaseResult,\n\tRAGEvaluationHistory,\n\tRAGEvaluationHistoryStore,\n\tRAGEvaluationHistoryPruneInput,\n\tRAGEvaluationHistoryPruneResult,\n\tRAGEvaluationInput,\n\tRAGEvaluationLeaderboardEntry,\n\tRAGEvaluationResponse,\n\tRAGEvaluationRunDiff,\n\tRAGLabelValueRow,\n\tRAGComparisonPresentation,\n\tRAGComparisonOverviewPresentation,\n\tRAGGroundingProviderPresentation,\n\tRAGGroundingProviderOverviewPresentation,\n\tRAGGroundingProviderCaseComparisonPresentation,\n\tRAGGroundingOverviewPresentation,\n\tRAGQualityOverviewPresentation,\n\tRAGEvaluationSuite,\n\tRAGEvaluationSuiteGenerationOptions,\n\tRAGEvaluationSuiteDatasetSummary,\n\tRAGEvaluationSuiteSnapshot,\n\tRAGEvaluationSuiteSnapshotDiff,\n\tRAGEvaluationSuiteSnapshotHistory,\n\tRAGEvaluationSuiteSnapshotHistoryStore,\n\tRAGEvaluationSuiteRun,\n\tRAGEvaluationEntityQualitySummary,\n\tRAGEvaluationEntityQualityView,\n\tRAGAnswerGroundingEntityQualitySummary,\n\tRAGAnswerGroundingEntityQualityView,\n\tRAGRetrievalTraceSummaryRun,\n\tRAGHybridRetrievalMode,\n\tRAGSourceBalanceStrategy,\n\tRAGRetrievalCandidate,\n\tRAGRetrievalComparison,\n\tRAGRetrievalBaselineGatePolicy,\n\tRAGRetrievalBaselineGatePolicyHistoryRecord,\n\tRAGRetrievalBaselineGatePolicyHistoryStore,\n\tRAGRetrievalComparisonDecisionSummary,\n\tRAGRetrievalComparisonGateResult,\n\tRAGRetrievalReleaseVerdict,\n\tRAGRetrievalComparisonHistoryStore,\n\tRAGRetrievalBaselineRecord,\n\tRAGRetrievalBaselineStore,\n\tRAGRetrievalLaneHandoffDecisionRecord,\n\tRAGRetrievalLaneHandoffDecisionStore,\n\tRAGRetrievalLaneHandoffIncidentHistoryRecord,\n\tRAGRetrievalLaneHandoffIncidentHistoryStore,\n\tRAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n\tRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore,\n\tRAGRetrievalLaneHandoffIncidentRecord,\n\tRAGRetrievalLaneHandoffIncidentStore,\n\tRAGRetrievalIncidentRemediationDecisionRecord,\n\tRAGRetrievalIncidentRemediationDecisionStore,\n\tRAGRetrievalIncidentRemediationExecutionHistoryRecord,\n\tRAGRetrievalIncidentRemediationExecutionHistoryStore,\n\tRAGRetrievalReleaseDecisionRecord,\n\tRAGRetrievalReleaseLanePolicyHistoryRecord,\n\tRAGRetrievalReleaseLanePolicyHistoryStore,\n\tRAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n\tRAGRetrievalReleaseLaneEscalationPolicyHistoryStore,\n\tRAGRetrievalReleaseDecisionStore,\n\tRAGRetrievalReleaseIncidentRecord,\n\tRAGRetrievalReleaseIncidentStore,\n\tRAGRetrievalComparisonRun,\n\tRAGRetrievalComparisonEntry,\n\tRAGRetrievalTrace,\n\tRAGRetrievalTraceComparisonSummary,\n\tRAGRetrievalTraceComparisonSummaryDiff,\n\tRAGRetrievalTraceStep,\n\tRAGRetrievalTraceStage,\n\tRAGQueryResult,\n\tRAGTraceSummaryListTrend,\n\tRAGTraceSummaryTrendDirection,\n\tRAGTraceSummaryNumericDelta,\n\tRAGTraceSummaryStageTrend,\n\tRAGTraceSummaryStageCountsDelta,\n\tRAGRetrievalComparisonSummary,\n\tRAGRetrievalTraceHistoryWindow,\n\tRAGRerankerCandidate,\n\tRAGRerankerComparison,\n\tRAGRerankerComparisonEntry,\n\tRAGRerankerComparisonSummary,\n\tRAGRerankerProviderLike,\n\tRAGRetrievalTraceTrend,\n\tRAGSearchTraceDiff,\n\tRAGSearchTraceGroupHistory,\n\tRAGSearchTraceGroupHistoryEntry,\n\tRAGSearchTraceHistory,\n\tRAGChatPluginConfig,\n\tRAGSearchTracePruneInput,\n\tRAGSearchTracePruneHistoryStore,\n\tRAGSearchTracePruneRun,\n\tRAGSearchTracePrunePreview,\n\tRAGSearchTracePruneResult,\n\tRAGSearchTraceRecord,\n\tRAGSearchTraceResultSnapshot,\n\tRAGSearchTraceStats,\n\tRAGSearchTraceStore,\n\tRAGRemediationAction,\n\tRAGSource,\n\tRAGCollectionSearchParams,\n\tRAGSQLiteStoreMigrationInspection,\n\tRAGSQLiteStoreMigrationIssue,\n\tRAGSQLiteStoreMigrationResult\n} from '../../../types/ai';\nimport { generateId } from '../protocol';\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\ttypeof value === 'string' && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n\nconst getTraceLabelNumber = (value: unknown) =>\n\ttypeof value === 'number' && Number.isFinite(value) ? value : undefined;\n\nconst formatTraceSpreadsheetTableLabel = (\n\ttableIndex?: number,\n\ttableCount?: number\n) => {\n\tif (\n\t\ttypeof tableIndex !== 'number' ||\n\t\t!Number.isFinite(tableIndex) ||\n\t\ttableIndex < 1\n\t) {\n\t\treturn undefined;\n\t}\n\n\tif (\n\t\ttypeof tableCount === 'number' &&\n\t\tNumber.isFinite(tableCount) &&\n\t\ttableCount >= tableIndex\n\t) {\n\t\treturn `Table ${tableIndex} of ${tableCount}`;\n\t}\n\n\treturn `Table ${tableIndex}`;\n};\n\nconst formatTraceSourceAwareChunkReason = (value: unknown) => {\n\tconst reason = getTraceLabelString(value);\n\tif (reason === 'section_boundary') {\n\t\treturn 'Chunk boundary section';\n\t}\n\tif (reason === 'size_limit') {\n\t\treturn 'Chunk boundary size limit';\n\t}\n\tif (reason === 'source_native_unit') {\n\t\treturn 'Chunk boundary source-native unit';\n\t}\n\treturn undefined;\n};\n\nconst buildTraceSourceAwareUnitScopeLabel = (\n\tmetadata?: Record<string, unknown>\n) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst sectionKind = getTraceLabelString(metadata.sectionKind);\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath\n\t\t\t\t.map((value) => getTraceLabelString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\tconst sectionTitle =\n\t\tgetTraceLabelString(metadata.sectionTitle) ?? sectionPath.at(-1);\n\tconst pdfTextKind = getTraceLabelString(metadata.pdfTextKind);\n\tconst officeBlockKind = getTraceLabelString(metadata.officeBlockKind);\n\tconst sheetName = getTraceLabelString(metadata.sheetName);\n\tconst spreadsheetTableLabel = formatTraceSpreadsheetTableLabel(\n\t\tgetTraceLabelNumber(metadata.spreadsheetTableIndex),\n\t\tgetTraceLabelNumber(metadata.spreadsheetTableCount)\n\t);\n\tconst slideTitle = getTraceLabelString(metadata.slideTitle);\n\tconst slideNumber =\n\t\tgetTraceLabelNumber(metadata.slideNumber) ??\n\t\t(typeof metadata.slideIndex === 'number'\n\t\t\t? metadata.slideIndex + 1\n\t\t\t: undefined);\n\n\tif (\n\t\tsectionPath.length > 0 &&\n\t\t(sectionKind === 'markdown_heading' ||\n\t\t\tsectionKind === 'html_heading' ||\n\t\t\tsectionKind === 'office_heading' ||\n\t\t\tsectionKind === undefined)\n\t) {\n\t\treturn `Source-aware section ${sectionPath.join(' > ')}`;\n\t}\n\n\tif (sectionKind === 'pdf_block') {\n\t\tif (pdfTextKind === 'table_like' && sectionTitle) {\n\t\t\treturn `Source-aware PDF table block ${sectionTitle}`;\n\t\t}\n\t\tif (sectionTitle) {\n\t\t\treturn `Source-aware PDF block ${sectionTitle}`;\n\t\t}\n\t\treturn 'Source-aware PDF block';\n\t}\n\n\tif (sectionKind === 'office_block') {\n\t\tif (officeBlockKind && sectionTitle) {\n\t\t\treturn `Source-aware office ${officeBlockKind} block ${sectionTitle}`;\n\t\t}\n\t\tif (sectionTitle) {\n\t\t\treturn `Source-aware office block ${sectionTitle}`;\n\t\t}\n\t\treturn 'Source-aware office block';\n\t}\n\n\tif (\n\t\tsectionKind === 'spreadsheet_rows' ||\n\t\t(sectionKind === undefined &&\n\t\t\t(sheetName ||\n\t\t\t\tspreadsheetTableLabel ||\n\t\t\t\tgetTraceLabelNumber(metadata.spreadsheetRowStart) !==\n\t\t\t\t\tundefined ||\n\t\t\t\tgetTraceLabelNumber(metadata.spreadsheetRowEnd) !== undefined))\n\t) {\n\t\tif (sheetName && spreadsheetTableLabel) {\n\t\t\treturn `Source-aware spreadsheet ${sheetName} ${spreadsheetTableLabel}`;\n\t\t}\n\t\tif (sheetName) {\n\t\t\treturn `Source-aware spreadsheet ${sheetName}`;\n\t\t}\n\t\treturn 'Source-aware spreadsheet';\n\t}\n\n\tif (sectionKind === 'presentation_slide') {\n\t\tif (slideNumber && slideTitle) {\n\t\t\treturn `Source-aware slide ${slideNumber} ${slideTitle}`;\n\t\t}\n\t\tif (slideTitle) {\n\t\t\treturn `Source-aware slide ${slideTitle}`;\n\t\t}\n\t\tif (slideNumber) {\n\t\t\treturn `Source-aware slide ${slideNumber}`;\n\t\t}\n\t\treturn 'Source-aware slide';\n\t}\n\n\treturn undefined;\n};\n\nconst buildEvaluationLeadSnapshot = (input?: {\n\tmetadata?: Record<string, unknown>;\n\tsource?: string;\n\ttitle?: string;\n}): Pick<\n\tRAGEvaluationCaseTraceSnapshot,\n\t| 'topContextLabel'\n\t| 'topLocatorLabel'\n\t| 'sourceAwareChunkReasonLabel'\n\t| 'sourceAwareUnitScopeLabel'\n> => {\n\tconst labels = buildRAGSourceLabels({\n\t\tmetadata: input?.metadata,\n\t\tsource: input?.source,\n\t\ttitle: input?.title\n\t});\n\n\treturn {\n\t\tsourceAwareChunkReasonLabel: formatTraceSourceAwareChunkReason(\n\t\t\tinput?.metadata?.sourceAwareChunkReason\n\t\t),\n\t\tsourceAwareUnitScopeLabel: buildTraceSourceAwareUnitScopeLabel(\n\t\t\tinput?.metadata\n\t\t),\n\t\ttopContextLabel: labels?.contextLabel,\n\t\ttopLocatorLabel: labels?.locatorLabel\n\t};\n};\n\nconst buildEvaluationLeadMediaCueSnapshot = (\n\ttrace?: RAGRetrievalTrace\n): Pick<\n\tRAGEvaluationCaseTraceSnapshot,\n\t| 'leadSpeakerCue'\n\t| 'leadSpeakerAttributionCue'\n\t| 'leadChannelCue'\n\t| 'leadChannelAttributionCue'\n\t| 'leadContinuityCue'\n> => {\n\tconst rerankStep = trace?.steps.find((step) => step.stage === 'rerank');\n\tconst metadata = rerankStep?.metadata ?? {};\n\n\treturn {\n\t\tleadChannelAttributionCue:\n\t\t\ttypeof metadata.leadChannelAttributionCue === 'string'\n\t\t\t\t? metadata.leadChannelAttributionCue\n\t\t\t\t: undefined,\n\t\tleadChannelCue:\n\t\t\ttypeof metadata.leadChannelCue === 'string'\n\t\t\t\t? metadata.leadChannelCue\n\t\t\t\t: undefined,\n\t\tleadContinuityCue:\n\t\t\ttypeof metadata.leadContinuityCue === 'string'\n\t\t\t\t? metadata.leadContinuityCue\n\t\t\t\t: undefined,\n\t\tleadSpeakerAttributionCue:\n\t\t\ttypeof metadata.leadSpeakerAttributionCue === 'string'\n\t\t\t\t? metadata.leadSpeakerAttributionCue\n\t\t\t\t: undefined,\n\t\tleadSpeakerCue:\n\t\t\ttypeof metadata.leadSpeakerCue === 'string'\n\t\t\t\t? metadata.leadSpeakerCue\n\t\t\t\t: undefined\n\t};\n};\n\nconst buildEvaluationSQLiteQueryPlanSnapshot = (\n\ttrace?: RAGRetrievalTrace\n): Pick<\n\tRAGEvaluationCaseTraceSnapshot,\n\t| 'sqliteQueryMode'\n\t| 'sqliteQueryPushdownMode'\n\t| 'sqliteQueryPushdownApplied'\n\t| 'sqliteQueryPushdownClauseCount'\n\t| 'sqliteQueryTotalFilterClauseCount'\n\t| 'sqliteQueryJsRemainderClauseCount'\n\t| 'sqliteQueryMultiplierUsed'\n\t| 'sqliteQueryCandidateLimitUsed'\n\t| 'sqliteQueryMaxBackfillsUsed'\n\t| 'sqliteQueryMinResultsUsed'\n\t| 'sqliteQueryFillPolicyUsed'\n\t| 'sqliteQueryPushdownCoverageRatio'\n\t| 'sqliteQueryJsRemainderRatio'\n\t| 'sqliteQueryFilteredCandidates'\n\t| 'sqliteQueryInitialSearchK'\n\t| 'sqliteQueryFinalSearchK'\n\t| 'sqliteQuerySearchExpansionRatio'\n\t| 'sqliteQueryBackfillCount'\n\t| 'sqliteQueryBackfillLimitReached'\n\t| 'sqliteQueryMinResultsSatisfied'\n\t| 'sqliteQueryReturnedCount'\n\t| 'sqliteQueryCandidateYieldRatio'\n\t| 'sqliteQueryTopKFillRatio'\n\t| 'sqliteQueryUnderfilledTopK'\n\t| 'sqliteQueryCandidateBudgetExhausted'\n\t| 'sqliteQueryCandidateCoverage'\n> => {\n\tconst vectorStep = trace?.steps.find(\n\t\t(step) => step.stage === 'vector_search'\n\t);\n\tconst metadata = vectorStep?.metadata ?? {};\n\n\treturn {\n\t\tsqliteQueryBackfillCount:\n\t\t\ttypeof metadata.sqliteQueryBackfillCount === 'number'\n\t\t\t\t? metadata.sqliteQueryBackfillCount\n\t\t\t\t: undefined,\n\t\tsqliteQueryCandidateBudgetExhausted:\n\t\t\ttypeof metadata.sqliteQueryCandidateBudgetExhausted === 'boolean'\n\t\t\t\t? metadata.sqliteQueryCandidateBudgetExhausted\n\t\t\t\t: undefined,\n\t\tsqliteQueryCandidateCoverage:\n\t\t\tmetadata.sqliteQueryCandidateCoverage === 'empty' ||\n\t\t\tmetadata.sqliteQueryCandidateCoverage === 'under_target' ||\n\t\t\tmetadata.sqliteQueryCandidateCoverage === 'target_sized' ||\n\t\t\tmetadata.sqliteQueryCandidateCoverage === 'broad'\n\t\t\t\t? metadata.sqliteQueryCandidateCoverage\n\t\t\t\t: undefined,\n\t\tsqliteQueryFilteredCandidates:\n\t\t\ttypeof metadata.sqliteQueryFilteredCandidates === 'number'\n\t\t\t\t? metadata.sqliteQueryFilteredCandidates\n\t\t\t\t: undefined,\n\t\tsqliteQueryFinalSearchK:\n\t\t\ttypeof metadata.sqliteQueryFinalSearchK === 'number'\n\t\t\t\t? metadata.sqliteQueryFinalSearchK\n\t\t\t\t: undefined,\n\t\tsqliteQueryInitialSearchK:\n\t\t\ttypeof metadata.sqliteQueryInitialSearchK === 'number'\n\t\t\t\t? metadata.sqliteQueryInitialSearchK\n\t\t\t\t: undefined,\n\t\tsqliteQuerySearchExpansionRatio:\n\t\t\ttypeof metadata.sqliteQuerySearchExpansionRatio === 'number'\n\t\t\t\t? metadata.sqliteQuerySearchExpansionRatio\n\t\t\t\t: undefined,\n\t\tsqliteQueryMode:\n\t\t\tmetadata.sqliteQueryMode === 'json_fallback' ||\n\t\t\tmetadata.sqliteQueryMode === 'native_vec0'\n\t\t\t\t? metadata.sqliteQueryMode\n\t\t\t\t: undefined,\n\t\tsqliteQueryPushdownMode:\n\t\t\tmetadata.sqliteQueryPushdownMode === 'none' ||\n\t\t\tmetadata.sqliteQueryPushdownMode === 'partial' ||\n\t\t\tmetadata.sqliteQueryPushdownMode === 'full'\n\t\t\t\t? metadata.sqliteQueryPushdownMode\n\t\t\t\t: undefined,\n\t\tsqliteQueryPushdownApplied:\n\t\t\ttypeof metadata.sqliteQueryPushdownApplied === 'boolean'\n\t\t\t\t? metadata.sqliteQueryPushdownApplied\n\t\t\t\t: undefined,\n\t\tsqliteQueryPushdownClauseCount:\n\t\t\ttypeof metadata.sqliteQueryPushdownClauseCount === 'number'\n\t\t\t\t? metadata.sqliteQueryPushdownClauseCount\n\t\t\t\t: undefined,\n\t\tsqliteQueryTotalFilterClauseCount:\n\t\t\ttypeof metadata.sqliteQueryTotalFilterClauseCount === 'number'\n\t\t\t\t? metadata.sqliteQueryTotalFilterClauseCount\n\t\t\t\t: undefined,\n\t\tsqliteQueryJsRemainderClauseCount:\n\t\t\ttypeof metadata.sqliteQueryJsRemainderClauseCount === 'number'\n\t\t\t\t? metadata.sqliteQueryJsRemainderClauseCount\n\t\t\t\t: undefined,\n\t\tsqliteQueryMultiplierUsed:\n\t\t\ttypeof metadata.sqliteQueryMultiplierUsed === 'number'\n\t\t\t\t? metadata.sqliteQueryMultiplierUsed\n\t\t\t\t: undefined,\n\t\tsqliteQueryCandidateLimitUsed:\n\t\t\ttypeof metadata.sqliteQueryCandidateLimitUsed === 'number'\n\t\t\t\t? metadata.sqliteQueryCandidateLimitUsed\n\t\t\t\t: undefined,\n\t\tsqliteQueryMaxBackfillsUsed:\n\t\t\ttypeof metadata.sqliteQueryMaxBackfillsUsed === 'number'\n\t\t\t\t? metadata.sqliteQueryMaxBackfillsUsed\n\t\t\t\t: undefined,\n\t\tsqliteQueryMinResultsUsed:\n\t\t\ttypeof metadata.sqliteQueryMinResultsUsed === 'number'\n\t\t\t\t? metadata.sqliteQueryMinResultsUsed\n\t\t\t\t: undefined,\n\t\tsqliteQueryFillPolicyUsed:\n\t\t\tmetadata.sqliteQueryFillPolicyUsed === 'strict_topk' ||\n\t\t\tmetadata.sqliteQueryFillPolicyUsed === 'satisfy_min_results'\n\t\t\t\t? metadata.sqliteQueryFillPolicyUsed\n\t\t\t\t: undefined,\n\t\tsqliteQueryPushdownCoverageRatio:\n\t\t\ttypeof metadata.sqliteQueryPushdownCoverageRatio === 'number'\n\t\t\t\t? metadata.sqliteQueryPushdownCoverageRatio\n\t\t\t\t: undefined,\n\t\tsqliteQueryJsRemainderRatio:\n\t\t\ttypeof metadata.sqliteQueryJsRemainderRatio === 'number'\n\t\t\t\t? metadata.sqliteQueryJsRemainderRatio\n\t\t\t\t: undefined,\n\t\tsqliteQueryReturnedCount:\n\t\t\ttypeof metadata.sqliteQueryReturnedCount === 'number'\n\t\t\t\t? metadata.sqliteQueryReturnedCount\n\t\t\t\t: undefined,\n\t\tsqliteQueryCandidateYieldRatio:\n\t\t\ttypeof metadata.sqliteQueryCandidateYieldRatio === 'number'\n\t\t\t\t? metadata.sqliteQueryCandidateYieldRatio\n\t\t\t\t: undefined,\n\t\tsqliteQueryBackfillLimitReached:\n\t\t\ttypeof metadata.sqliteQueryBackfillLimitReached === 'boolean'\n\t\t\t\t? metadata.sqliteQueryBackfillLimitReached\n\t\t\t\t: undefined,\n\t\tsqliteQueryMinResultsSatisfied:\n\t\t\ttypeof metadata.sqliteQueryMinResultsSatisfied === 'boolean'\n\t\t\t\t? metadata.sqliteQueryMinResultsSatisfied\n\t\t\t\t: undefined,\n\t\tsqliteQueryTopKFillRatio:\n\t\t\ttypeof metadata.sqliteQueryTopKFillRatio === 'number'\n\t\t\t\t? metadata.sqliteQueryTopKFillRatio\n\t\t\t\t: undefined,\n\t\tsqliteQueryUnderfilledTopK:\n\t\t\ttypeof metadata.sqliteQueryUnderfilledTopK === 'boolean'\n\t\t\t\t? metadata.sqliteQueryUnderfilledTopK\n\t\t\t\t: undefined\n\t};\n};\n\nconst buildEvaluationPostgresQueryPlanSnapshot = (\n\ttrace?: RAGRetrievalTrace\n): Pick<\n\tRAGEvaluationCaseTraceSnapshot,\n\t| 'postgresQueryMode'\n\t| 'postgresQueryPushdownMode'\n\t| 'postgresQueryPushdownApplied'\n\t| 'postgresQueryPushdownClauseCount'\n\t| 'postgresQueryTotalFilterClauseCount'\n\t| 'postgresQueryJsRemainderClauseCount'\n\t| 'postgresQueryMultiplierUsed'\n\t| 'postgresQueryCandidateLimitUsed'\n\t| 'postgresQueryMaxBackfillsUsed'\n\t| 'postgresQueryMinResultsUsed'\n\t| 'postgresQueryFillPolicyUsed'\n\t| 'postgresQueryPushdownCoverageRatio'\n\t| 'postgresQueryJsRemainderRatio'\n\t| 'postgresQueryFilteredCandidates'\n\t| 'postgresQueryInitialSearchK'\n\t| 'postgresQueryFinalSearchK'\n\t| 'postgresQuerySearchExpansionRatio'\n\t| 'postgresQueryBackfillCount'\n\t| 'postgresQueryBackfillLimitReached'\n\t| 'postgresQueryMinResultsSatisfied'\n\t| 'postgresQueryReturnedCount'\n\t| 'postgresQueryCandidateYieldRatio'\n\t| 'postgresQueryTopKFillRatio'\n\t| 'postgresQueryUnderfilledTopK'\n\t| 'postgresQueryCandidateBudgetExhausted'\n\t| 'postgresQueryCandidateCoverage'\n> => {\n\tconst vectorStep = trace?.steps.find(\n\t\t(step) => step.stage === 'vector_search'\n\t);\n\tconst metadata = vectorStep?.metadata ?? {};\n\n\treturn {\n\t\tpostgresQueryBackfillCount:\n\t\t\ttypeof metadata.postgresQueryBackfillCount === 'number'\n\t\t\t\t? metadata.postgresQueryBackfillCount\n\t\t\t\t: undefined,\n\t\tpostgresQueryCandidateBudgetExhausted:\n\t\t\ttypeof metadata.postgresQueryCandidateBudgetExhausted === 'boolean'\n\t\t\t\t? metadata.postgresQueryCandidateBudgetExhausted\n\t\t\t\t: undefined,\n\t\tpostgresQueryCandidateCoverage:\n\t\t\tmetadata.postgresQueryCandidateCoverage === 'empty' ||\n\t\t\tmetadata.postgresQueryCandidateCoverage === 'under_target' ||\n\t\t\tmetadata.postgresQueryCandidateCoverage === 'target_sized' ||\n\t\t\tmetadata.postgresQueryCandidateCoverage === 'broad'\n\t\t\t\t? metadata.postgresQueryCandidateCoverage\n\t\t\t\t: undefined,\n\t\tpostgresQueryFilteredCandidates:\n\t\t\ttypeof metadata.postgresQueryFilteredCandidates === 'number'\n\t\t\t\t? metadata.postgresQueryFilteredCandidates\n\t\t\t\t: undefined,\n\t\tpostgresQueryFinalSearchK:\n\t\t\ttypeof metadata.postgresQueryFinalSearchK === 'number'\n\t\t\t\t? metadata.postgresQueryFinalSearchK\n\t\t\t\t: undefined,\n\t\tpostgresQueryInitialSearchK:\n\t\t\ttypeof metadata.postgresQueryInitialSearchK === 'number'\n\t\t\t\t? metadata.postgresQueryInitialSearchK\n\t\t\t\t: undefined,\n\t\tpostgresQuerySearchExpansionRatio:\n\t\t\ttypeof metadata.postgresQuerySearchExpansionRatio === 'number'\n\t\t\t\t? metadata.postgresQuerySearchExpansionRatio\n\t\t\t\t: undefined,\n\t\tpostgresQueryMode:\n\t\t\tmetadata.postgresQueryMode === 'native_pgvector'\n\t\t\t\t? metadata.postgresQueryMode\n\t\t\t\t: undefined,\n\t\tpostgresQueryPushdownMode:\n\t\t\tmetadata.postgresQueryPushdownMode === 'none' ||\n\t\t\tmetadata.postgresQueryPushdownMode === 'partial' ||\n\t\t\tmetadata.postgresQueryPushdownMode === 'full'\n\t\t\t\t? metadata.postgresQueryPushdownMode\n\t\t\t\t: undefined,\n\t\tpostgresQueryPushdownApplied:\n\t\t\ttypeof metadata.postgresQueryPushdownApplied === 'boolean'\n\t\t\t\t? metadata.postgresQueryPushdownApplied\n\t\t\t\t: undefined,\n\t\tpostgresQueryPushdownClauseCount:\n\t\t\ttypeof metadata.postgresQueryPushdownClauseCount === 'number'\n\t\t\t\t? metadata.postgresQueryPushdownClauseCount\n\t\t\t\t: undefined,\n\t\tpostgresQueryTotalFilterClauseCount:\n\t\t\ttypeof metadata.postgresQueryTotalFilterClauseCount === 'number'\n\t\t\t\t? metadata.postgresQueryTotalFilterClauseCount\n\t\t\t\t: undefined,\n\t\tpostgresQueryJsRemainderClauseCount:\n\t\t\ttypeof metadata.postgresQueryJsRemainderClauseCount === 'number'\n\t\t\t\t? metadata.postgresQueryJsRemainderClauseCount\n\t\t\t\t: undefined,\n\t\tpostgresQueryMultiplierUsed:\n\t\t\ttypeof metadata.postgresQueryMultiplierUsed === 'number'\n\t\t\t\t? metadata.postgresQueryMultiplierUsed\n\t\t\t\t: undefined,\n\t\tpostgresQueryCandidateLimitUsed:\n\t\t\ttypeof metadata.postgresQueryCandidateLimitUsed === 'number'\n\t\t\t\t? metadata.postgresQueryCandidateLimitUsed\n\t\t\t\t: undefined,\n\t\tpostgresQueryMaxBackfillsUsed:\n\t\t\ttypeof metadata.postgresQueryMaxBackfillsUsed === 'number'\n\t\t\t\t? metadata.postgresQueryMaxBackfillsUsed\n\t\t\t\t: undefined,\n\t\tpostgresQueryMinResultsUsed:\n\t\t\ttypeof metadata.postgresQueryMinResultsUsed === 'number'\n\t\t\t\t? metadata.postgresQueryMinResultsUsed\n\t\t\t\t: undefined,\n\t\tpostgresQueryFillPolicyUsed:\n\t\t\tmetadata.postgresQueryFillPolicyUsed === 'strict_topk' ||\n\t\t\tmetadata.postgresQueryFillPolicyUsed === 'satisfy_min_results'\n\t\t\t\t? metadata.postgresQueryFillPolicyUsed\n\t\t\t\t: undefined,\n\t\tpostgresQueryPushdownCoverageRatio:\n\t\t\ttypeof metadata.postgresQueryPushdownCoverageRatio === 'number'\n\t\t\t\t? metadata.postgresQueryPushdownCoverageRatio\n\t\t\t\t: undefined,\n\t\tpostgresQueryJsRemainderRatio:\n\t\t\ttypeof metadata.postgresQueryJsRemainderRatio === 'number'\n\t\t\t\t? metadata.postgresQueryJsRemainderRatio\n\t\t\t\t: undefined,\n\t\tpostgresQueryReturnedCount:\n\t\t\ttypeof metadata.postgresQueryReturnedCount === 'number'\n\t\t\t\t? metadata.postgresQueryReturnedCount\n\t\t\t\t: undefined,\n\t\tpostgresQueryCandidateYieldRatio:\n\t\t\ttypeof metadata.postgresQueryCandidateYieldRatio === 'number'\n\t\t\t\t? metadata.postgresQueryCandidateYieldRatio\n\t\t\t\t: undefined,\n\t\tpostgresQueryBackfillLimitReached:\n\t\t\ttypeof metadata.postgresQueryBackfillLimitReached === 'boolean'\n\t\t\t\t? metadata.postgresQueryBackfillLimitReached\n\t\t\t\t: undefined,\n\t\tpostgresQueryMinResultsSatisfied:\n\t\t\ttypeof metadata.postgresQueryMinResultsSatisfied === 'boolean'\n\t\t\t\t? metadata.postgresQueryMinResultsSatisfied\n\t\t\t\t: undefined,\n\t\tpostgresQueryTopKFillRatio:\n\t\t\ttypeof metadata.postgresQueryTopKFillRatio === 'number'\n\t\t\t\t? metadata.postgresQueryTopKFillRatio\n\t\t\t\t: undefined,\n\t\tpostgresQueryUnderfilledTopK:\n\t\t\ttypeof metadata.postgresQueryUnderfilledTopK === 'boolean'\n\t\t\t\t? metadata.postgresQueryUnderfilledTopK\n\t\t\t\t: undefined\n\t};\n};\nconst DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME =\n\t'rag_retrieval_comparison_history';\nconst DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME =\n\t'rag_retrieval_release_decisions';\nconst DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME = 'rag_retrieval_baselines';\nconst DEFAULT_RETRIEVAL_RELEASE_INCIDENT_TABLE_NAME =\n\t'rag_retrieval_release_incidents';\ntype BunSQLiteModule = {\n\tDatabase: new (path?: string) => Database;\n};\n\ntype ImportMetaWithRequire = ImportMeta & {\n\trequire?: (specifier: string) => unknown;\n};\n\nconst loadBunSQLiteModule = (): BunSQLiteModule => {\n\tconst runtimeRequire = (import.meta as ImportMetaWithRequire).require;\n\tif (typeof runtimeRequire !== 'function') {\n\t\tthrow new Error(\n\t\t\t'SQLite trace storage requires Bun runtime support for import.meta.require.'\n\t\t);\n\t}\n\n\treturn runtimeRequire('bun:sqlite') as BunSQLiteModule;\n};\n\nconst normalizeStringArray = (value: unknown) => {\n\tif (!Array.isArray(value)) {\n\t\treturn [];\n\t}\n\n\treturn value\n\t\t.filter((candidate) => typeof candidate === 'string')\n\t\t.map((candidate) => candidate.trim())\n\t\t.filter((candidate) => candidate.length > 0);\n};\n\nconst normalizeLabelFilter = (value?: string) => {\n\tif (typeof value !== 'string') {\n\t\treturn undefined;\n\t}\n\n\tconst normalized = value.trim().toLowerCase();\n\treturn normalized.length > 0 ? normalized : undefined;\n};\n\nconst normalizeRetrievalBaselineRecords = (\n\trecords: RAGRetrievalBaselineRecord[]\n) => [...records].sort((left, right) => right.promotedAt - left.promotedAt);\n\nconst normalizeRetrievalReleaseDecisionRecords = (\n\trecords: RAGRetrievalReleaseDecisionRecord[]\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalLaneHandoffDecisionRecords = (\n\trecords: RAGRetrievalLaneHandoffDecisionRecord[]\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalReleaseIncidentRecords = (\n\trecords: RAGRetrievalReleaseIncidentRecord[]\n) => [...records].sort((left, right) => right.triggeredAt - left.triggeredAt);\n\nconst normalizeRetrievalIncidentRemediationDecisionRecords = (\n\trecords: RAGRetrievalIncidentRemediationDecisionRecord[]\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalIncidentRemediationExecutionHistoryRecords = (\n\trecords: RAGRetrievalIncidentRemediationExecutionHistoryRecord[]\n) => [...records].sort((left, right) => right.executedAt - left.executedAt);\n\nconst matchesWinner = (run: RAGRetrievalComparisonRun, winnerId?: string) => {\n\tif (!winnerId) {\n\t\treturn true;\n\t}\n\n\treturn (\n\t\trun.comparison.summary.bestByPassingRate === winnerId ||\n\t\trun.decisionSummary?.winnerByPassingRate === winnerId\n\t);\n};\n\nconst findRetrievalComparisonEntry = (\n\tcomparison: RAGRetrievalComparison,\n\tretrievalId?: string\n) => {\n\tif (!retrievalId) {\n\t\treturn undefined;\n\t}\n\n\treturn comparison.entries.find(\n\t\t(entry) => entry.retrievalId === retrievalId\n\t);\n};\n\nconst evaluateRetrievalComparisonGate = ({\n\tdelta,\n\tpolicy\n}: {\n\tdelta?: {\n\t\tpassingRateDelta: number;\n\t\taverageF1Delta: number;\n\t\telapsedMsDelta: number;\n\t};\n\tpolicy?: RAGRetrievalBaselineGatePolicy;\n}): RAGRetrievalComparisonGateResult | undefined => {\n\tif (!delta || !policy) {\n\t\treturn undefined;\n\t}\n\n\tconst reasons: string[] = [];\n\tif (\n\t\ttypeof policy.minPassingRateDelta === 'number' &&\n\t\tdelta.passingRateDelta < policy.minPassingRateDelta\n\t) {\n\t\treasons.push(\n\t\t\t`passing rate delta ${delta.passingRateDelta} is below ${policy.minPassingRateDelta}`\n\t\t);\n\t}\n\tif (\n\t\ttypeof policy.minAverageF1Delta === 'number' &&\n\t\tdelta.averageF1Delta < policy.minAverageF1Delta\n\t) {\n\t\treasons.push(\n\t\t\t`average F1 delta ${delta.averageF1Delta} is below ${policy.minAverageF1Delta}`\n\t\t);\n\t}\n\tif (\n\t\ttypeof policy.maxElapsedMsDelta === 'number' &&\n\t\tdelta.elapsedMsDelta > policy.maxElapsedMsDelta\n\t) {\n\t\treasons.push(\n\t\t\t`elapsed ms delta ${delta.elapsedMsDelta} exceeds ${policy.maxElapsedMsDelta}`\n\t\t);\n\t}\n\n\tif (reasons.length === 0) {\n\t\treturn {\n\t\t\tpolicy,\n\t\t\treasons: [],\n\t\t\tstatus: 'pass'\n\t\t};\n\t}\n\n\treturn {\n\t\tpolicy,\n\t\treasons,\n\t\tstatus: policy.severity === 'warn' ? 'warn' : 'fail'\n\t};\n};\n\nexport const buildRAGRetrievalReleaseVerdict = ({\n\tgroupKey,\n\tdecisionSummary\n}: {\n\tgroupKey?: string;\n\tdecisionSummary?: RAGRetrievalComparisonDecisionSummary;\n}): RAGRetrievalReleaseVerdict | undefined => {\n\tif (!decisionSummary) {\n\t\treturn undefined;\n\t}\n\n\tconst gate = decisionSummary.gate;\n\tconst delta = decisionSummary.delta;\n\tconst baselineRetrievalId = decisionSummary.baselineRetrievalId;\n\tconst candidateRetrievalId = decisionSummary.candidateRetrievalId;\n\n\tif (gate) {\n\t\tif (gate.status === 'pass') {\n\t\t\treturn {\n\t\t\t\tbaselineGroupKey: groupKey,\n\t\t\t\tbaselineRetrievalId,\n\t\t\t\tcandidateRetrievalId,\n\t\t\t\tdelta,\n\t\t\t\tgate,\n\t\t\t\tstatus: 'pass',\n\t\t\t\tsummary: 'Candidate passed the active baseline gate.'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tbaselineGroupKey: groupKey,\n\t\t\tbaselineRetrievalId,\n\t\t\tcandidateRetrievalId,\n\t\t\tdelta,\n\t\t\tgate,\n\t\t\tstatus: gate.status,\n\t\t\tsummary:\n\t\t\t\tgate.status === 'warn'\n\t\t\t\t\t? 'Candidate triggered a baseline gate warning.'\n\t\t\t\t\t: 'Candidate failed the active baseline gate.'\n\t\t};\n\t}\n\n\tif (delta) {\n\t\treturn {\n\t\t\tbaselineGroupKey: groupKey,\n\t\t\tbaselineRetrievalId,\n\t\t\tcandidateRetrievalId,\n\t\t\tdelta,\n\t\t\tstatus:\n\t\t\t\tdelta.passingRateDelta < 0 || delta.averageF1Delta < 0\n\t\t\t\t\t? 'needs_review'\n\t\t\t\t\t: 'pass',\n\t\t\tsummary:\n\t\t\t\tdelta.passingRateDelta < 0 || delta.averageF1Delta < 0\n\t\t\t\t\t? 'Candidate should be reviewed before promotion.'\n\t\t\t\t\t: 'Candidate improved or matched the baseline.'\n\t\t};\n\t}\n\n\treturn {\n\t\tbaselineGroupKey: groupKey,\n\t\tbaselineRetrievalId,\n\t\tcandidateRetrievalId,\n\t\tstatus: 'needs_review',\n\t\tsummary: 'No explicit baseline verdict could be determined.'\n\t};\n};\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> =>\n\tBoolean(value) && typeof value === 'object';\n\nconst parseJSONRecord = (value: string | null) => {\n\tif (value === null) {\n\t\treturn undefined;\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(value);\n\n\t\treturn isObjectRecord(parsed) ? parsed : undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n};\n\nconst parseJSONArray = <T>(value: string | null, fallback: T[]): T[] => {\n\tif (value === null) {\n\t\treturn fallback;\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(value);\n\n\t\treturn Array.isArray(parsed) ? (parsed as T[]) : fallback;\n\t} catch {\n\t\treturn fallback;\n\t}\n};\n\nconst normalizeExpectedIds = (input: string[]) =>\n\tArray.from(new Set(input.map((item) => item.trim()).filter(Boolean)));\n\nconst hasSourceExtension = (\n\tvalue: string | undefined,\n\textensions: string[]\n) => {\n\tif (!value) {\n\t\treturn false;\n\t}\n\tconst normalized = value.trim().toLowerCase();\n\n\treturn extensions.some((extension) => normalized.endsWith(extension));\n};\n\nconst hasMetadataNumber = (\n\tmetadata: Record<string, unknown> | undefined,\n\tkey: string\n) => typeof metadata?.[key] === 'number';\n\nconst hasMetadataString = (\n\tmetadata: Record<string, unknown> | undefined,\n\tkey: string\n) => typeof metadata?.[key] === 'string' && metadata[key] !== '';\n\nconst hasMetadataArray = (\n\tmetadata: Record<string, unknown> | undefined,\n\tkey: string\n) => Array.isArray(metadata?.[key]) && metadata[key].length > 0;\n\nconst detectSectionEvidence = (\n\tids: string[],\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tsources.some(\n\t\t(source) =>\n\t\t\thasMetadataArray(source.metadata, 'sectionPath') ||\n\t\t\thasMetadataString(source.metadata, 'sectionTitle') ||\n\t\t\thasMetadataString(source.metadata, 'sectionKind')\n\t);\n\nconst detectSectionGraphEvidence = (\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tsources.some(\n\t\t(source) =>\n\t\t\thasMetadataString(source.metadata, 'sectionChunkId') ||\n\t\t\thasMetadataNumber(source.metadata, 'sectionChunkIndex') ||\n\t\t\t(hasMetadataNumber(source.metadata, 'sectionChunkCount') &&\n\t\t\t\tNumber(source.metadata?.sectionChunkCount) > 1)\n\t);\n\nconst detectSectionHierarchyEvidence = (\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tsources.some((source) => {\n\t\tconst path = Array.isArray(source.metadata?.sectionPath)\n\t\t\t? source.metadata.sectionPath.filter(\n\t\t\t\t\t(entry): entry is string =>\n\t\t\t\t\t\ttypeof entry === 'string' && entry.trim().length > 0\n\t\t\t\t)\n\t\t\t: [];\n\n\t\treturn path.length > 1;\n\t});\n\nconst detectSpreadsheetEvidence = (\n\tids: string[],\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tids.some((id) =>\n\t\thasSourceExtension(id, ['.xlsx', '.xls', '.csv', '.ods', '.tsv'])\n\t) ||\n\tsources.some(\n\t\t(source) =>\n\t\t\thasSourceExtension(source.source, [\n\t\t\t\t'.xlsx',\n\t\t\t\t'.xls',\n\t\t\t\t'.csv',\n\t\t\t\t'.ods',\n\t\t\t\t'.tsv'\n\t\t\t]) ||\n\t\t\thasMetadataString(source.metadata, 'sheetName') ||\n\t\t\thasMetadataNumber(source.metadata, 'spreadsheetRowStart') ||\n\t\t\thasMetadataNumber(source.metadata, 'spreadsheetTableIndex')\n\t);\n\nconst detectMediaEvidence = (\n\tids: string[],\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tids.some((id) =>\n\t\thasSourceExtension(id, [\n\t\t\t'.mp3',\n\t\t\t'.wav',\n\t\t\t'.m4a',\n\t\t\t'.aac',\n\t\t\t'.ogg',\n\t\t\t'.flac',\n\t\t\t'.mp4',\n\t\t\t'.mov',\n\t\t\t'.mkv',\n\t\t\t'.webm'\n\t\t])\n\t) ||\n\tsources.some(\n\t\t(source) =>\n\t\t\thasSourceExtension(source.source, [\n\t\t\t\t'.mp3',\n\t\t\t\t'.wav',\n\t\t\t\t'.m4a',\n\t\t\t\t'.aac',\n\t\t\t\t'.ogg',\n\t\t\t\t'.flac',\n\t\t\t\t'.mp4',\n\t\t\t\t'.mov',\n\t\t\t\t'.mkv',\n\t\t\t\t'.webm'\n\t\t\t]) ||\n\t\t\thasMetadataString(source.metadata, 'mediaKind') ||\n\t\t\thasMetadataString(source.metadata, 'speaker') ||\n\t\t\thasMetadataNumber(source.metadata, 'startMs')\n\t);\n\nconst detectOCREvidence = (\n\tids: string[],\n\tsources: Array<Pick<RAGSource, 'source' | 'metadata'>> = []\n) =>\n\tids.some((id) =>\n\t\thasSourceExtension(id, ['.png', '.jpg', '.jpeg', '.webp'])\n\t) ||\n\tsources.some(\n\t\t(source) =>\n\t\t\thasSourceExtension(source.source, [\n\t\t\t\t'.png',\n\t\t\t\t'.jpg',\n\t\t\t\t'.jpeg',\n\t\t\t\t'.webp'\n\t\t\t]) ||\n\t\t\thasMetadataNumber(source.metadata, 'ocrConfidence') ||\n\t\t\thasMetadataNumber(source.metadata, 'ocrRegionConfidence') ||\n\t\t\thasMetadataString(source.metadata, 'ocrEngine') ||\n\t\t\tsource.metadata?.pdfTextMode === 'ocr'\n\t);\n\nconst getRetrievalTrace = (\n\ttrace: RAGSearchTraceRecord | RAGRetrievalTrace | undefined\n) => (trace && 'trace' in trace ? trace.trace : trace);\n\nconst classifyRAGEvaluationFailure = (input: {\n\texpectedCount: number;\n\tmatchedCount: number;\n\tmissingIds: string[];\n\tretrievedCount: number;\n\tretrievedIds: string[];\n\tretrievedSources?: RAGSource[];\n\ttrace?: RAGSearchTraceRecord | RAGRetrievalTrace;\n}): NonNullable<RAGEvaluationCaseResult['failureClasses']> => {\n\tconst classes: NonNullable<RAGEvaluationCaseResult['failureClasses']> = [];\n\tif (input.expectedCount === 0) {\n\t\tclasses.push('no_expected_targets');\n\t}\n\tif (input.retrievedCount === 0) {\n\t\tclasses.push('no_results');\n\t}\n\tif (input.expectedCount > 0 && input.matchedCount === 0) {\n\t\tclasses.push('no_match');\n\t}\n\tif (\n\t\tinput.expectedCount > 0 &&\n\t\tinput.matchedCount > 0 &&\n\t\tinput.matchedCount < input.expectedCount\n\t) {\n\t\tclasses.push('partial_recall');\n\t}\n\tif (input.retrievedIds.length > input.matchedCount) {\n\t\tclasses.push('extra_noise');\n\t}\n\tconst sourceSignals = input.retrievedSources ?? [];\n\tconst relevantIds = [...input.missingIds, ...input.retrievedIds];\n\tif (\n\t\t(input.missingIds.length > 0 || input.matchedCount === 0) &&\n\t\tdetectSectionEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('section_evidence_miss');\n\t\tif (detectSectionGraphEvidence(sourceSignals)) {\n\t\t\tclasses.push('section_graph_miss');\n\t\t}\n\t\tif (detectSectionHierarchyEvidence(sourceSignals)) {\n\t\t\tclasses.push('section_hierarchy_miss');\n\t\t}\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.matchedCount === 0) &&\n\t\tdetectSpreadsheetEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('spreadsheet_evidence_miss');\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.matchedCount === 0) &&\n\t\tdetectMediaEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('media_evidence_miss');\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.matchedCount === 0) &&\n\t\tdetectOCREvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('ocr_evidence_miss');\n\t}\n\tconst retrievalTrace = getRetrievalTrace(input.trace);\n\tif (\n\t\t(input.retrievedCount === 0 || input.matchedCount === 0) &&\n\t\t(retrievalTrace?.routingLabel || retrievalTrace?.routingReason)\n\t) {\n\t\tclasses.push('routing_miss');\n\t}\n\n\treturn classes;\n};\n\nconst classifyRAGGroundingFailure = (input: {\n\texpectedCount: number;\n\tmatchedCount: number;\n\tmissingIds: string[];\n\textraIds: string[];\n\tcitationCount: number;\n\tunresolvedCitationCount: number;\n\tavailableSources?: RAGSource[];\n}): NonNullable<RAGAnswerGroundingEvaluationCaseResult['failureClasses']> => {\n\tconst classes: NonNullable<\n\t\tRAGAnswerGroundingEvaluationCaseResult['failureClasses']\n\t> = [];\n\tif (input.expectedCount === 0) {\n\t\tclasses.push('no_expected_targets');\n\t}\n\tif (input.citationCount === 0) {\n\t\tclasses.push('no_citations');\n\t}\n\tif (input.unresolvedCitationCount > 0) {\n\t\tclasses.push('unresolved_citations');\n\t}\n\tif (\n\t\tinput.missingIds.length > 0 ||\n\t\tinput.matchedCount < input.expectedCount\n\t) {\n\t\tclasses.push('missing_expected_sources');\n\t}\n\tif (input.extraIds.length > 0) {\n\t\tclasses.push('extra_citations');\n\t}\n\tconst sourceSignals = input.availableSources ?? [];\n\tconst relevantIds = [...input.missingIds, ...input.extraIds];\n\tif (\n\t\t(input.missingIds.length > 0 || input.citationCount === 0) &&\n\t\tdetectSectionEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('section_source_miss');\n\t\tif (detectSectionGraphEvidence(sourceSignals)) {\n\t\t\tclasses.push('section_graph_source_miss');\n\t\t}\n\t\tif (detectSectionHierarchyEvidence(sourceSignals)) {\n\t\t\tclasses.push('section_hierarchy_source_miss');\n\t\t}\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.citationCount === 0) &&\n\t\tdetectSpreadsheetEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('spreadsheet_source_miss');\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.citationCount === 0) &&\n\t\tdetectMediaEvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('media_source_miss');\n\t}\n\tif (\n\t\t(input.missingIds.length > 0 || input.citationCount === 0) &&\n\t\tdetectOCREvidence(relevantIds, sourceSignals)\n\t) {\n\t\tclasses.push('ocr_source_miss');\n\t}\n\n\treturn classes;\n};\n\nconst normalizeSyntheticText = (value: string) =>\n\tvalue\n\t\t.replace(/^#+\\s*/gm, '')\n\t\t.replace(/`+/g, '')\n\t\t.replace(/\\[(.*?)\\]\\((.*?)\\)/g, '$1')\n\t\t.replace(/\\s+/g, ' ')\n\t\t.trim();\n\nconst buildSyntheticEvaluationQuery = (document: RAGIndexedDocument) => {\n\tconst title = normalizeSyntheticText(document.title);\n\tconst sourceTail = normalizeSyntheticText(\n\t\tdocument.source.split('/').at(-1) ?? document.source\n\t);\n\tconst text = normalizeSyntheticText(document.text ?? '');\n\tconst firstSentence =\n\t\ttext\n\t\t\t.split(/(?<=[.!?])\\s+/)\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.find((entry) => entry.length >= 24) ??\n\t\ttext\n\t\t\t.split(/\\n+/)\n\t\t\t.map((entry) => entry.trim())\n\t\t\t.find((entry) => entry.length >= 24) ??\n\t\ttitle ??\n\t\tsourceTail;\n\tconst prefixedSentence =\n\t\ttitle.length > 0 &&\n\t\tfirstSentence.toLowerCase().startsWith(title.toLowerCase())\n\t\t\t? firstSentence\n\t\t\t: [title, firstSentence].filter(Boolean).join(' ');\n\tconst queryTerms = normalizeSyntheticText(prefixedSentence)\n\t\t.split(/\\s+/)\n\t\t.slice(0, 12)\n\t\t.join(' ');\n\n\treturn queryTerms.length > 0 ? queryTerms : sourceTail;\n};\n\nconst resolveEvaluationMode = (caseInput: {\n\texpectedChunkIds?: string[];\n\texpectedSources?: string[];\n\texpectedDocumentIds?: string[];\n}): 'chunkId' | 'source' | 'documentId' => {\n\tif (normalizeStringArray(caseInput.expectedChunkIds).length > 0) {\n\t\treturn 'chunkId';\n\t}\n\tif (normalizeStringArray(caseInput.expectedSources).length > 0) {\n\t\treturn 'source';\n\t}\n\n\treturn 'documentId';\n};\n\nconst getDocumentId = (source: RAGSource): string => {\n\tconst metadataDocumentId =\n\t\ttypeof source.metadata?.documentId === 'string'\n\t\t\t? source.metadata.documentId\n\t\t\t: undefined;\n\tif (metadataDocumentId) {\n\t\treturn metadataDocumentId;\n\t}\n\tif (source.source) {\n\t\treturn source.source;\n\t}\n\n\tconst [documentId] = source.chunkId.split(':');\n\n\treturn documentId ?? source.chunkId;\n};\n\nconst extractExpectedId = (\n\tsource: RAGSource,\n\tmode: 'chunkId' | 'source' | 'documentId'\n): string =>\n\tmode === 'chunkId'\n\t\t? source.chunkId\n\t\t: mode === 'source'\n\t\t\t? (source.source ?? source.title ?? source.chunkId)\n\t\t\t: getDocumentId(source);\n\nconst buildSources = (\n\tresults: Array<{\n\t\tchunkId: string;\n\t\tchunkText: string;\n\t\tscore: number;\n\t\ttitle?: string;\n\t\tsource?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t}>\n) =>\n\tresults.map((result) => ({\n\t\tchunkId: result.chunkId,\n\t\tmetadata: result.metadata,\n\t\tscore: Number.isFinite(result.score) ? result.score : 0,\n\t\tsource: result.source,\n\t\ttext: result.chunkText,\n\t\ttitle: result.title\n\t}));\n\nconst buildAnswerGroundingStatus = ({\n\tcoverage,\n\texpectedCount,\n\tmatchedCount,\n\tunresolvedCitationCount,\n\tresolvedCitationCount\n}: {\n\tcoverage: RAGAnswerGroundingEvaluationCaseResult['coverage'];\n\texpectedCount: number;\n\tmatchedCount: number;\n\tunresolvedCitationCount: number;\n\tresolvedCitationCount: number;\n}): RAGAnswerGroundingEvaluationCaseResult['status'] => {\n\tif (expectedCount > 0) {\n\t\tif (\n\t\t\tmatchedCount === expectedCount &&\n\t\t\tunresolvedCitationCount === 0 &&\n\t\t\tcoverage !== 'ungrounded'\n\t\t) {\n\t\t\treturn 'pass';\n\t\t}\n\n\t\tif (matchedCount > 0 || resolvedCitationCount > 0) {\n\t\t\treturn 'partial';\n\t\t}\n\n\t\treturn 'fail';\n\t}\n\n\tif (coverage === 'grounded' && unresolvedCitationCount === 0) {\n\t\treturn 'pass';\n\t}\n\n\tif (resolvedCitationCount > 0 || coverage === 'partial') {\n\t\treturn 'partial';\n\t}\n\n\treturn 'fail';\n};\n\nexport const buildRAGEvaluationLeaderboard = (\n\truns: RAGEvaluationSuiteRun[]\n) => {\n\tconst sorted = [...runs].sort((left, right) => {\n\t\tif (right.response.passingRate !== left.response.passingRate) {\n\t\t\treturn right.response.passingRate - left.response.passingRate;\n\t\t}\n\t\tif (\n\t\t\tright.response.summary.averageF1 !== left.response.summary.averageF1\n\t\t) {\n\t\t\treturn (\n\t\t\t\tright.response.summary.averageF1 -\n\t\t\t\tleft.response.summary.averageF1\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\tleft.response.summary.averageLatencyMs -\n\t\t\tright.response.summary.averageLatencyMs\n\t\t);\n\t});\n\n\treturn sorted.map<RAGEvaluationLeaderboardEntry>((run, index) => ({\n\t\taverageF1: run.response.summary.averageF1,\n\t\taverageLatencyMs: run.response.summary.averageLatencyMs,\n\t\tlabel: run.label,\n\t\tpassingRate: run.response.passingRate,\n\t\trank: index + 1,\n\t\trunId: run.id,\n\t\tsuiteId: run.suiteId,\n\t\ttotalCases: run.response.totalCases\n\t}));\n};\n\nexport const buildRAGAnswerGroundingEvaluationLeaderboard = (\n\truns: RAGAnswerGroundingEvaluationRun[]\n) => {\n\tconst sorted = [...runs].sort((left, right) => {\n\t\tif (right.response.passingRate !== left.response.passingRate) {\n\t\t\treturn right.response.passingRate - left.response.passingRate;\n\t\t}\n\t\tif (\n\t\t\tright.response.summary.averageCitationF1 !==\n\t\t\tleft.response.summary.averageCitationF1\n\t\t) {\n\t\t\treturn (\n\t\t\t\tright.response.summary.averageCitationF1 -\n\t\t\t\tleft.response.summary.averageCitationF1\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\tright.response.summary.averageResolvedCitationRate !==\n\t\t\tleft.response.summary.averageResolvedCitationRate\n\t\t) {\n\t\t\treturn (\n\t\t\t\tright.response.summary.averageResolvedCitationRate -\n\t\t\t\tleft.response.summary.averageResolvedCitationRate\n\t\t\t);\n\t\t}\n\n\t\treturn left.elapsedMs - right.elapsedMs;\n\t});\n\n\treturn sorted.map<RAGAnswerGroundingEvaluationLeaderboardEntry>(\n\t\t(run, index) => ({\n\t\t\taverageCitationF1: run.response.summary.averageCitationF1,\n\t\t\taverageResolvedCitationRate:\n\t\t\t\trun.response.summary.averageResolvedCitationRate,\n\t\t\tlabel: run.label,\n\t\t\tpassingRate: run.response.passingRate,\n\t\t\trank: index + 1,\n\t\t\trunId: run.id,\n\t\t\tsuiteId: run.suiteId,\n\t\t\ttotalCases: run.response.totalCases\n\t\t})\n\t);\n};\n\nconst buildTraceStageCounts = (traces: RAGRetrievalTrace[]) => {\n\tconst counts: Partial<\n\t\tRecord<RAGRetrievalTrace['steps'][number]['stage'], number>\n\t> = {};\n\n\tfor (const trace of traces) {\n\t\tfor (const step of trace.steps) {\n\t\t\tcounts[step.stage] = (counts[step.stage] ?? 0) + 1;\n\t\t}\n\t}\n\n\treturn counts;\n};\n\nconst diffTraceStageCounts = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: Partial<\n\t\tRecord<RAGRetrievalTrace['steps'][number]['stage'], number>\n\t>;\n\tprevious: Partial<\n\t\tRecord<RAGRetrievalTrace['steps'][number]['stage'], number>\n\t>;\n}) => {\n\tconst next: Partial<\n\t\tRecord<RAGRetrievalTrace['steps'][number]['stage'], number>\n\t> = {};\n\tconst stages = new Set([\n\t\t...Object.keys(current),\n\t\t...Object.keys(previous)\n\t] as RAGRetrievalTrace['steps'][number]['stage'][]);\n\n\tfor (const stage of stages) {\n\t\tconst delta = (current[stage] ?? 0) - (previous[stage] ?? 0);\n\t\tif (delta !== 0) {\n\t\t\tnext[stage] = delta;\n\t\t}\n\t}\n\n\treturn next;\n};\n\nconst normalizeSummaryList = <T extends string>(values: T[]) =>\n\tArray.from(new Set(values)).sort();\n\nconst buildSummaryListDelta = <T extends string>(\n\tcurrent: T[],\n\tprevious: T[]\n) => {\n\tconst currentSet = new Set(current);\n\tconst previousSet = new Set(previous);\n\tconst added = current.filter((value) => !previousSet.has(value));\n\tconst removed = previous.filter((value) => !currentSet.has(value));\n\n\treturn {\n\t\tadded: normalizeSummaryList(Array.from(new Set(added))),\n\t\tcurrent: normalizeSummaryList(current),\n\t\tprevious: normalizeSummaryList(previous),\n\t\tremoved: normalizeSummaryList(Array.from(new Set(removed)))\n\t};\n};\n\nfunction summarizeListTurnover<T extends string>(params: {\n\tcurrent: T[];\n\tprevious: T[];\n\thistory: T[][];\n}): RAGTraceSummaryListTrend<T> {\n\tconst { current, previous, history } = params;\n\tconst currentSet = new Set(current);\n\tconst previousSet = new Set(previous);\n\tconst frequency: Record<string, number> = {};\n\n\tfor (const entry of history) {\n\t\tfor (const value of entry) {\n\t\t\tfrequency[value] = (frequency[value] ?? 0) + 1;\n\t\t}\n\t}\n\n\treturn {\n\t\tappeared: normalizeSummaryList(\n\t\t\tArray.from(\n\t\t\t\tnew Set(current.filter((value) => !previousSet.has(value)))\n\t\t\t)\n\t\t),\n\t\tcurrent: normalizeSummaryList(current),\n\t\tdisappeared: normalizeSummaryList(\n\t\t\tArray.from(\n\t\t\t\tnew Set(previous.filter((value) => !currentSet.has(value)))\n\t\t\t)\n\t\t),\n\t\tfrequency,\n\t\tprevious: normalizeSummaryList(previous),\n\t\tstable: normalizeSummaryList(\n\t\t\tArray.from(\n\t\t\t\tnew Set(current.filter((value) => previousSet.has(value)))\n\t\t\t)\n\t\t)\n\t};\n}\n\nconst diffTraceSummaryStageCounts = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGRetrievalTraceComparisonSummary['stageCounts'];\n\tprevious: RAGRetrievalTraceComparisonSummary['stageCounts'];\n}) => {\n\tconst stages = new Set([\n\t\t...Object.keys(current),\n\t\t...Object.keys(previous)\n\t]) as Set<RAGRetrievalTraceStep['stage']>;\n\tconst next: Partial<\n\t\tRecord<RAGRetrievalTraceStage, RAGTraceSummaryStageCountsDelta>\n\t> = {};\n\n\tfor (const stage of stages) {\n\t\tconst currentCount = current[stage] ?? 0;\n\t\tconst previousCount = previous[stage] ?? 0;\n\t\tconst delta = currentCount - previousCount;\n\t\tif (delta !== 0 || currentCount !== 0 || previousCount !== 0) {\n\t\t\tnext[stage] = {\n\t\t\t\tcurrent: currentCount,\n\t\t\t\tdelta,\n\t\t\t\tprevious: previousCount\n\t\t\t};\n\t\t}\n\t}\n\n\treturn next;\n};\n\nconst roundTraceAverage = (value: number, total: number) =>\n\ttotal > 0 ? Number((value / total).toFixed(2)) : 0;\n\nconst buildTraceSummaryDirection = (\n\tdelta: number\n): RAGTraceSummaryTrendDirection =>\n\tdelta > 0 ? 'up' : delta < 0 ? 'down' : 'flat';\n\nconst buildTraceSummaryAggregate = ({\n\tsummaries\n}: {\n\tsummaries: RAGRetrievalTraceComparisonSummary[];\n}): {\n\taggregate: RAGTraceSummaryNumericDelta[];\n\tbestMetric: RAGTraceSummaryNumericDelta | undefined;\n\tworstMetric: RAGTraceSummaryNumericDelta | undefined;\n} => {\n\tif (summaries.length === 0) {\n\t\tconst aggregate: RAGTraceSummaryNumericDelta[] = [\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'totalCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'averageFinalCount',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'averageVectorCount',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'averageLexicalCount',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'averageCandidateTopK',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'averageLexicalTopK',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'vectorCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'lexicalCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'balancedCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'roundRobinCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'transformedCases',\n\t\t\t\tprevious: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'variantCases',\n\t\t\t\tprevious: 0\n\t\t\t}\n\t\t];\n\n\t\treturn {\n\t\t\taggregate,\n\t\t\tbestMetric: undefined,\n\t\t\tworstMetric: undefined\n\t\t};\n\t}\n\n\tconst latest = summaries[0]!;\n\tconst previous = summaries[summaries.length - 1]!;\n\tconst aggregate: RAGTraceSummaryNumericDelta[] = [\n\t\t{\n\t\t\tcurrent: latest.totalCases,\n\t\t\tdelta: latest.totalCases - previous.totalCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.totalCases - previous.totalCases\n\t\t\t),\n\t\t\tmetric: 'totalCases',\n\t\t\tprevious: previous.totalCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.averageFinalCount,\n\t\t\tdelta: latest.averageFinalCount - previous.averageFinalCount,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.averageFinalCount - previous.averageFinalCount\n\t\t\t),\n\t\t\tmetric: 'averageFinalCount',\n\t\t\tprevious: previous.averageFinalCount\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.averageVectorCount,\n\t\t\tdelta: latest.averageVectorCount - previous.averageVectorCount,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.averageVectorCount - previous.averageVectorCount\n\t\t\t),\n\t\t\tmetric: 'averageVectorCount',\n\t\t\tprevious: previous.averageVectorCount\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.averageLexicalCount,\n\t\t\tdelta: latest.averageLexicalCount - previous.averageLexicalCount,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.averageLexicalCount - previous.averageLexicalCount\n\t\t\t),\n\t\t\tmetric: 'averageLexicalCount',\n\t\t\tprevious: previous.averageLexicalCount\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.averageCandidateTopK,\n\t\t\tdelta: latest.averageCandidateTopK - previous.averageCandidateTopK,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.averageCandidateTopK - previous.averageCandidateTopK\n\t\t\t),\n\t\t\tmetric: 'averageCandidateTopK',\n\t\t\tprevious: previous.averageCandidateTopK\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.averageLexicalTopK,\n\t\t\tdelta: latest.averageLexicalTopK - previous.averageLexicalTopK,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.averageLexicalTopK - previous.averageLexicalTopK\n\t\t\t),\n\t\t\tmetric: 'averageLexicalTopK',\n\t\t\tprevious: previous.averageLexicalTopK\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.vectorCases,\n\t\t\tdelta: latest.vectorCases - previous.vectorCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.vectorCases - previous.vectorCases\n\t\t\t),\n\t\t\tmetric: 'vectorCases',\n\t\t\tprevious: previous.vectorCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.lexicalCases,\n\t\t\tdelta: latest.lexicalCases - previous.lexicalCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.lexicalCases - previous.lexicalCases\n\t\t\t),\n\t\t\tmetric: 'lexicalCases',\n\t\t\tprevious: previous.lexicalCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.balancedCases,\n\t\t\tdelta: latest.balancedCases - previous.balancedCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.balancedCases - previous.balancedCases\n\t\t\t),\n\t\t\tmetric: 'balancedCases',\n\t\t\tprevious: previous.balancedCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.roundRobinCases,\n\t\t\tdelta: latest.roundRobinCases - previous.roundRobinCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.roundRobinCases - previous.roundRobinCases\n\t\t\t),\n\t\t\tmetric: 'roundRobinCases',\n\t\t\tprevious: previous.roundRobinCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.transformedCases,\n\t\t\tdelta: latest.transformedCases - previous.transformedCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.transformedCases - previous.transformedCases\n\t\t\t),\n\t\t\tmetric: 'transformedCases',\n\t\t\tprevious: previous.transformedCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.variantCases,\n\t\t\tdelta: latest.variantCases - previous.variantCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.variantCases - previous.variantCases\n\t\t\t),\n\t\t\tmetric: 'variantCases',\n\t\t\tprevious: previous.variantCases\n\t\t}\n\t];\n\tconst absoluteSorted = [...aggregate].sort(\n\t\t(left, right) =>\n\t\t\tMath.abs(right.delta) - Math.abs(left.delta) ||\n\t\t\tleft.metric.localeCompare(right.metric)\n\t);\n\n\treturn {\n\t\taggregate,\n\t\tbestMetric: absoluteSorted[0],\n\t\tworstMetric: absoluteSorted[absoluteSorted.length - 1]\n\t};\n};\n\nconst buildRAGRetrievalTraceStageChurn = ({\n\twindows\n}: {\n\twindows: RAGRetrievalTraceHistoryWindow[];\n}): RAGTraceSummaryStageTrend[] => {\n\tconst stages = new Set<RAGRetrievalTraceStep['stage']>();\n\tfor (const window of windows) {\n\t\tfor (const stage of Object.keys(window.current.stageCounts) as Array<\n\t\t\tRAGRetrievalTraceStep['stage']\n\t\t>) {\n\t\t\tstages.add(stage);\n\t\t}\n\t\tfor (const stage of Object.keys(window.previous.stageCounts) as Array<\n\t\t\tRAGRetrievalTraceStep['stage']\n\t\t>) {\n\t\t\tstages.add(stage);\n\t\t}\n\t}\n\n\treturn [...stages]\n\t\t.map((stage) => {\n\t\t\tlet netDelta = 0;\n\t\t\tlet totalChanges = 0;\n\t\t\tfor (const window of windows) {\n\t\t\t\tconst delta = window.delta?.stageCountsDelta[stage]?.delta ?? 0;\n\t\t\t\tnetDelta += delta;\n\t\t\t\ttotalChanges += Math.abs(delta);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tlatestDelta:\n\t\t\t\t\twindows[0]?.delta?.stageCountsDelta[stage]?.delta ?? 0,\n\t\t\t\tnetDelta,\n\t\t\t\tstage,\n\t\t\t\ttotalChanges\n\t\t\t};\n\t\t})\n\t\t.sort(\n\t\t\t(left, right) =>\n\t\t\t\tright.totalChanges - left.totalChanges ||\n\t\t\t\tleft.stage.localeCompare(right.stage)\n\t\t);\n};\n\nconst summarizeRetrievalTraces = (\n\ttraces: RAGRetrievalTrace[]\n): RAGRetrievalTraceComparisonSummary | undefined => {\n\tif (traces.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst totalCases = traces.length;\n\tconst modeSet = new Set<RAGHybridRetrievalMode>();\n\tconst sourceBalanceStrategySet = new Set<RAGSourceBalanceStrategy>();\n\tlet vectorCases = 0;\n\tlet lexicalCases = 0;\n\tlet balancedCases = 0;\n\tlet roundRobinCases = 0;\n\tlet transformedCases = 0;\n\tlet variantCases = 0;\n\tlet finalCountSum = 0;\n\tlet vectorCountSum = 0;\n\tlet lexicalCountSum = 0;\n\tlet candidateTopKSum = 0;\n\tlet lexicalTopKSum = 0;\n\n\tfor (const trace of traces) {\n\t\tmodeSet.add(trace.mode);\n\t\tsourceBalanceStrategySet.add(trace.sourceBalanceStrategy ?? 'cap');\n\t\tif (trace.runVector) {\n\t\t\tvectorCases += 1;\n\t\t}\n\t\tif (trace.runLexical) {\n\t\t\tlexicalCases += 1;\n\t\t}\n\t\tif (typeof trace.maxResultsPerSource === 'number') {\n\t\t\tbalancedCases += 1;\n\t\t\tif (trace.sourceBalanceStrategy === 'round_robin') {\n\t\t\t\troundRobinCases += 1;\n\t\t\t}\n\t\t}\n\t\tif (trace.transformedQuery !== trace.query) {\n\t\t\ttransformedCases += 1;\n\t\t}\n\t\tif (trace.variantQueries.length > 0) {\n\t\t\tvariantCases += 1;\n\t\t}\n\t\tfinalCountSum += trace.resultCounts.final;\n\t\tvectorCountSum += trace.resultCounts.vector;\n\t\tlexicalCountSum += trace.resultCounts.lexical;\n\t\tcandidateTopKSum += trace.candidateTopK;\n\t\tlexicalTopKSum += trace.lexicalTopK;\n\t}\n\n\treturn {\n\t\taverageCandidateTopK: roundTraceAverage(candidateTopKSum, totalCases),\n\t\taverageFinalCount: roundTraceAverage(finalCountSum, totalCases),\n\t\taverageLexicalCount: roundTraceAverage(lexicalCountSum, totalCases),\n\t\taverageLexicalTopK: roundTraceAverage(lexicalTopKSum, totalCases),\n\t\tbalancedCases,\n\t\taverageVectorCount: roundTraceAverage(vectorCountSum, totalCases),\n\t\tlexicalCases,\n\t\tmodes: Array.from(modeSet),\n\t\troundRobinCases,\n\t\tsourceBalanceStrategies: Array.from(sourceBalanceStrategySet),\n\t\tstageCounts: buildTraceStageCounts(traces),\n\t\ttotalCases,\n\t\ttransformedCases,\n\t\tvariantCases,\n\t\tvectorCases\n\t};\n};\n\nconst evaluateRAGCollectionCases = async ({\n\tcollection,\n\tinput,\n\tdefaultTopK = DEFAULT_TOP_K,\n\trerank,\n\tincludeTrace = false\n}: {\n\tcollection: RAGCollection;\n\tinput: RAGEvaluationInput;\n\tdefaultTopK?: number;\n\trerank?: RAGRerankerProviderLike;\n\tincludeTrace?: boolean;\n}): Promise<\n\tArray<{\n\t\tcaseResult: RAGEvaluationCaseResult;\n\t\ttrace?: RAGRetrievalTrace;\n\t\tfilter?: Record<string, unknown>;\n\t\tretrieval?: RAGCollectionSearchParams['retrieval'];\n\t\ttopResult?: RAGQueryResult;\n\t}>\n> => {\n\tif (input.dryRun) {\n\t\treturn executeDryRunRAGEvaluation(input, defaultTopK).map(\n\t\t\t(caseResult, caseIndex) => ({\n\t\t\t\tcaseResult,\n\t\t\t\tfilter:\n\t\t\t\t\ttypeof input.cases?.[caseIndex]?.filter === 'object'\n\t\t\t\t\t\t? input.cases[caseIndex]?.filter\n\t\t\t\t\t\t: input.filter,\n\t\t\t\tretrieval:\n\t\t\t\t\tinput.cases?.[caseIndex]?.retrieval ?? input.retrieval,\n\t\t\t\ttopResult: undefined,\n\t\t\t\ttrace: undefined\n\t\t\t})\n\t\t);\n\t}\n\n\treturn Promise.all(\n\t\tinput.cases.map(async (caseInput, caseIndex) => {\n\t\t\tconst startedAt = Date.now();\n\t\t\tconst mode = resolveEvaluationMode(caseInput);\n\t\t\tconst query = caseInput.query.trim();\n\t\t\tconst expectedIds = normalizeExpectedIds(\n\t\t\t\tmode === 'chunkId'\n\t\t\t\t\t? (caseInput.expectedChunkIds ?? [])\n\t\t\t\t\t: mode === 'source'\n\t\t\t\t\t\t? (caseInput.expectedSources ?? [])\n\t\t\t\t\t\t: (caseInput.expectedDocumentIds ?? [])\n\t\t\t);\n\t\t\tconst topK =\n\t\t\t\ttypeof caseInput.topK === 'number'\n\t\t\t\t\t? caseInput.topK\n\t\t\t\t\t: typeof input.topK === 'number'\n\t\t\t\t\t\t? input.topK\n\t\t\t\t\t\t: defaultTopK;\n\t\t\tconst searchInput = {\n\t\t\t\tfilter: caseInput.corpusKey\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...((typeof caseInput.filter === 'object'\n\t\t\t\t\t\t\t\t? caseInput.filter\n\t\t\t\t\t\t\t\t: input.filter) ?? {}),\n\t\t\t\t\t\t\tcorpusKey: caseInput.corpusKey\n\t\t\t\t\t\t}\n\t\t\t\t\t: typeof caseInput.filter === 'object'\n\t\t\t\t\t\t? caseInput.filter\n\t\t\t\t\t\t: input.filter,\n\t\t\t\tmodel: caseInput.model ?? input.model,\n\t\t\t\tquery,\n\t\t\t\trerank,\n\t\t\t\tscoreThreshold:\n\t\t\t\t\ttypeof caseInput.scoreThreshold === 'number'\n\t\t\t\t\t\t? caseInput.scoreThreshold\n\t\t\t\t\t\t: input.scoreThreshold,\n\t\t\t\tretrieval: caseInput.retrieval ?? input.retrieval,\n\t\t\t\ttopK\n\t\t\t};\n\t\t\tconst searchOutcome = includeTrace\n\t\t\t\t? await collection.searchWithTrace(searchInput)\n\t\t\t\t: {\n\t\t\t\t\t\tresults: await collection.search(searchInput),\n\t\t\t\t\t\ttrace: undefined\n\t\t\t\t\t};\n\t\t\tconst sources = buildSources(searchOutcome.results);\n\t\t\tconst elapsedMs = Date.now() - startedAt;\n\t\t\tconst retrievedIds = normalizeExpectedIds(\n\t\t\t\tsources.map((source) => extractExpectedId(source, mode))\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcaseResult: summarizeRAGEvaluationCase({\n\t\t\t\t\tcaseIndex,\n\t\t\t\t\tcaseInput: { ...caseInput, topK },\n\t\t\t\t\telapsedMs,\n\t\t\t\t\texpectedIds,\n\t\t\t\t\tmode,\n\t\t\t\t\tquery,\n\t\t\t\t\tretrievedIds,\n\t\t\t\t\tretrievedSources: sources,\n\t\t\t\t\ttrace: searchOutcome.trace\n\t\t\t\t}),\n\t\t\t\ttrace: searchOutcome.trace,\n\t\t\t\tfilter: searchInput.filter,\n\t\t\t\tretrieval: searchInput.retrieval,\n\t\t\t\ttopResult: searchOutcome.results[0]\n\t\t\t};\n\t\t})\n\t);\n};\n\nexport const buildRAGAnswerGroundingCaseDifficultyLeaderboard = (\n\tentries: Array<{\n\t\tlabel: string;\n\t\tresponse: RAGAnswerGroundingEvaluationResponse;\n\t}>\n) => {\n\tconst grouped = new Map<\n\t\tstring,\n\t\t{\n\t\t\tcaseId: string;\n\t\t\tlabel?: string;\n\t\t\tquery?: string;\n\t\t\tpassCount: number;\n\t\t\tpartialCount: number;\n\t\t\tfailCount: number;\n\t\t\tgroundedCount: number;\n\t\t\ttotalEvaluations: number;\n\t\t\ttotalCitationF1: number;\n\t\t\ttotalResolvedCitationRate: number;\n\t\t}\n\t>();\n\n\tfor (const entry of entries) {\n\t\tfor (const result of entry.response.cases) {\n\t\t\tconst current = grouped.get(result.caseId) ?? {\n\t\t\t\tcaseId: result.caseId,\n\t\t\t\tfailCount: 0,\n\t\t\t\tgroundedCount: 0,\n\t\t\t\tlabel: result.label,\n\t\t\t\tpassCount: 0,\n\t\t\t\tpartialCount: 0,\n\t\t\t\tquery: result.query,\n\t\t\t\ttotalCitationF1: 0,\n\t\t\t\ttotalEvaluations: 0,\n\t\t\t\ttotalResolvedCitationRate: 0\n\t\t\t};\n\t\t\tcurrent.label ??= result.label;\n\t\t\tcurrent.query ??= result.query;\n\t\t\tcurrent.totalEvaluations += 1;\n\t\t\tcurrent.totalCitationF1 += result.citationF1;\n\t\t\tcurrent.totalResolvedCitationRate += result.resolvedCitationRate;\n\t\t\tif (result.status === 'pass') {\n\t\t\t\tcurrent.passCount += 1;\n\t\t\t} else if (result.status === 'partial') {\n\t\t\t\tcurrent.partialCount += 1;\n\t\t\t} else {\n\t\t\t\tcurrent.failCount += 1;\n\t\t\t}\n\t\t\tif (result.coverage === 'grounded') {\n\t\t\t\tcurrent.groundedCount += 1;\n\t\t\t}\n\t\t\tgrouped.set(result.caseId, current);\n\t\t}\n\t}\n\n\tconst ranked = Array.from(grouped.values()).sort((left, right) => {\n\t\tconst leftPassRate = left.passCount / left.totalEvaluations;\n\t\tconst rightPassRate = right.passCount / right.totalEvaluations;\n\t\tif (leftPassRate !== rightPassRate) {\n\t\t\treturn leftPassRate - rightPassRate;\n\t\t}\n\t\tconst leftCitationF1 = left.totalCitationF1 / left.totalEvaluations;\n\t\tconst rightCitationF1 = right.totalCitationF1 / right.totalEvaluations;\n\t\tif (leftCitationF1 !== rightCitationF1) {\n\t\t\treturn leftCitationF1 - rightCitationF1;\n\t\t}\n\t\tconst leftResolved =\n\t\t\tleft.totalResolvedCitationRate / left.totalEvaluations;\n\t\tconst rightResolved =\n\t\t\tright.totalResolvedCitationRate / right.totalEvaluations;\n\t\tif (leftResolved !== rightResolved) {\n\t\t\treturn leftResolved - rightResolved;\n\t\t}\n\n\t\treturn left.caseId.localeCompare(right.caseId);\n\t});\n\n\treturn ranked.map<RAGAnswerGroundingEvaluationCaseDifficultyEntry>(\n\t\t(entry, index) => ({\n\t\t\taverageCitationF1: entry.totalCitationF1 / entry.totalEvaluations,\n\t\t\taverageResolvedCitationRate:\n\t\t\t\tentry.totalResolvedCitationRate / entry.totalEvaluations,\n\t\t\tcaseId: entry.caseId,\n\t\t\tfailRate: (entry.failCount / entry.totalEvaluations) * 100,\n\t\t\tgroundedRate: (entry.groundedCount / entry.totalEvaluations) * 100,\n\t\t\tlabel: entry.label,\n\t\t\tpassRate: (entry.passCount / entry.totalEvaluations) * 100,\n\t\t\tpartialRate: (entry.partialCount / entry.totalEvaluations) * 100,\n\t\t\tquery: entry.query,\n\t\t\trank: index + 1,\n\t\t\ttotalEvaluations: entry.totalEvaluations\n\t\t})\n\t);\n};\n\nconst buildGroundingDifficultyDiffEntry = (\n\tcurrent: RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n\tprevious?: RAGAnswerGroundingEvaluationCaseDifficultyEntry\n): RAGAnswerGroundingCaseDifficultyDiffEntry => ({\n\tcaseId: current.caseId,\n\tcurrentAverageCitationF1: current.averageCitationF1,\n\tcurrentFailRate: current.failRate,\n\tcurrentPassRate: current.passRate,\n\tcurrentRank: current.rank,\n\tlabel: current.label,\n\tpreviousAverageCitationF1: previous?.averageCitationF1,\n\tpreviousFailRate: previous?.failRate,\n\tpreviousPassRate: previous?.passRate,\n\tpreviousRank: previous?.rank,\n\tquery: current.query\n});\n\nconst buildRAGAnswerGroundingCaseDifficultyTrends = ({\n\truns\n}: {\n\truns: RAGAnswerGroundingCaseDifficultyRun[];\n}) => {\n\tconst movementCounts = new Map<\n\t\tstring,\n\t\t{\n\t\t\tlabel?: string;\n\t\t\tharder: number;\n\t\t\teasier: number;\n\t\t\tunchanged: number;\n\t\t}\n\t>();\n\n\tfor (let index = 0; index < runs.length - 1; index += 1) {\n\t\tconst current = runs[index];\n\t\tconst previous = runs[index + 1];\n\t\tif (!current || !previous) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst diff = buildRAGAnswerGroundingCaseDifficultyRunDiff({\n\t\t\tcurrent,\n\t\t\tprevious\n\t\t});\n\n\t\tfor (const entry of diff.harderCases) {\n\t\t\tconst currentCounts = movementCounts.get(entry.caseId) ?? {\n\t\t\t\teasier: 0,\n\t\t\t\tharder: 0,\n\t\t\t\tlabel: entry.label,\n\t\t\t\tunchanged: 0\n\t\t\t};\n\t\t\tcurrentCounts.harder += 1;\n\t\t\tcurrentCounts.label ??= entry.label;\n\t\t\tmovementCounts.set(entry.caseId, currentCounts);\n\t\t}\n\n\t\tfor (const entry of diff.easierCases) {\n\t\t\tconst currentCounts = movementCounts.get(entry.caseId) ?? {\n\t\t\t\teasier: 0,\n\t\t\t\tharder: 0,\n\t\t\t\tlabel: entry.label,\n\t\t\t\tunchanged: 0\n\t\t\t};\n\t\t\tcurrentCounts.easier += 1;\n\t\t\tcurrentCounts.label ??= entry.label;\n\t\t\tmovementCounts.set(entry.caseId, currentCounts);\n\t\t}\n\n\t\tfor (const entry of diff.unchangedCases) {\n\t\t\tconst currentCounts = movementCounts.get(entry.caseId) ?? {\n\t\t\t\teasier: 0,\n\t\t\t\tharder: 0,\n\t\t\t\tlabel: entry.label,\n\t\t\t\tunchanged: 0\n\t\t\t};\n\t\t\tcurrentCounts.unchanged += 1;\n\t\t\tcurrentCounts.label ??= entry.label;\n\t\t\tmovementCounts.set(entry.caseId, currentCounts);\n\t\t}\n\t}\n\n\tconst movementEntries = [...movementCounts.entries()];\n\tconst mostOftenHarderCaseIds = movementEntries\n\t\t.filter(([, counts]) => counts.harder > 0)\n\t\t.sort((left, right) => {\n\t\t\tif (right[1].harder !== left[1].harder) {\n\t\t\t\treturn right[1].harder - left[1].harder;\n\t\t\t}\n\t\t\treturn left[0].localeCompare(right[0]);\n\t\t})\n\t\t.map(([caseId]) => caseId);\n\tconst mostOftenEasierCaseIds = movementEntries\n\t\t.filter(([, counts]) => counts.easier > 0)\n\t\t.sort((left, right) => {\n\t\t\tif (right[1].easier !== left[1].easier) {\n\t\t\t\treturn right[1].easier - left[1].easier;\n\t\t\t}\n\t\t\treturn left[0].localeCompare(right[0]);\n\t\t})\n\t\t.map(([caseId]) => caseId);\n\n\treturn {\n\t\teasiestCaseIds:\n\t\t\truns[runs.length - 1]?.entries\n\t\t\t\t.map((entry) => entry.caseId)\n\t\t\t\t.reverse() ?? [],\n\t\thardestCaseIds: runs[0]?.entries.map((entry) => entry.caseId) ?? [],\n\t\tmostOftenEasierCaseIds,\n\t\tmostOftenHarderCaseIds,\n\t\tmovementCounts: Object.fromEntries(\n\t\t\tmovementEntries.map(([caseId, counts]) => [\n\t\t\t\tcaseId,\n\t\t\t\t{\n\t\t\t\t\teasier: counts.easier,\n\t\t\t\t\tharder: counts.harder,\n\t\t\t\t\tunchanged: counts.unchanged\n\t\t\t\t}\n\t\t\t])\n\t\t)\n\t};\n};\n\nexport const buildRAGAnswerGroundingCaseDifficultyRunDiff = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGAnswerGroundingCaseDifficultyRun;\n\tprevious?: RAGAnswerGroundingCaseDifficultyRun;\n}): RAGAnswerGroundingCaseDifficultyRunDiff => {\n\tconst previousEntries = new Map(\n\t\t(previous?.entries ?? []).map((entry) => [entry.caseId, entry])\n\t);\n\tconst diffs = current.entries.map((entry) =>\n\t\tbuildGroundingDifficultyDiffEntry(\n\t\t\tentry,\n\t\t\tpreviousEntries.get(entry.caseId)\n\t\t)\n\t);\n\n\treturn {\n\t\tcurrentRunId: current.id,\n\t\teasierCases: diffs.filter((entry) => {\n\t\t\tconst previousRank = entry.previousRank ?? entry.currentRank;\n\t\t\treturn entry.currentRank > previousRank;\n\t\t}),\n\t\tharderCases: diffs.filter((entry) => {\n\t\t\tconst previousRank = entry.previousRank ?? Number.MAX_SAFE_INTEGER;\n\t\t\treturn entry.currentRank < previousRank;\n\t\t}),\n\t\tpreviousRunId: previous?.id,\n\t\tsuiteId: current.suiteId,\n\t\tunchangedCases: diffs.filter((entry) => {\n\t\t\tconst previousRank = entry.previousRank ?? entry.currentRank;\n\t\t\treturn entry.currentRank === previousRank;\n\t\t})\n\t};\n};\n\nconst toHistorySortOrder = (\n\tleft: RAGEvaluationSuiteRun,\n\tright: RAGEvaluationSuiteRun\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeHistoryRuns = (runs: RAGEvaluationSuiteRun[]) =>\n\t[...runs].sort(toHistorySortOrder);\n\nconst normalizeRetrievalComparisonRuns = (runs: RAGRetrievalComparisonRun[]) =>\n\t[...runs].sort((left, right) => right.finishedAt - left.finishedAt);\n\nconst toTraceSummaryRunSortOrder = (\n\tleft: RAGRetrievalTraceSummaryRun,\n\tright: RAGRetrievalTraceSummaryRun\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeTraceSummaryRuns = <TRun extends RAGRetrievalTraceSummaryRun>(\n\truns: TRun[]\n) => [...runs].sort(toTraceSummaryRunSortOrder);\n\nconst applyRAGEvaluationHistoryPrunePolicy = <\n\tTRun extends {\n\t\tid: string;\n\t\tsuiteId: string;\n\t\tfinishedAt?: number;\n\t\tcreatedAt?: number;\n\t}\n>({\n\tinput,\n\truns,\n\tsort\n}: {\n\tinput?: RAGEvaluationHistoryPruneInput;\n\truns: TRun[];\n\tsort: (runs: TRun[]) => TRun[];\n}): {\n\tnext: TRun[];\n\tremoved: TRun[];\n\tkeptCount: number;\n\tremovedCount: number;\n} => {\n\tconst sorted = sort(runs);\n\tconst targeted = sorted.filter(\n\t\t(run) => !input?.suiteId || run.suiteId === input.suiteId\n\t);\n\tconst untouched = sorted.filter(\n\t\t(run) => input?.suiteId && run.suiteId !== input.suiteId\n\t);\n\tconst now = input?.now ?? Date.now();\n\tlet kept = [...targeted];\n\n\tif (\n\t\ttypeof input?.maxAgeMs === 'number' &&\n\t\tNumber.isFinite(input.maxAgeMs)\n\t) {\n\t\tconst cutoff = now - input.maxAgeMs;\n\t\tkept = kept.filter((run) => {\n\t\t\tconst timestamp = run.finishedAt ?? run.createdAt ?? 0;\n\t\t\treturn timestamp >= cutoff;\n\t\t});\n\t}\n\n\tif (\n\t\ttypeof input?.maxRunsPerSuite === 'number' &&\n\t\tNumber.isFinite(input.maxRunsPerSuite) &&\n\t\tinput.maxRunsPerSuite >= 0\n\t) {\n\t\tconst remainingBySuite = new Map<string, number>();\n\t\tkept = kept.filter((run) => {\n\t\t\tconst current = remainingBySuite.get(run.suiteId) ?? 0;\n\t\t\tif (current >= input.maxRunsPerSuite!) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tremainingBySuite.set(run.suiteId, current + 1);\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tconst keptIds = new Set(kept.map((run) => run.id));\n\tconst removed = targeted.filter((run) => !keptIds.has(run.id));\n\tconst next = sort([...untouched, ...kept]);\n\n\treturn {\n\t\tkeptCount: next.length,\n\t\tnext,\n\t\tremoved,\n\t\tremovedCount: removed.length\n\t};\n};\n\nconst applyRAGSearchTracePrunePolicy = ({\n\tinput,\n\ttraces\n}: {\n\tinput?: RAGSearchTracePruneInput;\n\ttraces: RAGSearchTraceRecord[];\n}) => {\n\tconst sorted = normalizeTraceSummaryRuns(traces);\n\tconst matchesTag = (trace: RAGSearchTraceRecord) =>\n\t\t!input?.tag || (trace.tags ?? []).includes(input.tag);\n\tconst targeted = sorted.filter(matchesTag);\n\tconst untouched = sorted.filter((trace) => !matchesTag(trace));\n\tconst now = input?.now ?? Date.now();\n\tlet kept = [...targeted];\n\n\tif (\n\t\ttypeof input?.maxAgeMs === 'number' &&\n\t\tNumber.isFinite(input.maxAgeMs)\n\t) {\n\t\tconst cutoff = now - input.maxAgeMs;\n\t\tkept = kept.filter((trace) => trace.finishedAt >= cutoff);\n\t}\n\n\tif (\n\t\ttypeof input?.maxRecordsPerQuery === 'number' &&\n\t\tNumber.isFinite(input.maxRecordsPerQuery) &&\n\t\tinput.maxRecordsPerQuery >= 0\n\t) {\n\t\tconst remainingByQuery = new Map<string, number>();\n\t\tkept = kept.filter((trace) => {\n\t\t\tconst current = remainingByQuery.get(trace.query) ?? 0;\n\t\t\tif (current >= input.maxRecordsPerQuery!) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tremainingByQuery.set(trace.query, current + 1);\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tif (\n\t\ttypeof input?.maxRecordsPerGroup === 'number' &&\n\t\tNumber.isFinite(input.maxRecordsPerGroup) &&\n\t\tinput.maxRecordsPerGroup >= 0\n\t) {\n\t\tconst remainingByGroup = new Map<string, number>();\n\t\tkept = kept.filter((trace) => {\n\t\t\tif (!trace.groupKey) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst current = remainingByGroup.get(trace.groupKey) ?? 0;\n\t\t\tif (current >= input.maxRecordsPerGroup!) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tremainingByGroup.set(trace.groupKey, current + 1);\n\t\t\treturn true;\n\t\t});\n\t}\n\n\tconst keptIds = new Set(kept.map((trace) => trace.id));\n\tconst removed = targeted.filter((trace) => !keptIds.has(trace.id));\n\tconst next = normalizeTraceSummaryRuns([...untouched, ...kept]);\n\n\treturn {\n\t\tkeptCount: next.length,\n\t\tnext,\n\t\tremoved,\n\t\tremovedCount: removed.length\n\t};\n};\n\nconst buildRAGSearchTraceStatsFromTraces = (\n\ttraces: RAGSearchTraceRecord[]\n): RAGSearchTraceStats => {\n\tconst queryKeys = new Set<string>();\n\tconst groupKeys = new Set<string>();\n\tconst tagCounts = new Map<string, number>();\n\tlet oldestFinishedAt: number | undefined;\n\tlet newestFinishedAt: number | undefined;\n\n\tfor (const trace of traces) {\n\t\tqueryKeys.add(trace.query);\n\t\tif (trace.groupKey) {\n\t\t\tgroupKeys.add(trace.groupKey);\n\t\t}\n\t\tfor (const tag of trace.tags ?? []) {\n\t\t\ttagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);\n\t\t}\n\t\toldestFinishedAt =\n\t\t\ttypeof oldestFinishedAt === 'number'\n\t\t\t\t? Math.min(oldestFinishedAt, trace.finishedAt)\n\t\t\t\t: trace.finishedAt;\n\t\tnewestFinishedAt =\n\t\t\ttypeof newestFinishedAt === 'number'\n\t\t\t\t? Math.max(newestFinishedAt, trace.finishedAt)\n\t\t\t\t: trace.finishedAt;\n\t}\n\n\treturn {\n\t\tgroupCount: groupKeys.size,\n\t\tnewestFinishedAt,\n\t\toldestFinishedAt,\n\t\tqueryCount: queryKeys.size,\n\t\ttagCounts: Object.fromEntries(tagCounts.entries()),\n\t\ttotalTraces: traces.length\n\t};\n};\n\nconst normalizeTraceTags = (tags?: string[]) =>\n\tArray.from(\n\t\tnew Set((tags ?? []).map((tag) => tag.trim()).filter(Boolean))\n\t).sort((left, right) => left.localeCompare(right));\n\nconst toGroundingHistorySortOrder = (\n\tleft: RAGAnswerGroundingEvaluationRun,\n\tright: RAGAnswerGroundingEvaluationRun\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeGroundingHistoryRuns = (\n\truns: RAGAnswerGroundingEvaluationRun[]\n) => [...runs].sort(toGroundingHistorySortOrder);\n\nconst toSearchTracePruneRunSortOrder = (\n\tleft: RAGSearchTracePruneRun,\n\tright: RAGSearchTracePruneRun\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeSearchTracePruneRuns = (runs: RAGSearchTracePruneRun[]) =>\n\t[...runs].sort(toSearchTracePruneRunSortOrder);\n\nconst toGroundingDifficultyHistorySortOrder = (\n\tleft: RAGAnswerGroundingCaseDifficultyRun,\n\tright: RAGAnswerGroundingCaseDifficultyRun\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeGroundingDifficultyHistoryRuns = (\n\truns: RAGAnswerGroundingCaseDifficultyRun[]\n) => [...runs].sort(toGroundingDifficultyHistorySortOrder);\n\nconst buildCaseDiff = (\n\tcurrentCase: RAGEvaluationCaseResult,\n\tpreviousCase?: RAGEvaluationCaseResult\n): RAGEvaluationCaseDiff => ({\n\tcaseId: currentCase.caseId,\n\tcurrentF1: currentCase.f1,\n\tcurrentMatchedIds: currentCase.matchedIds,\n\tcurrentMissingIds: currentCase.missingIds,\n\tcurrentStatus: currentCase.status,\n\tlabel: currentCase.label,\n\tpreviousF1: previousCase?.f1,\n\tpreviousMatchedIds: previousCase?.matchedIds ?? [],\n\tpreviousMissingIds: previousCase?.missingIds ?? [],\n\tpreviousStatus: previousCase?.status,\n\tpreviousFailureClasses: previousCase?.failureClasses ?? [],\n\tquery: currentCase.query,\n\tcurrentFailureClasses: currentCase.failureClasses ?? []\n});\n\nconst buildGroundingCaseDiff = (\n\tcurrentCase: RAGAnswerGroundingEvaluationCaseResult,\n\tpreviousCase?: RAGAnswerGroundingEvaluationCaseResult\n): RAGAnswerGroundingEvaluationCaseDiff => ({\n\tanswerChanged:\n\t\ttypeof previousCase?.answer === 'string'\n\t\t\t? previousCase.answer !== currentCase.answer\n\t\t\t: true,\n\tcaseId: currentCase.caseId,\n\tcurrentCitationF1: currentCase.citationF1,\n\tcurrentCitedIds: currentCase.citedIds,\n\tcurrentCoverage: currentCase.coverage,\n\tcurrentExtraIds: currentCase.extraIds,\n\tcurrentMatchedIds: currentCase.matchedIds,\n\tcurrentMissingIds: currentCase.missingIds,\n\tcurrentReferenceCount: currentCase.referenceCount,\n\tcurrentResolvedCitationCount: currentCase.resolvedCitationCount,\n\tcurrentAnswer: currentCase.answer,\n\tcurrentStatus: currentCase.status,\n\tcurrentUngroundedReferenceNumbers:\n\t\tcurrentCase.groundedAnswer.ungroundedReferenceNumbers,\n\tcurrentUnresolvedCitationCount: currentCase.unresolvedCitationCount,\n\tlabel: currentCase.label,\n\tpreviousAnswer: previousCase?.answer,\n\tpreviousCitationF1: previousCase?.citationF1,\n\tpreviousCitedIds: previousCase?.citedIds ?? [],\n\tpreviousCoverage: previousCase?.coverage,\n\tpreviousExtraIds: previousCase?.extraIds ?? [],\n\tpreviousFailureClasses: previousCase?.failureClasses ?? [],\n\tpreviousMatchedIds: previousCase?.matchedIds ?? [],\n\tpreviousMissingIds: previousCase?.missingIds ?? [],\n\tpreviousReferenceCount: previousCase?.referenceCount,\n\tpreviousResolvedCitationCount: previousCase?.resolvedCitationCount,\n\tpreviousStatus: previousCase?.status,\n\tpreviousUngroundedReferenceNumbers:\n\t\tpreviousCase?.groundedAnswer.ungroundedReferenceNumbers ?? [],\n\tpreviousUnresolvedCitationCount: previousCase?.unresolvedCitationCount,\n\tquery: currentCase.query,\n\tcurrentFailureClasses: currentCase.failureClasses ?? []\n});\n\nconst buildGroundingCaseSnapshots = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent?: RAGAnswerGroundingEvaluationRun;\n\tprevious?: RAGAnswerGroundingEvaluationRun;\n}): RAGAnswerGroundingEvaluationCaseSnapshot[] => {\n\tif (!current) {\n\t\treturn [];\n\t}\n\n\tconst previousCases = new Map(\n\t\t(previous?.response.cases ?? []).map((entry) => [entry.caseId, entry])\n\t);\n\n\treturn current.response.cases.map((entry) => {\n\t\tconst previousCase = previousCases.get(entry.caseId);\n\t\treturn {\n\t\t\tanswer: entry.answer,\n\t\t\tanswerChange:\n\t\t\t\ttypeof previousCase?.answer === 'string'\n\t\t\t\t\t? previousCase.answer === entry.answer\n\t\t\t\t\t\t? 'unchanged'\n\t\t\t\t\t\t: 'changed'\n\t\t\t\t\t: 'new',\n\t\t\tcaseId: entry.caseId,\n\t\t\tcitationCount: entry.citationCount,\n\t\t\tcitationF1: entry.citationF1,\n\t\t\tcitedIds: entry.citedIds,\n\t\t\tcoverage: entry.coverage,\n\t\t\textraIds: entry.extraIds,\n\t\t\tfailureClasses: entry.failureClasses,\n\t\t\tlabel: entry.label,\n\t\t\tmatchedIds: entry.matchedIds,\n\t\t\tmissingIds: entry.missingIds,\n\t\t\tpreviousAnswer: previousCase?.answer,\n\t\t\tquery: entry.query,\n\t\t\treferenceCount: entry.referenceCount,\n\t\t\tresolvedCitationCount: entry.resolvedCitationCount,\n\t\t\tresolvedCitationRate: entry.resolvedCitationRate,\n\t\t\tstatus: entry.status,\n\t\t\tungroundedReferenceNumbers:\n\t\t\t\tentry.groundedAnswer.ungroundedReferenceNumbers,\n\t\t\tunresolvedCitationCount: entry.unresolvedCitationCount\n\t\t};\n\t});\n};\n\nconst areStageCountsEqual = (\n\tleft: Partial<Record<RAGRetrievalTraceStage, number>>,\n\tright: Partial<Record<RAGRetrievalTraceStage, number>>\n) => {\n\tconst keys = new Set([\n\t\t...Object.keys(left),\n\t\t...Object.keys(right)\n\t]) as Set<RAGRetrievalTraceStage>;\n\n\tfor (const key of keys) {\n\t\tif ((left[key] ?? 0) !== (right[key] ?? 0)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n};\n\nconst buildEvaluationCaseTraceSnapshot = ({\n\tcaseResult,\n\tfilter,\n\tretrieval,\n\tcurrentTrace,\n\tpreviousTrace,\n\tcurrentSnapshot,\n\ttopResult\n}: {\n\tcaseResult: RAGEvaluationCaseResult;\n\tfilter?: Record<string, unknown>;\n\tretrieval?: RAGCollectionSearchParams['retrieval'];\n\tcurrentTrace?: RAGRetrievalTrace;\n\tpreviousTrace?: RAGEvaluationCaseTraceSnapshot;\n\tcurrentSnapshot?: RAGEvaluationCaseTraceSnapshot;\n\ttopResult?: RAGQueryResult;\n}): RAGEvaluationCaseTraceSnapshot => {\n\tconst stageCounts = currentTrace\n\t\t? buildTraceStageCounts([currentTrace])\n\t\t: {};\n\tconst previousStageCounts = previousTrace?.stageCounts ?? {};\n\tconst currentLeadSnapshot =\n\t\ttopResult || currentSnapshot\n\t\t\t? buildEvaluationLeadSnapshot({\n\t\t\t\t\tmetadata: topResult?.metadata,\n\t\t\t\t\tsource: topResult?.source,\n\t\t\t\t\ttitle: topResult?.title\n\t\t\t\t})\n\t\t\t: {};\n\tconst topContextLabel =\n\t\tcurrentLeadSnapshot.topContextLabel ?? currentSnapshot?.topContextLabel;\n\tconst topLocatorLabel =\n\t\tcurrentLeadSnapshot.topLocatorLabel ?? currentSnapshot?.topLocatorLabel;\n\tconst sourceAwareChunkReasonLabel =\n\t\tcurrentLeadSnapshot.sourceAwareChunkReasonLabel ??\n\t\tcurrentSnapshot?.sourceAwareChunkReasonLabel;\n\tconst sourceAwareUnitScopeLabel =\n\t\tcurrentLeadSnapshot.sourceAwareUnitScopeLabel ??\n\t\tcurrentSnapshot?.sourceAwareUnitScopeLabel;\n\tconst currentLeadMediaCueSnapshot = currentTrace\n\t\t? buildEvaluationLeadMediaCueSnapshot(currentTrace)\n\t\t: {};\n\tconst currentSQLiteQueryPlanSnapshot = currentTrace\n\t\t? buildEvaluationSQLiteQueryPlanSnapshot(currentTrace)\n\t\t: {};\n\tconst currentPostgresQueryPlanSnapshot = currentTrace\n\t\t? buildEvaluationPostgresQueryPlanSnapshot(currentTrace)\n\t\t: {};\n\tconst leadSpeakerCue =\n\t\tcurrentLeadMediaCueSnapshot.leadSpeakerCue ??\n\t\tcurrentSnapshot?.leadSpeakerCue;\n\tconst leadSpeakerAttributionCue =\n\t\tcurrentLeadMediaCueSnapshot.leadSpeakerAttributionCue ??\n\t\tcurrentSnapshot?.leadSpeakerAttributionCue;\n\tconst leadChannelCue =\n\t\tcurrentLeadMediaCueSnapshot.leadChannelCue ??\n\t\tcurrentSnapshot?.leadChannelCue;\n\tconst leadChannelAttributionCue =\n\t\tcurrentLeadMediaCueSnapshot.leadChannelAttributionCue ??\n\t\tcurrentSnapshot?.leadChannelAttributionCue;\n\tconst leadContinuityCue =\n\t\tcurrentLeadMediaCueSnapshot.leadContinuityCue ??\n\t\tcurrentSnapshot?.leadContinuityCue;\n\tconst sqliteQueryMode =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryMode ??\n\t\tcurrentSnapshot?.sqliteQueryMode;\n\tconst sqliteQueryPushdownMode =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryPushdownMode ??\n\t\tcurrentSnapshot?.sqliteQueryPushdownMode;\n\tconst sqliteQueryPushdownApplied =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryPushdownApplied ??\n\t\tcurrentSnapshot?.sqliteQueryPushdownApplied;\n\tconst sqliteQueryPushdownClauseCount =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryPushdownClauseCount ??\n\t\tcurrentSnapshot?.sqliteQueryPushdownClauseCount;\n\tconst sqliteQueryTotalFilterClauseCount =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryTotalFilterClauseCount ??\n\t\tcurrentSnapshot?.sqliteQueryTotalFilterClauseCount;\n\tconst sqliteQueryJsRemainderClauseCount =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryJsRemainderClauseCount ??\n\t\tcurrentSnapshot?.sqliteQueryJsRemainderClauseCount;\n\tconst sqliteQueryMultiplierUsed =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryMultiplierUsed ??\n\t\tcurrentSnapshot?.sqliteQueryMultiplierUsed;\n\tconst sqliteQueryCandidateLimitUsed =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryCandidateLimitUsed ??\n\t\tcurrentSnapshot?.sqliteQueryCandidateLimitUsed;\n\tconst sqliteQueryMaxBackfillsUsed =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryMaxBackfillsUsed ??\n\t\tcurrentSnapshot?.sqliteQueryMaxBackfillsUsed;\n\tconst sqliteQueryMinResultsUsed =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryMinResultsUsed ??\n\t\tcurrentSnapshot?.sqliteQueryMinResultsUsed;\n\tconst sqliteQueryFillPolicyUsed =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryFillPolicyUsed ??\n\t\tcurrentSnapshot?.sqliteQueryFillPolicyUsed;\n\tconst sqliteQueryPushdownCoverageRatio =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryPushdownCoverageRatio ??\n\t\tcurrentSnapshot?.sqliteQueryPushdownCoverageRatio;\n\tconst sqliteQueryJsRemainderRatio =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryJsRemainderRatio ??\n\t\tcurrentSnapshot?.sqliteQueryJsRemainderRatio;\n\tconst sqliteQueryFilteredCandidates =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryFilteredCandidates ??\n\t\tcurrentSnapshot?.sqliteQueryFilteredCandidates;\n\tconst sqliteQueryInitialSearchK =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryInitialSearchK ??\n\t\tcurrentSnapshot?.sqliteQueryInitialSearchK;\n\tconst sqliteQueryFinalSearchK =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryFinalSearchK ??\n\t\tcurrentSnapshot?.sqliteQueryFinalSearchK;\n\tconst sqliteQuerySearchExpansionRatio =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQuerySearchExpansionRatio ??\n\t\tcurrentSnapshot?.sqliteQuerySearchExpansionRatio;\n\tconst sqliteQueryBackfillCount =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryBackfillCount ??\n\t\tcurrentSnapshot?.sqliteQueryBackfillCount;\n\tconst sqliteQueryBackfillLimitReached =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryBackfillLimitReached ??\n\t\tcurrentSnapshot?.sqliteQueryBackfillLimitReached;\n\tconst sqliteQueryMinResultsSatisfied =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryMinResultsSatisfied ??\n\t\tcurrentSnapshot?.sqliteQueryMinResultsSatisfied;\n\tconst sqliteQueryReturnedCount =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryReturnedCount ??\n\t\tcurrentSnapshot?.sqliteQueryReturnedCount;\n\tconst sqliteQueryCandidateYieldRatio =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryCandidateYieldRatio ??\n\t\tcurrentSnapshot?.sqliteQueryCandidateYieldRatio;\n\tconst sqliteQueryTopKFillRatio =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryTopKFillRatio ??\n\t\tcurrentSnapshot?.sqliteQueryTopKFillRatio;\n\tconst sqliteQueryUnderfilledTopK =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryUnderfilledTopK ??\n\t\tcurrentSnapshot?.sqliteQueryUnderfilledTopK;\n\tconst sqliteQueryCandidateBudgetExhausted =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryCandidateBudgetExhausted ??\n\t\tcurrentSnapshot?.sqliteQueryCandidateBudgetExhausted;\n\tconst sqliteQueryCandidateCoverage =\n\t\tcurrentSQLiteQueryPlanSnapshot.sqliteQueryCandidateCoverage ??\n\t\tcurrentSnapshot?.sqliteQueryCandidateCoverage;\n\tconst postgresQueryMode =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryMode ??\n\t\tcurrentSnapshot?.postgresQueryMode;\n\tconst postgresQueryPushdownMode =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryPushdownMode ??\n\t\tcurrentSnapshot?.postgresQueryPushdownMode;\n\tconst postgresQueryPushdownApplied =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryPushdownApplied ??\n\t\tcurrentSnapshot?.postgresQueryPushdownApplied;\n\tconst postgresQueryPushdownClauseCount =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryPushdownClauseCount ??\n\t\tcurrentSnapshot?.postgresQueryPushdownClauseCount;\n\tconst postgresQueryTotalFilterClauseCount =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryTotalFilterClauseCount ??\n\t\tcurrentSnapshot?.postgresQueryTotalFilterClauseCount;\n\tconst postgresQueryJsRemainderClauseCount =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryJsRemainderClauseCount ??\n\t\tcurrentSnapshot?.postgresQueryJsRemainderClauseCount;\n\tconst postgresQueryMultiplierUsed =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryMultiplierUsed ??\n\t\tcurrentSnapshot?.postgresQueryMultiplierUsed;\n\tconst postgresQueryCandidateLimitUsed =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryCandidateLimitUsed ??\n\t\tcurrentSnapshot?.postgresQueryCandidateLimitUsed;\n\tconst postgresQueryMaxBackfillsUsed =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryMaxBackfillsUsed ??\n\t\tcurrentSnapshot?.postgresQueryMaxBackfillsUsed;\n\tconst postgresQueryMinResultsUsed =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryMinResultsUsed ??\n\t\tcurrentSnapshot?.postgresQueryMinResultsUsed;\n\tconst postgresQueryFillPolicyUsed =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryFillPolicyUsed ??\n\t\tcurrentSnapshot?.postgresQueryFillPolicyUsed;\n\tconst postgresQueryPushdownCoverageRatio =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryPushdownCoverageRatio ??\n\t\tcurrentSnapshot?.postgresQueryPushdownCoverageRatio;\n\tconst postgresQueryJsRemainderRatio =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryJsRemainderRatio ??\n\t\tcurrentSnapshot?.postgresQueryJsRemainderRatio;\n\tconst postgresQueryFilteredCandidates =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryFilteredCandidates ??\n\t\tcurrentSnapshot?.postgresQueryFilteredCandidates;\n\tconst postgresQueryInitialSearchK =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryInitialSearchK ??\n\t\tcurrentSnapshot?.postgresQueryInitialSearchK;\n\tconst postgresQueryFinalSearchK =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryFinalSearchK ??\n\t\tcurrentSnapshot?.postgresQueryFinalSearchK;\n\tconst postgresQuerySearchExpansionRatio =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQuerySearchExpansionRatio ??\n\t\tcurrentSnapshot?.postgresQuerySearchExpansionRatio;\n\tconst postgresQueryBackfillCount =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryBackfillCount ??\n\t\tcurrentSnapshot?.postgresQueryBackfillCount;\n\tconst postgresQueryBackfillLimitReached =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryBackfillLimitReached ??\n\t\tcurrentSnapshot?.postgresQueryBackfillLimitReached;\n\tconst postgresQueryMinResultsSatisfied =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryMinResultsSatisfied ??\n\t\tcurrentSnapshot?.postgresQueryMinResultsSatisfied;\n\tconst postgresQueryReturnedCount =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryReturnedCount ??\n\t\tcurrentSnapshot?.postgresQueryReturnedCount;\n\tconst postgresQueryCandidateYieldRatio =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryCandidateYieldRatio ??\n\t\tcurrentSnapshot?.postgresQueryCandidateYieldRatio;\n\tconst postgresQueryTopKFillRatio =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryTopKFillRatio ??\n\t\tcurrentSnapshot?.postgresQueryTopKFillRatio;\n\tconst postgresQueryUnderfilledTopK =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryUnderfilledTopK ??\n\t\tcurrentSnapshot?.postgresQueryUnderfilledTopK;\n\tconst postgresQueryCandidateBudgetExhausted =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryCandidateBudgetExhausted ??\n\t\tcurrentSnapshot?.postgresQueryCandidateBudgetExhausted;\n\tconst postgresQueryCandidateCoverage =\n\t\tcurrentPostgresQueryPlanSnapshot.postgresQueryCandidateCoverage ??\n\t\tcurrentSnapshot?.postgresQueryCandidateCoverage;\n\tconst currentFilterSignature = JSON.stringify(filter ?? undefined);\n\tconst previousFilterSignature = JSON.stringify(\n\t\tpreviousTrace?.inputFilter ?? undefined\n\t);\n\tconst currentRetrievalSignature = JSON.stringify(retrieval ?? undefined);\n\tconst previousRetrievalSignature = JSON.stringify(\n\t\tpreviousTrace?.inputRetrieval ?? undefined\n\t);\n\tconst traceChange = !previousTrace\n\t\t? currentTrace\n\t\t\t? 'new'\n\t\t\t: 'unchanged'\n\t\t: previousTrace.traceMode !== currentTrace?.mode ||\n\t\t\t previousFilterSignature !== currentFilterSignature ||\n\t\t\t previousRetrievalSignature !== currentRetrievalSignature ||\n\t\t\t previousTrace.sourceBalanceStrategy !==\n\t\t\t\t\tcurrentTrace?.sourceBalanceStrategy ||\n\t\t\t previousTrace.transformedQuery !==\n\t\t\t\t\t(currentTrace?.transformedQuery || undefined) ||\n\t\t\t previousTrace.variantQueries.join('|') !==\n\t\t\t\t\t(currentTrace?.variantQueries ?? []).join('|') ||\n\t\t\t previousTrace.finalCount !==\n\t\t\t\t\t(currentTrace?.resultCounts.final ?? 0) ||\n\t\t\t previousTrace.vectorCount !==\n\t\t\t\t\t(currentTrace?.resultCounts.vector ?? 0) ||\n\t\t\t previousTrace.lexicalCount !==\n\t\t\t\t\t(currentTrace?.resultCounts.lexical ?? 0) ||\n\t\t\t previousTrace.candidateTopK !==\n\t\t\t\t\t(currentTrace?.candidateTopK ?? 0) ||\n\t\t\t previousTrace.lexicalTopK !== (currentTrace?.lexicalTopK ?? 0) ||\n\t\t\t previousTrace.topContextLabel !== topContextLabel ||\n\t\t\t previousTrace.topLocatorLabel !== topLocatorLabel ||\n\t\t\t previousTrace.sourceAwareChunkReasonLabel !==\n\t\t\t\t\tsourceAwareChunkReasonLabel ||\n\t\t\t previousTrace.sourceAwareUnitScopeLabel !==\n\t\t\t\t\tsourceAwareUnitScopeLabel ||\n\t\t\t previousTrace.leadSpeakerCue !== leadSpeakerCue ||\n\t\t\t previousTrace.leadSpeakerAttributionCue !==\n\t\t\t\t\tleadSpeakerAttributionCue ||\n\t\t\t previousTrace.leadChannelCue !== leadChannelCue ||\n\t\t\t previousTrace.leadChannelAttributionCue !==\n\t\t\t\t\tleadChannelAttributionCue ||\n\t\t\t previousTrace.leadContinuityCue !== leadContinuityCue ||\n\t\t\t previousTrace.sqliteQueryMode !== sqliteQueryMode ||\n\t\t\t previousTrace.sqliteQueryPushdownMode !==\n\t\t\t\t\tsqliteQueryPushdownMode ||\n\t\t\t previousTrace.sqliteQueryPushdownApplied !==\n\t\t\t\t\tsqliteQueryPushdownApplied ||\n\t\t\t previousTrace.sqliteQueryPushdownClauseCount !==\n\t\t\t\t\tsqliteQueryPushdownClauseCount ||\n\t\t\t previousTrace.sqliteQueryTotalFilterClauseCount !==\n\t\t\t\t\tsqliteQueryTotalFilterClauseCount ||\n\t\t\t previousTrace.sqliteQueryJsRemainderClauseCount !==\n\t\t\t\t\tsqliteQueryJsRemainderClauseCount ||\n\t\t\t previousTrace.sqliteQueryMultiplierUsed !==\n\t\t\t\t\tsqliteQueryMultiplierUsed ||\n\t\t\t previousTrace.sqliteQueryCandidateLimitUsed !==\n\t\t\t\t\tsqliteQueryCandidateLimitUsed ||\n\t\t\t previousTrace.sqliteQueryMaxBackfillsUsed !==\n\t\t\t\t\tsqliteQueryMaxBackfillsUsed ||\n\t\t\t previousTrace.sqliteQueryMinResultsUsed !==\n\t\t\t\t\tsqliteQueryMinResultsUsed ||\n\t\t\t previousTrace.sqliteQueryFillPolicyUsed !==\n\t\t\t\t\tsqliteQueryFillPolicyUsed ||\n\t\t\t previousTrace.sqliteQueryPushdownCoverageRatio !==\n\t\t\t\t\tsqliteQueryPushdownCoverageRatio ||\n\t\t\t previousTrace.sqliteQueryJsRemainderRatio !==\n\t\t\t\t\tsqliteQueryJsRemainderRatio ||\n\t\t\t previousTrace.sqliteQueryFilteredCandidates !==\n\t\t\t\t\tsqliteQueryFilteredCandidates ||\n\t\t\t previousTrace.sqliteQueryInitialSearchK !==\n\t\t\t\t\tsqliteQueryInitialSearchK ||\n\t\t\t previousTrace.sqliteQueryFinalSearchK !==\n\t\t\t\t\tsqliteQueryFinalSearchK ||\n\t\t\t previousTrace.sqliteQuerySearchExpansionRatio !==\n\t\t\t\t\tsqliteQuerySearchExpansionRatio ||\n\t\t\t previousTrace.sqliteQueryBackfillCount !==\n\t\t\t\t\tsqliteQueryBackfillCount ||\n\t\t\t previousTrace.sqliteQueryBackfillLimitReached !==\n\t\t\t\t\tsqliteQueryBackfillLimitReached ||\n\t\t\t previousTrace.sqliteQueryMinResultsSatisfied !==\n\t\t\t\t\tsqliteQueryMinResultsSatisfied ||\n\t\t\t previousTrace.sqliteQueryReturnedCount !==\n\t\t\t\t\tsqliteQueryReturnedCount ||\n\t\t\t previousTrace.sqliteQueryCandidateYieldRatio !==\n\t\t\t\t\tsqliteQueryCandidateYieldRatio ||\n\t\t\t previousTrace.sqliteQueryTopKFillRatio !==\n\t\t\t\t\tsqliteQueryTopKFillRatio ||\n\t\t\t previousTrace.sqliteQueryUnderfilledTopK !==\n\t\t\t\t\tsqliteQueryUnderfilledTopK ||\n\t\t\t previousTrace.sqliteQueryCandidateBudgetExhausted !==\n\t\t\t\t\tsqliteQueryCandidateBudgetExhausted ||\n\t\t\t previousTrace.sqliteQueryCandidateCoverage !==\n\t\t\t\t\tsqliteQueryCandidateCoverage ||\n\t\t\t previousTrace.postgresQueryMode !== postgresQueryMode ||\n\t\t\t previousTrace.postgresQueryPushdownMode !==\n\t\t\t\t\tpostgresQueryPushdownMode ||\n\t\t\t previousTrace.postgresQueryPushdownApplied !==\n\t\t\t\t\tpostgresQueryPushdownApplied ||\n\t\t\t previousTrace.postgresQueryPushdownClauseCount !==\n\t\t\t\t\tpostgresQueryPushdownClauseCount ||\n\t\t\t previousTrace.postgresQueryTotalFilterClauseCount !==\n\t\t\t\t\tpostgresQueryTotalFilterClauseCount ||\n\t\t\t previousTrace.postgresQueryJsRemainderClauseCount !==\n\t\t\t\t\tpostgresQueryJsRemainderClauseCount ||\n\t\t\t previousTrace.postgresQueryMultiplierUsed !==\n\t\t\t\t\tpostgresQueryMultiplierUsed ||\n\t\t\t previousTrace.postgresQueryCandidateLimitUsed !==\n\t\t\t\t\tpostgresQueryCandidateLimitUsed ||\n\t\t\t previousTrace.postgresQueryMaxBackfillsUsed !==\n\t\t\t\t\tpostgresQueryMaxBackfillsUsed ||\n\t\t\t previousTrace.postgresQueryMinResultsUsed !==\n\t\t\t\t\tpostgresQueryMinResultsUsed ||\n\t\t\t previousTrace.postgresQueryFillPolicyUsed !==\n\t\t\t\t\tpostgresQueryFillPolicyUsed ||\n\t\t\t previousTrace.postgresQueryPushdownCoverageRatio !==\n\t\t\t\t\tpostgresQueryPushdownCoverageRatio ||\n\t\t\t previousTrace.postgresQueryJsRemainderRatio !==\n\t\t\t\t\tpostgresQueryJsRemainderRatio ||\n\t\t\t previousTrace.postgresQueryFilteredCandidates !==\n\t\t\t\t\tpostgresQueryFilteredCandidates ||\n\t\t\t previousTrace.postgresQueryInitialSearchK !==\n\t\t\t\t\tpostgresQueryInitialSearchK ||\n\t\t\t previousTrace.postgresQueryFinalSearchK !==\n\t\t\t\t\tpostgresQueryFinalSearchK ||\n\t\t\t previousTrace.postgresQuerySearchExpansionRatio !==\n\t\t\t\t\tpostgresQuerySearchExpansionRatio ||\n\t\t\t previousTrace.postgresQueryBackfillCount !==\n\t\t\t\t\tpostgresQueryBackfillCount ||\n\t\t\t previousTrace.postgresQueryBackfillLimitReached !==\n\t\t\t\t\tpostgresQueryBackfillLimitReached ||\n\t\t\t previousTrace.postgresQueryMinResultsSatisfied !==\n\t\t\t\t\tpostgresQueryMinResultsSatisfied ||\n\t\t\t previousTrace.postgresQueryReturnedCount !==\n\t\t\t\t\tpostgresQueryReturnedCount ||\n\t\t\t previousTrace.postgresQueryCandidateYieldRatio !==\n\t\t\t\t\tpostgresQueryCandidateYieldRatio ||\n\t\t\t previousTrace.postgresQueryTopKFillRatio !==\n\t\t\t\t\tpostgresQueryTopKFillRatio ||\n\t\t\t previousTrace.postgresQueryUnderfilledTopK !==\n\t\t\t\t\tpostgresQueryUnderfilledTopK ||\n\t\t\t previousTrace.postgresQueryCandidateBudgetExhausted !==\n\t\t\t\t\tpostgresQueryCandidateBudgetExhausted ||\n\t\t\t previousTrace.postgresQueryCandidateCoverage !==\n\t\t\t\t\tpostgresQueryCandidateCoverage ||\n\t\t\t !areStageCountsEqual(previousStageCounts, stageCounts)\n\t\t\t? 'changed'\n\t\t\t: 'unchanged';\n\n\treturn {\n\t\tcandidateTopK: currentTrace?.candidateTopK ?? 0,\n\t\tcaseId: caseResult.caseId,\n\t\tcorpusKey: caseResult.corpusKey,\n\t\tinputFilter: filter,\n\t\tfinalCount: currentTrace?.resultCounts.final ?? 0,\n\t\tlabel: caseResult.label,\n\t\tlexicalCount: currentTrace?.resultCounts.lexical ?? 0,\n\t\tlexicalTopK: currentTrace?.lexicalTopK ?? 0,\n\t\tinputRetrieval: retrieval,\n\t\tpreviousCandidateTopK: previousTrace?.candidateTopK,\n\t\tpreviousFinalCount: previousTrace?.finalCount,\n\t\tpreviousLexicalCount: previousTrace?.lexicalCount,\n\t\tpreviousLexicalTopK: previousTrace?.lexicalTopK,\n\t\tpreviousInputFilter: previousTrace?.inputFilter,\n\t\tpreviousInputRetrieval: previousTrace?.inputRetrieval,\n\t\tpreviousLeadChannelAttributionCue:\n\t\t\tpreviousTrace?.leadChannelAttributionCue,\n\t\tpreviousLeadChannelCue: previousTrace?.leadChannelCue,\n\t\tpreviousLeadContinuityCue: previousTrace?.leadContinuityCue,\n\t\tpreviousLeadSpeakerAttributionCue:\n\t\t\tpreviousTrace?.leadSpeakerAttributionCue,\n\t\tpreviousLeadSpeakerCue: previousTrace?.leadSpeakerCue,\n\t\tpreviousSqliteQueryBackfillCount:\n\t\t\tpreviousTrace?.sqliteQueryBackfillCount,\n\t\tpreviousSqliteQueryBackfillLimitReached:\n\t\t\tpreviousTrace?.sqliteQueryBackfillLimitReached,\n\t\tpreviousSqliteQueryMinResultsSatisfied:\n\t\t\tpreviousTrace?.sqliteQueryMinResultsSatisfied,\n\t\tpreviousSqliteQueryCandidateBudgetExhausted:\n\t\t\tpreviousTrace?.sqliteQueryCandidateBudgetExhausted,\n\t\tpreviousSqliteQueryCandidateCoverage:\n\t\t\tpreviousTrace?.sqliteQueryCandidateCoverage,\n\t\tpreviousSqliteQueryFilteredCandidates:\n\t\t\tpreviousTrace?.sqliteQueryFilteredCandidates,\n\t\tpreviousSqliteQueryFinalSearchK: previousTrace?.sqliteQueryFinalSearchK,\n\t\tpreviousSqliteQueryInitialSearchK:\n\t\t\tpreviousTrace?.sqliteQueryInitialSearchK,\n\t\tpreviousSqliteQuerySearchExpansionRatio:\n\t\t\tpreviousTrace?.sqliteQuerySearchExpansionRatio,\n\t\tpreviousSqliteQueryMode: previousTrace?.sqliteQueryMode,\n\t\tpreviousSqliteQueryPushdownMode: previousTrace?.sqliteQueryPushdownMode,\n\t\tpreviousSqliteQueryPushdownApplied:\n\t\t\tpreviousTrace?.sqliteQueryPushdownApplied,\n\t\tpreviousSqliteQueryPushdownClauseCount:\n\t\t\tpreviousTrace?.sqliteQueryPushdownClauseCount,\n\t\tpreviousSqliteQueryTotalFilterClauseCount:\n\t\t\tpreviousTrace?.sqliteQueryTotalFilterClauseCount,\n\t\tpreviousSqliteQueryJsRemainderClauseCount:\n\t\t\tpreviousTrace?.sqliteQueryJsRemainderClauseCount,\n\t\tpreviousSqliteQueryMultiplierUsed:\n\t\t\tpreviousTrace?.sqliteQueryMultiplierUsed,\n\t\tpreviousSqliteQueryCandidateLimitUsed:\n\t\t\tpreviousTrace?.sqliteQueryCandidateLimitUsed,\n\t\tpreviousSqliteQueryMaxBackfillsUsed:\n\t\t\tpreviousTrace?.sqliteQueryMaxBackfillsUsed,\n\t\tpreviousSqliteQueryMinResultsUsed:\n\t\t\tpreviousTrace?.sqliteQueryMinResultsUsed,\n\t\tpreviousSqliteQueryFillPolicyUsed:\n\t\t\tpreviousTrace?.sqliteQueryFillPolicyUsed,\n\t\tpreviousSqliteQueryPushdownCoverageRatio:\n\t\t\tpreviousTrace?.sqliteQueryPushdownCoverageRatio,\n\t\tpreviousSqliteQueryJsRemainderRatio:\n\t\t\tpreviousTrace?.sqliteQueryJsRemainderRatio,\n\t\tpreviousSqliteQueryReturnedCount:\n\t\t\tpreviousTrace?.sqliteQueryReturnedCount,\n\t\tpreviousSqliteQueryCandidateYieldRatio:\n\t\t\tpreviousTrace?.sqliteQueryCandidateYieldRatio,\n\t\tpreviousSqliteQueryTopKFillRatio:\n\t\t\tpreviousTrace?.sqliteQueryTopKFillRatio,\n\t\tpreviousSqliteQueryUnderfilledTopK:\n\t\t\tpreviousTrace?.sqliteQueryUnderfilledTopK,\n\t\tpreviousPostgresQueryBackfillCount:\n\t\t\tpreviousTrace?.postgresQueryBackfillCount,\n\t\tpreviousPostgresQueryBackfillLimitReached:\n\t\t\tpreviousTrace?.postgresQueryBackfillLimitReached,\n\t\tpreviousPostgresQueryMinResultsSatisfied:\n\t\t\tpreviousTrace?.postgresQueryMinResultsSatisfied,\n\t\tpreviousPostgresQueryCandidateBudgetExhausted:\n\t\t\tpreviousTrace?.postgresQueryCandidateBudgetExhausted,\n\t\tpreviousPostgresQueryCandidateCoverage:\n\t\t\tpreviousTrace?.postgresQueryCandidateCoverage,\n\t\tpreviousPostgresQueryFilteredCandidates:\n\t\t\tpreviousTrace?.postgresQueryFilteredCandidates,\n\t\tpreviousPostgresQueryFinalSearchK:\n\t\t\tpreviousTrace?.postgresQueryFinalSearchK,\n\t\tpreviousPostgresQueryInitialSearchK:\n\t\t\tpreviousTrace?.postgresQueryInitialSearchK,\n\t\tpreviousPostgresQuerySearchExpansionRatio:\n\t\t\tpreviousTrace?.postgresQuerySearchExpansionRatio,\n\t\tpreviousPostgresQueryMode: previousTrace?.postgresQueryMode,\n\t\tpreviousPostgresQueryPushdownMode:\n\t\t\tpreviousTrace?.postgresQueryPushdownMode,\n\t\tpreviousPostgresQueryPushdownApplied:\n\t\t\tpreviousTrace?.postgresQueryPushdownApplied,\n\t\tpreviousPostgresQueryPushdownClauseCount:\n\t\t\tpreviousTrace?.postgresQueryPushdownClauseCount,\n\t\tpreviousPostgresQueryTotalFilterClauseCount:\n\t\t\tpreviousTrace?.postgresQueryTotalFilterClauseCount,\n\t\tpreviousPostgresQueryJsRemainderClauseCount:\n\t\t\tpreviousTrace?.postgresQueryJsRemainderClauseCount,\n\t\tpreviousPostgresQueryMultiplierUsed:\n\t\t\tpreviousTrace?.postgresQueryMultiplierUsed,\n\t\tpreviousPostgresQueryCandidateLimitUsed:\n\t\t\tpreviousTrace?.postgresQueryCandidateLimitUsed,\n\t\tpreviousPostgresQueryMaxBackfillsUsed:\n\t\t\tpreviousTrace?.postgresQueryMaxBackfillsUsed,\n\t\tpreviousPostgresQueryMinResultsUsed:\n\t\t\tpreviousTrace?.postgresQueryMinResultsUsed,\n\t\tpreviousPostgresQueryFillPolicyUsed:\n\t\t\tpreviousTrace?.postgresQueryFillPolicyUsed,\n\t\tpreviousPostgresQueryPushdownCoverageRatio:\n\t\t\tpreviousTrace?.postgresQueryPushdownCoverageRatio,\n\t\tpreviousPostgresQueryJsRemainderRatio:\n\t\t\tpreviousTrace?.postgresQueryJsRemainderRatio,\n\t\tpreviousPostgresQueryReturnedCount:\n\t\t\tpreviousTrace?.postgresQueryReturnedCount,\n\t\tpreviousPostgresQueryCandidateYieldRatio:\n\t\t\tpreviousTrace?.postgresQueryCandidateYieldRatio,\n\t\tpreviousPostgresQueryTopKFillRatio:\n\t\t\tpreviousTrace?.postgresQueryTopKFillRatio,\n\t\tpreviousPostgresQueryUnderfilledTopK:\n\t\t\tpreviousTrace?.postgresQueryUnderfilledTopK,\n\t\tpreviousSourceBalanceStrategy: previousTrace?.sourceBalanceStrategy,\n\t\tpreviousSourceAwareChunkReasonLabel:\n\t\t\tpreviousTrace?.sourceAwareChunkReasonLabel,\n\t\tpreviousStageCounts,\n\t\tpreviousTopContextLabel: previousTrace?.topContextLabel,\n\t\tpreviousTopLocatorLabel: previousTrace?.topLocatorLabel,\n\t\tpreviousTraceMode: previousTrace?.traceMode,\n\t\tpreviousTransformedQuery: previousTrace?.transformedQuery,\n\t\tpreviousSourceAwareUnitScopeLabel:\n\t\t\tpreviousTrace?.sourceAwareUnitScopeLabel,\n\t\tpreviousVariantQueries: previousTrace?.variantQueries ?? [],\n\t\tpreviousVectorCount: previousTrace?.vectorCount,\n\t\tquery: caseResult.query,\n\t\tleadChannelAttributionCue,\n\t\tleadChannelCue,\n\t\tleadContinuityCue,\n\t\tleadSpeakerAttributionCue,\n\t\tleadSpeakerCue,\n\t\tsqliteQueryBackfillCount,\n\t\tsqliteQueryBackfillLimitReached,\n\t\tsqliteQueryMinResultsSatisfied,\n\t\tsqliteQueryCandidateBudgetExhausted,\n\t\tsqliteQueryCandidateCoverage,\n\t\tsqliteQueryFilteredCandidates,\n\t\tsqliteQueryFinalSearchK,\n\t\tsqliteQueryInitialSearchK,\n\t\tsqliteQuerySearchExpansionRatio,\n\t\tsqliteQueryMode,\n\t\tsqliteQueryPushdownMode,\n\t\tsqliteQueryPushdownApplied,\n\t\tsqliteQueryPushdownClauseCount,\n\t\tsqliteQueryTotalFilterClauseCount,\n\t\tsqliteQueryJsRemainderClauseCount,\n\t\tsqliteQueryMultiplierUsed,\n\t\tsqliteQueryCandidateLimitUsed,\n\t\tsqliteQueryMaxBackfillsUsed,\n\t\tsqliteQueryMinResultsUsed,\n\t\tsqliteQueryFillPolicyUsed,\n\t\tsqliteQueryPushdownCoverageRatio,\n\t\tsqliteQueryJsRemainderRatio,\n\t\tsqliteQueryReturnedCount,\n\t\tsqliteQueryCandidateYieldRatio,\n\t\tsqliteQueryTopKFillRatio,\n\t\tsqliteQueryUnderfilledTopK,\n\t\tpostgresQueryBackfillCount,\n\t\tpostgresQueryBackfillLimitReached,\n\t\tpostgresQueryMinResultsSatisfied,\n\t\tpostgresQueryCandidateBudgetExhausted,\n\t\tpostgresQueryCandidateCoverage,\n\t\tpostgresQueryFilteredCandidates,\n\t\tpostgresQueryFinalSearchK,\n\t\tpostgresQueryInitialSearchK,\n\t\tpostgresQuerySearchExpansionRatio,\n\t\tpostgresQueryMode,\n\t\tpostgresQueryPushdownMode,\n\t\tpostgresQueryPushdownApplied,\n\t\tpostgresQueryPushdownClauseCount,\n\t\tpostgresQueryTotalFilterClauseCount,\n\t\tpostgresQueryJsRemainderClauseCount,\n\t\tpostgresQueryMultiplierUsed,\n\t\tpostgresQueryCandidateLimitUsed,\n\t\tpostgresQueryMaxBackfillsUsed,\n\t\tpostgresQueryMinResultsUsed,\n\t\tpostgresQueryFillPolicyUsed,\n\t\tpostgresQueryPushdownCoverageRatio,\n\t\tpostgresQueryJsRemainderRatio,\n\t\tpostgresQueryReturnedCount,\n\t\tpostgresQueryCandidateYieldRatio,\n\t\tpostgresQueryTopKFillRatio,\n\t\tpostgresQueryUnderfilledTopK,\n\t\tsourceAwareChunkReasonLabel,\n\t\tsourceAwareUnitScopeLabel,\n\t\tstageCounts,\n\t\tstatus: caseResult.status,\n\t\tsourceBalanceStrategy: currentTrace?.sourceBalanceStrategy,\n\t\ttopContextLabel,\n\t\ttopLocatorLabel,\n\t\ttraceChange,\n\t\ttraceMode: currentTrace?.mode,\n\t\ttransformedQuery: currentTrace?.transformedQuery || undefined,\n\t\tvariantQueries: currentTrace?.variantQueries ?? [],\n\t\tvectorCount: currentTrace?.resultCounts.vector ?? 0\n\t};\n};\n\nconst buildEvaluationCaseTraceSnapshotsFromEvaluated = (\n\tevaluated: Array<{\n\t\tcaseResult: RAGEvaluationCaseResult;\n\t\ttrace?: RAGRetrievalTrace;\n\t\tfilter?: Record<string, unknown>;\n\t\tretrieval?: RAGCollectionSearchParams['retrieval'];\n\t\ttopResult?: RAGQueryResult;\n\t}>\n): RAGEvaluationCaseTraceSnapshot[] =>\n\tevaluated.map(({ caseResult, filter, retrieval, trace, topResult }) =>\n\t\tbuildEvaluationCaseTraceSnapshot({\n\t\t\tcaseResult,\n\t\t\tfilter,\n\t\t\tretrieval,\n\t\t\tcurrentTrace: trace,\n\t\t\ttopResult\n\t\t})\n\t);\n\nconst buildEvaluationCaseTraceSnapshots = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent?: RAGEvaluationSuiteRun;\n\tprevious?: RAGEvaluationSuiteRun;\n}): RAGEvaluationCaseTraceSnapshot[] => {\n\tif (!current) {\n\t\treturn [];\n\t}\n\n\tconst currentTraces = new Map(\n\t\t(current.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry])\n\t);\n\tconst previousTraces = new Map(\n\t\t(previous?.caseTraceSnapshots ?? []).map((entry) => [\n\t\t\tentry.caseId,\n\t\t\tentry\n\t\t])\n\t);\n\n\treturn current.response.cases.map((caseResult) =>\n\t\tbuildEvaluationCaseTraceSnapshot({\n\t\t\tcaseResult,\n\t\t\tcurrentSnapshot: currentTraces.get(caseResult.caseId),\n\t\t\tcurrentTrace: (() => {\n\t\t\t\tconst currentSnapshot = currentTraces.get(caseResult.caseId);\n\t\t\t\tif (!currentSnapshot) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcandidateTopK: currentSnapshot.candidateTopK,\n\t\t\t\t\tlexicalTopK: currentSnapshot.lexicalTopK,\n\t\t\t\t\tmode: currentSnapshot.traceMode ?? 'vector',\n\t\t\t\t\tquery: caseResult.query,\n\t\t\t\t\tresultCounts: {\n\t\t\t\t\t\tfinal: currentSnapshot.finalCount,\n\t\t\t\t\t\tfused: currentSnapshot.finalCount,\n\t\t\t\t\t\tlexical: currentSnapshot.lexicalCount,\n\t\t\t\t\t\treranked: currentSnapshot.finalCount,\n\t\t\t\t\t\tvector: currentSnapshot.vectorCount\n\t\t\t\t\t},\n\t\t\t\t\trunLexical: currentSnapshot.lexicalCount > 0,\n\t\t\t\t\trunVector: currentSnapshot.vectorCount > 0,\n\t\t\t\t\tsourceBalanceStrategy:\n\t\t\t\t\t\tcurrentSnapshot.sourceBalanceStrategy ?? 'cap',\n\t\t\t\t\tsteps: [],\n\t\t\t\t\ttopK: caseResult.topK,\n\t\t\t\t\ttransformedQuery:\n\t\t\t\t\t\tcurrentSnapshot.transformedQuery ?? caseResult.query,\n\t\t\t\t\tvariantQueries: currentSnapshot.variantQueries\n\t\t\t\t} satisfies RAGRetrievalTrace;\n\t\t\t})(),\n\t\t\tpreviousTrace: previousTraces.get(caseResult.caseId)\n\t\t})\n\t);\n};\n\nconst getStatusRank = (status: RAGEvaluationCaseResult['status']) =>\n\tstatus === 'pass' ? 2 : status === 'partial' ? 1 : 0;\n\nconst buildCaseTraceLeadLabel = (\n\ttrace?: Pick<\n\t\tRAGEvaluationCaseTraceSnapshot,\n\t\t| 'topLocatorLabel'\n\t\t| 'topContextLabel'\n\t\t| 'sourceAwareUnitScopeLabel'\n\t\t| 'sourceAwareChunkReasonLabel'\n\t>\n) =>\n\ttrace?.topLocatorLabel ??\n\ttrace?.topContextLabel ??\n\ttrace?.sourceAwareUnitScopeLabel ??\n\ttrace?.sourceAwareChunkReasonLabel;\n\nexport const buildRAGEvaluationRunDiff = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGEvaluationSuiteRun;\n\tprevious?: RAGEvaluationSuiteRun;\n}): RAGEvaluationRunDiff => {\n\tconst previousCases = new Map(\n\t\t(previous?.response.cases ?? []).map((entry) => [entry.caseId, entry])\n\t);\n\tconst diffs = current.response.cases.map((entry) =>\n\t\tbuildCaseDiff(entry, previousCases.get(entry.caseId))\n\t);\n\tconst regressedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) <\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\tconst improvedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) >\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\tconst unchangedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) ===\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\tconst previousCaseTraces = new Map(\n\t\t(previous?.caseTraceSnapshots ?? []).map((entry) => [\n\t\t\tentry.caseId,\n\t\t\tentry\n\t\t])\n\t);\n\tconst traceLeadChanges = (current.caseTraceSnapshots ?? [])\n\t\t.map((entry) => {\n\t\t\tconst previousEntry = previousCaseTraces.get(entry.caseId);\n\t\t\tconst currentLead = buildCaseTraceLeadLabel(entry);\n\t\t\tconst previousLead = buildCaseTraceLeadLabel(previousEntry);\n\t\t\tif (!currentLead || currentLead === previousLead) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcaseId: entry.caseId,\n\t\t\t\tcurrentLead,\n\t\t\t\tlabel: entry.label,\n\t\t\t\tpreviousLead\n\t\t\t};\n\t\t})\n\t\t.filter(\n\t\t\t(entry): entry is NonNullable<typeof entry> =>\n\t\t\t\ttypeof entry !== 'undefined'\n\t\t);\n\n\treturn {\n\t\tcurrentRunId: current.id,\n\t\timprovedCases,\n\t\tpreviousRunId: previous?.id,\n\t\tregressedCases,\n\t\tsuiteId: current.suiteId,\n\t\ttraceLeadChanges:\n\t\t\ttraceLeadChanges.length > 0 ? traceLeadChanges : undefined,\n\t\tsummaryDelta: {\n\t\t\taverageF1:\n\t\t\t\tcurrent.response.summary.averageF1 -\n\t\t\t\t(previous?.response.summary.averageF1 ?? 0),\n\t\t\taverageLatencyMs:\n\t\t\t\tcurrent.response.summary.averageLatencyMs -\n\t\t\t\t(previous?.response.summary.averageLatencyMs ?? 0),\n\t\t\tfailedCases:\n\t\t\t\tcurrent.response.summary.failedCases -\n\t\t\t\t(previous?.response.summary.failedCases ?? 0),\n\t\t\tpassedCases:\n\t\t\t\tcurrent.response.summary.passedCases -\n\t\t\t\t(previous?.response.summary.passedCases ?? 0),\n\t\t\tpassingRate:\n\t\t\t\tcurrent.response.passingRate -\n\t\t\t\t(previous?.response.passingRate ?? 0),\n\t\t\tpartialCases:\n\t\t\t\tcurrent.response.summary.partialCases -\n\t\t\t\t(previous?.response.summary.partialCases ?? 0)\n\t\t},\n\t\ttraceSummaryDelta:\n\t\t\tcurrent.traceSummary || previous?.traceSummary\n\t\t\t\t? {\n\t\t\t\t\t\taverageCandidateTopK:\n\t\t\t\t\t\t\t(current.traceSummary?.averageCandidateTopK ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.averageCandidateTopK ?? 0),\n\t\t\t\t\t\taverageFinalCount:\n\t\t\t\t\t\t\t(current.traceSummary?.averageFinalCount ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.averageFinalCount ?? 0),\n\t\t\t\t\t\taverageLexicalCount:\n\t\t\t\t\t\t\t(current.traceSummary?.averageLexicalCount ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.averageLexicalCount ?? 0),\n\t\t\t\t\t\taverageLexicalTopK:\n\t\t\t\t\t\t\t(current.traceSummary?.averageLexicalTopK ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.averageLexicalTopK ?? 0),\n\t\t\t\t\t\taverageVectorCount:\n\t\t\t\t\t\t\t(current.traceSummary?.averageVectorCount ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.averageVectorCount ?? 0),\n\t\t\t\t\t\tbalancedCases:\n\t\t\t\t\t\t\t(current.traceSummary?.balancedCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.balancedCases ?? 0),\n\t\t\t\t\t\tlexicalCases:\n\t\t\t\t\t\t\t(current.traceSummary?.lexicalCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.lexicalCases ?? 0),\n\t\t\t\t\t\tmodesChanged:\n\t\t\t\t\t\t\t(current.traceSummary?.modes ?? []).join('|') !==\n\t\t\t\t\t\t\t(previous?.traceSummary?.modes ?? []).join('|'),\n\t\t\t\t\t\troundRobinCases:\n\t\t\t\t\t\t\t(current.traceSummary?.roundRobinCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.roundRobinCases ?? 0),\n\t\t\t\t\t\tstageCounts: diffTraceStageCounts({\n\t\t\t\t\t\t\tcurrent: current.traceSummary?.stageCounts ?? {},\n\t\t\t\t\t\t\tprevious: previous?.traceSummary?.stageCounts ?? {}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tsourceBalanceStrategiesChanged:\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tcurrent.traceSummary?.sourceBalanceStrategies ??\n\t\t\t\t\t\t\t\t[]\n\t\t\t\t\t\t\t).join('|') !==\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tprevious?.traceSummary\n\t\t\t\t\t\t\t\t\t?.sourceBalanceStrategies ?? []\n\t\t\t\t\t\t\t).join('|'),\n\t\t\t\t\t\ttransformedCases:\n\t\t\t\t\t\t\t(current.traceSummary?.transformedCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.transformedCases ?? 0),\n\t\t\t\t\t\tvariantCases:\n\t\t\t\t\t\t\t(current.traceSummary?.variantCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.variantCases ?? 0),\n\t\t\t\t\t\tvectorCases:\n\t\t\t\t\t\t\t(current.traceSummary?.vectorCases ?? 0) -\n\t\t\t\t\t\t\t(previous?.traceSummary?.vectorCases ?? 0)\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\tunchangedCases\n\t};\n};\n\nexport const buildRAGAnswerGroundingEvaluationRunDiff = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGAnswerGroundingEvaluationRun;\n\tprevious?: RAGAnswerGroundingEvaluationRun;\n}): RAGAnswerGroundingEvaluationRunDiff => {\n\tconst previousCases = new Map(\n\t\t(previous?.response.cases ?? []).map((entry) => [entry.caseId, entry])\n\t);\n\tconst diffs = current.response.cases.map((entry) =>\n\t\tbuildGroundingCaseDiff(entry, previousCases.get(entry.caseId))\n\t);\n\tconst regressedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) <\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\tconst improvedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) >\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\tconst unchangedCases = diffs.filter(\n\t\t(entry) =>\n\t\t\tgetStatusRank(entry.currentStatus) ===\n\t\t\tgetStatusRank(entry.previousStatus ?? 'fail')\n\t);\n\n\treturn {\n\t\tcurrentRunId: current.id,\n\t\timprovedCases,\n\t\tpreviousRunId: previous?.id,\n\t\tregressedCases,\n\t\tsuiteId: current.suiteId,\n\t\tsummaryDelta: {\n\t\t\taverageCitationF1:\n\t\t\t\tcurrent.response.summary.averageCitationF1 -\n\t\t\t\t(previous?.response.summary.averageCitationF1 ?? 0),\n\t\t\taverageResolvedCitationRate:\n\t\t\t\tcurrent.response.summary.averageResolvedCitationRate -\n\t\t\t\t(previous?.response.summary.averageResolvedCitationRate ?? 0),\n\t\t\tfailedCases:\n\t\t\t\tcurrent.response.summary.failedCases -\n\t\t\t\t(previous?.response.summary.failedCases ?? 0),\n\t\t\tpassedCases:\n\t\t\t\tcurrent.response.summary.passedCases -\n\t\t\t\t(previous?.response.summary.passedCases ?? 0),\n\t\t\tpassingRate:\n\t\t\t\tcurrent.response.passingRate -\n\t\t\t\t(previous?.response.passingRate ?? 0),\n\t\t\tpartialCases:\n\t\t\t\tcurrent.response.summary.partialCases -\n\t\t\t\t(previous?.response.summary.partialCases ?? 0)\n\t\t},\n\t\tunchangedCases\n\t};\n};\n\nexport const createRAGFileEvaluationHistoryStore = (\n\tpath: string\n): RAGEvaluationHistoryStore => ({\n\tlistRuns: async ({ limit, suiteId } = {}) => {\n\t\tlet parsed: RAGEvaluationSuiteRun[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) => !suiteId || entry.suiteId === suiteId\n\t\t);\n\t\tconst sorted = normalizeHistoryRuns(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveRun: async (run) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeHistoryRuns([\n\t\t\trun,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGEvaluationSuiteRun) => entry.id !== run.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t},\n\tpruneRuns: async (input) => {\n\t\tlet existing: RAGEvaluationSuiteRun[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\texisting = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\tinput,\n\t\t\truns: existing,\n\t\t\tsort: normalizeHistoryRuns\n\t\t});\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(pruned.next, null, '\\t') + '\\n',\n\t\t\t'utf8'\n\t\t);\n\t\treturn {\n\t\t\tkeptCount: pruned.keptCount,\n\t\t\tremovedCount: pruned.removedCount\n\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t}\n});\n\nconst normalizeEvaluationSuiteSnapshots = (\n\tsnapshots: RAGEvaluationSuiteSnapshot[]\n) =>\n\t[...snapshots].sort((left, right) => {\n\t\tif (right.createdAt !== left.createdAt) {\n\t\t\treturn right.createdAt - left.createdAt;\n\t\t}\n\t\tif (right.version !== left.version) {\n\t\t\treturn right.version - left.version;\n\t\t}\n\t\treturn right.id.localeCompare(left.id);\n\t});\n\nexport const createRAGFileEvaluationSuiteSnapshotHistoryStore = (\n\tpath: string\n): RAGEvaluationSuiteSnapshotHistoryStore => ({\n\tlistSnapshots: async ({ limit, suiteId } = {}) => {\n\t\tlet parsed: RAGEvaluationSuiteSnapshot[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) => !suiteId || entry.suiteId === suiteId\n\t\t);\n\t\tconst sorted = normalizeEvaluationSuiteSnapshots(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveSnapshot: async (snapshot) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeEvaluationSuiteSnapshots([\n\t\t\tsnapshot,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGEvaluationSuiteSnapshot) => entry.id !== snapshot.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t},\n\tpruneSnapshots: async (input) => {\n\t\tlet existing: RAGEvaluationSuiteSnapshot[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\texisting = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\tinput,\n\t\t\truns: existing,\n\t\t\tsort: normalizeEvaluationSuiteSnapshots\n\t\t});\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(pruned.next, null, '\\t') + '\\n',\n\t\t\t'utf8'\n\t\t);\n\t\treturn {\n\t\t\tkeptCount: pruned.keptCount,\n\t\t\tremovedCount: pruned.removedCount\n\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t}\n});\n\nexport const createRAGFileRetrievalComparisonHistoryStore = (\n\tpath: string\n): RAGRetrievalComparisonHistoryStore => ({\n\tlistRuns: async ({\n\t\tgroupKey,\n\t\tlabel,\n\t\tlimit,\n\t\tsuiteId,\n\t\ttag,\n\t\twinnerId\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalComparisonRun[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst normalizedLabel = normalizeLabelFilter(label);\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!suiteId || entry.suiteId === suiteId) &&\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!tag || (entry.tags ?? []).includes(tag)) &&\n\t\t\t\t(!normalizedLabel ||\n\t\t\t\t\tentry.label.toLowerCase().includes(normalizedLabel) ||\n\t\t\t\t\tentry.suiteLabel.toLowerCase().includes(normalizedLabel)) &&\n\t\t\t\tmatchesWinner(entry, winnerId)\n\t\t);\n\t\tconst sorted = normalizeRetrievalComparisonRuns(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveRun: async (run) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalComparisonRuns([\n\t\t\trun,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGRetrievalComparisonRun) => entry.id !== run.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalBaselineStore = (\n\tpath: string\n): RAGRetrievalBaselineStore => {\n\tconst listBaselines: RAGRetrievalBaselineStore['listBaselines'] = async ({\n\t\tgroupKey,\n\t\tlimit,\n\t\ttag,\n\t\tstatus\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalBaselineRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!tag || (entry.tags ?? []).includes(tag)) &&\n\t\t\t\t(!status || entry.status === status)\n\t\t);\n\t\tconst sorted = normalizeRetrievalBaselineRecords(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t};\n\n\treturn {\n\t\tgetBaseline: async (groupKey) => {\n\t\t\tconst baselines = await Promise.resolve(\n\t\t\t\tlistBaselines({ groupKey, limit: 1 })\n\t\t\t);\n\t\t\treturn baselines[0] ?? null;\n\t\t},\n\t\tlistBaselines,\n\t\tsaveBaseline: async (record) => {\n\t\t\tconst existing = await (async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t})();\n\t\t\tconst currentVersion =\n\t\t\t\texisting\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(entry: RAGRetrievalBaselineRecord) =>\n\t\t\t\t\t\t\tentry.groupKey === record.groupKey\n\t\t\t\t\t)\n\t\t\t\t\t.reduce(\n\t\t\t\t\t\t(max, entry) => Math.max(max, entry.version ?? 0),\n\t\t\t\t\t\t0\n\t\t\t\t\t) ?? 0;\n\t\t\tconst next = normalizeRetrievalBaselineRecords([\n\t\t\t\t{\n\t\t\t\t\t...record,\n\t\t\t\t\tstatus: 'active',\n\t\t\t\t\tversion:\n\t\t\t\t\t\ttypeof record.version === 'number'\n\t\t\t\t\t\t\t? record.version\n\t\t\t\t\t\t\t: currentVersion + 1\n\t\t\t\t},\n\t\t\t\t...existing.map((entry: RAGRetrievalBaselineRecord) =>\n\t\t\t\t\tentry.groupKey === record.groupKey &&\n\t\t\t\t\t(entry.rolloutLabel ?? undefined) ===\n\t\t\t\t\t\t(record.rolloutLabel ?? undefined)\n\t\t\t\t\t\t? { ...entry, status: 'superseded' as const }\n\t\t\t\t\t\t: entry\n\t\t\t\t)\n\t\t\t]);\n\t\t\tawait mkdir(dirname(path), { recursive: true });\n\t\t\tawait writeFile(\n\t\t\t\tpath,\n\t\t\t\tJSON.stringify(next, null, '\\t') + '\\n',\n\t\t\t\t'utf8'\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGFileRetrievalReleaseDecisionStore = (\n\tpath: string\n): RAGRetrievalReleaseDecisionStore => ({\n\tlistDecisions: async ({ groupKey, kind, limit } = {}) => {\n\t\tlet parsed: RAGRetrievalReleaseDecisionRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!kind || entry.kind === kind)\n\t\t);\n\t\tconst sorted = normalizeRetrievalReleaseDecisionRecords(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveDecision: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalReleaseDecisionRecords([\n\t\t\trecord,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGRetrievalReleaseDecisionRecord) =>\n\t\t\t\t\tentry.id !== record.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalLaneHandoffDecisionStore = (\n\tpath: string\n): RAGRetrievalLaneHandoffDecisionStore => ({\n\tlistDecisions: async ({\n\t\tgroupKey,\n\t\tkind,\n\t\tlimit,\n\t\tsourceRolloutLabel,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalLaneHandoffDecisionRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!kind || entry.kind === kind) &&\n\t\t\t\t(!sourceRolloutLabel ||\n\t\t\t\t\tentry.sourceRolloutLabel === sourceRolloutLabel) &&\n\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t);\n\t\tconst sorted = normalizeRetrievalLaneHandoffDecisionRecords(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveDecision: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalLaneHandoffDecisionRecords([\n\t\t\trecord,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGRetrievalLaneHandoffDecisionRecord) =>\n\t\t\t\t\tentry.id !== record.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalReleaseIncidentStore = (\n\tpath: string\n): RAGRetrievalReleaseIncidentStore => ({\n\tlistIncidents: async ({\n\t\tcorpusGroupKey,\n\t\tgroupKey,\n\t\tlimit,\n\t\tseverity,\n\t\tstatus,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalReleaseIncidentRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!corpusGroupKey || entry.corpusGroupKey === corpusGroupKey) &&\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel) &&\n\t\t\t\t(!severity || entry.severity === severity) &&\n\t\t\t\t(!status || entry.status === status)\n\t\t);\n\t\tconst sorted = normalizeRetrievalReleaseIncidentRecords(filtered);\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveIncident: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalReleaseIncidentRecords([\n\t\t\trecord,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGRetrievalReleaseIncidentRecord) =>\n\t\t\t\t\tentry.id !== record.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalLaneHandoffIncidentStore = (\n\tpath: string\n): RAGRetrievalLaneHandoffIncidentStore => ({\n\tlistIncidents: async ({\n\t\tgroupKey,\n\t\tlimit,\n\t\tseverity,\n\t\tstatus,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalLaneHandoffIncidentRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) =>\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel) &&\n\t\t\t\t(!severity || entry.severity === severity) &&\n\t\t\t\t(!status || entry.status === status)\n\t\t);\n\t\tconst sorted = normalizeRetrievalReleaseIncidentRecords(\n\t\t\tfiltered as RAGRetrievalReleaseIncidentRecord[]\n\t\t) as RAGRetrievalLaneHandoffIncidentRecord[];\n\t\treturn typeof limit === 'number' ? sorted.slice(0, limit) : sorted;\n\t},\n\tsaveIncident: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalReleaseIncidentRecords([\n\t\t\trecord as RAGRetrievalReleaseIncidentRecord,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGRetrievalLaneHandoffIncidentRecord) =>\n\t\t\t\t\tentry.id !== record.id\n\t\t\t)\n\t\t]) as RAGRetrievalLaneHandoffIncidentRecord[];\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalLaneHandoffIncidentHistoryStore = (\n\tpath: string\n): RAGRetrievalLaneHandoffIncidentHistoryStore => ({\n\tlistRecords: async ({\n\t\taction,\n\t\tgroupKey,\n\t\tincidentId,\n\t\tlimit,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalLaneHandoffIncidentHistoryRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!action || entry.action === action) &&\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!incidentId || entry.incidentId === incidentId) &&\n\t\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t\t)\n\t\t\t.sort((left, right) => right.recordedAt - left.recordedAt);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = [record, ...existing].sort(\n\t\t\t(\n\t\t\t\tleft: RAGRetrievalLaneHandoffIncidentHistoryRecord,\n\t\t\t\tright: RAGRetrievalLaneHandoffIncidentHistoryRecord\n\t\t\t) => right.recordedAt - left.recordedAt\n\t\t);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalIncidentRemediationDecisionStore = (\n\tpath: string\n): RAGRetrievalIncidentRemediationDecisionStore => ({\n\tlistRecords: async ({\n\t\tgroupKey,\n\t\tincidentId,\n\t\tlimit,\n\t\tremediationKind,\n\t\tstatus,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalIncidentRemediationDecisionRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered = normalizeRetrievalIncidentRemediationDecisionRecords(\n\t\t\tparsed\n\t\t).filter(\n\t\t\t(entry) =>\n\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t(!incidentId || entry.incidentId === incidentId) &&\n\t\t\t\t(!remediationKind ||\n\t\t\t\t\tentry.remediationKind === remediationKind) &&\n\t\t\t\t(!status || entry.status === status) &&\n\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeRetrievalIncidentRemediationDecisionRecords([\n\t\t\trecord,\n\t\t\t...existing\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalIncidentRemediationExecutionHistoryStore = (\n\tpath: string\n): RAGRetrievalIncidentRemediationExecutionHistoryStore => ({\n\tlistRecords: async ({\n\t\tactionKind,\n\t\tblockedByGuardrail,\n\t\tcode,\n\t\tgroupKey,\n\t\tidempotentReplay,\n\t\tincidentId,\n\t\tlimit,\n\t\ttargetRolloutLabel\n\t} = {}) => {\n\t\tlet parsed: RAGRetrievalIncidentRemediationExecutionHistoryRecord[] =\n\t\t\t[];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered =\n\t\t\tnormalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n\t\t\t\tparsed\n\t\t\t).filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!incidentId || entry.incidentId === incidentId) &&\n\t\t\t\t\t(!actionKind || entry.action.kind === actionKind) &&\n\t\t\t\t\t(!code || entry.code === code) &&\n\t\t\t\t\t(typeof blockedByGuardrail !== 'boolean' ||\n\t\t\t\t\t\tentry.blockedByGuardrail === blockedByGuardrail) &&\n\t\t\t\t\t(typeof idempotentReplay !== 'boolean' ||\n\t\t\t\t\t\tentry.idempotentReplay === idempotentReplay) &&\n\t\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t\t);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next =\n\t\t\tnormalizeRetrievalIncidentRemediationExecutionHistoryRecords([\n\t\t\t\trecord,\n\t\t\t\t...existing\n\t\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalLaneHandoffAutoCompletePolicyHistoryStore = (\n\tpath: string\n): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore => ({\n\tlistRecords: async ({ groupKey, limit, targetRolloutLabel } = {}) => {\n\t\tlet parsed: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[] =\n\t\t\t[];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered = parsed\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t\t)\n\t\t\t.sort((left, right) => right.recordedAt - left.recordedAt);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = [record, ...existing].sort(\n\t\t\t(\n\t\t\t\tleft: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n\t\t\t\tright: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord\n\t\t\t) => right.recordedAt - left.recordedAt\n\t\t);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalReleaseLanePolicyHistoryStore = (\n\tpath: string\n): RAGRetrievalReleaseLanePolicyHistoryStore => ({\n\tlistRecords: async ({ groupKey, limit, rolloutLabel, scope } = {}) => {\n\t\tlet parsed: RAGRetrievalReleaseLanePolicyHistoryRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered = parsed\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!rolloutLabel || entry.rolloutLabel === rolloutLabel) &&\n\t\t\t\t\t(!scope || entry.scope === scope)\n\t\t\t)\n\t\t\t.sort((left, right) => right.recordedAt - left.recordedAt);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = [record, ...existing].sort(\n\t\t\t(\n\t\t\t\tleft: RAGRetrievalReleaseLanePolicyHistoryRecord,\n\t\t\t\tright: RAGRetrievalReleaseLanePolicyHistoryRecord\n\t\t\t) => right.recordedAt - left.recordedAt\n\t\t);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalBaselineGatePolicyHistoryStore = (\n\tpath: string\n): RAGRetrievalBaselineGatePolicyHistoryStore => ({\n\tlistRecords: async ({ groupKey, limit, rolloutLabel, scope } = {}) => {\n\t\tlet parsed: RAGRetrievalBaselineGatePolicyHistoryRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered = parsed\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!rolloutLabel || entry.rolloutLabel === rolloutLabel) &&\n\t\t\t\t\t(!scope || entry.scope === scope)\n\t\t\t)\n\t\t\t.sort((left, right) => right.recordedAt - left.recordedAt);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = [record, ...existing].sort(\n\t\t\t(\n\t\t\t\tleft: RAGRetrievalBaselineGatePolicyHistoryRecord,\n\t\t\t\tright: RAGRetrievalBaselineGatePolicyHistoryRecord\n\t\t\t) => right.recordedAt - left.recordedAt\n\t\t);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileRetrievalReleaseLaneEscalationPolicyHistoryStore = (\n\tpath: string\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryStore => ({\n\tlistRecords: async ({ groupKey, limit, targetRolloutLabel } = {}) => {\n\t\tlet parsed: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tconst filtered = parsed\n\t\t\t.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\t(!groupKey || entry.groupKey === groupKey) &&\n\t\t\t\t\t(!targetRolloutLabel ||\n\t\t\t\t\t\tentry.targetRolloutLabel === targetRolloutLabel)\n\t\t\t)\n\t\t\t.sort((left, right) => right.recordedAt - left.recordedAt);\n\t\treturn typeof limit === 'number' ? filtered.slice(0, limit) : filtered;\n\t},\n\tsaveRecord: async (record) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = [record, ...existing].sort(\n\t\t\t(\n\t\t\t\tleft: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n\t\t\t\tright: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord\n\t\t\t) => right.recordedAt - left.recordedAt\n\t\t);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport const createRAGFileSearchTraceStore = (\n\tpath: string\n): RAGSearchTraceStore => ({\n\tasync listTraces(input) {\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\ttraces?: RAGSearchTraceRecord[];\n\t\t\t};\n\t\t\tconst traces = Array.isArray(data.traces) ? data.traces : [];\n\t\t\tconst filtered = traces.filter((trace) => {\n\t\t\t\tif (input?.query && trace.query !== input.query) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (input?.groupKey && trace.groupKey !== input.groupKey) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (input?.tag && !(trace.tags ?? []).includes(input.tag)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\treturn normalizeTraceSummaryRuns(filtered).slice(\n\t\t\t\t0,\n\t\t\t\tinput?.limit ?? DEFAULT_HISTORY_LIMIT\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror &&\n\t\t\t\ttypeof error === 'object' &&\n\t\t\t\t'code' in error &&\n\t\t\t\terror.code === 'ENOENT'\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t},\n\tasync saveTrace(trace) {\n\t\tlet traces: RAGSearchTraceRecord[] = [];\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\ttraces?: RAGSearchTraceRecord[];\n\t\t\t};\n\t\t\ttraces = Array.isArray(data.traces) ? data.traces : [];\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t!error ||\n\t\t\t\ttypeof error !== 'object' ||\n\t\t\t\t!('code' in error) ||\n\t\t\t\terror.code !== 'ENOENT'\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst nextTraces = normalizeTraceSummaryRuns([\n\t\t\ttrace,\n\t\t\t...traces.filter((entry) => entry.id !== trace.id)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\ttraces: nextTraces\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)\n\t\t);\n\t},\n\tasync pruneTraces(input) {\n\t\tlet traces: RAGSearchTraceRecord[] = [];\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\ttraces?: RAGSearchTraceRecord[];\n\t\t\t};\n\t\t\ttraces = Array.isArray(data.traces) ? data.traces : [];\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t!error ||\n\t\t\t\ttypeof error !== 'object' ||\n\t\t\t\t!('code' in error) ||\n\t\t\t\terror.code !== 'ENOENT'\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst pruned = applyRAGSearchTracePrunePolicy({\n\t\t\tinput,\n\t\t\ttraces\n\t\t});\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\ttraces: pruned.next\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)\n\t\t);\n\n\t\treturn {\n\t\t\tkeptCount: pruned.keptCount,\n\t\t\tremovedCount: pruned.removedCount\n\t\t};\n\t}\n});\n\nexport const createRAGFileSearchTracePruneHistoryStore = (\n\tpath: string\n): RAGSearchTracePruneHistoryStore => ({\n\tlistRuns: async (input) => {\n\t\tlet parsed: RAGSearchTracePruneRun[] = [];\n\t\ttry {\n\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\tconst value = JSON.parse(content);\n\t\t\tparsed = Array.isArray(value) ? value : [];\n\t\t} catch (error) {\n\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst filtered = parsed.filter(\n\t\t\t(entry) => !input?.trigger || entry.trigger === input.trigger\n\t\t);\n\t\tconst sorted = normalizeSearchTracePruneRuns(filtered);\n\t\treturn typeof input?.limit === 'number'\n\t\t\t? sorted.slice(0, input.limit)\n\t\t\t: sorted;\n\t},\n\tsaveRun: async (run) => {\n\t\tconst existing = await (async () => {\n\t\t\ttry {\n\t\t\t\tconst content = await readFile(path, 'utf8');\n\t\t\t\tconst value = JSON.parse(content);\n\t\t\t\treturn Array.isArray(value) ? value : [];\n\t\t\t} catch (error) {\n\t\t\t\tif ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t})();\n\t\tconst next = normalizeSearchTracePruneRuns([\n\t\t\trun,\n\t\t\t...existing.filter(\n\t\t\t\t(entry: RAGSearchTracePruneRun) => entry.id !== run.id\n\t\t\t)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(path, JSON.stringify(next, null, '\\t') + '\\n', 'utf8');\n\t}\n});\n\nexport type SQLiteRAGSearchTraceStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGEvaluationHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGEvaluationSuiteSnapshotHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGAnswerGroundingEvaluationHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGSearchTracePruneHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalComparisonHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseDecisionStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalBaselineStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseIncidentStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffDecisionStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffIncidentStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalLaneHandoffIncidentHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalIncidentRemediationDecisionStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalIncidentRemediationExecutionHistoryStoreOptions =\n\t{\n\t\tdb?: Database;\n\t\tpath?: string;\n\t\ttableName?: string;\n\t};\n\nexport type SQLiteRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStoreOptions =\n\t{\n\t\tdb?: Database;\n\t\tpath?: string;\n\t\ttableName?: string;\n\t};\n\nexport type SQLiteRAGRetrievalReleaseLanePolicyHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalBaselineGatePolicyHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGRetrievalReleaseLaneEscalationPolicyHistoryStoreOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttableName?: string;\n};\n\nexport type SQLiteRAGGovernanceStoreBundleOptions = {\n\tdb?: Database;\n\tpath?: string;\n\ttablePrefix?: string;\n};\n\nexport const createRAGSQLiteEvaluationHistoryStore = (\n\toptions: SQLiteRAGEvaluationHistoryStoreOptions\n): RAGEvaluationHistoryStore => {\n\tconst tableName = options.tableName ?? 'rag_evaluation_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`\n\t);\n\n\tconst 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\treturn {\n\t\tlistRuns(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\t\t\tif (input.suiteId) {\n\t\t\t\twhere.push('suite_id = ?');\n\t\t\t\tparams.push(input.suiteId);\n\t\t\t}\n\t\t\tconst sql =\n\t\t\t\t`SELECT record_json FROM ${tableName}` +\n\t\t\t\t`${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY finished_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params) as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst runs = normalizeHistoryRuns(\n\t\t\t\trows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(row.record_json) as RAGEvaluationSuiteRun\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? runs.slice(0, input.limit)\n\t\t\t\t: runs;\n\t\t},\n\t\tsaveRun(run) {\n\t\t\tinsert.run(\n\t\t\t\trun.id,\n\t\t\t\trun.suiteId,\n\t\t\t\trun.finishedAt,\n\t\t\t\tJSON.stringify(run)\n\t\t\t);\n\t\t},\n\t\tpruneRuns(input) {\n\t\t\tconst allRows = db\n\t\t\t\t.prepare(`SELECT record_json FROM ${tableName}`)\n\t\t\t\t.all() as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\t\tinput,\n\t\t\t\truns: allRows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(row.record_json) as RAGEvaluationSuiteRun\n\t\t\t\t),\n\t\t\t\tsort: normalizeHistoryRuns\n\t\t\t});\n\t\t\tfor (const run of pruned.removed) {\n\t\t\t\tdb.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(run.id);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkeptCount: pruned.keptCount,\n\t\t\t\tremovedCount: pruned.removedCount\n\t\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteEvaluationSuiteSnapshotHistoryStore = (\n\toptions: SQLiteRAGEvaluationSuiteSnapshotHistoryStoreOptions\n): RAGEvaluationSuiteSnapshotHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_evaluation_suite_snapshot_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_suite_created_at_idx ON ${tableName} (suite_id, created_at DESC, version DESC)`\n\t);\n\n\tconst 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\treturn {\n\t\tlistSnapshots(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\t\t\tif (input.suiteId) {\n\t\t\t\twhere.push('suite_id = ?');\n\t\t\t\tparams.push(input.suiteId);\n\t\t\t}\n\t\t\tconst sql =\n\t\t\t\t`SELECT record_json FROM ${tableName}` +\n\t\t\t\t`${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY created_at DESC, version DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params) as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst snapshots = normalizeEvaluationSuiteSnapshots(\n\t\t\t\trows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(\n\t\t\t\t\t\t\trow.record_json\n\t\t\t\t\t\t) as RAGEvaluationSuiteSnapshot\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? snapshots.slice(0, input.limit)\n\t\t\t\t: snapshots;\n\t\t},\n\t\tsaveSnapshot(snapshot) {\n\t\t\tinsert.run(\n\t\t\t\tsnapshot.id,\n\t\t\t\tsnapshot.suiteId,\n\t\t\t\tsnapshot.version,\n\t\t\t\tsnapshot.createdAt,\n\t\t\t\tJSON.stringify(snapshot)\n\t\t\t);\n\t\t},\n\t\tpruneSnapshots(input) {\n\t\t\tconst allRows = db\n\t\t\t\t.prepare(`SELECT record_json FROM ${tableName}`)\n\t\t\t\t.all() as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\t\tinput,\n\t\t\t\truns: allRows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(\n\t\t\t\t\t\t\trow.record_json\n\t\t\t\t\t\t) as RAGEvaluationSuiteSnapshot\n\t\t\t\t),\n\t\t\t\tsort: normalizeEvaluationSuiteSnapshots\n\t\t\t});\n\t\t\tfor (const snapshot of pruned.removed) {\n\t\t\t\tdb.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(\n\t\t\t\t\tsnapshot.id\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkeptCount: pruned.keptCount,\n\t\t\t\tremovedCount: pruned.removedCount\n\t\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteAnswerGroundingEvaluationHistoryStore = (\n\toptions: SQLiteRAGAnswerGroundingEvaluationHistoryStoreOptions\n): RAGAnswerGroundingEvaluationHistoryStore => {\n\tconst tableName = options.tableName ?? 'rag_answer_grounding_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`\n\t);\n\n\tconst 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\treturn {\n\t\tlistRuns(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\t\t\tif (input.suiteId) {\n\t\t\t\twhere.push('suite_id = ?');\n\t\t\t\tparams.push(input.suiteId);\n\t\t\t}\n\t\t\tconst sql =\n\t\t\t\t`SELECT record_json FROM ${tableName}` +\n\t\t\t\t`${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY finished_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params) as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst runs = normalizeGroundingHistoryRuns(\n\t\t\t\trows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(\n\t\t\t\t\t\t\trow.record_json\n\t\t\t\t\t\t) as RAGAnswerGroundingEvaluationRun\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? runs.slice(0, input.limit)\n\t\t\t\t: runs;\n\t\t},\n\t\tsaveRun(run) {\n\t\t\tinsert.run(\n\t\t\t\trun.id,\n\t\t\t\trun.suiteId,\n\t\t\t\trun.finishedAt,\n\t\t\t\tJSON.stringify(run)\n\t\t\t);\n\t\t},\n\t\tpruneRuns(input) {\n\t\t\tconst allRows = db\n\t\t\t\t.prepare(`SELECT record_json FROM ${tableName}`)\n\t\t\t\t.all() as Array<{\n\t\t\t\trecord_json: string;\n\t\t\t}>;\n\t\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\t\tinput,\n\t\t\t\truns: allRows.map(\n\t\t\t\t\t(row) =>\n\t\t\t\t\t\tJSON.parse(\n\t\t\t\t\t\t\trow.record_json\n\t\t\t\t\t\t) as RAGAnswerGroundingEvaluationRun\n\t\t\t\t),\n\t\t\t\tsort: normalizeGroundingHistoryRuns\n\t\t\t});\n\t\t\tfor (const run of pruned.removed) {\n\t\t\t\tdb.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(run.id);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkeptCount: pruned.keptCount,\n\t\t\t\tremovedCount: pruned.removedCount\n\t\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t\t}\n\t};\n};\n\ntype SQLiteSearchTraceRow = {\n\tid: string;\n\tquery: string;\n\tlabel: string;\n\tgroup_key: string | null;\n\ttags_json: string | null;\n\tstarted_at: number;\n\tfinished_at: number;\n\telapsed_ms: number;\n\ttrace_json: string;\n\tsummary_json: string;\n\tresults_json: string;\n\tmetadata_json: string | null;\n};\n\ntype SQLiteSearchTracePruneHistoryRow = {\n\tid: string;\n\ttrigger: string;\n\tstarted_at: number;\n\tfinished_at: number;\n\telapsed_ms: number;\n\trun_json: string;\n};\n\nconst isSQLiteSearchTraceRow = (\n\tvalue: unknown\n): value is SQLiteSearchTraceRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\ttypeof value.query === 'string' &&\n\ttypeof value.label === 'string' &&\n\t(typeof value.group_key === 'string' || value.group_key === null) &&\n\t(typeof value.tags_json === 'string' || value.tags_json === null) &&\n\ttypeof value.started_at === 'number' &&\n\ttypeof value.finished_at === 'number' &&\n\ttypeof value.elapsed_ms === 'number' &&\n\ttypeof value.trace_json === 'string' &&\n\ttypeof value.summary_json === 'string' &&\n\ttypeof value.results_json === 'string' &&\n\t(typeof value.metadata_json === 'string' || value.metadata_json === null);\n\nconst isSQLiteSearchTracePruneHistoryRow = (\n\tvalue: unknown\n): value is SQLiteSearchTracePruneHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\ttypeof value.trigger === 'string' &&\n\ttypeof value.started_at === 'number' &&\n\ttypeof value.finished_at === 'number' &&\n\ttypeof value.elapsed_ms === 'number' &&\n\ttypeof value.run_json === 'string';\n\ntype SQLiteRetrievalComparisonHistoryRow = {\n\tid: string;\n\tsuite_id: string;\n\tsuite_label: string;\n\tlabel: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string | null;\n\ttags_json: string | null;\n\tstarted_at: number;\n\tfinished_at: number;\n\telapsed_ms: number;\n\tcomparison_json: string;\n\tdecision_summary_json: string | null;\n};\n\nconst isSQLiteRetrievalComparisonHistoryRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalComparisonHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\ttypeof value.suite_id === 'string' &&\n\ttypeof value.suite_label === 'string' &&\n\ttypeof value.label === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\t(typeof value.group_key === 'string' || value.group_key === null) &&\n\t(typeof value.tags_json === 'string' || value.tags_json === null) &&\n\ttypeof value.started_at === 'number' &&\n\ttypeof value.finished_at === 'number' &&\n\ttypeof value.elapsed_ms === 'number' &&\n\ttypeof value.comparison_json === 'string' &&\n\t(typeof value.decision_summary_json === 'string' ||\n\t\tvalue.decision_summary_json === null);\n\ntype SQLiteRetrievalReleaseDecisionRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\tkind: string;\n\tdecided_at: number;\n\trecord_json: string;\n};\n\nconst isSQLiteRetrievalReleaseDecisionRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalReleaseDecisionRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\ttypeof value.kind === 'string' &&\n\ttypeof value.decided_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\ntype SQLiteRetrievalBaselineRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\trollout_label: string | null;\n\tpromoted_at: number;\n\tstatus: string;\n\tversion: number;\n\ttags_json: string | null;\n\trecord_json: string;\n};\n\nconst isSQLiteRetrievalBaselineRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalBaselineRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\t(typeof value.rollout_label === 'string' || value.rollout_label === null) &&\n\ttypeof value.promoted_at === 'number' &&\n\ttypeof value.status === 'string' &&\n\ttypeof value.version === 'number' &&\n\t(typeof value.tags_json === 'string' || value.tags_json === null) &&\n\ttypeof value.record_json === 'string';\n\ntype SQLiteRetrievalReleaseIncidentRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\ttarget_rollout_label: string | null;\n\tseverity: string;\n\tstatus: string;\n\ttriggered_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffDecisionRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\tsource_rollout_label: string;\n\ttarget_rollout_label: string;\n\tkind: string;\n\tdecided_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffIncidentRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\ttarget_rollout_label: string | null;\n\tsource_rollout_label: string | null;\n\tseverity: string;\n\tstatus: string;\n\ttriggered_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffIncidentHistoryRow = {\n\tid: string;\n\tincident_id: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\ttarget_rollout_label: string | null;\n\taction: string;\n\trecorded_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteRetrievalIncidentRemediationDecisionRow = {\n\tid: string;\n\tincident_id: string;\n\tgroup_key: string;\n\ttarget_rollout_label: string | null;\n\tremediation_kind: string;\n\tstatus: string;\n\tdecided_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteRetrievalIncidentRemediationExecutionHistoryRow = {\n\tid: string;\n\tincident_id: string | null;\n\tgroup_key: string | null;\n\ttarget_rollout_label: string | null;\n\taction_kind: string;\n\tcode: string;\n\tblocked_by_guardrail: number;\n\tidempotent_replay: number;\n\texecuted_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteLaneHandoffAutoCompletePolicyHistoryRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\ttarget_rollout_label: string;\n\trecorded_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteReleaseLanePolicyHistoryRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string | null;\n\trollout_label: string;\n\tscope: string;\n\trecorded_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteBaselineGatePolicyHistoryRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string | null;\n\trollout_label: string;\n\tscope: string;\n\trecorded_at: number;\n\trecord_json: string;\n};\n\ntype SQLiteReleaseLaneEscalationPolicyHistoryRow = {\n\tid: string;\n\tcorpus_group_key: string | null;\n\tgroup_key: string;\n\ttarget_rollout_label: string;\n\trecorded_at: number;\n\trecord_json: string;\n};\n\nconst isSQLiteRetrievalReleaseIncidentRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalReleaseIncidentRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\t(typeof value.target_rollout_label === 'string' ||\n\t\tvalue.target_rollout_label === null) &&\n\ttypeof value.severity === 'string' &&\n\ttypeof value.status === 'string' &&\n\ttypeof value.triggered_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteRetrievalLaneHandoffDecisionRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalLaneHandoffDecisionRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\ttypeof value.source_rollout_label === 'string' &&\n\ttypeof value.target_rollout_label === 'string' &&\n\ttypeof value.kind === 'string' &&\n\ttypeof value.decided_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteRetrievalLaneHandoffIncidentRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalLaneHandoffIncidentRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\t(typeof value.target_rollout_label === 'string' ||\n\t\tvalue.target_rollout_label === null) &&\n\t(typeof value.source_rollout_label === 'string' ||\n\t\tvalue.source_rollout_label === null) &&\n\ttypeof value.severity === 'string' &&\n\ttypeof value.status === 'string' &&\n\ttypeof value.triggered_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteRetrievalLaneHandoffIncidentHistoryRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalLaneHandoffIncidentHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\ttypeof value.incident_id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\t(typeof value.target_rollout_label === 'string' ||\n\t\tvalue.target_rollout_label === null) &&\n\ttypeof value.action === 'string' &&\n\ttypeof value.recorded_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteRetrievalIncidentRemediationDecisionRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalIncidentRemediationDecisionRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\ttypeof value.incident_id === 'string' &&\n\ttypeof value.group_key === 'string' &&\n\t(typeof value.target_rollout_label === 'string' ||\n\t\tvalue.target_rollout_label === null) &&\n\ttypeof value.remediation_kind === 'string' &&\n\ttypeof value.status === 'string' &&\n\ttypeof value.decided_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteRetrievalIncidentRemediationExecutionHistoryRow = (\n\tvalue: unknown\n): value is SQLiteRetrievalIncidentRemediationExecutionHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.incident_id === 'string' || value.incident_id === null) &&\n\t(typeof value.group_key === 'string' || value.group_key === null) &&\n\t(typeof value.target_rollout_label === 'string' ||\n\t\tvalue.target_rollout_label === null) &&\n\ttypeof value.action_kind === 'string' &&\n\ttypeof value.code === 'string' &&\n\ttypeof value.blocked_by_guardrail === 'number' &&\n\ttypeof value.idempotent_replay === 'number' &&\n\ttypeof value.executed_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteLaneHandoffAutoCompletePolicyHistoryRow = (\n\tvalue: unknown\n): value is SQLiteLaneHandoffAutoCompletePolicyHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\ttypeof value.target_rollout_label === 'string' &&\n\ttypeof value.recorded_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteReleaseLanePolicyHistoryRow = (\n\tvalue: unknown\n): value is SQLiteReleaseLanePolicyHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\t(typeof value.group_key === 'string' || value.group_key === null) &&\n\ttypeof value.rollout_label === 'string' &&\n\ttypeof value.scope === 'string' &&\n\ttypeof value.recorded_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteBaselineGatePolicyHistoryRow = (\n\tvalue: unknown\n): value is SQLiteBaselineGatePolicyHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\t(typeof value.group_key === 'string' || value.group_key === null) &&\n\ttypeof value.rollout_label === 'string' &&\n\ttypeof value.scope === 'string' &&\n\ttypeof value.recorded_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst isSQLiteReleaseLaneEscalationPolicyHistoryRow = (\n\tvalue: unknown\n): value is SQLiteReleaseLaneEscalationPolicyHistoryRow =>\n\tisObjectRecord(value) &&\n\ttypeof value.id === 'string' &&\n\t(typeof value.corpus_group_key === 'string' ||\n\t\tvalue.corpus_group_key === null) &&\n\ttypeof value.group_key === 'string' &&\n\ttypeof value.target_rollout_label === 'string' &&\n\ttypeof value.recorded_at === 'number' &&\n\ttypeof value.record_json === 'string';\n\nconst assertSupportedIdentifier = (name: string) => {\n\tif (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n\t\tthrow new Error(\n\t\t\t`Invalid SQLite search trace table name \"${name}\". Only alphanumeric and underscore names are allowed.`\n\t\t);\n\t}\n};\n\nconst ensureSQLiteColumns = (\n\tdb: Database,\n\ttableName: string,\n\tcolumns: Array<{ name: string; definition: string }>\n) => {\n\tconst pragma = db.prepare(`PRAGMA table_info(${tableName})`).all();\n\tconst existing = new Set(\n\t\tArray.isArray(pragma)\n\t\t\t? pragma\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(row): row is { name?: unknown } =>\n\t\t\t\t\t\t\tisObjectRecord(row) && 'name' in row\n\t\t\t\t\t)\n\t\t\t\t\t.map((row) =>\n\t\t\t\t\t\ttypeof row.name === 'string' ? row.name : undefined\n\t\t\t\t\t)\n\t\t\t\t\t.filter((name): name is string => typeof name === 'string')\n\t\t\t: []\n\t);\n\n\tfor (const column of columns) {\n\t\tif (existing.has(column.name)) {\n\t\t\tcontinue;\n\t\t}\n\t\tdb.exec(\n\t\t\t`ALTER TABLE ${tableName} ADD COLUMN ${column.name} ${column.definition}`\n\t\t);\n\t}\n};\n\nconst getMissingSQLiteColumns = (\n\tdb: Database,\n\ttableName: string,\n\tcolumns: Array<{ name: string; definition: string }>\n): RAGSQLiteStoreMigrationIssue[] => {\n\tconst pragma = db.prepare(`PRAGMA table_info(${tableName})`).all();\n\tconst existing = new Set(\n\t\tArray.isArray(pragma)\n\t\t\t? pragma\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(row): row is { name?: unknown } =>\n\t\t\t\t\t\t\tisObjectRecord(row) && 'name' in row\n\t\t\t\t\t)\n\t\t\t\t\t.map((row) =>\n\t\t\t\t\t\ttypeof row.name === 'string' ? row.name : undefined\n\t\t\t\t\t)\n\t\t\t\t\t.filter((name): name is string => typeof name === 'string')\n\t\t\t: []\n\t);\n\n\treturn columns\n\t\t.filter((column) => !existing.has(column.name))\n\t\t.map((column) => ({\n\t\t\tcolumnName: column.name,\n\t\t\tdefinition: column.definition,\n\t\t\ttableName\n\t\t}));\n};\n\ntype SQLiteStoreMigrationDescriptor = {\n\ttableName: string;\n\tcolumns: Array<{ name: string; definition: string }>;\n};\n\nconst getDefaultSQLiteStoreMigrationDescriptors =\n\t(): SQLiteStoreMigrationDescriptor[] => [\n\t\t{\n\t\t\ttableName: DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME,\n\t\t\tcolumns: [{ definition: 'TEXT', name: 'corpus_group_key' }]\n\t\t},\n\t\t{\n\t\t\ttableName: DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME,\n\t\t\tcolumns: [{ definition: 'TEXT', name: 'corpus_group_key' }]\n\t\t},\n\t\t{\n\t\t\ttableName: DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME,\n\t\t\tcolumns: [\n\t\t\t\t{ definition: 'TEXT', name: 'group_key' },\n\t\t\t\t{ definition: 'TEXT', name: 'corpus_group_key' }\n\t\t\t]\n\t\t}\n\t];\n\nconst summarizeSQLiteStoreMigrationIssues = (\n\tissues: RAGSQLiteStoreMigrationIssue[]\n) =>\n\tissues.length > 0\n\t\t? `${issues.length} SQLite schema migration issue${issues.length === 1 ? '' : 's'} detected`\n\t\t: undefined;\n\nexport type SQLiteRAGStoreMigrationOptions = {\n\tdb?: Database;\n\tpath?: string;\n\tdescriptors?: SQLiteStoreMigrationDescriptor[];\n};\n\nexport const inspectRAGSQLiteStoreMigrations = (\n\toptions: SQLiteRAGStoreMigrationOptions = {}\n): RAGSQLiteStoreMigrationInspection => {\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\tconst descriptors =\n\t\toptions.descriptors ?? getDefaultSQLiteStoreMigrationDescriptors();\n\tconst issues = descriptors.flatMap((descriptor) =>\n\t\tgetMissingSQLiteColumns(db, descriptor.tableName, descriptor.columns)\n\t);\n\n\treturn {\n\t\tissues,\n\t\tsummary: summarizeSQLiteStoreMigrationIssues(issues)\n\t};\n};\n\nexport const applyRAGSQLiteStoreMigrations = (\n\toptions: SQLiteRAGStoreMigrationOptions = {}\n): RAGSQLiteStoreMigrationResult => {\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\tconst descriptors =\n\t\toptions.descriptors ?? getDefaultSQLiteStoreMigrationDescriptors();\n\tconst inspection = inspectRAGSQLiteStoreMigrations({\n\t\tdb,\n\t\tdescriptors\n\t});\n\n\tfor (const descriptor of descriptors) {\n\t\tensureSQLiteColumns(db, descriptor.tableName, descriptor.columns);\n\t}\n\n\treturn {\n\t\t...inspection,\n\t\tapplied: inspection.issues\n\t};\n};\n\nconst mapSQLiteSearchTraceRow = (\n\trow: SQLiteSearchTraceRow\n): RAGSearchTraceRecord => ({\n\telapsedMs: row.elapsed_ms,\n\tfinishedAt: row.finished_at,\n\tgroupKey: row.group_key ?? undefined,\n\tid: row.id,\n\tlabel: row.label,\n\tmetadata: parseJSONRecord(row.metadata_json),\n\tquery: row.query,\n\tresults: parseJSONArray(row.results_json, []),\n\tstartedAt: row.started_at,\n\tsummary: JSON.parse(row.summary_json),\n\ttags: normalizeStringArray(parseJSONArray(row.tags_json, [])),\n\ttrace: JSON.parse(row.trace_json)\n});\n\nconst mapSQLiteSearchTracePruneHistoryRow = (\n\trow: SQLiteSearchTracePruneHistoryRow\n): RAGSearchTracePruneRun => JSON.parse(row.run_json);\n\nconst mapSQLiteRetrievalComparisonHistoryRow = (\n\trow: SQLiteRetrievalComparisonHistoryRow\n): RAGRetrievalComparisonRun => ({\n\tcomparison: JSON.parse(row.comparison_json),\n\tcorpusGroupKey: row.corpus_group_key ?? undefined,\n\tdecisionSummary: row.decision_summary_json\n\t\t? JSON.parse(row.decision_summary_json)\n\t\t: undefined,\n\telapsedMs: row.elapsed_ms,\n\tfinishedAt: row.finished_at,\n\tgroupKey: row.group_key ?? undefined,\n\tid: row.id,\n\tlabel: row.label,\n\tstartedAt: row.started_at,\n\tsuiteId: row.suite_id,\n\tsuiteLabel: row.suite_label,\n\ttags: normalizeStringArray(parseJSONArray(row.tags_json, []))\n});\n\nconst mapSQLiteRetrievalReleaseDecisionRow = (\n\trow: SQLiteRetrievalReleaseDecisionRow\n): RAGRetrievalReleaseDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalBaselineRow = (\n\trow: SQLiteRetrievalBaselineRow\n): RAGRetrievalBaselineRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalReleaseIncidentRow = (\n\trow: SQLiteRetrievalReleaseIncidentRow\n): RAGRetrievalReleaseIncidentRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffDecisionRow = (\n\trow: SQLiteRetrievalLaneHandoffDecisionRow\n): RAGRetrievalLaneHandoffDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffIncidentRow = (\n\trow: SQLiteRetrievalLaneHandoffIncidentRow\n): RAGRetrievalLaneHandoffIncidentRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffIncidentHistoryRow = (\n\trow: SQLiteRetrievalLaneHandoffIncidentHistoryRow\n): RAGRetrievalLaneHandoffIncidentHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalIncidentRemediationDecisionRow = (\n\trow: SQLiteRetrievalIncidentRemediationDecisionRow\n): RAGRetrievalIncidentRemediationDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalIncidentRemediationExecutionHistoryRow = (\n\trow: SQLiteRetrievalIncidentRemediationExecutionHistoryRow\n): RAGRetrievalIncidentRemediationExecutionHistoryRecord =>\n\tJSON.parse(row.record_json);\n\nconst mapSQLiteLaneHandoffAutoCompletePolicyHistoryRow = (\n\trow: SQLiteLaneHandoffAutoCompletePolicyHistoryRow\n): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord =>\n\tJSON.parse(row.record_json);\n\nconst mapSQLiteReleaseLanePolicyHistoryRow = (\n\trow: SQLiteReleaseLanePolicyHistoryRow\n): RAGRetrievalReleaseLanePolicyHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteBaselineGatePolicyHistoryRow = (\n\trow: SQLiteBaselineGatePolicyHistoryRow\n): RAGRetrievalBaselineGatePolicyHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteReleaseLaneEscalationPolicyHistoryRow = (\n\trow: SQLiteReleaseLaneEscalationPolicyHistoryRow\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord =>\n\tJSON.parse(row.record_json);\n\nexport const createRAGSQLiteSearchTraceStore = (\n\toptions: SQLiteRAGSearchTraceStoreOptions\n): RAGSearchTraceStore => {\n\tconst tableName = options.tableName ?? DEFAULT_SEARCH_TRACE_TABLE_NAME;\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_query_finished_at_idx ON ${tableName} (query, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_finished_at_idx ON ${tableName} (group_key, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`\n\t);\n\n\tconst 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\tconst 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\tconst remove = db.prepare(`DELETE FROM ${tableName} WHERE id = ?`);\n\n\treturn {\n\t\tlistTraces(input) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input?.query) {\n\t\t\t\twhere.push('query = ?');\n\t\t\t\tparams.push(input.query);\n\t\t\t}\n\n\t\t\tif (input?.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY finished_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst traces = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteSearchTraceRow)\n\t\t\t\t\t\t.map(mapSQLiteSearchTraceRow)\n\t\t\t\t: [];\n\t\t\tconst filtered = input?.tag\n\t\t\t\t? traces.filter((trace) =>\n\t\t\t\t\t\t(trace.tags ?? []).includes(input.tag as string)\n\t\t\t\t\t)\n\t\t\t\t: traces;\n\n\t\t\treturn normalizeTraceSummaryRuns(filtered).slice(\n\t\t\t\t0,\n\t\t\t\tinput?.limit ?? DEFAULT_HISTORY_LIMIT\n\t\t\t);\n\t\t},\n\t\tsaveTrace(trace) {\n\t\t\tinsert.run(\n\t\t\t\ttrace.id,\n\t\t\t\ttrace.query,\n\t\t\t\ttrace.label,\n\t\t\t\ttrace.groupKey ?? null,\n\t\t\t\tJSON.stringify(trace.tags ?? []),\n\t\t\t\ttrace.startedAt,\n\t\t\t\ttrace.finishedAt,\n\t\t\t\ttrace.elapsedMs,\n\t\t\t\tJSON.stringify(trace.trace),\n\t\t\t\tJSON.stringify(trace.summary),\n\t\t\t\tJSON.stringify(trace.results),\n\t\t\t\ttrace.metadata === undefined\n\t\t\t\t\t? null\n\t\t\t\t\t: JSON.stringify(trace.metadata)\n\t\t\t);\n\t\t},\n\t\tpruneTraces(input) {\n\t\t\tconst rows = db\n\t\t\t\t.prepare(`${listBase} ORDER BY finished_at DESC`)\n\t\t\t\t.all();\n\t\t\tconst traces = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteSearchTraceRow)\n\t\t\t\t\t\t.map(mapSQLiteSearchTraceRow)\n\t\t\t\t: [];\n\t\t\tconst pruned = applyRAGSearchTracePrunePolicy({\n\t\t\t\tinput,\n\t\t\t\ttraces\n\t\t\t});\n\n\t\t\tfor (const trace of pruned.removed) {\n\t\t\t\tremove.run(trace.id);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tkeptCount: pruned.keptCount,\n\t\t\t\tremovedCount: pruned.removedCount\n\t\t\t};\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteSearchTracePruneHistoryStore = (\n\toptions: SQLiteRAGSearchTracePruneHistoryStoreOptions\n): RAGSearchTracePruneHistoryStore => {\n\tconst tableName = options.tableName ?? 'rag_search_trace_prune_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_trigger_finished_at_idx ON ${tableName} (trigger, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRuns(input) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input?.trigger) {\n\t\t\t\twhere.push('trigger = ?');\n\t\t\t\tparams.push(input.trigger);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY finished_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst runs = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteSearchTracePruneHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteSearchTracePruneHistoryRow)\n\t\t\t\t: [];\n\t\t\tconst sorted = normalizeSearchTracePruneRuns(runs);\n\t\t\treturn typeof input?.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveRun(run) {\n\t\t\tinsert.run(\n\t\t\t\trun.id,\n\t\t\t\trun.trigger,\n\t\t\t\trun.startedAt,\n\t\t\t\trun.finishedAt,\n\t\t\t\trun.elapsedMs,\n\t\t\t\tJSON.stringify(run)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalComparisonHistoryStore = (\n\toptions: SQLiteRAGRetrievalComparisonHistoryStoreOptions\n): RAGRetrievalComparisonHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ?? DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME;\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tensureSQLiteColumns(db, tableName, [\n\t\t{ definition: 'TEXT', name: 'corpus_group_key' }\n\t]);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_finished_at_idx ON ${tableName} (group_key, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_finished_at_idx ON ${tableName} (corpus_group_key, finished_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRuns(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.suiteId) {\n\t\t\t\twhere.push('suite_id = ?');\n\t\t\t\tparams.push(input.suiteId);\n\t\t\t}\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY finished_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst runs = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalComparisonHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalComparisonHistoryRow)\n\t\t\t\t: [];\n\t\t\tconst normalizedLabel = normalizeLabelFilter(input.label);\n\t\t\tconst filtered = normalizeRetrievalComparisonRuns(\n\t\t\t\truns.filter(\n\t\t\t\t\t(entry) =>\n\t\t\t\t\t\t(!input.tag ||\n\t\t\t\t\t\t\t(entry.tags ?? []).includes(input.tag)) &&\n\t\t\t\t\t\t(!normalizedLabel ||\n\t\t\t\t\t\t\tentry.label\n\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t.includes(normalizedLabel) ||\n\t\t\t\t\t\t\tentry.suiteLabel\n\t\t\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t\t\t\t\t.includes(normalizedLabel)) &&\n\t\t\t\t\t\tmatchesWinner(entry, input.winnerId)\n\t\t\t\t)\n\t\t\t);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? filtered.slice(0, input.limit)\n\t\t\t\t: filtered;\n\t\t},\n\t\tsaveRun(run) {\n\t\t\tinsert.run(\n\t\t\t\trun.id,\n\t\t\t\trun.suiteId,\n\t\t\t\trun.suiteLabel,\n\t\t\t\trun.label,\n\t\t\t\trun.corpusGroupKey ?? null,\n\t\t\t\trun.groupKey ?? null,\n\t\t\t\tJSON.stringify(run.tags ?? []),\n\t\t\t\trun.startedAt,\n\t\t\t\trun.finishedAt,\n\t\t\t\trun.elapsedMs,\n\t\t\t\tJSON.stringify(run.comparison),\n\t\t\t\trun.decisionSummary === undefined\n\t\t\t\t\t? null\n\t\t\t\t\t: JSON.stringify(run.decisionSummary)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalReleaseDecisionStore = (\n\toptions: SQLiteRAGRetrievalReleaseDecisionStoreOptions\n): RAGRetrievalReleaseDecisionStore => {\n\tconst tableName =\n\t\toptions.tableName ?? DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME;\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tensureSQLiteColumns(db, tableName, [\n\t\t{ definition: 'TEXT', name: 'corpus_group_key' }\n\t]);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_decided_at_idx ON ${tableName} (corpus_group_key, decided_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_kind_decided_at_idx ON ${tableName} (kind, decided_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistDecisions(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.kind) {\n\t\t\t\twhere.push('kind = ?');\n\t\t\t\tparams.push(input.kind);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY decided_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst decisions = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalReleaseDecisionRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalReleaseDecisionRow)\n\t\t\t\t: [];\n\t\t\tconst sorted = normalizeRetrievalReleaseDecisionRecords(decisions);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveDecision(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.kind,\n\t\t\t\trecord.decidedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalBaselineStore = (\n\toptions: SQLiteRAGRetrievalBaselineStoreOptions\n): RAGRetrievalBaselineStore => {\n\tconst tableName =\n\t\toptions.tableName ?? DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME;\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tensureSQLiteColumns(db, tableName, [\n\t\t{ definition: 'TEXT', name: 'corpus_group_key' }\n\t]);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_promoted_at_idx ON ${tableName} (group_key, promoted_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_promoted_at_idx ON ${tableName} (corpus_group_key, promoted_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_rollout_status_idx ON ${tableName} (group_key, rollout_label, status)`\n\t);\n\n\tconst 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\tconst 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\tconst 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\tconst 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\tconst 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\tconst listBaselinesSync = (\n\t\tinput: Parameters<RAGRetrievalBaselineStore['listBaselines']>[0] = {}\n\t): RAGRetrievalBaselineRecord[] => {\n\t\tconst where: string[] = [];\n\t\tconst params: Array<string | number> = [];\n\n\t\tif (input.corpusGroupKey) {\n\t\t\twhere.push('corpus_group_key = ?');\n\t\t\tparams.push(input.corpusGroupKey);\n\t\t}\n\n\t\tif (input.groupKey) {\n\t\t\twhere.push('group_key = ?');\n\t\t\tparams.push(input.groupKey);\n\t\t}\n\n\t\tif (input.status) {\n\t\t\twhere.push('status = ?');\n\t\t\tparams.push(input.status);\n\t\t}\n\n\t\tconst sql =\n\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t'ORDER BY promoted_at DESC';\n\t\tconst rows = db.prepare(sql).all(...params);\n\t\tconst baselines = Array.isArray(rows)\n\t\t\t? rows\n\t\t\t\t\t.filter(isSQLiteRetrievalBaselineRow)\n\t\t\t\t\t.map(mapSQLiteRetrievalBaselineRow)\n\t\t\t: [];\n\t\tconst tag = typeof input.tag === 'string' ? input.tag : undefined;\n\t\tconst filtered = tag\n\t\t\t? baselines.filter((entry) => (entry.tags ?? []).includes(tag))\n\t\t\t: baselines;\n\t\tconst sorted = normalizeRetrievalBaselineRecords(filtered);\n\n\t\treturn typeof input.limit === 'number'\n\t\t\t? sorted.slice(0, input.limit)\n\t\t\t: sorted;\n\t};\n\n\treturn {\n\t\tgetBaseline(groupKey) {\n\t\t\tconst baselines = listBaselinesSync({ groupKey, limit: 1 });\n\t\t\treturn Promise.resolve(baselines[0] ?? null);\n\t\t},\n\t\tlistBaselines(input) {\n\t\t\treturn Promise.resolve(listBaselinesSync(input));\n\t\t},\n\t\tsaveBaseline(record) {\n\t\t\tconst versionRow = currentVersion.get(record.groupKey) as\n\t\t\t\t| { max_version?: number }\n\t\t\t\t| undefined;\n\t\t\tconst nextVersion =\n\t\t\t\ttypeof record.version === 'number'\n\t\t\t\t\t? record.version\n\t\t\t\t\t: (versionRow?.max_version ?? 0) + 1;\n\t\t\tconst nextRecord: RAGRetrievalBaselineRecord = {\n\t\t\t\t...record,\n\t\t\t\tstatus: 'active',\n\t\t\t\tversion: nextVersion\n\t\t\t};\n\n\t\t\tconst rows = matchingRolloutRows.all(\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.rolloutLabel ?? null,\n\t\t\t\trecord.rolloutLabel ?? null\n\t\t\t);\n\t\t\tconst existing = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalBaselineRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalBaselineRow)\n\t\t\t\t: [];\n\n\t\t\tfor (const entry of existing) {\n\t\t\t\tupdateExisting.run(\n\t\t\t\t\t'superseded',\n\t\t\t\t\tJSON.stringify({\n\t\t\t\t\t\t...entry,\n\t\t\t\t\t\tstatus: 'superseded'\n\t\t\t\t\t}),\n\t\t\t\t\tentry.id\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tinsert.run(\n\t\t\t\tnextRecord.id,\n\t\t\t\tnextRecord.corpusGroupKey ?? null,\n\t\t\t\tnextRecord.groupKey,\n\t\t\t\tnextRecord.rolloutLabel ?? null,\n\t\t\t\tnextRecord.promotedAt,\n\t\t\t\tnextRecord.status,\n\t\t\t\tnextRecord.version,\n\t\t\t\tJSON.stringify(nextRecord.tags ?? []),\n\t\t\t\tJSON.stringify(nextRecord)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalReleaseIncidentStore = (\n\toptions: SQLiteRAGRetrievalReleaseIncidentStoreOptions\n): RAGRetrievalReleaseIncidentStore => {\n\tconst tableName =\n\t\toptions.tableName ?? DEFAULT_RETRIEVAL_RELEASE_INCIDENT_TABLE_NAME;\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_triggered_at_idx ON ${tableName} (group_key, triggered_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_status_idx ON ${tableName} (corpus_group_key, status, triggered_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistIncidents(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tif (input.severity) {\n\t\t\t\twhere.push('severity = ?');\n\t\t\t\tparams.push(input.severity);\n\t\t\t}\n\n\t\t\tif (input.status) {\n\t\t\t\twhere.push('status = ?');\n\t\t\t\tparams.push(input.status);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY triggered_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst incidents = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalReleaseIncidentRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalReleaseIncidentRow)\n\t\t\t\t: [];\n\t\t\tconst sorted = normalizeRetrievalReleaseIncidentRecords(incidents);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveIncident(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.targetRolloutLabel ?? null,\n\t\t\t\trecord.severity,\n\t\t\t\trecord.status,\n\t\t\t\trecord.triggeredAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffDecisionStore = (\n\toptions: SQLiteRAGRetrievalLaneHandoffDecisionStoreOptions\n): RAGRetrievalLaneHandoffDecisionStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_lane_handoff_decisions';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_rollout_idx ON ${tableName} (corpus_group_key, source_rollout_label, target_rollout_label, decided_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistDecisions(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.kind) {\n\t\t\t\twhere.push('kind = ?');\n\t\t\t\tparams.push(input.kind);\n\t\t\t}\n\n\t\t\tif (input.sourceRolloutLabel) {\n\t\t\t\twhere.push('source_rollout_label = ?');\n\t\t\t\tparams.push(input.sourceRolloutLabel);\n\t\t\t}\n\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY decided_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst decisions = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalLaneHandoffDecisionRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalLaneHandoffDecisionRow)\n\t\t\t\t: [];\n\t\t\tconst sorted =\n\t\t\t\tnormalizeRetrievalLaneHandoffDecisionRecords(decisions);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveDecision(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.sourceRolloutLabel,\n\t\t\t\trecord.targetRolloutLabel,\n\t\t\t\trecord.kind,\n\t\t\t\trecord.decidedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffIncidentStore = (\n\toptions: SQLiteRAGRetrievalLaneHandoffIncidentStoreOptions\n): RAGRetrievalLaneHandoffIncidentStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_lane_handoff_incidents';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_triggered_at_idx ON ${tableName} (group_key, triggered_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_status_idx ON ${tableName} (corpus_group_key, status, triggered_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistIncidents(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tif (input.severity) {\n\t\t\t\twhere.push('severity = ?');\n\t\t\t\tparams.push(input.severity);\n\t\t\t}\n\n\t\t\tif (input.status) {\n\t\t\t\twhere.push('status = ?');\n\t\t\t\tparams.push(input.status);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY triggered_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst incidents = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalLaneHandoffIncidentRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalLaneHandoffIncidentRow)\n\t\t\t\t: [];\n\t\t\tconst sorted = normalizeRetrievalReleaseIncidentRecords(\n\t\t\t\tincidents as RAGRetrievalReleaseIncidentRecord[]\n\t\t\t) as RAGRetrievalLaneHandoffIncidentRecord[];\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveIncident(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.targetRolloutLabel ?? null,\n\t\t\t\trecord.sourceRolloutLabel ?? null,\n\t\t\t\trecord.severity,\n\t\t\t\trecord.status,\n\t\t\t\trecord.triggeredAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffIncidentHistoryStore = (\n\toptions: SQLiteRAGRetrievalLaneHandoffIncidentHistoryStoreOptions\n): RAGRetrievalLaneHandoffIncidentHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_lane_handoff_incident_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_incident_recorded_at_idx ON ${tableName} (incident_id, recorded_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRecords(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.incidentId) {\n\t\t\t\twhere.push('incident_id = ?');\n\t\t\t\tparams.push(input.incidentId);\n\t\t\t}\n\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tif (input.action) {\n\t\t\t\twhere.push('action = ?');\n\t\t\t\tparams.push(input.action);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY recorded_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalLaneHandoffIncidentHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalLaneHandoffIncidentHistoryRow)\n\t\t\t\t: [];\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? records.slice(0, input.limit)\n\t\t\t\t: records;\n\t\t},\n\t\tsaveRecord(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.incidentId,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.targetRolloutLabel ?? null,\n\t\t\t\trecord.action,\n\t\t\t\trecord.recordedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalIncidentRemediationDecisionStore = (\n\toptions: SQLiteRAGRetrievalIncidentRemediationDecisionStoreOptions\n): RAGRetrievalIncidentRemediationDecisionStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_incident_remediation_decisions';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_incident_status_idx ON ${tableName} (incident_id, status, decided_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRecords(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\n\t\t\tif (input.incidentId) {\n\t\t\t\twhere.push('incident_id = ?');\n\t\t\t\tparams.push(input.incidentId);\n\t\t\t}\n\n\t\t\tif (input.remediationKind) {\n\t\t\t\twhere.push('remediation_kind = ?');\n\t\t\t\tparams.push(input.remediationKind);\n\t\t\t}\n\n\t\t\tif (input.status) {\n\t\t\t\twhere.push('status = ?');\n\t\t\t\tparams.push(input.status);\n\t\t\t}\n\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY decided_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteRetrievalIncidentRemediationDecisionRow)\n\t\t\t\t\t\t.map(mapSQLiteRetrievalIncidentRemediationDecisionRow)\n\t\t\t\t: [];\n\t\t\tconst sorted =\n\t\t\t\tnormalizeRetrievalIncidentRemediationDecisionRecords(records);\n\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t: sorted;\n\t\t},\n\t\tsaveRecord(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.incidentId,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.targetRolloutLabel ?? null,\n\t\t\t\trecord.remediationKind,\n\t\t\t\trecord.status,\n\t\t\t\trecord.decidedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalIncidentRemediationExecutionHistoryStore =\n\t(\n\t\toptions: SQLiteRAGRetrievalIncidentRemediationExecutionHistoryStoreOptions\n\t): RAGRetrievalIncidentRemediationExecutionHistoryStore => {\n\t\tconst tableName =\n\t\t\toptions.tableName ??\n\t\t\t'rag_retrieval_incident_remediation_execution_history';\n\t\tassertSupportedIdentifier(tableName);\n\n\t\tconst db =\n\t\t\toptions.db ??\n\t\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\t\tdb.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\t\tdb.exec(\n\t\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_executed_at_idx ON ${tableName} (group_key, executed_at DESC)`\n\t\t);\n\t\tdb.exec(\n\t\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_incident_code_idx ON ${tableName} (incident_id, code, executed_at DESC)`\n\t\t);\n\n\t\tconst 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\t\tconst 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\t\treturn {\n\t\t\tlistRecords(input = {}) {\n\t\t\t\tconst where: string[] = [];\n\t\t\t\tconst params: Array<string | number> = [];\n\n\t\t\t\tif (input.groupKey) {\n\t\t\t\t\twhere.push('group_key = ?');\n\t\t\t\t\tparams.push(input.groupKey);\n\t\t\t\t}\n\n\t\t\t\tif (input.incidentId) {\n\t\t\t\t\twhere.push('incident_id = ?');\n\t\t\t\t\tparams.push(input.incidentId);\n\t\t\t\t}\n\n\t\t\t\tif (input.actionKind) {\n\t\t\t\t\twhere.push('action_kind = ?');\n\t\t\t\t\tparams.push(input.actionKind);\n\t\t\t\t}\n\n\t\t\t\tif (input.code) {\n\t\t\t\t\twhere.push('code = ?');\n\t\t\t\t\tparams.push(input.code);\n\t\t\t\t}\n\n\t\t\t\tif (typeof input.blockedByGuardrail === 'boolean') {\n\t\t\t\t\twhere.push('blocked_by_guardrail = ?');\n\t\t\t\t\tparams.push(input.blockedByGuardrail ? 1 : 0);\n\t\t\t\t}\n\n\t\t\t\tif (typeof input.idempotentReplay === 'boolean') {\n\t\t\t\t\twhere.push('idempotent_replay = ?');\n\t\t\t\t\tparams.push(input.idempotentReplay ? 1 : 0);\n\t\t\t\t}\n\n\t\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t\t}\n\n\t\t\t\tconst sql =\n\t\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t\t'ORDER BY executed_at DESC';\n\t\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t\t? rows\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\tisSQLiteRetrievalIncidentRemediationExecutionHistoryRow\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tmapSQLiteRetrievalIncidentRemediationExecutionHistoryRow\n\t\t\t\t\t\t\t)\n\t\t\t\t\t: [];\n\t\t\t\tconst sorted =\n\t\t\t\t\tnormalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n\t\t\t\t\t\trecords\n\t\t\t\t\t);\n\n\t\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t\t? sorted.slice(0, input.limit)\n\t\t\t\t\t: sorted;\n\t\t\t},\n\t\t\tsaveRecord(record) {\n\t\t\t\tinsert.run(\n\t\t\t\t\trecord.id,\n\t\t\t\t\trecord.incidentId ?? null,\n\t\t\t\t\trecord.groupKey ?? null,\n\t\t\t\t\trecord.targetRolloutLabel ?? null,\n\t\t\t\t\trecord.action.kind,\n\t\t\t\t\trecord.code,\n\t\t\t\t\trecord.blockedByGuardrail ? 1 : 0,\n\t\t\t\t\trecord.idempotentReplay ? 1 : 0,\n\t\t\t\t\trecord.executedAt,\n\t\t\t\t\tJSON.stringify(record)\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t};\n\nexport const createRAGSQLiteRetrievalLaneHandoffAutoCompletePolicyHistoryStore =\n\t(\n\t\toptions: SQLiteRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStoreOptions\n\t): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore => {\n\t\tconst tableName =\n\t\t\toptions.tableName ??\n\t\t\t'rag_retrieval_lane_handoff_auto_complete_policy_history';\n\t\tassertSupportedIdentifier(tableName);\n\n\t\tconst db =\n\t\t\toptions.db ??\n\t\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\t\tdb.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\t\tdb.exec(\n\t\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`\n\t\t);\n\t\tdb.exec(\n\t\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_target_idx ON ${tableName} (corpus_group_key, target_rollout_label, recorded_at DESC)`\n\t\t);\n\n\t\tconst 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\t\tconst 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\t\treturn {\n\t\t\tlistRecords(input = {}) {\n\t\t\t\tconst where: string[] = [];\n\t\t\t\tconst params: Array<string | number> = [];\n\n\t\t\t\tif (input.corpusGroupKey) {\n\t\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t\t}\n\t\t\t\tif (input.groupKey) {\n\t\t\t\t\twhere.push('group_key = ?');\n\t\t\t\t\tparams.push(input.groupKey);\n\t\t\t\t}\n\t\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t\t}\n\n\t\t\t\tconst sql =\n\t\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t\t'ORDER BY recorded_at DESC';\n\t\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t\t? rows\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\tisSQLiteLaneHandoffAutoCompletePolicyHistoryRow\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\tmapSQLiteLaneHandoffAutoCompletePolicyHistoryRow\n\t\t\t\t\t\t\t)\n\t\t\t\t\t: [];\n\t\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t\t? records.slice(0, input.limit)\n\t\t\t\t\t: records;\n\t\t\t},\n\t\t\tsaveRecord(record) {\n\t\t\t\tinsert.run(\n\t\t\t\t\trecord.id,\n\t\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\t\trecord.groupKey,\n\t\t\t\t\trecord.targetRolloutLabel,\n\t\t\t\t\trecord.recordedAt,\n\t\t\t\t\tJSON.stringify(record)\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\t};\n\nexport const createRAGSQLiteRetrievalReleaseLanePolicyHistoryStore = (\n\toptions: SQLiteRAGRetrievalReleaseLanePolicyHistoryStoreOptions\n): RAGRetrievalReleaseLanePolicyHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_release_lane_policy_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_rollout_recorded_at_idx ON ${tableName} (rollout_label, recorded_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_scope_idx ON ${tableName} (group_key, scope, recorded_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRecords(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\t\t\tif (input.rolloutLabel) {\n\t\t\t\twhere.push('rollout_label = ?');\n\t\t\t\tparams.push(input.rolloutLabel);\n\t\t\t}\n\t\t\tif (input.scope) {\n\t\t\t\twhere.push('scope = ?');\n\t\t\t\tparams.push(input.scope);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY recorded_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteReleaseLanePolicyHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteReleaseLanePolicyHistoryRow)\n\t\t\t\t: [];\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? records.slice(0, input.limit)\n\t\t\t\t: records;\n\t\t},\n\t\tsaveRecord(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey ?? null,\n\t\t\t\trecord.rolloutLabel,\n\t\t\t\trecord.scope,\n\t\t\t\trecord.recordedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalBaselineGatePolicyHistoryStore = (\n\toptions: SQLiteRAGRetrievalBaselineGatePolicyHistoryStoreOptions\n): RAGRetrievalBaselineGatePolicyHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ?? 'rag_retrieval_baseline_gate_policy_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_rollout_recorded_at_idx ON ${tableName} (rollout_label, recorded_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_scope_idx ON ${tableName} (group_key, scope, recorded_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRecords(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\t\t\tif (input.rolloutLabel) {\n\t\t\t\twhere.push('rollout_label = ?');\n\t\t\t\tparams.push(input.rolloutLabel);\n\t\t\t}\n\t\t\tif (input.scope) {\n\t\t\t\twhere.push('scope = ?');\n\t\t\t\tparams.push(input.scope);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY recorded_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteBaselineGatePolicyHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteBaselineGatePolicyHistoryRow)\n\t\t\t\t: [];\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? records.slice(0, input.limit)\n\t\t\t\t: records;\n\t\t},\n\t\tsaveRecord(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey ?? null,\n\t\t\t\trecord.rolloutLabel,\n\t\t\t\trecord.scope,\n\t\t\t\trecord.recordedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGSQLiteRetrievalReleaseLaneEscalationPolicyHistoryStore = (\n\toptions: SQLiteRAGRetrievalReleaseLaneEscalationPolicyHistoryStoreOptions\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryStore => {\n\tconst tableName =\n\t\toptions.tableName ??\n\t\t'rag_retrieval_release_lane_escalation_policy_history';\n\tassertSupportedIdentifier(tableName);\n\n\tconst db =\n\t\toptions.db ??\n\t\tnew (loadBunSQLiteModule().Database)(options.path ?? ':memory:');\n\n\tdb.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\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`\n\t);\n\tdb.exec(\n\t\t`CREATE INDEX IF NOT EXISTS ${tableName}_corpus_target_idx ON ${tableName} (corpus_group_key, target_rollout_label, recorded_at DESC)`\n\t);\n\n\tconst 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\tconst 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\treturn {\n\t\tlistRecords(input = {}) {\n\t\t\tconst where: string[] = [];\n\t\t\tconst params: Array<string | number> = [];\n\n\t\t\tif (input.corpusGroupKey) {\n\t\t\t\twhere.push('corpus_group_key = ?');\n\t\t\t\tparams.push(input.corpusGroupKey);\n\t\t\t}\n\t\t\tif (input.groupKey) {\n\t\t\t\twhere.push('group_key = ?');\n\t\t\t\tparams.push(input.groupKey);\n\t\t\t}\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\twhere.push('target_rollout_label = ?');\n\t\t\t\tparams.push(input.targetRolloutLabel);\n\t\t\t}\n\n\t\t\tconst sql =\n\t\t\t\t`${listBase}${where.length > 0 ? ` WHERE ${where.join(' AND ')}` : ''} ` +\n\t\t\t\t'ORDER BY recorded_at DESC';\n\t\t\tconst rows = db.prepare(sql).all(...params);\n\t\t\tconst records = Array.isArray(rows)\n\t\t\t\t? rows\n\t\t\t\t\t\t.filter(isSQLiteReleaseLaneEscalationPolicyHistoryRow)\n\t\t\t\t\t\t.map(mapSQLiteReleaseLaneEscalationPolicyHistoryRow)\n\t\t\t\t: [];\n\t\t\treturn typeof input.limit === 'number'\n\t\t\t\t? records.slice(0, input.limit)\n\t\t\t\t: records;\n\t\t},\n\t\tsaveRecord(record) {\n\t\t\tinsert.run(\n\t\t\t\trecord.id,\n\t\t\t\trecord.corpusGroupKey ?? null,\n\t\t\t\trecord.groupKey,\n\t\t\t\trecord.targetRolloutLabel,\n\t\t\t\trecord.recordedAt,\n\t\t\t\tJSON.stringify(record)\n\t\t\t);\n\t\t}\n\t};\n};\n\nexport const createRAGFileAnswerGroundingEvaluationHistoryStore = (\n\tpath: string\n): RAGAnswerGroundingEvaluationHistoryStore => ({\n\tasync listRuns(input) {\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\truns?: RAGAnswerGroundingEvaluationRun[];\n\t\t\t};\n\t\t\tconst runs = Array.isArray(data.runs) ? data.runs : [];\n\t\t\tconst filtered = input?.suiteId\n\t\t\t\t? runs.filter((run) => run.suiteId === input.suiteId)\n\t\t\t\t: runs;\n\n\t\t\treturn filtered\n\t\t\t\t.sort(toGroundingHistorySortOrder)\n\t\t\t\t.slice(0, input?.limit ?? DEFAULT_HISTORY_LIMIT);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror &&\n\t\t\t\ttypeof error === 'object' &&\n\t\t\t\t'code' in error &&\n\t\t\t\terror.code === 'ENOENT'\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t},\n\tasync saveRun(run) {\n\t\tlet runs: RAGAnswerGroundingEvaluationRun[] = [];\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\truns?: RAGAnswerGroundingEvaluationRun[];\n\t\t\t};\n\t\t\truns = Array.isArray(data.runs) ? data.runs : [];\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t!error ||\n\t\t\t\ttypeof error !== 'object' ||\n\t\t\t\t!('code' in error) ||\n\t\t\t\terror.code !== 'ENOENT'\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst nextRuns = normalizeGroundingHistoryRuns([\n\t\t\trun,\n\t\t\t...runs.filter((entry) => entry.id !== run.id)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\truns: nextRuns\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)\n\t\t);\n\t},\n\tasync pruneRuns(input) {\n\t\tlet runs: RAGAnswerGroundingEvaluationRun[] = [];\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\truns?: RAGAnswerGroundingEvaluationRun[];\n\t\t\t};\n\t\t\truns = Array.isArray(data.runs) ? data.runs : [];\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t!error ||\n\t\t\t\ttypeof error !== 'object' ||\n\t\t\t\t!('code' in error) ||\n\t\t\t\terror.code !== 'ENOENT'\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst pruned = applyRAGEvaluationHistoryPrunePolicy({\n\t\t\tinput,\n\t\t\truns,\n\t\t\tsort: normalizeGroundingHistoryRuns\n\t\t});\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\truns: pruned.next\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)\n\t\t);\n\t\treturn {\n\t\t\tkeptCount: pruned.keptCount,\n\t\t\tremovedCount: pruned.removedCount\n\t\t} satisfies RAGEvaluationHistoryPruneResult;\n\t}\n});\n\nexport const createRAGFileAnswerGroundingCaseDifficultyHistoryStore = (\n\tpath: string\n): RAGAnswerGroundingCaseDifficultyHistoryStore => ({\n\tasync listRuns(input) {\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\truns?: RAGAnswerGroundingCaseDifficultyRun[];\n\t\t\t};\n\t\t\tconst runs = Array.isArray(data.runs) ? data.runs : [];\n\t\t\tconst filtered = input?.suiteId\n\t\t\t\t? runs.filter((run) => run.suiteId === input.suiteId)\n\t\t\t\t: runs;\n\n\t\t\treturn normalizeGroundingDifficultyHistoryRuns(filtered).slice(\n\t\t\t\t0,\n\t\t\t\tinput?.limit ?? DEFAULT_HISTORY_LIMIT\n\t\t\t);\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\terror &&\n\t\t\t\ttypeof error === 'object' &&\n\t\t\t\t'code' in error &&\n\t\t\t\terror.code === 'ENOENT'\n\t\t\t) {\n\t\t\t\treturn [];\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t},\n\tasync saveRun(run) {\n\t\tlet runs: RAGAnswerGroundingCaseDifficultyRun[] = [];\n\t\ttry {\n\t\t\tconst raw = await readFile(path, 'utf8');\n\t\t\tconst data = JSON.parse(raw) as {\n\t\t\t\truns?: RAGAnswerGroundingCaseDifficultyRun[];\n\t\t\t};\n\t\t\truns = Array.isArray(data.runs) ? data.runs : [];\n\t\t} catch (error) {\n\t\t\tif (\n\t\t\t\t!error ||\n\t\t\t\ttypeof error !== 'object' ||\n\t\t\t\t!('code' in error) ||\n\t\t\t\terror.code !== 'ENOENT'\n\t\t\t) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\n\t\tconst nextRuns = normalizeGroundingDifficultyHistoryRuns([\n\t\t\trun,\n\t\t\t...runs.filter((entry) => entry.id !== run.id)\n\t\t]);\n\t\tawait mkdir(dirname(path), { recursive: true });\n\t\tawait writeFile(\n\t\t\tpath,\n\t\t\tJSON.stringify(\n\t\t\t\t{\n\t\t\t\t\truns: nextRuns\n\t\t\t\t},\n\t\t\t\tnull,\n\t\t\t\t2\n\t\t\t)\n\t\t);\n\t}\n});\n\nexport const loadRAGEvaluationHistory = async ({\n\tstore,\n\tsuite,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGEvaluationHistoryStore;\n\tsuite: RAGEvaluationSuite;\n\tlimit?: number;\n}): Promise<RAGEvaluationHistory> => {\n\tconst runs = normalizeHistoryRuns(\n\t\tawait Promise.resolve(store.listRuns({ limit, suiteId: suite.id }))\n\t);\n\tconst latestRun = runs[0];\n\tconst previousRun = runs[1];\n\n\treturn {\n\t\tcaseTraceSnapshots: buildEvaluationCaseTraceSnapshots({\n\t\t\tcurrent: latestRun,\n\t\t\tprevious: previousRun\n\t\t}),\n\t\tretrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n\t\t\truns\n\t\t}),\n\t\tdiff:\n\t\t\tlatestRun && previousRun\n\t\t\t\t? buildRAGEvaluationRunDiff({\n\t\t\t\t\t\tcurrent: latestRun,\n\t\t\t\t\t\tprevious: previousRun\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\tlatestRun,\n\t\tleaderboard: buildRAGEvaluationLeaderboard(runs),\n\t\tpreviousRun,\n\t\truns,\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id\n\t};\n};\n\nexport const loadRAGEvaluationSuiteSnapshotHistory = async ({\n\tstore,\n\tsuite,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGEvaluationSuiteSnapshotHistoryStore;\n\tsuite: Pick<RAGEvaluationSuite, 'id' | 'label'>;\n\tlimit?: number;\n}): Promise<RAGEvaluationSuiteSnapshotHistory> => {\n\tconst snapshots = normalizeEvaluationSuiteSnapshots(\n\t\tawait Promise.resolve(\n\t\t\tstore.listSnapshots({\n\t\t\t\tlimit,\n\t\t\t\tsuiteId: suite.id\n\t\t\t})\n\t\t)\n\t);\n\tconst latestSnapshot = snapshots[0];\n\tconst previousSnapshot = snapshots[1];\n\n\treturn {\n\t\tdiff:\n\t\t\tlatestSnapshot && previousSnapshot\n\t\t\t\t? buildRAGEvaluationSuiteSnapshotDiff({\n\t\t\t\t\t\tcurrent: latestSnapshot,\n\t\t\t\t\t\tprevious: previousSnapshot\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\tlatestSnapshot,\n\t\tpreviousSnapshot,\n\t\tsnapshots,\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id\n\t};\n};\n\nexport const loadRAGSearchTraceHistory = async ({\n\tstore,\n\tquery,\n\tgroupKey,\n\ttag,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGSearchTraceStore;\n\tquery?: string;\n\tgroupKey?: string;\n\ttag?: string;\n\tlimit?: number;\n}): Promise<RAGSearchTraceHistory> => {\n\tconst traces = normalizeTraceSummaryRuns(\n\t\tawait Promise.resolve(store.listTraces({ groupKey, limit, query, tag }))\n\t);\n\tconst latestTrace = traces[0];\n\tconst previousTrace = traces[1];\n\n\treturn {\n\t\tdiff:\n\t\t\tlatestTrace && previousTrace\n\t\t\t\t? buildRAGSearchTraceDiff({\n\t\t\t\t\t\tcurrent: latestTrace,\n\t\t\t\t\t\tprevious: previousTrace\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\tlatestTrace,\n\t\tpreviousTrace,\n\t\tgroupKey,\n\t\tquery,\n\t\ttag,\n\t\tretrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n\t\t\truns: traces.map((trace) => ({\n\t\t\t\tfinishedAt: trace.finishedAt,\n\t\t\t\tid: trace.id,\n\t\t\t\tlabel: trace.label,\n\t\t\t\ttraceSummary: trace.summary\n\t\t\t}))\n\t\t}),\n\t\ttraces\n\t};\n};\n\nexport const loadRAGSearchTraceGroupHistory = async ({\n\tstore,\n\ttag,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGSearchTraceStore;\n\ttag?: string;\n\tlimit?: number;\n}): Promise<RAGSearchTraceGroupHistory> => {\n\tconst traces = normalizeTraceSummaryRuns(\n\t\tawait Promise.resolve(store.listTraces({ limit, tag }))\n\t);\n\tconst grouped = new Map<string, RAGSearchTraceRecord[]>();\n\n\tfor (const trace of traces) {\n\t\tconst groupKey = trace.groupKey ?? trace.query;\n\t\tconst existing = grouped.get(groupKey);\n\t\tif (existing) {\n\t\t\texisting.push(trace);\n\t\t\tcontinue;\n\t\t}\n\t\tgrouped.set(groupKey, [trace]);\n\t}\n\n\tconst groups = Array.from(grouped.entries())\n\t\t.map(([groupKey, entries]): RAGSearchTraceGroupHistoryEntry => {\n\t\t\tconst normalizedEntries = normalizeTraceSummaryRuns(entries);\n\t\t\tconst latestTrace = normalizedEntries[0];\n\t\t\tconst previousTrace = normalizedEntries[1];\n\n\t\t\treturn {\n\t\t\t\tdiff:\n\t\t\t\t\tlatestTrace && previousTrace\n\t\t\t\t\t\t? buildRAGSearchTraceDiff({\n\t\t\t\t\t\t\t\tcurrent: latestTrace,\n\t\t\t\t\t\t\t\tprevious: previousTrace\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: undefined,\n\t\t\t\tgroupKey,\n\t\t\t\tlatestTrace,\n\t\t\t\tpreviousTrace,\n\t\t\t\tretrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n\t\t\t\t\truns: normalizedEntries.map((trace) => ({\n\t\t\t\t\t\tfinishedAt: trace.finishedAt,\n\t\t\t\t\t\tid: trace.id,\n\t\t\t\t\t\tlabel: trace.label,\n\t\t\t\t\t\ttraceSummary: trace.summary\n\t\t\t\t\t}))\n\t\t\t\t}),\n\t\t\t\ttraceCount: normalizedEntries.length\n\t\t\t};\n\t\t})\n\t\t.sort((left, right) => {\n\t\t\tconst leftFinishedAt = left.latestTrace?.finishedAt ?? 0;\n\t\t\tconst rightFinishedAt = right.latestTrace?.finishedAt ?? 0;\n\t\t\treturn rightFinishedAt - leftFinishedAt;\n\t\t});\n\n\treturn {\n\t\tgroups,\n\t\ttag\n\t};\n};\n\nexport const summarizeRAGSearchTraceStore = async ({\n\tstore,\n\ttag\n}: {\n\tstore: RAGSearchTraceStore;\n\ttag?: string;\n}): Promise<RAGSearchTraceStats> => {\n\tconst traces = normalizeTraceSummaryRuns(\n\t\tawait Promise.resolve(store.listTraces({ tag }))\n\t);\n\n\treturn buildRAGSearchTraceStatsFromTraces(traces);\n};\n\nexport const previewRAGSearchTraceStorePrune = async ({\n\tstore,\n\tinput\n}: {\n\tstore: RAGSearchTraceStore;\n\tinput?: RAGSearchTracePruneInput;\n}): Promise<RAGSearchTracePrunePreview> => {\n\tconst traces = normalizeTraceSummaryRuns(\n\t\tawait Promise.resolve(store.listTraces({ tag: input?.tag }))\n\t);\n\tconst pruned = applyRAGSearchTracePrunePolicy({\n\t\tinput,\n\t\ttraces\n\t});\n\n\treturn {\n\t\tinput,\n\t\tresult: {\n\t\t\tkeptCount: pruned.keptCount,\n\t\t\tremovedCount: pruned.removedCount\n\t\t},\n\t\tstatsAfter: buildRAGSearchTraceStatsFromTraces(pruned.next),\n\t\tstatsBefore: buildRAGSearchTraceStatsFromTraces(traces)\n\t};\n};\n\nexport const loadRAGAnswerGroundingEvaluationHistory = async ({\n\tstore,\n\tsuite,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGAnswerGroundingEvaluationHistoryStore;\n\tsuite: Pick<RAGEvaluationSuite, 'id' | 'label'>;\n\tlimit?: number;\n}): Promise<RAGAnswerGroundingEvaluationHistory> => {\n\tconst runs = normalizeGroundingHistoryRuns(\n\t\tawait Promise.resolve(\n\t\t\tstore.listRuns({\n\t\t\t\tlimit,\n\t\t\t\tsuiteId: suite.id\n\t\t\t})\n\t\t)\n\t);\n\tconst latestRun = runs[0];\n\tconst previousRun = runs[1];\n\n\treturn {\n\t\tcaseSnapshots: buildGroundingCaseSnapshots({\n\t\t\tcurrent: latestRun,\n\t\t\tprevious: previousRun\n\t\t}),\n\t\tdiff:\n\t\t\tlatestRun && previousRun\n\t\t\t\t? buildRAGAnswerGroundingEvaluationRunDiff({\n\t\t\t\t\t\tcurrent: latestRun,\n\t\t\t\t\t\tprevious: previousRun\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\tlatestRun,\n\t\tleaderboard: buildRAGAnswerGroundingEvaluationLeaderboard(runs),\n\t\tpreviousRun,\n\t\truns,\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id\n\t};\n};\n\nexport const loadRAGAnswerGroundingCaseDifficultyHistory = async ({\n\tstore,\n\tsuite,\n\tlimit = DEFAULT_HISTORY_LIMIT\n}: {\n\tstore: RAGAnswerGroundingCaseDifficultyHistoryStore;\n\tsuite: Pick<RAGEvaluationSuite, 'id' | 'label'>;\n\tlimit?: number;\n}): Promise<RAGAnswerGroundingCaseDifficultyHistory> => {\n\tconst runs = normalizeGroundingDifficultyHistoryRuns(\n\t\tawait Promise.resolve(\n\t\t\tstore.listRuns({\n\t\t\t\tlimit,\n\t\t\t\tsuiteId: suite.id\n\t\t\t})\n\t\t)\n\t);\n\tconst latestRun = runs[0];\n\tconst previousRun = runs[1];\n\n\treturn {\n\t\tdiff:\n\t\t\tlatestRun && previousRun\n\t\t\t\t? buildRAGAnswerGroundingCaseDifficultyRunDiff({\n\t\t\t\t\t\tcurrent: latestRun,\n\t\t\t\t\t\tprevious: previousRun\n\t\t\t\t\t})\n\t\t\t\t: undefined,\n\t\tlatestRun,\n\t\tpreviousRun,\n\t\truns,\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id,\n\t\ttrends: buildRAGAnswerGroundingCaseDifficultyTrends({ runs })\n\t};\n};\n\nexport const persistRAGEvaluationSuiteRun = async ({\n\tstore,\n\trun\n}: {\n\tstore: RAGEvaluationHistoryStore;\n\trun: RAGEvaluationSuiteRun;\n}) => {\n\tawait Promise.resolve(store.saveRun(run));\n\treturn run;\n};\n\nexport const persistRAGAnswerGroundingEvaluationRun = async ({\n\tstore,\n\trun\n}: {\n\tstore: RAGAnswerGroundingEvaluationHistoryStore;\n\trun: RAGAnswerGroundingEvaluationRun;\n}) => {\n\tawait Promise.resolve(store.saveRun(run));\n\treturn run;\n};\n\nexport const persistRAGAnswerGroundingCaseDifficultyRun = async ({\n\tstore,\n\trun\n}: {\n\tstore: RAGAnswerGroundingCaseDifficultyHistoryStore;\n\trun: RAGAnswerGroundingCaseDifficultyRun;\n}) => {\n\tawait Promise.resolve(store.saveRun(run));\n\treturn run;\n};\n\nexport const persistRAGSearchTraceRecord = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGSearchTraceStore;\n\trecord: RAGSearchTraceRecord;\n}) => {\n\tawait Promise.resolve(store.saveTrace(record));\n\treturn record;\n};\n\nexport const pruneRAGSearchTraceStore = async ({\n\tstore,\n\tinput\n}: {\n\tstore: RAGSearchTraceStore;\n\tinput?: RAGSearchTracePruneInput;\n}): Promise<RAGSearchTracePruneResult> =>\n\tPromise.resolve(store.pruneTraces(input));\n\nexport const persistRAGSearchTracePruneRun = async ({\n\tstore,\n\trun\n}: {\n\tstore: RAGSearchTracePruneHistoryStore;\n\trun: RAGSearchTracePruneRun;\n}) => {\n\tawait Promise.resolve(store.saveRun(run));\n\treturn run;\n};\n\nexport const persistRAGRetrievalComparisonRun = async ({\n\tstore,\n\trun\n}: {\n\tstore: RAGRetrievalComparisonHistoryStore;\n\trun: RAGRetrievalComparisonRun;\n}) => {\n\tawait Promise.resolve(store.saveRun(run));\n\treturn run;\n};\n\nexport const buildRAGRetrievalComparisonDecisionSummary = ({\n\tcomparison,\n\tbaselineRetrievalId,\n\tcandidateRetrievalId,\n\tpolicy\n}: {\n\tcomparison: RAGRetrievalComparison;\n\tbaselineRetrievalId?: string;\n\tcandidateRetrievalId?: string;\n\tpolicy?: RAGRetrievalBaselineGatePolicy;\n}): RAGRetrievalComparisonDecisionSummary | undefined => {\n\tconst baselineEntry =\n\t\tfindRetrievalComparisonEntry(comparison, baselineRetrievalId) ??\n\t\tcomparison.entries[0];\n\tconst candidateEntry =\n\t\tfindRetrievalComparisonEntry(comparison, candidateRetrievalId) ??\n\t\tcomparison.entries.find(\n\t\t\t(entry) => entry.retrievalId !== baselineEntry?.retrievalId\n\t\t) ??\n\t\tcomparison.entries[1];\n\n\tif (!baselineEntry && !candidateEntry) {\n\t\treturn undefined;\n\t}\n\n\tconst delta =\n\t\tbaselineEntry && candidateEntry\n\t\t\t? {\n\t\t\t\t\taverageF1Delta:\n\t\t\t\t\t\tcandidateEntry.response.summary.averageF1 -\n\t\t\t\t\t\tbaselineEntry.response.summary.averageF1,\n\t\t\t\t\telapsedMsDelta:\n\t\t\t\t\t\tcandidateEntry.response.elapsedMs -\n\t\t\t\t\t\tbaselineEntry.response.elapsedMs,\n\t\t\t\t\tpassingRateDelta:\n\t\t\t\t\t\tcandidateEntry.response.passingRate -\n\t\t\t\t\t\tbaselineEntry.response.passingRate\n\t\t\t\t}\n\t\t\t: undefined;\n\n\treturn {\n\t\tbaseline: baselineEntry\n\t\t\t? {\n\t\t\t\t\taverageF1: baselineEntry.response.summary.averageF1,\n\t\t\t\t\telapsedMs: baselineEntry.response.elapsedMs,\n\t\t\t\t\tlabel: baselineEntry.label,\n\t\t\t\t\tpassingRate: baselineEntry.response.passingRate,\n\t\t\t\t\tretrievalId: baselineEntry.retrievalId\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tbaselineRetrievalId: baselineEntry?.retrievalId,\n\t\tcandidate: candidateEntry\n\t\t\t? {\n\t\t\t\t\taverageF1: candidateEntry.response.summary.averageF1,\n\t\t\t\t\telapsedMs: candidateEntry.response.elapsedMs,\n\t\t\t\t\tlabel: candidateEntry.label,\n\t\t\t\t\tpassingRate: candidateEntry.response.passingRate,\n\t\t\t\t\tretrievalId: candidateEntry.retrievalId\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tcandidateRetrievalId: candidateEntry?.retrievalId,\n\t\tdelta,\n\t\tfastest: comparison.summary.fastest,\n\t\tgate: evaluateRetrievalComparisonGate({ delta, policy }),\n\t\twinnerByAverageF1: comparison.summary.bestByAverageF1,\n\t\twinnerByPassingRate: comparison.summary.bestByPassingRate\n\t};\n};\n\nexport const loadRAGSearchTracePruneHistory = async ({\n\tstore,\n\tlimit,\n\ttrigger\n}: {\n\tstore: RAGSearchTracePruneHistoryStore;\n\tlimit?: number;\n\ttrigger?: RAGSearchTracePruneRun['trigger'];\n}) =>\n\tnormalizeSearchTracePruneRuns(\n\t\tawait Promise.resolve(store.listRuns({ limit, trigger }))\n\t);\n\nexport const loadRAGRetrievalComparisonHistory = async ({\n\tstore,\n\tlimit,\n\tsuiteId,\n\tlabel,\n\twinnerId,\n\tcorpusGroupKey,\n\tgroupKey,\n\ttag\n}: {\n\tstore: RAGRetrievalComparisonHistoryStore;\n\tlimit?: number;\n\tsuiteId?: string;\n\tlabel?: string;\n\twinnerId?: string;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\ttag?: string;\n}) =>\n\tnormalizeRetrievalComparisonRuns(\n\t\tawait Promise.resolve(\n\t\t\tstore.listRuns({\n\t\t\t\tcorpusGroupKey,\n\t\t\t\tgroupKey,\n\t\t\t\tlabel,\n\t\t\t\tlimit,\n\t\t\t\tsuiteId,\n\t\t\t\ttag,\n\t\t\t\twinnerId\n\t\t\t})\n\t\t)\n\t);\n\nexport const loadRAGRetrievalBaselines = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\ttag,\n\tlimit,\n\tstatus\n}: {\n\tstore: RAGRetrievalBaselineStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\ttag?: string;\n\tlimit?: number;\n\tstatus?: RAGRetrievalBaselineRecord['status'];\n}) =>\n\tnormalizeRetrievalBaselineRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listBaselines({\n\t\t\t\tcorpusGroupKey,\n\t\t\t\tgroupKey,\n\t\t\t\tlimit,\n\t\t\t\tstatus,\n\t\t\t\ttag\n\t\t\t})\n\t\t)\n\t);\n\nexport const persistRAGRetrievalBaseline = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalBaselineStore;\n\trecord: RAGRetrievalBaselineRecord;\n}) => {\n\tawait Promise.resolve(store.saveBaseline(record));\n\treturn record;\n};\n\nexport const loadRAGRetrievalReleaseDecisions = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\tkind\n}: {\n\tstore: RAGRetrievalReleaseDecisionStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\tkind?: RAGRetrievalReleaseDecisionRecord['kind'];\n}) =>\n\tnormalizeRetrievalReleaseDecisionRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listDecisions({ corpusGroupKey, groupKey, kind, limit })\n\t\t)\n\t);\n\nexport const loadRAGRetrievalLaneHandoffDecisions = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\tkind,\n\tsourceRolloutLabel,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalLaneHandoffDecisionStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\tkind?: RAGRetrievalLaneHandoffDecisionRecord['kind'];\n\tsourceRolloutLabel?: RAGRetrievalLaneHandoffDecisionRecord['sourceRolloutLabel'];\n\ttargetRolloutLabel?: RAGRetrievalLaneHandoffDecisionRecord['targetRolloutLabel'];\n}) =>\n\tnormalizeRetrievalLaneHandoffDecisionRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listDecisions({\n\t\t\t\tcorpusGroupKey,\n\t\t\t\tgroupKey,\n\t\t\t\tkind,\n\t\t\t\tlimit,\n\t\t\t\tsourceRolloutLabel,\n\t\t\t\ttargetRolloutLabel\n\t\t\t})\n\t\t)\n\t);\n\nexport const loadRAGRetrievalReleaseIncidents = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\ttargetRolloutLabel,\n\tstatus,\n\tseverity\n}: {\n\tstore: RAGRetrievalReleaseIncidentStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalReleaseIncidentRecord['targetRolloutLabel'];\n\tstatus?: RAGRetrievalReleaseIncidentRecord['status'];\n\tseverity?: RAGRetrievalReleaseIncidentRecord['severity'];\n}) =>\n\tnormalizeRetrievalReleaseIncidentRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listIncidents({\n\t\t\t\tcorpusGroupKey,\n\t\t\t\tgroupKey,\n\t\t\t\tlimit,\n\t\t\t\tseverity,\n\t\t\t\tstatus,\n\t\t\t\ttargetRolloutLabel\n\t\t\t})\n\t\t)\n\t);\n\nexport const loadRAGRetrievalLaneHandoffIncidents = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\ttargetRolloutLabel,\n\tstatus,\n\tseverity\n}: {\n\tstore: RAGRetrievalLaneHandoffIncidentStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalLaneHandoffIncidentRecord['targetRolloutLabel'];\n\tstatus?: RAGRetrievalLaneHandoffIncidentRecord['status'];\n\tseverity?: RAGRetrievalLaneHandoffIncidentRecord['severity'];\n}) =>\n\tnormalizeRetrievalReleaseIncidentRecords(\n\t\t(await Promise.resolve(\n\t\t\tstore.listIncidents({\n\t\t\t\tcorpusGroupKey,\n\t\t\t\tgroupKey,\n\t\t\t\tlimit,\n\t\t\t\tseverity,\n\t\t\t\tstatus,\n\t\t\t\ttargetRolloutLabel\n\t\t\t})\n\t\t)) as RAGRetrievalReleaseIncidentRecord[]\n\t) as RAGRetrievalLaneHandoffIncidentRecord[];\n\nexport const loadRAGRetrievalLaneHandoffIncidentHistory = async ({\n\tstore,\n\tcorpusGroupKey,\n\taction,\n\tgroupKey,\n\tincidentId,\n\tlimit,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalLaneHandoffIncidentHistoryStore;\n\tcorpusGroupKey?: string;\n\taction?: RAGRetrievalLaneHandoffIncidentHistoryRecord['action'];\n\tgroupKey?: string;\n\tincidentId?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalLaneHandoffIncidentRecord['targetRolloutLabel'];\n}) =>\n\t(await Promise.resolve(\n\t\tstore.listRecords({\n\t\t\tcorpusGroupKey,\n\t\t\taction,\n\t\t\tgroupKey,\n\t\t\tincidentId,\n\t\t\tlimit,\n\t\t\ttargetRolloutLabel\n\t\t})\n\t)) as RAGRetrievalLaneHandoffIncidentHistoryRecord[];\n\nexport const loadRAGRetrievalIncidentRemediationDecisions = async ({\n\tstore,\n\tgroupKey,\n\tincidentId,\n\tlimit,\n\tremediationKind,\n\tstatus,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalIncidentRemediationDecisionStore;\n\tgroupKey?: string;\n\tincidentId?: string;\n\tlimit?: number;\n\tremediationKind?: RAGRetrievalIncidentRemediationDecisionRecord['remediationKind'];\n\tstatus?: RAGRetrievalIncidentRemediationDecisionRecord['status'];\n\ttargetRolloutLabel?: RAGRetrievalIncidentRemediationDecisionRecord['targetRolloutLabel'];\n}) =>\n\tnormalizeRetrievalIncidentRemediationDecisionRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listRecords({\n\t\t\t\tgroupKey,\n\t\t\t\tincidentId,\n\t\t\t\tlimit,\n\t\t\t\tremediationKind,\n\t\t\t\tstatus,\n\t\t\t\ttargetRolloutLabel\n\t\t\t})\n\t\t)\n\t);\n\nexport const loadRAGRetrievalIncidentRemediationExecutionHistory = async ({\n\tstore,\n\tactionKind,\n\tblockedByGuardrail,\n\tcode,\n\tgroupKey,\n\tidempotentReplay,\n\tincidentId,\n\tlimit,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalIncidentRemediationExecutionHistoryStore;\n\tactionKind?: RAGRemediationAction['kind'];\n\tblockedByGuardrail?: boolean;\n\tcode?: RAGRetrievalIncidentRemediationExecutionHistoryRecord['code'];\n\tgroupKey?: string;\n\tidempotentReplay?: boolean;\n\tincidentId?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalIncidentRemediationExecutionHistoryRecord['targetRolloutLabel'];\n}) =>\n\tnormalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n\t\tawait Promise.resolve(\n\t\t\tstore.listRecords({\n\t\t\t\tactionKind,\n\t\t\t\tblockedByGuardrail,\n\t\t\t\tcode,\n\t\t\t\tgroupKey,\n\t\t\t\tidempotentReplay,\n\t\t\t\tincidentId,\n\t\t\t\tlimit,\n\t\t\t\ttargetRolloutLabel\n\t\t\t})\n\t\t)\n\t);\n\nexport const loadRAGRetrievalLaneHandoffAutoCompletePolicyHistory = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord['targetRolloutLabel'];\n}) =>\n\t(await Promise.resolve(\n\t\tstore.listRecords({\n\t\t\tcorpusGroupKey,\n\t\t\tgroupKey,\n\t\t\tlimit,\n\t\t\ttargetRolloutLabel\n\t\t})\n\t)) as RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalReleaseLanePolicyHistory = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\trolloutLabel,\n\tscope\n}: {\n\tstore: RAGRetrievalReleaseLanePolicyHistoryStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\trolloutLabel?: RAGRetrievalReleaseLanePolicyHistoryRecord['rolloutLabel'];\n\tscope?: RAGRetrievalReleaseLanePolicyHistoryRecord['scope'];\n}) =>\n\t(await Promise.resolve(\n\t\tstore.listRecords({\n\t\t\tcorpusGroupKey,\n\t\t\tgroupKey,\n\t\t\tlimit,\n\t\t\trolloutLabel,\n\t\t\tscope\n\t\t})\n\t)) as RAGRetrievalReleaseLanePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalBaselineGatePolicyHistory = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\trolloutLabel,\n\tscope\n}: {\n\tstore: RAGRetrievalBaselineGatePolicyHistoryStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\trolloutLabel?: RAGRetrievalBaselineGatePolicyHistoryRecord['rolloutLabel'];\n\tscope?: RAGRetrievalBaselineGatePolicyHistoryRecord['scope'];\n}) =>\n\t(await Promise.resolve(\n\t\tstore.listRecords({\n\t\t\tcorpusGroupKey,\n\t\t\tgroupKey,\n\t\t\tlimit,\n\t\t\trolloutLabel,\n\t\t\tscope\n\t\t})\n\t)) as RAGRetrievalBaselineGatePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalReleaseLaneEscalationPolicyHistory = async ({\n\tstore,\n\tcorpusGroupKey,\n\tgroupKey,\n\tlimit,\n\ttargetRolloutLabel\n}: {\n\tstore: RAGRetrievalReleaseLaneEscalationPolicyHistoryStore;\n\tcorpusGroupKey?: string;\n\tgroupKey?: string;\n\tlimit?: number;\n\ttargetRolloutLabel?: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord['targetRolloutLabel'];\n}) =>\n\t(await Promise.resolve(\n\t\tstore.listRecords({\n\t\t\tgroupKey,\n\t\t\tlimit,\n\t\t\ttargetRolloutLabel\n\t\t})\n\t)) as RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[];\n\nexport const persistRAGRetrievalReleaseDecision = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalReleaseDecisionStore;\n\trecord: RAGRetrievalReleaseDecisionRecord;\n}) => {\n\tawait Promise.resolve(store.saveDecision(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalLaneHandoffDecision = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalLaneHandoffDecisionStore;\n\trecord: RAGRetrievalLaneHandoffDecisionRecord;\n}) => {\n\tawait Promise.resolve(store.saveDecision(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalReleaseIncident = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalReleaseIncidentStore;\n\trecord: RAGRetrievalReleaseIncidentRecord;\n}) => {\n\tawait Promise.resolve(store.saveIncident(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalLaneHandoffIncident = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalLaneHandoffIncidentStore;\n\trecord: RAGRetrievalLaneHandoffIncidentRecord;\n}) => {\n\tawait Promise.resolve(store.saveIncident(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalIncidentRemediationDecision = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalIncidentRemediationDecisionStore;\n\trecord: RAGRetrievalIncidentRemediationDecisionRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalIncidentRemediationExecutionHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalIncidentRemediationExecutionHistoryStore;\n\trecord: RAGRetrievalIncidentRemediationExecutionHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalLaneHandoffIncidentHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalLaneHandoffIncidentHistoryStore;\n\trecord: RAGRetrievalLaneHandoffIncidentHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalLaneHandoffAutoCompletePolicyHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore;\n\trecord: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalReleaseLanePolicyHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalReleaseLanePolicyHistoryStore;\n\trecord: RAGRetrievalReleaseLanePolicyHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalBaselineGatePolicyHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalBaselineGatePolicyHistoryStore;\n\trecord: RAGRetrievalBaselineGatePolicyHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const persistRAGRetrievalReleaseLaneEscalationPolicyHistory = async ({\n\tstore,\n\trecord\n}: {\n\tstore: RAGRetrievalReleaseLaneEscalationPolicyHistoryStore;\n\trecord: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord;\n}) => {\n\tawait Promise.resolve(store.saveRecord(record));\n\treturn record;\n};\n\nexport const createRAGSQLiteGovernanceStores = (\n\toptions: SQLiteRAGGovernanceStoreBundleOptions = {}\n): Pick<\n\tRAGChatPluginConfig,\n\t| 'searchTraceStore'\n\t| 'searchTracePruneHistoryStore'\n\t| 'retrievalComparisonHistoryStore'\n\t| 'retrievalBaselineStore'\n\t| 'retrievalReleaseDecisionStore'\n\t| 'retrievalLaneHandoffDecisionStore'\n\t| 'retrievalLaneHandoffIncidentStore'\n\t| 'retrievalLaneHandoffIncidentHistoryStore'\n\t| 'retrievalLaneHandoffAutoCompletePolicyHistoryStore'\n\t| 'retrievalReleaseLanePolicyHistoryStore'\n\t| 'retrievalBaselineGatePolicyHistoryStore'\n\t| 'retrievalReleaseLaneEscalationPolicyHistoryStore'\n\t| 'retrievalReleaseIncidentStore'\n\t| 'retrievalIncidentRemediationDecisionStore'\n\t| 'retrievalIncidentRemediationExecutionHistoryStore'\n> => {\n\tconst prefix = options.tablePrefix?.trim();\n\tconst table = (suffix: string) =>\n\t\tprefix && prefix.length > 0 ? `${prefix}_${suffix}` : suffix;\n\n\treturn {\n\t\tsearchTraceStore: createRAGSQLiteSearchTraceStore({\n\t\t\tdb: options.db,\n\t\t\tpath: options.path,\n\t\t\ttableName: table('rag_search_traces')\n\t\t}),\n\t\tsearchTracePruneHistoryStore:\n\t\t\tcreateRAGSQLiteSearchTracePruneHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_search_trace_prune_history')\n\t\t\t}),\n\t\tretrievalComparisonHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalComparisonHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_comparison_history')\n\t\t\t}),\n\t\tretrievalBaselineStore: createRAGSQLiteRetrievalBaselineStore({\n\t\t\tdb: options.db,\n\t\t\tpath: options.path,\n\t\t\ttableName: table('rag_retrieval_baselines')\n\t\t}),\n\t\tretrievalReleaseDecisionStore:\n\t\t\tcreateRAGSQLiteRetrievalReleaseDecisionStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_release_decisions')\n\t\t\t}),\n\t\tretrievalLaneHandoffDecisionStore:\n\t\t\tcreateRAGSQLiteRetrievalLaneHandoffDecisionStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_lane_handoff_decisions')\n\t\t\t}),\n\t\tretrievalLaneHandoffIncidentStore:\n\t\t\tcreateRAGSQLiteRetrievalLaneHandoffIncidentStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_lane_handoff_incidents')\n\t\t\t}),\n\t\tretrievalLaneHandoffIncidentHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalLaneHandoffIncidentHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_lane_handoff_incident_history')\n\t\t\t}),\n\t\tretrievalLaneHandoffAutoCompletePolicyHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalLaneHandoffAutoCompletePolicyHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table(\n\t\t\t\t\t'rag_retrieval_lane_handoff_auto_complete_policy_history'\n\t\t\t\t)\n\t\t\t}),\n\t\tretrievalReleaseLanePolicyHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalReleaseLanePolicyHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_release_lane_policy_history')\n\t\t\t}),\n\t\tretrievalBaselineGatePolicyHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalBaselineGatePolicyHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_baseline_gate_policy_history')\n\t\t\t}),\n\t\tretrievalReleaseLaneEscalationPolicyHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalReleaseLaneEscalationPolicyHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table(\n\t\t\t\t\t'rag_retrieval_release_lane_escalation_policy_history'\n\t\t\t\t)\n\t\t\t}),\n\t\tretrievalReleaseIncidentStore:\n\t\t\tcreateRAGSQLiteRetrievalReleaseIncidentStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_release_incidents')\n\t\t\t}),\n\t\tretrievalIncidentRemediationDecisionStore:\n\t\t\tcreateRAGSQLiteRetrievalIncidentRemediationDecisionStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table('rag_retrieval_incident_remediation_decisions')\n\t\t\t}),\n\t\tretrievalIncidentRemediationExecutionHistoryStore:\n\t\t\tcreateRAGSQLiteRetrievalIncidentRemediationExecutionHistoryStore({\n\t\t\t\tdb: options.db,\n\t\t\t\tpath: options.path,\n\t\t\t\ttableName: table(\n\t\t\t\t\t'rag_retrieval_incident_remediation_execution_history'\n\t\t\t\t)\n\t\t\t})\n\t};\n};\n\nexport const buildRAGEvaluationResponse = (\n\tcases: RAGEvaluationCaseResult[]\n): RAGEvaluationResponse => {\n\tconst totalCases = cases.length;\n\tconst corpusKeys = [\n\t\t...new Set(cases.flatMap((entry) => entry.corpusKey ?? []))\n\t];\n\tconst passedCases = cases.filter((entry) => entry.status === 'pass').length;\n\tconst partialCases = cases.filter(\n\t\t(entry) => entry.status === 'partial'\n\t).length;\n\tconst failedCases = cases.filter((entry) => entry.status === 'fail').length;\n\n\treturn {\n\t\tcases,\n\t\t...(corpusKeys.length > 0 ? { corpusKeys } : {}),\n\t\telapsedMs: cases.reduce((sum, result) => sum + result.elapsedMs, 0),\n\t\tok: true,\n\t\tpassingRate: totalCases > 0 ? (passedCases / totalCases) * 100 : 0,\n\t\tsummary: {\n\t\t\taverageF1:\n\t\t\t\tcases.reduce((sum, result) => sum + result.f1, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\taverageLatencyMs:\n\t\t\t\tcases.reduce((sum, result) => sum + result.elapsedMs, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\taveragePrecision:\n\t\t\t\tcases.reduce((sum, result) => sum + result.precision, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\taverageRecall:\n\t\t\t\tcases.reduce((sum, result) => sum + result.recall, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\tfailedCases,\n\t\t\tpartialCases,\n\t\t\tpassedCases,\n\t\t\ttotalCases\n\t\t},\n\t\ttotalCases\n\t};\n};\n\nconst incrementFailureCounts = (\n\ttarget: Record<string, number>,\n\tfailureClasses: string[] | undefined\n) => {\n\tfor (const failureClass of failureClasses ?? []) {\n\t\ttarget[failureClass] = (target[failureClass] ?? 0) + 1;\n\t}\n};\n\nconst sortEntityQualitySummaries = <\n\tT extends { passingRate: number; totalCases: number; label: string }\n>(\n\tentries: T[]\n) =>\n\tentries.sort((left, right) => {\n\t\tif (right.passingRate !== left.passingRate) {\n\t\t\treturn right.passingRate - left.passingRate;\n\t\t}\n\t\tif (right.totalCases !== left.totalCases) {\n\t\t\treturn right.totalCases - left.totalCases;\n\t\t}\n\n\t\treturn left.label.localeCompare(right.label);\n\t});\n\nexport const buildRAGEvaluationEntityQualityView = (\n\tresponse: RAGEvaluationResponse\n): RAGEvaluationEntityQualityView => {\n\tconst bySource = new Map<string, RAGEvaluationEntityQualitySummary>();\n\tconst byDocument = new Map<string, RAGEvaluationEntityQualitySummary>();\n\tfor (const entry of response.cases) {\n\t\tconst targets =\n\t\t\tentry.mode === 'source'\n\t\t\t\t? entry.expectedIds\n\t\t\t\t: entry.mode === 'documentId'\n\t\t\t\t\t? entry.expectedIds\n\t\t\t\t\t: [];\n\t\tconst targetMap =\n\t\t\tentry.mode === 'source'\n\t\t\t\t? bySource\n\t\t\t\t: entry.mode === 'documentId'\n\t\t\t\t\t? byDocument\n\t\t\t\t\t: undefined;\n\t\tif (!targetMap) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const target of targets) {\n\t\t\tconst current =\n\t\t\t\ttargetMap.get(target) ??\n\t\t\t\t({\n\t\t\t\t\taverageF1: 0,\n\t\t\t\t\tcaseIds: [],\n\t\t\t\t\tentityType: entry.mode === 'source' ? 'source' : 'document',\n\t\t\t\t\tfailedCases: 0,\n\t\t\t\t\tfailureCounts: {},\n\t\t\t\t\tkey: target,\n\t\t\t\t\tlabel: target,\n\t\t\t\t\tpassedCases: 0,\n\t\t\t\t\tpassingRate: 0,\n\t\t\t\t\tpartialCases: 0,\n\t\t\t\t\ttotalCases: 0\n\t\t\t\t} satisfies RAGEvaluationEntityQualitySummary);\n\t\t\tcurrent.totalCases += 1;\n\t\t\tcurrent.averageF1 += entry.f1;\n\t\t\tcurrent.caseIds.push(entry.caseId);\n\t\t\tif (entry.status === 'pass') {\n\t\t\t\tcurrent.passedCases += 1;\n\t\t\t} else if (entry.status === 'partial') {\n\t\t\t\tcurrent.partialCases += 1;\n\t\t\t} else {\n\t\t\t\tcurrent.failedCases += 1;\n\t\t\t}\n\t\t\tincrementFailureCounts(current.failureCounts, entry.failureClasses);\n\t\t\ttargetMap.set(target, current);\n\t\t}\n\t}\n\n\tfor (const map of [bySource, byDocument]) {\n\t\tfor (const entry of map.values()) {\n\t\t\tentry.averageF1 =\n\t\t\t\tentry.totalCases > 0 ? entry.averageF1 / entry.totalCases : 0;\n\t\t\tentry.passingRate =\n\t\t\t\tentry.totalCases > 0\n\t\t\t\t\t? (entry.passedCases / entry.totalCases) * 100\n\t\t\t\t\t: 0;\n\t\t}\n\t}\n\n\treturn {\n\t\tbyDocument: sortEntityQualitySummaries([...byDocument.values()]),\n\t\tbySource: sortEntityQualitySummaries([...bySource.values()])\n\t};\n};\n\nexport const buildRAGAnswerGroundingEntityQualityView = (\n\tresponse: RAGAnswerGroundingEvaluationResponse\n): RAGAnswerGroundingEntityQualityView => {\n\tconst bySource = new Map<string, RAGAnswerGroundingEntityQualitySummary>();\n\tconst byDocument = new Map<\n\t\tstring,\n\t\tRAGAnswerGroundingEntityQualitySummary\n\t>();\n\tfor (const entry of response.cases) {\n\t\tconst targetMap =\n\t\t\tentry.mode === 'source'\n\t\t\t\t? bySource\n\t\t\t\t: entry.mode === 'documentId'\n\t\t\t\t\t? byDocument\n\t\t\t\t\t: undefined;\n\t\tif (!targetMap) {\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const target of entry.expectedIds) {\n\t\t\tconst current =\n\t\t\t\ttargetMap.get(target) ??\n\t\t\t\t({\n\t\t\t\t\taverageCitationF1: 0,\n\t\t\t\t\taverageResolvedCitationRate: 0,\n\t\t\t\t\tcaseIds: [],\n\t\t\t\t\tentityType: entry.mode === 'source' ? 'source' : 'document',\n\t\t\t\t\tfailedCases: 0,\n\t\t\t\t\tfailureCounts: {},\n\t\t\t\t\tkey: target,\n\t\t\t\t\tlabel: target,\n\t\t\t\t\tpassedCases: 0,\n\t\t\t\t\tpassingRate: 0,\n\t\t\t\t\tpartialCases: 0,\n\t\t\t\t\ttotalCases: 0\n\t\t\t\t} satisfies RAGAnswerGroundingEntityQualitySummary);\n\t\t\tcurrent.totalCases += 1;\n\t\t\tcurrent.averageCitationF1 += entry.citationF1;\n\t\t\tcurrent.averageResolvedCitationRate += entry.resolvedCitationRate;\n\t\t\tcurrent.caseIds.push(entry.caseId);\n\t\t\tif (entry.status === 'pass') {\n\t\t\t\tcurrent.passedCases += 1;\n\t\t\t} else if (entry.status === 'partial') {\n\t\t\t\tcurrent.partialCases += 1;\n\t\t\t} else {\n\t\t\t\tcurrent.failedCases += 1;\n\t\t\t}\n\t\t\tincrementFailureCounts(current.failureCounts, entry.failureClasses);\n\t\t\ttargetMap.set(target, current);\n\t\t}\n\t}\n\n\tfor (const map of [bySource, byDocument]) {\n\t\tfor (const entry of map.values()) {\n\t\t\tentry.averageCitationF1 =\n\t\t\t\tentry.totalCases > 0\n\t\t\t\t\t? entry.averageCitationF1 / entry.totalCases\n\t\t\t\t\t: 0;\n\t\t\tentry.averageResolvedCitationRate =\n\t\t\t\tentry.totalCases > 0\n\t\t\t\t\t? entry.averageResolvedCitationRate / entry.totalCases\n\t\t\t\t\t: 0;\n\t\t\tentry.passingRate =\n\t\t\t\tentry.totalCases > 0\n\t\t\t\t\t? (entry.passedCases / entry.totalCases) * 100\n\t\t\t\t\t: 0;\n\t\t}\n\t}\n\n\treturn {\n\t\tbyDocument: sortEntityQualitySummaries([...byDocument.values()]),\n\t\tbySource: sortEntityQualitySummaries([...bySource.values()])\n\t};\n};\n\nexport const evaluateRAGAnswerGroundingCase = ({\n\tcaseIndex,\n\tcaseInput\n}: {\n\tcaseIndex: number;\n\tcaseInput: RAGAnswerGroundingEvaluationCase;\n}): RAGAnswerGroundingEvaluationCaseResult => {\n\tconst mode = resolveEvaluationMode(caseInput);\n\tconst expectedIds = normalizeExpectedIds(\n\t\tmode === 'chunkId'\n\t\t\t? (caseInput.expectedChunkIds ?? [])\n\t\t\t: mode === 'source'\n\t\t\t\t? (caseInput.expectedSources ?? [])\n\t\t\t\t: (caseInput.expectedDocumentIds ?? [])\n\t);\n\tconst groundedAnswer = buildRAGGroundedAnswer(\n\t\tcaseInput.answer,\n\t\tcaseInput.sources\n\t);\n\tconst citedReferences = groundedAnswer.parts.flatMap((part) =>\n\t\tpart.type === 'citation' ? part.references : []\n\t);\n\tconst citedIds = normalizeExpectedIds(\n\t\tcitedReferences.map((reference) => extractExpectedId(reference, mode))\n\t);\n\tconst expectedSet = new Set(expectedIds);\n\tconst citedSet = new Set(citedIds);\n\tconst matchedIds = normalizeExpectedIds(\n\t\t[...expectedSet].filter((id) => citedSet.has(id))\n\t);\n\tconst missingIds = normalizeExpectedIds(\n\t\t[...expectedSet].filter((id) => !citedSet.has(id))\n\t);\n\tconst extraIds = normalizeExpectedIds(\n\t\t[...citedSet].filter((id) => !expectedSet.has(id))\n\t);\n\tconst matchedCount = matchedIds.length;\n\tconst expectedCount = expectedIds.length;\n\tconst citedCount = citedIds.length;\n\tconst precision = citedCount > 0 ? matchedCount / citedCount : 0;\n\tconst recall = expectedCount > 0 ? matchedCount / expectedCount : 0;\n\tconst citationF1 =\n\t\tprecision + recall > 0\n\t\t\t? (2 * precision * recall) / (precision + recall)\n\t\t\t: 0;\n\tconst citationCount = groundedAnswer.parts.filter(\n\t\t(part) => part.type === 'citation'\n\t).length;\n\tconst unresolvedCitationCount = new Set(\n\t\tgroundedAnswer.ungroundedReferenceNumbers\n\t).size;\n\tconst resolvedCitationCount = citedReferences.length;\n\tconst resolvedCitationRate =\n\t\tcitationCount > 0\n\t\t\t? Math.min(1, resolvedCitationCount / citationCount)\n\t\t\t: 0;\n\n\treturn {\n\t\tanswer: caseInput.answer,\n\t\tcaseId: caseInput.id ?? `case-${caseIndex + 1}`,\n\t\tcitationCount,\n\t\tcitationF1,\n\t\tcitationPrecision: precision,\n\t\tcitationRecall: recall,\n\t\tcitedIds,\n\t\tcoverage: groundedAnswer.coverage,\n\t\texpectedCount,\n\t\texpectedIds,\n\t\textraIds,\n\t\tgroundedAnswer,\n\t\thasCitations: groundedAnswer.hasCitations,\n\t\tlabel: caseInput.label,\n\t\tmatchedCount,\n\t\tmatchedIds,\n\t\tfailureClasses: classifyRAGGroundingFailure({\n\t\t\tavailableSources: caseInput.sources,\n\t\t\tcitationCount,\n\t\t\texpectedCount,\n\t\t\textraIds,\n\t\t\tmatchedCount,\n\t\t\tmissingIds,\n\t\t\tunresolvedCitationCount\n\t\t}),\n\t\tmetadata: caseInput.metadata,\n\t\tmissingIds,\n\t\tmode,\n\t\tquery: caseInput.query,\n\t\treferenceCount: groundedAnswer.references.length,\n\t\tresolvedCitationCount,\n\t\tresolvedCitationRate,\n\t\tstatus: buildAnswerGroundingStatus({\n\t\t\tcoverage: groundedAnswer.coverage,\n\t\t\texpectedCount,\n\t\t\tmatchedCount,\n\t\t\tresolvedCitationCount,\n\t\t\tunresolvedCitationCount\n\t\t}),\n\t\tunresolvedCitationCount\n\t};\n};\n\nexport const buildRAGAnswerGroundingEvaluationResponse = (\n\tcases: RAGAnswerGroundingEvaluationCaseResult[]\n): RAGAnswerGroundingEvaluationResponse => {\n\tconst totalCases = cases.length;\n\tconst passedCases = cases.filter((entry) => entry.status === 'pass').length;\n\tconst partialCases = cases.filter(\n\t\t(entry) => entry.status === 'partial'\n\t).length;\n\tconst failedCases = cases.filter((entry) => entry.status === 'fail').length;\n\tconst groundedCases = cases.filter(\n\t\t(entry) => entry.coverage === 'grounded'\n\t).length;\n\tconst partiallyGroundedCases = cases.filter(\n\t\t(entry) => entry.coverage === 'partial'\n\t).length;\n\tconst ungroundedCases = cases.filter(\n\t\t(entry) => entry.coverage === 'ungrounded'\n\t).length;\n\n\treturn {\n\t\tcases,\n\t\tok: true,\n\t\tpassingRate: totalCases > 0 ? (passedCases / totalCases) * 100 : 0,\n\t\tsummary: {\n\t\t\taverageCitationF1:\n\t\t\t\tcases.reduce((sum, result) => sum + result.citationF1, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\taverageCitationPrecision:\n\t\t\t\tcases.reduce(\n\t\t\t\t\t(sum, result) => sum + result.citationPrecision,\n\t\t\t\t\t0\n\t\t\t\t) / (totalCases || 1),\n\t\t\taverageCitationRecall:\n\t\t\t\tcases.reduce((sum, result) => sum + result.citationRecall, 0) /\n\t\t\t\t(totalCases || 1),\n\t\t\taverageResolvedCitationRate:\n\t\t\t\tcases.reduce(\n\t\t\t\t\t(sum, result) => sum + result.resolvedCitationRate,\n\t\t\t\t\t0\n\t\t\t\t) / (totalCases || 1),\n\t\t\tfailedCases,\n\t\t\tgroundedCases,\n\t\t\tpartiallyGroundedCases,\n\t\t\tpassedCases,\n\t\t\tpartialCases,\n\t\t\ttotalCases,\n\t\t\tungroundedCases\n\t\t},\n\t\ttotalCases\n\t};\n};\n\nexport const evaluateRAGAnswerGrounding = (\n\tinput: RAGAnswerGroundingEvaluationInput\n): RAGAnswerGroundingEvaluationResponse =>\n\tbuildRAGAnswerGroundingEvaluationResponse(\n\t\tinput.cases.map((caseInput, caseIndex) =>\n\t\t\tevaluateRAGAnswerGroundingCase({ caseIndex, caseInput })\n\t\t)\n\t);\nexport const compareRAGRerankers = async ({\n\tcollection,\n\tsuite,\n\trerankers,\n\tdefaultTopK = DEFAULT_TOP_K\n}: {\n\tcollection: RAGCollection;\n\tsuite: RAGEvaluationSuite;\n\trerankers: RAGRerankerCandidate[];\n\tdefaultTopK?: number;\n}): Promise<RAGRerankerComparison> => {\n\tconst entries = await Promise.all(\n\t\trerankers.map(async (candidate) => {\n\t\t\tconst evaluated = await evaluateRAGCollectionCases({\n\t\t\t\tcollection,\n\t\t\t\tdefaultTopK,\n\t\t\t\tinput: suite.input,\n\t\t\t\tincludeTrace: true,\n\t\t\t\trerank: candidate.rerank\n\t\t\t});\n\t\t\tconst response = buildRAGEvaluationResponse(\n\t\t\t\tevaluated.map((entry) => entry.caseResult)\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcaseTraceSnapshots:\n\t\t\t\t\tbuildEvaluationCaseTraceSnapshotsFromEvaluated(evaluated),\n\t\t\t\tlabel: candidate.label ?? candidate.id,\n\t\t\t\tproviderName:\n\t\t\t\t\ttypeof candidate.rerank === 'function'\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: candidate.rerank?.providerName,\n\t\t\t\tresponse,\n\t\t\t\trerankerId: candidate.id,\n\t\t\t\ttraceSummary: summarizeRetrievalTraces(\n\t\t\t\t\tevaluated\n\t\t\t\t\t\t.map((entry) => entry.trace)\n\t\t\t\t\t\t.filter((trace): trace is RAGRetrievalTrace =>\n\t\t\t\t\t\t\tBoolean(trace)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t} satisfies RAGRerankerComparisonEntry;\n\t\t})\n\t);\n\n\tconst leaderboard = buildRAGEvaluationLeaderboard(\n\t\tentries.map((entry) => ({\n\t\t\telapsedMs: entry.response.elapsedMs,\n\t\t\tfinishedAt: 0,\n\t\t\tid: entry.rerankerId,\n\t\t\tlabel: entry.label,\n\t\t\tresponse: entry.response,\n\t\t\tstartedAt: 0,\n\t\t\tsuiteId: suite.id,\n\t\t\ttraceSummary: entry.traceSummary\n\t\t}))\n\t);\n\n\treturn {\n\t\tentries,\n\t\tleaderboard,\n\t\tsummary: summarizeRAGRerankerComparison(entries),\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id\n\t};\n};\nconst summarizeEvaluationResponseComparison = <\n\tTEntry extends {\n\t\tresponse: RAGEvaluationResponse;\n\t\t[key: string]: unknown;\n\t}\n>(\n\tentries: TEntry[],\n\tidKey: keyof TEntry\n) => {\n\tif (entries.length === 0) {\n\t\treturn {};\n\t}\n\n\tconst byPassingRate = [...entries].sort((left, right) => {\n\t\tif (right.response.passingRate !== left.response.passingRate) {\n\t\t\treturn right.response.passingRate - left.response.passingRate;\n\t\t}\n\t\tif (\n\t\t\tright.response.summary.averageF1 !== left.response.summary.averageF1\n\t\t) {\n\t\t\treturn (\n\t\t\t\tright.response.summary.averageF1 -\n\t\t\t\tleft.response.summary.averageF1\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\tleft.response.summary.averageLatencyMs -\n\t\t\tright.response.summary.averageLatencyMs\n\t\t);\n\t});\n\tconst byAverageF1 = [...entries].sort(\n\t\t(left, right) =>\n\t\t\tright.response.summary.averageF1 - left.response.summary.averageF1\n\t);\n\tconst byLatency = [...entries].sort(\n\t\t(left, right) =>\n\t\t\tleft.response.summary.averageLatencyMs -\n\t\t\tright.response.summary.averageLatencyMs\n\t);\n\tconst getId = (entry: TEntry) =>\n\t\ttypeof entry[idKey] === 'string' ? (entry[idKey] as string) : undefined;\n\n\treturn {\n\t\tbestByAverageF1: getId(byAverageF1[0] as TEntry),\n\t\tbestByPassingRate: getId(byPassingRate[0] as TEntry),\n\t\tfastest: getId(byLatency[0] as TEntry)\n\t};\n};\nconst resolveRetrievalMode = (\n\tcandidate: RAGRetrievalCandidate\n): RAGHybridRetrievalMode => {\n\tif (!candidate.retrieval) {\n\t\treturn 'vector';\n\t}\n\n\treturn typeof candidate.retrieval === 'string'\n\t\t? candidate.retrieval\n\t\t: (candidate.retrieval.mode ?? 'vector');\n};\nexport const compareRAGRetrievalStrategies = async ({\n\tcollection,\n\tsuite,\n\tretrievals,\n\tdefaultTopK = DEFAULT_TOP_K\n}: {\n\tcollection: RAGCollection;\n\tsuite: RAGEvaluationSuite;\n\tretrievals: RAGRetrievalCandidate[];\n\tdefaultTopK?: number;\n}): Promise<RAGRetrievalComparison> => {\n\tconst entries = await Promise.all(\n\t\tretrievals.map(async (candidate) => {\n\t\t\tconst tracedCollection = {\n\t\t\t\t...collection,\n\t\t\t\tsearch: (input) =>\n\t\t\t\t\tcollection.search({\n\t\t\t\t\t\t...input,\n\t\t\t\t\t\tqueryTransform:\n\t\t\t\t\t\t\tcandidate.queryTransform ?? input.queryTransform,\n\t\t\t\t\t\trerank: candidate.rerank ?? input.rerank,\n\t\t\t\t\t\tretrieval: candidate.retrieval ?? input.retrieval\n\t\t\t\t\t}),\n\t\t\t\tsearchWithTrace: (input) =>\n\t\t\t\t\tcollection.searchWithTrace({\n\t\t\t\t\t\t...input,\n\t\t\t\t\t\tqueryTransform:\n\t\t\t\t\t\t\tcandidate.queryTransform ?? input.queryTransform,\n\t\t\t\t\t\trerank: candidate.rerank ?? input.rerank,\n\t\t\t\t\t\tretrieval: candidate.retrieval ?? input.retrieval\n\t\t\t\t\t})\n\t\t\t} satisfies RAGCollection;\n\t\t\tconst evaluated = await evaluateRAGCollectionCases({\n\t\t\t\tcollection: {\n\t\t\t\t\t...tracedCollection\n\t\t\t\t},\n\t\t\t\tdefaultTopK,\n\t\t\t\tinput: suite.input,\n\t\t\t\tincludeTrace: true,\n\t\t\t\trerank: candidate.rerank\n\t\t\t});\n\t\t\tconst response = buildRAGEvaluationResponse(\n\t\t\t\tevaluated.map((entry) => entry.caseResult)\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tcaseTraceSnapshots:\n\t\t\t\t\tbuildEvaluationCaseTraceSnapshotsFromEvaluated(evaluated),\n\t\t\t\tlabel: candidate.label ?? candidate.id,\n\t\t\t\tresponse,\n\t\t\t\tretrievalId: candidate.id,\n\t\t\t\tretrievalMode: resolveRetrievalMode(candidate),\n\t\t\t\ttraceSummary: summarizeRetrievalTraces(\n\t\t\t\t\tevaluated\n\t\t\t\t\t\t.map((entry) => entry.trace)\n\t\t\t\t\t\t.filter((trace): trace is RAGRetrievalTrace =>\n\t\t\t\t\t\t\tBoolean(trace)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t} satisfies RAGRetrievalComparisonEntry;\n\t\t})\n\t);\n\n\tconst leaderboard = buildRAGEvaluationLeaderboard(\n\t\tentries.map((entry) => ({\n\t\t\telapsedMs: entry.response.elapsedMs,\n\t\t\tfinishedAt: 0,\n\t\t\tid: entry.retrievalId,\n\t\t\tlabel: entry.label,\n\t\t\tresponse: entry.response,\n\t\t\tstartedAt: 0,\n\t\t\tsuiteId: suite.id,\n\t\t\ttraceSummary: entry.traceSummary\n\t\t}))\n\t);\n\n\treturn {\n\t\tcorpusKeys: [\n\t\t\t...new Set(\n\t\t\t\tentries.flatMap((entry) => entry.response.corpusKeys ?? [])\n\t\t\t)\n\t\t],\n\t\tentries,\n\t\tleaderboard,\n\t\tsummary: summarizeRAGRetrievalComparison(entries),\n\t\tsuiteId: suite.id,\n\t\tsuiteLabel: suite.label ?? suite.id\n\t};\n};\n\nexport const summarizeRAGRetrievalTraces = (\n\ttraces: RAGRetrievalTrace[]\n): RAGRetrievalTraceComparisonSummary | undefined =>\n\tsummarizeRetrievalTraces(traces);\n\nexport const compareRAGRetrievalTraceSummaries = (\n\tcurrent: RAGRetrievalTraceComparisonSummary,\n\tprevious: RAGRetrievalTraceComparisonSummary\n): RAGRetrievalTraceComparisonSummaryDiff => ({\n\taverageCandidateTopKDelta:\n\t\tcurrent.averageCandidateTopK - previous.averageCandidateTopK,\n\taverageFinalCountDelta:\n\t\tcurrent.averageFinalCount - previous.averageFinalCount,\n\taverageLexicalCountDelta:\n\t\tcurrent.averageLexicalCount - previous.averageLexicalCount,\n\taverageLexicalTopKDelta:\n\t\tcurrent.averageLexicalTopK - previous.averageLexicalTopK,\n\taverageVectorCountDelta:\n\t\tcurrent.averageVectorCount - previous.averageVectorCount,\n\tbalancedCasesDelta: current.balancedCases - previous.balancedCases,\n\tcurrent,\n\tlexicalCasesDelta: current.lexicalCases - previous.lexicalCases,\n\tmodeDelta: buildSummaryListDelta(current.modes, previous.modes),\n\tprevious,\n\troundRobinCasesDelta: current.roundRobinCases - previous.roundRobinCases,\n\tsourceBalanceStrategyDelta: buildSummaryListDelta(\n\t\tcurrent.sourceBalanceStrategies,\n\t\tprevious.sourceBalanceStrategies\n\t),\n\tstageCountsDelta: diffTraceSummaryStageCounts({\n\t\tcurrent: current.stageCounts,\n\t\tprevious: previous.stageCounts\n\t}),\n\ttotalCasesDelta: current.totalCases - previous.totalCases,\n\ttransformedCasesDelta: current.transformedCases - previous.transformedCases,\n\tvectorCasesDelta: current.vectorCases - previous.vectorCases,\n\tvariantCasesDelta: current.variantCases - previous.variantCases\n});\n\nconst buildSearchTraceResultSnapshots = (\n\tresults: Array<{\n\t\tchunkId: string;\n\t\tcorpusKey?: string;\n\t\tscore: number;\n\t\tsource?: string;\n\t\ttitle?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t}>\n): RAGSearchTraceResultSnapshot[] =>\n\tresults.map((result) => ({\n\t\tchunkId: result.chunkId,\n\t\tcorpusKey:\n\t\t\tresult.corpusKey ??\n\t\t\t(typeof result.metadata?.corpusKey === 'string'\n\t\t\t\t? result.metadata.corpusKey\n\t\t\t\t: undefined),\n\t\tdocumentId:\n\t\t\ttypeof result.metadata?.documentId === 'string'\n\t\t\t\t? result.metadata.documentId\n\t\t\t\t: undefined,\n\t\tscore: result.score,\n\t\tsource: result.source,\n\t\ttitle: result.title\n\t}));\n\nexport const buildRAGSearchTraceRecord = (input: {\n\ttrace: RAGRetrievalTrace;\n\tresults?: Array<{\n\t\tchunkId: string;\n\t\tscore: number;\n\t\tsource?: string;\n\t\ttitle?: string;\n\t\tmetadata?: Record<string, unknown>;\n\t}>;\n\tid?: string;\n\tlabel?: string;\n\tgroupKey?: string;\n\ttags?: string[];\n\tstartedAt?: number;\n\tfinishedAt?: number;\n\telapsedMs?: number;\n\tmetadata?: Record<string, unknown>;\n}): RAGSearchTraceRecord => {\n\tconst startedAt = input.startedAt ?? Date.now();\n\tconst finishedAt = input.finishedAt ?? startedAt;\n\tconst elapsedMs = input.elapsedMs ?? Math.max(0, finishedAt - startedAt);\n\tconst summary =\n\t\tsummarizeRetrievalTraces([input.trace]) ??\n\t\tsummarizeRetrievalTraces([\n\t\t\t{\n\t\t\t\t...input.trace,\n\t\t\t\tsteps: [...input.trace.steps]\n\t\t\t}\n\t\t]);\n\n\tif (!summary) {\n\t\tthrow new Error('Failed to summarize retrieval trace');\n\t}\n\n\treturn {\n\t\telapsedMs,\n\t\tfinishedAt,\n\t\tgroupKey: input.groupKey,\n\t\tid: input.id ?? generateId(),\n\t\tlabel: input.label ?? input.trace.query,\n\t\tmetadata: input.metadata,\n\t\tquery: input.trace.query,\n\t\tresults: buildSearchTraceResultSnapshots(input.results ?? []),\n\t\tstartedAt,\n\t\tsummary,\n\t\ttags: normalizeTraceTags(input.tags),\n\t\ttrace: input.trace\n\t};\n};\n\nexport const buildRAGSearchTraceDiff = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGSearchTraceRecord;\n\tprevious?: RAGSearchTraceRecord;\n}): RAGSearchTraceDiff => {\n\tconst currentChunkIds = current.results.map((entry) => entry.chunkId);\n\tconst previousChunkIds =\n\t\tprevious?.results.map((entry) => entry.chunkId) ?? [];\n\tconst previousSet = new Set(previousChunkIds);\n\tconst currentSet = new Set(currentChunkIds);\n\n\treturn {\n\t\taddedChunkIds: currentChunkIds.filter(\n\t\t\t(chunkId) => !previousSet.has(chunkId)\n\t\t),\n\t\tcurrentTraceId: current.id,\n\t\tpreviousTraceId: previous?.id,\n\t\tremovedChunkIds: previousChunkIds.filter(\n\t\t\t(chunkId) => !currentSet.has(chunkId)\n\t\t),\n\t\tretainedChunkIds: currentChunkIds.filter((chunkId) =>\n\t\t\tpreviousSet.has(chunkId)\n\t\t),\n\t\tsummaryDelta: previous?.summary\n\t\t\t? compareRAGRetrievalTraceSummaries(\n\t\t\t\t\tcurrent.summary,\n\t\t\t\t\tprevious.summary\n\t\t\t\t)\n\t\t\t: undefined,\n\t\ttopResultChanged:\n\t\t\t(current.results[0]?.chunkId ?? undefined) !==\n\t\t\t(previous?.results[0]?.chunkId ?? undefined)\n\t};\n};\n\nexport const buildRAGRetrievalTraceHistoryTrend = ({\n\truns\n}: {\n\truns: RAGRetrievalTraceSummaryRun[];\n}): RAGRetrievalTraceTrend => {\n\tconst sortedRuns = normalizeTraceSummaryRuns(runs);\n\tconst runsWithSummary = sortedRuns.filter(\n\t\t(run) => run.traceSummary && run.label\n\t);\n\tconst traceSummaries = runsWithSummary\n\t\t.map((run) => run.traceSummary)\n\t\t.filter((summary): summary is RAGRetrievalTraceComparisonSummary =>\n\t\t\tBoolean(summary)\n\t\t);\n\tconst summaryTrendWindows: RAGRetrievalTraceHistoryWindow[] = [];\n\n\tfor (let index = 0; index < runsWithSummary.length - 1; index += 1) {\n\t\tconst currentRun = runsWithSummary[index]!;\n\t\tconst previousRun = runsWithSummary[index + 1]!;\n\t\tif (!currentRun.traceSummary || !previousRun.traceSummary) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst current = currentRun.traceSummary;\n\t\tconst previous = previousRun.traceSummary;\n\t\tconst delta = compareRAGRetrievalTraceSummaries(current, previous);\n\t\tsummaryTrendWindows.push({\n\t\t\tcurrent,\n\t\t\tcurrentRunId: currentRun.id,\n\t\t\tcurrentRunLabel: currentRun.label,\n\t\t\tdelta,\n\t\t\tprevious,\n\t\t\tpreviousRunId: previousRun.id,\n\t\t\tpreviousRunLabel: previousRun.label\n\t\t});\n\t}\n\n\tconst latest = runsWithSummary[0]?.traceSummary;\n\tconst previous = runsWithSummary[1]?.traceSummary;\n\tconst latestToPrevious =\n\t\tlatest && previous\n\t\t\t? compareRAGRetrievalTraceSummaries(latest, previous)\n\t\t\t: undefined;\n\tconst listHistoryModes = traceSummaries.map((summary) => summary.modes);\n\tconst listHistorySourceStrategies = traceSummaries.map(\n\t\t(summary) => summary.sourceBalanceStrategies\n\t);\n\tconst modes = summarizeListTurnover<RAGHybridRetrievalMode>({\n\t\tcurrent: normalizeSummaryList(latest?.modes ?? []),\n\t\thistory: listHistoryModes,\n\t\tprevious: normalizeSummaryList(previous?.modes ?? [])\n\t});\n\tconst sourceBalanceStrategies =\n\t\tsummarizeListTurnover<RAGSourceBalanceStrategy>({\n\t\t\tcurrent: normalizeSummaryList(\n\t\t\t\tlatest?.sourceBalanceStrategies ?? []\n\t\t\t),\n\t\t\thistory: listHistorySourceStrategies,\n\t\t\tprevious: normalizeSummaryList(\n\t\t\t\tprevious?.sourceBalanceStrategies ?? []\n\t\t\t)\n\t\t});\n\tconst { aggregate, bestMetric, worstMetric } = buildTraceSummaryAggregate({\n\t\tsummaries: traceSummaries\n\t});\n\tconst stageChurn = buildRAGRetrievalTraceStageChurn({\n\t\twindows: summaryTrendWindows\n\t});\n\n\treturn {\n\t\taggregate,\n\t\tbestMetric,\n\t\tmodeTurnover: modes,\n\t\trunsWithTraceSummary: traceSummaries.length,\n\t\tsourceBalanceStrategyTurnover: sourceBalanceStrategies,\n\t\tstageChurn,\n\t\tsummaryTrendWindows,\n\t\tworstMetric,\n\t\tworstVolatileStage: stageChurn.find((entry) => entry.totalChanges > 0),\n\t\tlatestToPrevious\n\t};\n};\nexport const createRAGEvaluationSuite = (\n\tsuite: RAGEvaluationSuite\n): RAGEvaluationSuite => {\n\tconst cases = suite.input.cases.map((entry) => ({\n\t\t...entry,\n\t\t...(entry.goldenSet === true ? { goldenSet: true } : {}),\n\t\t...(entry.expectedChunkIds\n\t\t\t? { expectedChunkIds: [...entry.expectedChunkIds] }\n\t\t\t: {}),\n\t\t...(entry.expectedSources\n\t\t\t? { expectedSources: [...entry.expectedSources] }\n\t\t\t: {}),\n\t\t...(entry.expectedDocumentIds\n\t\t\t? { expectedDocumentIds: [...entry.expectedDocumentIds] }\n\t\t\t: {}),\n\t\t...(entry.hardNegativeChunkIds\n\t\t\t? {\n\t\t\t\t\thardNegativeChunkIds: normalizeExpectedIds(\n\t\t\t\t\t\tentry.hardNegativeChunkIds\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(entry.hardNegativeSources\n\t\t\t? {\n\t\t\t\t\thardNegativeSources: normalizeExpectedIds(\n\t\t\t\t\t\tentry.hardNegativeSources\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(entry.hardNegativeDocumentIds\n\t\t\t? {\n\t\t\t\t\thardNegativeDocumentIds: normalizeExpectedIds(\n\t\t\t\t\t\tentry.hardNegativeDocumentIds\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(entry.filter ? { filter: { ...entry.filter } } : {}),\n\t\t...(entry.metadata ? { metadata: { ...entry.metadata } } : {}),\n\t\t...(entry.retrieval ? { retrieval: entry.retrieval } : {})\n\t}));\n\tconst duplicateCaseIds = Array.from(\n\t\tnew Set(\n\t\t\tcases\n\t\t\t\t.map((entry) => entry.id)\n\t\t\t\t.filter(\n\t\t\t\t\t(id, index, ids) =>\n\t\t\t\t\t\ttypeof id === 'string' && ids.indexOf(id) !== index\n\t\t\t\t)\n\t\t)\n\t);\n\tif (duplicateCaseIds.length > 0) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite contains duplicate case ids: ${duplicateCaseIds.join(', ')}`\n\t\t);\n\t}\n\n\treturn {\n\t\t...suite,\n\t\tinput: {\n\t\t\t...suite.input,\n\t\t\tcases,\n\t\t\t...(suite.input.filter\n\t\t\t\t? { filter: { ...suite.input.filter } }\n\t\t\t\t: {}),\n\t\t\t...(suite.input.retrieval\n\t\t\t\t? { retrieval: suite.input.retrieval }\n\t\t\t\t: {})\n\t\t},\n\t\t...(suite.metadata ? { metadata: { ...suite.metadata } } : {})\n\t};\n};\n\nexport const addRAGEvaluationSuiteCase = ({\n\tsuite,\n\tcaseInput,\n\tindex\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseInput: RAGEvaluationCase;\n\tindex?: number;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tif (\n\t\tnormalizedSuite.input.cases.some((entry) => entry.id === caseInput.id)\n\t) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite already contains case id ${caseInput.id}`\n\t\t);\n\t}\n\n\tconst nextCases = [...normalizedSuite.input.cases];\n\tconst insertAt =\n\t\ttypeof index === 'number' && Number.isFinite(index)\n\t\t\t? Math.max(0, Math.min(nextCases.length, Math.trunc(index)))\n\t\t\t: nextCases.length;\n\tnextCases.splice(insertAt, 0, caseInput);\n\n\treturn createRAGEvaluationSuite({\n\t\t...normalizedSuite,\n\t\tinput: {\n\t\t\t...normalizedSuite.input,\n\t\t\tcases: nextCases\n\t\t}\n\t});\n};\n\nexport const updateRAGEvaluationSuiteCase = ({\n\tsuite,\n\tcaseId,\n\tcaseInput\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseId: string;\n\tcaseInput: RAGEvaluationCase;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst targetIndex = normalizedSuite.input.cases.findIndex(\n\t\t(entry) => entry.id === caseId\n\t);\n\tif (targetIndex < 0) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite does not contain case id ${caseId}`\n\t\t);\n\t}\n\tif (\n\t\tcaseInput.id !== caseId &&\n\t\tnormalizedSuite.input.cases.some((entry) => entry.id === caseInput.id)\n\t) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite already contains case id ${caseInput.id}`\n\t\t);\n\t}\n\n\tconst nextCases = [...normalizedSuite.input.cases];\n\tnextCases[targetIndex] = caseInput;\n\n\treturn createRAGEvaluationSuite({\n\t\t...normalizedSuite,\n\t\tinput: {\n\t\t\t...normalizedSuite.input,\n\t\t\tcases: nextCases\n\t\t}\n\t});\n};\n\nexport const removeRAGEvaluationSuiteCase = ({\n\tsuite,\n\tcaseId\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseId: string;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst nextCases = normalizedSuite.input.cases.filter(\n\t\t(entry) => entry.id !== caseId\n\t);\n\tif (nextCases.length === normalizedSuite.input.cases.length) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite does not contain case id ${caseId}`\n\t\t);\n\t}\n\n\treturn {\n\t\t...normalizedSuite,\n\t\tinput: {\n\t\t\t...normalizedSuite.input,\n\t\t\tcases: nextCases\n\t\t}\n\t};\n};\n\nexport const reorderRAGEvaluationSuiteCases = ({\n\tsuite,\n\tcaseIds\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseIds: string[];\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst caseMap = new Map(\n\t\tnormalizedSuite.input.cases.map((entry) => [entry.id, entry])\n\t);\n\tif (caseIds.length !== normalizedSuite.input.cases.length) {\n\t\tthrow new Error(\n\t\t\t'RAG evaluation suite reorder requires exactly one id per case'\n\t\t);\n\t}\n\tconst unknownCaseIds = caseIds.filter((id) => !caseMap.has(id));\n\tif (unknownCaseIds.length > 0) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite reorder contains unknown case ids: ${unknownCaseIds.join(', ')}`\n\t\t);\n\t}\n\tif (new Set(caseIds).size !== caseIds.length) {\n\t\tthrow new Error(\n\t\t\t'RAG evaluation suite reorder contains duplicate case ids'\n\t\t);\n\t}\n\n\treturn {\n\t\t...normalizedSuite,\n\t\tinput: {\n\t\t\t...normalizedSuite.input,\n\t\t\tcases: caseIds.map((id) => caseMap.get(id)!)\n\t\t}\n\t};\n};\n\nexport const setRAGEvaluationSuiteCaseGoldenSet = ({\n\tsuite,\n\tcaseId,\n\tgoldenSet\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseId: string;\n\tgoldenSet: boolean;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst target = normalizedSuite.input.cases.find(\n\t\t(entry) => entry.id === caseId\n\t);\n\tif (!target) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite does not contain case id ${caseId}`\n\t\t);\n\t}\n\n\treturn updateRAGEvaluationSuiteCase({\n\t\tcaseId,\n\t\tcaseInput: {\n\t\t\t...target,\n\t\t\t...(goldenSet ? { goldenSet: true } : { goldenSet: undefined })\n\t\t},\n\t\tsuite: normalizedSuite\n\t});\n};\n\nconst resolveHardNegativeCaseField = (\n\tkind: 'chunkId' | 'source' | 'documentId'\n) =>\n\tkind === 'chunkId'\n\t\t? 'hardNegativeChunkIds'\n\t\t: kind === 'source'\n\t\t\t? 'hardNegativeSources'\n\t\t\t: 'hardNegativeDocumentIds';\n\nexport const addRAGEvaluationSuiteCaseHardNegative = ({\n\tsuite,\n\tcaseId,\n\tkind,\n\tvalue\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseId: string;\n\tkind: 'chunkId' | 'source' | 'documentId';\n\tvalue: string;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst target = normalizedSuite.input.cases.find(\n\t\t(entry) => entry.id === caseId\n\t);\n\tif (!target) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite does not contain case id ${caseId}`\n\t\t);\n\t}\n\n\tconst field = resolveHardNegativeCaseField(kind);\n\tconst nextValues = normalizeExpectedIds([\n\t\t...normalizeStringArray(target[field]),\n\t\tvalue\n\t]);\n\n\treturn updateRAGEvaluationSuiteCase({\n\t\tcaseId,\n\t\tcaseInput: {\n\t\t\t...target,\n\t\t\t[field]: nextValues\n\t\t},\n\t\tsuite: normalizedSuite\n\t});\n};\n\nexport const removeRAGEvaluationSuiteCaseHardNegative = ({\n\tsuite,\n\tcaseId,\n\tkind,\n\tvalue\n}: {\n\tsuite: RAGEvaluationSuite;\n\tcaseId: string;\n\tkind: 'chunkId' | 'source' | 'documentId';\n\tvalue: string;\n}): RAGEvaluationSuite => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst target = normalizedSuite.input.cases.find(\n\t\t(entry) => entry.id === caseId\n\t);\n\tif (!target) {\n\t\tthrow new Error(\n\t\t\t`RAG evaluation suite does not contain case id ${caseId}`\n\t\t);\n\t}\n\n\tconst field = resolveHardNegativeCaseField(kind);\n\tconst nextValues = normalizeStringArray(target[field]).filter(\n\t\t(entry) => entry !== value.trim()\n\t);\n\n\treturn updateRAGEvaluationSuiteCase({\n\t\tcaseId,\n\t\tcaseInput: {\n\t\t\t...target,\n\t\t\t[field]: nextValues.length > 0 ? nextValues : undefined\n\t\t},\n\t\tsuite: normalizedSuite\n\t});\n};\n\nexport const summarizeRAGEvaluationSuiteDataset = ({\n\tsuite\n}: {\n\tsuite: RAGEvaluationSuite;\n}): RAGEvaluationSuiteDatasetSummary => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\tconst cases = normalizedSuite.input.cases;\n\n\treturn {\n\t\tcaseCount: cases.length,\n\t\tgoldenSetCount: cases.filter((entry) => entry.goldenSet === true)\n\t\t\t.length,\n\t\thardNegativeCaseCount: cases.filter(\n\t\t\t(entry) =>\n\t\t\t\tnormalizeStringArray(entry.hardNegativeChunkIds).length > 0 ||\n\t\t\t\tnormalizeStringArray(entry.hardNegativeSources).length > 0 ||\n\t\t\t\tnormalizeStringArray(entry.hardNegativeDocumentIds).length > 0\n\t\t).length,\n\t\thardNegativeChunkIdCount: cases.reduce(\n\t\t\t(sum, entry) =>\n\t\t\t\tsum + normalizeStringArray(entry.hardNegativeChunkIds).length,\n\t\t\t0\n\t\t),\n\t\thardNegativeDocumentIdCount: cases.reduce(\n\t\t\t(sum, entry) =>\n\t\t\t\tsum +\n\t\t\t\tnormalizeStringArray(entry.hardNegativeDocumentIds).length,\n\t\t\t0\n\t\t),\n\t\thardNegativeSourceCount: cases.reduce(\n\t\t\t(sum, entry) =>\n\t\t\t\tsum + normalizeStringArray(entry.hardNegativeSources).length,\n\t\t\t0\n\t\t),\n\t\tsuiteId: normalizedSuite.id\n\t};\n};\n\nexport const generateRAGEvaluationSuiteFromDocuments = ({\n\tsuiteId,\n\tdocuments,\n\tlabel,\n\tdescription,\n\tmaxCases = 20,\n\ttopK = 5,\n\tscoreThreshold,\n\tfilter,\n\tretrieval,\n\tincludeGoldenSet = true,\n\thardNegativePerCase = 1,\n\tmetadata\n}: RAGEvaluationSuiteGenerationOptions): RAGEvaluationSuite => {\n\tconst normalizedDocuments = documents\n\t\t.filter(\n\t\t\t(document) =>\n\t\t\t\ttypeof document.id === 'string' &&\n\t\t\t\tdocument.id.trim().length > 0 &&\n\t\t\t\ttypeof document.source === 'string' &&\n\t\t\t\tdocument.source.trim().length > 0 &&\n\t\t\t\ttypeof document.title === 'string' &&\n\t\t\t\tdocument.title.trim().length > 0\n\t\t)\n\t\t.sort((left, right) =>\n\t\t\t`${left.source}\\u0000${left.title}\\u0000${left.id}`.localeCompare(\n\t\t\t\t`${right.source}\\u0000${right.title}\\u0000${right.id}`\n\t\t\t)\n\t\t)\n\t\t.slice(0, Math.max(0, Math.trunc(maxCases)));\n\n\tconst cases = normalizedDocuments.map((document, index) => {\n\t\tconst negativeCandidates = normalizedDocuments\n\t\t\t.slice(index + 1)\n\t\t\t.concat(normalizedDocuments.slice(0, index))\n\t\t\t.filter((candidate) => candidate.id !== document.id);\n\t\tconst hardNegativeDocumentIds = negativeCandidates\n\t\t\t.slice(0, Math.max(0, Math.trunc(hardNegativePerCase)))\n\t\t\t.map((candidate) => candidate.id);\n\t\tconst hardNegativeSources = negativeCandidates\n\t\t\t.slice(0, Math.max(0, Math.trunc(hardNegativePerCase)))\n\t\t\t.map((candidate) => candidate.source);\n\n\t\treturn {\n\t\t\tcorpusKey: document.corpusKey,\n\t\t\texpectedDocumentIds: [document.id],\n\t\t\texpectedSources: [document.source],\n\t\t\t...(includeGoldenSet ? { goldenSet: true } : {}),\n\t\t\t...(hardNegativeDocumentIds.length > 0\n\t\t\t\t? { hardNegativeDocumentIds }\n\t\t\t\t: {}),\n\t\t\t...(hardNegativeSources.length > 0 ? { hardNegativeSources } : {}),\n\t\t\tid: `synthetic-${document.id}`,\n\t\t\tlabel: document.title,\n\t\t\tquery: buildSyntheticEvaluationQuery(document)\n\t\t} satisfies RAGEvaluationCase;\n\t});\n\n\treturn createRAGEvaluationSuite({\n\t\tdescription,\n\t\tid: suiteId,\n\t\tinput: {\n\t\t\tcases,\n\t\t\t...(filter ? { filter: { ...filter } } : {}),\n\t\t\t...(typeof scoreThreshold === 'number' ? { scoreThreshold } : {}),\n\t\t\t...(typeof topK === 'number' ? { topK } : {}),\n\t\t\t...(retrieval ? { retrieval } : {})\n\t\t},\n\t\tlabel,\n\t\tmetadata\n\t});\n};\n\nexport const createRAGEvaluationSuiteSnapshot = ({\n\tsuite,\n\tid,\n\tversion = 1,\n\tcreatedAt = Date.now(),\n\tmetadata\n}: {\n\tsuite: RAGEvaluationSuite;\n\tid?: string;\n\tversion?: number;\n\tcreatedAt?: number;\n\tmetadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n\tconst normalizedSuite = createRAGEvaluationSuite(suite);\n\treturn {\n\t\tcaseCount: normalizedSuite.input.cases.length,\n\t\tcreatedAt,\n\t\tid: id ?? `${normalizedSuite.id}:snapshot:${String(version)}`,\n\t\tlabel: normalizedSuite.label,\n\t\tdescription: normalizedSuite.description,\n\t\tmetadata: metadata ? { ...metadata } : undefined,\n\t\tsuite: normalizedSuite,\n\t\tsuiteId: normalizedSuite.id,\n\t\tversion\n\t};\n};\n\nconst stableStringifyEvaluationCase = (entry: RAGEvaluationCase) =>\n\tJSON.stringify({\n\t\t...entry,\n\t\texpectedChunkIds: entry.expectedChunkIds ?? [],\n\t\texpectedDocumentIds: entry.expectedDocumentIds ?? [],\n\t\texpectedSources: entry.expectedSources ?? [],\n\t\tgoldenSet: entry.goldenSet === true,\n\t\thardNegativeChunkIds: entry.hardNegativeChunkIds ?? [],\n\t\thardNegativeDocumentIds: entry.hardNegativeDocumentIds ?? [],\n\t\thardNegativeSources: entry.hardNegativeSources ?? [],\n\t\tfilter: entry.filter ?? {},\n\t\tmetadata: entry.metadata ?? {},\n\t\tretrieval: entry.retrieval ?? null\n\t});\n\nexport const buildRAGEvaluationSuiteSnapshotDiff = ({\n\tcurrent,\n\tprevious\n}: {\n\tcurrent: RAGEvaluationSuiteSnapshot;\n\tprevious?: RAGEvaluationSuiteSnapshot;\n}): RAGEvaluationSuiteSnapshotDiff => {\n\tconst currentCases = current.suite.input.cases;\n\tconst previousCases = previous?.suite.input.cases ?? [];\n\tconst currentMap = new Map<string, RAGEvaluationCase>(\n\t\tcurrentCases.map((entry: RAGEvaluationCase) => [entry.id, entry])\n\t);\n\tconst previousMap = new Map<string, RAGEvaluationCase>(\n\t\tpreviousCases.map((entry: RAGEvaluationCase) => [entry.id, entry])\n\t);\n\tconst currentIds = currentCases.map((entry: RAGEvaluationCase) => entry.id);\n\tconst previousIds = previousCases.map(\n\t\t(entry: RAGEvaluationCase) => entry.id\n\t);\n\n\tconst addedCaseIds = currentIds.filter(\n\t\t(id: string) => !previousMap.has(id)\n\t);\n\tconst removedCaseIds = previousIds.filter(\n\t\t(id: string) => !currentMap.has(id)\n\t);\n\tconst changedCaseIds = currentIds.filter((id: string) => {\n\t\tconst currentCase = currentMap.get(id);\n\t\tconst previousCase = previousMap.get(id);\n\t\tif (!currentCase || !previousCase) {\n\t\t\treturn false;\n\t\t}\n\t\treturn (\n\t\t\tstableStringifyEvaluationCase(currentCase) !==\n\t\t\tstableStringifyEvaluationCase(previousCase)\n\t\t);\n\t});\n\tconst unchangedCaseIds = currentIds.filter((id: string) => {\n\t\tconst currentCase = currentMap.get(id);\n\t\tconst previousCase = previousMap.get(id);\n\t\tif (!currentCase || !previousCase) {\n\t\t\treturn false;\n\t\t}\n\t\treturn (\n\t\t\tstableStringifyEvaluationCase(currentCase) ===\n\t\t\tstableStringifyEvaluationCase(previousCase)\n\t\t);\n\t});\n\tconst sharedIds = currentIds.filter((id: string) => previousMap.has(id));\n\tconst orderChanged =\n\t\tsharedIds.length > 0 &&\n\t\tJSON.stringify(sharedIds) !==\n\t\t\tJSON.stringify(\n\t\t\t\tpreviousIds.filter((id: string) => currentMap.has(id))\n\t\t\t);\n\n\treturn {\n\t\taddedCaseIds,\n\t\tcaseCountDelta: current.caseCount - (previous?.caseCount ?? 0),\n\t\tchangedCaseIds,\n\t\tcurrentSnapshotId: current.id,\n\t\torderChanged,\n\t\tpreviousSnapshotId: previous?.id,\n\t\tremovedCaseIds,\n\t\tsuiteId: current.suiteId,\n\t\tunchangedCaseIds\n\t};\n};\nexport const evaluateRAGCollection = async ({\n\tcollection,\n\tinput,\n\tdefaultTopK = DEFAULT_TOP_K,\n\trerank\n}: {\n\tcollection: RAGCollection;\n\tinput: RAGEvaluationInput;\n\tdefaultTopK?: number;\n\trerank?: RAGRerankerProviderLike;\n}) => {\n\tconst evaluated = await evaluateRAGCollectionCases({\n\t\tcollection,\n\t\tdefaultTopK,\n\t\tincludeTrace: false,\n\t\tinput,\n\t\trerank\n\t});\n\n\treturn buildRAGEvaluationResponse(\n\t\tevaluated.map((entry) => entry.caseResult)\n\t);\n};\nexport const executeDryRunRAGEvaluation = (\n\tinput: RAGEvaluationInput,\n\tdefaultTopK = DEFAULT_TOP_K\n): RAGEvaluationCaseResult[] =>\n\tinput.cases.map((caseInput, caseIndex) => {\n\t\tconst mode = resolveEvaluationMode(caseInput);\n\t\tconst expectedIds = normalizeExpectedIds(\n\t\t\tmode === 'chunkId'\n\t\t\t\t? (caseInput.expectedChunkIds ?? [])\n\t\t\t\t: mode === 'source'\n\t\t\t\t\t? (caseInput.expectedSources ?? [])\n\t\t\t\t\t: (caseInput.expectedDocumentIds ?? [])\n\t\t);\n\t\tconst effectiveTopK =\n\t\t\ttypeof caseInput.topK === 'number'\n\t\t\t\t? caseInput.topK\n\t\t\t\t: typeof input.topK === 'number'\n\t\t\t\t\t? input.topK\n\t\t\t\t\t: defaultTopK;\n\n\t\treturn {\n\t\t\tcaseId: caseInput.id ?? `case-${caseIndex + 1}`,\n\t\t\telapsedMs: 0,\n\t\t\texpectedCount: expectedIds.length,\n\t\t\texpectedIds,\n\t\t\tfailureClasses: classifyRAGEvaluationFailure({\n\t\t\t\texpectedCount: expectedIds.length,\n\t\t\t\tmatchedCount: 0,\n\t\t\t\tmissingIds: expectedIds,\n\t\t\t\tretrievedCount: 0,\n\t\t\t\tretrievedIds: []\n\t\t\t}),\n\t\t\tf1: 0,\n\t\t\tlabel: caseInput.label,\n\t\t\tmatchedCount: 0,\n\t\t\tmatchedIds: [],\n\t\t\tmissingIds: expectedIds,\n\t\t\tmode,\n\t\t\tprecision: 0,\n\t\t\tquery: caseInput.query,\n\t\t\trecall: 0,\n\t\t\tretrievedCount: 0,\n\t\t\tretrievedIds: [],\n\t\t\tstatus: expectedIds.length === 0 ? 'partial' : 'fail',\n\t\t\ttopK: effectiveTopK\n\t\t};\n\t});\nexport const runRAGEvaluationSuite = async ({\n\tsuite,\n\tevaluate,\n\toverrides,\n\tartifacts\n}: {\n\tsuite: RAGEvaluationSuite;\n\tevaluate: (input: RAGEvaluationInput) => Promise<RAGEvaluationResponse>;\n\toverrides?: Partial<RAGEvaluationInput>;\n\tartifacts?: Pick<\n\t\tRAGEvaluationSuiteRun,\n\t\t'traceSummary' | 'caseTraceSnapshots'\n\t>;\n}) => {\n\tconst startedAt = Date.now();\n\tconst response = await evaluate({\n\t\t...suite.input,\n\t\t...overrides,\n\t\tcases: overrides?.cases ?? suite.input.cases\n\t});\n\tconst finishedAt = Date.now();\n\n\treturn {\n\t\tcaseTraceSnapshots: artifacts?.caseTraceSnapshots,\n\t\telapsedMs: finishedAt - startedAt,\n\t\tfinishedAt,\n\t\tid: generateId(),\n\t\tlabel: suite.label ?? suite.id,\n\t\tmetadata: suite.metadata,\n\t\tresponse,\n\t\tstartedAt,\n\t\tsuiteId: suite.id,\n\t\ttraceSummary: artifacts?.traceSummary\n\t} satisfies RAGEvaluationSuiteRun;\n};\nexport const summarizeRAGEvaluationCase = ({\n\tcaseIndex,\n\tcaseInput,\n\tquery,\n\tmode,\n\tretrievedIds,\n\texpectedIds,\n\telapsedMs,\n\tretrievedSources,\n\ttrace\n}: {\n\tcaseIndex: number;\n\tcaseInput: RAGEvaluationCase;\n\tmode: 'chunkId' | 'source' | 'documentId';\n\tquery: string;\n\tretrievedIds: string[];\n\texpectedIds: string[];\n\telapsedMs: number;\n\tretrievedSources?: RAGSource[];\n\ttrace?: RAGSearchTraceRecord | RAGRetrievalTrace;\n}): RAGEvaluationCaseResult => {\n\tconst expectedSet = new Set(expectedIds);\n\tconst retrievedSet = new Set(retrievedIds);\n\tconst matchedIds = normalizeExpectedIds(\n\t\t[...expectedSet].filter((id) => retrievedSet.has(id))\n\t);\n\tconst missingIds = normalizeExpectedIds(\n\t\t[...expectedSet].filter((id) => !retrievedSet.has(id))\n\t);\n\tconst matchedCount = matchedIds.length;\n\tconst retrievedCount = retrievedIds.length;\n\tconst expectedCount = expectedIds.length;\n\tconst precision = retrievedCount > 0 ? matchedCount / retrievedCount : 0;\n\tconst recall = expectedCount > 0 ? matchedCount / expectedCount : 0;\n\tconst f1 =\n\t\tprecision + recall > 0\n\t\t\t? (2 * precision * recall) / (precision + recall)\n\t\t\t: 0;\n\tconst status: RAGEvaluationCaseResult['status'] =\n\t\texpectedCount === 0\n\t\t\t? 'partial'\n\t\t\t: matchedCount === expectedCount\n\t\t\t\t? 'pass'\n\t\t\t\t: matchedCount > 0\n\t\t\t\t\t? 'partial'\n\t\t\t\t\t: 'fail';\n\n\treturn {\n\t\tcaseId: caseInput.id ?? `case-${caseIndex + 1}`,\n\t\tcorpusKey: caseInput.corpusKey,\n\t\telapsedMs,\n\t\texpectedCount,\n\t\texpectedIds,\n\t\tfailureClasses: classifyRAGEvaluationFailure({\n\t\t\texpectedCount,\n\t\t\tmatchedCount,\n\t\t\tmissingIds,\n\t\t\tretrievedCount,\n\t\t\tretrievedIds,\n\t\t\tretrievedSources,\n\t\t\ttrace\n\t\t}),\n\t\tf1,\n\t\tlabel: caseInput.label,\n\t\tmatchedCount,\n\t\tmatchedIds,\n\t\tmetadata: caseInput.metadata,\n\t\tmissingIds,\n\t\tmode,\n\t\tprecision,\n\t\tquery,\n\t\trecall,\n\t\tretrievedCount,\n\t\tretrievedIds,\n\t\tstatus,\n\t\ttopK:\n\t\t\ttypeof caseInput.topK === 'number' ? caseInput.topK : DEFAULT_TOP_K\n\t};\n};\nexport const summarizeRAGRerankerComparison = (\n\tentries: RAGRerankerComparisonEntry[]\n): RAGRerankerComparisonSummary => {\n\treturn summarizeEvaluationResponseComparison(\n\t\tentries,\n\t\t'rerankerId'\n\t) satisfies RAGRerankerComparisonSummary;\n};\nexport const summarizeRAGRetrievalComparison = (\n\tentries: RAGRetrievalComparisonEntry[]\n): RAGRetrievalComparisonSummary =>\n\tsummarizeEvaluationResponseComparison(\n\t\tentries,\n\t\t'retrievalId'\n\t) satisfies RAGRetrievalComparisonSummary;\n",
|
|
8
8
|
"import type { AIServerMessage } from '../../types/ai';\nimport { isValidAIClientMessage } from '../../types/typeGuards';\n\nexport const generateId = () => crypto.randomUUID();\n\nexport const parseAIMessage = (raw: unknown) => {\n\tif (raw === null || raw === undefined) {\n\t\treturn null;\n\t}\n\n\tlet text: string;\n\n\tif (typeof raw === 'string') {\n\t\ttext = raw;\n\t} else if (raw instanceof ArrayBuffer) {\n\t\ttext = new TextDecoder().decode(raw);\n\t} else if (ArrayBuffer.isView(raw)) {\n\t\ttext = new TextDecoder().decode(raw);\n\t} else if (typeof raw === 'object') {\n\t\tif (isValidAIClientMessage(raw)) {\n\t\t\treturn raw;\n\t\t}\n\n\t\treturn null;\n\t} else {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(text);\n\n\t\tif (isValidAIClientMessage(parsed)) {\n\t\t\treturn parsed;\n\t\t}\n\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const serializeAIMessage = (message: AIServerMessage) =>\n\tJSON.stringify(message);\n",
|
|
9
9
|
"import type {\n\tRAGCitation,\n\tRAGCitationReferenceMap,\n\tRAGExcerptModeCounts,\n\tRAGGroundedAnswer,\n\tRAGGroundedAnswerCitationDetail,\n\tRAGGroundedAnswerSectionSummary,\n\tRAGGroundingReference,\n\tRAGSource\n} from '../../../types/ai';\n\nconst getContextString = (value: unknown) =>\n\ttypeof value === 'string' && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n\nconst getContextNumber = (value: unknown) =>\n\ttypeof value === 'number' && Number.isFinite(value) ? value : undefined;\n\nconst getAttachmentName = (source?: string, title?: string) => {\n\tconst sourceAttachment = source?.split('/').at(-1);\n\tif (sourceAttachment && sourceAttachment.includes('.')) {\n\t\treturn sourceAttachment;\n\t}\n\n\tconst titleAttachment = title?.split(' · ').at(-1);\n\tif (titleAttachment && titleAttachment.includes('.')) {\n\t\treturn titleAttachment;\n\t}\n\n\treturn undefined;\n};\n\nconst buildContextLabel = (metadata?: Record<string, unknown>) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst emailKind = getContextString(metadata.emailKind);\n\tif (emailKind === 'attachment') {\n\t\treturn 'Attachment evidence';\n\t}\n\n\tif (emailKind === 'message') {\n\t\tconst from = getContextString(metadata.from);\n\t\treturn from ? `Message from ${from}` : 'Message evidence';\n\t}\n\n\tconst page =\n\t\tgetContextNumber(metadata.page) ??\n\t\tgetContextNumber(metadata.pageNumber) ??\n\t\t(typeof metadata.pageIndex === 'number'\n\t\t\t? metadata.pageIndex + 1\n\t\t\t: undefined);\n\tconst region =\n\t\tgetContextNumber(metadata.regionNumber) ??\n\t\t(typeof metadata.regionIndex === 'number'\n\t\t\t? metadata.regionIndex + 1\n\t\t\t: undefined);\n\tif (page && region) {\n\t\treturn `Page ${page} region ${region}`;\n\t}\n\tif (page) {\n\t\treturn `Page ${page}`;\n\t}\n\n\tconst sheet =\n\t\tgetContextString(metadata.sheetName) ??\n\t\t(Array.isArray(metadata.sheetNames)\n\t\t\t? getContextString(metadata.sheetNames[0])\n\t\t\t: undefined);\n\tif (sheet) {\n\t\treturn `Sheet ${sheet}`;\n\t}\n\n\tconst slide =\n\t\tgetContextNumber(metadata.slide) ??\n\t\tgetContextNumber(metadata.slideNumber) ??\n\t\t(typeof metadata.slideIndex === 'number'\n\t\t\t? metadata.slideIndex + 1\n\t\t\t: undefined);\n\tif (slide) {\n\t\treturn `Slide ${slide}`;\n\t}\n\n\tconst archiveEntry =\n\t\tgetContextString(metadata.archiveEntryPath) ??\n\t\tgetContextString(metadata.entryPath);\n\tif (archiveEntry) {\n\t\treturn `Archive entry ${archiveEntry}`;\n\t}\n\n\tconst threadTopic = getContextString(metadata.threadTopic);\n\tif (threadTopic) {\n\t\treturn `Thread ${threadTopic}`;\n\t}\n\n\tconst speaker = getContextString(metadata.speaker);\n\tif (speaker) {\n\t\treturn `Speaker ${speaker}`;\n\t}\n\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath\n\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\tconst sectionTitle =\n\t\tgetContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n\tif (sectionTitle) {\n\t\treturn `Section ${sectionTitle}`;\n\t}\n\n\treturn undefined;\n};\n\nconst formatMediaTimestamp = (value: unknown) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n\t\treturn undefined;\n\t}\n\n\tconst totalSeconds = Math.floor(value / 1000);\n\tconst minutes = Math.floor(totalSeconds / 60);\n\tconst seconds = totalSeconds % 60;\n\tconst milliseconds = Math.floor(value % 1000);\n\n\treturn `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(\n\t\t2,\n\t\t'0'\n\t)}.${String(milliseconds).padStart(3, '0')}`;\n};\n\nconst formatMediaDurationLabel = (value: unknown) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n\t\treturn undefined;\n\t}\n\n\treturn formatMediaTimestamp(value);\n};\n\nconst buildLocatorLabel = (\n\tmetadata?: Record<string, unknown>,\n\tsource?: string,\n\ttitle?: string\n) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst page =\n\t\tgetContextNumber(metadata.page) ??\n\t\tgetContextNumber(metadata.pageNumber) ??\n\t\t(typeof metadata.pageIndex === 'number'\n\t\t\t? metadata.pageIndex + 1\n\t\t\t: undefined);\n\tconst region =\n\t\tgetContextNumber(metadata.regionNumber) ??\n\t\t(typeof metadata.regionIndex === 'number'\n\t\t\t? metadata.regionIndex + 1\n\t\t\t: undefined);\n\tif (page && region) {\n\t\treturn `Page ${page} · Region ${region}`;\n\t}\n\tif (page) {\n\t\treturn `Page ${page}`;\n\t}\n\n\tconst sheet =\n\t\tgetContextString(metadata.sheetName) ??\n\t\t(Array.isArray(metadata.sheetNames)\n\t\t\t? getContextString(metadata.sheetNames[0])\n\t\t\t: undefined);\n\tif (sheet) {\n\t\treturn `Sheet ${sheet}`;\n\t}\n\n\tconst slide =\n\t\tgetContextNumber(metadata.slide) ??\n\t\tgetContextNumber(metadata.slideNumber) ??\n\t\t(typeof metadata.slideIndex === 'number'\n\t\t\t? metadata.slideIndex + 1\n\t\t\t: undefined);\n\tif (slide) {\n\t\treturn `Slide ${slide}`;\n\t}\n\n\tconst archiveEntry =\n\t\tgetContextString(metadata.archiveEntryPath) ??\n\t\tgetContextString(metadata.entryPath);\n\tif (archiveEntry) {\n\t\treturn `Archive entry ${archiveEntry}`;\n\t}\n\n\tconst emailKind = getContextString(metadata.emailKind);\n\tif (emailKind === 'attachment') {\n\t\tconst attachmentName =\n\t\t\tgetContextString(metadata.attachmentName) ??\n\t\t\tgetAttachmentName(source, title);\n\t\treturn attachmentName ? `Attachment ${attachmentName}` : 'Attachment';\n\t}\n\n\tconst mediaStart = formatMediaTimestamp(metadata.startMs);\n\tconst mediaEnd = formatMediaTimestamp(metadata.endMs);\n\tif (mediaStart && mediaEnd) {\n\t\treturn `Timestamp ${mediaStart} - ${mediaEnd}`;\n\t}\n\n\tif (mediaStart) {\n\t\treturn `Timestamp ${mediaStart}`;\n\t}\n\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath\n\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\tif (sectionPath.length > 0) {\n\t\treturn `Section ${sectionPath.join(' > ')}`;\n\t}\n\n\treturn undefined;\n};\n\nconst formatTimestampLabel = (value: unknown) => {\n\tconst timestamp =\n\t\ttypeof value === 'number' && Number.isFinite(value)\n\t\t\t? value\n\t\t\t: typeof value === 'string'\n\t\t\t\t? Date.parse(value)\n\t\t\t\t: Number.NaN;\n\tif (!Number.isFinite(timestamp)) {\n\t\treturn undefined;\n\t}\n\n\treturn new Date(timestamp).toLocaleString('en-US', {\n\t\tdateStyle: 'medium',\n\t\ttimeStyle: 'short'\n\t});\n};\n\nconst buildProvenanceLabel = (metadata?: Record<string, unknown>) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst threadTopic = getContextString(metadata.threadTopic);\n\tconst from = getContextString(metadata.from);\n\tconst sentAt =\n\t\tformatTimestampLabel(metadata.sentAt) ??\n\t\tformatTimestampLabel(metadata.receivedAt);\n\tconst speaker = getContextString(metadata.speaker);\n\tconst mediaKind = getContextString(metadata.mediaKind);\n\tconst mediaSegmentCount = getContextNumber(metadata.mediaSegmentCount);\n\tconst mediaSegmentGroupSize = getContextNumber(\n\t\tmetadata.mediaSegmentGroupSize\n\t);\n\tconst mediaSegmentGroupIndex = getContextNumber(\n\t\tmetadata.mediaSegmentGroupIndex\n\t);\n\tconst mediaChannel = getContextString(metadata.mediaChannel);\n\tconst mediaSpeakerCount = getContextNumber(metadata.mediaSpeakerCount);\n\tconst mediaDurationLabel = formatMediaDurationLabel(\n\t\tmetadata.mediaDurationMs\n\t);\n\tconst transcriptSource = getContextString(metadata.transcriptSource);\n\tconst pdfTextMode = getContextString(metadata.pdfTextMode);\n\tconst ocrEngine = getContextString(metadata.ocrEngine);\n\tconst ocrConfidence =\n\t\tgetContextNumber(metadata.ocrRegionConfidence) ??\n\t\tgetContextNumber(metadata.ocrConfidence);\n\n\tconst labels = [\n\t\tpdfTextMode ? `PDF ${pdfTextMode}` : '',\n\t\tocrEngine ? `OCR ${ocrEngine}` : '',\n\t\ttypeof ocrConfidence === 'number'\n\t\t\t? `Confidence ${ocrConfidence.toFixed(2)}`\n\t\t\t: '',\n\t\tmediaKind ? `Media ${mediaKind}` : '',\n\t\tmediaSegmentCount ? `${mediaSegmentCount} segments` : '',\n\t\tmediaSegmentGroupSize\n\t\t\t? `${mediaSegmentGroupSize} grouped segments`\n\t\t\t: '',\n\t\tmediaSegmentGroupIndex !== undefined\n\t\t\t? `Segment group ${mediaSegmentGroupIndex + 1}`\n\t\t\t: '',\n\t\tmediaChannel ? `Channel ${mediaChannel}` : '',\n\t\tmediaSpeakerCount ? `${mediaSpeakerCount} speakers` : '',\n\t\tmediaDurationLabel ? `Duration ${mediaDurationLabel}` : '',\n\t\ttranscriptSource ? `Transcript ${transcriptSource}` : '',\n\t\tthreadTopic ? `Thread ${threadTopic}` : '',\n\t\tspeaker ? `Speaker ${speaker}` : '',\n\t\tfrom ? `Sender ${from}` : '',\n\t\tsentAt ? `Sent ${sentAt}` : ''\n\t].filter((value) => value.length > 0);\n\n\treturn labels.length > 0 ? labels.join(' · ') : undefined;\n};\n\nconst buildSourceLabel = (source: RAGSource) =>\n\tsource.source ?? source.title ?? source.chunkId;\n\nconst buildExcerpt = (text: string, maxLength = 160) => {\n\tconst normalized = text.replaceAll(/\\s+/g, ' ').trim();\n\tif (normalized.length <= maxLength) {\n\t\treturn normalized;\n\t}\n\n\treturn `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;\n};\n\nconst selectPreferredExcerpt = (\n\texcerpts?: {\n\t\tchunkExcerpt?: string;\n\t\twindowExcerpt?: string;\n\t\tsectionExcerpt?: string;\n\t},\n\tsectionChunkCount?: number\n) => {\n\tif (!excerpts) {\n\t\treturn {\n\t\t\texcerpt: '',\n\t\t\tmode: 'chunk' as const,\n\t\t\treason: 'single_chunk' as const\n\t\t};\n\t}\n\n\tconst chunkExcerpt = excerpts.chunkExcerpt?.trim() ?? '';\n\tconst windowExcerpt = excerpts.windowExcerpt?.trim() ?? '';\n\tconst sectionExcerpt = excerpts.sectionExcerpt?.trim() ?? '';\n\tif (\n\t\tsectionChunkCount &&\n\t\tsectionChunkCount > 1 &&\n\t\tchunkExcerpt.length > 0 &&\n\t\tchunkExcerpt.length < 72\n\t) {\n\t\tif (sectionChunkCount <= 3 && sectionExcerpt) {\n\t\t\treturn {\n\t\t\t\texcerpt: sectionExcerpt,\n\t\t\t\tmode: 'section' as const,\n\t\t\t\treason: 'section_small_enough' as const\n\t\t\t};\n\t\t}\n\t\tif (windowExcerpt) {\n\t\t\treturn {\n\t\t\t\texcerpt: windowExcerpt,\n\t\t\t\tmode: 'window' as const,\n\t\t\t\treason: 'section_too_large_use_window' as const\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\texcerpt: chunkExcerpt,\n\t\t\tmode: 'chunk' as const,\n\t\t\treason: 'chunk_too_narrow' as const\n\t\t};\n\t}\n\n\treturn {\n\t\texcerpt: chunkExcerpt || windowExcerpt || sectionExcerpt,\n\t\tmode: 'chunk' as const,\n\t\treason:\n\t\t\t(sectionChunkCount ?? 0) > 1\n\t\t\t\t? ('chunk_too_narrow' as const)\n\t\t\t\t: ('single_chunk' as const)\n\t};\n};\n\nconst buildExcerptModeCounts = (\n\treferences: Array<\n\t\t| { excerptSelection?: { mode: 'chunk' | 'window' | 'section' } }\n\t\t| undefined\n\t>\n): RAGExcerptModeCounts =>\n\treferences.reduce<RAGExcerptModeCounts>(\n\t\t(counts, reference) => {\n\t\t\tif (reference?.excerptSelection) {\n\t\t\t\tcounts[reference.excerptSelection.mode] += 1;\n\t\t\t}\n\t\t\treturn counts;\n\t\t},\n\t\t{ chunk: 0, section: 0, window: 0 }\n\t);\n\nconst buildGroundingChunkExcerpts = (\n\tsources: RAGSource[],\n\tactiveChunkId?: string\n) => {\n\tif (sources.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst activeSource =\n\t\t(activeChunkId\n\t\t\t? sources.find((source) => source.chunkId === activeChunkId)\n\t\t\t: undefined) ?? sources[0];\n\tif (!activeSource) {\n\t\treturn undefined;\n\t}\n\n\tconst chunkMap = new Map(sources.map((source) => [source.chunkId, source]));\n\tconst activeMetadata = activeSource.metadata ?? {};\n\tconst previousChunkId = getContextString(activeMetadata.previousChunkId);\n\tconst nextChunkId = getContextString(activeMetadata.nextChunkId);\n\tconst sectionChunkId = getContextString(activeMetadata.sectionChunkId);\n\tconst sectionSources = sectionChunkId\n\t\t? sources\n\t\t\t\t.filter(\n\t\t\t\t\t(source) =>\n\t\t\t\t\t\tgetContextString(source.metadata?.sectionChunkId) ===\n\t\t\t\t\t\tsectionChunkId\n\t\t\t\t)\n\t\t\t\t.sort((left, right) => {\n\t\t\t\t\tconst leftIndex =\n\t\t\t\t\t\tgetContextNumber(left.metadata?.sectionChunkIndex) ??\n\t\t\t\t\t\tNumber.MAX_SAFE_INTEGER;\n\t\t\t\t\tconst rightIndex =\n\t\t\t\t\t\tgetContextNumber(right.metadata?.sectionChunkIndex) ??\n\t\t\t\t\t\tNumber.MAX_SAFE_INTEGER;\n\t\t\t\t\tif (leftIndex !== rightIndex) {\n\t\t\t\t\t\treturn leftIndex - rightIndex;\n\t\t\t\t\t}\n\t\t\t\t\treturn left.chunkId.localeCompare(right.chunkId);\n\t\t\t\t})\n\t\t: [activeSource];\n\tconst collectText = (chunkIds: string[]) =>\n\t\tchunkIds\n\t\t\t.map((chunkId) => chunkMap.get(chunkId)?.text)\n\t\t\t.filter((text): text is string => typeof text === 'string')\n\t\t\t.join('\\n\\n');\n\tconst orderedWindowIds = [\n\t\tpreviousChunkId,\n\t\tactiveSource.chunkId,\n\t\tnextChunkId\n\t].filter(\n\t\t(chunkId, index, values): chunkId is string =>\n\t\t\tBoolean(chunkId) && values.indexOf(chunkId) === index\n\t);\n\n\treturn {\n\t\tchunkExcerpt: buildExcerpt(activeSource.text, 160),\n\t\tsectionExcerpt: buildExcerpt(\n\t\t\tsectionSources.map((source) => source.text).join('\\n\\n'),\n\t\t\t320\n\t\t),\n\t\twindowExcerpt: buildExcerpt(collectText(orderedWindowIds), 240)\n\t};\n};\n\nconst buildGroundingReferenceEvidenceLabel = (\n\treference: RAGGroundingReference\n) =>\n\t[reference.label, reference.locatorLabel, reference.contextLabel]\n\t\t.filter((value): value is string => Boolean(value && value.length > 0))\n\t\t.filter(\n\t\t\t(value, index, values) =>\n\t\t\t\tvalues.findIndex((entry) => entry === value) === index\n\t\t)\n\t\t.join(' · ');\n\nconst buildGroundingReferenceEvidenceSummary = (\n\treference: RAGGroundingReference\n) =>\n\t[\n\t\treference.source ?? reference.title ?? reference.chunkId,\n\t\treference.locatorLabel,\n\t\treference.contextLabel,\n\t\treference.provenanceLabel\n\t]\n\t\t.filter((value): value is string => Boolean(value && value.length > 0))\n\t\t.filter(\n\t\t\t(value, index, values) =>\n\t\t\t\tvalues.findIndex((entry) => entry === value) === index\n\t\t)\n\t\t.join(' · ');\n\nconst buildGroundingSectionKey = (reference: RAGGroundingReference) =>\n\treference.contextLabel ??\n\treference.locatorLabel ??\n\treference.label ??\n\treference.source ??\n\treference.chunkId;\n\nconst buildGroundingSectionSummaryLine = (reference: RAGGroundingReference) =>\n\t[\n\t\treference.source ?? reference.title ?? reference.chunkId,\n\t\treference.locatorLabel,\n\t\treference.contextLabel,\n\t\treference.provenanceLabel\n\t]\n\t\t.filter((value): value is string => Boolean(value && value.length > 0))\n\t\t.filter(\n\t\t\t(value, index, values) =>\n\t\t\t\tvalues.findIndex((entry) => entry === value) === index\n\t\t)\n\t\t.join(' · ');\n\nconst buildGroundedAnswerCitationDetail = (\n\treference: RAGGroundingReference\n): RAGGroundedAnswerCitationDetail => ({\n\tcontextLabel: reference.contextLabel,\n\tevidenceLabel: buildGroundingReferenceEvidenceLabel(reference),\n\tevidenceSummary: buildGroundingReferenceEvidenceSummary(reference),\n\texcerpt:\n\t\tselectPreferredExcerpt(\n\t\t\treference.excerpts,\n\t\t\tgetContextNumber(reference.metadata?.sectionChunkCount)\n\t\t).excerpt || reference.excerpt,\n\texcerpts: reference.excerpts,\n\texcerptSelection: reference.excerptSelection,\n\tlabel: reference.label,\n\tlocatorLabel: reference.locatorLabel,\n\tnumber: reference.number,\n\tprovenanceLabel: reference.provenanceLabel,\n\tsource: reference.source,\n\ttitle: reference.title\n});\n\nexport const buildRAGCitationReferenceMap = (\n\tcitations: RAGCitation[]\n): RAGCitationReferenceMap =>\n\tObject.fromEntries(\n\t\tcitations.map((citation, index) => [citation.chunkId, index + 1])\n\t);\n\nexport const buildRAGCitations = (sources: RAGSource[]) => {\n\tconst unique = new Map<string, RAGCitation>();\n\n\tfor (const source of sources) {\n\t\tconst key = source.chunkId;\n\t\tconst existing = unique.get(key);\n\t\tconst hasBetterExisting =\n\t\t\texisting !== undefined && existing.score >= source.score;\n\t\tif (hasBetterExisting) continue;\n\t\tconst excerpts = buildGroundingChunkExcerpts(sources, source.chunkId);\n\t\tconst excerptSelection = selectPreferredExcerpt(\n\t\t\texcerpts,\n\t\t\tgetContextNumber(source.metadata?.sectionChunkCount)\n\t\t);\n\n\t\tunique.set(key, {\n\t\t\tchunkId: source.chunkId,\n\t\t\tcontextLabel:\n\t\t\t\tsource.labels?.contextLabel ??\n\t\t\t\tbuildContextLabel(source.metadata),\n\t\t\texcerpt: excerptSelection.excerpt || buildExcerpt(source.text),\n\t\t\texcerpts,\n\t\t\texcerptSelection,\n\t\t\tkey,\n\t\t\tlabel: buildSourceLabel(source),\n\t\t\tlocatorLabel:\n\t\t\t\tsource.labels?.locatorLabel ??\n\t\t\t\tbuildLocatorLabel(source.metadata, source.source, source.title),\n\t\t\tmetadata: source.metadata,\n\t\t\tprovenanceLabel:\n\t\t\t\tsource.labels?.provenanceLabel ??\n\t\t\t\tbuildProvenanceLabel(source.metadata),\n\t\t\tscore: source.score,\n\t\t\tsource: source.source,\n\t\t\ttext: source.text,\n\t\t\ttitle: source.title\n\t\t});\n\t}\n\n\treturn [...unique.values()].sort((left, right) => {\n\t\tif (right.score !== left.score) {\n\t\t\treturn right.score - left.score;\n\t\t}\n\n\t\treturn left.label.localeCompare(right.label);\n\t});\n};\n\nexport const buildRAGGroundedAnswer = (\n\tcontent: string,\n\tsources: RAGSource[]\n): RAGGroundedAnswer => {\n\tconst references = buildRAGGroundingReferences(sources);\n\tconst sectionSummaries = buildRAGGroundedAnswerSectionSummaries(references);\n\tconst referenceMap = new Map(\n\t\treferences.map((reference) => [reference.number, reference])\n\t);\n\tconst parts: RAGGroundedAnswer['parts'] = [];\n\tconst ungroundedReferenceNumbers = new Set<number>();\n\tconst citationPattern = /\\[(\\d+(?:\\s*,\\s*\\d+)*)\\]/g;\n\tlet cursor = 0;\n\n\tfor (const match of content.matchAll(citationPattern)) {\n\t\tconst raw = match[0];\n\t\tconst numbers = (match[1] ?? '')\n\t\t\t.split(',')\n\t\t\t.map((value) => Number.parseInt(value.trim(), 10))\n\t\t\t.filter((value) => Number.isInteger(value) && value > 0);\n\t\tconst start = match.index ?? cursor;\n\t\tif (start > cursor) {\n\t\t\tparts.push({\n\t\t\t\ttext: content.slice(cursor, start),\n\t\t\t\ttype: 'text'\n\t\t\t});\n\t\t}\n\n\t\tconst resolvedReferences = numbers\n\t\t\t.map((number) => referenceMap.get(number))\n\t\t\t.filter((reference): reference is RAGGroundingReference =>\n\t\t\t\tBoolean(reference)\n\t\t\t);\n\t\tfor (const number of numbers) {\n\t\t\tif (!referenceMap.has(number)) {\n\t\t\t\tungroundedReferenceNumbers.add(number);\n\t\t\t}\n\t\t}\n\t\tconst unresolvedNumbers = numbers.filter(\n\t\t\t(number) => !referenceMap.has(number)\n\t\t);\n\n\t\tparts.push({\n\t\t\treferenceNumbers: numbers,\n\t\t\treferenceDetails: resolvedReferences.map(\n\t\t\t\tbuildGroundedAnswerCitationDetail\n\t\t\t),\n\t\t\treferences: resolvedReferences,\n\t\t\ttext: raw,\n\t\t\ttype: 'citation',\n\t\t\tunresolvedReferenceNumbers: unresolvedNumbers\n\t\t});\n\t\tcursor = start + raw.length;\n\t}\n\n\tif (cursor < content.length || parts.length === 0) {\n\t\tparts.push({\n\t\t\ttext: content.slice(cursor),\n\t\t\ttype: 'text'\n\t\t});\n\t}\n\n\tconst hasCitations = parts.some((part) => part.type === 'citation');\n\tconst coverage: RAGGroundedAnswer['coverage'] = !hasCitations\n\t\t? 'ungrounded'\n\t\t: ungroundedReferenceNumbers.size === 0\n\t\t\t? 'grounded'\n\t\t\t: references.length > 0\n\t\t\t\t? 'partial'\n\t\t\t\t: 'ungrounded';\n\n\treturn {\n\t\tcontent,\n\t\tcoverage,\n\t\texcerptModeCounts: buildExcerptModeCounts([\n\t\t\t...references,\n\t\t\t...sectionSummaries\n\t\t]),\n\t\thasCitations,\n\t\tparts,\n\t\treferences,\n\t\tsectionSummaries,\n\t\tungroundedReferenceNumbers: [...ungroundedReferenceNumbers].sort(\n\t\t\t(left, right) => left - right\n\t\t)\n\t};\n};\n\nexport const buildRAGGroundedAnswerSectionSummaries = (\n\treferences: RAGGroundingReference[]\n): RAGGroundedAnswerSectionSummary[] => {\n\tconst groups = new Map<string, RAGGroundedAnswerSectionSummary>();\n\n\tfor (const reference of references) {\n\t\tconst key = buildGroundingSectionKey(reference);\n\t\tconst existing = groups.get(key);\n\t\tif (!existing) {\n\t\t\tconst excerpts = reference.excerpts\n\t\t\t\t? {\n\t\t\t\t\t\tchunkExcerpt: reference.excerpts.chunkExcerpt,\n\t\t\t\t\t\tsectionExcerpt: reference.excerpts.sectionExcerpt,\n\t\t\t\t\t\twindowExcerpt: reference.excerpts.windowExcerpt\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\t\t\tgroups.set(key, {\n\t\t\t\tchunkIds: [reference.chunkId],\n\t\t\t\tcontextLabel: reference.contextLabel,\n\t\t\t\tcount: 1,\n\t\t\t\texcerpt:\n\t\t\t\t\tselectPreferredExcerpt(\n\t\t\t\t\t\texcerpts,\n\t\t\t\t\t\tgetContextNumber(reference.metadata?.sectionChunkCount)\n\t\t\t\t\t).excerpt ||\n\t\t\t\t\texcerpts?.sectionExcerpt ||\n\t\t\t\t\treference.excerpt,\n\t\t\t\texcerpts,\n\t\t\t\texcerptSelection: reference.excerptSelection,\n\t\t\t\tkey,\n\t\t\t\tlabel: key,\n\t\t\t\tlocatorLabel: reference.locatorLabel,\n\t\t\t\tprovenanceLabel: reference.provenanceLabel,\n\t\t\t\treferenceNumbers: [reference.number],\n\t\t\t\treferences: [reference],\n\t\t\t\tsummary:\n\t\t\t\t\tbuildGroundingSectionSummaryLine(reference) ||\n\t\t\t\t\treference.label ||\n\t\t\t\t\treference.chunkId\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\texisting.count += 1;\n\t\tif (!existing.chunkIds.includes(reference.chunkId)) {\n\t\t\texisting.chunkIds.push(reference.chunkId);\n\t\t}\n\t\tif (!existing.referenceNumbers.includes(reference.number)) {\n\t\t\texisting.referenceNumbers.push(reference.number);\n\t\t}\n\t\texisting.references.push(reference);\n\t\tif (!existing.contextLabel && reference.contextLabel) {\n\t\t\texisting.contextLabel = reference.contextLabel;\n\t\t}\n\t\tif (!existing.locatorLabel && reference.locatorLabel) {\n\t\t\texisting.locatorLabel = reference.locatorLabel;\n\t\t}\n\t\tif (!existing.provenanceLabel && reference.provenanceLabel) {\n\t\t\texisting.provenanceLabel = reference.provenanceLabel;\n\t\t}\n\t\tif (!existing.excerpts && reference.excerpts) {\n\t\t\texisting.excerpts = {\n\t\t\t\tchunkExcerpt: reference.excerpts.chunkExcerpt,\n\t\t\t\tsectionExcerpt: reference.excerpts.sectionExcerpt,\n\t\t\t\twindowExcerpt: reference.excerpts.windowExcerpt\n\t\t\t};\n\t\t\texisting.excerpt = reference.excerpts.sectionExcerpt;\n\t\t}\n\t\tif (!existing.excerptSelection && reference.excerptSelection) {\n\t\t\texisting.excerptSelection = reference.excerptSelection;\n\t\t}\n\t}\n\n\treturn [...groups.values()]\n\t\t.map((group) => ({\n\t\t\t...group,\n\t\t\treferenceNumbers: [...group.referenceNumbers].sort(\n\t\t\t\t(left, right) => left - right\n\t\t\t),\n\t\t\treferences: group.references\n\t\t\t\t.slice()\n\t\t\t\t.sort((left, right) => left.number - right.number)\n\t\t}))\n\t\t.sort((left, right) => {\n\t\t\tconst leftFirst =\n\t\t\t\tleft.referenceNumbers[0] ?? Number.POSITIVE_INFINITY;\n\t\t\tconst rightFirst =\n\t\t\t\tright.referenceNumbers[0] ?? Number.POSITIVE_INFINITY;\n\t\t\tif (leftFirst !== rightFirst) {\n\t\t\t\treturn leftFirst - rightFirst;\n\t\t\t}\n\t\t\treturn left.label.localeCompare(right.label);\n\t\t});\n};\n\nexport const buildRAGGroundingReferences = (sources: RAGSource[]) => {\n\tconst citations = buildRAGCitations(sources);\n\tconst citationReferenceMap = buildRAGCitationReferenceMap(citations);\n\n\treturn citations.map<RAGGroundingReference>((citation) => {\n\t\tconst excerpts = buildGroundingChunkExcerpts(sources, citation.chunkId);\n\t\tconst excerptSelection = selectPreferredExcerpt(\n\t\t\texcerpts,\n\t\t\tgetContextNumber(citation.metadata?.sectionChunkCount)\n\t\t);\n\t\treturn {\n\t\t\tchunkId: citation.chunkId,\n\t\t\tcontextLabel:\n\t\t\t\tcitation.contextLabel ?? buildContextLabel(citation.metadata),\n\t\t\texcerpt:\n\t\t\t\texcerptSelection.excerpt ||\n\t\t\t\texcerpts?.chunkExcerpt ||\n\t\t\t\tbuildExcerpt(citation.text),\n\t\t\texcerpts,\n\t\t\texcerptSelection,\n\t\t\tlabel: citation.label,\n\t\t\tlocatorLabel:\n\t\t\t\tcitation.locatorLabel ??\n\t\t\t\tbuildLocatorLabel(\n\t\t\t\t\tcitation.metadata,\n\t\t\t\t\tcitation.source,\n\t\t\t\t\tcitation.title\n\t\t\t\t),\n\t\t\tmetadata: citation.metadata,\n\t\t\tnumber: citationReferenceMap[citation.chunkId] ?? 0,\n\t\t\tprovenanceLabel:\n\t\t\t\tcitation.provenanceLabel ??\n\t\t\t\tbuildProvenanceLabel(citation.metadata),\n\t\t\tscore: citation.score,\n\t\t\tsource: citation.source,\n\t\t\ttext: citation.text,\n\t\t\ttitle: citation.title\n\t\t};\n\t});\n};\n",
|
|
10
|
-
"import type {\n\tRAGAdminActionPresentation,\n\tRAGAdminActionRecord,\n\tRAGAdminJobPresentation,\n\tRAGAdminJobRecord,\n\tAIMessage,\n\tRAGAnswerGroundingCaseSnapshotPresentation,\n\tRAGAnswerGroundingEvaluationCaseDiff,\n\tRAGAnswerGroundingEvaluationHistory,\n\tRAGAnswerGroundingEntityQualitySummary,\n\tRAGAnswerGroundingEntityQualityView,\n\tRAGAnswerGroundingEvaluationResponse,\n\tRAGCorpusHealth,\n\tRAGCorpusHealthPresentation,\n\tRAGExtractorReadiness,\n\tRAGReadinessPresentation,\n\tRAGGroundingOverviewPresentation,\n\tRAGGroundingProviderCaseComparisonPresentation,\n\tRAGGroundingProviderOverviewPresentation,\n\tRAGGroundingProviderPresentation,\n\tRAGComparisonOverviewPresentation,\n\tRAGComparisonPresentation,\n\tRAGChunkGraph,\n\tRAGChunkExcerpts,\n\tRAGExcerptModeCounts,\n\tRAGExcerptPromotionReason,\n\tRAGExcerptSelection,\n\tRAGChunkGraphEdge,\n\tRAGChunkGraphNavigation,\n\tRAGChunkGraphNode,\n\tRAGChunkGraphSectionGroup,\n\tRAGChunkStructure,\n\tRAGDocumentChunkPreview,\n\tRAGLabelValueRow,\n\tRAGRerankerComparisonEntry,\n\tRAGRetrievalComparison,\n\tRAGRetrievalComparisonEntry,\n\tRAGRetrievalTraceHistoryWindow,\n\tRAGRetrievalTraceStep,\n\tRAGRetrievalTrace,\n\tRAGHybridRetrievalMode,\n\tRAGSourceBalanceStrategy,\n\tRAGQualityOverviewPresentation,\n\tRAGSectionRetrievalDiagnostic,\n\tRAGEvaluationCaseDiff,\n\tRAGEvaluationCaseTracePresentation,\n\tRAGEvaluationEntityQualitySummary,\n\tRAGEvaluationEntityQualityView,\n\tRAGEvaluationHistory,\n\tRAGAnswerGroundingHistoryPresentation,\n\tRAGEvaluationResponse,\n\tRAGEvaluationHistoryPresentation,\n\tRAGEvaluationHistoryStore,\n\tRAGEvaluationSuiteSnapshotHistory,\n\tRAGEvaluationSuiteSnapshotHistoryPresentation,\n\tRAGEvaluationSuiteSnapshotPresentation,\n\tRAGEntityQualityPresentation,\n\tRAGEntityQualityViewPresentation,\n\tRAGRerankerComparison,\n\tRAGAnswerWorkflowState,\n\tRAGRetrievalTracePresentation,\n\tRAGSource,\n\tRAGSourceLabels,\n\tRAGSourceGroup,\n\tRAGSourceSummary,\n\tRAGStreamStage,\n\tRAGSyncOverviewPresentation,\n\tRAGSyncSourcePresentation,\n\tRAGSyncSourceRecord,\n\tRAGSyncSourceRunPresentation\n} from '../../../types/ai';\nimport {\n\tbuildRAGCitationReferenceMap,\n\tbuildRAGCitations,\n\tbuildRAGGroundedAnswer,\n\tbuildRAGGroundedAnswerSectionSummaries,\n\tbuildRAGGroundingReferences\n} from './grounding';\nimport {\n\tbuildRAGAnswerGroundingEntityQualityView,\n\tbuildRAGEvaluationEntityQualityView\n} from './quality';\n\nexport {\n\tbuildRAGCitationReferenceMap,\n\tbuildRAGCitations,\n\tbuildRAGGroundedAnswer,\n\tbuildRAGGroundedAnswerSectionSummaries,\n\tbuildRAGGroundingReferences\n};\n\nconst buildSourceGroupKey = (source: RAGSource) =>\n\tsource.source ?? source.title ?? source.chunkId;\n\nconst buildSourceLabel = (source: RAGSource) =>\n\tsource.source ?? source.title ?? source.chunkId;\n\nconst getContextNumber = (value: unknown) =>\n\ttypeof value === 'number' && Number.isFinite(value) ? value : undefined;\n\nconst getContextString = (value: unknown) =>\n\ttypeof value === 'string' && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n\nconst isRAGRetrievalTrace = (value: unknown): value is RAGRetrievalTrace => {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\tconst candidate = value as Record<string, unknown>;\n\n\treturn (\n\t\ttypeof candidate.query === 'string' &&\n\t\ttypeof candidate.transformedQuery === 'string' &&\n\t\tArray.isArray(candidate.variantQueries) &&\n\t\tArray.isArray(candidate.steps)\n\t);\n};\n\nconst formatTimestampLabel = (value: unknown) => {\n\tconst timestamp =\n\t\ttypeof value === 'number' && Number.isFinite(value)\n\t\t\t? value\n\t\t\t: typeof value === 'string'\n\t\t\t\t? Date.parse(value)\n\t\t\t\t: Number.NaN;\n\tif (!Number.isFinite(timestamp)) {\n\t\treturn undefined;\n\t}\n\n\treturn new Date(timestamp).toLocaleString('en-US', {\n\t\tdateStyle: 'medium',\n\t\ttimeStyle: 'short'\n\t});\n};\n\nconst formatRAGTraceValue = (value: unknown): string => {\n\tif (typeof value === 'string') return value;\n\tif (typeof value === 'number' || typeof value === 'boolean') {\n\t\treturn String(value);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.join(', ');\n\t}\n\tif (value && typeof value === 'object') {\n\t\treturn JSON.stringify(value);\n\t}\n\treturn 'n/a';\n};\n\nconst formatLeadContinuityCue = (value: unknown) => {\n\tconst cue = getContextString(value);\n\tswitch (cue) {\n\t\tcase 'immediate_follow_up':\n\t\t\treturn 'Immediate follow-up';\n\t\tcase 'near_follow_up':\n\t\t\treturn 'Near follow-up';\n\t\tcase 'close_follow_up':\n\t\t\treturn 'Close follow-up';\n\t\tcase 'delayed_follow_up':\n\t\t\treturn 'Delayed follow-up';\n\t\tcase 'immediate_prior':\n\t\t\treturn 'Immediate prior segment';\n\t\tcase 'near_prior':\n\t\t\treturn 'Near prior segment';\n\t\tcase 'close_prior':\n\t\t\treturn 'Close prior segment';\n\t\tcase 'delayed_prior':\n\t\t\treturn 'Delayed prior segment';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n};\n\nconst formatLeadSpeakerAttributionCue = (value: unknown) => {\n\tconst cue = getContextString(value);\n\tswitch (cue) {\n\t\tcase 'quoted_match':\n\t\t\treturn 'Quoted speaker match';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n};\n\nconst formatLeadChannelAttributionCue = (value: unknown) => {\n\tconst cue = getContextString(value);\n\tswitch (cue) {\n\t\tcase 'quoted_match':\n\t\t\treturn 'Quoted channel match';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n};\n\nconst formatLeadMediaCueSummary = (input?: {\n\tleadSpeakerCue?: string;\n\tleadSpeakerAttributionCue?: string;\n\tleadChannelCue?: string;\n\tleadChannelAttributionCue?: string;\n\tleadContinuityCue?: string;\n}) => {\n\tconst parts = [\n\t\tinput?.leadSpeakerCue ? `speaker ${input.leadSpeakerCue}` : undefined,\n\t\tinput?.leadSpeakerAttributionCue === 'quoted_match'\n\t\t\t? 'quoted speaker match'\n\t\t\t: undefined,\n\t\tinput?.leadChannelCue ? `channel ${input.leadChannelCue}` : undefined,\n\t\tinput?.leadChannelAttributionCue === 'quoted_match'\n\t\t\t? 'quoted channel match'\n\t\t\t: undefined,\n\t\tformatLeadContinuityCue(input?.leadContinuityCue)\n\t].filter(\n\t\t(value): value is string =>\n\t\t\ttypeof value === 'string' && value.length > 0\n\t);\n\n\treturn parts.length > 0 ? parts.join(' · ') : 'none';\n};\n\nconst formatRAGTraceMetadataRow = (\n\tkey: string,\n\tvalue: unknown\n): RAGLabelValueRow => ({\n\tlabel:\n\t\tkey === 'sqliteQueryMode'\n\t\t\t? 'SQLite query mode'\n\t\t\t: key === 'postgresQueryMode'\n\t\t\t\t? 'Postgres query mode'\n\t\t\t\t: key === 'sqliteQueryPushdownMode'\n\t\t\t\t\t? 'SQLite pushdown mode'\n\t\t\t\t\t: key === 'postgresQueryPushdownMode'\n\t\t\t\t\t\t? 'Postgres pushdown mode'\n\t\t\t\t\t\t: key === 'sqliteQueryPushdownApplied'\n\t\t\t\t\t\t\t? 'SQLite pushdown applied'\n\t\t\t\t\t\t\t: key === 'postgresQueryPushdownApplied'\n\t\t\t\t\t\t\t\t? 'Postgres pushdown applied'\n\t\t\t\t\t\t\t\t: key === 'sqliteQueryPushdownClauseCount'\n\t\t\t\t\t\t\t\t\t? 'SQLite pushdown clauses'\n\t\t\t\t\t\t\t\t\t: key === 'postgresQueryPushdownClauseCount'\n\t\t\t\t\t\t\t\t\t\t? 'Postgres pushdown clauses'\n\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryPushdownCoverageRatio'\n\t\t\t\t\t\t\t\t\t\t\t? 'SQLite pushdown coverage'\n\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryPushdownCoverageRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres pushdown coverage'\n\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryTotalFilterClauseCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite total filter clauses'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryTotalFilterClauseCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres total filter clauses'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryJsRemainderClauseCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite JS remainder clauses'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryMultiplierUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite query multiplier'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryCandidateLimitUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite candidate limit'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryMaxBackfillsUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite max backfills'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryMinResultsUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite min results'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryJsRemainderClauseCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres JS remainder clauses'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryMultiplierUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres query multiplier'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryCandidateLimitUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres candidate limit'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryMaxBackfillsUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres max backfills'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryMinResultsUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres min results'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryJsRemainderRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite JS remainder share'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryJsRemainderRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres JS remainder share'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryFilteredCandidates'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite filtered candidates'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryFilteredCandidates'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres filtered candidates'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryInitialSearchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite initial searchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryInitialSearchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres initial searchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryFinalSearchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite final searchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryFinalSearchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres final searchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQuerySearchExpansionRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite search expansion'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQuerySearchExpansionRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres search expansion'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryBackfillCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite backfill count'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryBackfillLimitReached'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite backfill limit reached'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryMinResultsSatisfied'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite min results satisfied'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryBackfillCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres backfill count'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryBackfillLimitReached'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres backfill limit reached'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryMinResultsSatisfied'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres min results satisfied'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryReturnedCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite returned hits'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryReturnedCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres returned hits'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryCandidateYieldRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite candidate yield'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryCandidateYieldRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres candidate yield'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryTopKFillRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite topK fill rate'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryTopKFillRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres topK fill rate'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryUnderfilledTopK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite underfilled topK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryUnderfilledTopK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres underfilled topK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryCandidateBudgetExhausted'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite candidate budget exhausted'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryCandidateBudgetExhausted'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres candidate budget exhausted'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryCandidateCoverage'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite candidate coverage'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryCandidateCoverage'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres candidate coverage'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'leadSpeakerCue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Lead speaker cue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'leadSpeakerAttributionCue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Lead speaker attribution'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'leadChannelAttributionCue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Lead channel attribution'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'leadChannelCue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Lead channel cue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'leadContinuityCue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Lead continuity cue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key,\n\tvalue:\n\t\tkey === 'sourceAwareChunkReason'\n\t\t\t? (formatSourceAwareChunkReason(value) ??\n\t\t\t\tformatRAGTraceValue(value))\n\t\t\t: key === 'leadSpeakerAttributionCue'\n\t\t\t\t? (formatLeadSpeakerAttributionCue(value) ??\n\t\t\t\t\tformatRAGTraceValue(value))\n\t\t\t\t: key === 'leadChannelAttributionCue'\n\t\t\t\t\t? (formatLeadChannelAttributionCue(value) ??\n\t\t\t\t\t\tformatRAGTraceValue(value))\n\t\t\t\t\t: key === 'leadContinuityCue'\n\t\t\t\t\t\t? (formatLeadContinuityCue(value) ??\n\t\t\t\t\t\t\tformatRAGTraceValue(value))\n\t\t\t\t\t\t: formatRAGTraceValue(value)\n});\n\nexport const buildRAGRetrievalTracePresentation = (\n\ttrace?: RAGRetrievalTrace\n): RAGRetrievalTracePresentation => {\n\tif (!trace) {\n\t\treturn {\n\t\t\tdetails: [],\n\t\t\tstats: [],\n\t\t\tsteps: []\n\t\t};\n\t}\n\n\tconst stats: RAGLabelValueRow[] = [\n\t\t{ label: 'Mode', value: trace.mode },\n\t\t{ label: 'Final Results', value: String(trace.resultCounts.final) },\n\t\t{\n\t\t\tlabel: 'Vector Candidates',\n\t\t\tvalue: String(trace.resultCounts.vector)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Lexical Candidates',\n\t\t\tvalue: String(trace.resultCounts.lexical)\n\t\t}\n\t];\n\tconst details: RAGLabelValueRow[] = [\n\t\t{ label: 'Transformed query', value: trace.transformedQuery },\n\t\t...(trace.queryTransformLabel || trace.queryTransformProvider\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Query transform',\n\t\t\t\t\t\tvalue:\n\t\t\t\t\t\t\ttrace.queryTransformLabel ??\n\t\t\t\t\t\t\ttrace.queryTransformProvider ??\n\t\t\t\t\t\t\t'configured'\n\t\t\t\t\t},\n\t\t\t\t\t...(trace.queryTransformReason\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: 'Query transform reason',\n\t\t\t\t\t\t\t\t\tvalue: trace.queryTransformReason\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: [])\n\t\t\t\t]\n\t\t\t: []),\n\t\t{\n\t\t\tlabel: 'Variant queries',\n\t\t\tvalue:\n\t\t\t\ttrace.variantQueries.length > 0\n\t\t\t\t\t? trace.variantQueries.join(' · ')\n\t\t\t\t\t: 'none'\n\t\t},\n\t\t...(trace.requestedMode && trace.requestedMode !== trace.mode\n\t\t\t? [{ label: 'Requested mode', value: trace.requestedMode }]\n\t\t\t: []),\n\t\t...(trace.routingLabel || trace.routingProvider\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Routing decision',\n\t\t\t\t\t\tvalue:\n\t\t\t\t\t\t\ttrace.routingLabel ??\n\t\t\t\t\t\t\ttrace.routingProvider ??\n\t\t\t\t\t\t\t'configured'\n\t\t\t\t\t},\n\t\t\t\t\t...(trace.routingReason\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: 'Routing reason',\n\t\t\t\t\t\t\t\t\tvalue: trace.routingReason\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: [])\n\t\t\t\t]\n\t\t\t: []),\n\t\t{ label: 'Candidate topK', value: String(trace.candidateTopK) },\n\t\t{ label: 'Lexical topK', value: String(trace.lexicalTopK) }\n\t];\n\tconst steps = trace.steps.map((step) => ({\n\t\tcount: step.count,\n\t\tlabel: step.label,\n\t\trows: [\n\t\t\t{ label: 'stage', value: step.stage },\n\t\t\t...(typeof step.count === 'number'\n\t\t\t\t? [{ label: 'count', value: String(step.count) }]\n\t\t\t\t: []),\n\t\t\t...(typeof step.durationMs === 'number'\n\t\t\t\t? [{ label: 'durationMs', value: String(step.durationMs) }]\n\t\t\t\t: []),\n\t\t\t...Object.entries(step.metadata ?? {}).map(([key, value]) =>\n\t\t\t\tformatRAGTraceMetadataRow(key, value)\n\t\t\t)\n\t\t],\n\t\tstage: step.stage\n\t}));\n\n\treturn {\n\t\tdetails,\n\t\tstats,\n\t\tsteps\n\t};\n};\n\nconst formatCompactList = (values?: string[]) =>\n\tvalues && values.length > 0 ? values.join(', ') : 'none';\n\nconst formatCoverageMap = (entries?: Record<string, number>) => {\n\tif (!entries) {\n\t\treturn 'none';\n\t}\n\n\tconst values = Object.entries(entries);\n\treturn values.length > 0\n\t\t? values.map(([key, value]) => `${key} ${value}`).join(' · ')\n\t\t: 'none';\n};\n\nconst formatDurationLabel = (value?: number) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value)) {\n\t\treturn 'n/a';\n\t}\n\n\tif (value < 1000) {\n\t\treturn `${value}ms`;\n\t}\n\n\tif (value < 60000) {\n\t\treturn `${(value / 1000).toFixed(value >= 10000 ? 0 : 1)}s`;\n\t}\n\n\tif (value < 3600000) {\n\t\treturn `${(value / 60000).toFixed(value >= 600000 ? 0 : 1)}m`;\n\t}\n\n\treturn `${(value / 3600000).toFixed(value >= 36000000 ? 0 : 1)}h`;\n};\n\nconst formatDateLabel = (value?: number) =>\n\ttypeof value === 'number' && Number.isFinite(value)\n\t\t? new Date(value).toLocaleString('en-US')\n\t\t: 'n/a';\n\nconst formatAgeLabel = (value?: number) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value)) {\n\t\treturn 'n/a';\n\t}\n\n\tif (value < 1000) {\n\t\treturn `${Math.round(value)}ms`;\n\t}\n\n\tif (value < 60000) {\n\t\treturn `${(value / 1000).toFixed(value >= 10000 ? 0 : 1)}s`;\n\t}\n\n\tif (value < 3600000) {\n\t\treturn `${(value / 60000).toFixed(value >= 600000 ? 0 : 1)}m`;\n\t}\n\n\tif (value < 86400000) {\n\t\treturn `${(value / 3600000).toFixed(value >= 36000000 ? 0 : 1)}h`;\n\t}\n\n\treturn `${(value / 86400000).toFixed(value >= 864000000 ? 0 : 1)}d`;\n};\n\nconst formatSourceAwareChunkReason = (value: unknown) => {\n\tconst reason = getContextString(value);\n\tif (reason === 'section_boundary') {\n\t\treturn 'Chunk boundary section';\n\t}\n\tif (reason === 'size_limit') {\n\t\treturn 'Chunk boundary size limit';\n\t}\n\tif (reason === 'source_native_unit') {\n\t\treturn 'Chunk boundary source-native unit';\n\t}\n\treturn undefined;\n};\n\nconst buildSourceAwareUnitScopeLabel = (metadata?: Record<string, unknown>) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst sectionKind = getContextString(metadata.sectionKind);\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath\n\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\tconst sectionTitle =\n\t\tgetContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n\tconst pdfTextKind = getContextString(metadata.pdfTextKind);\n\tconst officeBlockKind = getContextString(metadata.officeBlockKind);\n\tconst sheetName = getContextString(metadata.sheetName);\n\tconst spreadsheetTableLabel = formatSpreadsheetTableLabel(\n\t\tgetContextNumber(metadata.spreadsheetTableIndex),\n\t\tgetContextNumber(metadata.spreadsheetTableCount)\n\t);\n\tconst slideTitle = getContextString(metadata.slideTitle);\n\tconst slideNumber =\n\t\tgetContextNumber(metadata.slideNumber) ??\n\t\t(typeof metadata.slideIndex === 'number'\n\t\t\t? metadata.slideIndex + 1\n\t\t\t: undefined);\n\n\tif (\n\t\tsectionPath.length > 0 &&\n\t\t(sectionKind === 'markdown_heading' ||\n\t\t\tsectionKind === 'html_heading' ||\n\t\t\tsectionKind === 'office_heading' ||\n\t\t\tsectionKind === undefined)\n\t) {\n\t\treturn `Source-aware section ${sectionPath.join(' > ')}`;\n\t}\n\n\tif (sectionKind === 'pdf_block') {\n\t\tif (pdfTextKind === 'table_like' && sectionTitle) {\n\t\t\treturn `Source-aware PDF table block ${sectionTitle}`;\n\t\t}\n\t\tif (sectionTitle) {\n\t\t\treturn `Source-aware PDF block ${sectionTitle}`;\n\t\t}\n\t\treturn 'Source-aware PDF block';\n\t}\n\n\tif (sectionKind === 'office_block') {\n\t\tif (officeBlockKind && sectionTitle) {\n\t\t\treturn `Source-aware office ${officeBlockKind} block ${sectionTitle}`;\n\t\t}\n\t\tif (sectionTitle) {\n\t\t\treturn `Source-aware office block ${sectionTitle}`;\n\t\t}\n\t\treturn 'Source-aware office block';\n\t}\n\n\tif (\n\t\tsectionKind === 'spreadsheet_rows' ||\n\t\t(sectionKind === undefined &&\n\t\t\t(sheetName ||\n\t\t\t\tspreadsheetTableLabel ||\n\t\t\t\tgetContextNumber(metadata.spreadsheetRowStart) !== undefined ||\n\t\t\t\tgetContextNumber(metadata.spreadsheetRowEnd) !== undefined))\n\t) {\n\t\tif (sheetName && spreadsheetTableLabel) {\n\t\t\treturn `Source-aware spreadsheet ${sheetName} ${spreadsheetTableLabel}`;\n\t\t}\n\t\tif (sheetName) {\n\t\t\treturn `Source-aware spreadsheet ${sheetName}`;\n\t\t}\n\t\treturn 'Source-aware spreadsheet';\n\t}\n\n\tif (sectionKind === 'presentation_slide') {\n\t\tif (slideNumber && slideTitle) {\n\t\t\treturn `Source-aware slide ${slideNumber} ${slideTitle}`;\n\t\t}\n\t\tif (slideTitle) {\n\t\t\treturn `Source-aware slide ${slideTitle}`;\n\t\t}\n\t\tif (slideNumber) {\n\t\t\treturn `Source-aware slide ${slideNumber}`;\n\t\t}\n\t\treturn 'Source-aware slide';\n\t}\n\n\treturn undefined;\n};\n\nconst buildSyncOverviewLatestRow = (sources: RAGSyncSourceRecord[]) => {\n\tconst latest = [...sources]\n\t\t.filter(\n\t\t\t(record) =>\n\t\t\t\ttypeof record.lastSuccessfulSyncAt === 'number' ||\n\t\t\t\ttypeof record.lastSyncedAt === 'number'\n\t\t)\n\t\t.sort(\n\t\t\t(left, right) =>\n\t\t\t\t(right.lastSuccessfulSyncAt ?? right.lastSyncedAt ?? 0) -\n\t\t\t\t(left.lastSuccessfulSyncAt ?? left.lastSyncedAt ?? 0)\n\t\t)[0];\n\n\tif (!latest) {\n\t\treturn {\n\t\t\tlabel: 'Latest sync',\n\t\t\tvalue: 'No completed run yet'\n\t\t};\n\t}\n\n\treturn {\n\t\tlabel: 'Latest sync',\n\t\tvalue: [\n\t\t\tlatest.label,\n\t\t\ttypeof latest.documentCount === 'number'\n\t\t\t\t? `${latest.documentCount} docs`\n\t\t\t\t: '',\n\t\t\ttypeof latest.chunkCount === 'number'\n\t\t\t\t? `${latest.chunkCount} chunks`\n\t\t\t\t: '',\n\t\t\ttypeof latest.lastSyncDurationMs === 'number'\n\t\t\t\t? formatDurationLabel(latest.lastSyncDurationMs)\n\t\t\t\t: '',\n\t\t\ttypeof latest.lastSuccessfulSyncAt === 'number'\n\t\t\t\t? formatDateLabel(latest.lastSuccessfulSyncAt)\n\t\t\t\t: typeof latest.lastSyncedAt === 'number'\n\t\t\t\t\t? formatDateLabel(latest.lastSyncedAt)\n\t\t\t\t\t: ''\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' · ')\n\t};\n};\n\nconst formatAdminActionLabel = (\n\tvalue: RAGAdminActionRecord['action'] | RAGAdminJobRecord['action']\n) => value.replaceAll('_', ' ');\n\nconst buildAdminTimingLabel = (input: {\n\telapsedMs?: number;\n\tstartedAt: number;\n}) =>\n\ttypeof input.elapsedMs === 'number'\n\t\t? formatDurationLabel(input.elapsedMs)\n\t\t: formatDateLabel(input.startedAt);\n\nexport const buildRAGAdminJobPresentation = (\n\tjob: RAGAdminJobRecord\n): RAGAdminJobPresentation => ({\n\tid: job.id,\n\taction: job.action,\n\tstatus: job.status,\n\tsummary: [\n\t\tjob.status.toUpperCase(),\n\t\tformatAdminActionLabel(job.action),\n\t\tjob.target,\n\t\tbuildAdminTimingLabel(job)\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' · '),\n\trows: [\n\t\t{ label: 'Action', value: formatAdminActionLabel(job.action) },\n\t\t{ label: 'Status', value: job.status },\n\t\t...(job.target ? [{ label: 'Target', value: job.target }] : []),\n\t\t{ label: 'Timing', value: buildAdminTimingLabel(job) },\n\t\t...(job.error ? [{ label: 'Error', value: job.error }] : [])\n\t]\n});\n\nexport const buildRAGAdminJobPresentations = (\n\tjobs?: RAGAdminJobRecord[]\n): RAGAdminJobPresentation[] =>\n\t(jobs ?? []).slice(0, 3).map(buildRAGAdminJobPresentation);\n\nexport const buildRAGAdminActionPresentation = (\n\taction: RAGAdminActionRecord\n): RAGAdminActionPresentation => ({\n\tid: action.id,\n\taction: action.action,\n\tstatus: action.status,\n\tsummary: [\n\t\taction.status.toUpperCase(),\n\t\tformatAdminActionLabel(action.action),\n\t\taction.documentId ?? action.target,\n\t\tbuildAdminTimingLabel(action)\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' · '),\n\trows: [\n\t\t{ label: 'Action', value: formatAdminActionLabel(action.action) },\n\t\t{ label: 'Status', value: action.status },\n\t\t...(action.documentId\n\t\t\t? [{ label: 'Document', value: action.documentId }]\n\t\t\t: action.target\n\t\t\t\t? [{ label: 'Target', value: action.target }]\n\t\t\t\t: []),\n\t\t{ label: 'Timing', value: buildAdminTimingLabel(action) },\n\t\t...(action.error ? [{ label: 'Error', value: action.error }] : [])\n\t]\n});\n\nexport const buildRAGAdminActionPresentations = (\n\tactions?: RAGAdminActionRecord[]\n): RAGAdminActionPresentation[] =>\n\t(actions ?? []).slice(0, 3).map(buildRAGAdminActionPresentation);\n\nconst buildRAGSyncSourceRunPresentations = (\n\tsource: RAGSyncSourceRecord\n): RAGSyncSourceRunPresentation[] => {\n\tif (!Array.isArray(source.metadata?.recentRuns)) {\n\t\treturn [];\n\t}\n\n\treturn (source.metadata.recentRuns as Array<Record<string, unknown>>)\n\t\t.slice(0, 3)\n\t\t.map((entry, index) => {\n\t\t\tconst trigger =\n\t\t\t\ttypeof entry.trigger === 'string' ? entry.trigger : 'sync';\n\t\t\tconst status =\n\t\t\t\ttypeof entry.status === 'string' ? entry.status : 'unknown';\n\t\t\tconst finishedAt =\n\t\t\t\ttypeof entry.finishedAt === 'number'\n\t\t\t\t\t? formatDateLabel(entry.finishedAt)\n\t\t\t\t\t: 'n/a';\n\t\t\tconst duration =\n\t\t\t\ttypeof entry.durationMs === 'number'\n\t\t\t\t\t? formatDurationLabel(entry.durationMs)\n\t\t\t\t\t: 'n/a';\n\t\t\tconst docs =\n\t\t\t\ttypeof entry.documentCount === 'number'\n\t\t\t\t\t? `${entry.documentCount} docs`\n\t\t\t\t\t: 'n/a';\n\t\t\tconst chunks =\n\t\t\t\ttypeof entry.chunkCount === 'number'\n\t\t\t\t\t? `${entry.chunkCount} chunks`\n\t\t\t\t\t: 'n/a';\n\t\t\tconst error =\n\t\t\t\ttypeof entry.error === 'string' && entry.error.length > 0\n\t\t\t\t\t? entry.error\n\t\t\t\t\t: undefined;\n\n\t\t\treturn {\n\t\t\t\tlabel: `Run ${index + 1}`,\n\t\t\t\tstatus,\n\t\t\t\tsummary: `${trigger} · ${status} · ${docs} · ${chunks} · ${duration} · ${finishedAt}`,\n\t\t\t\trows: [\n\t\t\t\t\t{ label: 'Trigger', value: trigger },\n\t\t\t\t\t{ label: 'Status', value: status },\n\t\t\t\t\t{ label: 'Output', value: `${docs} · ${chunks}` },\n\t\t\t\t\t{ label: 'Duration', value: duration },\n\t\t\t\t\t{ label: 'Finished', value: finishedAt },\n\t\t\t\t\t...(error ? [{ label: 'Error', value: error }] : [])\n\t\t\t\t]\n\t\t\t};\n\t\t});\n};\n\nexport const buildRAGSyncSourcePresentation = (\n\tsource: RAGSyncSourceRecord\n): RAGSyncSourcePresentation => {\n\tconst provider =\n\t\ttypeof source.metadata?.provider === 'string'\n\t\t\t? source.metadata.provider\n\t\t\t: undefined;\n\tconst accountMode =\n\t\ttypeof source.metadata?.accountMode === 'string'\n\t\t\t? source.metadata.accountMode\n\t\t\t: undefined;\n\tconst schedule =\n\t\ttypeof source.metadata?.schedule === 'string'\n\t\t\t? source.metadata.schedule\n\t\t\t: undefined;\n\tconst lastTrigger =\n\t\ttypeof source.metadata?.lastTrigger === 'string'\n\t\t\t? source.metadata.lastTrigger\n\t\t\t: undefined;\n\tconst liveReady =\n\t\ttypeof source.metadata?.liveReady === 'string'\n\t\t\t? source.metadata.liveReady\n\t\t\t: undefined;\n\tconst diagnosticSummary = source.diagnostics?.summary;\n\tconst diagnosticTags =\n\t\tsource.diagnostics?.entries.map((entry) =>\n\t\t\tentry.code\n\t\t\t\t.replace(/_/g, ' ')\n\t\t\t\t.replace(/\\b\\w/g, (letter) => letter.toUpperCase())\n\t\t) ?? [];\n\tconst retryGuidance = source.diagnostics?.retryGuidance;\n\n\treturn {\n\t\tid: source.id,\n\t\tlabel: source.label,\n\t\tkind: source.kind,\n\t\tstatus: source.status,\n\t\tsummary: [\n\t\t\tsource.kind,\n\t\t\tsource.status,\n\t\t\ttypeof source.documentCount === 'number'\n\t\t\t\t? `${source.documentCount} docs`\n\t\t\t\t: '',\n\t\t\ttypeof source.chunkCount === 'number'\n\t\t\t\t? `${source.chunkCount} chunks`\n\t\t\t\t: '',\n\t\t\ttypeof source.lastSyncDurationMs === 'number'\n\t\t\t\t? formatDurationLabel(source.lastSyncDurationMs)\n\t\t\t\t: '',\n\t\t\ttypeof source.lastSuccessfulSyncAt === 'number'\n\t\t\t\t? `last success ${formatDateLabel(source.lastSuccessfulSyncAt)}`\n\t\t\t\t: typeof source.lastSyncedAt === 'number'\n\t\t\t\t\t? `last sync ${formatDateLabel(source.lastSyncedAt)}`\n\t\t\t\t\t: ''\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' · '),\n\t\trows: [\n\t\t\t...(source.target\n\t\t\t\t? [{ label: 'Target', value: source.target }]\n\t\t\t\t: []),\n\t\t\t...(provider ? [{ label: 'Provider', value: provider }] : []),\n\t\t\t...(accountMode\n\t\t\t\t? [{ label: 'Account mode', value: accountMode }]\n\t\t\t\t: []),\n\t\t\t...(schedule ? [{ label: 'Schedule', value: schedule }] : []),\n\t\t\t...(lastTrigger\n\t\t\t\t? [{ label: 'Last trigger', value: lastTrigger }]\n\t\t\t\t: []),\n\t\t\t...(typeof source.lastSuccessfulSyncAt === 'number'\n\t\t\t\t? [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Last success',\n\t\t\t\t\t\t\tvalue: formatDateLabel(source.lastSuccessfulSyncAt)\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t\t...(typeof source.nextRetryAt === 'number'\n\t\t\t\t? [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Next retry',\n\t\t\t\t\t\t\tvalue: formatDateLabel(source.nextRetryAt)\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t\t...(source.lastError\n\t\t\t\t? [{ label: 'Last error', value: source.lastError }]\n\t\t\t\t: []),\n\t\t\t...(diagnosticSummary\n\t\t\t\t? [{ label: 'Diagnostics', value: diagnosticSummary }]\n\t\t\t\t: []),\n\t\t\t...(retryGuidance\n\t\t\t\t? [{ label: 'Retry guidance', value: retryGuidance.reason }]\n\t\t\t\t: [])\n\t\t],\n\t\ttags: [\n\t\t\tprovider,\n\t\t\taccountMode ? `mode ${accountMode}` : undefined,\n\t\t\tliveReady,\n\t\t\t...diagnosticTags\n\t\t].filter((value): value is string => Boolean(value)),\n\t\textendedSummary: diagnosticSummary ?? source.description ?? liveReady,\n\t\truns: buildRAGSyncSourceRunPresentations(source)\n\t};\n};\n\nexport const buildRAGSyncSourcePresentations = (\n\tsources?: RAGSyncSourceRecord[]\n): RAGSyncSourcePresentation[] =>\n\t(sources ?? []).map(buildRAGSyncSourcePresentation);\n\nexport const buildRAGReadinessPresentation = (\n\treadiness?: RAGExtractorReadiness\n): RAGReadinessPresentation => {\n\tif (!readiness) {\n\t\treturn {\n\t\t\tsections: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Provider',\n\t\t\t\t\ttitle: 'Unavailable',\n\t\t\t\t\tsummary: 'Readiness data is not available yet.'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n\n\treturn {\n\t\tsections: [\n\t\t\t{\n\t\t\t\tlabel: 'Provider',\n\t\t\t\ttitle: readiness.providerConfigured\n\t\t\t\t\t? (readiness.providerName ?? 'Runtime provider routing')\n\t\t\t\t\t: 'Not configured',\n\t\t\t\tsummary: readiness.providerConfigured\n\t\t\t\t\t? readiness.model\n\t\t\t\t\t\t? `Requests route through ${readiness.providerName ?? 'the runtime provider registry'} with default model ${readiness.model}.`\n\t\t\t\t\t\t: `Requests route through ${readiness.providerName ?? 'the runtime provider registry'}.`\n\t\t\t\t\t: 'Provider-backed retrieval is not configured yet.'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Embeddings',\n\t\t\t\ttitle: readiness.embeddingConfigured\n\t\t\t\t\t? readiness.embeddingModel ===\n\t\t\t\t\t\t'collection-managed embeddings'\n\t\t\t\t\t\t? 'Collection-managed'\n\t\t\t\t\t\t: 'Configured'\n\t\t\t\t\t: 'Missing',\n\t\t\t\tsummary: readiness.embeddingConfigured\n\t\t\t\t\t? readiness.embeddingModel ===\n\t\t\t\t\t\t'collection-managed embeddings'\n\t\t\t\t\t\t? 'Embeddings come from the collection and vector store layer, so retrieval stays vector-backed without a separate top-level embedding provider.'\n\t\t\t\t\t\t: (readiness.embeddingModel ??\n\t\t\t\t\t\t\t'Embedding model configured.')\n\t\t\t\t\t: 'Embeddings are not configured yet.'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Retrieval Stack',\n\t\t\t\ttitle: readiness.rerankerConfigured\n\t\t\t\t\t? 'Reranker ready'\n\t\t\t\t\t: 'Vector only',\n\t\t\t\tsummary: readiness.indexManagerConfigured\n\t\t\t\t\t? 'Index manager configured.'\n\t\t\t\t\t: 'Index manager not configured.'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Extractors',\n\t\t\t\ttitle: readiness.extractorsConfigured\n\t\t\t\t\t? `${readiness.extractorNames.length} configured`\n\t\t\t\t\t: 'None configured',\n\t\t\t\tsummary: readiness.extractorsConfigured\n\t\t\t\t\t? `Configured extractors: ${formatCompactList(readiness.extractorNames)}`\n\t\t\t\t\t: 'No extractors configured.',\n\t\t\t\ttags:\n\t\t\t\t\treadiness.extractorNames.length > 0\n\t\t\t\t\t\t? readiness.extractorNames\n\t\t\t\t\t\t: ['No extractors configured']\n\t\t\t}\n\t\t]\n\t};\n};\n\nexport const buildRAGCorpusHealthPresentation = (\n\thealth?: RAGCorpusHealth\n): RAGCorpusHealthPresentation => {\n\tif (!health) {\n\t\treturn {\n\t\t\tsections: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Corpus health',\n\t\t\t\t\ttitle: 'Unavailable',\n\t\t\t\t\tsummary: 'Corpus health is not available yet.'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n\n\treturn {\n\t\tsections: [\n\t\t\t{\n\t\t\t\tlabel: 'Corpus coverage',\n\t\t\t\ttitle: `Formats: ${formatCoverageMap(health.coverageByFormat)}`,\n\t\t\t\tsummary: `Kinds: ${formatCoverageMap(health.coverageByKind)}`,\n\t\t\t\trows: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Average chunks per document',\n\t\t\t\t\t\tvalue: health.averageChunksPerDocument.toFixed(2)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Chunk quality',\n\t\t\t\ttitle: `${health.averageChunksPerDocument.toFixed(2)} avg chunks/doc`,\n\t\t\t\tsummary: `Empty docs ${health.emptyDocuments} · empty chunks ${health.emptyChunks} · low signal ${health.lowSignalChunks}`,\n\t\t\t\trows: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Missing source',\n\t\t\t\t\t\tvalue: String(health.documentsMissingSource)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Missing title',\n\t\t\t\t\t\tvalue: String(health.documentsMissingTitle)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Missing metadata',\n\t\t\t\t\t\tvalue: String(health.documentsMissingMetadata)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Freshness',\n\t\t\t\ttitle: `${health.staleDocuments.length} stale docs`,\n\t\t\t\tsummary: `Stale threshold ${formatAgeLabel(health.staleAfterMs)}`,\n\t\t\t\trows: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Oldest age',\n\t\t\t\t\t\tvalue: formatAgeLabel(health.oldestDocumentAgeMs)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Newest age',\n\t\t\t\t\t\tvalue: formatAgeLabel(health.newestDocumentAgeMs)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Failures',\n\t\t\t\ttitle: `${health.failedIngestJobs} ingest · ${health.failedAdminJobs} admin`,\n\t\t\t\tsummary: `Duplicate sources ${health.duplicateSourceGroups.length} · duplicate ids ${health.duplicateDocumentIdGroups.length}`,\n\t\t\t\trows: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Failures by input',\n\t\t\t\t\t\tvalue: formatCoverageMap(health.failuresByInputKind)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Failures by extractor',\n\t\t\t\t\t\tvalue: formatCoverageMap(health.failuresByExtractor)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Failures by admin action',\n\t\t\t\t\t\tvalue: formatCoverageMap(health.failuresByAdminAction)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t};\n};\n\nexport const buildRAGSyncOverviewPresentation = (\n\tsources?: RAGSyncSourceRecord[]\n): RAGSyncOverviewPresentation => {\n\tconst records = sources ?? [];\n\tif (records.length === 0) {\n\t\treturn {\n\t\t\trows: [\n\t\t\t\t{ label: 'Configured sync sources', value: '0' },\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Latest sync',\n\t\t\t\t\tvalue: 'No sync sources configured yet.'\n\t\t\t\t}\n\t\t\t],\n\t\t\tsections: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Sync overview',\n\t\t\t\t\ttitle: 'No sync sources configured',\n\t\t\t\t\tsummary:\n\t\t\t\t\t\t'Add sync sources to monitor directories, URLs, storage, or mailboxes.'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n\n\tconst countByStatus = (status: RAGSyncSourceRecord['status']) =>\n\t\trecords.filter((record) => record.status === status).length;\n\n\treturn {\n\t\trows: [\n\t\t\t{ label: 'Configured sync sources', value: String(records.length) },\n\t\t\t{ label: 'Completed', value: String(countByStatus('completed')) },\n\t\t\t{ label: 'Running', value: String(countByStatus('running')) },\n\t\t\t{\n\t\t\t\tlabel: 'Failed',\n\t\t\t\tvalue: String(countByStatus('failed'))\n\t\t\t},\n\t\t\tbuildSyncOverviewLatestRow(records)\n\t\t],\n\t\tsections: [\n\t\t\t{\n\t\t\t\tlabel: 'Sync overview',\n\t\t\t\ttitle: `${records.length} configured`,\n\t\t\t\tsummary: `${countByStatus('completed')} completed · ${countByStatus('running')} running · ${countByStatus('failed')} failed`\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Latest sync',\n\t\t\t\ttitle: buildSyncOverviewLatestRow(records).value,\n\t\t\t\tsummary: 'Most recent completed or last-known sync activity.'\n\t\t\t}\n\t\t]\n\t};\n};\n\nconst formatMediaTimestamp = (value: unknown) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n\t\treturn undefined;\n\t}\n\n\tconst totalSeconds = Math.floor(value / 1000);\n\tconst minutes = Math.floor(totalSeconds / 60);\n\tconst seconds = totalSeconds % 60;\n\tconst milliseconds = Math.floor(value % 1000);\n\n\treturn `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(\n\t\t2,\n\t\t'0'\n\t)}.${String(milliseconds).padStart(3, '0')}`;\n};\n\nconst getAttachmentName = (source?: string, title?: string) => {\n\tconst sourceAttachment = source?.split('/').at(-1);\n\tif (sourceAttachment && sourceAttachment.includes('.')) {\n\t\treturn sourceAttachment;\n\t}\n\n\tconst titleAttachment = title?.split(' · ').at(-1);\n\tif (titleAttachment && titleAttachment.includes('.')) {\n\t\treturn titleAttachment;\n\t}\n\n\treturn undefined;\n};\n\nconst getSpreadsheetHeaders = (metadata?: Record<string, unknown>) =>\n\tArray.isArray(metadata?.spreadsheetHeaders)\n\t\t? metadata.spreadsheetHeaders\n\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\nconst formatSpreadsheetColumnRange = (\n\tcolumnStart?: string,\n\tcolumnEnd?: string\n) => {\n\tif (typeof columnStart !== 'string' || columnStart.length === 0) {\n\t\treturn undefined;\n\t}\n\tif (typeof columnEnd !== 'string' || columnEnd.length === 0) {\n\t\treturn `Columns ${columnStart}`;\n\t}\n\tif (columnStart === columnEnd) {\n\t\treturn `Columns ${columnStart}`;\n\t}\n\n\treturn `Columns ${columnStart}-${columnEnd}`;\n};\n\nconst formatSpreadsheetRowRange = (rowStart?: number, rowEnd?: number) => {\n\tif (typeof rowStart !== 'number' || !Number.isFinite(rowStart)) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\ttypeof rowEnd !== 'number' &&\n\t\ttypeof rowStart === 'number' &&\n\t\tNumber.isFinite(rowStart)\n\t) {\n\t\treturn `Rows ${rowStart}`;\n\t}\n\tif (rowStart === rowEnd) {\n\t\treturn `Rows ${rowStart}`;\n\t}\n\n\treturn `Rows ${rowStart}-${rowEnd}`;\n};\n\nconst formatSpreadsheetTableLabel = (\n\ttableIndex?: number,\n\ttableCount?: number\n) => {\n\tif (\n\t\ttypeof tableIndex !== 'number' ||\n\t\t!Number.isFinite(tableIndex) ||\n\t\ttableIndex < 1\n\t) {\n\t\treturn undefined;\n\t}\n\n\tif (\n\t\ttypeof tableCount === 'number' &&\n\t\tNumber.isFinite(tableCount) &&\n\t\ttableCount >= tableIndex\n\t) {\n\t\treturn `Table ${tableIndex} of ${tableCount}`;\n\t}\n\n\treturn `Table ${tableIndex}`;\n};\n\nconst formatMediaDurationLabel = (value: unknown) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n\t\treturn undefined;\n\t}\n\n\treturn formatMediaTimestamp(value);\n};\n\nconst buildContextLabel = (metadata?: Record<string, unknown>) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst pdfTextKind = getContextString(metadata.pdfTextKind);\n\tconst officeBlockKind = getContextString(metadata.officeBlockKind);\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath\n\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\tconst sectionTitle =\n\t\tgetContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n\tif (pdfTextKind === 'table_like' && sectionTitle) {\n\t\treturn `PDF table block ${sectionTitle}`;\n\t}\n\tif (pdfTextKind === 'paragraph' && sectionTitle) {\n\t\treturn `PDF text block ${sectionTitle}`;\n\t}\n\tif (officeBlockKind === 'table' && sectionTitle) {\n\t\treturn `Office table block ${sectionTitle}`;\n\t}\n\tif (officeBlockKind === 'list' && sectionTitle) {\n\t\treturn `Office list block ${sectionTitle}`;\n\t}\n\tif (officeBlockKind === 'paragraph' && sectionTitle) {\n\t\treturn `Office paragraph block ${sectionTitle}`;\n\t}\n\n\tconst emailKind = getContextString(metadata.emailKind);\n\tif (emailKind === 'attachment') {\n\t\tconst attachmentName = getContextString(metadata.attachmentName);\n\t\tconst threadTopic = getContextString(metadata.threadTopic);\n\t\treturn attachmentName\n\t\t\t? threadTopic\n\t\t\t\t? `Attachment evidence ${attachmentName} in ${threadTopic}`\n\t\t\t\t: `Attachment evidence ${attachmentName}`\n\t\t\t: 'Attachment evidence';\n\t}\n\n\tif (emailKind === 'message') {\n\t\tconst threadTopic = getContextString(metadata.threadTopic);\n\t\tconst from = getContextString(metadata.from);\n\t\tif (threadTopic) {\n\t\t\treturn from\n\t\t\t\t? `Message in ${threadTopic} from ${from}`\n\t\t\t\t: `Message in ${threadTopic}`;\n\t\t}\n\t\treturn from ? `Message from ${from}` : 'Message evidence';\n\t}\n\n\tconst page =\n\t\tgetContextNumber(metadata.page) ??\n\t\tgetContextNumber(metadata.pageNumber) ??\n\t\t(typeof metadata.pageIndex === 'number'\n\t\t\t? metadata.pageIndex + 1\n\t\t\t: undefined);\n\tconst region =\n\t\tgetContextNumber(metadata.regionNumber) ??\n\t\t(typeof metadata.regionIndex === 'number'\n\t\t\t? metadata.regionIndex + 1\n\t\t\t: undefined);\n\tconst hasOCRTrace =\n\t\ttypeof metadata.ocrRegionConfidence === 'number' ||\n\t\ttypeof metadata.ocrConfidence === 'number' ||\n\t\tgetContextString(metadata.pdfTextMode) === 'ocr' ||\n\t\ttypeof metadata.ocrRegionCount === 'number';\n\tconst ocrPageStart = getContextNumber(metadata.ocrPageStart);\n\tconst ocrPageEnd = getContextNumber(metadata.ocrPageEnd);\n\tif (page && region) {\n\t\tif (hasOCRTrace) {\n\t\t\treturn `OCR page ${page} region ${region}`;\n\t\t}\n\t\treturn `Page ${page} region ${region}`;\n\t}\n\tif (page) {\n\t\tif (hasOCRTrace) {\n\t\t\treturn `OCR page ${page}`;\n\t\t}\n\t\treturn `Page ${page}`;\n\t}\n\tif (\n\t\thasOCRTrace &&\n\t\ttypeof ocrPageStart === 'number' &&\n\t\ttypeof ocrPageEnd === 'number'\n\t) {\n\t\treturn ocrPageStart === ocrPageEnd\n\t\t\t? `OCR page ${ocrPageStart}`\n\t\t\t: `OCR pages ${ocrPageStart}-${ocrPageEnd}`;\n\t}\n\n\tconst sheet =\n\t\tgetContextString(metadata.sheetName) ??\n\t\t(Array.isArray(metadata.sheetNames)\n\t\t\t? getContextString(metadata.sheetNames[0])\n\t\t\t: undefined);\n\tif (sheet) {\n\t\tconst tableLabel = formatSpreadsheetTableLabel(\n\t\t\tgetContextNumber(metadata.spreadsheetTableIndex),\n\t\t\tgetContextNumber(metadata.spreadsheetTableCount)\n\t\t);\n\t\tconst columnRange = formatSpreadsheetColumnRange(\n\t\t\tgetContextString(metadata.spreadsheetColumnStart),\n\t\t\tgetContextString(metadata.spreadsheetColumnEnd)\n\t\t);\n\t\tconst rowRange = formatSpreadsheetRowRange(\n\t\t\tgetContextNumber(metadata.spreadsheetRowStart),\n\t\t\tgetContextNumber(metadata.spreadsheetRowEnd)\n\t\t);\n\t\tconst headers = getSpreadsheetHeaders(metadata);\n\t\tif (tableLabel && rowRange && columnRange) {\n\t\t\treturn `Sheet ${sheet} ${tableLabel} ${rowRange} ${columnRange}`;\n\t\t}\n\t\tif (tableLabel && rowRange) {\n\t\t\treturn `Sheet ${sheet} ${tableLabel} ${rowRange}`;\n\t\t}\n\t\tif (tableLabel && columnRange) {\n\t\t\treturn `Sheet ${sheet} ${tableLabel} ${columnRange}`;\n\t\t}\n\t\tif (tableLabel) {\n\t\t\treturn `Sheet ${sheet} ${tableLabel}`;\n\t\t}\n\t\tif (rowRange && columnRange) {\n\t\t\treturn `Sheet ${sheet} ${rowRange} ${columnRange}`;\n\t\t}\n\t\tif (rowRange) {\n\t\t\treturn `Sheet ${sheet} ${rowRange}`;\n\t\t}\n\t\tif (columnRange) {\n\t\t\treturn `Sheet ${sheet} ${columnRange}`;\n\t\t}\n\t\tif (headers.length > 0) {\n\t\t\treturn `Sheet ${sheet} by ${headers.slice(0, 2).join(', ')}`;\n\t\t}\n\t\treturn `Sheet ${sheet}`;\n\t}\n\n\tconst slide =\n\t\tgetContextNumber(metadata.slide) ??\n\t\tgetContextNumber(metadata.slideNumber) ??\n\t\t(typeof metadata.slideIndex === 'number'\n\t\t\t? metadata.slideIndex + 1\n\t\t\t: undefined);\n\tconst slideTitle = getContextString(metadata.slideTitle);\n\tif (slide) {\n\t\tif (slideTitle) {\n\t\t\treturn `Slide ${slide} ${slideTitle}`;\n\t\t}\n\t\treturn `Slide ${slide}`;\n\t}\n\n\tconst archiveEntry =\n\t\tgetContextString(metadata.archiveFullPath) ??\n\t\tgetContextString(metadata.archivePath) ??\n\t\tgetContextString(metadata.archiveEntryPath) ??\n\t\tgetContextString(metadata.entryPath);\n\tif (archiveEntry) {\n\t\treturn `Archive entry ${archiveEntry}`;\n\t}\n\n\tconst threadTopic = getContextString(metadata.threadTopic);\n\tif (threadTopic) {\n\t\treturn `Thread ${threadTopic}`;\n\t}\n\n\tconst speaker = getContextString(metadata.speaker);\n\tif (speaker) {\n\t\treturn `Speaker ${speaker}`;\n\t}\n\tif (sectionTitle) {\n\t\treturn `Section ${sectionTitle}`;\n\t}\n\n\treturn undefined;\n};\n\nconst buildLocatorLabel = (\n\tmetadata?: Record<string, unknown>,\n\tsource?: string,\n\ttitle?: string\n) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst pdfTextKind = getContextString(metadata.pdfTextKind);\n\tconst officeBlockKind = getContextString(metadata.officeBlockKind);\n\tconst pdfBlockNumber = getContextNumber(metadata.pdfBlockNumber);\n\tconst officeBlockNumber = getContextNumber(metadata.officeBlockNumber);\n\tconst spreadsheetRowStart = getContextNumber(metadata.spreadsheetRowStart);\n\tconst spreadsheetRowEnd = getContextNumber(metadata.spreadsheetRowEnd);\n\tconst slideTitle = getContextString(metadata.slideTitle);\n\n\tconst page =\n\t\tgetContextNumber(metadata.page) ??\n\t\tgetContextNumber(metadata.pageNumber) ??\n\t\t(typeof metadata.pageIndex === 'number'\n\t\t\t? metadata.pageIndex + 1\n\t\t\t: undefined);\n\tconst region =\n\t\tgetContextNumber(metadata.regionNumber) ??\n\t\t(typeof metadata.regionIndex === 'number'\n\t\t\t? metadata.regionIndex + 1\n\t\t\t: undefined);\n\tconst ocrPageStart = getContextNumber(metadata.ocrPageStart);\n\tconst ocrPageEnd = getContextNumber(metadata.ocrPageEnd);\n\tif (page && region) {\n\t\treturn `Page ${page} · Region ${region}`;\n\t}\n\tif (page && pdfBlockNumber && pdfTextKind === 'table_like') {\n\t\treturn `Page ${page} · Table Block ${pdfBlockNumber}`;\n\t}\n\tif (page && pdfBlockNumber) {\n\t\treturn `Page ${page} · Text Block ${pdfBlockNumber}`;\n\t}\n\tif (page) {\n\t\treturn `Page ${page}`;\n\t}\n\tif (typeof ocrPageStart === 'number' && typeof ocrPageEnd === 'number') {\n\t\treturn ocrPageStart === ocrPageEnd\n\t\t\t? `Page ${ocrPageStart}`\n\t\t\t: `Pages ${ocrPageStart}-${ocrPageEnd}`;\n\t}\n\n\tconst sheet =\n\t\tgetContextString(metadata.sheetName) ??\n\t\t(Array.isArray(metadata.sheetNames)\n\t\t\t? getContextString(metadata.sheetNames[0])\n\t\t\t: undefined);\n\tif (sheet) {\n\t\tconst tableLabel = formatSpreadsheetTableLabel(\n\t\t\tgetContextNumber(metadata.spreadsheetTableIndex),\n\t\t\tgetContextNumber(metadata.spreadsheetTableCount)\n\t\t);\n\t\tconst columnRange = formatSpreadsheetColumnRange(\n\t\t\tgetContextString(metadata.spreadsheetColumnStart),\n\t\t\tgetContextString(metadata.spreadsheetColumnEnd)\n\t\t);\n\t\tconst rowRange = formatSpreadsheetRowRange(\n\t\t\tspreadsheetRowStart,\n\t\t\tspreadsheetRowEnd\n\t\t);\n\t\tif (tableLabel && rowRange && columnRange) {\n\t\t\treturn `Sheet ${sheet} · ${tableLabel} · ${rowRange} · ${columnRange}`;\n\t\t}\n\t\tif (tableLabel && rowRange) {\n\t\t\treturn `Sheet ${sheet} · ${tableLabel} · ${rowRange}`;\n\t\t}\n\t\tif (tableLabel && columnRange) {\n\t\t\treturn `Sheet ${sheet} · ${tableLabel} · ${columnRange}`;\n\t\t}\n\t\tif (tableLabel) {\n\t\t\treturn `Sheet ${sheet} · ${tableLabel}`;\n\t\t}\n\t\tif (rowRange && columnRange) {\n\t\t\treturn `Sheet ${sheet} · ${rowRange} · ${columnRange}`;\n\t\t}\n\t\tif (rowRange) {\n\t\t\treturn `Sheet ${sheet} · ${rowRange}`;\n\t\t}\n\t\treturn columnRange\n\t\t\t? `Sheet ${sheet} · ${columnRange}`\n\t\t\t: `Sheet ${sheet}`;\n\t}\n\n\tconst slide =\n\t\tgetContextNumber(metadata.slide) ??\n\t\tgetContextNumber(metadata.slideNumber) ??\n\t\t(typeof metadata.slideIndex === 'number'\n\t\t\t? metadata.slideIndex + 1\n\t\t\t: undefined);\n\tif (slide) {\n\t\treturn slideTitle ? `Slide ${slide} · ${slideTitle}` : `Slide ${slide}`;\n\t}\n\n\tconst archiveEntry =\n\t\tgetContextString(metadata.archiveFullPath) ??\n\t\tgetContextString(metadata.archivePath) ??\n\t\tgetContextString(metadata.archiveEntryPath) ??\n\t\tgetContextString(metadata.entryPath);\n\tif (archiveEntry) {\n\t\treturn `Archive entry ${archiveEntry}`;\n\t}\n\n\tconst emailKind = getContextString(metadata.emailKind);\n\tif (emailKind === 'attachment') {\n\t\tconst attachmentName =\n\t\t\tgetContextString(metadata.attachmentName) ??\n\t\t\tgetAttachmentName(source, title);\n\t\tconst replyDepth = getContextNumber(metadata.replyDepth);\n\t\tif (attachmentName && replyDepth && replyDepth > 0) {\n\t\t\treturn `Attachment ${attachmentName} · Reply depth ${replyDepth}`;\n\t\t}\n\t\treturn attachmentName ? `Attachment ${attachmentName}` : 'Attachment';\n\t}\n\n\tconst mediaStart = formatMediaTimestamp(metadata.startMs);\n\tconst mediaEnd = formatMediaTimestamp(metadata.endMs);\n\tif (mediaStart && mediaEnd) {\n\t\treturn `Timestamp ${mediaStart} - ${mediaEnd}`;\n\t}\n\n\tif (mediaStart) {\n\t\treturn `Timestamp ${mediaStart}`;\n\t}\n\n\tif (officeBlockNumber && officeBlockKind === 'table') {\n\t\treturn `Office table block ${officeBlockNumber}`;\n\t}\n\tif (officeBlockNumber && officeBlockKind === 'list') {\n\t\treturn `Office list block ${officeBlockNumber}`;\n\t}\n\tif (officeBlockNumber && officeBlockKind === 'paragraph') {\n\t\treturn `Office paragraph block ${officeBlockNumber}`;\n\t}\n\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath\n\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\tif (sectionPath.length > 0) {\n\t\treturn `Section ${sectionPath.join(' > ')}`;\n\t}\n\n\treturn undefined;\n};\n\nconst buildProvenanceLabel = (metadata?: Record<string, unknown>) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst threadTopic = getContextString(metadata.threadTopic);\n\tconst replyDepth = getContextNumber(metadata.replyDepth);\n\tconst threadMessageCount = getContextNumber(metadata.threadMessageCount);\n\tconst threadRootMessageId = getContextString(metadata.threadRootMessageId);\n\tconst from = getContextString(metadata.from);\n\tconst sentAt =\n\t\tformatTimestampLabel(metadata.sentAt) ??\n\t\tformatTimestampLabel(metadata.receivedAt);\n\tconst speaker = getContextString(metadata.speaker);\n\tconst mediaKind = getContextString(metadata.mediaKind);\n\tconst transcriptSource = getContextString(metadata.transcriptSource);\n\tconst mediaSpeakerCount = getContextNumber(metadata.mediaSpeakerCount);\n\tconst mediaSegmentCount = getContextNumber(metadata.mediaSegmentCount);\n\tconst mediaSegmentGroupSize = getContextNumber(\n\t\tmetadata.mediaSegmentGroupSize\n\t);\n\tconst mediaSegmentGroupIndex = getContextNumber(\n\t\tmetadata.mediaSegmentGroupIndex\n\t);\n\tconst mediaChannel = getContextString(metadata.mediaChannel);\n\tconst mediaDurationLabel = formatMediaDurationLabel(\n\t\tmetadata.mediaDurationMs\n\t);\n\tconst mediaSegmentWindowDurationLabel = formatMediaDurationLabel(\n\t\tmetadata.mediaSegmentGroupDurationMs\n\t);\n\tconst mediaSegmentGapLabel = formatMediaDurationLabel(\n\t\tmetadata.mediaSegmentGapFromPreviousMs\n\t);\n\tconst spreadsheetHeaders = getSpreadsheetHeaders(metadata);\n\tconst spreadsheetColumnRange = formatSpreadsheetColumnRange(\n\t\tgetContextString(metadata.spreadsheetColumnStart),\n\t\tgetContextString(metadata.spreadsheetColumnEnd)\n\t);\n\tconst slideNotesText = getContextString(metadata.slideNotesText);\n\tconst pdfTextMode = getContextString(metadata.pdfTextMode);\n\tconst pdfTextKind = getContextString(metadata.pdfTextKind);\n\tconst officeBlockKind = getContextString(metadata.officeBlockKind);\n\tconst ocrEngine = getContextString(metadata.ocrEngine);\n\tconst extractorRegistryMatch = getContextString(\n\t\tmetadata.extractorRegistryMatch\n\t);\n\tconst chunkingProfile = getContextString(metadata.chunkingProfile);\n\tconst archiveDepth = getContextNumber(metadata.archiveDepth);\n\tconst archiveNestedDepth = getContextNumber(metadata.archiveNestedDepth);\n\tconst archiveContainerPath = getContextString(\n\t\tmetadata.archiveContainerPath\n\t);\n\tconst archiveRootName = getContextString(metadata.archiveRootName);\n\tconst sourceAwareChunkReason = formatSourceAwareChunkReason(\n\t\tmetadata.sourceAwareChunkReason\n\t);\n\tconst sourceAwareUnitScope = buildSourceAwareUnitScopeLabel(metadata);\n\tconst spreadsheetTableLabel = formatSpreadsheetTableLabel(\n\t\tgetContextNumber(metadata.spreadsheetTableIndex),\n\t\tgetContextNumber(metadata.spreadsheetTableCount)\n\t);\n\tconst ocrConfidence =\n\t\tgetContextNumber(metadata.ocrRegionConfidence) ??\n\t\tgetContextNumber(metadata.ocrConfidence);\n\tconst ocrAverageConfidence =\n\t\tgetContextNumber(metadata.ocrPageAverageConfidence) ??\n\t\tgetContextNumber(metadata.ocrAverageConfidence);\n\tconst ocrMinConfidence =\n\t\tgetContextNumber(metadata.ocrPageMinConfidence) ??\n\t\tgetContextNumber(metadata.ocrMinConfidence);\n\tconst ocrMaxConfidence =\n\t\tgetContextNumber(metadata.ocrPageMaxConfidence) ??\n\t\tgetContextNumber(metadata.ocrMaxConfidence);\n\tconst ocrRegionCount = getContextNumber(metadata.ocrRegionCount);\n\n\tconst labels = [\n\t\tpdfTextMode ? `PDF ${pdfTextMode}` : '',\n\t\tpdfTextKind === 'table_like'\n\t\t\t? 'PDF table block'\n\t\t\t: pdfTextKind === 'paragraph'\n\t\t\t\t? 'PDF text block'\n\t\t\t\t: '',\n\t\tofficeBlockKind ? `Office ${officeBlockKind}` : '',\n\t\tocrEngine ? `OCR ${ocrEngine}` : '',\n\t\textractorRegistryMatch ? `Extractor ${extractorRegistryMatch}` : '',\n\t\tchunkingProfile ? `Chunking ${chunkingProfile}` : '',\n\t\tsourceAwareChunkReason ?? '',\n\t\tsourceAwareUnitScope ?? '',\n\t\ttypeof ocrConfidence === 'number'\n\t\t\t? `Confidence ${ocrConfidence.toFixed(2)}`\n\t\t\t: '',\n\t\ttypeof ocrAverageConfidence === 'number' &&\n\t\tocrAverageConfidence !== ocrConfidence\n\t\t\t? `Average ${ocrAverageConfidence.toFixed(2)}`\n\t\t\t: '',\n\t\ttypeof ocrMinConfidence === 'number' &&\n\t\ttypeof ocrMaxConfidence === 'number' &&\n\t\tocrMinConfidence !== ocrMaxConfidence\n\t\t\t? `Range ${ocrMinConfidence.toFixed(2)}-${ocrMaxConfidence.toFixed(\n\t\t\t\t\t2\n\t\t\t\t)}`\n\t\t\t: '',\n\t\ttypeof ocrRegionCount === 'number' ? `${ocrRegionCount} regions` : '',\n\t\tspreadsheetHeaders.length > 0\n\t\t\t? `Spreadsheet ${spreadsheetHeaders.join(', ')}`\n\t\t\t: '',\n\t\tspreadsheetColumnRange ? `Spreadsheet ${spreadsheetColumnRange}` : '',\n\t\tspreadsheetTableLabel ? `Spreadsheet ${spreadsheetTableLabel}` : '',\n\t\tmediaKind ? `Media ${mediaKind}` : '',\n\t\tmediaSegmentCount ? `${mediaSegmentCount} segments` : '',\n\t\tmediaSegmentGroupSize\n\t\t\t? `${mediaSegmentGroupSize} grouped segments`\n\t\t\t: '',\n\t\tmediaSegmentGroupIndex !== undefined\n\t\t\t? `Segment group ${mediaSegmentGroupIndex + 1}`\n\t\t\t: '',\n\t\tmediaChannel ? `Channel ${mediaChannel}` : '',\n\t\tmediaSpeakerCount ? `${mediaSpeakerCount} speakers` : '',\n\t\tmediaDurationLabel ? `Duration ${mediaDurationLabel}` : '',\n\t\tmediaSegmentWindowDurationLabel\n\t\t\t? `Segment window ${mediaSegmentWindowDurationLabel}`\n\t\t\t: '',\n\t\tmediaSegmentGapLabel\n\t\t\t? `Gap ${mediaSegmentGapLabel} from previous window`\n\t\t\t: '',\n\t\ttranscriptSource ? `Transcript ${transcriptSource}` : '',\n\t\tthreadTopic ? `Thread ${threadTopic}` : '',\n\t\tthreadRootMessageId ? `Thread root ${threadRootMessageId}` : '',\n\t\tthreadMessageCount ? `${threadMessageCount} thread messages` : '',\n\t\treplyDepth ? `Reply depth ${replyDepth}` : '',\n\t\tslideNotesText ? 'Speaker notes' : '',\n\t\tarchiveDepth ? `Archive depth ${archiveDepth}` : '',\n\t\tarchiveNestedDepth ? `Archive nested depth ${archiveNestedDepth}` : '',\n\t\tarchiveContainerPath ? `Archive container ${archiveContainerPath}` : '',\n\t\tarchiveRootName ? `Archive root ${archiveRootName}` : '',\n\t\tspeaker ? `Speaker ${speaker}` : '',\n\t\tfrom ? `Sender ${from}` : '',\n\t\tsentAt ? `Sent ${sentAt}` : ''\n\t].filter((value) => value.length > 0);\n\n\treturn labels.length > 0 ? labels.join(' · ') : undefined;\n};\n\nexport const buildRAGSourceLabels = ({\n\tmetadata,\n\tsource,\n\ttitle\n}: {\n\tmetadata?: Record<string, unknown>;\n\tsource?: string;\n\ttitle?: string;\n}): RAGSourceLabels | undefined => {\n\tconst contextLabel = buildContextLabel(metadata);\n\tconst locatorLabel = buildLocatorLabel(metadata, source, title);\n\tconst provenanceLabel = buildProvenanceLabel(metadata);\n\n\tif (!contextLabel && !locatorLabel && !provenanceLabel) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tcontextLabel,\n\t\tlocatorLabel,\n\t\tprovenanceLabel\n\t};\n};\n\nexport const buildRAGChunkStructure = (\n\tmetadata?: Record<string, unknown>\n): RAGChunkStructure | undefined => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath.filter(\n\t\t\t\t(value): value is string =>\n\t\t\t\t\ttypeof value === 'string' && value.trim().length > 0\n\t\t\t)\n\t\t: undefined;\n\tconst sectionKind =\n\t\tmetadata.sectionKind === 'markdown_heading' ||\n\t\tmetadata.sectionKind === 'html_heading' ||\n\t\tmetadata.sectionKind === 'office_heading' ||\n\t\tmetadata.sectionKind === 'office_block' ||\n\t\tmetadata.sectionKind === 'pdf_block' ||\n\t\tmetadata.sectionKind === 'spreadsheet_rows' ||\n\t\tmetadata.sectionKind === 'presentation_slide'\n\t\t\t? metadata.sectionKind\n\t\t\t: undefined;\n\tconst section: NonNullable<RAGChunkStructure['section']> = {\n\t\tdepth: getContextNumber(metadata.sectionDepth),\n\t\tkind: sectionKind,\n\t\tpath: sectionPath && sectionPath.length > 0 ? sectionPath : undefined,\n\t\ttitle: getContextString(metadata.sectionTitle)\n\t};\n\tconst sequence: NonNullable<RAGChunkStructure['sequence']> = {\n\t\tnextChunkId: getContextString(metadata.nextChunkId),\n\t\tpreviousChunkId: getContextString(metadata.previousChunkId),\n\t\tsectionChunkCount: getContextNumber(metadata.sectionChunkCount),\n\t\tsectionChunkId: getContextString(metadata.sectionChunkId),\n\t\tsectionChunkIndex: getContextNumber(metadata.sectionChunkIndex)\n\t};\n\n\tif (\n\t\t!section.title &&\n\t\t(!section.path || section.path.length === 0) &&\n\t\ttypeof section.depth !== 'number' &&\n\t\t!section.kind &&\n\t\t!sequence.nextChunkId &&\n\t\t!sequence.previousChunkId &&\n\t\ttypeof sequence.sectionChunkCount !== 'number' &&\n\t\t!sequence.sectionChunkId &&\n\t\ttypeof sequence.sectionChunkIndex !== 'number'\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tsection:\n\t\t\tsection.title ||\n\t\t\t(section.path && section.path.length > 0) ||\n\t\t\ttypeof section.depth === 'number' ||\n\t\t\tsection.kind\n\t\t\t\t? section\n\t\t\t\t: undefined,\n\t\tsequence:\n\t\t\tsequence.nextChunkId ||\n\t\t\tsequence.previousChunkId ||\n\t\t\ttypeof sequence.sectionChunkCount === 'number' ||\n\t\t\tsequence.sectionChunkId ||\n\t\t\ttypeof sequence.sectionChunkIndex === 'number'\n\t\t\t\t? sequence\n\t\t\t\t: undefined\n\t};\n};\n\nconst buildExcerpt = (text: string, maxLength = 160) => {\n\tconst normalized = text.replaceAll(/\\s+/g, ' ').trim();\n\tif (normalized.length <= maxLength) {\n\t\treturn normalized;\n\t}\n\n\treturn `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;\n};\n\ntype ExcerptChunkInput = Pick<\n\tRAGSource,\n\t'chunkId' | 'metadata' | 'structure' | 'text'\n>;\n\nexport const buildRAGChunkExcerpts = (\n\tchunks: ExcerptChunkInput[],\n\tactiveChunkId?: string\n): RAGChunkExcerpts | undefined => {\n\tif (chunks.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst graph = buildRAGChunkGraph(\n\t\tchunks.map((chunk) => ({\n\t\t\tchunkId: chunk.chunkId,\n\t\t\tmetadata: chunk.metadata,\n\t\t\tstructure: chunk.structure\n\t\t}))\n\t);\n\tconst navigation = buildRAGChunkGraphNavigation(graph, activeChunkId);\n\tconst activeChunk =\n\t\tchunks.find((chunk) => chunk.chunkId === navigation.activeChunkId) ??\n\t\tchunks[0];\n\tif (!activeChunk) {\n\t\treturn undefined;\n\t}\n\n\tconst chunkMap = new Map(chunks.map((chunk) => [chunk.chunkId, chunk]));\n\tconst orderedSectionIds =\n\t\tnavigation.sectionNodes.length > 0\n\t\t\t? navigation.sectionNodes.map((node) => node.chunkId)\n\t\t\t: [activeChunk.chunkId];\n\tconst orderedWindowIds =\n\t\tnavigation.sectionNodes.length > 0\n\t\t\t? (() => {\n\t\t\t\t\tconst activeIndex = navigation.sectionNodes.findIndex(\n\t\t\t\t\t\t(node) => node.chunkId === activeChunk.chunkId\n\t\t\t\t\t);\n\t\t\t\t\tconst startIndex = Math.max(0, activeIndex - 2);\n\t\t\t\t\tconst endIndex = Math.min(\n\t\t\t\t\t\tnavigation.sectionNodes.length,\n\t\t\t\t\t\tactiveIndex + 3\n\t\t\t\t\t);\n\t\t\t\t\treturn navigation.sectionNodes\n\t\t\t\t\t\t.slice(startIndex, endIndex)\n\t\t\t\t\t\t.map((node) => node.chunkId);\n\t\t\t\t})()\n\t\t\t: [\n\t\t\t\t\tnavigation.previousNode?.chunkId,\n\t\t\t\t\tactiveChunk.chunkId,\n\t\t\t\t\tnavigation.nextNode?.chunkId\n\t\t\t\t].filter(\n\t\t\t\t\t(chunkId, index, ids): chunkId is string =>\n\t\t\t\t\t\tBoolean(chunkId) && ids.indexOf(chunkId) === index\n\t\t\t\t);\n\n\tconst collectText = (chunkIds: string[]) =>\n\t\tchunkIds\n\t\t\t.map((chunkId) => chunkMap.get(chunkId)?.text)\n\t\t\t.filter((text): text is string => typeof text === 'string')\n\t\t\t.join('\\n\\n');\n\n\treturn {\n\t\tchunkExcerpt: buildExcerpt(activeChunk.text, 160),\n\t\tsectionExcerpt: buildExcerpt(collectText(orderedSectionIds), 320),\n\t\twindowExcerpt: buildExcerpt(collectText(orderedWindowIds), 240)\n\t};\n};\n\nexport const buildRAGPreferredExcerpt = (\n\texcerpts?: RAGChunkExcerpts,\n\tstructure?: RAGChunkStructure\n) => {\n\tconst selection = buildRAGExcerptSelection(excerpts, structure);\n\treturn selection.excerpt;\n};\n\nexport const buildRAGExcerptSelection = (\n\texcerpts?: RAGChunkExcerpts,\n\tstructure?: RAGChunkStructure\n): RAGExcerptSelection & { excerpt: string } => {\n\tif (!excerpts) {\n\t\treturn {\n\t\t\texcerpt: '',\n\t\t\tmode: 'chunk',\n\t\t\treason: 'single_chunk'\n\t\t};\n\t}\n\n\tconst chunkLength = excerpts.chunkExcerpt.trim().length;\n\tconst sectionChunkCount = structure?.sequence?.sectionChunkCount ?? 1;\n\tif (sectionChunkCount > 1 && chunkLength > 0 && chunkLength < 72) {\n\t\tif (\n\t\t\tsectionChunkCount <= 3 &&\n\t\t\texcerpts.sectionExcerpt.trim().length > 0\n\t\t) {\n\t\t\treturn {\n\t\t\t\texcerpt: excerpts.sectionExcerpt,\n\t\t\t\tmode: 'section',\n\t\t\t\treason: 'section_small_enough'\n\t\t\t};\n\t\t}\n\t\tif (excerpts.windowExcerpt.trim().length > 0) {\n\t\t\treturn {\n\t\t\t\texcerpt: excerpts.windowExcerpt,\n\t\t\t\tmode: 'window',\n\t\t\t\treason: 'section_too_large_use_window'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\texcerpt: excerpts.chunkExcerpt,\n\t\t\tmode: 'chunk',\n\t\t\treason: 'chunk_too_narrow'\n\t\t};\n\t}\n\n\treturn {\n\t\texcerpt: excerpts.chunkExcerpt,\n\t\tmode: 'chunk',\n\t\treason: sectionChunkCount > 1 ? 'chunk_too_narrow' : 'single_chunk'\n\t};\n};\n\nexport const buildRAGExcerptModeCounts = (\n\tselections: Array<RAGExcerptSelection | undefined>\n): RAGExcerptModeCounts =>\n\tselections.reduce<RAGExcerptModeCounts>(\n\t\t(counts, selection) => {\n\t\t\tif (selection) {\n\t\t\t\tcounts[selection.mode] += 1;\n\t\t\t}\n\t\t\treturn counts;\n\t\t},\n\t\t{ chunk: 0, section: 0, window: 0 }\n\t);\n\ntype GraphChunkInput = Pick<\n\tRAGSource,\n\t'chunkId' | 'metadata' | 'source' | 'title' | 'labels' | 'structure'\n> &\n\tPartial<Pick<RAGSource, 'score'>>;\n\nexport const buildRAGChunkGraph = (\n\tchunks: GraphChunkInput[]\n): RAGChunkGraph => {\n\tconst nodes: RAGChunkGraphNode[] = [];\n\tconst edges: RAGChunkGraphEdge[] = [];\n\tconst edgeKeys = new Set<string>();\n\tconst sections = new Map<string, RAGChunkGraphSectionGroup>();\n\n\tfor (const chunk of chunks) {\n\t\tconst labels =\n\t\t\tchunk.labels ??\n\t\t\tbuildRAGSourceLabels({\n\t\t\t\tmetadata: chunk.metadata,\n\t\t\t\tsource: chunk.source,\n\t\t\t\ttitle: chunk.title\n\t\t\t});\n\t\tconst structure =\n\t\t\tchunk.structure ?? buildRAGChunkStructure(chunk.metadata);\n\n\t\tnodes.push({\n\t\t\tchunkId: chunk.chunkId,\n\t\t\tcontextLabel: labels?.contextLabel,\n\t\t\tlabel: chunk.source ?? chunk.title ?? chunk.chunkId,\n\t\t\tlocatorLabel: labels?.locatorLabel,\n\t\t\tprovenanceLabel: labels?.provenanceLabel,\n\t\t\tscore: chunk.score,\n\t\t\tsource: chunk.source,\n\t\t\tstructure,\n\t\t\ttitle: chunk.title\n\t\t});\n\n\t\tconst previousChunkId = structure?.sequence?.previousChunkId;\n\t\tif (previousChunkId) {\n\t\t\tconst key = `previous:${previousChunkId}:${chunk.chunkId}`;\n\t\t\tif (!edgeKeys.has(key)) {\n\t\t\t\tedgeKeys.add(key);\n\t\t\t\tedges.push({\n\t\t\t\t\tfromChunkId: previousChunkId,\n\t\t\t\t\trelation: 'previous',\n\t\t\t\t\ttoChunkId: chunk.chunkId\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst nextChunkId = structure?.sequence?.nextChunkId;\n\t\tif (nextChunkId) {\n\t\t\tconst key = `next:${chunk.chunkId}:${nextChunkId}`;\n\t\t\tif (!edgeKeys.has(key)) {\n\t\t\t\tedgeKeys.add(key);\n\t\t\t\tedges.push({\n\t\t\t\t\tfromChunkId: chunk.chunkId,\n\t\t\t\t\trelation: 'next',\n\t\t\t\t\ttoChunkId: nextChunkId\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst sectionId = structure?.sequence?.sectionChunkId;\n\t\tif (sectionId) {\n\t\t\tconst existing = sections.get(sectionId);\n\t\t\tif (!existing) {\n\t\t\t\tsections.set(sectionId, {\n\t\t\t\t\tchildSectionIds: [],\n\t\t\t\t\tchunkCount: structure.sequence?.sectionChunkCount ?? 1,\n\t\t\t\t\tchunkIds: [chunk.chunkId],\n\t\t\t\t\tdepth: structure.section?.depth,\n\t\t\t\t\tid: sectionId,\n\t\t\t\t\tkind: structure.section?.kind,\n\t\t\t\t\tleadChunkId: chunk.chunkId,\n\t\t\t\t\tpath: structure.section?.path,\n\t\t\t\t\ttitle: structure.section?.title\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!existing.chunkIds.includes(chunk.chunkId)) {\n\t\t\t\texisting.chunkIds.push(chunk.chunkId);\n\t\t\t}\n\t\t\texisting.chunkCount = Math.max(\n\t\t\t\texisting.chunkCount,\n\t\t\t\tstructure.sequence?.sectionChunkCount ?? existing.chunkCount\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const section of sections.values()) {\n\t\tsection.chunkIds.sort((left, right) => {\n\t\t\tconst leftNode = nodes.find((node) => node.chunkId === left);\n\t\t\tconst rightNode = nodes.find((node) => node.chunkId === right);\n\t\t\tconst leftIndex =\n\t\t\t\tleftNode?.structure?.sequence?.sectionChunkIndex ??\n\t\t\t\tNumber.MAX_SAFE_INTEGER;\n\t\t\tconst rightIndex =\n\t\t\t\trightNode?.structure?.sequence?.sectionChunkIndex ??\n\t\t\t\tNumber.MAX_SAFE_INTEGER;\n\t\t\tif (leftIndex !== rightIndex) {\n\t\t\t\treturn leftIndex - rightIndex;\n\t\t\t}\n\n\t\t\treturn left.localeCompare(right);\n\t\t});\n\t\tsection.leadChunkId = section.chunkIds[0];\n\t}\n\n\tconst sectionPathIndex = new Map<string, RAGChunkGraphSectionGroup>();\n\tfor (const section of sections.values()) {\n\t\tconst path =\n\t\t\tsection.path && section.path.length > 0\n\t\t\t\t? section.path\n\t\t\t\t: section.title\n\t\t\t\t\t? [section.title]\n\t\t\t\t\t: undefined;\n\t\tif (path && path.length > 0) {\n\t\t\tsectionPathIndex.set(path.join('\\u0000'), section);\n\t\t}\n\t}\n\n\tfor (const section of sections.values()) {\n\t\tconst path =\n\t\t\tsection.path && section.path.length > 0\n\t\t\t\t? section.path\n\t\t\t\t: section.title\n\t\t\t\t\t? [section.title]\n\t\t\t\t\t: undefined;\n\t\tif (!path || path.length < 2) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst parent = sectionPathIndex.get(path.slice(0, -1).join('\\u0000'));\n\t\tif (!parent || parent.id === section.id) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tsection.parentSectionId = parent.id;\n\t\tif (!parent.childSectionIds.includes(section.id)) {\n\t\t\tparent.childSectionIds.push(section.id);\n\t\t}\n\n\t\tif (parent.leadChunkId && section.leadChunkId) {\n\t\t\tconst parentKey = `section_parent:${section.leadChunkId}:${parent.leadChunkId}`;\n\t\t\tif (!edgeKeys.has(parentKey)) {\n\t\t\t\tedgeKeys.add(parentKey);\n\t\t\t\tedges.push({\n\t\t\t\t\tfromChunkId: section.leadChunkId,\n\t\t\t\t\trelation: 'section_parent',\n\t\t\t\t\ttoChunkId: parent.leadChunkId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst childKey = `section_child:${parent.leadChunkId}:${section.leadChunkId}`;\n\t\t\tif (!edgeKeys.has(childKey)) {\n\t\t\t\tedgeKeys.add(childKey);\n\t\t\t\tedges.push({\n\t\t\t\t\tfromChunkId: parent.leadChunkId,\n\t\t\t\t\trelation: 'section_child',\n\t\t\t\t\ttoChunkId: section.leadChunkId\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tnodes.sort((left, right) => {\n\t\tconst leftSection =\n\t\t\tleft.structure?.sequence?.sectionChunkIndex ??\n\t\t\tNumber.MAX_SAFE_INTEGER;\n\t\tconst rightSection =\n\t\t\tright.structure?.sequence?.sectionChunkIndex ??\n\t\t\tNumber.MAX_SAFE_INTEGER;\n\t\tif (leftSection !== rightSection) {\n\t\t\treturn leftSection - rightSection;\n\t\t}\n\n\t\tconst leftScore = left.score ?? Number.NEGATIVE_INFINITY;\n\t\tconst rightScore = right.score ?? Number.NEGATIVE_INFINITY;\n\t\tif (leftScore !== rightScore) {\n\t\t\treturn rightScore - leftScore;\n\t\t}\n\n\t\treturn left.label.localeCompare(right.label);\n\t});\n\n\treturn {\n\t\tedges,\n\t\tnodes,\n\t\tsections: [...sections.values()].sort((left, right) =>\n\t\t\t(left.title ?? left.id).localeCompare(right.title ?? right.id)\n\t\t)\n\t};\n};\n\nexport const buildRAGChunkPreviewGraph = (\n\tpreview: Pick<RAGDocumentChunkPreview, 'chunks' | 'document'>\n): RAGChunkGraph =>\n\tbuildRAGChunkGraph(\n\t\tpreview.chunks.map((chunk) => ({\n\t\t\tchunkId: chunk.chunkId,\n\t\t\tlabels: chunk.labels,\n\t\t\tmetadata: chunk.metadata,\n\t\t\tsource: chunk.source ?? preview.document.source,\n\t\t\tstructure: chunk.structure,\n\t\t\ttitle: chunk.title ?? preview.document.title\n\t\t}))\n\t);\n\nexport const buildRAGChunkPreviewNavigation = (\n\tpreview: Pick<RAGDocumentChunkPreview, 'chunks' | 'document'>,\n\tactiveChunkId?: string\n): RAGChunkGraphNavigation =>\n\tbuildRAGChunkGraphNavigation(\n\t\tbuildRAGChunkPreviewGraph(preview),\n\t\tactiveChunkId\n\t);\n\nexport const buildRAGChunkGraphNavigation = (\n\tgraph: RAGChunkGraph,\n\tactiveChunkId?: string\n): RAGChunkGraphNavigation => {\n\tif (graph.nodes.length === 0) {\n\t\treturn {\n\t\t\tactiveChunkId,\n\t\t\tchildSections: [],\n\t\t\tsiblingSections: [],\n\t\t\tsectionNodes: []\n\t\t};\n\t}\n\n\tconst activeNode =\n\t\t(activeChunkId\n\t\t\t? graph.nodes.find((node) => node.chunkId === activeChunkId)\n\t\t\t: undefined) ?? graph.nodes[0];\n\tconst resolvedActiveChunkId = activeNode?.chunkId;\n\tconst previousNode = activeNode?.structure?.sequence?.previousChunkId\n\t\t? graph.nodes.find(\n\t\t\t\t(node) =>\n\t\t\t\t\tnode.chunkId ===\n\t\t\t\t\tactiveNode.structure?.sequence?.previousChunkId\n\t\t\t)\n\t\t: undefined;\n\tconst nextNode = activeNode?.structure?.sequence?.nextChunkId\n\t\t? graph.nodes.find(\n\t\t\t\t(node) =>\n\t\t\t\t\tnode.chunkId === activeNode.structure?.sequence?.nextChunkId\n\t\t\t)\n\t\t: undefined;\n\tconst section = activeNode?.structure?.sequence?.sectionChunkId\n\t\t? graph.sections.find(\n\t\t\t\t(entry) =>\n\t\t\t\t\tentry.id === activeNode.structure?.sequence?.sectionChunkId\n\t\t\t)\n\t\t: undefined;\n\tconst parentSection = section?.parentSectionId\n\t\t? graph.sections.find((entry) => entry.id === section.parentSectionId)\n\t\t: undefined;\n\tconst childSections = section\n\t\t? section.childSectionIds\n\t\t\t\t.map((sectionId) =>\n\t\t\t\t\tgraph.sections.find((entry) => entry.id === sectionId)\n\t\t\t\t)\n\t\t\t\t.filter((entry): entry is RAGChunkGraphSectionGroup =>\n\t\t\t\t\tBoolean(entry)\n\t\t\t\t)\n\t\t: [];\n\tconst siblingSections = section?.parentSectionId\n\t\t? graph.sections.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\tentry.parentSectionId === section.parentSectionId &&\n\t\t\t\t\tentry.id !== section.id\n\t\t\t)\n\t\t: [];\n\tconst sectionNodes = section\n\t\t? section.chunkIds\n\t\t\t\t.map((chunkId) =>\n\t\t\t\t\tgraph.nodes.find((node) => node.chunkId === chunkId)\n\t\t\t\t)\n\t\t\t\t.filter((node): node is RAGChunkGraphNode => Boolean(node))\n\t\t: activeNode\n\t\t\t? [activeNode]\n\t\t\t: [];\n\n\treturn {\n\t\tactiveChunkId: resolvedActiveChunkId,\n\t\tactiveNode,\n\t\tchildSections,\n\t\tnextNode,\n\t\tparentSection,\n\t\tpreviousNode,\n\t\tsection,\n\t\tsiblingSections,\n\t\tsectionNodes\n\t};\n};\nexport const buildRAGRetrievedState = (messages: AIMessage[]) => {\n\tconst message = getLatestRetrievedMessage(messages);\n\n\tif (!message) {\n\t\treturn null;\n\t}\n\n\tconst sources = message.sources ?? [];\n\tconst citations = buildRAGCitations(sources);\n\tconst sectionDiagnostics = buildRAGSectionRetrievalDiagnostics(\n\t\tsources,\n\t\tisRAGRetrievalTrace(message.retrievalTrace)\n\t\t\t? message.retrievalTrace\n\t\t\t: undefined\n\t);\n\tconst sourceSummaries = buildRAGSourceSummaries(sources);\n\tconst groundedAnswer = buildRAGGroundedAnswer(message.content, sources);\n\n\treturn {\n\t\tcitationReferenceMap: buildRAGCitationReferenceMap(citations),\n\t\tcitations,\n\t\tconversationId: message.conversationId,\n\t\texcerptModeCounts: buildRAGExcerptModeCounts([\n\t\t\t...citations.map((citation) => citation.excerptSelection),\n\t\t\t...sourceSummaries.map((summary) => summary.excerptSelection)\n\t\t]),\n\t\tgroundedAnswer,\n\t\tmessageId: message.id,\n\t\tretrievalDurationMs: message.retrievalDurationMs,\n\t\tretrievalStartedAt: message.retrievalStartedAt,\n\t\tretrievedAt: message.retrievedAt,\n\t\ttrace: isRAGRetrievalTrace(message.retrievalTrace)\n\t\t\t? message.retrievalTrace\n\t\t\t: undefined,\n\t\tsectionDiagnostics,\n\t\tsourceGroups: buildRAGSourceGroups(sources),\n\t\tsourceSummaries,\n\t\tsources\n\t};\n};\nexport const buildRAGSourceSummaries = (sources: RAGSource[]) => {\n\tconst sourceGroups = buildRAGSourceGroups(sources);\n\tconst citations = buildRAGCitations(sources);\n\tconst citationReferenceMap = buildRAGCitationReferenceMap(citations);\n\n\treturn sourceGroups.map<RAGSourceSummary>((group) => {\n\t\tconst groupCitations = citations.filter((citation) =>\n\t\t\tgroup.chunks.some((chunk) => chunk.chunkId === citation.chunkId)\n\t\t);\n\t\tconst leadChunk = getPreferredSourceLeadChunk(group.chunks);\n\t\tconst excerpts = leadChunk\n\t\t\t? buildRAGChunkExcerpts(group.chunks, leadChunk.chunkId)\n\t\t\t: undefined;\n\t\tconst structure =\n\t\t\tleadChunk?.structure ?? buildRAGChunkStructure(leadChunk?.metadata);\n\t\tconst excerptSelection = buildRAGExcerptSelection(excerpts, structure);\n\n\t\treturn {\n\t\t\tbestScore: group.bestScore,\n\t\t\tcitationNumbers: groupCitations.map(\n\t\t\t\t(citation) => citationReferenceMap[citation.chunkId] ?? 0\n\t\t\t),\n\t\t\tcitations: groupCitations,\n\t\t\tchunkIds: group.chunks.map((chunk) => chunk.chunkId),\n\t\t\tcontextLabel:\n\t\t\t\tleadChunk?.labels?.contextLabel ??\n\t\t\t\tbuildContextLabel(leadChunk?.metadata),\n\t\t\tcount: group.count,\n\t\t\texcerpt:\n\t\t\t\texcerptSelection.excerpt || buildExcerpt(leadChunk?.text ?? ''),\n\t\t\texcerpts,\n\t\t\texcerptSelection,\n\t\t\tkey: group.key,\n\t\t\tlabel: group.label,\n\t\t\tlocatorLabel:\n\t\t\t\tleadChunk?.labels?.locatorLabel ??\n\t\t\t\tbuildLocatorLabel(\n\t\t\t\t\tleadChunk?.metadata,\n\t\t\t\t\tleadChunk?.source,\n\t\t\t\t\tleadChunk?.title\n\t\t\t\t),\n\t\t\tprovenanceLabel:\n\t\t\t\tleadChunk?.labels?.provenanceLabel ??\n\t\t\t\tbuildProvenanceLabel(leadChunk?.metadata),\n\t\t\tstructure,\n\t\t\tsource: group.source,\n\t\t\ttitle: group.title\n\t\t};\n\t});\n};\n\nconst getSectionPathFromSource = (source: RAGSource) => {\n\tconst path =\n\t\tsource.structure?.section?.path ??\n\t\t(Array.isArray(source.metadata?.sectionPath)\n\t\t\t? source.metadata.sectionPath\n\t\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(value): value is string => typeof value === 'string'\n\t\t\t\t\t)\n\t\t\t: []);\n\n\treturn path.length > 0 ? path : undefined;\n};\n\nconst isBlockAwareContextLabel = (value?: string) =>\n\ttypeof value === 'string' &&\n\t(value.startsWith('PDF ') ||\n\t\tvalue.startsWith('Office ') ||\n\t\tvalue.startsWith('Slide '));\n\nconst getStructuredSectionScoreWeight = (\n\tmetadata?: Record<string, unknown>\n) => {\n\tif (!metadata) {\n\t\treturn 1;\n\t}\n\n\tconst pdfTextKind = getContextString(metadata.pdfTextKind);\n\tconst officeBlockKind = getContextString(metadata.officeBlockKind);\n\tconst sectionKind = getContextString(metadata.sectionKind);\n\tconst slideTitle = getContextString(metadata.slideTitle);\n\tconst slideNotesText = getContextString(metadata.slideNotesText);\n\n\tif (pdfTextKind === 'table_like') {\n\t\treturn 1.28;\n\t}\n\tif (officeBlockKind === 'table' || officeBlockKind === 'list') {\n\t\treturn 1.24;\n\t}\n\tif (\n\t\tsectionKind === 'pdf_block' ||\n\t\tsectionKind === 'office_block' ||\n\t\tofficeBlockKind === 'paragraph' ||\n\t\tpdfTextKind === 'paragraph'\n\t) {\n\t\treturn 1.12;\n\t}\n\tif (sectionKind === 'presentation_slide' && slideNotesText) {\n\t\treturn 1.2;\n\t}\n\tif (sectionKind === 'presentation_slide' && slideTitle) {\n\t\treturn 1.14;\n\t}\n\n\treturn 1;\n};\n\nconst getStructuredSourceLeadScore = (source: RAGSource) =>\n\tsource.score * getStructuredSectionScoreWeight(source.metadata);\n\nconst getPreferredSourceLeadChunk = (chunks: RAGSource[]) =>\n\tchunks.slice().sort((left, right) => {\n\t\tconst leftWeightedScore = getStructuredSourceLeadScore(left);\n\t\tconst rightWeightedScore = getStructuredSourceLeadScore(right);\n\t\tif (rightWeightedScore !== leftWeightedScore) {\n\t\t\treturn rightWeightedScore - leftWeightedScore;\n\t\t}\n\t\tif (right.score !== left.score) {\n\t\t\treturn right.score - left.score;\n\t\t}\n\n\t\treturn left.chunkId.localeCompare(right.chunkId);\n\t})[0];\n\nexport const buildRAGSectionRetrievalDiagnostics = (\n\tsources: RAGSource[],\n\ttrace?: RAGRetrievalTrace\n): RAGSectionRetrievalDiagnostic[] => {\n\tconst totalScore = sources.reduce(\n\t\t(sum, source) =>\n\t\t\tsum +\n\t\t\tsource.score * getStructuredSectionScoreWeight(source.metadata),\n\t\t0\n\t);\n\tif (sources.length === 0 || totalScore <= 0) {\n\t\treturn [];\n\t}\n\n\tconst sections = new Map<\n\t\tstring,\n\t\t{\n\t\t\tkey: string;\n\t\t\tlabel: string;\n\t\t\tpath?: string[];\n\t\t\tparentLabel?: string;\n\t\t\tcount: number;\n\t\t\tbestScore: number;\n\t\t\ttotalScore: number;\n\t\t\ttopChunkId?: string;\n\t\t\ttopSource?: string;\n\t\t\tvectorHits: number;\n\t\t\tlexicalHits: number;\n\t\t\thybridHits: number;\n\t\t\tprimaryHits: number;\n\t\t\ttransformedHits: number;\n\t\t\tvariantHits: number;\n\t\t\tsourceSet: Set<string>;\n\t\t}\n\t>();\n\n\tfor (const source of sources) {\n\t\tconst structuredScore =\n\t\t\tsource.score * getStructuredSectionScoreWeight(source.metadata);\n\t\tconst path = getSectionPathFromSource(source);\n\t\tif (!path) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst key = path.join(' > ');\n\t\tconst label = path.at(-1) ?? key;\n\t\tconst parentLabel =\n\t\t\tpath.length > 1 ? path.slice(0, -1).join(' > ') : undefined;\n\t\tconst existing = sections.get(key);\n\t\tconst channels = Array.isArray(source.metadata?.retrievalChannels)\n\t\t\t? source.metadata.retrievalChannels.filter(\n\t\t\t\t\t(value): value is 'vector' | 'lexical' =>\n\t\t\t\t\t\tvalue === 'vector' || value === 'lexical'\n\t\t\t\t)\n\t\t\t: [];\n\t\tconst isHybrid =\n\t\t\tchannels.includes('vector') && channels.includes('lexical');\n\t\tconst vectorHits = channels.includes('vector') ? 1 : 0;\n\t\tconst lexicalHits = channels.includes('lexical') ? 1 : 0;\n\t\tconst hybridHits = isHybrid ? 1 : 0;\n\t\tconst queryOrigins = Array.isArray(\n\t\t\tsource.metadata?.retrievalQueryOrigins\n\t\t)\n\t\t\t? source.metadata.retrievalQueryOrigins.filter(\n\t\t\t\t\t(value): value is 'primary' | 'transformed' | 'variant' =>\n\t\t\t\t\t\tvalue === 'primary' ||\n\t\t\t\t\t\tvalue === 'transformed' ||\n\t\t\t\t\t\tvalue === 'variant'\n\t\t\t\t)\n\t\t\t: source.metadata?.retrievalQueryOrigin === 'primary' ||\n\t\t\t\t source.metadata?.retrievalQueryOrigin === 'transformed' ||\n\t\t\t\t source.metadata?.retrievalQueryOrigin === 'variant'\n\t\t\t\t? [source.metadata.retrievalQueryOrigin]\n\t\t\t\t: [];\n\t\tconst primaryHits = queryOrigins.includes('primary') ? 1 : 0;\n\t\tconst transformedHits = queryOrigins.includes('transformed') ? 1 : 0;\n\t\tconst variantHits = queryOrigins.includes('variant') ? 1 : 0;\n\t\tif (!existing) {\n\t\t\tsections.set(key, {\n\t\t\t\tbestScore: source.score,\n\t\t\t\tcount: 1,\n\t\t\t\thybridHits,\n\t\t\t\tkey,\n\t\t\t\tlabel,\n\t\t\t\tlexicalHits,\n\t\t\t\tparentLabel,\n\t\t\t\tpath,\n\t\t\t\tprimaryHits,\n\t\t\t\tsourceSet: new Set(source.source ? [source.source] : []),\n\t\t\t\ttopChunkId: source.chunkId,\n\t\t\t\ttopSource: source.source,\n\t\t\t\ttotalScore: structuredScore,\n\t\t\t\ttransformedHits,\n\t\t\t\tvariantHits,\n\t\t\t\tvectorHits\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\texisting.count += 1;\n\t\texisting.totalScore += structuredScore;\n\t\tif (source.source) {\n\t\t\texisting.sourceSet.add(source.source);\n\t\t}\n\t\texisting.vectorHits += vectorHits;\n\t\texisting.lexicalHits += lexicalHits;\n\t\texisting.hybridHits += hybridHits;\n\t\texisting.primaryHits += primaryHits;\n\t\texisting.transformedHits += transformedHits;\n\t\texisting.variantHits += variantHits;\n\t\tif (source.score > existing.bestScore) {\n\t\t\texisting.bestScore = source.score;\n\t\t\texisting.topChunkId = source.chunkId;\n\t\t\texisting.topSource = source.source;\n\t\t}\n\t}\n\n\tconst diagnostics = [...sections.values()];\n\tconst strongestBestHit = diagnostics.reduce(\n\t\t(highest, section) => Math.max(highest, section.bestScore),\n\t\t0\n\t);\n\tconst parentLabelByKey = new Map(\n\t\tdiagnostics.map(\n\t\t\t(section) => [section.key, section.parentLabel] as const\n\t\t)\n\t);\n\tconst stageSectionCounts = new Map(\n\t\t(trace?.steps ?? [])\n\t\t\t.filter(\n\t\t\t\t(step) =>\n\t\t\t\t\tArray.isArray(step.sectionCounts) &&\n\t\t\t\t\tstep.sectionCounts.length > 0\n\t\t\t)\n\t\t\t.map((step) => [step.stage, step.sectionCounts ?? []] as const)\n\t);\n\tconst stageSectionScores = new Map(\n\t\t(trace?.steps ?? [])\n\t\t\t.filter(\n\t\t\t\t(step) =>\n\t\t\t\t\tArray.isArray(step.sectionScores) &&\n\t\t\t\t\tstep.sectionScores.length > 0\n\t\t\t)\n\t\t\t.map((step) => [step.stage, step.sectionScores ?? []] as const)\n\t);\n\n\treturn diagnostics\n\t\t.map<RAGSectionRetrievalDiagnostic>((section) => {\n\t\t\tconst siblingPool = diagnostics.filter(\n\t\t\t\t(entry) => entry.parentLabel === section.parentLabel\n\t\t\t);\n\t\t\tconst siblings = siblingPool.filter(\n\t\t\t\t(entry) => entry.key !== section.key\n\t\t\t);\n\t\t\tconst strongestSibling = siblings\n\t\t\t\t.slice()\n\t\t\t\t.sort((left, right) => right.totalScore - left.totalScore)[0];\n\t\t\tconst parentTotal = siblingPool.reduce(\n\t\t\t\t(sum, entry) => sum + entry.totalScore,\n\t\t\t\t0\n\t\t\t);\n\t\t\tconst scoreShare = section.totalScore / totalScore;\n\t\t\tconst parentShare =\n\t\t\t\tparentTotal > 0 ? section.totalScore / parentTotal : undefined;\n\t\t\tconst topChunk = sources.find(\n\t\t\t\t(source) => source.chunkId === section.topChunkId\n\t\t\t);\n\t\t\tconst topContextLabel =\n\t\t\t\ttopChunk?.labels?.contextLabel ??\n\t\t\t\tbuildContextLabel(topChunk?.metadata);\n\t\t\tconst topLocatorLabel =\n\t\t\t\ttopChunk?.labels?.locatorLabel ??\n\t\t\t\tbuildLocatorLabel(\n\t\t\t\t\ttopChunk?.metadata,\n\t\t\t\t\ttopChunk?.source,\n\t\t\t\t\ttopChunk?.title\n\t\t\t\t);\n\t\t\tconst sourceAwareChunkReason = formatSourceAwareChunkReason(\n\t\t\t\ttopChunk?.metadata?.sourceAwareChunkReason\n\t\t\t);\n\t\t\tconst sourceAwareUnitScopeLabel = buildSourceAwareUnitScopeLabel(\n\t\t\t\ttopChunk?.metadata\n\t\t\t);\n\t\t\tconst parentDistribution =\n\t\t\t\tparentTotal > 0\n\t\t\t\t\t? siblingPool\n\t\t\t\t\t\t\t.map((entry) => ({\n\t\t\t\t\t\t\t\tcount: entry.count,\n\t\t\t\t\t\t\t\tisActive: entry.key === section.key,\n\t\t\t\t\t\t\t\tkey: entry.key,\n\t\t\t\t\t\t\t\tlabel: entry.label,\n\t\t\t\t\t\t\t\tparentShare: entry.totalScore / parentTotal,\n\t\t\t\t\t\t\t\ttotalScore: entry.totalScore\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t.sort(\n\t\t\t\t\t\t\t\t(left, right) =>\n\t\t\t\t\t\t\t\t\tright.totalScore - left.totalScore\n\t\t\t\t\t\t\t)\n\t\t\t\t\t: [];\n\t\t\tconst reasons: RAGSectionRetrievalDiagnostic['reasons'] = [];\n\t\t\tconst stageCounts =\n\t\t\t\ttrace?.steps\n\t\t\t\t\t.map((step) => ({\n\t\t\t\t\t\tcount:\n\t\t\t\t\t\t\tstep.sectionCounts?.find(\n\t\t\t\t\t\t\t\t(entry) => entry.key === section.key\n\t\t\t\t\t\t\t)?.count ?? 0,\n\t\t\t\t\t\tstage: step.stage\n\t\t\t\t\t}))\n\t\t\t\t\t.filter((entry) => entry.count > 0) ?? [];\n\t\t\tconst stageWeights = stageCounts.map((entry) => {\n\t\t\t\tconst previousStageEntry =\n\t\t\t\t\tstageCounts[\n\t\t\t\t\t\tstageCounts.findIndex(\n\t\t\t\t\t\t\t(candidate) => candidate.stage === entry.stage\n\t\t\t\t\t\t) - 1\n\t\t\t\t\t];\n\t\t\t\tconst stageEntries =\n\t\t\t\t\tstageSectionCounts\n\t\t\t\t\t\t.get(entry.stage)\n\t\t\t\t\t\t?.filter((candidate) => candidate.count > 0) ?? [];\n\t\t\t\tconst stageScoreEntries =\n\t\t\t\t\tstageSectionScores\n\t\t\t\t\t\t.get(entry.stage)\n\t\t\t\t\t\t?.filter((candidate) => candidate.totalScore > 0) ?? [];\n\t\t\t\tconst stageTotal = stageEntries.reduce(\n\t\t\t\t\t(sum, candidate) => sum + candidate.count,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tconst stageScoreTotal = stageScoreEntries.reduce(\n\t\t\t\t\t(sum, candidate) => sum + candidate.totalScore,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tconst siblingStageEntries = stageEntries.filter(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tcandidate.key !== section.key &&\n\t\t\t\t\t\tparentLabelByKey.get(candidate.key) ===\n\t\t\t\t\t\t\tsection.parentLabel\n\t\t\t\t);\n\t\t\t\tconst parentStageEntries = stageEntries.filter(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tparentLabelByKey.get(candidate.key) ===\n\t\t\t\t\t\tsection.parentLabel\n\t\t\t\t);\n\t\t\t\tconst siblingStageScoreEntries = stageScoreEntries.filter(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tcandidate.key !== section.key &&\n\t\t\t\t\t\tparentLabelByKey.get(candidate.key) ===\n\t\t\t\t\t\t\tsection.parentLabel\n\t\t\t\t);\n\t\t\t\tconst parentStageScoreEntries = stageScoreEntries.filter(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tparentLabelByKey.get(candidate.key) ===\n\t\t\t\t\t\tsection.parentLabel\n\t\t\t\t);\n\t\t\t\tconst strongestStageSibling = siblingStageEntries\n\t\t\t\t\t.slice()\n\t\t\t\t\t.sort((left, right) => right.count - left.count)[0];\n\t\t\t\tconst parentStageTotal = parentStageEntries.reduce(\n\t\t\t\t\t(sum, candidate) => sum + candidate.count,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tconst activeStageScore = stageScoreEntries.find(\n\t\t\t\t\t(candidate) => candidate.key === section.key\n\t\t\t\t)?.totalScore;\n\t\t\t\tconst strongestStageScoreSibling = siblingStageScoreEntries\n\t\t\t\t\t.slice()\n\t\t\t\t\t.sort(\n\t\t\t\t\t\t(left, right) => right.totalScore - left.totalScore\n\t\t\t\t\t)[0];\n\t\t\t\tconst parentStageScoreTotal = parentStageScoreEntries.reduce(\n\t\t\t\t\t(sum, candidate) => sum + candidate.totalScore,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tconst stageShare =\n\t\t\t\t\tstageTotal > 0 ? entry.count / stageTotal : 0;\n\t\t\t\tconst retentionRate =\n\t\t\t\t\ttypeof previousStageEntry?.count === 'number' &&\n\t\t\t\t\tpreviousStageEntry.count > 0\n\t\t\t\t\t\t? entry.count / previousStageEntry.count\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst countDelta =\n\t\t\t\t\ttypeof previousStageEntry?.count === 'number'\n\t\t\t\t\t\t? entry.count - previousStageEntry.count\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst parentStageShare =\n\t\t\t\t\tparentStageTotal > 0\n\t\t\t\t\t\t? entry.count / parentStageTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst stageScoreShare =\n\t\t\t\t\ttypeof activeStageScore === 'number' && stageScoreTotal > 0\n\t\t\t\t\t\t? activeStageScore / stageScoreTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst parentStageScoreShare =\n\t\t\t\t\ttypeof activeStageScore === 'number' &&\n\t\t\t\t\tparentStageScoreTotal > 0\n\t\t\t\t\t\t? activeStageScore / parentStageScoreTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst stageShareGap =\n\t\t\t\t\tstageTotal > 0 && strongestStageSibling\n\t\t\t\t\t\t? entry.count / stageTotal -\n\t\t\t\t\t\t\tstrongestStageSibling.count / stageTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst parentStageShareGap =\n\t\t\t\t\tparentStageTotal > 0 && strongestStageSibling\n\t\t\t\t\t\t? entry.count / parentStageTotal -\n\t\t\t\t\t\t\tstrongestStageSibling.count / parentStageTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst stageScoreShareGap =\n\t\t\t\t\ttypeof activeStageScore === 'number' &&\n\t\t\t\t\tstageScoreTotal > 0 &&\n\t\t\t\t\tstrongestStageScoreSibling\n\t\t\t\t\t\t? activeStageScore / stageScoreTotal -\n\t\t\t\t\t\t\tstrongestStageScoreSibling.totalScore /\n\t\t\t\t\t\t\t\tstageScoreTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst parentStageScoreShareGap =\n\t\t\t\t\ttypeof activeStageScore === 'number' &&\n\t\t\t\t\tparentStageScoreTotal > 0 &&\n\t\t\t\t\tstrongestStageScoreSibling\n\t\t\t\t\t\t? activeStageScore / parentStageScoreTotal -\n\t\t\t\t\t\t\tstrongestStageScoreSibling.totalScore /\n\t\t\t\t\t\t\t\tparentStageScoreTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst reasons: RAGSectionRetrievalDiagnostic['stageWeights'][number]['reasons'] =\n\t\t\t\t\t[];\n\t\t\t\tif (\n\t\t\t\t\tentry.stage === 'rerank' &&\n\t\t\t\t\tstageShare > 0.5 &&\n\t\t\t\t\t(typeof stageShareGap !== 'number' || stageShareGap > 0)\n\t\t\t\t) {\n\t\t\t\t\treasons.push('rerank_preserved_lead');\n\t\t\t\t}\n\t\t\t\tif (entry.stage === 'finalize' && stageShare >= 0.5) {\n\t\t\t\t\treasons.push('final_stage_concentration');\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tentry.stage === 'finalize' &&\n\t\t\t\t\ttypeof parentStageShare === 'number' &&\n\t\t\t\t\tparentStageShare >= 0.6 &&\n\t\t\t\t\t(typeof parentStageShareGap !== 'number' ||\n\t\t\t\t\t\tparentStageShareGap > 0)\n\t\t\t\t) {\n\t\t\t\t\treasons.push('final_stage_dominant_within_parent');\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tstrongestStageSibling &&\n\t\t\t\t\t((typeof stageShareGap === 'number' &&\n\t\t\t\t\t\tstageShareGap <= 0.1) ||\n\t\t\t\t\t\t(typeof parentStageShareGap === 'number' &&\n\t\t\t\t\t\t\tparentStageShareGap <= 0.1))\n\t\t\t\t) {\n\t\t\t\t\treasons.push('stage_runner_up_pressure');\n\t\t\t\t}\n\t\t\t\tif (typeof countDelta === 'number') {\n\t\t\t\t\tif (countDelta > 0) {\n\t\t\t\t\t\treasons.push('stage_expanded');\n\t\t\t\t\t} else if (countDelta < 0) {\n\t\t\t\t\t\treasons.push('stage_narrowed');\n\t\t\t\t\t} else {\n\t\t\t\t\t\treasons.push('stage_held');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcount: entry.count,\n\t\t\t\t\tcountDelta,\n\t\t\t\t\tparentStageScoreShare,\n\t\t\t\t\tparentStageShare,\n\t\t\t\t\tparentStageShareGap,\n\t\t\t\t\tpreviousCount: previousStageEntry?.count,\n\t\t\t\t\tpreviousStage: previousStageEntry?.stage,\n\t\t\t\t\treasons,\n\t\t\t\t\tretentionRate,\n\t\t\t\t\tstage: entry.stage,\n\t\t\t\t\tstageScoreShare,\n\t\t\t\t\tstageScoreShareGap,\n\t\t\t\t\tstageShare,\n\t\t\t\t\tstageShareGap,\n\t\t\t\t\ttotalScore: activeStageScore,\n\t\t\t\t\tstrongestSiblingCount: strongestStageSibling?.count,\n\t\t\t\t\tstrongestSiblingLabel: strongestStageSibling\n\t\t\t\t\t\t? (diagnostics.find(\n\t\t\t\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\t\t\t\tcandidate.key === strongestStageSibling.key\n\t\t\t\t\t\t\t)?.label ?? strongestStageSibling.key)\n\t\t\t\t\t\t: undefined\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst firstSeenStage = stageCounts[0]?.stage;\n\t\t\tconst lastSeenStage = stageCounts.at(-1)?.stage;\n\t\t\tconst peakStageEntry = stageCounts.reduce<\n\t\t\t\t(typeof stageCounts)[number] | undefined\n\t\t\t>(\n\t\t\t\t(highest, entry) =>\n\t\t\t\t\t!highest || entry.count > highest.count ? entry : highest,\n\t\t\t\tundefined\n\t\t\t);\n\t\t\tconst finalStageEntry = stageCounts.at(-1);\n\t\t\tconst peakCount = peakStageEntry?.count ?? section.count;\n\t\t\tconst finalCount = finalStageEntry?.count;\n\t\t\tconst finalRetentionRate =\n\t\t\t\ttypeof finalCount === 'number' && peakCount > 0\n\t\t\t\t\t? finalCount / peakCount\n\t\t\t\t\t: undefined;\n\t\t\tconst dropFromPeak =\n\t\t\t\ttypeof finalCount === 'number'\n\t\t\t\t\t? peakCount - finalCount\n\t\t\t\t\t: undefined;\n\t\t\tconst queryAttributionReasons: RAGSectionRetrievalDiagnostic['queryAttribution']['reasons'] =\n\t\t\t\t[];\n\t\t\tconst queryAttributionMode =\n\t\t\t\tsection.primaryHits > 0 &&\n\t\t\t\tsection.transformedHits === 0 &&\n\t\t\t\tsection.variantHits === 0\n\t\t\t\t\t? 'primary'\n\t\t\t\t\t: section.transformedHits > 0 &&\n\t\t\t\t\t\t section.primaryHits === 0 &&\n\t\t\t\t\t\t section.variantHits === 0\n\t\t\t\t\t\t? 'transformed'\n\t\t\t\t\t\t: section.variantHits > 0 &&\n\t\t\t\t\t\t\t section.primaryHits === 0 &&\n\t\t\t\t\t\t\t section.transformedHits === 0\n\t\t\t\t\t\t\t? 'variant'\n\t\t\t\t\t\t\t: 'mixed';\n\t\t\tif (queryAttributionMode === 'primary') {\n\t\t\t\tqueryAttributionReasons.push('base_query_only');\n\t\t\t}\n\t\t\tif (queryAttributionMode === 'transformed') {\n\t\t\t\tqueryAttributionReasons.push('transformed_query_only');\n\t\t\t\tqueryAttributionReasons.push('transform_introduced');\n\t\t\t}\n\t\t\tif (queryAttributionMode === 'variant') {\n\t\t\t\tqueryAttributionReasons.push('variant_only');\n\t\t\t\tqueryAttributionReasons.push('variant_supported');\n\t\t\t}\n\t\t\tif (queryAttributionMode === 'mixed') {\n\t\t\t\tqueryAttributionReasons.push('mixed_query_sources');\n\t\t\t\tif (section.variantHits > 0) {\n\t\t\t\t\tqueryAttributionReasons.push('variant_supported');\n\t\t\t\t}\n\t\t\t\tif (section.transformedHits > 0 && section.primaryHits === 0) {\n\t\t\t\t\tqueryAttributionReasons.push('transform_introduced');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (section.bestScore >= strongestBestHit) {\n\t\t\t\treasons.push('best_hit');\n\t\t\t}\n\t\t\tif (section.count > 1) {\n\t\t\t\treasons.push('multi_hit_section');\n\t\t\t}\n\t\t\tif (siblings.length === 0) {\n\t\t\t\treasons.push('only_section_in_parent');\n\t\t\t} else if (\n\t\t\t\t!strongestSibling ||\n\t\t\t\tsection.totalScore >= strongestSibling.totalScore\n\t\t\t) {\n\t\t\t\treasons.push('dominant_within_parent');\n\t\t\t}\n\t\t\tif (scoreShare >= 0.5 || (parentShare ?? 0) >= 0.6) {\n\t\t\t\treasons.push('concentrated_evidence');\n\t\t\t}\n\n\t\t\tconst summaryParts = [\n\t\t\t\tisBlockAwareContextLabel(topContextLabel)\n\t\t\t\t\t? topContextLabel\n\t\t\t\t\t: '',\n\t\t\t\t`${section.count} hit${section.count === 1 ? '' : 's'}`,\n\t\t\t\t`${(scoreShare * 100).toFixed(0)}% score share`,\n\t\t\t\t`vector ${section.vectorHits} · lexical ${section.lexicalHits} · hybrid ${section.hybridHits}`,\n\t\t\t\ttypeof parentShare === 'number'\n\t\t\t\t\t? `${(parentShare * 100).toFixed(0)}% of parent section set`\n\t\t\t\t\t: '',\n\t\t\t\tsourceAwareChunkReason\n\t\t\t\t\t? `boundary ${sourceAwareChunkReason}`\n\t\t\t\t\t: '',\n\t\t\t\tsourceAwareUnitScopeLabel\n\t\t\t\t\t? `scope ${sourceAwareUnitScopeLabel}`\n\t\t\t\t\t: '',\n\t\t\t\tstrongestSibling\n\t\t\t\t\t? `ahead of ${strongestSibling.label} by ${(section.totalScore - strongestSibling.totalScore).toFixed(2)}`\n\t\t\t\t\t: 'no sibling competition'\n\t\t\t].filter(Boolean);\n\n\t\t\treturn {\n\t\t\t\taverageScore: section.totalScore / section.count,\n\t\t\t\tbestScore: section.bestScore,\n\t\t\t\tcount: section.count,\n\t\t\t\tkey: section.key,\n\t\t\t\tlabel: section.label,\n\t\t\t\tparentLabel: section.parentLabel,\n\t\t\t\tparentDistribution,\n\t\t\t\tparentShare,\n\t\t\t\tparentShareGap:\n\t\t\t\t\ttypeof parentShare === 'number' &&\n\t\t\t\t\tstrongestSibling &&\n\t\t\t\t\tparentTotal > 0\n\t\t\t\t\t\t? parentShare -\n\t\t\t\t\t\t\tstrongestSibling.totalScore / parentTotal\n\t\t\t\t\t\t: undefined,\n\t\t\t\tpath: section.path,\n\t\t\t\tfirstSeenStage,\n\t\t\t\tfinalCount,\n\t\t\t\tfinalRetentionRate,\n\t\t\t\tlastSeenStage,\n\t\t\t\tdropFromPeak,\n\t\t\t\tpeakCount,\n\t\t\t\tpeakStage: peakStageEntry?.stage,\n\t\t\t\tqueryAttribution: {\n\t\t\t\t\tmode: queryAttributionMode,\n\t\t\t\t\tprimaryHits: section.primaryHits,\n\t\t\t\t\treasons: queryAttributionReasons,\n\t\t\t\t\ttransformedHits: section.transformedHits,\n\t\t\t\t\tvariantHits: section.variantHits\n\t\t\t\t},\n\t\t\t\trequestedMode: trace?.requestedMode,\n\t\t\t\tretrievalMode: trace?.mode,\n\t\t\t\troutingLabel: trace?.routingLabel,\n\t\t\t\troutingProvider: trace?.routingProvider,\n\t\t\t\troutingReason: trace?.routingReason,\n\t\t\t\tqueryTransformLabel: trace?.queryTransformLabel,\n\t\t\t\tqueryTransformProvider: trace?.queryTransformProvider,\n\t\t\t\tqueryTransformReason: trace?.queryTransformReason,\n\t\t\t\treasons,\n\t\t\t\trerankApplied: trace?.steps.some(\n\t\t\t\t\t(step) =>\n\t\t\t\t\t\tstep.stage === 'rerank' &&\n\t\t\t\t\t\tstep.metadata?.applied === true\n\t\t\t\t),\n\t\t\t\tscoreShare,\n\t\t\t\tscoreThresholdApplied: trace?.steps.some(\n\t\t\t\t\t(step) => step.stage === 'score_filter'\n\t\t\t\t),\n\t\t\t\tstageCounts,\n\t\t\t\tstageWeights,\n\t\t\t\tsiblingCount: siblings.length,\n\t\t\t\tsiblingScoreGap: strongestSibling\n\t\t\t\t\t? section.totalScore - strongestSibling.totalScore\n\t\t\t\t\t: undefined,\n\t\t\t\tsourceCount: section.sourceSet.size,\n\t\t\t\tsourceAwareChunkReasonLabel: sourceAwareChunkReason,\n\t\t\t\tsourceAwareUnitScopeLabel,\n\t\t\t\ttopContextLabel,\n\t\t\t\ttopLocatorLabel,\n\t\t\t\tsourceBalanceApplied: trace?.steps.some(\n\t\t\t\t\t(step) => step.stage === 'source_balance'\n\t\t\t\t),\n\t\t\t\tstrongestSiblingLabel: strongestSibling?.label,\n\t\t\t\tstrongestSiblingScore: strongestSibling?.totalScore,\n\t\t\t\tsummary: summaryParts.join(' · '),\n\t\t\t\ttopChunkId: section.topChunkId,\n\t\t\t\ttopSource: section.topSource,\n\t\t\t\ttotalScore: section.totalScore,\n\t\t\t\thybridHits: section.hybridHits,\n\t\t\t\tlexicalHits: section.lexicalHits,\n\t\t\t\tvectorHits: section.vectorHits\n\t\t\t};\n\t\t})\n\t\t.sort((left, right) => {\n\t\t\tif (right.totalScore !== left.totalScore) {\n\t\t\t\treturn right.totalScore - left.totalScore;\n\t\t\t}\n\t\t\tif (right.bestScore !== left.bestScore) {\n\t\t\t\treturn right.bestScore - left.bestScore;\n\t\t\t}\n\t\t\treturn left.label.localeCompare(right.label);\n\t\t});\n};\n\nexport type RAGStreamProgress = {\n\tstage: RAGStreamStage;\n\tconversationId?: string;\n\tmessageId?: string;\n\tretrievalStartedAt?: number;\n\tretrievedAt?: number;\n\tretrievalDurationMs?: number;\n\thasContent: boolean;\n\thasRetrieved: boolean;\n\thasSources: boolean;\n\thasThinking: boolean;\n\thasToolCalls: boolean;\n\tisComplete: boolean;\n\tisError: boolean;\n\tisIdle: boolean;\n\tisRetrieving: boolean;\n\tisRetrieved: boolean;\n\tisStreaming: boolean;\n\tisSubmitting: boolean;\n\tsourceCount: number;\n\tlatestMessage: AIMessage | undefined;\n};\n\nconst buildStreamProgressState = (messages: AIMessage[]) => {\n\tconst latestMessage = getLatestAssistantMessage(messages);\n\tconst retrieved = latestMessage\n\t\t? buildRAGRetrievedState(messages)\n\t\t: undefined;\n\n\treturn {\n\t\tconversationId: latestMessage?.conversationId,\n\t\tlatestMessage,\n\t\tmessageId: latestMessage?.id,\n\t\tretrieved,\n\t\tsourceCount:\n\t\t\tretrieved?.sources.length ?? latestMessage?.sources?.length ?? 0\n\t};\n};\n\nexport const buildRAGStreamProgress = ({\n\terror,\n\tisStreaming,\n\tmessages\n}: {\n\terror: string | null;\n\tisStreaming: boolean;\n\tmessages: AIMessage[];\n}): RAGStreamProgress => {\n\tconst stage = resolveRAGStreamStage({\n\t\terror,\n\t\tisStreaming,\n\t\tmessages\n\t});\n\tconst state = buildStreamProgressState(messages);\n\tconst hasSources = state.sourceCount > 0;\n\tconst hasRetrieved =\n\t\tstage === 'retrieved' ||\n\t\tstate.retrieved !== undefined ||\n\t\tstate.latestMessage?.retrievedAt !== undefined;\n\tconst hasThinking =\n\t\ttypeof state.latestMessage?.thinking === 'string' &&\n\t\tstate.latestMessage.thinking.length > 0;\n\tconst hasToolCalls = (state.latestMessage?.toolCalls?.length ?? 0) > 0;\n\n\treturn {\n\t\tconversationId: state.conversationId,\n\t\thasContent:\n\t\t\ttypeof state.latestMessage?.content === 'string' &&\n\t\t\tstate.latestMessage.content.length > 0,\n\t\thasRetrieved,\n\t\thasSources,\n\t\thasThinking,\n\t\thasToolCalls,\n\t\tisComplete: stage === 'complete',\n\t\tisError: stage === 'error',\n\t\tisIdle: stage === 'idle',\n\t\tisRetrieved: stage === 'retrieved',\n\t\tisRetrieving: stage === 'submitting' || stage === 'retrieving',\n\t\tisStreaming: stage === 'streaming',\n\t\tisSubmitting: stage === 'submitting',\n\t\tlatestMessage: state.latestMessage,\n\t\tmessageId: state.messageId,\n\t\tretrievalDurationMs: state.retrieved?.retrievalDurationMs,\n\t\tretrievalStartedAt: state.retrieved?.retrievalStartedAt,\n\t\tretrievedAt: state.retrieved?.retrievedAt,\n\t\tsourceCount: state.sourceCount,\n\t\tstage\n\t};\n};\n\nexport type RAGStreamProgressState = ReturnType<typeof buildRAGStreamProgress>;\nexport const buildRAGAnswerWorkflowState = ({\n\terror,\n\tisStreaming,\n\tmessages\n}: {\n\terror: string | null;\n\tisStreaming: boolean;\n\tmessages: AIMessage[];\n}): RAGAnswerWorkflowState => {\n\tconst latestAssistantMessage = getLatestAssistantMessage(messages);\n\tconst sources = getLatestRAGSources(messages);\n\tconst sourceGroups = buildRAGSourceGroups(sources);\n\tconst citations = buildRAGCitations(sources);\n\tconst citationReferenceMap = buildRAGCitationReferenceMap(citations);\n\tconst sourceSummaries = buildRAGSourceSummaries(sources);\n\tconst groundingReferences = buildRAGGroundingReferences(sources);\n\tconst groundedAnswer = buildRAGGroundedAnswer(\n\t\tlatestAssistantMessage?.content ?? '',\n\t\tsources\n\t);\n\tconst retrieval = buildRAGRetrievedState(messages);\n\tconst sectionDiagnostics = buildRAGSectionRetrievalDiagnostics(\n\t\tsources,\n\t\tretrieval?.trace\n\t);\n\tconst progress = buildRAGStreamProgress({\n\t\terror,\n\t\tisStreaming,\n\t\tmessages\n\t});\n\n\treturn {\n\t\texcerptModeCounts: buildRAGExcerptModeCounts([\n\t\t\t...citations.map((citation) => citation.excerptSelection),\n\t\t\t...sourceSummaries.map((summary) => summary.excerptSelection),\n\t\t\t...groundingReferences.map(\n\t\t\t\t(reference) => reference.excerptSelection\n\t\t\t),\n\t\t\t...groundedAnswer.sectionSummaries.map(\n\t\t\t\t(summary) => summary.excerptSelection\n\t\t\t)\n\t\t]),\n\t\tcitationReferenceMap,\n\t\tcitations,\n\t\tcoverage: groundedAnswer.coverage,\n\t\terror,\n\t\tgroundedAnswer,\n\t\tgroundingReferences,\n\t\thasCitations: groundedAnswer.hasCitations,\n\t\thasGrounding: groundingReferences.length > 0,\n\t\thasRetrieved: progress.hasRetrieved,\n\t\thasSources: sources.length > 0,\n\t\tisAnswerStreaming: progress.isStreaming,\n\t\tisComplete: progress.isComplete,\n\t\tisError: progress.isError,\n\t\tisIdle: progress.isIdle,\n\t\tisRetrieved: progress.isRetrieved,\n\t\tisRetrieving: progress.isRetrieving,\n\t\tisRunning:\n\t\t\tprogress.isSubmitting ||\n\t\t\tprogress.isRetrieving ||\n\t\t\tprogress.isStreaming,\n\t\tisSubmitting: progress.isSubmitting,\n\t\tlatestAssistantMessage,\n\t\tmessages,\n\t\tretrieval,\n\t\tretrievalDurationMs: retrieval?.retrievalDurationMs,\n\t\tretrievalStartedAt: retrieval?.retrievalStartedAt,\n\t\tretrievedAt: retrieval?.retrievedAt,\n\t\tsectionDiagnostics,\n\t\tsourceGroups,\n\t\tsourceSummaries,\n\t\tsources,\n\t\tstage: progress.stage,\n\t\tungroundedReferenceNumbers: groundedAnswer.ungroundedReferenceNumbers\n\t};\n};\n\nexport const buildRAGSourceGroups = (sources: RAGSource[]) => {\n\tconst groups = new Map<string, RAGSourceGroup>();\n\n\tfor (const source of sources) {\n\t\tupdateSourceGroup(groups, source);\n\t}\n\n\treturn [...groups.values()].sort((left, right) => {\n\t\tif (right.bestScore !== left.bestScore) {\n\t\t\treturn right.bestScore - left.bestScore;\n\t\t}\n\n\t\treturn left.label.localeCompare(right.label);\n\t});\n};\n\nconst buildSourceGroup = (source: RAGSource, key: string): RAGSourceGroup => ({\n\tbestScore: source.score,\n\tchunks: [source],\n\tcount: 1,\n\tkey,\n\tlabel: buildSourceLabel(source),\n\tlabels:\n\t\tsource.labels ??\n\t\tbuildRAGSourceLabels({\n\t\t\tmetadata: source.metadata,\n\t\t\tsource: source.source,\n\t\t\ttitle: source.title\n\t\t}),\n\tstructure: source.structure ?? buildRAGChunkStructure(source.metadata),\n\tsource: source.source,\n\ttitle: source.title\n});\n\nconst updateSourceGroup = (\n\tgroups: Map<string, RAGSourceGroup>,\n\tsource: RAGSource\n) => {\n\tconst key = buildSourceGroupKey(source);\n\tconst existing = groups.get(key);\n\tif (!existing) {\n\t\tgroups.set(key, buildSourceGroup(source, key));\n\n\t\treturn;\n\t}\n\n\texisting.bestScore = Math.max(existing.bestScore, source.score);\n\texisting.count += 1;\n\texisting.chunks.push(source);\n\tconst leadChunk = getPreferredSourceLeadChunk(existing.chunks);\n\tif (leadChunk) {\n\t\texisting.label = buildSourceLabel(leadChunk);\n\t\texisting.labels =\n\t\t\tleadChunk.labels ??\n\t\t\tbuildRAGSourceLabels({\n\t\t\t\tmetadata: leadChunk.metadata,\n\t\t\t\tsource: leadChunk.source,\n\t\t\t\ttitle: leadChunk.title\n\t\t\t});\n\t\texisting.structure =\n\t\t\tleadChunk.structure ?? buildRAGChunkStructure(leadChunk.metadata);\n\t\texisting.source = leadChunk.source;\n\t\texisting.title = leadChunk.title;\n\t}\n};\nexport const getLatestAssistantMessage = (messages: AIMessage[]) => {\n\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = messages[index];\n\t\tif (message?.role === 'assistant') {\n\t\t\treturn message;\n\t\t}\n\t}\n\n\treturn undefined;\n};\nexport const getLatestRAGSources = (messages: AIMessage[]) =>\n\tgetLatestAssistantMessage(messages)?.sources ?? [];\nexport const getLatestRetrievedMessage = (messages: AIMessage[]) => {\n\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = messages[index];\n\t\tif (\n\t\t\tmessage?.role === 'assistant' &&\n\t\t\t(typeof message.retrievedAt === 'number' ||\n\t\t\t\t(message.sources?.length ?? 0) > 0)\n\t\t) {\n\t\t\treturn message;\n\t\t}\n\t}\n\n\treturn undefined;\n};\nexport const resolveRAGStreamStage = ({\n\terror,\n\tisStreaming,\n\tmessages\n}: {\n\terror: string | null;\n\tisStreaming: boolean;\n\tmessages: AIMessage[];\n}) => {\n\tif (error) {\n\t\treturn 'error';\n\t}\n\n\tconst assistantMessage = getLatestAssistantMessage(messages);\n\tif (!assistantMessage) {\n\t\treturn isStreaming ? 'submitting' : 'idle';\n\t}\n\n\tconst isRetrieving =\n\t\ttypeof assistantMessage.retrievalStartedAt === 'number' &&\n\t\ttypeof assistantMessage.retrievedAt !== 'number';\n\n\tif (isRetrieving) {\n\t\treturn 'retrieving';\n\t}\n\n\tif (!isStreaming) {\n\t\treturn 'complete';\n\t}\n\n\tconst hasRetrieved = typeof assistantMessage.retrievedAt === 'number';\n\tconst hasContent =\n\t\tassistantMessage.content.trim().length > 0 ||\n\t\tassistantMessage.thinking?.trim().length ||\n\t\t(assistantMessage.toolCalls?.length ?? 0) > 0 ||\n\t\t(assistantMessage.images?.length ?? 0) > 0;\n\n\tif (hasRetrieved && !hasContent) {\n\t\treturn 'retrieved';\n\t}\n\n\treturn 'streaming';\n};\n\nconst formatSignedDelta = (value: number, decimals = 0, suffix = '') =>\n\t`${value >= 0 ? '+' : ''}${value.toFixed(decimals)}${suffix}`;\n\nconst formatEvaluationPassingRate = (value: number) => `${value.toFixed(1)}%`;\n\nconst formatEvaluationSummary = (response: RAGEvaluationResponse) =>\n\t`${response.summary.totalCases} total · f1 ${response.summary.averageF1.toFixed(\n\t\t3\n\t)} · latency ${response.summary.averageLatencyMs.toFixed(1)}ms`;\n\nconst formatGroundingHistorySummaryValue = (response: {\n\tsummary: {\n\t\tpassedCases: number;\n\t\ttotalCases: number;\n\t\tgroundedCases: number;\n\t\tpartialCases: number;\n\t\tungroundedCases: number;\n\t\taverageResolvedCitationRate: number;\n\t\taverageCitationF1: number;\n\t};\n}) =>\n\t`${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\tcases.length > 0\n\t\t? cases.map((entry) => entry.label ?? entry.caseId).join(', ')\n\t\t: 'none';\n\nconst buildComparisonCaseLeadLabel = (snapshot?: {\n\ttopLocatorLabel?: string;\n\ttopContextLabel?: string;\n\tsourceAwareUnitScopeLabel?: string;\n\tsourceAwareChunkReasonLabel?: string;\n}) =>\n\tsnapshot?.topLocatorLabel ??\n\tsnapshot?.topContextLabel ??\n\tsnapshot?.sourceAwareUnitScopeLabel ??\n\tsnapshot?.sourceAwareChunkReasonLabel;\n\nconst formatComparisonLeadCueSummary = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst labels = Array.from(\n\t\tnew Set(\n\t\t\t(entry.caseTraceSnapshots ?? [])\n\t\t\t\t.map((snapshot) => buildComparisonCaseLeadLabel(snapshot))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t)\n\t).slice(0, 3);\n\n\treturn labels.length > 0 ? labels.join(' · ') : 'none';\n};\n\nconst formatComparisonLeadMediaCueSummary = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst labels = Array.from(\n\t\tnew Set(\n\t\t\t(entry.caseTraceSnapshots ?? [])\n\t\t\t\t.map((snapshot) =>\n\t\t\t\t\tformatLeadMediaCueSummary({\n\t\t\t\t\t\tleadSpeakerCue: snapshot.leadSpeakerCue,\n\t\t\t\t\t\tleadSpeakerAttributionCue:\n\t\t\t\t\t\t\tsnapshot.leadSpeakerAttributionCue,\n\t\t\t\t\t\tleadChannelCue: snapshot.leadChannelCue,\n\t\t\t\t\t\tleadChannelAttributionCue:\n\t\t\t\t\t\t\tsnapshot.leadChannelAttributionCue,\n\t\t\t\t\t\tleadContinuityCue: snapshot.leadContinuityCue\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.filter(\n\t\t\t\t\t(value): value is string =>\n\t\t\t\t\t\ttypeof value === 'string' && value !== 'none'\n\t\t\t\t)\n\t\t)\n\t).slice(0, 3);\n\n\treturn labels.length > 0 ? labels.join(' · ') : 'none';\n};\n\nconst formatSQLitePlannerCueSummary = (input?: {\n\tsqliteQueryMode?: string;\n\tsqliteQueryPushdownMode?: string;\n\tsqliteQueryPushdownApplied?: boolean;\n\tsqliteQueryPushdownClauseCount?: number;\n\tsqliteQueryPushdownCoverageRatio?: number;\n\tsqliteQueryTotalFilterClauseCount?: number;\n\tsqliteQueryJsRemainderClauseCount?: number;\n\tsqliteQueryMultiplierUsed?: number;\n\tsqliteQueryCandidateLimitUsed?: number;\n\tsqliteQueryMaxBackfillsUsed?: number;\n\tsqliteQueryMinResultsUsed?: number;\n\tsqliteQueryJsRemainderRatio?: number;\n\tsqliteQueryFilteredCandidates?: number;\n\tsqliteQueryInitialSearchK?: number;\n\tsqliteQueryFinalSearchK?: number;\n\tsqliteQuerySearchExpansionRatio?: number;\n\tsqliteQueryBackfillCount?: number;\n\tsqliteQueryBackfillLimitReached?: boolean;\n\tsqliteQueryMinResultsSatisfied?: boolean;\n\tsqliteQueryReturnedCount?: number;\n\tsqliteQueryCandidateYieldRatio?: number;\n\tsqliteQueryTopKFillRatio?: number;\n\tsqliteQueryUnderfilledTopK?: boolean;\n\tsqliteQueryCandidateBudgetExhausted?: boolean;\n\tsqliteQueryCandidateCoverage?: string;\n}) => {\n\tconst plannerJudgment =\n\t\ttypeof input?.sqliteQuerySearchExpansionRatio === 'number' &&\n\t\ttypeof input?.sqliteQueryCandidateYieldRatio === 'number' &&\n\t\tinput.sqliteQuerySearchExpansionRatio >= 2 &&\n\t\tinput.sqliteQueryCandidateYieldRatio < 0.25\n\t\t\t? 'expensive backfill'\n\t\t\t: typeof input?.sqliteQueryTopKFillRatio === 'number' &&\n\t\t\t\t typeof input?.sqliteQueryCandidateYieldRatio === 'number' &&\n\t\t\t\t input.sqliteQueryTopKFillRatio >= 1 &&\n\t\t\t\t input.sqliteQueryCandidateYieldRatio >= 0.5\n\t\t\t\t? 'efficient fill'\n\t\t\t\t: input?.sqliteQueryPushdownMode === 'full' &&\n\t\t\t\t\t typeof input?.sqliteQueryPushdownCoverageRatio ===\n\t\t\t\t\t\t\t'number' &&\n\t\t\t\t\t input.sqliteQueryPushdownCoverageRatio >= 1\n\t\t\t\t\t? 'full pushdown'\n\t\t\t\t\t: input?.sqliteQueryPushdownMode === 'partial' &&\n\t\t\t\t\t\t typeof input?.sqliteQueryJsRemainderRatio ===\n\t\t\t\t\t\t\t\t'number' &&\n\t\t\t\t\t\t input.sqliteQueryJsRemainderRatio >= 0.5\n\t\t\t\t\t\t? 'heavy js remainder'\n\t\t\t\t\t\t: undefined;\n\n\tconst parts = [\n\t\tinput?.sqliteQueryMode ? `mode ${input.sqliteQueryMode}` : undefined,\n\t\tinput?.sqliteQueryPushdownMode\n\t\t\t? `pushdown ${input.sqliteQueryPushdownMode}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryPushdownApplied === 'boolean'\n\t\t\t? input.sqliteQueryPushdownApplied\n\t\t\t\t? 'pushdown applied'\n\t\t\t\t: 'pushdown skipped'\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryPushdownClauseCount === 'number'\n\t\t\t? `clauses ${input.sqliteQueryPushdownClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryPushdownCoverageRatio === 'number'\n\t\t\t? `pushdown ${(input.sqliteQueryPushdownCoverageRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryJsRemainderClauseCount === 'number'\n\t\t\t? `js remainder ${input.sqliteQueryJsRemainderClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryMultiplierUsed === 'number'\n\t\t\t? `x${input.sqliteQueryMultiplierUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryCandidateLimitUsed === 'number'\n\t\t\t? `cap ${input.sqliteQueryCandidateLimitUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryMaxBackfillsUsed === 'number'\n\t\t\t? `backfills ${input.sqliteQueryMaxBackfillsUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryMinResultsUsed === 'number'\n\t\t\t? `min ${input.sqliteQueryMinResultsUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryJsRemainderRatio === 'number'\n\t\t\t? `js ${(input.sqliteQueryJsRemainderRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryTotalFilterClauseCount === 'number'\n\t\t\t? `total clauses ${input.sqliteQueryTotalFilterClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryFilteredCandidates === 'number'\n\t\t\t? `filtered ${input.sqliteQueryFilteredCandidates}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryInitialSearchK === 'number' &&\n\t\ttypeof input?.sqliteQueryFinalSearchK === 'number'\n\t\t\t? `searchK ${input.sqliteQueryInitialSearchK}->${input.sqliteQueryFinalSearchK}`\n\t\t\t: typeof input?.sqliteQueryFinalSearchK === 'number'\n\t\t\t\t? `searchK ${input.sqliteQueryFinalSearchK}`\n\t\t\t\t: undefined,\n\t\ttypeof input?.sqliteQuerySearchExpansionRatio === 'number'\n\t\t\t? `expand ${(input.sqliteQuerySearchExpansionRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryBackfillCount === 'number'\n\t\t\t? `backfill ${input.sqliteQueryBackfillCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryBackfillLimitReached === 'boolean' &&\n\t\tinput.sqliteQueryBackfillLimitReached\n\t\t\t? 'backfill limit reached'\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryMinResultsSatisfied === 'boolean' &&\n\t\tinput.sqliteQueryMinResultsSatisfied\n\t\t\t? 'min satisfied'\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryReturnedCount === 'number'\n\t\t\t? `returned ${input.sqliteQueryReturnedCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryCandidateYieldRatio === 'number'\n\t\t\t? `yield ${(input.sqliteQueryCandidateYieldRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryTopKFillRatio === 'number'\n\t\t\t? `fill ${(input.sqliteQueryTopKFillRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\tinput?.sqliteQueryCandidateCoverage\n\t\t\t? `coverage ${input.sqliteQueryCandidateCoverage}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryUnderfilledTopK === 'boolean' &&\n\t\tinput.sqliteQueryUnderfilledTopK\n\t\t\t? 'underfilled topK'\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryCandidateBudgetExhausted === 'boolean' &&\n\t\tinput.sqliteQueryCandidateBudgetExhausted\n\t\t\t? 'budget exhausted'\n\t\t\t: undefined,\n\t\tplannerJudgment\n\t].filter((value): value is string => typeof value === 'string');\n\n\treturn parts.length > 0 ? parts.join(' · ') : 'none';\n};\n\nconst formatPostgresPlannerCueSummary = (input?: {\n\tpostgresQueryMode?: string;\n\tpostgresQueryPushdownMode?: string;\n\tpostgresQueryPushdownApplied?: boolean;\n\tpostgresQueryPushdownClauseCount?: number;\n\tpostgresQueryPushdownCoverageRatio?: number;\n\tpostgresQueryTotalFilterClauseCount?: number;\n\tpostgresQueryJsRemainderClauseCount?: number;\n\tpostgresQueryMultiplierUsed?: number;\n\tpostgresQueryCandidateLimitUsed?: number;\n\tpostgresQueryMaxBackfillsUsed?: number;\n\tpostgresQueryMinResultsUsed?: number;\n\tpostgresQueryJsRemainderRatio?: number;\n\tpostgresQueryFilteredCandidates?: number;\n\tpostgresQueryInitialSearchK?: number;\n\tpostgresQueryFinalSearchK?: number;\n\tpostgresQuerySearchExpansionRatio?: number;\n\tpostgresQueryBackfillCount?: number;\n\tpostgresQueryBackfillLimitReached?: boolean;\n\tpostgresQueryMinResultsSatisfied?: boolean;\n\tpostgresQueryReturnedCount?: number;\n\tpostgresQueryCandidateYieldRatio?: number;\n\tpostgresQueryTopKFillRatio?: number;\n\tpostgresQueryUnderfilledTopK?: boolean;\n\tpostgresQueryCandidateBudgetExhausted?: boolean;\n\tpostgresQueryCandidateCoverage?: string;\n}) => {\n\tconst plannerJudgment =\n\t\ttypeof input?.postgresQuerySearchExpansionRatio === 'number' &&\n\t\ttypeof input?.postgresQueryCandidateYieldRatio === 'number' &&\n\t\tinput.postgresQuerySearchExpansionRatio >= 2 &&\n\t\tinput.postgresQueryCandidateYieldRatio < 0.25\n\t\t\t? 'expensive backfill'\n\t\t\t: typeof input?.postgresQueryTopKFillRatio === 'number' &&\n\t\t\t\t typeof input?.postgresQueryCandidateYieldRatio === 'number' &&\n\t\t\t\t input.postgresQueryTopKFillRatio >= 1 &&\n\t\t\t\t input.postgresQueryCandidateYieldRatio >= 0.5\n\t\t\t\t? 'efficient fill'\n\t\t\t\t: input?.postgresQueryPushdownMode === 'full' &&\n\t\t\t\t\t typeof input?.postgresQueryPushdownCoverageRatio ===\n\t\t\t\t\t\t\t'number' &&\n\t\t\t\t\t input.postgresQueryPushdownCoverageRatio >= 1\n\t\t\t\t\t? 'full pushdown'\n\t\t\t\t\t: input?.postgresQueryPushdownMode === 'partial' &&\n\t\t\t\t\t\t typeof input?.postgresQueryJsRemainderRatio ===\n\t\t\t\t\t\t\t\t'number' &&\n\t\t\t\t\t\t input.postgresQueryJsRemainderRatio >= 0.5\n\t\t\t\t\t\t? 'heavy js remainder'\n\t\t\t\t\t\t: undefined;\n\n\tconst parts = [\n\t\tinput?.postgresQueryMode\n\t\t\t? `mode ${input.postgresQueryMode}`\n\t\t\t: undefined,\n\t\tinput?.postgresQueryPushdownMode\n\t\t\t? `pushdown ${input.postgresQueryPushdownMode}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryPushdownApplied === 'boolean'\n\t\t\t? input.postgresQueryPushdownApplied\n\t\t\t\t? 'pushdown on'\n\t\t\t\t: 'pushdown off'\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryPushdownClauseCount === 'number'\n\t\t\t? `clauses ${input.postgresQueryPushdownClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryPushdownCoverageRatio === 'number'\n\t\t\t? `pushdown ${(input.postgresQueryPushdownCoverageRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryJsRemainderClauseCount === 'number'\n\t\t\t? `js remainder ${input.postgresQueryJsRemainderClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryMultiplierUsed === 'number'\n\t\t\t? `x${input.postgresQueryMultiplierUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryCandidateLimitUsed === 'number'\n\t\t\t? `cap ${input.postgresQueryCandidateLimitUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryMaxBackfillsUsed === 'number'\n\t\t\t? `backfills ${input.postgresQueryMaxBackfillsUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryMinResultsUsed === 'number'\n\t\t\t? `min ${input.postgresQueryMinResultsUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryJsRemainderRatio === 'number'\n\t\t\t? `js ${(input.postgresQueryJsRemainderRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryTotalFilterClauseCount === 'number'\n\t\t\t? `total clauses ${input.postgresQueryTotalFilterClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryFilteredCandidates === 'number'\n\t\t\t? `filtered ${input.postgresQueryFilteredCandidates}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryInitialSearchK === 'number' &&\n\t\ttypeof input?.postgresQueryFinalSearchK === 'number'\n\t\t\t? `searchK ${input.postgresQueryInitialSearchK}->${input.postgresQueryFinalSearchK}`\n\t\t\t: typeof input?.postgresQueryFinalSearchK === 'number'\n\t\t\t\t? `searchK ${input.postgresQueryFinalSearchK}`\n\t\t\t\t: undefined,\n\t\ttypeof input?.postgresQuerySearchExpansionRatio === 'number'\n\t\t\t? `expand ${(input.postgresQuerySearchExpansionRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryBackfillCount === 'number'\n\t\t\t? `backfill ${input.postgresQueryBackfillCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryBackfillLimitReached === 'boolean' &&\n\t\tinput.postgresQueryBackfillLimitReached\n\t\t\t? 'backfill limit reached'\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryMinResultsSatisfied === 'boolean' &&\n\t\tinput.postgresQueryMinResultsSatisfied\n\t\t\t? 'min satisfied'\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryReturnedCount === 'number'\n\t\t\t? `returned ${input.postgresQueryReturnedCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryCandidateYieldRatio === 'number'\n\t\t\t? `yield ${(input.postgresQueryCandidateYieldRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryTopKFillRatio === 'number'\n\t\t\t? `fill ${(input.postgresQueryTopKFillRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\tinput?.postgresQueryCandidateCoverage\n\t\t\t? `coverage ${input.postgresQueryCandidateCoverage}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryUnderfilledTopK === 'boolean' &&\n\t\tinput.postgresQueryUnderfilledTopK\n\t\t\t? 'underfilled topK'\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryCandidateBudgetExhausted === 'boolean' &&\n\t\tinput.postgresQueryCandidateBudgetExhausted\n\t\t\t? 'budget exhausted'\n\t\t\t: undefined,\n\t\tplannerJudgment\n\t].filter((value): value is string => typeof value === 'string');\n\n\treturn parts.length > 0 ? parts.join(' · ') : 'none';\n};\n\nconst formatComparisonSQLitePlannerCueSummary = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst labels = Array.from(\n\t\tnew Set(\n\t\t\t(entry.caseTraceSnapshots ?? [])\n\t\t\t\t.map((snapshot) =>\n\t\t\t\t\tformatSQLitePlannerCueSummary({\n\t\t\t\t\t\tsqliteQueryBackfillCount:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryBackfillCount,\n\t\t\t\t\t\tsqliteQueryCandidateBudgetExhausted:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryCandidateBudgetExhausted,\n\t\t\t\t\t\tsqliteQueryCandidateCoverage:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryCandidateCoverage,\n\t\t\t\t\t\tsqliteQueryFilteredCandidates:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryFilteredCandidates,\n\t\t\t\t\t\tsqliteQueryFinalSearchK:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryFinalSearchK,\n\t\t\t\t\t\tsqliteQueryInitialSearchK:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryInitialSearchK,\n\t\t\t\t\t\tsqliteQuerySearchExpansionRatio:\n\t\t\t\t\t\t\tsnapshot.sqliteQuerySearchExpansionRatio,\n\t\t\t\t\t\tsqliteQueryJsRemainderClauseCount:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryJsRemainderClauseCount,\n\t\t\t\t\t\tsqliteQueryCandidateLimitUsed:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryCandidateLimitUsed,\n\t\t\t\t\t\tsqliteQueryMaxBackfillsUsed:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryMaxBackfillsUsed,\n\t\t\t\t\t\tsqliteQueryMinResultsUsed:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryMinResultsUsed,\n\t\t\t\t\t\tsqliteQueryMode: snapshot.sqliteQueryMode,\n\t\t\t\t\t\tsqliteQueryPushdownApplied:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryPushdownApplied,\n\t\t\t\t\t\tsqliteQueryPushdownClauseCount:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryPushdownClauseCount,\n\t\t\t\t\t\tsqliteQueryPushdownCoverageRatio:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryPushdownCoverageRatio,\n\t\t\t\t\t\tsqliteQueryPushdownMode:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryPushdownMode,\n\t\t\t\t\t\tsqliteQueryTotalFilterClauseCount:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryTotalFilterClauseCount,\n\t\t\t\t\t\tsqliteQueryReturnedCount:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryReturnedCount,\n\t\t\t\t\t\tsqliteQueryBackfillLimitReached:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryBackfillLimitReached,\n\t\t\t\t\t\tsqliteQueryMinResultsSatisfied:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryMinResultsSatisfied,\n\t\t\t\t\t\tsqliteQueryCandidateYieldRatio:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryCandidateYieldRatio,\n\t\t\t\t\t\tsqliteQueryTopKFillRatio:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryTopKFillRatio,\n\t\t\t\t\t\tsqliteQueryJsRemainderRatio:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryJsRemainderRatio,\n\t\t\t\t\t\tsqliteQueryUnderfilledTopK:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryUnderfilledTopK\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.filter(\n\t\t\t\t\t(value): value is string =>\n\t\t\t\t\t\ttypeof value === 'string' && value !== 'none'\n\t\t\t\t)\n\t\t)\n\t).slice(0, 3);\n\n\treturn labels.length > 0 ? labels.join(' · ') : 'none';\n};\n\nconst formatComparisonPostgresPlannerCueSummary = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst labels = Array.from(\n\t\tnew Set(\n\t\t\t(entry.caseTraceSnapshots ?? [])\n\t\t\t\t.map((snapshot) =>\n\t\t\t\t\tformatPostgresPlannerCueSummary({\n\t\t\t\t\t\tpostgresQueryBackfillCount:\n\t\t\t\t\t\t\tsnapshot.postgresQueryBackfillCount,\n\t\t\t\t\t\tpostgresQueryCandidateBudgetExhausted:\n\t\t\t\t\t\t\tsnapshot.postgresQueryCandidateBudgetExhausted,\n\t\t\t\t\t\tpostgresQueryCandidateCoverage:\n\t\t\t\t\t\t\tsnapshot.postgresQueryCandidateCoverage,\n\t\t\t\t\t\tpostgresQueryFilteredCandidates:\n\t\t\t\t\t\t\tsnapshot.postgresQueryFilteredCandidates,\n\t\t\t\t\t\tpostgresQueryFinalSearchK:\n\t\t\t\t\t\t\tsnapshot.postgresQueryFinalSearchK,\n\t\t\t\t\t\tpostgresQueryInitialSearchK:\n\t\t\t\t\t\t\tsnapshot.postgresQueryInitialSearchK,\n\t\t\t\t\t\tpostgresQuerySearchExpansionRatio:\n\t\t\t\t\t\t\tsnapshot.postgresQuerySearchExpansionRatio,\n\t\t\t\t\t\tpostgresQueryJsRemainderClauseCount:\n\t\t\t\t\t\t\tsnapshot.postgresQueryJsRemainderClauseCount,\n\t\t\t\t\t\tpostgresQueryCandidateLimitUsed:\n\t\t\t\t\t\t\tsnapshot.postgresQueryCandidateLimitUsed,\n\t\t\t\t\t\tpostgresQueryMaxBackfillsUsed:\n\t\t\t\t\t\t\tsnapshot.postgresQueryMaxBackfillsUsed,\n\t\t\t\t\t\tpostgresQueryMinResultsUsed:\n\t\t\t\t\t\t\tsnapshot.postgresQueryMinResultsUsed,\n\t\t\t\t\t\tpostgresQueryMultiplierUsed:\n\t\t\t\t\t\t\tsnapshot.postgresQueryMultiplierUsed,\n\t\t\t\t\t\tpostgresQueryMode: snapshot.postgresQueryMode,\n\t\t\t\t\t\tpostgresQueryPushdownApplied:\n\t\t\t\t\t\t\tsnapshot.postgresQueryPushdownApplied,\n\t\t\t\t\t\tpostgresQueryPushdownClauseCount:\n\t\t\t\t\t\t\tsnapshot.postgresQueryPushdownClauseCount,\n\t\t\t\t\t\tpostgresQueryPushdownCoverageRatio:\n\t\t\t\t\t\t\tsnapshot.postgresQueryPushdownCoverageRatio,\n\t\t\t\t\t\tpostgresQueryPushdownMode:\n\t\t\t\t\t\t\tsnapshot.postgresQueryPushdownMode,\n\t\t\t\t\t\tpostgresQueryTotalFilterClauseCount:\n\t\t\t\t\t\t\tsnapshot.postgresQueryTotalFilterClauseCount,\n\t\t\t\t\t\tpostgresQueryReturnedCount:\n\t\t\t\t\t\t\tsnapshot.postgresQueryReturnedCount,\n\t\t\t\t\t\tpostgresQueryBackfillLimitReached:\n\t\t\t\t\t\t\tsnapshot.postgresQueryBackfillLimitReached,\n\t\t\t\t\t\tpostgresQueryMinResultsSatisfied:\n\t\t\t\t\t\t\tsnapshot.postgresQueryMinResultsSatisfied,\n\t\t\t\t\t\tpostgresQueryCandidateYieldRatio:\n\t\t\t\t\t\t\tsnapshot.postgresQueryCandidateYieldRatio,\n\t\t\t\t\t\tpostgresQueryTopKFillRatio:\n\t\t\t\t\t\t\tsnapshot.postgresQueryTopKFillRatio,\n\t\t\t\t\t\tpostgresQueryJsRemainderRatio:\n\t\t\t\t\t\t\tsnapshot.postgresQueryJsRemainderRatio,\n\t\t\t\t\t\tpostgresQueryUnderfilledTopK:\n\t\t\t\t\t\t\tsnapshot.postgresQueryUnderfilledTopK\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.filter(\n\t\t\t\t\t(value): value is string =>\n\t\t\t\t\t\ttypeof value === 'string' && value !== 'none'\n\t\t\t\t)\n\t\t)\n\t).slice(0, 3);\n\n\treturn labels.length > 0 ? labels.join(' · ') : 'none';\n};\n\nconst formatComparisonLeadDrift = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tif (\n\t\t!leader?.caseTraceSnapshots?.length ||\n\t\t!entry.caseTraceSnapshots?.length\n\t) {\n\t\treturn 'none';\n\t}\n\n\tconst leaderCases = new Map(\n\t\tleader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot])\n\t);\n\n\tconst drift = entry.caseTraceSnapshots\n\t\t.map((snapshot) => {\n\t\t\tconst leaderSnapshot = leaderCases.get(snapshot.caseId);\n\t\t\tconst currentLead = buildComparisonCaseLeadLabel(snapshot);\n\t\t\tconst leaderLead = buildComparisonCaseLeadLabel(leaderSnapshot);\n\t\t\tif (!currentLead || !leaderLead || currentLead === leaderLead) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${snapshot.label ?? snapshot.caseId} ${leaderLead}→${currentLead}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn drift.length > 0 ? drift.join(' · ') : 'none';\n};\n\nconst formatComparisonLeadMediaDrift = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tif (\n\t\t!leader?.caseTraceSnapshots?.length ||\n\t\t!entry.caseTraceSnapshots?.length\n\t) {\n\t\treturn 'none';\n\t}\n\n\tconst leaderCases = new Map(\n\t\tleader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot])\n\t);\n\n\tconst drift = entry.caseTraceSnapshots\n\t\t.map((snapshot) => {\n\t\t\tconst leaderSnapshot = leaderCases.get(snapshot.caseId);\n\t\t\tconst currentMediaCues = formatLeadMediaCueSummary({\n\t\t\t\tleadSpeakerCue: snapshot.leadSpeakerCue,\n\t\t\t\tleadSpeakerAttributionCue: snapshot.leadSpeakerAttributionCue,\n\t\t\t\tleadChannelCue: snapshot.leadChannelCue,\n\t\t\t\tleadChannelAttributionCue: snapshot.leadChannelAttributionCue,\n\t\t\t\tleadContinuityCue: snapshot.leadContinuityCue\n\t\t\t});\n\t\t\tconst leaderMediaCues = formatLeadMediaCueSummary({\n\t\t\t\tleadSpeakerCue: leaderSnapshot?.leadSpeakerCue,\n\t\t\t\tleadSpeakerAttributionCue:\n\t\t\t\t\tleaderSnapshot?.leadSpeakerAttributionCue,\n\t\t\t\tleadChannelCue: leaderSnapshot?.leadChannelCue,\n\t\t\t\tleadChannelAttributionCue:\n\t\t\t\t\tleaderSnapshot?.leadChannelAttributionCue,\n\t\t\t\tleadContinuityCue: leaderSnapshot?.leadContinuityCue\n\t\t\t});\n\t\t\tif (\n\t\t\t\tcurrentMediaCues === 'none' ||\n\t\t\t\tleaderMediaCues === 'none' ||\n\t\t\t\tcurrentMediaCues === leaderMediaCues\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${snapshot.label ?? snapshot.caseId} ${leaderMediaCues}→${currentMediaCues}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn drift.length > 0 ? drift.join(' · ') : 'none';\n};\n\nconst formatComparisonSQLitePlannerDrift = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tif (\n\t\t!leader?.caseTraceSnapshots?.length ||\n\t\t!entry.caseTraceSnapshots?.length\n\t) {\n\t\treturn 'none';\n\t}\n\n\tconst leaderCases = new Map(\n\t\tleader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot])\n\t);\n\n\tconst drift = entry.caseTraceSnapshots\n\t\t.map((snapshot) => {\n\t\t\tconst leaderSnapshot = leaderCases.get(snapshot.caseId);\n\t\t\tconst currentPlanner = formatSQLitePlannerCueSummary(snapshot);\n\t\t\tconst leaderPlanner = formatSQLitePlannerCueSummary(leaderSnapshot);\n\t\t\tif (\n\t\t\t\tcurrentPlanner === 'none' ||\n\t\t\t\tleaderPlanner === 'none' ||\n\t\t\t\tcurrentPlanner === leaderPlanner\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${snapshot.label ?? snapshot.caseId} ${leaderPlanner}→${currentPlanner}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn drift.length > 0 ? drift.join(' · ') : 'none';\n};\n\nconst formatComparisonPostgresPlannerDrift = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tif (\n\t\t!leader?.caseTraceSnapshots?.length ||\n\t\t!entry.caseTraceSnapshots?.length\n\t) {\n\t\treturn 'none';\n\t}\n\n\tconst leaderCases = new Map(\n\t\tleader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot])\n\t);\n\n\tconst drift = entry.caseTraceSnapshots\n\t\t.map((snapshot) => {\n\t\t\tconst leaderSnapshot = leaderCases.get(snapshot.caseId);\n\t\t\tconst currentPlanner = formatPostgresPlannerCueSummary(snapshot);\n\t\t\tconst leaderPlanner =\n\t\t\t\tformatPostgresPlannerCueSummary(leaderSnapshot);\n\t\t\tif (\n\t\t\t\tcurrentPlanner === 'none' ||\n\t\t\t\tleaderPlanner === 'none' ||\n\t\t\t\tcurrentPlanner === leaderPlanner\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${snapshot.label ?? snapshot.caseId} ${leaderPlanner}→${currentPlanner}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn drift.length > 0 ? drift.join(' · ') : 'none';\n};\n\nconst formatComparisonRoutingCueSummary = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst trace = entry.traceSummary;\n\tif (!trace) {\n\t\treturn 'none';\n\t}\n\n\tconst parts = [\n\t\t`modes ${formatTraceModes(trace.modes)}`,\n\t\t`balance ${formatSourceBalanceStrategies(trace.sourceBalanceStrategies)}`,\n\t\t`rewrites ${formatTraceRatio(trace.transformedCases, trace.totalCases)}`,\n\t\t`variants ${formatTraceRatio(trace.variantCases, trace.totalCases)}`\n\t].filter((value) => !value.endsWith('n/a'));\n\n\treturn parts.length > 0 ? parts.join(' · ') : 'none';\n};\n\nconst formatComparisonRoutingDrift = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst trace = entry.traceSummary;\n\tconst leaderTrace = leader?.traceSummary;\n\tif (!trace || !leaderTrace || entry === leader) {\n\t\treturn 'none';\n\t}\n\n\tconst deltas: string[] = [];\n\tconst currentModes = formatTraceModes(trace.modes);\n\tconst previousModes = formatTraceModes(leaderTrace.modes);\n\tif (currentModes !== previousModes) {\n\t\tdeltas.push(`modes ${previousModes}→${currentModes}`);\n\t}\n\n\tconst currentBalance = formatSourceBalanceStrategies(\n\t\ttrace.sourceBalanceStrategies\n\t);\n\tconst previousBalance = formatSourceBalanceStrategies(\n\t\tleaderTrace.sourceBalanceStrategies\n\t);\n\tif (currentBalance !== previousBalance) {\n\t\tdeltas.push(`balance ${previousBalance}→${currentBalance}`);\n\t}\n\n\tconst transformedDelta =\n\t\ttrace.transformedCases - leaderTrace.transformedCases;\n\tif (transformedDelta !== 0) {\n\t\tdeltas.push(`rewrites ${formatTraceCountDelta(transformedDelta)}`);\n\t}\n\n\tconst variantDelta = trace.variantCases - leaderTrace.variantCases;\n\tif (variantDelta !== 0) {\n\t\tdeltas.push(`variants ${formatTraceCountDelta(variantDelta)}`);\n\t}\n\n\treturn deltas.length > 0 ? deltas.slice(0, 3).join(' · ') : 'none';\n};\n\nconst formatHistoryRoutingShift = (history?: RAGEvaluationHistory) => {\n\tconst delta = history?.diff?.traceSummaryDelta;\n\tif (!delta) {\n\t\treturn 'none';\n\t}\n\n\tconst shifts: string[] = [];\n\tif (delta.modesChanged) {\n\t\tshifts.push('modes changed');\n\t}\n\tif (delta.sourceBalanceStrategiesChanged) {\n\t\tshifts.push('balance changed');\n\t}\n\tif (delta.transformedCases !== 0) {\n\t\tshifts.push(\n\t\t\t`rewrites ${formatTraceCountDelta(delta.transformedCases)}`\n\t\t);\n\t}\n\tif (delta.variantCases !== 0) {\n\t\tshifts.push(`variants ${formatTraceCountDelta(delta.variantCases)}`);\n\t}\n\n\treturn shifts.length > 0 ? shifts.join(' · ') : 'none';\n};\n\nconst formatHistorySQLitePlannerShift = (history?: RAGEvaluationHistory) => {\n\tif (!history?.caseTraceSnapshots.length) {\n\t\treturn 'none';\n\t}\n\n\tconst shifts = history.caseTraceSnapshots\n\t\t.map((entry) => {\n\t\t\tconst previousPlanner = formatSQLitePlannerCueSummary({\n\t\t\t\tsqliteQueryBackfillCount:\n\t\t\t\t\tentry.previousSqliteQueryBackfillCount,\n\t\t\t\tsqliteQueryCandidateBudgetExhausted:\n\t\t\t\t\tentry.previousSqliteQueryCandidateBudgetExhausted,\n\t\t\t\tsqliteQueryCandidateCoverage:\n\t\t\t\t\tentry.previousSqliteQueryCandidateCoverage,\n\t\t\t\tsqliteQueryFilteredCandidates:\n\t\t\t\t\tentry.previousSqliteQueryFilteredCandidates,\n\t\t\t\tsqliteQueryFinalSearchK: entry.previousSqliteQueryFinalSearchK,\n\t\t\t\tsqliteQueryInitialSearchK:\n\t\t\t\t\tentry.previousSqliteQueryInitialSearchK,\n\t\t\t\tsqliteQuerySearchExpansionRatio:\n\t\t\t\t\tentry.previousSqliteQuerySearchExpansionRatio,\n\t\t\t\tsqliteQueryJsRemainderClauseCount:\n\t\t\t\t\tentry.previousSqliteQueryJsRemainderClauseCount,\n\t\t\t\tsqliteQueryCandidateLimitUsed:\n\t\t\t\t\tentry.previousSqliteQueryCandidateLimitUsed,\n\t\t\t\tsqliteQueryMaxBackfillsUsed:\n\t\t\t\t\tentry.previousSqliteQueryMaxBackfillsUsed,\n\t\t\t\tsqliteQueryMinResultsUsed:\n\t\t\t\t\tentry.previousSqliteQueryMinResultsUsed,\n\t\t\t\tsqliteQueryMode: entry.previousSqliteQueryMode,\n\t\t\t\tsqliteQueryPushdownApplied:\n\t\t\t\t\tentry.previousSqliteQueryPushdownApplied,\n\t\t\t\tsqliteQueryPushdownClauseCount:\n\t\t\t\t\tentry.previousSqliteQueryPushdownClauseCount,\n\t\t\t\tsqliteQueryPushdownCoverageRatio:\n\t\t\t\t\tentry.previousSqliteQueryPushdownCoverageRatio,\n\t\t\t\tsqliteQueryPushdownMode: entry.previousSqliteQueryPushdownMode,\n\t\t\t\tsqliteQueryTotalFilterClauseCount:\n\t\t\t\t\tentry.previousSqliteQueryTotalFilterClauseCount,\n\t\t\t\tsqliteQueryJsRemainderRatio:\n\t\t\t\t\tentry.previousSqliteQueryJsRemainderRatio,\n\t\t\t\tsqliteQueryReturnedCount:\n\t\t\t\t\tentry.previousSqliteQueryReturnedCount,\n\t\t\t\tsqliteQueryBackfillLimitReached:\n\t\t\t\t\tentry.previousSqliteQueryBackfillLimitReached,\n\t\t\t\tsqliteQueryMinResultsSatisfied:\n\t\t\t\t\tentry.previousSqliteQueryMinResultsSatisfied,\n\t\t\t\tsqliteQueryCandidateYieldRatio:\n\t\t\t\t\tentry.previousSqliteQueryCandidateYieldRatio,\n\t\t\t\tsqliteQueryTopKFillRatio:\n\t\t\t\t\tentry.previousSqliteQueryTopKFillRatio,\n\t\t\t\tsqliteQueryUnderfilledTopK:\n\t\t\t\t\tentry.previousSqliteQueryUnderfilledTopK\n\t\t\t});\n\t\t\tconst currentPlanner = formatSQLitePlannerCueSummary(entry);\n\n\t\t\tif (\n\t\t\t\tpreviousPlanner === 'none' ||\n\t\t\t\tcurrentPlanner === 'none' ||\n\t\t\t\tpreviousPlanner === currentPlanner\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${entry.label ?? entry.caseId} ${previousPlanner}→${currentPlanner}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn shifts.length > 0 ? shifts.join(' · ') : 'none';\n};\n\nconst formatHistoryPostgresPlannerShift = (history?: RAGEvaluationHistory) => {\n\tif (!history?.caseTraceSnapshots.length) {\n\t\treturn 'none';\n\t}\n\n\tconst shifts = history.caseTraceSnapshots\n\t\t.map((entry) => {\n\t\t\tconst previousPlanner = formatPostgresPlannerCueSummary({\n\t\t\t\tpostgresQueryBackfillCount:\n\t\t\t\t\tentry.previousPostgresQueryBackfillCount,\n\t\t\t\tpostgresQueryCandidateBudgetExhausted:\n\t\t\t\t\tentry.previousPostgresQueryCandidateBudgetExhausted,\n\t\t\t\tpostgresQueryCandidateCoverage:\n\t\t\t\t\tentry.previousPostgresQueryCandidateCoverage,\n\t\t\t\tpostgresQueryFilteredCandidates:\n\t\t\t\t\tentry.previousPostgresQueryFilteredCandidates,\n\t\t\t\tpostgresQueryFinalSearchK:\n\t\t\t\t\tentry.previousPostgresQueryFinalSearchK,\n\t\t\t\tpostgresQueryInitialSearchK:\n\t\t\t\t\tentry.previousPostgresQueryInitialSearchK,\n\t\t\t\tpostgresQuerySearchExpansionRatio:\n\t\t\t\t\tentry.previousPostgresQuerySearchExpansionRatio,\n\t\t\t\tpostgresQueryJsRemainderClauseCount:\n\t\t\t\t\tentry.previousPostgresQueryJsRemainderClauseCount,\n\t\t\t\tpostgresQueryCandidateLimitUsed:\n\t\t\t\t\tentry.previousPostgresQueryCandidateLimitUsed,\n\t\t\t\tpostgresQueryMaxBackfillsUsed:\n\t\t\t\t\tentry.previousPostgresQueryMaxBackfillsUsed,\n\t\t\t\tpostgresQueryMinResultsUsed:\n\t\t\t\t\tentry.previousPostgresQueryMinResultsUsed,\n\t\t\t\tpostgresQueryMultiplierUsed:\n\t\t\t\t\tentry.previousPostgresQueryMultiplierUsed,\n\t\t\t\tpostgresQueryMode: entry.previousPostgresQueryMode,\n\t\t\t\tpostgresQueryPushdownApplied:\n\t\t\t\t\tentry.previousPostgresQueryPushdownApplied,\n\t\t\t\tpostgresQueryPushdownClauseCount:\n\t\t\t\t\tentry.previousPostgresQueryPushdownClauseCount,\n\t\t\t\tpostgresQueryPushdownCoverageRatio:\n\t\t\t\t\tentry.previousPostgresQueryPushdownCoverageRatio,\n\t\t\t\tpostgresQueryPushdownMode:\n\t\t\t\t\tentry.previousPostgresQueryPushdownMode,\n\t\t\t\tpostgresQueryTotalFilterClauseCount:\n\t\t\t\t\tentry.previousPostgresQueryTotalFilterClauseCount,\n\t\t\t\tpostgresQueryJsRemainderRatio:\n\t\t\t\t\tentry.previousPostgresQueryJsRemainderRatio,\n\t\t\t\tpostgresQueryReturnedCount:\n\t\t\t\t\tentry.previousPostgresQueryReturnedCount,\n\t\t\t\tpostgresQueryBackfillLimitReached:\n\t\t\t\t\tentry.previousPostgresQueryBackfillLimitReached,\n\t\t\t\tpostgresQueryMinResultsSatisfied:\n\t\t\t\t\tentry.previousPostgresQueryMinResultsSatisfied,\n\t\t\t\tpostgresQueryCandidateYieldRatio:\n\t\t\t\t\tentry.previousPostgresQueryCandidateYieldRatio,\n\t\t\t\tpostgresQueryTopKFillRatio:\n\t\t\t\t\tentry.previousPostgresQueryTopKFillRatio,\n\t\t\t\tpostgresQueryUnderfilledTopK:\n\t\t\t\t\tentry.previousPostgresQueryUnderfilledTopK\n\t\t\t});\n\t\t\tconst currentPlanner = formatPostgresPlannerCueSummary(entry);\n\t\t\tif (\n\t\t\t\tpreviousPlanner === 'none' ||\n\t\t\t\tcurrentPlanner === 'none' ||\n\t\t\t\tpreviousPlanner === currentPlanner\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${entry.label ?? entry.caseId} ${previousPlanner}→${currentPlanner}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn shifts.length > 0 ? shifts.join(' · ') : 'none';\n};\n\nconst formatTraceLeadChanges = (\n\tchanges?: Array<{\n\t\tcaseId: string;\n\t\tlabel?: string;\n\t\tpreviousLead?: string;\n\t\tcurrentLead: string;\n\t}>\n) =>\n\tchanges && changes.length > 0\n\t\t? changes\n\t\t\t\t.slice(0, 3)\n\t\t\t\t.map((entry) => {\n\t\t\t\t\tconst label = entry.label ?? entry.caseId;\n\t\t\t\t\tconst previousLead = entry.previousLead ?? 'n/a';\n\t\t\t\t\treturn `${label} ${previousLead}→${entry.currentLead}`;\n\t\t\t\t})\n\t\t\t\t.join(' · ')\n\t\t: 'none';\n\nconst formatGroundingHistoryCaseLabels = (\n\tcases: RAGAnswerGroundingEvaluationCaseDiff[]\n) =>\n\tcases.length > 0\n\t\t? cases.map((entry) => entry.label ?? entry.caseId).join(', ')\n\t\t: 'none';\n\nconst formatRerankerComparisonHeadline = (entry: RAGRerankerComparisonEntry) =>\n\t[\n\t\tentry.label,\n\t\t`passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n\t\t`f1 ${entry.response.summary.averageF1.toFixed(3)}`,\n\t\t`latency ${entry.response.summary.averageLatencyMs.toFixed(1)}ms`\n\t].join(' · ');\n\nconst formatRetrievalComparisonHeadline = (\n\tentry: RAGRetrievalComparisonEntry\n) =>\n\t[\n\t\tentry.label,\n\t\t`mode ${entry.retrievalMode}`,\n\t\t`passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n\t\t`f1 ${entry.response.summary.averageF1.toFixed(3)}`,\n\t\t`latency ${entry.response.summary.averageLatencyMs.toFixed(1)}ms`\n\t].join(' · ');\n\nconst formatTraceModes = (modes: RAGHybridRetrievalMode[]) =>\n\tmodes.length > 0 ? modes.join(' / ') : 'n/a';\n\nconst formatSourceBalanceStrategies = (\n\tstrategies: RAGSourceBalanceStrategy[]\n) => (strategies.length > 0 ? strategies.join(' / ') : 'n/a');\n\nconst formatTraceStageSummary = (\n\tstageCounts: Partial<\n\t\tRecord<RAGRetrievalTrace['steps'][number]['stage'], number>\n\t>\n) => {\n\tconst topStages = Object.entries(stageCounts)\n\t\t.sort((left, right) => right[1] - left[1])\n\t\t.slice(0, 3);\n\n\treturn topStages.length > 0\n\t\t? topStages.map(([stage, count]) => `${stage} ${count}`).join(' · ')\n\t\t: 'n/a';\n};\n\nconst formatTraceRatio = (count: number, total: number) => `${count}/${total}`;\n\nconst formatTraceCountDelta = (value: number) =>\n\t`${value >= 0 ? '+' : ''}${value}`;\n\nconst buildComparisonOverviewPresentation = <\n\tTEntry extends {\n\t\tlabel: string;\n\t\tresponse: {\n\t\t\tpassingRate: number;\n\t\t\tsummary: {\n\t\t\t\taverageF1: number;\n\t\t\t\taverageLatencyMs: number;\n\t\t\t};\n\t\t};\n\t}\n>(input: {\n\tentries: TEntry[];\n\tsummary: {\n\t\tbestByPassingRate?: string;\n\t\tbestByAverageF1?: string;\n\t\tfastest?: string;\n\t};\n\tresolveLabel: (id?: string) => string;\n\tresolveEntry: (id?: string) => TEntry | undefined;\n}): RAGComparisonOverviewPresentation => {\n\tconst winnerLabel = input.resolveLabel(input.summary.bestByPassingRate);\n\tconst winnerEntry = input.resolveEntry(input.summary.bestByPassingRate);\n\n\treturn {\n\t\trows: [\n\t\t\t{\n\t\t\t\tlabel: 'Best passing rate',\n\t\t\t\tvalue: input.resolveLabel(input.summary.bestByPassingRate)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Best average F1',\n\t\t\t\tvalue: input.resolveLabel(input.summary.bestByAverageF1)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Fastest',\n\t\t\t\tvalue: input.resolveLabel(input.summary.fastest)\n\t\t\t}\n\t\t],\n\t\twinnerLabel,\n\t\tsummary: winnerEntry\n\t\t\t? `passing ${formatEvaluationPassingRate(winnerEntry.response.passingRate)} · f1 ${winnerEntry.response.summary.averageF1.toFixed(3)} · latency ${winnerEntry.response.summary.averageLatencyMs.toFixed(1)}ms`\n\t\t\t: 'Stored benchmark comparison'\n\t};\n};\n\nexport const buildRAGComparisonTraceSummaryRows = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n): RAGLabelValueRow[] => {\n\tconst trace = entry.traceSummary;\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{\n\t\t\tlabel: 'Lead cues',\n\t\t\tvalue: formatComparisonLeadCueSummary(entry)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Lead media cues',\n\t\t\tvalue: formatComparisonLeadMediaCueSummary(entry)\n\t\t},\n\t\t{\n\t\t\tlabel: 'SQLite planner cues',\n\t\t\tvalue: formatComparisonSQLitePlannerCueSummary(entry)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Postgres planner cues',\n\t\t\tvalue: formatComparisonPostgresPlannerCueSummary(entry)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Routing cues',\n\t\t\tvalue: formatComparisonRoutingCueSummary(entry)\n\t\t}\n\t];\n\n\tif (!trace) {\n\t\trows.unshift({ label: 'Trace', value: 'Unavailable' });\n\t\treturn rows;\n\t}\n\n\trows.push(\n\t\t{ label: 'Modes', value: formatTraceModes(trace.modes) },\n\t\t{\n\t\t\tlabel: 'Balance',\n\t\t\tvalue: formatSourceBalanceStrategies(trace.sourceBalanceStrategies)\n\t\t},\n\t\t{ label: 'Avg final', value: trace.averageFinalCount.toFixed(1) },\n\t\t{ label: 'Avg vector', value: trace.averageVectorCount.toFixed(1) },\n\t\t{ label: 'Avg lexical', value: trace.averageLexicalCount.toFixed(1) },\n\t\t{\n\t\t\tlabel: 'Balanced',\n\t\t\tvalue: formatTraceRatio(trace.balancedCases, trace.totalCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Round robin',\n\t\t\tvalue: formatTraceRatio(trace.roundRobinCases, trace.totalCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Transforms',\n\t\t\tvalue: formatTraceRatio(trace.transformedCases, trace.totalCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Variants',\n\t\t\tvalue: formatTraceRatio(trace.variantCases, trace.totalCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'TopK',\n\t\t\tvalue: `${trace.averageCandidateTopK.toFixed(\n\t\t\t\t1\n\t\t\t)} / ${trace.averageLexicalTopK.toFixed(1)}`\n\t\t},\n\t\t{\n\t\t\tlabel: 'Stages',\n\t\t\tvalue: formatTraceStageSummary(trace.stageCounts)\n\t\t}\n\t);\n\n\treturn rows;\n};\n\nexport const buildRAGComparisonTraceDiffRows = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n): RAGLabelValueRow[] => {\n\tconst trace = entry.traceSummary;\n\tconst leadDriftRow = {\n\t\tlabel: 'Lead drift vs leader',\n\t\tvalue: formatComparisonLeadDrift(entry, leader)\n\t} satisfies RAGLabelValueRow;\n\tconst leadMediaDriftRow = {\n\t\tlabel: 'Lead media shift vs leader',\n\t\tvalue: formatComparisonLeadMediaDrift(entry, leader)\n\t} satisfies RAGLabelValueRow;\n\tconst sqlitePlannerDriftRow = {\n\t\tlabel: 'SQLite planner shift vs leader',\n\t\tvalue: formatComparisonSQLitePlannerDrift(entry, leader)\n\t} satisfies RAGLabelValueRow;\n\tconst postgresPlannerDriftRow = {\n\t\tlabel: 'Postgres planner shift vs leader',\n\t\tvalue: formatComparisonPostgresPlannerDrift(entry, leader)\n\t} satisfies RAGLabelValueRow;\n\tconst routingDriftRow = {\n\t\tlabel: 'Routing shift vs leader',\n\t\tvalue: formatComparisonRoutingDrift(entry, leader)\n\t} satisfies RAGLabelValueRow;\n\n\tif (!trace) {\n\t\treturn [\n\t\t\t{ label: 'Trace', value: 'Unavailable for comparison' },\n\t\t\tleadDriftRow,\n\t\t\tleadMediaDriftRow,\n\t\t\tsqlitePlannerDriftRow,\n\t\t\tpostgresPlannerDriftRow,\n\t\t\troutingDriftRow\n\t\t];\n\t}\n\n\tconst leaderTrace = leader?.traceSummary;\n\tif (!leaderTrace) {\n\t\treturn [\n\t\t\t{ label: 'Baseline', value: 'Leader trace unavailable' },\n\t\t\tleadDriftRow,\n\t\t\tleadMediaDriftRow,\n\t\t\tsqlitePlannerDriftRow,\n\t\t\tpostgresPlannerDriftRow,\n\t\t\troutingDriftRow\n\t\t];\n\t}\n\n\tif (entry === leader) {\n\t\treturn [\n\t\t\t{ label: 'Baseline', value: 'Leader strategy' },\n\t\t\tleadDriftRow,\n\t\t\tleadMediaDriftRow,\n\t\t\tsqlitePlannerDriftRow,\n\t\t\tpostgresPlannerDriftRow,\n\t\t\troutingDriftRow\n\t\t];\n\t}\n\n\tconst stageDelta = Object.keys({\n\t\t...leaderTrace.stageCounts,\n\t\t...trace.stageCounts\n\t})\n\t\t.map((stage) => {\n\t\t\tconst typedStage = stage as RAGRetrievalTraceStep['stage'];\n\t\t\tconst delta =\n\t\t\t\t(trace.stageCounts[typedStage] ?? 0) -\n\t\t\t\t(leaderTrace.stageCounts[typedStage] ?? 0);\n\t\t\treturn delta === 0\n\t\t\t\t? null\n\t\t\t\t: `${typedStage} ${formatTraceCountDelta(delta)}`;\n\t\t})\n\t\t.filter((value): value is string => Boolean(value))\n\t\t.slice(0, 3)\n\t\t.join(' · ');\n\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{ label: 'Baseline', value: leader.label }\n\t];\n\n\tif (formatTraceModes(trace.modes) !== formatTraceModes(leaderTrace.modes)) {\n\t\trows.push({\n\t\t\tlabel: 'Modes vs leader',\n\t\t\tvalue: `${formatTraceModes(trace.modes)} vs ${formatTraceModes(\n\t\t\t\tleaderTrace.modes\n\t\t\t)}`\n\t\t});\n\t}\n\n\tif (\n\t\tformatSourceBalanceStrategies(trace.sourceBalanceStrategies) !==\n\t\tformatSourceBalanceStrategies(leaderTrace.sourceBalanceStrategies)\n\t) {\n\t\trows.push({\n\t\t\tlabel: 'Balance vs leader',\n\t\t\tvalue: `${formatSourceBalanceStrategies(\n\t\t\t\ttrace.sourceBalanceStrategies\n\t\t\t)} vs ${formatSourceBalanceStrategies(\n\t\t\t\tleaderTrace.sourceBalanceStrategies\n\t\t\t)}`\n\t\t});\n\t}\n\n\trows.push(\n\t\tleadDriftRow,\n\t\tleadMediaDriftRow,\n\t\tsqlitePlannerDriftRow,\n\t\tpostgresPlannerDriftRow,\n\t\troutingDriftRow\n\t);\n\n\trows.push(\n\t\t{\n\t\t\tlabel: 'Final delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\ttrace.averageFinalCount - leaderTrace.averageFinalCount,\n\t\t\t\t1\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Vector delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\ttrace.averageVectorCount - leaderTrace.averageVectorCount,\n\t\t\t\t1\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Lexical delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\ttrace.averageLexicalCount - leaderTrace.averageLexicalCount,\n\t\t\t\t1\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Transform delta',\n\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\ttrace.transformedCases - leaderTrace.transformedCases\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Balanced delta',\n\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\ttrace.balancedCases - leaderTrace.balancedCases\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Round robin delta',\n\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\ttrace.roundRobinCases - leaderTrace.roundRobinCases\n\t\t\t)\n\t\t}\n\t);\n\n\tif (stageDelta) {\n\t\trows.push({ label: 'Stage delta', value: stageDelta });\n\t}\n\n\treturn rows;\n};\n\nexport const buildRAGRetrievalComparisonPresentations = (\n\tcomparison: RAGRetrievalComparison\n): RAGComparisonPresentation[] => {\n\tconst leader = comparison.entries[0];\n\treturn comparison.entries.map((entry) => ({\n\t\tdiffLabel: leader?.label ?? 'Leader',\n\t\tdiffRows: buildRAGComparisonTraceDiffRows(entry, leader),\n\t\tsummary: formatRetrievalComparisonHeadline(entry),\n\t\tid: entry.retrievalId,\n\t\tlabel: entry.label,\n\t\ttraceSummaryRows: buildRAGComparisonTraceSummaryRows(entry)\n\t}));\n};\n\nexport const buildRAGRetrievalComparisonOverviewPresentation = (\n\tcomparison: RAGRetrievalComparison\n): RAGComparisonOverviewPresentation =>\n\tbuildComparisonOverviewPresentation({\n\t\tentries: comparison.entries,\n\t\tresolveEntry: (id?: string) =>\n\t\t\tcomparison.entries.find((entry) => entry.retrievalId === id),\n\t\tresolveLabel: (id?: string) =>\n\t\t\tcomparison.entries.find((entry) => entry.retrievalId === id)\n\t\t\t\t?.label ??\n\t\t\tid ??\n\t\t\t'n/a',\n\t\tsummary: comparison.summary\n\t});\n\nexport const buildRAGRerankerComparisonPresentations = (\n\tcomparison: RAGRerankerComparison\n): RAGComparisonPresentation[] => {\n\tconst leader = comparison.entries[0];\n\treturn comparison.entries.map((entry) => ({\n\t\tdiffLabel: leader?.label ?? 'Leader',\n\t\tdiffRows: buildRAGComparisonTraceDiffRows(entry, leader),\n\t\tsummary: formatRerankerComparisonHeadline(entry),\n\t\tid: entry.rerankerId,\n\t\tlabel: entry.label,\n\t\ttraceSummaryRows: buildRAGComparisonTraceSummaryRows(entry)\n\t}));\n};\n\nexport const buildRAGRerankerComparisonOverviewPresentation = (\n\tcomparison: RAGRerankerComparison\n): RAGComparisonOverviewPresentation =>\n\tbuildComparisonOverviewPresentation({\n\t\tentries: comparison.entries,\n\t\tresolveEntry: (id?: string) =>\n\t\t\tcomparison.entries.find((entry) => entry.rerankerId === id),\n\t\tresolveLabel: (id?: string) =>\n\t\t\tcomparison.entries.find((entry) => entry.rerankerId === id)\n\t\t\t\t?.label ??\n\t\t\tid ??\n\t\t\t'n/a',\n\t\tsummary: comparison.summary\n\t});\n\nexport const buildRAGGroundingProviderPresentations = (\n\tentries: Array<{\n\t\tproviderKey: string;\n\t\tlabel: string;\n\t\telapsedMs: number;\n\t\tresponse: RAGAnswerGroundingEvaluationResponse;\n\t}>\n): RAGGroundingProviderPresentation[] =>\n\tentries.map((entry) => ({\n\t\tsummary: [\n\t\t\tentry.label,\n\t\t\t`passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n\t\t\t`citation f1 ${entry.response.summary.averageCitationF1.toFixed(3)}`,\n\t\t\t`resolved ${formatEvaluationPassingRate(\n\t\t\t\tentry.response.summary.averageResolvedCitationRate\n\t\t\t)}`,\n\t\t\t`latency ${entry.elapsedMs.toFixed(1)}ms`\n\t\t].join(' · '),\n\t\tid: entry.providerKey,\n\t\tlabel: entry.label\n\t}));\n\nexport const buildRAGGroundingProviderOverviewPresentation = (input: {\n\tentries: Array<{\n\t\tproviderKey: string;\n\t\tlabel: string;\n\t\telapsedMs: number;\n\t\tresponse: RAGAnswerGroundingEvaluationResponse;\n\t}>;\n\tsummary: {\n\t\tbestByPassingRate?: string;\n\t\tbestByAverageCitationF1?: string;\n\t\tbestByResolvedCitationRate?: string;\n\t\tfastest?: string;\n\t};\n}): RAGGroundingProviderOverviewPresentation => {\n\tconst resolveLabel = (key?: string) =>\n\t\tinput.entries.find((entry) => entry.providerKey === key)?.label ??\n\t\tkey ??\n\t\t'n/a';\n\tconst winnerLabel = resolveLabel(input.summary.bestByPassingRate);\n\tconst winnerEntry = input.entries.find(\n\t\t(entry) => entry.providerKey === input.summary.bestByPassingRate\n\t);\n\n\treturn {\n\t\trows: [\n\t\t\t{\n\t\t\t\tlabel: 'Best passing rate',\n\t\t\t\tvalue: resolveLabel(input.summary.bestByPassingRate)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Best citation F1',\n\t\t\t\tvalue: resolveLabel(input.summary.bestByAverageCitationF1)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Best resolved citations',\n\t\t\t\tvalue: resolveLabel(input.summary.bestByResolvedCitationRate)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Fastest',\n\t\t\t\tvalue: resolveLabel(input.summary.fastest)\n\t\t\t}\n\t\t],\n\t\twinnerLabel,\n\t\tsummary: winnerEntry\n\t\t\t? `passing ${formatEvaluationPassingRate(winnerEntry.response.passingRate)} · citation f1 ${winnerEntry.response.summary.averageCitationF1.toFixed(3)} · resolved ${formatEvaluationPassingRate(winnerEntry.response.summary.averageResolvedCitationRate)}`\n\t\t\t: 'Stored workflow evaluation'\n\t};\n};\n\nexport const buildRAGRetrievalOverviewPresentation = (\n\tcomparison: RAGRetrievalComparison\n): RAGQualityOverviewPresentation => ({\n\trows: buildRAGRetrievalComparisonOverviewPresentation(comparison).rows\n});\n\nexport const buildRAGRerankerOverviewPresentation = (\n\tcomparison: RAGRerankerComparison\n): RAGQualityOverviewPresentation => ({\n\trows: buildRAGRerankerComparisonOverviewPresentation(comparison).rows\n});\n\nexport const buildRAGGroundingOverviewPresentation = (input: {\n\tgroundingEvaluation: RAGAnswerGroundingEvaluationResponse;\n\tgroundingProviderOverview?: RAGGroundingProviderOverviewPresentation | null;\n}): RAGGroundingOverviewPresentation => ({\n\trows: [\n\t\t{\n\t\t\tlabel: 'Grounding',\n\t\t\tvalue: formatGroundingHistorySummaryValue(input.groundingEvaluation)\n\t\t},\n\t\t...(input.groundingProviderOverview?.rows ?? [\n\t\t\t{\n\t\t\t\tlabel: 'Grounding providers',\n\t\t\t\tvalue: 'Configure an AI provider to compare grounded answers.'\n\t\t\t}\n\t\t])\n\t]\n});\n\nexport const buildRAGQualityOverviewPresentation = (input: {\n\tretrievalComparison: RAGRetrievalComparison;\n\trerankerComparison: RAGRerankerComparison;\n\tgroundingEvaluation: RAGAnswerGroundingEvaluationResponse;\n\tgroundingProviderOverview?: RAGGroundingProviderOverviewPresentation | null;\n}): RAGQualityOverviewPresentation => ({\n\trows: [\n\t\t...buildRAGRetrievalOverviewPresentation(input.retrievalComparison)\n\t\t\t.rows,\n\t\t...buildRAGRerankerOverviewPresentation(input.rerankerComparison).rows,\n\t\t...buildRAGGroundingOverviewPresentation({\n\t\t\tgroundingEvaluation: input.groundingEvaluation,\n\t\t\tgroundingProviderOverview: input.groundingProviderOverview\n\t\t}).rows\n\t]\n});\n\nexport const buildRAGGroundingProviderCaseComparisonPresentations = (\n\tcomparisons: Array<{\n\t\tcaseId: string;\n\t\tlabel: string;\n\t\tentries: Array<{\n\t\t\tproviderKey: string;\n\t\t\tlabel: string;\n\t\t\tstatus: string;\n\t\t\tcoverage: string;\n\t\t\tcitationF1: number;\n\t\t\tresolvedCitationRate: number;\n\t\t\tmatchedIds: string[];\n\t\t\tmissingIds: string[];\n\t\t\textraIds: string[];\n\t\t\tanswerExcerpt: string;\n\t\t}>;\n\t\tsummary: {\n\t\t\tbestByStatus?: string;\n\t\t\tbestByCitationF1?: string;\n\t\t\tbestByResolvedCitationRate?: string;\n\t\t};\n\t}>\n): RAGGroundingProviderCaseComparisonPresentation[] =>\n\tcomparisons.map((comparison) => {\n\t\tconst resolveLabel = (key?: string) =>\n\t\t\tcomparison.entries.find((entry) => entry.providerKey === key)\n\t\t\t\t?.label ??\n\t\t\tkey ??\n\t\t\t'n/a';\n\n\t\treturn {\n\t\t\tcaseId: comparison.caseId,\n\t\t\tlabel: comparison.label,\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Best grounded',\n\t\t\t\t\tvalue: resolveLabel(comparison.summary.bestByStatus)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Best citation F1',\n\t\t\t\t\tvalue: resolveLabel(comparison.summary.bestByCitationF1)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Best resolved citations',\n\t\t\t\t\tvalue: resolveLabel(\n\t\t\t\t\t\tcomparison.summary.bestByResolvedCitationRate\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t...comparison.entries.map((entry) => ({\n\t\t\t\t\tlabel: entry.label,\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tentry.status.toUpperCase(),\n\t\t\t\t\t\t`coverage ${entry.coverage}`,\n\t\t\t\t\t\t`f1 ${entry.citationF1.toFixed(3)}`,\n\t\t\t\t\t\t`resolved ${formatEvaluationPassingRate(\n\t\t\t\t\t\t\tentry.resolvedCitationRate\n\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t`matched ${entry.matchedIds.join(', ') || 'none'}`,\n\t\t\t\t\t\t`missing ${entry.missingIds.join(', ') || 'none'}`,\n\t\t\t\t\t\t`extra ${entry.extraIds.join(', ') || 'none'}`,\n\t\t\t\t\t\t`answer ${entry.answerExcerpt || 'n/a'}`\n\t\t\t\t\t].join(' · ')\n\t\t\t\t}))\n\t\t\t],\n\t\t\tsummary: [\n\t\t\t\t`Best grounded: ${resolveLabel(comparison.summary.bestByStatus)}`,\n\t\t\t\t`Best citation F1: ${resolveLabel(\n\t\t\t\t\tcomparison.summary.bestByCitationF1\n\t\t\t\t)}`,\n\t\t\t\t`Best resolved citations: ${resolveLabel(\n\t\t\t\t\tcomparison.summary.bestByResolvedCitationRate\n\t\t\t\t)}`\n\t\t\t].join(' · ')\n\t\t};\n\t});\n\nexport const buildRAGEvaluationHistoryRows = (\n\thistory?: RAGEvaluationHistory\n): RAGLabelValueRow[] => {\n\tif (!history?.latestRun) {\n\t\treturn [\n\t\t\t{ label: 'History', value: 'No persisted benchmark runs yet.' }\n\t\t];\n\t}\n\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{ label: 'Runs recorded', value: String(history.runs.length) },\n\t\t{\n\t\t\tlabel: 'Latest',\n\t\t\tvalue: `${history.latestRun.label} · ${formatEvaluationSummary(\n\t\t\t\thistory.latestRun.response\n\t\t\t)}`\n\t\t}\n\t];\n\n\tif (history.latestRun.traceSummary) {\n\t\trows.push({\n\t\t\tlabel: 'Latest trace',\n\t\t\tvalue: `${formatTraceModes(\n\t\t\t\thistory.latestRun.traceSummary.modes\n\t\t\t)} · balance ${formatSourceBalanceStrategies(\n\t\t\t\thistory.latestRun.traceSummary.sourceBalanceStrategies\n\t\t\t)} · final ${history.latestRun.traceSummary.averageFinalCount.toFixed(\n\t\t\t\t1\n\t\t\t)} · vector ${history.latestRun.traceSummary.averageVectorCount.toFixed(\n\t\t\t\t1\n\t\t\t)} · lexical ${history.latestRun.traceSummary.averageLexicalCount.toFixed(\n\t\t\t\t1\n\t\t\t)}`\n\t\t});\n\t}\n\n\tif (history.previousRun) {\n\t\trows.push({\n\t\t\tlabel: 'Previous',\n\t\t\tvalue: `${history.previousRun.label} · ${formatEvaluationSummary(\n\t\t\t\thistory.previousRun.response\n\t\t\t)}`\n\t\t});\n\t}\n\n\tif (!history.diff) {\n\t\trows.push({\n\t\t\tlabel: 'History diff',\n\t\t\tvalue: 'Run the benchmark again to diff regressions over time.'\n\t\t});\n\t\treturn rows;\n\t}\n\n\trows.push(\n\t\t{\n\t\t\tlabel: 'Passing delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\thistory.diff.summaryDelta.passingRate,\n\t\t\t\t1,\n\t\t\t\t'%'\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Average F1 delta',\n\t\t\tvalue: formatSignedDelta(history.diff.summaryDelta.averageF1, 3)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Latency delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\thistory.diff.summaryDelta.averageLatencyMs,\n\t\t\t\t1,\n\t\t\t\t'ms'\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Improved',\n\t\t\tvalue: formatHistoryCaseLabels(history.diff.improvedCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Regressed',\n\t\t\tvalue: formatHistoryCaseLabels(history.diff.regressedCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Lead drift',\n\t\t\tvalue: formatTraceLeadChanges(history.diff.traceLeadChanges)\n\t\t},\n\t\t{\n\t\t\tlabel: 'SQLite planner shift',\n\t\t\tvalue: formatHistorySQLitePlannerShift(history)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Postgres planner shift',\n\t\t\tvalue: formatHistoryPostgresPlannerShift(history)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Trace routing shift',\n\t\t\tvalue: formatHistoryRoutingShift(history)\n\t\t}\n\t);\n\n\tif (history.previousRun) {\n\t\tconst currentEntityView = buildRAGEvaluationEntityQualityView(\n\t\t\thistory.latestRun.response\n\t\t);\n\t\tconst previousEntityView = buildRAGEvaluationEntityQualityView(\n\t\t\thistory.previousRun.response\n\t\t);\n\t\trows.push(\n\t\t\t{\n\t\t\t\tlabel: 'Source regression hotspots',\n\t\t\t\tvalue: formatEntityRegressionHotspots(\n\t\t\t\t\tcurrentEntityView.bySource,\n\t\t\t\t\tpreviousEntityView.bySource,\n\t\t\t\t\t(entry) => entry.averageF1,\n\t\t\t\t\t'f1'\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Document regression hotspots',\n\t\t\t\tvalue: formatEntityRegressionHotspots(\n\t\t\t\t\tcurrentEntityView.byDocument,\n\t\t\t\t\tpreviousEntityView.byDocument,\n\t\t\t\t\t(entry) => entry.averageF1,\n\t\t\t\t\t'f1'\n\t\t\t\t)\n\t\t\t}\n\t\t);\n\t}\n\n\tif (history.diff.traceSummaryDelta) {\n\t\trows.push(\n\t\t\t{\n\t\t\t\tlabel: 'Trace mode shift',\n\t\t\t\tvalue: history.diff.traceSummaryDelta.modesChanged\n\t\t\t\t\t? 'changed'\n\t\t\t\t\t: 'stable'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace balance shift',\n\t\t\t\tvalue: history.diff.traceSummaryDelta\n\t\t\t\t\t.sourceBalanceStrategiesChanged\n\t\t\t\t\t? 'changed'\n\t\t\t\t\t: 'stable'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace final delta',\n\t\t\t\tvalue: formatSignedDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.averageFinalCount,\n\t\t\t\t\t1\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace vector delta',\n\t\t\t\tvalue: formatSignedDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.averageVectorCount,\n\t\t\t\t\t1\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace lexical delta',\n\t\t\t\tvalue: formatSignedDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.averageLexicalCount,\n\t\t\t\t\t1\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace balanced delta',\n\t\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.balancedCases\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace round robin delta',\n\t\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.roundRobinCases\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace transform delta',\n\t\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.transformedCases\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace variant delta',\n\t\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.variantCases\n\t\t\t\t)\n\t\t\t}\n\t\t);\n\n\t\tconst stageDelta = Object.entries(\n\t\t\thistory.diff.traceSummaryDelta.stageCounts ?? {}\n\t\t)\n\t\t\t.map(([stage, count]) => `${stage} ${formatTraceCountDelta(count)}`)\n\t\t\t.join(', ');\n\n\t\tif (stageDelta) {\n\t\t\trows.push({ label: 'Trace stage delta', value: stageDelta });\n\t\t}\n\t}\n\n\tif (history.caseTraceSnapshots.length > 0) {\n\t\tconst changedCases = history.caseTraceSnapshots.filter(\n\t\t\t(entry) => entry.traceChange === 'changed'\n\t\t);\n\t\trows.push({\n\t\t\tlabel: 'Trace drift cases',\n\t\t\tvalue:\n\t\t\t\tchangedCases.length > 0\n\t\t\t\t\t? changedCases\n\t\t\t\t\t\t\t.map((entry) => entry.label ?? entry.caseId)\n\t\t\t\t\t\t\t.slice(0, 4)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: 'none'\n\t\t});\n\t\trows.push({\n\t\t\tlabel: 'Lead media cues',\n\t\t\tvalue:\n\t\t\t\tArray.from(\n\t\t\t\t\tnew Set(\n\t\t\t\t\t\thistory.caseTraceSnapshots\n\t\t\t\t\t\t\t.map((entry) =>\n\t\t\t\t\t\t\t\tformatLeadMediaCueSummary({\n\t\t\t\t\t\t\t\t\tleadChannelAttributionCue:\n\t\t\t\t\t\t\t\t\t\tentry.leadChannelAttributionCue,\n\t\t\t\t\t\t\t\t\tleadChannelCue: entry.leadChannelCue,\n\t\t\t\t\t\t\t\t\tleadContinuityCue: entry.leadContinuityCue,\n\t\t\t\t\t\t\t\t\tleadSpeakerAttributionCue:\n\t\t\t\t\t\t\t\t\t\tentry.leadSpeakerAttributionCue,\n\t\t\t\t\t\t\t\t\tleadSpeakerCue: entry.leadSpeakerCue\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter((value) => value !== 'none')\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\t.slice(0, 3)\n\t\t\t\t\t.join(' · ') || 'none'\n\t\t});\n\t}\n\n\treturn rows;\n};\n\nexport const buildRAGEvaluationCaseTracePresentations = (\n\thistory?: RAGEvaluationHistory\n): RAGEvaluationCaseTracePresentation[] => {\n\tif (!history?.caseTraceSnapshots.length) {\n\t\treturn [];\n\t}\n\n\treturn history.caseTraceSnapshots.map((entry) => {\n\t\tconst label = entry.label ?? entry.caseId;\n\t\tconst currentMode = entry.traceMode ?? 'no-trace';\n\t\tconst previousMode = entry.previousTraceMode ?? 'n/a';\n\t\tconst currentBalance = entry.sourceBalanceStrategy ?? 'cap';\n\t\tconst previousBalance = entry.previousSourceBalanceStrategy ?? 'n/a';\n\t\tconst currentVariants =\n\t\t\tentry.variantQueries.length > 0\n\t\t\t\t? entry.variantQueries.join(', ')\n\t\t\t\t: 'none';\n\t\tconst previousVariants =\n\t\t\tentry.previousVariantQueries.length > 0\n\t\t\t\t? entry.previousVariantQueries.join(', ')\n\t\t\t\t: 'none';\n\t\tconst currentStages =\n\t\t\tObject.keys(entry.stageCounts).length > 0\n\t\t\t\t? Object.entries(entry.stageCounts)\n\t\t\t\t\t\t.map(([stage, count]) => `${stage} ${count}`)\n\t\t\t\t\t\t.join(', ')\n\t\t\t\t: 'none';\n\t\tconst previousStages =\n\t\t\tObject.keys(entry.previousStageCounts).length > 0\n\t\t\t\t? Object.entries(entry.previousStageCounts)\n\t\t\t\t\t\t.map(([stage, count]) => `${stage} ${count}`)\n\t\t\t\t\t\t.join(', ')\n\t\t\t\t: 'none';\n\t\tconst currentLeadContext = entry.topContextLabel ?? 'n/a';\n\t\tconst previousLeadContext = entry.previousTopContextLabel ?? 'n/a';\n\t\tconst currentLeadLocation = entry.topLocatorLabel ?? 'n/a';\n\t\tconst previousLeadLocation = entry.previousTopLocatorLabel ?? 'n/a';\n\t\tconst currentBoundary = entry.sourceAwareChunkReasonLabel ?? 'n/a';\n\t\tconst previousBoundary =\n\t\t\tentry.previousSourceAwareChunkReasonLabel ?? 'n/a';\n\t\tconst currentScope = entry.sourceAwareUnitScopeLabel ?? 'n/a';\n\t\tconst previousScope = entry.previousSourceAwareUnitScopeLabel ?? 'n/a';\n\t\tconst currentMediaCues = formatLeadMediaCueSummary({\n\t\t\tleadChannelAttributionCue: entry.leadChannelAttributionCue,\n\t\t\tleadChannelCue: entry.leadChannelCue,\n\t\t\tleadContinuityCue: entry.leadContinuityCue,\n\t\t\tleadSpeakerAttributionCue: entry.leadSpeakerAttributionCue,\n\t\t\tleadSpeakerCue: entry.leadSpeakerCue\n\t\t});\n\t\tconst previousMediaCues = formatLeadMediaCueSummary({\n\t\t\tleadChannelAttributionCue: entry.previousLeadChannelAttributionCue,\n\t\t\tleadChannelCue: entry.previousLeadChannelCue,\n\t\t\tleadContinuityCue: entry.previousLeadContinuityCue,\n\t\t\tleadSpeakerAttributionCue: entry.previousLeadSpeakerAttributionCue,\n\t\t\tleadSpeakerCue: entry.previousLeadSpeakerCue\n\t\t});\n\t\tconst leadSummary =\n\t\t\tentry.topLocatorLabel ??\n\t\t\tentry.topContextLabel ??\n\t\t\tentry.sourceAwareUnitScopeLabel ??\n\t\t\t'n/a';\n\t\tconst previousLeadSummary =\n\t\t\tentry.previousTopLocatorLabel ??\n\t\t\tentry.previousTopContextLabel ??\n\t\t\tentry.previousSourceAwareUnitScopeLabel ??\n\t\t\t'n/a';\n\n\t\treturn {\n\t\t\tcaseId: entry.caseId,\n\t\t\tlabel,\n\t\t\tsummary: `${entry.traceChange} · ${previousMode}→${currentMode} · ${previousBalance}→${currentBalance} · lead ${previousLeadSummary}→${leadSummary} · final ${\n\t\t\t\tentry.previousFinalCount ?? 0\n\t\t\t}→${entry.finalCount}`,\n\t\t\ttraceChange: entry.traceChange,\n\t\t\trows: [\n\t\t\t\t{ label: 'Query', value: entry.query },\n\t\t\t\t{ label: 'Trace change', value: entry.traceChange },\n\t\t\t\t{ label: 'Mode', value: `${previousMode}→${currentMode}` },\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Balance',\n\t\t\t\t\tvalue: `${previousBalance}→${currentBalance}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Transformed query',\n\t\t\t\t\tvalue: `${\n\t\t\t\t\t\tentry.previousTransformedQuery?.trim() || 'n/a'\n\t\t\t\t\t}→${entry.transformedQuery?.trim() || 'n/a'}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Final',\n\t\t\t\t\tvalue: `${entry.previousFinalCount ?? 0}→${entry.finalCount}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Vector',\n\t\t\t\t\tvalue: `${entry.previousVectorCount ?? 0}→${entry.vectorCount}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lexical',\n\t\t\t\t\tvalue: `${entry.previousLexicalCount ?? 0}→${entry.lexicalCount}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Candidate topK',\n\t\t\t\t\tvalue: `${entry.previousCandidateTopK ?? 0}→${entry.candidateTopK}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lexical topK',\n\t\t\t\t\tvalue: `${entry.previousLexicalTopK ?? 0}→${entry.lexicalTopK}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Variants',\n\t\t\t\t\tvalue: `${previousVariants}→${currentVariants}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lead context',\n\t\t\t\t\tvalue: `${previousLeadContext}→${currentLeadContext}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lead location',\n\t\t\t\t\tvalue: `${previousLeadLocation}→${currentLeadLocation}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Chunk boundary',\n\t\t\t\t\tvalue: `${previousBoundary}→${currentBoundary}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Source-aware scope',\n\t\t\t\t\tvalue: `${previousScope}→${currentScope}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lead media cues',\n\t\t\t\t\tvalue: `${previousMediaCues}→${currentMediaCues}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Stages',\n\t\t\t\t\tvalue: `${previousStages}→${currentStages}`\n\t\t\t\t},\n\t\t\t\t{ label: 'Status', value: entry.status }\n\t\t\t]\n\t\t};\n\t});\n};\n\nexport const buildRAGEvaluationHistoryPresentation = (\n\thistory?: RAGEvaluationHistory\n): RAGEvaluationHistoryPresentation => ({\n\tcaseTraces: buildRAGEvaluationCaseTracePresentations(history),\n\trows: buildRAGEvaluationHistoryRows(history),\n\tsummary: history?.latestRun\n\t\t? history.latestRun.label\n\t\t: 'No persisted benchmark runs yet.'\n});\n\nexport const buildRAGEvaluationSuiteSnapshotRows = (\n\thistory?: RAGEvaluationSuiteSnapshotHistory\n): RAGLabelValueRow[] => {\n\tif (!history?.latestSnapshot) {\n\t\treturn [\n\t\t\t{ label: 'Suite snapshots', value: 'No saved suite snapshots yet.' }\n\t\t];\n\t}\n\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{\n\t\t\tlabel: 'Snapshots recorded',\n\t\t\tvalue: String(history.snapshots.length)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Latest snapshot',\n\t\t\tvalue: `v${history.latestSnapshot.version} · ${history.latestSnapshot.caseCount} cases`\n\t\t}\n\t];\n\n\tif (history.previousSnapshot) {\n\t\trows.push({\n\t\t\tlabel: 'Previous snapshot',\n\t\t\tvalue: `v${history.previousSnapshot.version} · ${history.previousSnapshot.caseCount} cases`\n\t\t});\n\t}\n\n\tif (!history.diff) {\n\t\trows.push({\n\t\t\tlabel: 'Snapshot diff',\n\t\t\tvalue: 'Save another suite snapshot to compare dataset changes.'\n\t\t});\n\t\treturn rows;\n\t}\n\n\trows.push(\n\t\t{\n\t\t\tlabel: 'Case count change',\n\t\t\tvalue: formatSignedDelta(history.diff.caseCountDelta)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Added cases',\n\t\t\tvalue:\n\t\t\t\thistory.diff.addedCaseIds.length > 0\n\t\t\t\t\t? history.diff.addedCaseIds.join(', ')\n\t\t\t\t\t: 'none'\n\t\t},\n\t\t{\n\t\t\tlabel: 'Removed cases',\n\t\t\tvalue:\n\t\t\t\thistory.diff.removedCaseIds.length > 0\n\t\t\t\t\t? history.diff.removedCaseIds.join(', ')\n\t\t\t\t\t: 'none'\n\t\t},\n\t\t{\n\t\t\tlabel: 'Changed cases',\n\t\t\tvalue:\n\t\t\t\thistory.diff.changedCaseIds.length > 0\n\t\t\t\t\t? history.diff.changedCaseIds.join(', ')\n\t\t\t\t\t: 'none'\n\t\t},\n\t\t{\n\t\t\tlabel: 'Order changed',\n\t\t\tvalue: history.diff.orderChanged ? 'changed' : 'stable'\n\t\t}\n\t);\n\n\treturn rows;\n};\n\nexport const buildRAGEvaluationSuiteSnapshotPresentations = (\n\thistory?: RAGEvaluationSuiteSnapshotHistory\n): RAGEvaluationSuiteSnapshotPresentation[] =>\n\t(history?.snapshots ?? []).map((snapshot) => ({\n\t\tid: snapshot.id,\n\t\tlabel: snapshot.label ?? snapshot.suiteId,\n\t\trows: [\n\t\t\t{ label: 'Version', value: `v${snapshot.version}` },\n\t\t\t{ label: 'Created', value: formatDateLabel(snapshot.createdAt) },\n\t\t\t{ label: 'Cases', value: String(snapshot.caseCount) },\n\t\t\t{\n\t\t\t\tlabel: 'Case ids',\n\t\t\t\tvalue:\n\t\t\t\t\tsnapshot.suite.input.cases\n\t\t\t\t\t\t.map((entry) => entry.id)\n\t\t\t\t\t\t.join(', ') || 'none'\n\t\t\t}\n\t\t],\n\t\tsummary: `v${snapshot.version} · ${snapshot.caseCount} cases`,\n\t\tversion: snapshot.version\n\t}));\n\nexport const buildRAGEvaluationSuiteSnapshotHistoryPresentation = (\n\thistory?: RAGEvaluationSuiteSnapshotHistory\n): RAGEvaluationSuiteSnapshotHistoryPresentation => ({\n\trows: buildRAGEvaluationSuiteSnapshotRows(history),\n\tsnapshots: buildRAGEvaluationSuiteSnapshotPresentations(history),\n\tsummary: history?.latestSnapshot\n\t\t? `v${history.latestSnapshot.version}`\n\t\t: 'No saved suite snapshots yet.'\n});\n\nexport const buildRAGAnswerGroundingCaseSnapshotPresentations = (\n\thistory?: RAGAnswerGroundingEvaluationHistory\n): RAGAnswerGroundingCaseSnapshotPresentation[] => {\n\tif (!history?.caseSnapshots.length) {\n\t\treturn [];\n\t}\n\n\treturn history.caseSnapshots.map((entry) => {\n\t\tconst label = entry.label ?? entry.caseId;\n\t\treturn {\n\t\t\tanswerChange: entry.answerChange,\n\t\t\tcaseId: entry.caseId,\n\t\t\tlabel,\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Query',\n\t\t\t\t\tvalue: entry.query?.trim().length ? entry.query : 'n/a'\n\t\t\t\t},\n\t\t\t\t{ label: 'Answer change', value: entry.answerChange },\n\t\t\t\t{ label: 'Coverage', value: entry.coverage },\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Resolved citations',\n\t\t\t\t\tvalue: `${entry.resolvedCitationCount}/${entry.citationCount}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Resolved citation rate',\n\t\t\t\t\tvalue: entry.resolvedCitationRate.toFixed(3)\n\t\t\t\t},\n\t\t\t\t{ label: 'Citation F1', value: entry.citationF1.toFixed(3) },\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Reference count',\n\t\t\t\t\tvalue: String(entry.referenceCount)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Cited IDs',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.citedIds.length > 0\n\t\t\t\t\t\t\t? entry.citedIds.join(', ')\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Matched IDs',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.matchedIds.length > 0\n\t\t\t\t\t\t\t? entry.matchedIds.join(', ')\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Missing IDs',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.missingIds.length > 0\n\t\t\t\t\t\t\t? entry.missingIds.join(', ')\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Extra IDs',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.extraIds.length > 0\n\t\t\t\t\t\t\t? entry.extraIds.join(', ')\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Unresolved refs',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.ungroundedReferenceNumbers.length > 0\n\t\t\t\t\t\t\t? entry.ungroundedReferenceNumbers.join(', ')\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Answer',\n\t\t\t\t\tvalue: entry.answer.trim().length > 0 ? entry.answer : 'n/a'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Previous answer',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.previousAnswer &&\n\t\t\t\t\t\tentry.previousAnswer.trim().length > 0\n\t\t\t\t\t\t\t? entry.previousAnswer\n\t\t\t\t\t\t\t: 'n/a'\n\t\t\t\t}\n\t\t\t],\n\t\t\tsummary: `${entry.answerChange} · ${entry.coverage} · resolved ${entry.resolvedCitationCount}/${entry.citationCount} · refs ${entry.referenceCount}`\n\t\t};\n\t});\n};\n\nexport const buildRAGAnswerGroundingHistoryRows = (\n\thistory?: RAGAnswerGroundingEvaluationHistory\n): RAGLabelValueRow[] => {\n\tif (!history?.latestRun) {\n\t\treturn [{ label: 'History', value: 'No persisted provider runs yet.' }];\n\t}\n\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{ label: 'Runs recorded', value: String(history.runs.length) },\n\t\t{\n\t\t\tlabel: 'Latest',\n\t\t\tvalue: `${history.latestRun.label} · ${formatGroundingHistorySummaryValue(\n\t\t\t\thistory.latestRun.response\n\t\t\t)}`\n\t\t}\n\t];\n\n\tif (history.previousRun) {\n\t\trows.push({\n\t\t\tlabel: 'Previous',\n\t\t\tvalue: `${history.previousRun.label} · ${formatGroundingHistorySummaryValue(\n\t\t\t\thistory.previousRun.response\n\t\t\t)}`\n\t\t});\n\t}\n\n\tif (history.leaderboard[0]) {\n\t\trows.push({\n\t\t\tlabel: 'Best recorded',\n\t\t\tvalue: `#${history.leaderboard[0].rank} · ${history.leaderboard[0].label} · passing ${formatEvaluationPassingRate(\n\t\t\t\thistory.leaderboard[0].passingRate\n\t\t\t)} · citation f1 ${history.leaderboard[0].averageCitationF1.toFixed(\n\t\t\t\t3\n\t\t\t)} · resolved ${formatEvaluationPassingRate(\n\t\t\t\thistory.leaderboard[0].averageResolvedCitationRate\n\t\t\t)}`\n\t\t});\n\t}\n\n\tif (history.caseSnapshots.length > 0) {\n\t\tconst changedAnswers = history.caseSnapshots.filter(\n\t\t\t(entry) => entry.answerChange === 'changed'\n\t\t).length;\n\t\trows.push({\n\t\t\tlabel: 'Answer drift',\n\t\t\tvalue: `${changedAnswers}/${history.caseSnapshots.length} changed`\n\t\t});\n\t}\n\n\tif (!history.diff) {\n\t\trows.push({\n\t\t\tlabel: 'History diff',\n\t\t\tvalue: 'Run the provider comparison again to diff grounding regressions over time.'\n\t\t});\n\t\treturn rows;\n\t}\n\n\trows.push(\n\t\t{\n\t\t\tlabel: 'Passing delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\thistory.diff.summaryDelta.passingRate,\n\t\t\t\t1,\n\t\t\t\t'%'\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Citation F1 delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\thistory.diff.summaryDelta.averageCitationF1,\n\t\t\t\t3\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Resolved citation delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\thistory.diff.summaryDelta.averageResolvedCitationRate * 100,\n\t\t\t\t1,\n\t\t\t\t'%'\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Improved',\n\t\t\tvalue: formatGroundingHistoryCaseLabels(history.diff.improvedCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Regressed',\n\t\t\tvalue: formatGroundingHistoryCaseLabels(history.diff.regressedCases)\n\t\t}\n\t);\n\n\tif (history.previousRun) {\n\t\tconst currentEntityView = buildRAGAnswerGroundingEntityQualityView(\n\t\t\thistory.latestRun.response\n\t\t);\n\t\tconst previousEntityView = buildRAGAnswerGroundingEntityQualityView(\n\t\t\thistory.previousRun.response\n\t\t);\n\t\trows.push(\n\t\t\t{\n\t\t\t\tlabel: 'Source regression hotspots',\n\t\t\t\tvalue: formatEntityRegressionHotspots(\n\t\t\t\t\tcurrentEntityView.bySource,\n\t\t\t\t\tpreviousEntityView.bySource,\n\t\t\t\t\t(entry) => entry.averageCitationF1,\n\t\t\t\t\t'citation f1'\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Document regression hotspots',\n\t\t\t\tvalue: formatEntityRegressionHotspots(\n\t\t\t\t\tcurrentEntityView.byDocument,\n\t\t\t\t\tpreviousEntityView.byDocument,\n\t\t\t\t\t(entry) => entry.averageCitationF1,\n\t\t\t\t\t'citation f1'\n\t\t\t\t)\n\t\t\t}\n\t\t);\n\t}\n\n\treturn rows;\n};\n\nexport const buildRAGAnswerGroundingHistoryPresentation = (\n\thistory?: RAGAnswerGroundingEvaluationHistory\n): RAGAnswerGroundingHistoryPresentation => ({\n\tcaseSnapshots: buildRAGAnswerGroundingCaseSnapshotPresentations(history),\n\trows: buildRAGAnswerGroundingHistoryRows(history),\n\tsummary: history?.latestRun\n\t\t? history.latestRun.label\n\t\t: 'No persisted provider runs yet.'\n});\n\nconst formatFailureCounts = (failureCounts: Record<string, number>) => {\n\tconst entries = Object.entries(failureCounts).sort((left, right) => {\n\t\tif (right[1] !== left[1]) {\n\t\t\treturn right[1] - left[1];\n\t\t}\n\n\t\treturn left[0].localeCompare(right[0]);\n\t});\n\n\treturn entries.length > 0\n\t\t? entries.map(([key, count]) => `${key} ${count}`).join(' · ')\n\t\t: 'none';\n};\n\nconst formatFailureCountDelta = (\n\tcurrent: Record<string, number>,\n\tprevious: Record<string, number>\n) => {\n\tconst deltas = Object.keys({ ...current, ...previous })\n\t\t.map((key) => ({\n\t\t\tdelta: (current[key] ?? 0) - (previous[key] ?? 0),\n\t\t\tkey\n\t\t}))\n\t\t.filter((entry) => entry.delta > 0)\n\t\t.sort((left, right) => {\n\t\t\tif (right.delta !== left.delta) {\n\t\t\t\treturn right.delta - left.delta;\n\t\t\t}\n\n\t\t\treturn left.key.localeCompare(right.key);\n\t\t});\n\n\treturn deltas.length > 0\n\t\t? deltas\n\t\t\t\t.slice(0, 3)\n\t\t\t\t.map((entry) => `${entry.key} +${entry.delta}`)\n\t\t\t\t.join(' · ')\n\t\t: 'stable';\n};\n\nconst formatEntityRegressionHotspots = <\n\tT extends {\n\t\tkey: string;\n\t\tlabel: string;\n\t\tpassingRate: number;\n\t\tfailureCounts: Record<string, number>;\n\t}\n>(\n\tcurrentEntries: T[],\n\tpreviousEntries: T[],\n\tmetricSelector: (entry: T) => number,\n\tmetricLabel: string\n) => {\n\tconst previousMap = new Map(\n\t\tpreviousEntries.map((entry) => [entry.key, entry])\n\t);\n\tconst regressions = currentEntries\n\t\t.map((entry) => {\n\t\t\tconst previous = previousMap.get(entry.key);\n\t\t\tconst passDelta = entry.passingRate - (previous?.passingRate ?? 0);\n\t\t\tconst metricDelta =\n\t\t\t\tmetricSelector(entry) -\n\t\t\t\t(previous ? metricSelector(previous) : 0);\n\t\t\tconst failureDelta = formatFailureCountDelta(\n\t\t\t\tentry.failureCounts,\n\t\t\t\tprevious?.failureCounts ?? {}\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tentry,\n\t\t\t\tfailureDelta,\n\t\t\t\tmetricDelta,\n\t\t\t\tpassDelta\n\t\t\t};\n\t\t})\n\t\t.filter(\n\t\t\t(entry) =>\n\t\t\t\tentry.passDelta < 0 ||\n\t\t\t\tentry.metricDelta < 0 ||\n\t\t\t\tentry.failureDelta !== 'stable'\n\t\t)\n\t\t.sort((left, right) => {\n\t\t\tif (left.passDelta !== right.passDelta) {\n\t\t\t\treturn left.passDelta - right.passDelta;\n\t\t\t}\n\t\t\tif (left.metricDelta !== right.metricDelta) {\n\t\t\t\treturn left.metricDelta - right.metricDelta;\n\t\t\t}\n\n\t\t\treturn left.entry.label.localeCompare(right.entry.label);\n\t\t});\n\n\treturn regressions.length > 0\n\t\t? regressions\n\t\t\t\t.slice(0, 3)\n\t\t\t\t.map(\n\t\t\t\t\t({ entry, failureDelta, metricDelta, passDelta }) =>\n\t\t\t\t\t\t`${entry.label} pass ${formatSignedDelta(\n\t\t\t\t\t\t\tpassDelta,\n\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t'%'\n\t\t\t\t\t\t)} · ${metricLabel} ${formatSignedDelta(\n\t\t\t\t\t\t\tmetricDelta,\n\t\t\t\t\t\t\t3\n\t\t\t\t\t\t)} · ${failureDelta}`\n\t\t\t\t)\n\t\t\t\t.join(' | ')\n\t\t: 'none';\n};\n\nconst buildEvaluationEntityPresentation = (\n\tentry: RAGEvaluationEntityQualitySummary\n): RAGEntityQualityPresentation => ({\n\tkey: entry.key,\n\tlabel: entry.label,\n\trows: [\n\t\t{ label: 'Entity type', value: entry.entityType },\n\t\t{ label: 'Cases', value: String(entry.totalCases) },\n\t\t{\n\t\t\tlabel: 'Status mix',\n\t\t\tvalue: `${entry.passedCases} pass · ${entry.partialCases} partial · ${entry.failedCases} fail`\n\t\t},\n\t\t{\n\t\t\tlabel: 'Passing rate',\n\t\t\tvalue: formatEvaluationPassingRate(entry.passingRate)\n\t\t},\n\t\t{ label: 'Average F1', value: entry.averageF1.toFixed(3) },\n\t\t{\n\t\t\tlabel: 'Failure classes',\n\t\t\tvalue: formatFailureCounts(entry.failureCounts)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Cases',\n\t\t\tvalue: entry.caseIds.length > 0 ? entry.caseIds.join(', ') : 'none'\n\t\t}\n\t],\n\tsummary: `${entry.entityType} · passing ${formatEvaluationPassingRate(\n\t\tentry.passingRate\n\t)} · f1 ${entry.averageF1.toFixed(3)} · failures ${formatFailureCounts(\n\t\tentry.failureCounts\n\t)}`\n});\n\nconst buildGroundingEntityPresentation = (\n\tentry: RAGAnswerGroundingEntityQualitySummary\n): RAGEntityQualityPresentation => ({\n\tkey: entry.key,\n\tlabel: entry.label,\n\trows: [\n\t\t{ label: 'Entity type', value: entry.entityType },\n\t\t{ label: 'Cases', value: String(entry.totalCases) },\n\t\t{\n\t\t\tlabel: 'Status mix',\n\t\t\tvalue: `${entry.passedCases} pass · ${entry.partialCases} partial · ${entry.failedCases} fail`\n\t\t},\n\t\t{\n\t\t\tlabel: 'Passing rate',\n\t\t\tvalue: formatEvaluationPassingRate(entry.passingRate)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Average citation F1',\n\t\t\tvalue: entry.averageCitationF1.toFixed(3)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Average resolved citation rate',\n\t\t\tvalue: formatEvaluationPassingRate(\n\t\t\t\tentry.averageResolvedCitationRate * 100\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Failure classes',\n\t\t\tvalue: formatFailureCounts(entry.failureCounts)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Cases',\n\t\t\tvalue: entry.caseIds.length > 0 ? entry.caseIds.join(', ') : 'none'\n\t\t}\n\t],\n\tsummary: `${entry.entityType} · passing ${formatEvaluationPassingRate(\n\t\tentry.passingRate\n\t)} · citation f1 ${entry.averageCitationF1.toFixed(\n\t\t3\n\t)} · failures ${formatFailureCounts(entry.failureCounts)}`\n});\n\nexport const buildRAGEvaluationEntityQualityPresentation = (\n\tview: RAGEvaluationEntityQualityView,\n\tentityType: 'source' | 'document'\n): RAGEntityQualityViewPresentation => {\n\tconst entities =\n\t\tentityType === 'source'\n\t\t\t? view.bySource.map(buildEvaluationEntityPresentation)\n\t\t\t: view.byDocument.map(buildEvaluationEntityPresentation);\n\n\treturn {\n\t\tentities,\n\t\trows: [\n\t\t\t{ label: 'Entity type', value: entityType },\n\t\t\t{ label: 'Entities tracked', value: String(entities.length) },\n\t\t\t{\n\t\t\t\tlabel: 'Best coverage',\n\t\t\t\tvalue: entities[0]?.summary ?? 'No entity quality data yet.'\n\t\t\t}\n\t\t],\n\t\tsummary:\n\t\t\tentities[0]?.label ??\n\t\t\t`No ${entityType === 'source' ? 'source' : 'document'} quality data yet.`\n\t};\n};\n\nexport const buildRAGAnswerGroundingEntityQualityPresentation = (\n\tview: RAGAnswerGroundingEntityQualityView,\n\tentityType: 'source' | 'document'\n): RAGEntityQualityViewPresentation => {\n\tconst entities =\n\t\tentityType === 'source'\n\t\t\t? view.bySource.map(buildGroundingEntityPresentation)\n\t\t\t: view.byDocument.map(buildGroundingEntityPresentation);\n\n\treturn {\n\t\tentities,\n\t\trows: [\n\t\t\t{ label: 'Entity type', value: entityType },\n\t\t\t{ label: 'Entities tracked', value: String(entities.length) },\n\t\t\t{\n\t\t\t\tlabel: 'Best coverage',\n\t\t\t\tvalue: entities[0]?.summary ?? 'No entity quality data yet.'\n\t\t\t}\n\t\t],\n\t\tsummary:\n\t\t\tentities[0]?.label ??\n\t\t\t`No ${entityType === 'source' ? 'source' : 'document'} quality data yet.`\n\t};\n};\n",
|
|
10
|
+
"import type {\n\tRAGAdminActionPresentation,\n\tRAGAdminActionRecord,\n\tRAGAdminJobPresentation,\n\tRAGAdminJobRecord,\n\tAIMessage,\n\tRAGAnswerGroundingCaseSnapshotPresentation,\n\tRAGAnswerGroundingEvaluationCaseDiff,\n\tRAGAnswerGroundingEvaluationHistory,\n\tRAGAnswerGroundingEntityQualitySummary,\n\tRAGAnswerGroundingEntityQualityView,\n\tRAGAnswerGroundingEvaluationResponse,\n\tRAGCorpusHealth,\n\tRAGCorpusHealthPresentation,\n\tRAGExtractorReadiness,\n\tRAGReadinessPresentation,\n\tRAGGroundingOverviewPresentation,\n\tRAGGroundingProviderCaseComparisonPresentation,\n\tRAGGroundingProviderOverviewPresentation,\n\tRAGGroundingProviderPresentation,\n\tRAGComparisonOverviewPresentation,\n\tRAGComparisonPresentation,\n\tRAGChunkGraph,\n\tRAGChunkExcerpts,\n\tRAGExcerptModeCounts,\n\tRAGExcerptPromotionReason,\n\tRAGExcerptSelection,\n\tRAGChunkGraphEdge,\n\tRAGChunkGraphNavigation,\n\tRAGChunkGraphNode,\n\tRAGChunkGraphSectionGroup,\n\tRAGChunkStructure,\n\tRAGDocumentChunkPreview,\n\tRAGLabelValueRow,\n\tRAGRerankerComparisonEntry,\n\tRAGRetrievalComparison,\n\tRAGRetrievalComparisonEntry,\n\tRAGRetrievalTraceHistoryWindow,\n\tRAGRetrievalTraceStep,\n\tRAGRetrievalTrace,\n\tRAGHybridRetrievalMode,\n\tRAGSourceBalanceStrategy,\n\tRAGQualityOverviewPresentation,\n\tRAGSectionRetrievalDiagnostic,\n\tRAGEvaluationCaseDiff,\n\tRAGEvaluationCaseTracePresentation,\n\tRAGEvaluationEntityQualitySummary,\n\tRAGEvaluationEntityQualityView,\n\tRAGEvaluationHistory,\n\tRAGAnswerGroundingHistoryPresentation,\n\tRAGEvaluationResponse,\n\tRAGEvaluationHistoryPresentation,\n\tRAGEvaluationHistoryStore,\n\tRAGEvaluationSuiteSnapshotHistory,\n\tRAGEvaluationSuiteSnapshotHistoryPresentation,\n\tRAGEvaluationSuiteSnapshotPresentation,\n\tRAGEntityQualityPresentation,\n\tRAGEntityQualityViewPresentation,\n\tRAGRerankerComparison,\n\tRAGAnswerWorkflowState,\n\tRAGRetrievalTracePresentation,\n\tRAGSource,\n\tRAGSourceLabels,\n\tRAGSourceGroup,\n\tRAGSourceSummary,\n\tRAGStreamStage,\n\tRAGSyncOverviewPresentation,\n\tRAGSyncSourcePresentation,\n\tRAGSyncSourceRecord,\n\tRAGSyncSourceRunPresentation\n} from '../../../types/ai';\nimport {\n\tbuildRAGCitationReferenceMap,\n\tbuildRAGCitations,\n\tbuildRAGGroundedAnswer,\n\tbuildRAGGroundedAnswerSectionSummaries,\n\tbuildRAGGroundingReferences\n} from './grounding';\nimport {\n\tbuildRAGAnswerGroundingEntityQualityView,\n\tbuildRAGEvaluationEntityQualityView\n} from './quality';\n\nexport {\n\tbuildRAGCitationReferenceMap,\n\tbuildRAGCitations,\n\tbuildRAGGroundedAnswer,\n\tbuildRAGGroundedAnswerSectionSummaries,\n\tbuildRAGGroundingReferences\n};\n\nconst buildSourceGroupKey = (source: RAGSource) =>\n\tsource.source ?? source.title ?? source.chunkId;\n\nconst buildSourceLabel = (source: RAGSource) =>\n\tsource.source ?? source.title ?? source.chunkId;\n\nconst getContextNumber = (value: unknown) =>\n\ttypeof value === 'number' && Number.isFinite(value) ? value : undefined;\n\nconst getContextString = (value: unknown) =>\n\ttypeof value === 'string' && value.trim().length > 0\n\t\t? value.trim()\n\t\t: undefined;\n\nconst isRAGRetrievalTrace = (value: unknown): value is RAGRetrievalTrace => {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\tconst candidate = value as Record<string, unknown>;\n\n\treturn (\n\t\ttypeof candidate.query === 'string' &&\n\t\ttypeof candidate.transformedQuery === 'string' &&\n\t\tArray.isArray(candidate.variantQueries) &&\n\t\tArray.isArray(candidate.steps)\n\t);\n};\n\nconst formatTimestampLabel = (value: unknown) => {\n\tconst timestamp =\n\t\ttypeof value === 'number' && Number.isFinite(value)\n\t\t\t? value\n\t\t\t: typeof value === 'string'\n\t\t\t\t? Date.parse(value)\n\t\t\t\t: Number.NaN;\n\tif (!Number.isFinite(timestamp)) {\n\t\treturn undefined;\n\t}\n\n\treturn new Date(timestamp).toLocaleString('en-US', {\n\t\tdateStyle: 'medium',\n\t\ttimeStyle: 'short'\n\t});\n};\n\nconst formatRAGTraceValue = (value: unknown): string => {\n\tif (typeof value === 'string') return value;\n\tif (typeof value === 'number' || typeof value === 'boolean') {\n\t\treturn String(value);\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.join(', ');\n\t}\n\tif (value && typeof value === 'object') {\n\t\treturn JSON.stringify(value);\n\t}\n\treturn 'n/a';\n};\n\nconst formatLeadContinuityCue = (value: unknown) => {\n\tconst cue = getContextString(value);\n\tswitch (cue) {\n\t\tcase 'immediate_follow_up':\n\t\t\treturn 'Immediate follow-up';\n\t\tcase 'near_follow_up':\n\t\t\treturn 'Near follow-up';\n\t\tcase 'close_follow_up':\n\t\t\treturn 'Close follow-up';\n\t\tcase 'delayed_follow_up':\n\t\t\treturn 'Delayed follow-up';\n\t\tcase 'immediate_prior':\n\t\t\treturn 'Immediate prior segment';\n\t\tcase 'near_prior':\n\t\t\treturn 'Near prior segment';\n\t\tcase 'close_prior':\n\t\t\treturn 'Close prior segment';\n\t\tcase 'delayed_prior':\n\t\t\treturn 'Delayed prior segment';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n};\n\nconst formatLeadSpeakerAttributionCue = (value: unknown) => {\n\tconst cue = getContextString(value);\n\tswitch (cue) {\n\t\tcase 'quoted_match':\n\t\t\treturn 'Quoted speaker match';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n};\n\nconst formatLeadChannelAttributionCue = (value: unknown) => {\n\tconst cue = getContextString(value);\n\tswitch (cue) {\n\t\tcase 'quoted_match':\n\t\t\treturn 'Quoted channel match';\n\t\tdefault:\n\t\t\treturn undefined;\n\t}\n};\n\nconst formatLeadMediaCueSummary = (input?: {\n\tleadSpeakerCue?: string;\n\tleadSpeakerAttributionCue?: string;\n\tleadChannelCue?: string;\n\tleadChannelAttributionCue?: string;\n\tleadContinuityCue?: string;\n}) => {\n\tconst parts = [\n\t\tinput?.leadSpeakerCue ? `speaker ${input.leadSpeakerCue}` : undefined,\n\t\tinput?.leadSpeakerAttributionCue === 'quoted_match'\n\t\t\t? 'quoted speaker match'\n\t\t\t: undefined,\n\t\tinput?.leadChannelCue ? `channel ${input.leadChannelCue}` : undefined,\n\t\tinput?.leadChannelAttributionCue === 'quoted_match'\n\t\t\t? 'quoted channel match'\n\t\t\t: undefined,\n\t\tformatLeadContinuityCue(input?.leadContinuityCue)\n\t].filter(\n\t\t(value): value is string =>\n\t\t\ttypeof value === 'string' && value.length > 0\n\t);\n\n\treturn parts.length > 0 ? parts.join(' · ') : 'none';\n};\n\nconst formatRAGTraceMetadataRow = (\n\tkey: string,\n\tvalue: unknown\n): RAGLabelValueRow => ({\n\tlabel:\n\t\tkey === 'sqliteQueryMode'\n\t\t\t? 'SQLite query mode'\n\t\t\t: key === 'postgresQueryMode'\n\t\t\t\t? 'Postgres query mode'\n\t\t\t\t: key === 'sqliteQueryPushdownMode'\n\t\t\t\t\t? 'SQLite pushdown mode'\n\t\t\t\t\t: key === 'postgresQueryPushdownMode'\n\t\t\t\t\t\t? 'Postgres pushdown mode'\n\t\t\t\t\t\t: key === 'sqliteQueryPushdownApplied'\n\t\t\t\t\t\t\t? 'SQLite pushdown applied'\n\t\t\t\t\t\t\t: key === 'postgresQueryPushdownApplied'\n\t\t\t\t\t\t\t\t? 'Postgres pushdown applied'\n\t\t\t\t\t\t\t\t: key === 'sqliteQueryPushdownClauseCount'\n\t\t\t\t\t\t\t\t\t? 'SQLite pushdown clauses'\n\t\t\t\t\t\t\t\t\t: key === 'postgresQueryPushdownClauseCount'\n\t\t\t\t\t\t\t\t\t\t? 'Postgres pushdown clauses'\n\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryPushdownCoverageRatio'\n\t\t\t\t\t\t\t\t\t\t\t? 'SQLite pushdown coverage'\n\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryPushdownCoverageRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres pushdown coverage'\n\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryTotalFilterClauseCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite total filter clauses'\n\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryTotalFilterClauseCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres total filter clauses'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryJsRemainderClauseCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite JS remainder clauses'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryMultiplierUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite query multiplier'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryCandidateLimitUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite candidate limit'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryMaxBackfillsUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite max backfills'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryMinResultsUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite min results'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryFillPolicyUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite fill policy'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryJsRemainderClauseCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres JS remainder clauses'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryMultiplierUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres query multiplier'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryCandidateLimitUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres candidate limit'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryMaxBackfillsUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres max backfills'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryMinResultsUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres min results'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryFillPolicyUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres fill policy'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryJsRemainderRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite JS remainder share'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryJsRemainderRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres JS remainder share'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryFilteredCandidates'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite filtered candidates'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryFilteredCandidates'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres filtered candidates'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryInitialSearchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite initial searchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryInitialSearchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres initial searchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryFinalSearchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite final searchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryFinalSearchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres final searchK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQuerySearchExpansionRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite search expansion'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQuerySearchExpansionRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres search expansion'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryBackfillCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite backfill count'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryBackfillLimitReached'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite backfill limit reached'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryMinResultsSatisfied'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite min results satisfied'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryBackfillCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres backfill count'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryBackfillLimitReached'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres backfill limit reached'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryMinResultsSatisfied'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres min results satisfied'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryReturnedCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite returned hits'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryReturnedCount'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres returned hits'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryCandidateYieldRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite candidate yield'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryCandidateYieldRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres candidate yield'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryTopKFillRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite topK fill rate'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryTopKFillRatio'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres topK fill rate'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryUnderfilledTopK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite underfilled topK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryUnderfilledTopK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres underfilled topK'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryCandidateBudgetExhausted'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite candidate budget exhausted'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryCandidateBudgetExhausted'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres candidate budget exhausted'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'sqliteQueryCandidateCoverage'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite candidate coverage'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresQueryCandidateCoverage'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Postgres candidate coverage'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'leadSpeakerCue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Lead speaker cue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'leadSpeakerAttributionCue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Lead speaker attribution'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'leadChannelAttributionCue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Lead channel attribution'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'leadChannelCue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Lead channel cue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'leadContinuityCue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'Lead continuity cue'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: key,\n\tvalue:\n\t\tkey === 'sourceAwareChunkReason'\n\t\t\t? (formatSourceAwareChunkReason(value) ??\n\t\t\t\tformatRAGTraceValue(value))\n\t\t\t: key === 'leadSpeakerAttributionCue'\n\t\t\t\t? (formatLeadSpeakerAttributionCue(value) ??\n\t\t\t\t\tformatRAGTraceValue(value))\n\t\t\t\t: key === 'leadChannelAttributionCue'\n\t\t\t\t\t? (formatLeadChannelAttributionCue(value) ??\n\t\t\t\t\t\tformatRAGTraceValue(value))\n\t\t\t\t\t: key === 'leadContinuityCue'\n\t\t\t\t\t\t? (formatLeadContinuityCue(value) ??\n\t\t\t\t\t\t\tformatRAGTraceValue(value))\n\t\t\t\t\t\t: formatRAGTraceValue(value)\n});\n\nexport const buildRAGRetrievalTracePresentation = (\n\ttrace?: RAGRetrievalTrace\n): RAGRetrievalTracePresentation => {\n\tif (!trace) {\n\t\treturn {\n\t\t\tdetails: [],\n\t\t\tstats: [],\n\t\t\tsteps: []\n\t\t};\n\t}\n\n\tconst stats: RAGLabelValueRow[] = [\n\t\t{ label: 'Mode', value: trace.mode },\n\t\t{ label: 'Final Results', value: String(trace.resultCounts.final) },\n\t\t{\n\t\t\tlabel: 'Vector Candidates',\n\t\t\tvalue: String(trace.resultCounts.vector)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Lexical Candidates',\n\t\t\tvalue: String(trace.resultCounts.lexical)\n\t\t}\n\t];\n\tconst details: RAGLabelValueRow[] = [\n\t\t{ label: 'Transformed query', value: trace.transformedQuery },\n\t\t...(trace.queryTransformLabel || trace.queryTransformProvider\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Query transform',\n\t\t\t\t\t\tvalue:\n\t\t\t\t\t\t\ttrace.queryTransformLabel ??\n\t\t\t\t\t\t\ttrace.queryTransformProvider ??\n\t\t\t\t\t\t\t'configured'\n\t\t\t\t\t},\n\t\t\t\t\t...(trace.queryTransformReason\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: 'Query transform reason',\n\t\t\t\t\t\t\t\t\tvalue: trace.queryTransformReason\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: [])\n\t\t\t\t]\n\t\t\t: []),\n\t\t{\n\t\t\tlabel: 'Variant queries',\n\t\t\tvalue:\n\t\t\t\ttrace.variantQueries.length > 0\n\t\t\t\t\t? trace.variantQueries.join(' · ')\n\t\t\t\t\t: 'none'\n\t\t},\n\t\t...(trace.requestedMode && trace.requestedMode !== trace.mode\n\t\t\t? [{ label: 'Requested mode', value: trace.requestedMode }]\n\t\t\t: []),\n\t\t...(trace.routingLabel || trace.routingProvider\n\t\t\t? [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Routing decision',\n\t\t\t\t\t\tvalue:\n\t\t\t\t\t\t\ttrace.routingLabel ??\n\t\t\t\t\t\t\ttrace.routingProvider ??\n\t\t\t\t\t\t\t'configured'\n\t\t\t\t\t},\n\t\t\t\t\t...(trace.routingReason\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlabel: 'Routing reason',\n\t\t\t\t\t\t\t\t\tvalue: trace.routingReason\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: [])\n\t\t\t\t]\n\t\t\t: []),\n\t\t{ label: 'Candidate topK', value: String(trace.candidateTopK) },\n\t\t{ label: 'Lexical topK', value: String(trace.lexicalTopK) }\n\t];\n\tconst steps = trace.steps.map((step) => ({\n\t\tcount: step.count,\n\t\tlabel: step.label,\n\t\trows: [\n\t\t\t{ label: 'stage', value: step.stage },\n\t\t\t...(typeof step.count === 'number'\n\t\t\t\t? [{ label: 'count', value: String(step.count) }]\n\t\t\t\t: []),\n\t\t\t...(typeof step.durationMs === 'number'\n\t\t\t\t? [{ label: 'durationMs', value: String(step.durationMs) }]\n\t\t\t\t: []),\n\t\t\t...Object.entries(step.metadata ?? {}).map(([key, value]) =>\n\t\t\t\tformatRAGTraceMetadataRow(key, value)\n\t\t\t)\n\t\t],\n\t\tstage: step.stage\n\t}));\n\n\treturn {\n\t\tdetails,\n\t\tstats,\n\t\tsteps\n\t};\n};\n\nconst formatCompactList = (values?: string[]) =>\n\tvalues && values.length > 0 ? values.join(', ') : 'none';\n\nconst formatCoverageMap = (entries?: Record<string, number>) => {\n\tif (!entries) {\n\t\treturn 'none';\n\t}\n\n\tconst values = Object.entries(entries);\n\treturn values.length > 0\n\t\t? values.map(([key, value]) => `${key} ${value}`).join(' · ')\n\t\t: 'none';\n};\n\nconst formatDurationLabel = (value?: number) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value)) {\n\t\treturn 'n/a';\n\t}\n\n\tif (value < 1000) {\n\t\treturn `${value}ms`;\n\t}\n\n\tif (value < 60000) {\n\t\treturn `${(value / 1000).toFixed(value >= 10000 ? 0 : 1)}s`;\n\t}\n\n\tif (value < 3600000) {\n\t\treturn `${(value / 60000).toFixed(value >= 600000 ? 0 : 1)}m`;\n\t}\n\n\treturn `${(value / 3600000).toFixed(value >= 36000000 ? 0 : 1)}h`;\n};\n\nconst formatDateLabel = (value?: number) =>\n\ttypeof value === 'number' && Number.isFinite(value)\n\t\t? new Date(value).toLocaleString('en-US')\n\t\t: 'n/a';\n\nconst formatAgeLabel = (value?: number) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value)) {\n\t\treturn 'n/a';\n\t}\n\n\tif (value < 1000) {\n\t\treturn `${Math.round(value)}ms`;\n\t}\n\n\tif (value < 60000) {\n\t\treturn `${(value / 1000).toFixed(value >= 10000 ? 0 : 1)}s`;\n\t}\n\n\tif (value < 3600000) {\n\t\treturn `${(value / 60000).toFixed(value >= 600000 ? 0 : 1)}m`;\n\t}\n\n\tif (value < 86400000) {\n\t\treturn `${(value / 3600000).toFixed(value >= 36000000 ? 0 : 1)}h`;\n\t}\n\n\treturn `${(value / 86400000).toFixed(value >= 864000000 ? 0 : 1)}d`;\n};\n\nconst formatSourceAwareChunkReason = (value: unknown) => {\n\tconst reason = getContextString(value);\n\tif (reason === 'section_boundary') {\n\t\treturn 'Chunk boundary section';\n\t}\n\tif (reason === 'size_limit') {\n\t\treturn 'Chunk boundary size limit';\n\t}\n\tif (reason === 'source_native_unit') {\n\t\treturn 'Chunk boundary source-native unit';\n\t}\n\treturn undefined;\n};\n\nconst buildSourceAwareUnitScopeLabel = (metadata?: Record<string, unknown>) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst sectionKind = getContextString(metadata.sectionKind);\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath\n\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\tconst sectionTitle =\n\t\tgetContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n\tconst pdfTextKind = getContextString(metadata.pdfTextKind);\n\tconst officeBlockKind = getContextString(metadata.officeBlockKind);\n\tconst sheetName = getContextString(metadata.sheetName);\n\tconst spreadsheetTableLabel = formatSpreadsheetTableLabel(\n\t\tgetContextNumber(metadata.spreadsheetTableIndex),\n\t\tgetContextNumber(metadata.spreadsheetTableCount)\n\t);\n\tconst slideTitle = getContextString(metadata.slideTitle);\n\tconst slideNumber =\n\t\tgetContextNumber(metadata.slideNumber) ??\n\t\t(typeof metadata.slideIndex === 'number'\n\t\t\t? metadata.slideIndex + 1\n\t\t\t: undefined);\n\n\tif (\n\t\tsectionPath.length > 0 &&\n\t\t(sectionKind === 'markdown_heading' ||\n\t\t\tsectionKind === 'html_heading' ||\n\t\t\tsectionKind === 'office_heading' ||\n\t\t\tsectionKind === undefined)\n\t) {\n\t\treturn `Source-aware section ${sectionPath.join(' > ')}`;\n\t}\n\n\tif (sectionKind === 'pdf_block') {\n\t\tif (pdfTextKind === 'table_like' && sectionTitle) {\n\t\t\treturn `Source-aware PDF table block ${sectionTitle}`;\n\t\t}\n\t\tif (sectionTitle) {\n\t\t\treturn `Source-aware PDF block ${sectionTitle}`;\n\t\t}\n\t\treturn 'Source-aware PDF block';\n\t}\n\n\tif (sectionKind === 'office_block') {\n\t\tif (officeBlockKind && sectionTitle) {\n\t\t\treturn `Source-aware office ${officeBlockKind} block ${sectionTitle}`;\n\t\t}\n\t\tif (sectionTitle) {\n\t\t\treturn `Source-aware office block ${sectionTitle}`;\n\t\t}\n\t\treturn 'Source-aware office block';\n\t}\n\n\tif (\n\t\tsectionKind === 'spreadsheet_rows' ||\n\t\t(sectionKind === undefined &&\n\t\t\t(sheetName ||\n\t\t\t\tspreadsheetTableLabel ||\n\t\t\t\tgetContextNumber(metadata.spreadsheetRowStart) !== undefined ||\n\t\t\t\tgetContextNumber(metadata.spreadsheetRowEnd) !== undefined))\n\t) {\n\t\tif (sheetName && spreadsheetTableLabel) {\n\t\t\treturn `Source-aware spreadsheet ${sheetName} ${spreadsheetTableLabel}`;\n\t\t}\n\t\tif (sheetName) {\n\t\t\treturn `Source-aware spreadsheet ${sheetName}`;\n\t\t}\n\t\treturn 'Source-aware spreadsheet';\n\t}\n\n\tif (sectionKind === 'presentation_slide') {\n\t\tif (slideNumber && slideTitle) {\n\t\t\treturn `Source-aware slide ${slideNumber} ${slideTitle}`;\n\t\t}\n\t\tif (slideTitle) {\n\t\t\treturn `Source-aware slide ${slideTitle}`;\n\t\t}\n\t\tif (slideNumber) {\n\t\t\treturn `Source-aware slide ${slideNumber}`;\n\t\t}\n\t\treturn 'Source-aware slide';\n\t}\n\n\treturn undefined;\n};\n\nconst buildSyncOverviewLatestRow = (sources: RAGSyncSourceRecord[]) => {\n\tconst latest = [...sources]\n\t\t.filter(\n\t\t\t(record) =>\n\t\t\t\ttypeof record.lastSuccessfulSyncAt === 'number' ||\n\t\t\t\ttypeof record.lastSyncedAt === 'number'\n\t\t)\n\t\t.sort(\n\t\t\t(left, right) =>\n\t\t\t\t(right.lastSuccessfulSyncAt ?? right.lastSyncedAt ?? 0) -\n\t\t\t\t(left.lastSuccessfulSyncAt ?? left.lastSyncedAt ?? 0)\n\t\t)[0];\n\n\tif (!latest) {\n\t\treturn {\n\t\t\tlabel: 'Latest sync',\n\t\t\tvalue: 'No completed run yet'\n\t\t};\n\t}\n\n\treturn {\n\t\tlabel: 'Latest sync',\n\t\tvalue: [\n\t\t\tlatest.label,\n\t\t\ttypeof latest.documentCount === 'number'\n\t\t\t\t? `${latest.documentCount} docs`\n\t\t\t\t: '',\n\t\t\ttypeof latest.chunkCount === 'number'\n\t\t\t\t? `${latest.chunkCount} chunks`\n\t\t\t\t: '',\n\t\t\ttypeof latest.lastSyncDurationMs === 'number'\n\t\t\t\t? formatDurationLabel(latest.lastSyncDurationMs)\n\t\t\t\t: '',\n\t\t\ttypeof latest.lastSuccessfulSyncAt === 'number'\n\t\t\t\t? formatDateLabel(latest.lastSuccessfulSyncAt)\n\t\t\t\t: typeof latest.lastSyncedAt === 'number'\n\t\t\t\t\t? formatDateLabel(latest.lastSyncedAt)\n\t\t\t\t\t: ''\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' · ')\n\t};\n};\n\nconst formatAdminActionLabel = (\n\tvalue: RAGAdminActionRecord['action'] | RAGAdminJobRecord['action']\n) => value.replaceAll('_', ' ');\n\nconst buildAdminTimingLabel = (input: {\n\telapsedMs?: number;\n\tstartedAt: number;\n}) =>\n\ttypeof input.elapsedMs === 'number'\n\t\t? formatDurationLabel(input.elapsedMs)\n\t\t: formatDateLabel(input.startedAt);\n\nexport const buildRAGAdminJobPresentation = (\n\tjob: RAGAdminJobRecord\n): RAGAdminJobPresentation => ({\n\tid: job.id,\n\taction: job.action,\n\tstatus: job.status,\n\tsummary: [\n\t\tjob.status.toUpperCase(),\n\t\tformatAdminActionLabel(job.action),\n\t\tjob.target,\n\t\tbuildAdminTimingLabel(job)\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' · '),\n\trows: [\n\t\t{ label: 'Action', value: formatAdminActionLabel(job.action) },\n\t\t{ label: 'Status', value: job.status },\n\t\t...(job.target ? [{ label: 'Target', value: job.target }] : []),\n\t\t{ label: 'Timing', value: buildAdminTimingLabel(job) },\n\t\t...(job.error ? [{ label: 'Error', value: job.error }] : [])\n\t]\n});\n\nexport const buildRAGAdminJobPresentations = (\n\tjobs?: RAGAdminJobRecord[]\n): RAGAdminJobPresentation[] =>\n\t(jobs ?? []).slice(0, 3).map(buildRAGAdminJobPresentation);\n\nexport const buildRAGAdminActionPresentation = (\n\taction: RAGAdminActionRecord\n): RAGAdminActionPresentation => ({\n\tid: action.id,\n\taction: action.action,\n\tstatus: action.status,\n\tsummary: [\n\t\taction.status.toUpperCase(),\n\t\tformatAdminActionLabel(action.action),\n\t\taction.documentId ?? action.target,\n\t\tbuildAdminTimingLabel(action)\n\t]\n\t\t.filter(Boolean)\n\t\t.join(' · '),\n\trows: [\n\t\t{ label: 'Action', value: formatAdminActionLabel(action.action) },\n\t\t{ label: 'Status', value: action.status },\n\t\t...(action.documentId\n\t\t\t? [{ label: 'Document', value: action.documentId }]\n\t\t\t: action.target\n\t\t\t\t? [{ label: 'Target', value: action.target }]\n\t\t\t\t: []),\n\t\t{ label: 'Timing', value: buildAdminTimingLabel(action) },\n\t\t...(action.error ? [{ label: 'Error', value: action.error }] : [])\n\t]\n});\n\nexport const buildRAGAdminActionPresentations = (\n\tactions?: RAGAdminActionRecord[]\n): RAGAdminActionPresentation[] =>\n\t(actions ?? []).slice(0, 3).map(buildRAGAdminActionPresentation);\n\nconst buildRAGSyncSourceRunPresentations = (\n\tsource: RAGSyncSourceRecord\n): RAGSyncSourceRunPresentation[] => {\n\tif (!Array.isArray(source.metadata?.recentRuns)) {\n\t\treturn [];\n\t}\n\n\treturn (source.metadata.recentRuns as Array<Record<string, unknown>>)\n\t\t.slice(0, 3)\n\t\t.map((entry, index) => {\n\t\t\tconst trigger =\n\t\t\t\ttypeof entry.trigger === 'string' ? entry.trigger : 'sync';\n\t\t\tconst status =\n\t\t\t\ttypeof entry.status === 'string' ? entry.status : 'unknown';\n\t\t\tconst finishedAt =\n\t\t\t\ttypeof entry.finishedAt === 'number'\n\t\t\t\t\t? formatDateLabel(entry.finishedAt)\n\t\t\t\t\t: 'n/a';\n\t\t\tconst duration =\n\t\t\t\ttypeof entry.durationMs === 'number'\n\t\t\t\t\t? formatDurationLabel(entry.durationMs)\n\t\t\t\t\t: 'n/a';\n\t\t\tconst docs =\n\t\t\t\ttypeof entry.documentCount === 'number'\n\t\t\t\t\t? `${entry.documentCount} docs`\n\t\t\t\t\t: 'n/a';\n\t\t\tconst chunks =\n\t\t\t\ttypeof entry.chunkCount === 'number'\n\t\t\t\t\t? `${entry.chunkCount} chunks`\n\t\t\t\t\t: 'n/a';\n\t\t\tconst error =\n\t\t\t\ttypeof entry.error === 'string' && entry.error.length > 0\n\t\t\t\t\t? entry.error\n\t\t\t\t\t: undefined;\n\n\t\t\treturn {\n\t\t\t\tlabel: `Run ${index + 1}`,\n\t\t\t\tstatus,\n\t\t\t\tsummary: `${trigger} · ${status} · ${docs} · ${chunks} · ${duration} · ${finishedAt}`,\n\t\t\t\trows: [\n\t\t\t\t\t{ label: 'Trigger', value: trigger },\n\t\t\t\t\t{ label: 'Status', value: status },\n\t\t\t\t\t{ label: 'Output', value: `${docs} · ${chunks}` },\n\t\t\t\t\t{ label: 'Duration', value: duration },\n\t\t\t\t\t{ label: 'Finished', value: finishedAt },\n\t\t\t\t\t...(error ? [{ label: 'Error', value: error }] : [])\n\t\t\t\t]\n\t\t\t};\n\t\t});\n};\n\nexport const buildRAGSyncSourcePresentation = (\n\tsource: RAGSyncSourceRecord\n): RAGSyncSourcePresentation => {\n\tconst provider =\n\t\ttypeof source.metadata?.provider === 'string'\n\t\t\t? source.metadata.provider\n\t\t\t: undefined;\n\tconst accountMode =\n\t\ttypeof source.metadata?.accountMode === 'string'\n\t\t\t? source.metadata.accountMode\n\t\t\t: undefined;\n\tconst schedule =\n\t\ttypeof source.metadata?.schedule === 'string'\n\t\t\t? source.metadata.schedule\n\t\t\t: undefined;\n\tconst lastTrigger =\n\t\ttypeof source.metadata?.lastTrigger === 'string'\n\t\t\t? source.metadata.lastTrigger\n\t\t\t: undefined;\n\tconst liveReady =\n\t\ttypeof source.metadata?.liveReady === 'string'\n\t\t\t? source.metadata.liveReady\n\t\t\t: undefined;\n\tconst diagnosticSummary = source.diagnostics?.summary;\n\tconst diagnosticTags =\n\t\tsource.diagnostics?.entries.map((entry) =>\n\t\t\tentry.code\n\t\t\t\t.replace(/_/g, ' ')\n\t\t\t\t.replace(/\\b\\w/g, (letter) => letter.toUpperCase())\n\t\t) ?? [];\n\tconst retryGuidance = source.diagnostics?.retryGuidance;\n\n\treturn {\n\t\tid: source.id,\n\t\tlabel: source.label,\n\t\tkind: source.kind,\n\t\tstatus: source.status,\n\t\tsummary: [\n\t\t\tsource.kind,\n\t\t\tsource.status,\n\t\t\ttypeof source.documentCount === 'number'\n\t\t\t\t? `${source.documentCount} docs`\n\t\t\t\t: '',\n\t\t\ttypeof source.chunkCount === 'number'\n\t\t\t\t? `${source.chunkCount} chunks`\n\t\t\t\t: '',\n\t\t\ttypeof source.lastSyncDurationMs === 'number'\n\t\t\t\t? formatDurationLabel(source.lastSyncDurationMs)\n\t\t\t\t: '',\n\t\t\ttypeof source.lastSuccessfulSyncAt === 'number'\n\t\t\t\t? `last success ${formatDateLabel(source.lastSuccessfulSyncAt)}`\n\t\t\t\t: typeof source.lastSyncedAt === 'number'\n\t\t\t\t\t? `last sync ${formatDateLabel(source.lastSyncedAt)}`\n\t\t\t\t\t: ''\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.join(' · '),\n\t\trows: [\n\t\t\t...(source.target\n\t\t\t\t? [{ label: 'Target', value: source.target }]\n\t\t\t\t: []),\n\t\t\t...(provider ? [{ label: 'Provider', value: provider }] : []),\n\t\t\t...(accountMode\n\t\t\t\t? [{ label: 'Account mode', value: accountMode }]\n\t\t\t\t: []),\n\t\t\t...(schedule ? [{ label: 'Schedule', value: schedule }] : []),\n\t\t\t...(lastTrigger\n\t\t\t\t? [{ label: 'Last trigger', value: lastTrigger }]\n\t\t\t\t: []),\n\t\t\t...(typeof source.lastSuccessfulSyncAt === 'number'\n\t\t\t\t? [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Last success',\n\t\t\t\t\t\t\tvalue: formatDateLabel(source.lastSuccessfulSyncAt)\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t\t...(typeof source.nextRetryAt === 'number'\n\t\t\t\t? [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Next retry',\n\t\t\t\t\t\t\tvalue: formatDateLabel(source.nextRetryAt)\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t\t...(source.lastError\n\t\t\t\t? [{ label: 'Last error', value: source.lastError }]\n\t\t\t\t: []),\n\t\t\t...(diagnosticSummary\n\t\t\t\t? [{ label: 'Diagnostics', value: diagnosticSummary }]\n\t\t\t\t: []),\n\t\t\t...(retryGuidance\n\t\t\t\t? [{ label: 'Retry guidance', value: retryGuidance.reason }]\n\t\t\t\t: [])\n\t\t],\n\t\ttags: [\n\t\t\tprovider,\n\t\t\taccountMode ? `mode ${accountMode}` : undefined,\n\t\t\tliveReady,\n\t\t\t...diagnosticTags\n\t\t].filter((value): value is string => Boolean(value)),\n\t\textendedSummary: diagnosticSummary ?? source.description ?? liveReady,\n\t\truns: buildRAGSyncSourceRunPresentations(source)\n\t};\n};\n\nexport const buildRAGSyncSourcePresentations = (\n\tsources?: RAGSyncSourceRecord[]\n): RAGSyncSourcePresentation[] =>\n\t(sources ?? []).map(buildRAGSyncSourcePresentation);\n\nexport const buildRAGReadinessPresentation = (\n\treadiness?: RAGExtractorReadiness\n): RAGReadinessPresentation => {\n\tif (!readiness) {\n\t\treturn {\n\t\t\tsections: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Provider',\n\t\t\t\t\ttitle: 'Unavailable',\n\t\t\t\t\tsummary: 'Readiness data is not available yet.'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n\n\treturn {\n\t\tsections: [\n\t\t\t{\n\t\t\t\tlabel: 'Provider',\n\t\t\t\ttitle: readiness.providerConfigured\n\t\t\t\t\t? (readiness.providerName ?? 'Runtime provider routing')\n\t\t\t\t\t: 'Not configured',\n\t\t\t\tsummary: readiness.providerConfigured\n\t\t\t\t\t? readiness.model\n\t\t\t\t\t\t? `Requests route through ${readiness.providerName ?? 'the runtime provider registry'} with default model ${readiness.model}.`\n\t\t\t\t\t\t: `Requests route through ${readiness.providerName ?? 'the runtime provider registry'}.`\n\t\t\t\t\t: 'Provider-backed retrieval is not configured yet.'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Embeddings',\n\t\t\t\ttitle: readiness.embeddingConfigured\n\t\t\t\t\t? readiness.embeddingModel ===\n\t\t\t\t\t\t'collection-managed embeddings'\n\t\t\t\t\t\t? 'Collection-managed'\n\t\t\t\t\t\t: 'Configured'\n\t\t\t\t\t: 'Missing',\n\t\t\t\tsummary: readiness.embeddingConfigured\n\t\t\t\t\t? readiness.embeddingModel ===\n\t\t\t\t\t\t'collection-managed embeddings'\n\t\t\t\t\t\t? 'Embeddings come from the collection and vector store layer, so retrieval stays vector-backed without a separate top-level embedding provider.'\n\t\t\t\t\t\t: (readiness.embeddingModel ??\n\t\t\t\t\t\t\t'Embedding model configured.')\n\t\t\t\t\t: 'Embeddings are not configured yet.'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Retrieval Stack',\n\t\t\t\ttitle: readiness.rerankerConfigured\n\t\t\t\t\t? 'Reranker ready'\n\t\t\t\t\t: 'Vector only',\n\t\t\t\tsummary: readiness.indexManagerConfigured\n\t\t\t\t\t? 'Index manager configured.'\n\t\t\t\t\t: 'Index manager not configured.'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Extractors',\n\t\t\t\ttitle: readiness.extractorsConfigured\n\t\t\t\t\t? `${readiness.extractorNames.length} configured`\n\t\t\t\t\t: 'None configured',\n\t\t\t\tsummary: readiness.extractorsConfigured\n\t\t\t\t\t? `Configured extractors: ${formatCompactList(readiness.extractorNames)}`\n\t\t\t\t\t: 'No extractors configured.',\n\t\t\t\ttags:\n\t\t\t\t\treadiness.extractorNames.length > 0\n\t\t\t\t\t\t? readiness.extractorNames\n\t\t\t\t\t\t: ['No extractors configured']\n\t\t\t}\n\t\t]\n\t};\n};\n\nexport const buildRAGCorpusHealthPresentation = (\n\thealth?: RAGCorpusHealth\n): RAGCorpusHealthPresentation => {\n\tif (!health) {\n\t\treturn {\n\t\t\tsections: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Corpus health',\n\t\t\t\t\ttitle: 'Unavailable',\n\t\t\t\t\tsummary: 'Corpus health is not available yet.'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n\n\treturn {\n\t\tsections: [\n\t\t\t{\n\t\t\t\tlabel: 'Corpus coverage',\n\t\t\t\ttitle: `Formats: ${formatCoverageMap(health.coverageByFormat)}`,\n\t\t\t\tsummary: `Kinds: ${formatCoverageMap(health.coverageByKind)}`,\n\t\t\t\trows: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Average chunks per document',\n\t\t\t\t\t\tvalue: health.averageChunksPerDocument.toFixed(2)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Chunk quality',\n\t\t\t\ttitle: `${health.averageChunksPerDocument.toFixed(2)} avg chunks/doc`,\n\t\t\t\tsummary: `Empty docs ${health.emptyDocuments} · empty chunks ${health.emptyChunks} · low signal ${health.lowSignalChunks}`,\n\t\t\t\trows: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Missing source',\n\t\t\t\t\t\tvalue: String(health.documentsMissingSource)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Missing title',\n\t\t\t\t\t\tvalue: String(health.documentsMissingTitle)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Missing metadata',\n\t\t\t\t\t\tvalue: String(health.documentsMissingMetadata)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Freshness',\n\t\t\t\ttitle: `${health.staleDocuments.length} stale docs`,\n\t\t\t\tsummary: `Stale threshold ${formatAgeLabel(health.staleAfterMs)}`,\n\t\t\t\trows: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Oldest age',\n\t\t\t\t\t\tvalue: formatAgeLabel(health.oldestDocumentAgeMs)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Newest age',\n\t\t\t\t\t\tvalue: formatAgeLabel(health.newestDocumentAgeMs)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Failures',\n\t\t\t\ttitle: `${health.failedIngestJobs} ingest · ${health.failedAdminJobs} admin`,\n\t\t\t\tsummary: `Duplicate sources ${health.duplicateSourceGroups.length} · duplicate ids ${health.duplicateDocumentIdGroups.length}`,\n\t\t\t\trows: [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Failures by input',\n\t\t\t\t\t\tvalue: formatCoverageMap(health.failuresByInputKind)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Failures by extractor',\n\t\t\t\t\t\tvalue: formatCoverageMap(health.failuresByExtractor)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Failures by admin action',\n\t\t\t\t\t\tvalue: formatCoverageMap(health.failuresByAdminAction)\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t]\n\t};\n};\n\nexport const buildRAGSyncOverviewPresentation = (\n\tsources?: RAGSyncSourceRecord[]\n): RAGSyncOverviewPresentation => {\n\tconst records = sources ?? [];\n\tif (records.length === 0) {\n\t\treturn {\n\t\t\trows: [\n\t\t\t\t{ label: 'Configured sync sources', value: '0' },\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Latest sync',\n\t\t\t\t\tvalue: 'No sync sources configured yet.'\n\t\t\t\t}\n\t\t\t],\n\t\t\tsections: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Sync overview',\n\t\t\t\t\ttitle: 'No sync sources configured',\n\t\t\t\t\tsummary:\n\t\t\t\t\t\t'Add sync sources to monitor directories, URLs, storage, or mailboxes.'\n\t\t\t\t}\n\t\t\t]\n\t\t};\n\t}\n\n\tconst countByStatus = (status: RAGSyncSourceRecord['status']) =>\n\t\trecords.filter((record) => record.status === status).length;\n\n\treturn {\n\t\trows: [\n\t\t\t{ label: 'Configured sync sources', value: String(records.length) },\n\t\t\t{ label: 'Completed', value: String(countByStatus('completed')) },\n\t\t\t{ label: 'Running', value: String(countByStatus('running')) },\n\t\t\t{\n\t\t\t\tlabel: 'Failed',\n\t\t\t\tvalue: String(countByStatus('failed'))\n\t\t\t},\n\t\t\tbuildSyncOverviewLatestRow(records)\n\t\t],\n\t\tsections: [\n\t\t\t{\n\t\t\t\tlabel: 'Sync overview',\n\t\t\t\ttitle: `${records.length} configured`,\n\t\t\t\tsummary: `${countByStatus('completed')} completed · ${countByStatus('running')} running · ${countByStatus('failed')} failed`\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Latest sync',\n\t\t\t\ttitle: buildSyncOverviewLatestRow(records).value,\n\t\t\t\tsummary: 'Most recent completed or last-known sync activity.'\n\t\t\t}\n\t\t]\n\t};\n};\n\nconst formatMediaTimestamp = (value: unknown) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n\t\treturn undefined;\n\t}\n\n\tconst totalSeconds = Math.floor(value / 1000);\n\tconst minutes = Math.floor(totalSeconds / 60);\n\tconst seconds = totalSeconds % 60;\n\tconst milliseconds = Math.floor(value % 1000);\n\n\treturn `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(\n\t\t2,\n\t\t'0'\n\t)}.${String(milliseconds).padStart(3, '0')}`;\n};\n\nconst getAttachmentName = (source?: string, title?: string) => {\n\tconst sourceAttachment = source?.split('/').at(-1);\n\tif (sourceAttachment && sourceAttachment.includes('.')) {\n\t\treturn sourceAttachment;\n\t}\n\n\tconst titleAttachment = title?.split(' · ').at(-1);\n\tif (titleAttachment && titleAttachment.includes('.')) {\n\t\treturn titleAttachment;\n\t}\n\n\treturn undefined;\n};\n\nconst getSpreadsheetHeaders = (metadata?: Record<string, unknown>) =>\n\tArray.isArray(metadata?.spreadsheetHeaders)\n\t\t? metadata.spreadsheetHeaders\n\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\nconst formatSpreadsheetColumnRange = (\n\tcolumnStart?: string,\n\tcolumnEnd?: string\n) => {\n\tif (typeof columnStart !== 'string' || columnStart.length === 0) {\n\t\treturn undefined;\n\t}\n\tif (typeof columnEnd !== 'string' || columnEnd.length === 0) {\n\t\treturn `Columns ${columnStart}`;\n\t}\n\tif (columnStart === columnEnd) {\n\t\treturn `Columns ${columnStart}`;\n\t}\n\n\treturn `Columns ${columnStart}-${columnEnd}`;\n};\n\nconst formatSpreadsheetRowRange = (rowStart?: number, rowEnd?: number) => {\n\tif (typeof rowStart !== 'number' || !Number.isFinite(rowStart)) {\n\t\treturn undefined;\n\t}\n\tif (\n\t\ttypeof rowEnd !== 'number' &&\n\t\ttypeof rowStart === 'number' &&\n\t\tNumber.isFinite(rowStart)\n\t) {\n\t\treturn `Rows ${rowStart}`;\n\t}\n\tif (rowStart === rowEnd) {\n\t\treturn `Rows ${rowStart}`;\n\t}\n\n\treturn `Rows ${rowStart}-${rowEnd}`;\n};\n\nconst formatSpreadsheetTableLabel = (\n\ttableIndex?: number,\n\ttableCount?: number\n) => {\n\tif (\n\t\ttypeof tableIndex !== 'number' ||\n\t\t!Number.isFinite(tableIndex) ||\n\t\ttableIndex < 1\n\t) {\n\t\treturn undefined;\n\t}\n\n\tif (\n\t\ttypeof tableCount === 'number' &&\n\t\tNumber.isFinite(tableCount) &&\n\t\ttableCount >= tableIndex\n\t) {\n\t\treturn `Table ${tableIndex} of ${tableCount}`;\n\t}\n\n\treturn `Table ${tableIndex}`;\n};\n\nconst formatMediaDurationLabel = (value: unknown) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n\t\treturn undefined;\n\t}\n\n\treturn formatMediaTimestamp(value);\n};\n\nconst buildContextLabel = (metadata?: Record<string, unknown>) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst pdfTextKind = getContextString(metadata.pdfTextKind);\n\tconst officeBlockKind = getContextString(metadata.officeBlockKind);\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath\n\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\tconst sectionTitle =\n\t\tgetContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n\tif (pdfTextKind === 'table_like' && sectionTitle) {\n\t\treturn `PDF table block ${sectionTitle}`;\n\t}\n\tif (pdfTextKind === 'paragraph' && sectionTitle) {\n\t\treturn `PDF text block ${sectionTitle}`;\n\t}\n\tif (officeBlockKind === 'table' && sectionTitle) {\n\t\treturn `Office table block ${sectionTitle}`;\n\t}\n\tif (officeBlockKind === 'list' && sectionTitle) {\n\t\treturn `Office list block ${sectionTitle}`;\n\t}\n\tif (officeBlockKind === 'paragraph' && sectionTitle) {\n\t\treturn `Office paragraph block ${sectionTitle}`;\n\t}\n\n\tconst emailKind = getContextString(metadata.emailKind);\n\tif (emailKind === 'attachment') {\n\t\tconst attachmentName = getContextString(metadata.attachmentName);\n\t\tconst threadTopic = getContextString(metadata.threadTopic);\n\t\treturn attachmentName\n\t\t\t? threadTopic\n\t\t\t\t? `Attachment evidence ${attachmentName} in ${threadTopic}`\n\t\t\t\t: `Attachment evidence ${attachmentName}`\n\t\t\t: 'Attachment evidence';\n\t}\n\n\tif (emailKind === 'message') {\n\t\tconst threadTopic = getContextString(metadata.threadTopic);\n\t\tconst from = getContextString(metadata.from);\n\t\tif (threadTopic) {\n\t\t\treturn from\n\t\t\t\t? `Message in ${threadTopic} from ${from}`\n\t\t\t\t: `Message in ${threadTopic}`;\n\t\t}\n\t\treturn from ? `Message from ${from}` : 'Message evidence';\n\t}\n\n\tconst page =\n\t\tgetContextNumber(metadata.page) ??\n\t\tgetContextNumber(metadata.pageNumber) ??\n\t\t(typeof metadata.pageIndex === 'number'\n\t\t\t? metadata.pageIndex + 1\n\t\t\t: undefined);\n\tconst region =\n\t\tgetContextNumber(metadata.regionNumber) ??\n\t\t(typeof metadata.regionIndex === 'number'\n\t\t\t? metadata.regionIndex + 1\n\t\t\t: undefined);\n\tconst hasOCRTrace =\n\t\ttypeof metadata.ocrRegionConfidence === 'number' ||\n\t\ttypeof metadata.ocrConfidence === 'number' ||\n\t\tgetContextString(metadata.pdfTextMode) === 'ocr' ||\n\t\ttypeof metadata.ocrRegionCount === 'number';\n\tconst ocrPageStart = getContextNumber(metadata.ocrPageStart);\n\tconst ocrPageEnd = getContextNumber(metadata.ocrPageEnd);\n\tif (page && region) {\n\t\tif (hasOCRTrace) {\n\t\t\treturn `OCR page ${page} region ${region}`;\n\t\t}\n\t\treturn `Page ${page} region ${region}`;\n\t}\n\tif (page) {\n\t\tif (hasOCRTrace) {\n\t\t\treturn `OCR page ${page}`;\n\t\t}\n\t\treturn `Page ${page}`;\n\t}\n\tif (\n\t\thasOCRTrace &&\n\t\ttypeof ocrPageStart === 'number' &&\n\t\ttypeof ocrPageEnd === 'number'\n\t) {\n\t\treturn ocrPageStart === ocrPageEnd\n\t\t\t? `OCR page ${ocrPageStart}`\n\t\t\t: `OCR pages ${ocrPageStart}-${ocrPageEnd}`;\n\t}\n\n\tconst sheet =\n\t\tgetContextString(metadata.sheetName) ??\n\t\t(Array.isArray(metadata.sheetNames)\n\t\t\t? getContextString(metadata.sheetNames[0])\n\t\t\t: undefined);\n\tif (sheet) {\n\t\tconst tableLabel = formatSpreadsheetTableLabel(\n\t\t\tgetContextNumber(metadata.spreadsheetTableIndex),\n\t\t\tgetContextNumber(metadata.spreadsheetTableCount)\n\t\t);\n\t\tconst columnRange = formatSpreadsheetColumnRange(\n\t\t\tgetContextString(metadata.spreadsheetColumnStart),\n\t\t\tgetContextString(metadata.spreadsheetColumnEnd)\n\t\t);\n\t\tconst rowRange = formatSpreadsheetRowRange(\n\t\t\tgetContextNumber(metadata.spreadsheetRowStart),\n\t\t\tgetContextNumber(metadata.spreadsheetRowEnd)\n\t\t);\n\t\tconst headers = getSpreadsheetHeaders(metadata);\n\t\tif (tableLabel && rowRange && columnRange) {\n\t\t\treturn `Sheet ${sheet} ${tableLabel} ${rowRange} ${columnRange}`;\n\t\t}\n\t\tif (tableLabel && rowRange) {\n\t\t\treturn `Sheet ${sheet} ${tableLabel} ${rowRange}`;\n\t\t}\n\t\tif (tableLabel && columnRange) {\n\t\t\treturn `Sheet ${sheet} ${tableLabel} ${columnRange}`;\n\t\t}\n\t\tif (tableLabel) {\n\t\t\treturn `Sheet ${sheet} ${tableLabel}`;\n\t\t}\n\t\tif (rowRange && columnRange) {\n\t\t\treturn `Sheet ${sheet} ${rowRange} ${columnRange}`;\n\t\t}\n\t\tif (rowRange) {\n\t\t\treturn `Sheet ${sheet} ${rowRange}`;\n\t\t}\n\t\tif (columnRange) {\n\t\t\treturn `Sheet ${sheet} ${columnRange}`;\n\t\t}\n\t\tif (headers.length > 0) {\n\t\t\treturn `Sheet ${sheet} by ${headers.slice(0, 2).join(', ')}`;\n\t\t}\n\t\treturn `Sheet ${sheet}`;\n\t}\n\n\tconst slide =\n\t\tgetContextNumber(metadata.slide) ??\n\t\tgetContextNumber(metadata.slideNumber) ??\n\t\t(typeof metadata.slideIndex === 'number'\n\t\t\t? metadata.slideIndex + 1\n\t\t\t: undefined);\n\tconst slideTitle = getContextString(metadata.slideTitle);\n\tif (slide) {\n\t\tif (slideTitle) {\n\t\t\treturn `Slide ${slide} ${slideTitle}`;\n\t\t}\n\t\treturn `Slide ${slide}`;\n\t}\n\n\tconst archiveEntry =\n\t\tgetContextString(metadata.archiveFullPath) ??\n\t\tgetContextString(metadata.archivePath) ??\n\t\tgetContextString(metadata.archiveEntryPath) ??\n\t\tgetContextString(metadata.entryPath);\n\tif (archiveEntry) {\n\t\treturn `Archive entry ${archiveEntry}`;\n\t}\n\n\tconst threadTopic = getContextString(metadata.threadTopic);\n\tif (threadTopic) {\n\t\treturn `Thread ${threadTopic}`;\n\t}\n\n\tconst speaker = getContextString(metadata.speaker);\n\tif (speaker) {\n\t\treturn `Speaker ${speaker}`;\n\t}\n\tif (sectionTitle) {\n\t\treturn `Section ${sectionTitle}`;\n\t}\n\n\treturn undefined;\n};\n\nconst buildLocatorLabel = (\n\tmetadata?: Record<string, unknown>,\n\tsource?: string,\n\ttitle?: string\n) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst pdfTextKind = getContextString(metadata.pdfTextKind);\n\tconst officeBlockKind = getContextString(metadata.officeBlockKind);\n\tconst pdfBlockNumber = getContextNumber(metadata.pdfBlockNumber);\n\tconst officeBlockNumber = getContextNumber(metadata.officeBlockNumber);\n\tconst spreadsheetRowStart = getContextNumber(metadata.spreadsheetRowStart);\n\tconst spreadsheetRowEnd = getContextNumber(metadata.spreadsheetRowEnd);\n\tconst slideTitle = getContextString(metadata.slideTitle);\n\n\tconst page =\n\t\tgetContextNumber(metadata.page) ??\n\t\tgetContextNumber(metadata.pageNumber) ??\n\t\t(typeof metadata.pageIndex === 'number'\n\t\t\t? metadata.pageIndex + 1\n\t\t\t: undefined);\n\tconst region =\n\t\tgetContextNumber(metadata.regionNumber) ??\n\t\t(typeof metadata.regionIndex === 'number'\n\t\t\t? metadata.regionIndex + 1\n\t\t\t: undefined);\n\tconst ocrPageStart = getContextNumber(metadata.ocrPageStart);\n\tconst ocrPageEnd = getContextNumber(metadata.ocrPageEnd);\n\tif (page && region) {\n\t\treturn `Page ${page} · Region ${region}`;\n\t}\n\tif (page && pdfBlockNumber && pdfTextKind === 'table_like') {\n\t\treturn `Page ${page} · Table Block ${pdfBlockNumber}`;\n\t}\n\tif (page && pdfBlockNumber) {\n\t\treturn `Page ${page} · Text Block ${pdfBlockNumber}`;\n\t}\n\tif (page) {\n\t\treturn `Page ${page}`;\n\t}\n\tif (typeof ocrPageStart === 'number' && typeof ocrPageEnd === 'number') {\n\t\treturn ocrPageStart === ocrPageEnd\n\t\t\t? `Page ${ocrPageStart}`\n\t\t\t: `Pages ${ocrPageStart}-${ocrPageEnd}`;\n\t}\n\n\tconst sheet =\n\t\tgetContextString(metadata.sheetName) ??\n\t\t(Array.isArray(metadata.sheetNames)\n\t\t\t? getContextString(metadata.sheetNames[0])\n\t\t\t: undefined);\n\tif (sheet) {\n\t\tconst tableLabel = formatSpreadsheetTableLabel(\n\t\t\tgetContextNumber(metadata.spreadsheetTableIndex),\n\t\t\tgetContextNumber(metadata.spreadsheetTableCount)\n\t\t);\n\t\tconst columnRange = formatSpreadsheetColumnRange(\n\t\t\tgetContextString(metadata.spreadsheetColumnStart),\n\t\t\tgetContextString(metadata.spreadsheetColumnEnd)\n\t\t);\n\t\tconst rowRange = formatSpreadsheetRowRange(\n\t\t\tspreadsheetRowStart,\n\t\t\tspreadsheetRowEnd\n\t\t);\n\t\tif (tableLabel && rowRange && columnRange) {\n\t\t\treturn `Sheet ${sheet} · ${tableLabel} · ${rowRange} · ${columnRange}`;\n\t\t}\n\t\tif (tableLabel && rowRange) {\n\t\t\treturn `Sheet ${sheet} · ${tableLabel} · ${rowRange}`;\n\t\t}\n\t\tif (tableLabel && columnRange) {\n\t\t\treturn `Sheet ${sheet} · ${tableLabel} · ${columnRange}`;\n\t\t}\n\t\tif (tableLabel) {\n\t\t\treturn `Sheet ${sheet} · ${tableLabel}`;\n\t\t}\n\t\tif (rowRange && columnRange) {\n\t\t\treturn `Sheet ${sheet} · ${rowRange} · ${columnRange}`;\n\t\t}\n\t\tif (rowRange) {\n\t\t\treturn `Sheet ${sheet} · ${rowRange}`;\n\t\t}\n\t\treturn columnRange\n\t\t\t? `Sheet ${sheet} · ${columnRange}`\n\t\t\t: `Sheet ${sheet}`;\n\t}\n\n\tconst slide =\n\t\tgetContextNumber(metadata.slide) ??\n\t\tgetContextNumber(metadata.slideNumber) ??\n\t\t(typeof metadata.slideIndex === 'number'\n\t\t\t? metadata.slideIndex + 1\n\t\t\t: undefined);\n\tif (slide) {\n\t\treturn slideTitle ? `Slide ${slide} · ${slideTitle}` : `Slide ${slide}`;\n\t}\n\n\tconst archiveEntry =\n\t\tgetContextString(metadata.archiveFullPath) ??\n\t\tgetContextString(metadata.archivePath) ??\n\t\tgetContextString(metadata.archiveEntryPath) ??\n\t\tgetContextString(metadata.entryPath);\n\tif (archiveEntry) {\n\t\treturn `Archive entry ${archiveEntry}`;\n\t}\n\n\tconst emailKind = getContextString(metadata.emailKind);\n\tif (emailKind === 'attachment') {\n\t\tconst attachmentName =\n\t\t\tgetContextString(metadata.attachmentName) ??\n\t\t\tgetAttachmentName(source, title);\n\t\tconst replyDepth = getContextNumber(metadata.replyDepth);\n\t\tif (attachmentName && replyDepth && replyDepth > 0) {\n\t\t\treturn `Attachment ${attachmentName} · Reply depth ${replyDepth}`;\n\t\t}\n\t\treturn attachmentName ? `Attachment ${attachmentName}` : 'Attachment';\n\t}\n\n\tconst mediaStart = formatMediaTimestamp(metadata.startMs);\n\tconst mediaEnd = formatMediaTimestamp(metadata.endMs);\n\tif (mediaStart && mediaEnd) {\n\t\treturn `Timestamp ${mediaStart} - ${mediaEnd}`;\n\t}\n\n\tif (mediaStart) {\n\t\treturn `Timestamp ${mediaStart}`;\n\t}\n\n\tif (officeBlockNumber && officeBlockKind === 'table') {\n\t\treturn `Office table block ${officeBlockNumber}`;\n\t}\n\tif (officeBlockNumber && officeBlockKind === 'list') {\n\t\treturn `Office list block ${officeBlockNumber}`;\n\t}\n\tif (officeBlockNumber && officeBlockKind === 'paragraph') {\n\t\treturn `Office paragraph block ${officeBlockNumber}`;\n\t}\n\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath\n\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t: [];\n\tif (sectionPath.length > 0) {\n\t\treturn `Section ${sectionPath.join(' > ')}`;\n\t}\n\n\treturn undefined;\n};\n\nconst buildProvenanceLabel = (metadata?: Record<string, unknown>) => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst threadTopic = getContextString(metadata.threadTopic);\n\tconst replyDepth = getContextNumber(metadata.replyDepth);\n\tconst threadMessageCount = getContextNumber(metadata.threadMessageCount);\n\tconst threadRootMessageId = getContextString(metadata.threadRootMessageId);\n\tconst from = getContextString(metadata.from);\n\tconst sentAt =\n\t\tformatTimestampLabel(metadata.sentAt) ??\n\t\tformatTimestampLabel(metadata.receivedAt);\n\tconst speaker = getContextString(metadata.speaker);\n\tconst mediaKind = getContextString(metadata.mediaKind);\n\tconst transcriptSource = getContextString(metadata.transcriptSource);\n\tconst mediaSpeakerCount = getContextNumber(metadata.mediaSpeakerCount);\n\tconst mediaSegmentCount = getContextNumber(metadata.mediaSegmentCount);\n\tconst mediaSegmentGroupSize = getContextNumber(\n\t\tmetadata.mediaSegmentGroupSize\n\t);\n\tconst mediaSegmentGroupIndex = getContextNumber(\n\t\tmetadata.mediaSegmentGroupIndex\n\t);\n\tconst mediaChannel = getContextString(metadata.mediaChannel);\n\tconst mediaDurationLabel = formatMediaDurationLabel(\n\t\tmetadata.mediaDurationMs\n\t);\n\tconst mediaSegmentWindowDurationLabel = formatMediaDurationLabel(\n\t\tmetadata.mediaSegmentGroupDurationMs\n\t);\n\tconst mediaSegmentGapLabel = formatMediaDurationLabel(\n\t\tmetadata.mediaSegmentGapFromPreviousMs\n\t);\n\tconst spreadsheetHeaders = getSpreadsheetHeaders(metadata);\n\tconst spreadsheetColumnRange = formatSpreadsheetColumnRange(\n\t\tgetContextString(metadata.spreadsheetColumnStart),\n\t\tgetContextString(metadata.spreadsheetColumnEnd)\n\t);\n\tconst slideNotesText = getContextString(metadata.slideNotesText);\n\tconst pdfTextMode = getContextString(metadata.pdfTextMode);\n\tconst pdfTextKind = getContextString(metadata.pdfTextKind);\n\tconst officeBlockKind = getContextString(metadata.officeBlockKind);\n\tconst ocrEngine = getContextString(metadata.ocrEngine);\n\tconst extractorRegistryMatch = getContextString(\n\t\tmetadata.extractorRegistryMatch\n\t);\n\tconst chunkingProfile = getContextString(metadata.chunkingProfile);\n\tconst archiveDepth = getContextNumber(metadata.archiveDepth);\n\tconst archiveNestedDepth = getContextNumber(metadata.archiveNestedDepth);\n\tconst archiveContainerPath = getContextString(\n\t\tmetadata.archiveContainerPath\n\t);\n\tconst archiveRootName = getContextString(metadata.archiveRootName);\n\tconst sourceAwareChunkReason = formatSourceAwareChunkReason(\n\t\tmetadata.sourceAwareChunkReason\n\t);\n\tconst sourceAwareUnitScope = buildSourceAwareUnitScopeLabel(metadata);\n\tconst spreadsheetTableLabel = formatSpreadsheetTableLabel(\n\t\tgetContextNumber(metadata.spreadsheetTableIndex),\n\t\tgetContextNumber(metadata.spreadsheetTableCount)\n\t);\n\tconst ocrConfidence =\n\t\tgetContextNumber(metadata.ocrRegionConfidence) ??\n\t\tgetContextNumber(metadata.ocrConfidence);\n\tconst ocrAverageConfidence =\n\t\tgetContextNumber(metadata.ocrPageAverageConfidence) ??\n\t\tgetContextNumber(metadata.ocrAverageConfidence);\n\tconst ocrMinConfidence =\n\t\tgetContextNumber(metadata.ocrPageMinConfidence) ??\n\t\tgetContextNumber(metadata.ocrMinConfidence);\n\tconst ocrMaxConfidence =\n\t\tgetContextNumber(metadata.ocrPageMaxConfidence) ??\n\t\tgetContextNumber(metadata.ocrMaxConfidence);\n\tconst ocrRegionCount = getContextNumber(metadata.ocrRegionCount);\n\n\tconst labels = [\n\t\tpdfTextMode ? `PDF ${pdfTextMode}` : '',\n\t\tpdfTextKind === 'table_like'\n\t\t\t? 'PDF table block'\n\t\t\t: pdfTextKind === 'paragraph'\n\t\t\t\t? 'PDF text block'\n\t\t\t\t: '',\n\t\tofficeBlockKind ? `Office ${officeBlockKind}` : '',\n\t\tocrEngine ? `OCR ${ocrEngine}` : '',\n\t\textractorRegistryMatch ? `Extractor ${extractorRegistryMatch}` : '',\n\t\tchunkingProfile ? `Chunking ${chunkingProfile}` : '',\n\t\tsourceAwareChunkReason ?? '',\n\t\tsourceAwareUnitScope ?? '',\n\t\ttypeof ocrConfidence === 'number'\n\t\t\t? `Confidence ${ocrConfidence.toFixed(2)}`\n\t\t\t: '',\n\t\ttypeof ocrAverageConfidence === 'number' &&\n\t\tocrAverageConfidence !== ocrConfidence\n\t\t\t? `Average ${ocrAverageConfidence.toFixed(2)}`\n\t\t\t: '',\n\t\ttypeof ocrMinConfidence === 'number' &&\n\t\ttypeof ocrMaxConfidence === 'number' &&\n\t\tocrMinConfidence !== ocrMaxConfidence\n\t\t\t? `Range ${ocrMinConfidence.toFixed(2)}-${ocrMaxConfidence.toFixed(\n\t\t\t\t\t2\n\t\t\t\t)}`\n\t\t\t: '',\n\t\ttypeof ocrRegionCount === 'number' ? `${ocrRegionCount} regions` : '',\n\t\tspreadsheetHeaders.length > 0\n\t\t\t? `Spreadsheet ${spreadsheetHeaders.join(', ')}`\n\t\t\t: '',\n\t\tspreadsheetColumnRange ? `Spreadsheet ${spreadsheetColumnRange}` : '',\n\t\tspreadsheetTableLabel ? `Spreadsheet ${spreadsheetTableLabel}` : '',\n\t\tmediaKind ? `Media ${mediaKind}` : '',\n\t\tmediaSegmentCount ? `${mediaSegmentCount} segments` : '',\n\t\tmediaSegmentGroupSize\n\t\t\t? `${mediaSegmentGroupSize} grouped segments`\n\t\t\t: '',\n\t\tmediaSegmentGroupIndex !== undefined\n\t\t\t? `Segment group ${mediaSegmentGroupIndex + 1}`\n\t\t\t: '',\n\t\tmediaChannel ? `Channel ${mediaChannel}` : '',\n\t\tmediaSpeakerCount ? `${mediaSpeakerCount} speakers` : '',\n\t\tmediaDurationLabel ? `Duration ${mediaDurationLabel}` : '',\n\t\tmediaSegmentWindowDurationLabel\n\t\t\t? `Segment window ${mediaSegmentWindowDurationLabel}`\n\t\t\t: '',\n\t\tmediaSegmentGapLabel\n\t\t\t? `Gap ${mediaSegmentGapLabel} from previous window`\n\t\t\t: '',\n\t\ttranscriptSource ? `Transcript ${transcriptSource}` : '',\n\t\tthreadTopic ? `Thread ${threadTopic}` : '',\n\t\tthreadRootMessageId ? `Thread root ${threadRootMessageId}` : '',\n\t\tthreadMessageCount ? `${threadMessageCount} thread messages` : '',\n\t\treplyDepth ? `Reply depth ${replyDepth}` : '',\n\t\tslideNotesText ? 'Speaker notes' : '',\n\t\tarchiveDepth ? `Archive depth ${archiveDepth}` : '',\n\t\tarchiveNestedDepth ? `Archive nested depth ${archiveNestedDepth}` : '',\n\t\tarchiveContainerPath ? `Archive container ${archiveContainerPath}` : '',\n\t\tarchiveRootName ? `Archive root ${archiveRootName}` : '',\n\t\tspeaker ? `Speaker ${speaker}` : '',\n\t\tfrom ? `Sender ${from}` : '',\n\t\tsentAt ? `Sent ${sentAt}` : ''\n\t].filter((value) => value.length > 0);\n\n\treturn labels.length > 0 ? labels.join(' · ') : undefined;\n};\n\nexport const buildRAGSourceLabels = ({\n\tmetadata,\n\tsource,\n\ttitle\n}: {\n\tmetadata?: Record<string, unknown>;\n\tsource?: string;\n\ttitle?: string;\n}): RAGSourceLabels | undefined => {\n\tconst contextLabel = buildContextLabel(metadata);\n\tconst locatorLabel = buildLocatorLabel(metadata, source, title);\n\tconst provenanceLabel = buildProvenanceLabel(metadata);\n\n\tif (!contextLabel && !locatorLabel && !provenanceLabel) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tcontextLabel,\n\t\tlocatorLabel,\n\t\tprovenanceLabel\n\t};\n};\n\nexport const buildRAGChunkStructure = (\n\tmetadata?: Record<string, unknown>\n): RAGChunkStructure | undefined => {\n\tif (!metadata) {\n\t\treturn undefined;\n\t}\n\n\tconst sectionPath = Array.isArray(metadata.sectionPath)\n\t\t? metadata.sectionPath.filter(\n\t\t\t\t(value): value is string =>\n\t\t\t\t\ttypeof value === 'string' && value.trim().length > 0\n\t\t\t)\n\t\t: undefined;\n\tconst sectionKind =\n\t\tmetadata.sectionKind === 'markdown_heading' ||\n\t\tmetadata.sectionKind === 'html_heading' ||\n\t\tmetadata.sectionKind === 'office_heading' ||\n\t\tmetadata.sectionKind === 'office_block' ||\n\t\tmetadata.sectionKind === 'pdf_block' ||\n\t\tmetadata.sectionKind === 'spreadsheet_rows' ||\n\t\tmetadata.sectionKind === 'presentation_slide'\n\t\t\t? metadata.sectionKind\n\t\t\t: undefined;\n\tconst section: NonNullable<RAGChunkStructure['section']> = {\n\t\tdepth: getContextNumber(metadata.sectionDepth),\n\t\tkind: sectionKind,\n\t\tpath: sectionPath && sectionPath.length > 0 ? sectionPath : undefined,\n\t\ttitle: getContextString(metadata.sectionTitle)\n\t};\n\tconst sequence: NonNullable<RAGChunkStructure['sequence']> = {\n\t\tnextChunkId: getContextString(metadata.nextChunkId),\n\t\tpreviousChunkId: getContextString(metadata.previousChunkId),\n\t\tsectionChunkCount: getContextNumber(metadata.sectionChunkCount),\n\t\tsectionChunkId: getContextString(metadata.sectionChunkId),\n\t\tsectionChunkIndex: getContextNumber(metadata.sectionChunkIndex)\n\t};\n\n\tif (\n\t\t!section.title &&\n\t\t(!section.path || section.path.length === 0) &&\n\t\ttypeof section.depth !== 'number' &&\n\t\t!section.kind &&\n\t\t!sequence.nextChunkId &&\n\t\t!sequence.previousChunkId &&\n\t\ttypeof sequence.sectionChunkCount !== 'number' &&\n\t\t!sequence.sectionChunkId &&\n\t\ttypeof sequence.sectionChunkIndex !== 'number'\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tsection:\n\t\t\tsection.title ||\n\t\t\t(section.path && section.path.length > 0) ||\n\t\t\ttypeof section.depth === 'number' ||\n\t\t\tsection.kind\n\t\t\t\t? section\n\t\t\t\t: undefined,\n\t\tsequence:\n\t\t\tsequence.nextChunkId ||\n\t\t\tsequence.previousChunkId ||\n\t\t\ttypeof sequence.sectionChunkCount === 'number' ||\n\t\t\tsequence.sectionChunkId ||\n\t\t\ttypeof sequence.sectionChunkIndex === 'number'\n\t\t\t\t? sequence\n\t\t\t\t: undefined\n\t};\n};\n\nconst buildExcerpt = (text: string, maxLength = 160) => {\n\tconst normalized = text.replaceAll(/\\s+/g, ' ').trim();\n\tif (normalized.length <= maxLength) {\n\t\treturn normalized;\n\t}\n\n\treturn `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;\n};\n\ntype ExcerptChunkInput = Pick<\n\tRAGSource,\n\t'chunkId' | 'metadata' | 'structure' | 'text'\n>;\n\nexport const buildRAGChunkExcerpts = (\n\tchunks: ExcerptChunkInput[],\n\tactiveChunkId?: string\n): RAGChunkExcerpts | undefined => {\n\tif (chunks.length === 0) {\n\t\treturn undefined;\n\t}\n\n\tconst graph = buildRAGChunkGraph(\n\t\tchunks.map((chunk) => ({\n\t\t\tchunkId: chunk.chunkId,\n\t\t\tmetadata: chunk.metadata,\n\t\t\tstructure: chunk.structure\n\t\t}))\n\t);\n\tconst navigation = buildRAGChunkGraphNavigation(graph, activeChunkId);\n\tconst activeChunk =\n\t\tchunks.find((chunk) => chunk.chunkId === navigation.activeChunkId) ??\n\t\tchunks[0];\n\tif (!activeChunk) {\n\t\treturn undefined;\n\t}\n\n\tconst chunkMap = new Map(chunks.map((chunk) => [chunk.chunkId, chunk]));\n\tconst orderedSectionIds =\n\t\tnavigation.sectionNodes.length > 0\n\t\t\t? navigation.sectionNodes.map((node) => node.chunkId)\n\t\t\t: [activeChunk.chunkId];\n\tconst orderedWindowIds =\n\t\tnavigation.sectionNodes.length > 0\n\t\t\t? (() => {\n\t\t\t\t\tconst activeIndex = navigation.sectionNodes.findIndex(\n\t\t\t\t\t\t(node) => node.chunkId === activeChunk.chunkId\n\t\t\t\t\t);\n\t\t\t\t\tconst startIndex = Math.max(0, activeIndex - 2);\n\t\t\t\t\tconst endIndex = Math.min(\n\t\t\t\t\t\tnavigation.sectionNodes.length,\n\t\t\t\t\t\tactiveIndex + 3\n\t\t\t\t\t);\n\t\t\t\t\treturn navigation.sectionNodes\n\t\t\t\t\t\t.slice(startIndex, endIndex)\n\t\t\t\t\t\t.map((node) => node.chunkId);\n\t\t\t\t})()\n\t\t\t: [\n\t\t\t\t\tnavigation.previousNode?.chunkId,\n\t\t\t\t\tactiveChunk.chunkId,\n\t\t\t\t\tnavigation.nextNode?.chunkId\n\t\t\t\t].filter(\n\t\t\t\t\t(chunkId, index, ids): chunkId is string =>\n\t\t\t\t\t\tBoolean(chunkId) && ids.indexOf(chunkId) === index\n\t\t\t\t);\n\n\tconst collectText = (chunkIds: string[]) =>\n\t\tchunkIds\n\t\t\t.map((chunkId) => chunkMap.get(chunkId)?.text)\n\t\t\t.filter((text): text is string => typeof text === 'string')\n\t\t\t.join('\\n\\n');\n\n\treturn {\n\t\tchunkExcerpt: buildExcerpt(activeChunk.text, 160),\n\t\tsectionExcerpt: buildExcerpt(collectText(orderedSectionIds), 320),\n\t\twindowExcerpt: buildExcerpt(collectText(orderedWindowIds), 240)\n\t};\n};\n\nexport const buildRAGPreferredExcerpt = (\n\texcerpts?: RAGChunkExcerpts,\n\tstructure?: RAGChunkStructure\n) => {\n\tconst selection = buildRAGExcerptSelection(excerpts, structure);\n\treturn selection.excerpt;\n};\n\nexport const buildRAGExcerptSelection = (\n\texcerpts?: RAGChunkExcerpts,\n\tstructure?: RAGChunkStructure\n): RAGExcerptSelection & { excerpt: string } => {\n\tif (!excerpts) {\n\t\treturn {\n\t\t\texcerpt: '',\n\t\t\tmode: 'chunk',\n\t\t\treason: 'single_chunk'\n\t\t};\n\t}\n\n\tconst chunkLength = excerpts.chunkExcerpt.trim().length;\n\tconst sectionChunkCount = structure?.sequence?.sectionChunkCount ?? 1;\n\tif (sectionChunkCount > 1 && chunkLength > 0 && chunkLength < 72) {\n\t\tif (\n\t\t\tsectionChunkCount <= 3 &&\n\t\t\texcerpts.sectionExcerpt.trim().length > 0\n\t\t) {\n\t\t\treturn {\n\t\t\t\texcerpt: excerpts.sectionExcerpt,\n\t\t\t\tmode: 'section',\n\t\t\t\treason: 'section_small_enough'\n\t\t\t};\n\t\t}\n\t\tif (excerpts.windowExcerpt.trim().length > 0) {\n\t\t\treturn {\n\t\t\t\texcerpt: excerpts.windowExcerpt,\n\t\t\t\tmode: 'window',\n\t\t\t\treason: 'section_too_large_use_window'\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\texcerpt: excerpts.chunkExcerpt,\n\t\t\tmode: 'chunk',\n\t\t\treason: 'chunk_too_narrow'\n\t\t};\n\t}\n\n\treturn {\n\t\texcerpt: excerpts.chunkExcerpt,\n\t\tmode: 'chunk',\n\t\treason: sectionChunkCount > 1 ? 'chunk_too_narrow' : 'single_chunk'\n\t};\n};\n\nexport const buildRAGExcerptModeCounts = (\n\tselections: Array<RAGExcerptSelection | undefined>\n): RAGExcerptModeCounts =>\n\tselections.reduce<RAGExcerptModeCounts>(\n\t\t(counts, selection) => {\n\t\t\tif (selection) {\n\t\t\t\tcounts[selection.mode] += 1;\n\t\t\t}\n\t\t\treturn counts;\n\t\t},\n\t\t{ chunk: 0, section: 0, window: 0 }\n\t);\n\ntype GraphChunkInput = Pick<\n\tRAGSource,\n\t'chunkId' | 'metadata' | 'source' | 'title' | 'labels' | 'structure'\n> &\n\tPartial<Pick<RAGSource, 'score'>>;\n\nexport const buildRAGChunkGraph = (\n\tchunks: GraphChunkInput[]\n): RAGChunkGraph => {\n\tconst nodes: RAGChunkGraphNode[] = [];\n\tconst edges: RAGChunkGraphEdge[] = [];\n\tconst edgeKeys = new Set<string>();\n\tconst sections = new Map<string, RAGChunkGraphSectionGroup>();\n\n\tfor (const chunk of chunks) {\n\t\tconst labels =\n\t\t\tchunk.labels ??\n\t\t\tbuildRAGSourceLabels({\n\t\t\t\tmetadata: chunk.metadata,\n\t\t\t\tsource: chunk.source,\n\t\t\t\ttitle: chunk.title\n\t\t\t});\n\t\tconst structure =\n\t\t\tchunk.structure ?? buildRAGChunkStructure(chunk.metadata);\n\n\t\tnodes.push({\n\t\t\tchunkId: chunk.chunkId,\n\t\t\tcontextLabel: labels?.contextLabel,\n\t\t\tlabel: chunk.source ?? chunk.title ?? chunk.chunkId,\n\t\t\tlocatorLabel: labels?.locatorLabel,\n\t\t\tprovenanceLabel: labels?.provenanceLabel,\n\t\t\tscore: chunk.score,\n\t\t\tsource: chunk.source,\n\t\t\tstructure,\n\t\t\ttitle: chunk.title\n\t\t});\n\n\t\tconst previousChunkId = structure?.sequence?.previousChunkId;\n\t\tif (previousChunkId) {\n\t\t\tconst key = `previous:${previousChunkId}:${chunk.chunkId}`;\n\t\t\tif (!edgeKeys.has(key)) {\n\t\t\t\tedgeKeys.add(key);\n\t\t\t\tedges.push({\n\t\t\t\t\tfromChunkId: previousChunkId,\n\t\t\t\t\trelation: 'previous',\n\t\t\t\t\ttoChunkId: chunk.chunkId\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst nextChunkId = structure?.sequence?.nextChunkId;\n\t\tif (nextChunkId) {\n\t\t\tconst key = `next:${chunk.chunkId}:${nextChunkId}`;\n\t\t\tif (!edgeKeys.has(key)) {\n\t\t\t\tedgeKeys.add(key);\n\t\t\t\tedges.push({\n\t\t\t\t\tfromChunkId: chunk.chunkId,\n\t\t\t\t\trelation: 'next',\n\t\t\t\t\ttoChunkId: nextChunkId\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst sectionId = structure?.sequence?.sectionChunkId;\n\t\tif (sectionId) {\n\t\t\tconst existing = sections.get(sectionId);\n\t\t\tif (!existing) {\n\t\t\t\tsections.set(sectionId, {\n\t\t\t\t\tchildSectionIds: [],\n\t\t\t\t\tchunkCount: structure.sequence?.sectionChunkCount ?? 1,\n\t\t\t\t\tchunkIds: [chunk.chunkId],\n\t\t\t\t\tdepth: structure.section?.depth,\n\t\t\t\t\tid: sectionId,\n\t\t\t\t\tkind: structure.section?.kind,\n\t\t\t\t\tleadChunkId: chunk.chunkId,\n\t\t\t\t\tpath: structure.section?.path,\n\t\t\t\t\ttitle: structure.section?.title\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!existing.chunkIds.includes(chunk.chunkId)) {\n\t\t\t\texisting.chunkIds.push(chunk.chunkId);\n\t\t\t}\n\t\t\texisting.chunkCount = Math.max(\n\t\t\t\texisting.chunkCount,\n\t\t\t\tstructure.sequence?.sectionChunkCount ?? existing.chunkCount\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const section of sections.values()) {\n\t\tsection.chunkIds.sort((left, right) => {\n\t\t\tconst leftNode = nodes.find((node) => node.chunkId === left);\n\t\t\tconst rightNode = nodes.find((node) => node.chunkId === right);\n\t\t\tconst leftIndex =\n\t\t\t\tleftNode?.structure?.sequence?.sectionChunkIndex ??\n\t\t\t\tNumber.MAX_SAFE_INTEGER;\n\t\t\tconst rightIndex =\n\t\t\t\trightNode?.structure?.sequence?.sectionChunkIndex ??\n\t\t\t\tNumber.MAX_SAFE_INTEGER;\n\t\t\tif (leftIndex !== rightIndex) {\n\t\t\t\treturn leftIndex - rightIndex;\n\t\t\t}\n\n\t\t\treturn left.localeCompare(right);\n\t\t});\n\t\tsection.leadChunkId = section.chunkIds[0];\n\t}\n\n\tconst sectionPathIndex = new Map<string, RAGChunkGraphSectionGroup>();\n\tfor (const section of sections.values()) {\n\t\tconst path =\n\t\t\tsection.path && section.path.length > 0\n\t\t\t\t? section.path\n\t\t\t\t: section.title\n\t\t\t\t\t? [section.title]\n\t\t\t\t\t: undefined;\n\t\tif (path && path.length > 0) {\n\t\t\tsectionPathIndex.set(path.join('\\u0000'), section);\n\t\t}\n\t}\n\n\tfor (const section of sections.values()) {\n\t\tconst path =\n\t\t\tsection.path && section.path.length > 0\n\t\t\t\t? section.path\n\t\t\t\t: section.title\n\t\t\t\t\t? [section.title]\n\t\t\t\t\t: undefined;\n\t\tif (!path || path.length < 2) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst parent = sectionPathIndex.get(path.slice(0, -1).join('\\u0000'));\n\t\tif (!parent || parent.id === section.id) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tsection.parentSectionId = parent.id;\n\t\tif (!parent.childSectionIds.includes(section.id)) {\n\t\t\tparent.childSectionIds.push(section.id);\n\t\t}\n\n\t\tif (parent.leadChunkId && section.leadChunkId) {\n\t\t\tconst parentKey = `section_parent:${section.leadChunkId}:${parent.leadChunkId}`;\n\t\t\tif (!edgeKeys.has(parentKey)) {\n\t\t\t\tedgeKeys.add(parentKey);\n\t\t\t\tedges.push({\n\t\t\t\t\tfromChunkId: section.leadChunkId,\n\t\t\t\t\trelation: 'section_parent',\n\t\t\t\t\ttoChunkId: parent.leadChunkId\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst childKey = `section_child:${parent.leadChunkId}:${section.leadChunkId}`;\n\t\t\tif (!edgeKeys.has(childKey)) {\n\t\t\t\tedgeKeys.add(childKey);\n\t\t\t\tedges.push({\n\t\t\t\t\tfromChunkId: parent.leadChunkId,\n\t\t\t\t\trelation: 'section_child',\n\t\t\t\t\ttoChunkId: section.leadChunkId\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tnodes.sort((left, right) => {\n\t\tconst leftSection =\n\t\t\tleft.structure?.sequence?.sectionChunkIndex ??\n\t\t\tNumber.MAX_SAFE_INTEGER;\n\t\tconst rightSection =\n\t\t\tright.structure?.sequence?.sectionChunkIndex ??\n\t\t\tNumber.MAX_SAFE_INTEGER;\n\t\tif (leftSection !== rightSection) {\n\t\t\treturn leftSection - rightSection;\n\t\t}\n\n\t\tconst leftScore = left.score ?? Number.NEGATIVE_INFINITY;\n\t\tconst rightScore = right.score ?? Number.NEGATIVE_INFINITY;\n\t\tif (leftScore !== rightScore) {\n\t\t\treturn rightScore - leftScore;\n\t\t}\n\n\t\treturn left.label.localeCompare(right.label);\n\t});\n\n\treturn {\n\t\tedges,\n\t\tnodes,\n\t\tsections: [...sections.values()].sort((left, right) =>\n\t\t\t(left.title ?? left.id).localeCompare(right.title ?? right.id)\n\t\t)\n\t};\n};\n\nexport const buildRAGChunkPreviewGraph = (\n\tpreview: Pick<RAGDocumentChunkPreview, 'chunks' | 'document'>\n): RAGChunkGraph =>\n\tbuildRAGChunkGraph(\n\t\tpreview.chunks.map((chunk) => ({\n\t\t\tchunkId: chunk.chunkId,\n\t\t\tlabels: chunk.labels,\n\t\t\tmetadata: chunk.metadata,\n\t\t\tsource: chunk.source ?? preview.document.source,\n\t\t\tstructure: chunk.structure,\n\t\t\ttitle: chunk.title ?? preview.document.title\n\t\t}))\n\t);\n\nexport const buildRAGChunkPreviewNavigation = (\n\tpreview: Pick<RAGDocumentChunkPreview, 'chunks' | 'document'>,\n\tactiveChunkId?: string\n): RAGChunkGraphNavigation =>\n\tbuildRAGChunkGraphNavigation(\n\t\tbuildRAGChunkPreviewGraph(preview),\n\t\tactiveChunkId\n\t);\n\nexport const buildRAGChunkGraphNavigation = (\n\tgraph: RAGChunkGraph,\n\tactiveChunkId?: string\n): RAGChunkGraphNavigation => {\n\tif (graph.nodes.length === 0) {\n\t\treturn {\n\t\t\tactiveChunkId,\n\t\t\tchildSections: [],\n\t\t\tsiblingSections: [],\n\t\t\tsectionNodes: []\n\t\t};\n\t}\n\n\tconst activeNode =\n\t\t(activeChunkId\n\t\t\t? graph.nodes.find((node) => node.chunkId === activeChunkId)\n\t\t\t: undefined) ?? graph.nodes[0];\n\tconst resolvedActiveChunkId = activeNode?.chunkId;\n\tconst previousNode = activeNode?.structure?.sequence?.previousChunkId\n\t\t? graph.nodes.find(\n\t\t\t\t(node) =>\n\t\t\t\t\tnode.chunkId ===\n\t\t\t\t\tactiveNode.structure?.sequence?.previousChunkId\n\t\t\t)\n\t\t: undefined;\n\tconst nextNode = activeNode?.structure?.sequence?.nextChunkId\n\t\t? graph.nodes.find(\n\t\t\t\t(node) =>\n\t\t\t\t\tnode.chunkId === activeNode.structure?.sequence?.nextChunkId\n\t\t\t)\n\t\t: undefined;\n\tconst section = activeNode?.structure?.sequence?.sectionChunkId\n\t\t? graph.sections.find(\n\t\t\t\t(entry) =>\n\t\t\t\t\tentry.id === activeNode.structure?.sequence?.sectionChunkId\n\t\t\t)\n\t\t: undefined;\n\tconst parentSection = section?.parentSectionId\n\t\t? graph.sections.find((entry) => entry.id === section.parentSectionId)\n\t\t: undefined;\n\tconst childSections = section\n\t\t? section.childSectionIds\n\t\t\t\t.map((sectionId) =>\n\t\t\t\t\tgraph.sections.find((entry) => entry.id === sectionId)\n\t\t\t\t)\n\t\t\t\t.filter((entry): entry is RAGChunkGraphSectionGroup =>\n\t\t\t\t\tBoolean(entry)\n\t\t\t\t)\n\t\t: [];\n\tconst siblingSections = section?.parentSectionId\n\t\t? graph.sections.filter(\n\t\t\t\t(entry) =>\n\t\t\t\t\tentry.parentSectionId === section.parentSectionId &&\n\t\t\t\t\tentry.id !== section.id\n\t\t\t)\n\t\t: [];\n\tconst sectionNodes = section\n\t\t? section.chunkIds\n\t\t\t\t.map((chunkId) =>\n\t\t\t\t\tgraph.nodes.find((node) => node.chunkId === chunkId)\n\t\t\t\t)\n\t\t\t\t.filter((node): node is RAGChunkGraphNode => Boolean(node))\n\t\t: activeNode\n\t\t\t? [activeNode]\n\t\t\t: [];\n\n\treturn {\n\t\tactiveChunkId: resolvedActiveChunkId,\n\t\tactiveNode,\n\t\tchildSections,\n\t\tnextNode,\n\t\tparentSection,\n\t\tpreviousNode,\n\t\tsection,\n\t\tsiblingSections,\n\t\tsectionNodes\n\t};\n};\nexport const buildRAGRetrievedState = (messages: AIMessage[]) => {\n\tconst message = getLatestRetrievedMessage(messages);\n\n\tif (!message) {\n\t\treturn null;\n\t}\n\n\tconst sources = message.sources ?? [];\n\tconst citations = buildRAGCitations(sources);\n\tconst sectionDiagnostics = buildRAGSectionRetrievalDiagnostics(\n\t\tsources,\n\t\tisRAGRetrievalTrace(message.retrievalTrace)\n\t\t\t? message.retrievalTrace\n\t\t\t: undefined\n\t);\n\tconst sourceSummaries = buildRAGSourceSummaries(sources);\n\tconst groundedAnswer = buildRAGGroundedAnswer(message.content, sources);\n\n\treturn {\n\t\tcitationReferenceMap: buildRAGCitationReferenceMap(citations),\n\t\tcitations,\n\t\tconversationId: message.conversationId,\n\t\texcerptModeCounts: buildRAGExcerptModeCounts([\n\t\t\t...citations.map((citation) => citation.excerptSelection),\n\t\t\t...sourceSummaries.map((summary) => summary.excerptSelection)\n\t\t]),\n\t\tgroundedAnswer,\n\t\tmessageId: message.id,\n\t\tretrievalDurationMs: message.retrievalDurationMs,\n\t\tretrievalStartedAt: message.retrievalStartedAt,\n\t\tretrievedAt: message.retrievedAt,\n\t\ttrace: isRAGRetrievalTrace(message.retrievalTrace)\n\t\t\t? message.retrievalTrace\n\t\t\t: undefined,\n\t\tsectionDiagnostics,\n\t\tsourceGroups: buildRAGSourceGroups(sources),\n\t\tsourceSummaries,\n\t\tsources\n\t};\n};\nexport const buildRAGSourceSummaries = (sources: RAGSource[]) => {\n\tconst sourceGroups = buildRAGSourceGroups(sources);\n\tconst citations = buildRAGCitations(sources);\n\tconst citationReferenceMap = buildRAGCitationReferenceMap(citations);\n\n\treturn sourceGroups.map<RAGSourceSummary>((group) => {\n\t\tconst groupCitations = citations.filter((citation) =>\n\t\t\tgroup.chunks.some((chunk) => chunk.chunkId === citation.chunkId)\n\t\t);\n\t\tconst leadChunk = getPreferredSourceLeadChunk(group.chunks);\n\t\tconst excerpts = leadChunk\n\t\t\t? buildRAGChunkExcerpts(group.chunks, leadChunk.chunkId)\n\t\t\t: undefined;\n\t\tconst structure =\n\t\t\tleadChunk?.structure ?? buildRAGChunkStructure(leadChunk?.metadata);\n\t\tconst excerptSelection = buildRAGExcerptSelection(excerpts, structure);\n\n\t\treturn {\n\t\t\tbestScore: group.bestScore,\n\t\t\tcitationNumbers: groupCitations.map(\n\t\t\t\t(citation) => citationReferenceMap[citation.chunkId] ?? 0\n\t\t\t),\n\t\t\tcitations: groupCitations,\n\t\t\tchunkIds: group.chunks.map((chunk) => chunk.chunkId),\n\t\t\tcontextLabel:\n\t\t\t\tleadChunk?.labels?.contextLabel ??\n\t\t\t\tbuildContextLabel(leadChunk?.metadata),\n\t\t\tcount: group.count,\n\t\t\texcerpt:\n\t\t\t\texcerptSelection.excerpt || buildExcerpt(leadChunk?.text ?? ''),\n\t\t\texcerpts,\n\t\t\texcerptSelection,\n\t\t\tkey: group.key,\n\t\t\tlabel: group.label,\n\t\t\tlocatorLabel:\n\t\t\t\tleadChunk?.labels?.locatorLabel ??\n\t\t\t\tbuildLocatorLabel(\n\t\t\t\t\tleadChunk?.metadata,\n\t\t\t\t\tleadChunk?.source,\n\t\t\t\t\tleadChunk?.title\n\t\t\t\t),\n\t\t\tprovenanceLabel:\n\t\t\t\tleadChunk?.labels?.provenanceLabel ??\n\t\t\t\tbuildProvenanceLabel(leadChunk?.metadata),\n\t\t\tstructure,\n\t\t\tsource: group.source,\n\t\t\ttitle: group.title\n\t\t};\n\t});\n};\n\nconst getSectionPathFromSource = (source: RAGSource) => {\n\tconst path =\n\t\tsource.structure?.section?.path ??\n\t\t(Array.isArray(source.metadata?.sectionPath)\n\t\t\t? source.metadata.sectionPath\n\t\t\t\t\t.map((value) => getContextString(value))\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(value): value is string => typeof value === 'string'\n\t\t\t\t\t)\n\t\t\t: []);\n\n\treturn path.length > 0 ? path : undefined;\n};\n\nconst isBlockAwareContextLabel = (value?: string) =>\n\ttypeof value === 'string' &&\n\t(value.startsWith('PDF ') ||\n\t\tvalue.startsWith('Office ') ||\n\t\tvalue.startsWith('Slide '));\n\nconst getStructuredSectionScoreWeight = (\n\tmetadata?: Record<string, unknown>\n) => {\n\tif (!metadata) {\n\t\treturn 1;\n\t}\n\n\tconst pdfTextKind = getContextString(metadata.pdfTextKind);\n\tconst officeBlockKind = getContextString(metadata.officeBlockKind);\n\tconst sectionKind = getContextString(metadata.sectionKind);\n\tconst slideTitle = getContextString(metadata.slideTitle);\n\tconst slideNotesText = getContextString(metadata.slideNotesText);\n\n\tif (pdfTextKind === 'table_like') {\n\t\treturn 1.28;\n\t}\n\tif (officeBlockKind === 'table' || officeBlockKind === 'list') {\n\t\treturn 1.24;\n\t}\n\tif (\n\t\tsectionKind === 'pdf_block' ||\n\t\tsectionKind === 'office_block' ||\n\t\tofficeBlockKind === 'paragraph' ||\n\t\tpdfTextKind === 'paragraph'\n\t) {\n\t\treturn 1.12;\n\t}\n\tif (sectionKind === 'presentation_slide' && slideNotesText) {\n\t\treturn 1.2;\n\t}\n\tif (sectionKind === 'presentation_slide' && slideTitle) {\n\t\treturn 1.14;\n\t}\n\n\treturn 1;\n};\n\nconst getStructuredSourceLeadScore = (source: RAGSource) =>\n\tsource.score * getStructuredSectionScoreWeight(source.metadata);\n\nconst getPreferredSourceLeadChunk = (chunks: RAGSource[]) =>\n\tchunks.slice().sort((left, right) => {\n\t\tconst leftWeightedScore = getStructuredSourceLeadScore(left);\n\t\tconst rightWeightedScore = getStructuredSourceLeadScore(right);\n\t\tif (rightWeightedScore !== leftWeightedScore) {\n\t\t\treturn rightWeightedScore - leftWeightedScore;\n\t\t}\n\t\tif (right.score !== left.score) {\n\t\t\treturn right.score - left.score;\n\t\t}\n\n\t\treturn left.chunkId.localeCompare(right.chunkId);\n\t})[0];\n\nexport const buildRAGSectionRetrievalDiagnostics = (\n\tsources: RAGSource[],\n\ttrace?: RAGRetrievalTrace\n): RAGSectionRetrievalDiagnostic[] => {\n\tconst totalScore = sources.reduce(\n\t\t(sum, source) =>\n\t\t\tsum +\n\t\t\tsource.score * getStructuredSectionScoreWeight(source.metadata),\n\t\t0\n\t);\n\tif (sources.length === 0 || totalScore <= 0) {\n\t\treturn [];\n\t}\n\n\tconst sections = new Map<\n\t\tstring,\n\t\t{\n\t\t\tkey: string;\n\t\t\tlabel: string;\n\t\t\tpath?: string[];\n\t\t\tparentLabel?: string;\n\t\t\tcount: number;\n\t\t\tbestScore: number;\n\t\t\ttotalScore: number;\n\t\t\ttopChunkId?: string;\n\t\t\ttopSource?: string;\n\t\t\tvectorHits: number;\n\t\t\tlexicalHits: number;\n\t\t\thybridHits: number;\n\t\t\tprimaryHits: number;\n\t\t\ttransformedHits: number;\n\t\t\tvariantHits: number;\n\t\t\tsourceSet: Set<string>;\n\t\t}\n\t>();\n\n\tfor (const source of sources) {\n\t\tconst structuredScore =\n\t\t\tsource.score * getStructuredSectionScoreWeight(source.metadata);\n\t\tconst path = getSectionPathFromSource(source);\n\t\tif (!path) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst key = path.join(' > ');\n\t\tconst label = path.at(-1) ?? key;\n\t\tconst parentLabel =\n\t\t\tpath.length > 1 ? path.slice(0, -1).join(' > ') : undefined;\n\t\tconst existing = sections.get(key);\n\t\tconst channels = Array.isArray(source.metadata?.retrievalChannels)\n\t\t\t? source.metadata.retrievalChannels.filter(\n\t\t\t\t\t(value): value is 'vector' | 'lexical' =>\n\t\t\t\t\t\tvalue === 'vector' || value === 'lexical'\n\t\t\t\t)\n\t\t\t: [];\n\t\tconst isHybrid =\n\t\t\tchannels.includes('vector') && channels.includes('lexical');\n\t\tconst vectorHits = channels.includes('vector') ? 1 : 0;\n\t\tconst lexicalHits = channels.includes('lexical') ? 1 : 0;\n\t\tconst hybridHits = isHybrid ? 1 : 0;\n\t\tconst queryOrigins = Array.isArray(\n\t\t\tsource.metadata?.retrievalQueryOrigins\n\t\t)\n\t\t\t? source.metadata.retrievalQueryOrigins.filter(\n\t\t\t\t\t(value): value is 'primary' | 'transformed' | 'variant' =>\n\t\t\t\t\t\tvalue === 'primary' ||\n\t\t\t\t\t\tvalue === 'transformed' ||\n\t\t\t\t\t\tvalue === 'variant'\n\t\t\t\t)\n\t\t\t: source.metadata?.retrievalQueryOrigin === 'primary' ||\n\t\t\t\t source.metadata?.retrievalQueryOrigin === 'transformed' ||\n\t\t\t\t source.metadata?.retrievalQueryOrigin === 'variant'\n\t\t\t\t? [source.metadata.retrievalQueryOrigin]\n\t\t\t\t: [];\n\t\tconst primaryHits = queryOrigins.includes('primary') ? 1 : 0;\n\t\tconst transformedHits = queryOrigins.includes('transformed') ? 1 : 0;\n\t\tconst variantHits = queryOrigins.includes('variant') ? 1 : 0;\n\t\tif (!existing) {\n\t\t\tsections.set(key, {\n\t\t\t\tbestScore: source.score,\n\t\t\t\tcount: 1,\n\t\t\t\thybridHits,\n\t\t\t\tkey,\n\t\t\t\tlabel,\n\t\t\t\tlexicalHits,\n\t\t\t\tparentLabel,\n\t\t\t\tpath,\n\t\t\t\tprimaryHits,\n\t\t\t\tsourceSet: new Set(source.source ? [source.source] : []),\n\t\t\t\ttopChunkId: source.chunkId,\n\t\t\t\ttopSource: source.source,\n\t\t\t\ttotalScore: structuredScore,\n\t\t\t\ttransformedHits,\n\t\t\t\tvariantHits,\n\t\t\t\tvectorHits\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\texisting.count += 1;\n\t\texisting.totalScore += structuredScore;\n\t\tif (source.source) {\n\t\t\texisting.sourceSet.add(source.source);\n\t\t}\n\t\texisting.vectorHits += vectorHits;\n\t\texisting.lexicalHits += lexicalHits;\n\t\texisting.hybridHits += hybridHits;\n\t\texisting.primaryHits += primaryHits;\n\t\texisting.transformedHits += transformedHits;\n\t\texisting.variantHits += variantHits;\n\t\tif (source.score > existing.bestScore) {\n\t\t\texisting.bestScore = source.score;\n\t\t\texisting.topChunkId = source.chunkId;\n\t\t\texisting.topSource = source.source;\n\t\t}\n\t}\n\n\tconst diagnostics = [...sections.values()];\n\tconst strongestBestHit = diagnostics.reduce(\n\t\t(highest, section) => Math.max(highest, section.bestScore),\n\t\t0\n\t);\n\tconst parentLabelByKey = new Map(\n\t\tdiagnostics.map(\n\t\t\t(section) => [section.key, section.parentLabel] as const\n\t\t)\n\t);\n\tconst stageSectionCounts = new Map(\n\t\t(trace?.steps ?? [])\n\t\t\t.filter(\n\t\t\t\t(step) =>\n\t\t\t\t\tArray.isArray(step.sectionCounts) &&\n\t\t\t\t\tstep.sectionCounts.length > 0\n\t\t\t)\n\t\t\t.map((step) => [step.stage, step.sectionCounts ?? []] as const)\n\t);\n\tconst stageSectionScores = new Map(\n\t\t(trace?.steps ?? [])\n\t\t\t.filter(\n\t\t\t\t(step) =>\n\t\t\t\t\tArray.isArray(step.sectionScores) &&\n\t\t\t\t\tstep.sectionScores.length > 0\n\t\t\t)\n\t\t\t.map((step) => [step.stage, step.sectionScores ?? []] as const)\n\t);\n\n\treturn diagnostics\n\t\t.map<RAGSectionRetrievalDiagnostic>((section) => {\n\t\t\tconst siblingPool = diagnostics.filter(\n\t\t\t\t(entry) => entry.parentLabel === section.parentLabel\n\t\t\t);\n\t\t\tconst siblings = siblingPool.filter(\n\t\t\t\t(entry) => entry.key !== section.key\n\t\t\t);\n\t\t\tconst strongestSibling = siblings\n\t\t\t\t.slice()\n\t\t\t\t.sort((left, right) => right.totalScore - left.totalScore)[0];\n\t\t\tconst parentTotal = siblingPool.reduce(\n\t\t\t\t(sum, entry) => sum + entry.totalScore,\n\t\t\t\t0\n\t\t\t);\n\t\t\tconst scoreShare = section.totalScore / totalScore;\n\t\t\tconst parentShare =\n\t\t\t\tparentTotal > 0 ? section.totalScore / parentTotal : undefined;\n\t\t\tconst topChunk = sources.find(\n\t\t\t\t(source) => source.chunkId === section.topChunkId\n\t\t\t);\n\t\t\tconst topContextLabel =\n\t\t\t\ttopChunk?.labels?.contextLabel ??\n\t\t\t\tbuildContextLabel(topChunk?.metadata);\n\t\t\tconst topLocatorLabel =\n\t\t\t\ttopChunk?.labels?.locatorLabel ??\n\t\t\t\tbuildLocatorLabel(\n\t\t\t\t\ttopChunk?.metadata,\n\t\t\t\t\ttopChunk?.source,\n\t\t\t\t\ttopChunk?.title\n\t\t\t\t);\n\t\t\tconst sourceAwareChunkReason = formatSourceAwareChunkReason(\n\t\t\t\ttopChunk?.metadata?.sourceAwareChunkReason\n\t\t\t);\n\t\t\tconst sourceAwareUnitScopeLabel = buildSourceAwareUnitScopeLabel(\n\t\t\t\ttopChunk?.metadata\n\t\t\t);\n\t\t\tconst parentDistribution =\n\t\t\t\tparentTotal > 0\n\t\t\t\t\t? siblingPool\n\t\t\t\t\t\t\t.map((entry) => ({\n\t\t\t\t\t\t\t\tcount: entry.count,\n\t\t\t\t\t\t\t\tisActive: entry.key === section.key,\n\t\t\t\t\t\t\t\tkey: entry.key,\n\t\t\t\t\t\t\t\tlabel: entry.label,\n\t\t\t\t\t\t\t\tparentShare: entry.totalScore / parentTotal,\n\t\t\t\t\t\t\t\ttotalScore: entry.totalScore\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t\t.sort(\n\t\t\t\t\t\t\t\t(left, right) =>\n\t\t\t\t\t\t\t\t\tright.totalScore - left.totalScore\n\t\t\t\t\t\t\t)\n\t\t\t\t\t: [];\n\t\t\tconst reasons: RAGSectionRetrievalDiagnostic['reasons'] = [];\n\t\t\tconst stageCounts =\n\t\t\t\ttrace?.steps\n\t\t\t\t\t.map((step) => ({\n\t\t\t\t\t\tcount:\n\t\t\t\t\t\t\tstep.sectionCounts?.find(\n\t\t\t\t\t\t\t\t(entry) => entry.key === section.key\n\t\t\t\t\t\t\t)?.count ?? 0,\n\t\t\t\t\t\tstage: step.stage\n\t\t\t\t\t}))\n\t\t\t\t\t.filter((entry) => entry.count > 0) ?? [];\n\t\t\tconst stageWeights = stageCounts.map((entry) => {\n\t\t\t\tconst previousStageEntry =\n\t\t\t\t\tstageCounts[\n\t\t\t\t\t\tstageCounts.findIndex(\n\t\t\t\t\t\t\t(candidate) => candidate.stage === entry.stage\n\t\t\t\t\t\t) - 1\n\t\t\t\t\t];\n\t\t\t\tconst stageEntries =\n\t\t\t\t\tstageSectionCounts\n\t\t\t\t\t\t.get(entry.stage)\n\t\t\t\t\t\t?.filter((candidate) => candidate.count > 0) ?? [];\n\t\t\t\tconst stageScoreEntries =\n\t\t\t\t\tstageSectionScores\n\t\t\t\t\t\t.get(entry.stage)\n\t\t\t\t\t\t?.filter((candidate) => candidate.totalScore > 0) ?? [];\n\t\t\t\tconst stageTotal = stageEntries.reduce(\n\t\t\t\t\t(sum, candidate) => sum + candidate.count,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tconst stageScoreTotal = stageScoreEntries.reduce(\n\t\t\t\t\t(sum, candidate) => sum + candidate.totalScore,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tconst siblingStageEntries = stageEntries.filter(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tcandidate.key !== section.key &&\n\t\t\t\t\t\tparentLabelByKey.get(candidate.key) ===\n\t\t\t\t\t\t\tsection.parentLabel\n\t\t\t\t);\n\t\t\t\tconst parentStageEntries = stageEntries.filter(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tparentLabelByKey.get(candidate.key) ===\n\t\t\t\t\t\tsection.parentLabel\n\t\t\t\t);\n\t\t\t\tconst siblingStageScoreEntries = stageScoreEntries.filter(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tcandidate.key !== section.key &&\n\t\t\t\t\t\tparentLabelByKey.get(candidate.key) ===\n\t\t\t\t\t\t\tsection.parentLabel\n\t\t\t\t);\n\t\t\t\tconst parentStageScoreEntries = stageScoreEntries.filter(\n\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\tparentLabelByKey.get(candidate.key) ===\n\t\t\t\t\t\tsection.parentLabel\n\t\t\t\t);\n\t\t\t\tconst strongestStageSibling = siblingStageEntries\n\t\t\t\t\t.slice()\n\t\t\t\t\t.sort((left, right) => right.count - left.count)[0];\n\t\t\t\tconst parentStageTotal = parentStageEntries.reduce(\n\t\t\t\t\t(sum, candidate) => sum + candidate.count,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tconst activeStageScore = stageScoreEntries.find(\n\t\t\t\t\t(candidate) => candidate.key === section.key\n\t\t\t\t)?.totalScore;\n\t\t\t\tconst strongestStageScoreSibling = siblingStageScoreEntries\n\t\t\t\t\t.slice()\n\t\t\t\t\t.sort(\n\t\t\t\t\t\t(left, right) => right.totalScore - left.totalScore\n\t\t\t\t\t)[0];\n\t\t\t\tconst parentStageScoreTotal = parentStageScoreEntries.reduce(\n\t\t\t\t\t(sum, candidate) => sum + candidate.totalScore,\n\t\t\t\t\t0\n\t\t\t\t);\n\t\t\t\tconst stageShare =\n\t\t\t\t\tstageTotal > 0 ? entry.count / stageTotal : 0;\n\t\t\t\tconst retentionRate =\n\t\t\t\t\ttypeof previousStageEntry?.count === 'number' &&\n\t\t\t\t\tpreviousStageEntry.count > 0\n\t\t\t\t\t\t? entry.count / previousStageEntry.count\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst countDelta =\n\t\t\t\t\ttypeof previousStageEntry?.count === 'number'\n\t\t\t\t\t\t? entry.count - previousStageEntry.count\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst parentStageShare =\n\t\t\t\t\tparentStageTotal > 0\n\t\t\t\t\t\t? entry.count / parentStageTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst stageScoreShare =\n\t\t\t\t\ttypeof activeStageScore === 'number' && stageScoreTotal > 0\n\t\t\t\t\t\t? activeStageScore / stageScoreTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst parentStageScoreShare =\n\t\t\t\t\ttypeof activeStageScore === 'number' &&\n\t\t\t\t\tparentStageScoreTotal > 0\n\t\t\t\t\t\t? activeStageScore / parentStageScoreTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst stageShareGap =\n\t\t\t\t\tstageTotal > 0 && strongestStageSibling\n\t\t\t\t\t\t? entry.count / stageTotal -\n\t\t\t\t\t\t\tstrongestStageSibling.count / stageTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst parentStageShareGap =\n\t\t\t\t\tparentStageTotal > 0 && strongestStageSibling\n\t\t\t\t\t\t? entry.count / parentStageTotal -\n\t\t\t\t\t\t\tstrongestStageSibling.count / parentStageTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst stageScoreShareGap =\n\t\t\t\t\ttypeof activeStageScore === 'number' &&\n\t\t\t\t\tstageScoreTotal > 0 &&\n\t\t\t\t\tstrongestStageScoreSibling\n\t\t\t\t\t\t? activeStageScore / stageScoreTotal -\n\t\t\t\t\t\t\tstrongestStageScoreSibling.totalScore /\n\t\t\t\t\t\t\t\tstageScoreTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst parentStageScoreShareGap =\n\t\t\t\t\ttypeof activeStageScore === 'number' &&\n\t\t\t\t\tparentStageScoreTotal > 0 &&\n\t\t\t\t\tstrongestStageScoreSibling\n\t\t\t\t\t\t? activeStageScore / parentStageScoreTotal -\n\t\t\t\t\t\t\tstrongestStageScoreSibling.totalScore /\n\t\t\t\t\t\t\t\tparentStageScoreTotal\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst reasons: RAGSectionRetrievalDiagnostic['stageWeights'][number]['reasons'] =\n\t\t\t\t\t[];\n\t\t\t\tif (\n\t\t\t\t\tentry.stage === 'rerank' &&\n\t\t\t\t\tstageShare > 0.5 &&\n\t\t\t\t\t(typeof stageShareGap !== 'number' || stageShareGap > 0)\n\t\t\t\t) {\n\t\t\t\t\treasons.push('rerank_preserved_lead');\n\t\t\t\t}\n\t\t\t\tif (entry.stage === 'finalize' && stageShare >= 0.5) {\n\t\t\t\t\treasons.push('final_stage_concentration');\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tentry.stage === 'finalize' &&\n\t\t\t\t\ttypeof parentStageShare === 'number' &&\n\t\t\t\t\tparentStageShare >= 0.6 &&\n\t\t\t\t\t(typeof parentStageShareGap !== 'number' ||\n\t\t\t\t\t\tparentStageShareGap > 0)\n\t\t\t\t) {\n\t\t\t\t\treasons.push('final_stage_dominant_within_parent');\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tstrongestStageSibling &&\n\t\t\t\t\t((typeof stageShareGap === 'number' &&\n\t\t\t\t\t\tstageShareGap <= 0.1) ||\n\t\t\t\t\t\t(typeof parentStageShareGap === 'number' &&\n\t\t\t\t\t\t\tparentStageShareGap <= 0.1))\n\t\t\t\t) {\n\t\t\t\t\treasons.push('stage_runner_up_pressure');\n\t\t\t\t}\n\t\t\t\tif (typeof countDelta === 'number') {\n\t\t\t\t\tif (countDelta > 0) {\n\t\t\t\t\t\treasons.push('stage_expanded');\n\t\t\t\t\t} else if (countDelta < 0) {\n\t\t\t\t\t\treasons.push('stage_narrowed');\n\t\t\t\t\t} else {\n\t\t\t\t\t\treasons.push('stage_held');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tcount: entry.count,\n\t\t\t\t\tcountDelta,\n\t\t\t\t\tparentStageScoreShare,\n\t\t\t\t\tparentStageShare,\n\t\t\t\t\tparentStageShareGap,\n\t\t\t\t\tpreviousCount: previousStageEntry?.count,\n\t\t\t\t\tpreviousStage: previousStageEntry?.stage,\n\t\t\t\t\treasons,\n\t\t\t\t\tretentionRate,\n\t\t\t\t\tstage: entry.stage,\n\t\t\t\t\tstageScoreShare,\n\t\t\t\t\tstageScoreShareGap,\n\t\t\t\t\tstageShare,\n\t\t\t\t\tstageShareGap,\n\t\t\t\t\ttotalScore: activeStageScore,\n\t\t\t\t\tstrongestSiblingCount: strongestStageSibling?.count,\n\t\t\t\t\tstrongestSiblingLabel: strongestStageSibling\n\t\t\t\t\t\t? (diagnostics.find(\n\t\t\t\t\t\t\t\t(candidate) =>\n\t\t\t\t\t\t\t\t\tcandidate.key === strongestStageSibling.key\n\t\t\t\t\t\t\t)?.label ?? strongestStageSibling.key)\n\t\t\t\t\t\t: undefined\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst firstSeenStage = stageCounts[0]?.stage;\n\t\t\tconst lastSeenStage = stageCounts.at(-1)?.stage;\n\t\t\tconst peakStageEntry = stageCounts.reduce<\n\t\t\t\t(typeof stageCounts)[number] | undefined\n\t\t\t>(\n\t\t\t\t(highest, entry) =>\n\t\t\t\t\t!highest || entry.count > highest.count ? entry : highest,\n\t\t\t\tundefined\n\t\t\t);\n\t\t\tconst finalStageEntry = stageCounts.at(-1);\n\t\t\tconst peakCount = peakStageEntry?.count ?? section.count;\n\t\t\tconst finalCount = finalStageEntry?.count;\n\t\t\tconst finalRetentionRate =\n\t\t\t\ttypeof finalCount === 'number' && peakCount > 0\n\t\t\t\t\t? finalCount / peakCount\n\t\t\t\t\t: undefined;\n\t\t\tconst dropFromPeak =\n\t\t\t\ttypeof finalCount === 'number'\n\t\t\t\t\t? peakCount - finalCount\n\t\t\t\t\t: undefined;\n\t\t\tconst queryAttributionReasons: RAGSectionRetrievalDiagnostic['queryAttribution']['reasons'] =\n\t\t\t\t[];\n\t\t\tconst queryAttributionMode =\n\t\t\t\tsection.primaryHits > 0 &&\n\t\t\t\tsection.transformedHits === 0 &&\n\t\t\t\tsection.variantHits === 0\n\t\t\t\t\t? 'primary'\n\t\t\t\t\t: section.transformedHits > 0 &&\n\t\t\t\t\t\t section.primaryHits === 0 &&\n\t\t\t\t\t\t section.variantHits === 0\n\t\t\t\t\t\t? 'transformed'\n\t\t\t\t\t\t: section.variantHits > 0 &&\n\t\t\t\t\t\t\t section.primaryHits === 0 &&\n\t\t\t\t\t\t\t section.transformedHits === 0\n\t\t\t\t\t\t\t? 'variant'\n\t\t\t\t\t\t\t: 'mixed';\n\t\t\tif (queryAttributionMode === 'primary') {\n\t\t\t\tqueryAttributionReasons.push('base_query_only');\n\t\t\t}\n\t\t\tif (queryAttributionMode === 'transformed') {\n\t\t\t\tqueryAttributionReasons.push('transformed_query_only');\n\t\t\t\tqueryAttributionReasons.push('transform_introduced');\n\t\t\t}\n\t\t\tif (queryAttributionMode === 'variant') {\n\t\t\t\tqueryAttributionReasons.push('variant_only');\n\t\t\t\tqueryAttributionReasons.push('variant_supported');\n\t\t\t}\n\t\t\tif (queryAttributionMode === 'mixed') {\n\t\t\t\tqueryAttributionReasons.push('mixed_query_sources');\n\t\t\t\tif (section.variantHits > 0) {\n\t\t\t\t\tqueryAttributionReasons.push('variant_supported');\n\t\t\t\t}\n\t\t\t\tif (section.transformedHits > 0 && section.primaryHits === 0) {\n\t\t\t\t\tqueryAttributionReasons.push('transform_introduced');\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (section.bestScore >= strongestBestHit) {\n\t\t\t\treasons.push('best_hit');\n\t\t\t}\n\t\t\tif (section.count > 1) {\n\t\t\t\treasons.push('multi_hit_section');\n\t\t\t}\n\t\t\tif (siblings.length === 0) {\n\t\t\t\treasons.push('only_section_in_parent');\n\t\t\t} else if (\n\t\t\t\t!strongestSibling ||\n\t\t\t\tsection.totalScore >= strongestSibling.totalScore\n\t\t\t) {\n\t\t\t\treasons.push('dominant_within_parent');\n\t\t\t}\n\t\t\tif (scoreShare >= 0.5 || (parentShare ?? 0) >= 0.6) {\n\t\t\t\treasons.push('concentrated_evidence');\n\t\t\t}\n\n\t\t\tconst summaryParts = [\n\t\t\t\tisBlockAwareContextLabel(topContextLabel)\n\t\t\t\t\t? topContextLabel\n\t\t\t\t\t: '',\n\t\t\t\t`${section.count} hit${section.count === 1 ? '' : 's'}`,\n\t\t\t\t`${(scoreShare * 100).toFixed(0)}% score share`,\n\t\t\t\t`vector ${section.vectorHits} · lexical ${section.lexicalHits} · hybrid ${section.hybridHits}`,\n\t\t\t\ttypeof parentShare === 'number'\n\t\t\t\t\t? `${(parentShare * 100).toFixed(0)}% of parent section set`\n\t\t\t\t\t: '',\n\t\t\t\tsourceAwareChunkReason\n\t\t\t\t\t? `boundary ${sourceAwareChunkReason}`\n\t\t\t\t\t: '',\n\t\t\t\tsourceAwareUnitScopeLabel\n\t\t\t\t\t? `scope ${sourceAwareUnitScopeLabel}`\n\t\t\t\t\t: '',\n\t\t\t\tstrongestSibling\n\t\t\t\t\t? `ahead of ${strongestSibling.label} by ${(section.totalScore - strongestSibling.totalScore).toFixed(2)}`\n\t\t\t\t\t: 'no sibling competition'\n\t\t\t].filter(Boolean);\n\n\t\t\treturn {\n\t\t\t\taverageScore: section.totalScore / section.count,\n\t\t\t\tbestScore: section.bestScore,\n\t\t\t\tcount: section.count,\n\t\t\t\tkey: section.key,\n\t\t\t\tlabel: section.label,\n\t\t\t\tparentLabel: section.parentLabel,\n\t\t\t\tparentDistribution,\n\t\t\t\tparentShare,\n\t\t\t\tparentShareGap:\n\t\t\t\t\ttypeof parentShare === 'number' &&\n\t\t\t\t\tstrongestSibling &&\n\t\t\t\t\tparentTotal > 0\n\t\t\t\t\t\t? parentShare -\n\t\t\t\t\t\t\tstrongestSibling.totalScore / parentTotal\n\t\t\t\t\t\t: undefined,\n\t\t\t\tpath: section.path,\n\t\t\t\tfirstSeenStage,\n\t\t\t\tfinalCount,\n\t\t\t\tfinalRetentionRate,\n\t\t\t\tlastSeenStage,\n\t\t\t\tdropFromPeak,\n\t\t\t\tpeakCount,\n\t\t\t\tpeakStage: peakStageEntry?.stage,\n\t\t\t\tqueryAttribution: {\n\t\t\t\t\tmode: queryAttributionMode,\n\t\t\t\t\tprimaryHits: section.primaryHits,\n\t\t\t\t\treasons: queryAttributionReasons,\n\t\t\t\t\ttransformedHits: section.transformedHits,\n\t\t\t\t\tvariantHits: section.variantHits\n\t\t\t\t},\n\t\t\t\trequestedMode: trace?.requestedMode,\n\t\t\t\tretrievalMode: trace?.mode,\n\t\t\t\troutingLabel: trace?.routingLabel,\n\t\t\t\troutingProvider: trace?.routingProvider,\n\t\t\t\troutingReason: trace?.routingReason,\n\t\t\t\tqueryTransformLabel: trace?.queryTransformLabel,\n\t\t\t\tqueryTransformProvider: trace?.queryTransformProvider,\n\t\t\t\tqueryTransformReason: trace?.queryTransformReason,\n\t\t\t\treasons,\n\t\t\t\trerankApplied: trace?.steps.some(\n\t\t\t\t\t(step) =>\n\t\t\t\t\t\tstep.stage === 'rerank' &&\n\t\t\t\t\t\tstep.metadata?.applied === true\n\t\t\t\t),\n\t\t\t\tscoreShare,\n\t\t\t\tscoreThresholdApplied: trace?.steps.some(\n\t\t\t\t\t(step) => step.stage === 'score_filter'\n\t\t\t\t),\n\t\t\t\tstageCounts,\n\t\t\t\tstageWeights,\n\t\t\t\tsiblingCount: siblings.length,\n\t\t\t\tsiblingScoreGap: strongestSibling\n\t\t\t\t\t? section.totalScore - strongestSibling.totalScore\n\t\t\t\t\t: undefined,\n\t\t\t\tsourceCount: section.sourceSet.size,\n\t\t\t\tsourceAwareChunkReasonLabel: sourceAwareChunkReason,\n\t\t\t\tsourceAwareUnitScopeLabel,\n\t\t\t\ttopContextLabel,\n\t\t\t\ttopLocatorLabel,\n\t\t\t\tsourceBalanceApplied: trace?.steps.some(\n\t\t\t\t\t(step) => step.stage === 'source_balance'\n\t\t\t\t),\n\t\t\t\tstrongestSiblingLabel: strongestSibling?.label,\n\t\t\t\tstrongestSiblingScore: strongestSibling?.totalScore,\n\t\t\t\tsummary: summaryParts.join(' · '),\n\t\t\t\ttopChunkId: section.topChunkId,\n\t\t\t\ttopSource: section.topSource,\n\t\t\t\ttotalScore: section.totalScore,\n\t\t\t\thybridHits: section.hybridHits,\n\t\t\t\tlexicalHits: section.lexicalHits,\n\t\t\t\tvectorHits: section.vectorHits\n\t\t\t};\n\t\t})\n\t\t.sort((left, right) => {\n\t\t\tif (right.totalScore !== left.totalScore) {\n\t\t\t\treturn right.totalScore - left.totalScore;\n\t\t\t}\n\t\t\tif (right.bestScore !== left.bestScore) {\n\t\t\t\treturn right.bestScore - left.bestScore;\n\t\t\t}\n\t\t\treturn left.label.localeCompare(right.label);\n\t\t});\n};\n\nexport type RAGStreamProgress = {\n\tstage: RAGStreamStage;\n\tconversationId?: string;\n\tmessageId?: string;\n\tretrievalStartedAt?: number;\n\tretrievedAt?: number;\n\tretrievalDurationMs?: number;\n\thasContent: boolean;\n\thasRetrieved: boolean;\n\thasSources: boolean;\n\thasThinking: boolean;\n\thasToolCalls: boolean;\n\tisComplete: boolean;\n\tisError: boolean;\n\tisIdle: boolean;\n\tisRetrieving: boolean;\n\tisRetrieved: boolean;\n\tisStreaming: boolean;\n\tisSubmitting: boolean;\n\tsourceCount: number;\n\tlatestMessage: AIMessage | undefined;\n};\n\nconst buildStreamProgressState = (messages: AIMessage[]) => {\n\tconst latestMessage = getLatestAssistantMessage(messages);\n\tconst retrieved = latestMessage\n\t\t? buildRAGRetrievedState(messages)\n\t\t: undefined;\n\n\treturn {\n\t\tconversationId: latestMessage?.conversationId,\n\t\tlatestMessage,\n\t\tmessageId: latestMessage?.id,\n\t\tretrieved,\n\t\tsourceCount:\n\t\t\tretrieved?.sources.length ?? latestMessage?.sources?.length ?? 0\n\t};\n};\n\nexport const buildRAGStreamProgress = ({\n\terror,\n\tisStreaming,\n\tmessages\n}: {\n\terror: string | null;\n\tisStreaming: boolean;\n\tmessages: AIMessage[];\n}): RAGStreamProgress => {\n\tconst stage = resolveRAGStreamStage({\n\t\terror,\n\t\tisStreaming,\n\t\tmessages\n\t});\n\tconst state = buildStreamProgressState(messages);\n\tconst hasSources = state.sourceCount > 0;\n\tconst hasRetrieved =\n\t\tstage === 'retrieved' ||\n\t\tstate.retrieved !== undefined ||\n\t\tstate.latestMessage?.retrievedAt !== undefined;\n\tconst hasThinking =\n\t\ttypeof state.latestMessage?.thinking === 'string' &&\n\t\tstate.latestMessage.thinking.length > 0;\n\tconst hasToolCalls = (state.latestMessage?.toolCalls?.length ?? 0) > 0;\n\n\treturn {\n\t\tconversationId: state.conversationId,\n\t\thasContent:\n\t\t\ttypeof state.latestMessage?.content === 'string' &&\n\t\t\tstate.latestMessage.content.length > 0,\n\t\thasRetrieved,\n\t\thasSources,\n\t\thasThinking,\n\t\thasToolCalls,\n\t\tisComplete: stage === 'complete',\n\t\tisError: stage === 'error',\n\t\tisIdle: stage === 'idle',\n\t\tisRetrieved: stage === 'retrieved',\n\t\tisRetrieving: stage === 'submitting' || stage === 'retrieving',\n\t\tisStreaming: stage === 'streaming',\n\t\tisSubmitting: stage === 'submitting',\n\t\tlatestMessage: state.latestMessage,\n\t\tmessageId: state.messageId,\n\t\tretrievalDurationMs: state.retrieved?.retrievalDurationMs,\n\t\tretrievalStartedAt: state.retrieved?.retrievalStartedAt,\n\t\tretrievedAt: state.retrieved?.retrievedAt,\n\t\tsourceCount: state.sourceCount,\n\t\tstage\n\t};\n};\n\nexport type RAGStreamProgressState = ReturnType<typeof buildRAGStreamProgress>;\nexport const buildRAGAnswerWorkflowState = ({\n\terror,\n\tisStreaming,\n\tmessages\n}: {\n\terror: string | null;\n\tisStreaming: boolean;\n\tmessages: AIMessage[];\n}): RAGAnswerWorkflowState => {\n\tconst latestAssistantMessage = getLatestAssistantMessage(messages);\n\tconst sources = getLatestRAGSources(messages);\n\tconst sourceGroups = buildRAGSourceGroups(sources);\n\tconst citations = buildRAGCitations(sources);\n\tconst citationReferenceMap = buildRAGCitationReferenceMap(citations);\n\tconst sourceSummaries = buildRAGSourceSummaries(sources);\n\tconst groundingReferences = buildRAGGroundingReferences(sources);\n\tconst groundedAnswer = buildRAGGroundedAnswer(\n\t\tlatestAssistantMessage?.content ?? '',\n\t\tsources\n\t);\n\tconst retrieval = buildRAGRetrievedState(messages);\n\tconst sectionDiagnostics = buildRAGSectionRetrievalDiagnostics(\n\t\tsources,\n\t\tretrieval?.trace\n\t);\n\tconst progress = buildRAGStreamProgress({\n\t\terror,\n\t\tisStreaming,\n\t\tmessages\n\t});\n\n\treturn {\n\t\texcerptModeCounts: buildRAGExcerptModeCounts([\n\t\t\t...citations.map((citation) => citation.excerptSelection),\n\t\t\t...sourceSummaries.map((summary) => summary.excerptSelection),\n\t\t\t...groundingReferences.map(\n\t\t\t\t(reference) => reference.excerptSelection\n\t\t\t),\n\t\t\t...groundedAnswer.sectionSummaries.map(\n\t\t\t\t(summary) => summary.excerptSelection\n\t\t\t)\n\t\t]),\n\t\tcitationReferenceMap,\n\t\tcitations,\n\t\tcoverage: groundedAnswer.coverage,\n\t\terror,\n\t\tgroundedAnswer,\n\t\tgroundingReferences,\n\t\thasCitations: groundedAnswer.hasCitations,\n\t\thasGrounding: groundingReferences.length > 0,\n\t\thasRetrieved: progress.hasRetrieved,\n\t\thasSources: sources.length > 0,\n\t\tisAnswerStreaming: progress.isStreaming,\n\t\tisComplete: progress.isComplete,\n\t\tisError: progress.isError,\n\t\tisIdle: progress.isIdle,\n\t\tisRetrieved: progress.isRetrieved,\n\t\tisRetrieving: progress.isRetrieving,\n\t\tisRunning:\n\t\t\tprogress.isSubmitting ||\n\t\t\tprogress.isRetrieving ||\n\t\t\tprogress.isStreaming,\n\t\tisSubmitting: progress.isSubmitting,\n\t\tlatestAssistantMessage,\n\t\tmessages,\n\t\tretrieval,\n\t\tretrievalDurationMs: retrieval?.retrievalDurationMs,\n\t\tretrievalStartedAt: retrieval?.retrievalStartedAt,\n\t\tretrievedAt: retrieval?.retrievedAt,\n\t\tsectionDiagnostics,\n\t\tsourceGroups,\n\t\tsourceSummaries,\n\t\tsources,\n\t\tstage: progress.stage,\n\t\tungroundedReferenceNumbers: groundedAnswer.ungroundedReferenceNumbers\n\t};\n};\n\nexport const buildRAGSourceGroups = (sources: RAGSource[]) => {\n\tconst groups = new Map<string, RAGSourceGroup>();\n\n\tfor (const source of sources) {\n\t\tupdateSourceGroup(groups, source);\n\t}\n\n\treturn [...groups.values()].sort((left, right) => {\n\t\tif (right.bestScore !== left.bestScore) {\n\t\t\treturn right.bestScore - left.bestScore;\n\t\t}\n\n\t\treturn left.label.localeCompare(right.label);\n\t});\n};\n\nconst buildSourceGroup = (source: RAGSource, key: string): RAGSourceGroup => ({\n\tbestScore: source.score,\n\tchunks: [source],\n\tcount: 1,\n\tkey,\n\tlabel: buildSourceLabel(source),\n\tlabels:\n\t\tsource.labels ??\n\t\tbuildRAGSourceLabels({\n\t\t\tmetadata: source.metadata,\n\t\t\tsource: source.source,\n\t\t\ttitle: source.title\n\t\t}),\n\tstructure: source.structure ?? buildRAGChunkStructure(source.metadata),\n\tsource: source.source,\n\ttitle: source.title\n});\n\nconst updateSourceGroup = (\n\tgroups: Map<string, RAGSourceGroup>,\n\tsource: RAGSource\n) => {\n\tconst key = buildSourceGroupKey(source);\n\tconst existing = groups.get(key);\n\tif (!existing) {\n\t\tgroups.set(key, buildSourceGroup(source, key));\n\n\t\treturn;\n\t}\n\n\texisting.bestScore = Math.max(existing.bestScore, source.score);\n\texisting.count += 1;\n\texisting.chunks.push(source);\n\tconst leadChunk = getPreferredSourceLeadChunk(existing.chunks);\n\tif (leadChunk) {\n\t\texisting.label = buildSourceLabel(leadChunk);\n\t\texisting.labels =\n\t\t\tleadChunk.labels ??\n\t\t\tbuildRAGSourceLabels({\n\t\t\t\tmetadata: leadChunk.metadata,\n\t\t\t\tsource: leadChunk.source,\n\t\t\t\ttitle: leadChunk.title\n\t\t\t});\n\t\texisting.structure =\n\t\t\tleadChunk.structure ?? buildRAGChunkStructure(leadChunk.metadata);\n\t\texisting.source = leadChunk.source;\n\t\texisting.title = leadChunk.title;\n\t}\n};\nexport const getLatestAssistantMessage = (messages: AIMessage[]) => {\n\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = messages[index];\n\t\tif (message?.role === 'assistant') {\n\t\t\treturn message;\n\t\t}\n\t}\n\n\treturn undefined;\n};\nexport const getLatestRAGSources = (messages: AIMessage[]) =>\n\tgetLatestAssistantMessage(messages)?.sources ?? [];\nexport const getLatestRetrievedMessage = (messages: AIMessage[]) => {\n\tfor (let index = messages.length - 1; index >= 0; index -= 1) {\n\t\tconst message = messages[index];\n\t\tif (\n\t\t\tmessage?.role === 'assistant' &&\n\t\t\t(typeof message.retrievedAt === 'number' ||\n\t\t\t\t(message.sources?.length ?? 0) > 0)\n\t\t) {\n\t\t\treturn message;\n\t\t}\n\t}\n\n\treturn undefined;\n};\nexport const resolveRAGStreamStage = ({\n\terror,\n\tisStreaming,\n\tmessages\n}: {\n\terror: string | null;\n\tisStreaming: boolean;\n\tmessages: AIMessage[];\n}) => {\n\tif (error) {\n\t\treturn 'error';\n\t}\n\n\tconst assistantMessage = getLatestAssistantMessage(messages);\n\tif (!assistantMessage) {\n\t\treturn isStreaming ? 'submitting' : 'idle';\n\t}\n\n\tconst isRetrieving =\n\t\ttypeof assistantMessage.retrievalStartedAt === 'number' &&\n\t\ttypeof assistantMessage.retrievedAt !== 'number';\n\n\tif (isRetrieving) {\n\t\treturn 'retrieving';\n\t}\n\n\tif (!isStreaming) {\n\t\treturn 'complete';\n\t}\n\n\tconst hasRetrieved = typeof assistantMessage.retrievedAt === 'number';\n\tconst hasContent =\n\t\tassistantMessage.content.trim().length > 0 ||\n\t\tassistantMessage.thinking?.trim().length ||\n\t\t(assistantMessage.toolCalls?.length ?? 0) > 0 ||\n\t\t(assistantMessage.images?.length ?? 0) > 0;\n\n\tif (hasRetrieved && !hasContent) {\n\t\treturn 'retrieved';\n\t}\n\n\treturn 'streaming';\n};\n\nconst formatSignedDelta = (value: number, decimals = 0, suffix = '') =>\n\t`${value >= 0 ? '+' : ''}${value.toFixed(decimals)}${suffix}`;\n\nconst formatEvaluationPassingRate = (value: number) => `${value.toFixed(1)}%`;\n\nconst formatEvaluationSummary = (response: RAGEvaluationResponse) =>\n\t`${response.summary.totalCases} total · f1 ${response.summary.averageF1.toFixed(\n\t\t3\n\t)} · latency ${response.summary.averageLatencyMs.toFixed(1)}ms`;\n\nconst formatGroundingHistorySummaryValue = (response: {\n\tsummary: {\n\t\tpassedCases: number;\n\t\ttotalCases: number;\n\t\tgroundedCases: number;\n\t\tpartialCases: number;\n\t\tungroundedCases: number;\n\t\taverageResolvedCitationRate: number;\n\t\taverageCitationF1: number;\n\t};\n}) =>\n\t`${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\tcases.length > 0\n\t\t? cases.map((entry) => entry.label ?? entry.caseId).join(', ')\n\t\t: 'none';\n\nconst buildComparisonCaseLeadLabel = (snapshot?: {\n\ttopLocatorLabel?: string;\n\ttopContextLabel?: string;\n\tsourceAwareUnitScopeLabel?: string;\n\tsourceAwareChunkReasonLabel?: string;\n}) =>\n\tsnapshot?.topLocatorLabel ??\n\tsnapshot?.topContextLabel ??\n\tsnapshot?.sourceAwareUnitScopeLabel ??\n\tsnapshot?.sourceAwareChunkReasonLabel;\n\nconst formatComparisonLeadCueSummary = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst labels = Array.from(\n\t\tnew Set(\n\t\t\t(entry.caseTraceSnapshots ?? [])\n\t\t\t\t.map((snapshot) => buildComparisonCaseLeadLabel(snapshot))\n\t\t\t\t.filter((value): value is string => typeof value === 'string')\n\t\t)\n\t).slice(0, 3);\n\n\treturn labels.length > 0 ? labels.join(' · ') : 'none';\n};\n\nconst formatComparisonLeadMediaCueSummary = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst labels = Array.from(\n\t\tnew Set(\n\t\t\t(entry.caseTraceSnapshots ?? [])\n\t\t\t\t.map((snapshot) =>\n\t\t\t\t\tformatLeadMediaCueSummary({\n\t\t\t\t\t\tleadSpeakerCue: snapshot.leadSpeakerCue,\n\t\t\t\t\t\tleadSpeakerAttributionCue:\n\t\t\t\t\t\t\tsnapshot.leadSpeakerAttributionCue,\n\t\t\t\t\t\tleadChannelCue: snapshot.leadChannelCue,\n\t\t\t\t\t\tleadChannelAttributionCue:\n\t\t\t\t\t\t\tsnapshot.leadChannelAttributionCue,\n\t\t\t\t\t\tleadContinuityCue: snapshot.leadContinuityCue\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.filter(\n\t\t\t\t\t(value): value is string =>\n\t\t\t\t\t\ttypeof value === 'string' && value !== 'none'\n\t\t\t\t)\n\t\t)\n\t).slice(0, 3);\n\n\treturn labels.length > 0 ? labels.join(' · ') : 'none';\n};\n\nconst formatSQLitePlannerCueSummary = (input?: {\n\tsqliteQueryMode?: string;\n\tsqliteQueryPushdownMode?: string;\n\tsqliteQueryPushdownApplied?: boolean;\n\tsqliteQueryPushdownClauseCount?: number;\n\tsqliteQueryPushdownCoverageRatio?: number;\n\tsqliteQueryTotalFilterClauseCount?: number;\n\tsqliteQueryJsRemainderClauseCount?: number;\n\tsqliteQueryMultiplierUsed?: number;\n\tsqliteQueryCandidateLimitUsed?: number;\n\tsqliteQueryMaxBackfillsUsed?: number;\n\tsqliteQueryMinResultsUsed?: number;\n\tsqliteQueryFillPolicyUsed?: string;\n\tsqliteQueryJsRemainderRatio?: number;\n\tsqliteQueryFilteredCandidates?: number;\n\tsqliteQueryInitialSearchK?: number;\n\tsqliteQueryFinalSearchK?: number;\n\tsqliteQuerySearchExpansionRatio?: number;\n\tsqliteQueryBackfillCount?: number;\n\tsqliteQueryBackfillLimitReached?: boolean;\n\tsqliteQueryMinResultsSatisfied?: boolean;\n\tsqliteQueryReturnedCount?: number;\n\tsqliteQueryCandidateYieldRatio?: number;\n\tsqliteQueryTopKFillRatio?: number;\n\tsqliteQueryUnderfilledTopK?: boolean;\n\tsqliteQueryCandidateBudgetExhausted?: boolean;\n\tsqliteQueryCandidateCoverage?: string;\n}) => {\n\tconst plannerJudgment =\n\t\ttypeof input?.sqliteQuerySearchExpansionRatio === 'number' &&\n\t\ttypeof input?.sqliteQueryCandidateYieldRatio === 'number' &&\n\t\tinput.sqliteQuerySearchExpansionRatio >= 2 &&\n\t\tinput.sqliteQueryCandidateYieldRatio < 0.25\n\t\t\t? 'expensive backfill'\n\t\t\t: typeof input?.sqliteQueryTopKFillRatio === 'number' &&\n\t\t\t\t typeof input?.sqliteQueryCandidateYieldRatio === 'number' &&\n\t\t\t\t input.sqliteQueryTopKFillRatio >= 1 &&\n\t\t\t\t input.sqliteQueryCandidateYieldRatio >= 0.5\n\t\t\t\t? 'efficient fill'\n\t\t\t\t: input?.sqliteQueryPushdownMode === 'full' &&\n\t\t\t\t\t typeof input?.sqliteQueryPushdownCoverageRatio ===\n\t\t\t\t\t\t\t'number' &&\n\t\t\t\t\t input.sqliteQueryPushdownCoverageRatio >= 1\n\t\t\t\t\t? 'full pushdown'\n\t\t\t\t\t: input?.sqliteQueryPushdownMode === 'partial' &&\n\t\t\t\t\t\t typeof input?.sqliteQueryJsRemainderRatio ===\n\t\t\t\t\t\t\t\t'number' &&\n\t\t\t\t\t\t input.sqliteQueryJsRemainderRatio >= 0.5\n\t\t\t\t\t\t? 'heavy js remainder'\n\t\t\t\t\t\t: undefined;\n\n\tconst parts = [\n\t\tinput?.sqliteQueryMode ? `mode ${input.sqliteQueryMode}` : undefined,\n\t\tinput?.sqliteQueryPushdownMode\n\t\t\t? `pushdown ${input.sqliteQueryPushdownMode}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryPushdownApplied === 'boolean'\n\t\t\t? input.sqliteQueryPushdownApplied\n\t\t\t\t? 'pushdown applied'\n\t\t\t\t: 'pushdown skipped'\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryPushdownClauseCount === 'number'\n\t\t\t? `clauses ${input.sqliteQueryPushdownClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryPushdownCoverageRatio === 'number'\n\t\t\t? `pushdown ${(input.sqliteQueryPushdownCoverageRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryJsRemainderClauseCount === 'number'\n\t\t\t? `js remainder ${input.sqliteQueryJsRemainderClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryMultiplierUsed === 'number'\n\t\t\t? `x${input.sqliteQueryMultiplierUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryCandidateLimitUsed === 'number'\n\t\t\t? `cap ${input.sqliteQueryCandidateLimitUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryMaxBackfillsUsed === 'number'\n\t\t\t? `backfills ${input.sqliteQueryMaxBackfillsUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryMinResultsUsed === 'number'\n\t\t\t? `min ${input.sqliteQueryMinResultsUsed}`\n\t\t\t: undefined,\n\t\tinput?.sqliteQueryFillPolicyUsed\n\t\t\t? `fill ${input.sqliteQueryFillPolicyUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryJsRemainderRatio === 'number'\n\t\t\t? `js ${(input.sqliteQueryJsRemainderRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryTotalFilterClauseCount === 'number'\n\t\t\t? `total clauses ${input.sqliteQueryTotalFilterClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryFilteredCandidates === 'number'\n\t\t\t? `filtered ${input.sqliteQueryFilteredCandidates}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryInitialSearchK === 'number' &&\n\t\ttypeof input?.sqliteQueryFinalSearchK === 'number'\n\t\t\t? `searchK ${input.sqliteQueryInitialSearchK}->${input.sqliteQueryFinalSearchK}`\n\t\t\t: typeof input?.sqliteQueryFinalSearchK === 'number'\n\t\t\t\t? `searchK ${input.sqliteQueryFinalSearchK}`\n\t\t\t\t: undefined,\n\t\ttypeof input?.sqliteQuerySearchExpansionRatio === 'number'\n\t\t\t? `expand ${(input.sqliteQuerySearchExpansionRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryBackfillCount === 'number'\n\t\t\t? `backfill ${input.sqliteQueryBackfillCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryBackfillLimitReached === 'boolean' &&\n\t\tinput.sqliteQueryBackfillLimitReached\n\t\t\t? 'backfill limit reached'\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryMinResultsSatisfied === 'boolean' &&\n\t\tinput.sqliteQueryMinResultsSatisfied\n\t\t\t? 'min satisfied'\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryReturnedCount === 'number'\n\t\t\t? `returned ${input.sqliteQueryReturnedCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryCandidateYieldRatio === 'number'\n\t\t\t? `yield ${(input.sqliteQueryCandidateYieldRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryTopKFillRatio === 'number'\n\t\t\t? `fill ${(input.sqliteQueryTopKFillRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\tinput?.sqliteQueryCandidateCoverage\n\t\t\t? `coverage ${input.sqliteQueryCandidateCoverage}`\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryUnderfilledTopK === 'boolean' &&\n\t\tinput.sqliteQueryUnderfilledTopK\n\t\t\t? 'underfilled topK'\n\t\t\t: undefined,\n\t\ttypeof input?.sqliteQueryCandidateBudgetExhausted === 'boolean' &&\n\t\tinput.sqliteQueryCandidateBudgetExhausted\n\t\t\t? 'budget exhausted'\n\t\t\t: undefined,\n\t\tplannerJudgment\n\t].filter((value): value is string => typeof value === 'string');\n\n\treturn parts.length > 0 ? parts.join(' · ') : 'none';\n};\n\nconst formatPostgresPlannerCueSummary = (input?: {\n\tpostgresQueryMode?: string;\n\tpostgresQueryPushdownMode?: string;\n\tpostgresQueryPushdownApplied?: boolean;\n\tpostgresQueryPushdownClauseCount?: number;\n\tpostgresQueryPushdownCoverageRatio?: number;\n\tpostgresQueryTotalFilterClauseCount?: number;\n\tpostgresQueryJsRemainderClauseCount?: number;\n\tpostgresQueryMultiplierUsed?: number;\n\tpostgresQueryCandidateLimitUsed?: number;\n\tpostgresQueryMaxBackfillsUsed?: number;\n\tpostgresQueryMinResultsUsed?: number;\n\tpostgresQueryFillPolicyUsed?: string;\n\tpostgresQueryJsRemainderRatio?: number;\n\tpostgresQueryFilteredCandidates?: number;\n\tpostgresQueryInitialSearchK?: number;\n\tpostgresQueryFinalSearchK?: number;\n\tpostgresQuerySearchExpansionRatio?: number;\n\tpostgresQueryBackfillCount?: number;\n\tpostgresQueryBackfillLimitReached?: boolean;\n\tpostgresQueryMinResultsSatisfied?: boolean;\n\tpostgresQueryReturnedCount?: number;\n\tpostgresQueryCandidateYieldRatio?: number;\n\tpostgresQueryTopKFillRatio?: number;\n\tpostgresQueryUnderfilledTopK?: boolean;\n\tpostgresQueryCandidateBudgetExhausted?: boolean;\n\tpostgresQueryCandidateCoverage?: string;\n}) => {\n\tconst plannerJudgment =\n\t\ttypeof input?.postgresQuerySearchExpansionRatio === 'number' &&\n\t\ttypeof input?.postgresQueryCandidateYieldRatio === 'number' &&\n\t\tinput.postgresQuerySearchExpansionRatio >= 2 &&\n\t\tinput.postgresQueryCandidateYieldRatio < 0.25\n\t\t\t? 'expensive backfill'\n\t\t\t: typeof input?.postgresQueryTopKFillRatio === 'number' &&\n\t\t\t\t typeof input?.postgresQueryCandidateYieldRatio === 'number' &&\n\t\t\t\t input.postgresQueryTopKFillRatio >= 1 &&\n\t\t\t\t input.postgresQueryCandidateYieldRatio >= 0.5\n\t\t\t\t? 'efficient fill'\n\t\t\t\t: input?.postgresQueryPushdownMode === 'full' &&\n\t\t\t\t\t typeof input?.postgresQueryPushdownCoverageRatio ===\n\t\t\t\t\t\t\t'number' &&\n\t\t\t\t\t input.postgresQueryPushdownCoverageRatio >= 1\n\t\t\t\t\t? 'full pushdown'\n\t\t\t\t\t: input?.postgresQueryPushdownMode === 'partial' &&\n\t\t\t\t\t\t typeof input?.postgresQueryJsRemainderRatio ===\n\t\t\t\t\t\t\t\t'number' &&\n\t\t\t\t\t\t input.postgresQueryJsRemainderRatio >= 0.5\n\t\t\t\t\t\t? 'heavy js remainder'\n\t\t\t\t\t\t: undefined;\n\n\tconst parts = [\n\t\tinput?.postgresQueryMode\n\t\t\t? `mode ${input.postgresQueryMode}`\n\t\t\t: undefined,\n\t\tinput?.postgresQueryPushdownMode\n\t\t\t? `pushdown ${input.postgresQueryPushdownMode}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryPushdownApplied === 'boolean'\n\t\t\t? input.postgresQueryPushdownApplied\n\t\t\t\t? 'pushdown on'\n\t\t\t\t: 'pushdown off'\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryPushdownClauseCount === 'number'\n\t\t\t? `clauses ${input.postgresQueryPushdownClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryPushdownCoverageRatio === 'number'\n\t\t\t? `pushdown ${(input.postgresQueryPushdownCoverageRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryJsRemainderClauseCount === 'number'\n\t\t\t? `js remainder ${input.postgresQueryJsRemainderClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryMultiplierUsed === 'number'\n\t\t\t? `x${input.postgresQueryMultiplierUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryCandidateLimitUsed === 'number'\n\t\t\t? `cap ${input.postgresQueryCandidateLimitUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryMaxBackfillsUsed === 'number'\n\t\t\t? `backfills ${input.postgresQueryMaxBackfillsUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryMinResultsUsed === 'number'\n\t\t\t? `min ${input.postgresQueryMinResultsUsed}`\n\t\t\t: undefined,\n\t\tinput?.postgresQueryFillPolicyUsed\n\t\t\t? `fill ${input.postgresQueryFillPolicyUsed}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryJsRemainderRatio === 'number'\n\t\t\t? `js ${(input.postgresQueryJsRemainderRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryTotalFilterClauseCount === 'number'\n\t\t\t? `total clauses ${input.postgresQueryTotalFilterClauseCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryFilteredCandidates === 'number'\n\t\t\t? `filtered ${input.postgresQueryFilteredCandidates}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryInitialSearchK === 'number' &&\n\t\ttypeof input?.postgresQueryFinalSearchK === 'number'\n\t\t\t? `searchK ${input.postgresQueryInitialSearchK}->${input.postgresQueryFinalSearchK}`\n\t\t\t: typeof input?.postgresQueryFinalSearchK === 'number'\n\t\t\t\t? `searchK ${input.postgresQueryFinalSearchK}`\n\t\t\t\t: undefined,\n\t\ttypeof input?.postgresQuerySearchExpansionRatio === 'number'\n\t\t\t? `expand ${(input.postgresQuerySearchExpansionRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryBackfillCount === 'number'\n\t\t\t? `backfill ${input.postgresQueryBackfillCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryBackfillLimitReached === 'boolean' &&\n\t\tinput.postgresQueryBackfillLimitReached\n\t\t\t? 'backfill limit reached'\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryMinResultsSatisfied === 'boolean' &&\n\t\tinput.postgresQueryMinResultsSatisfied\n\t\t\t? 'min satisfied'\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryReturnedCount === 'number'\n\t\t\t? `returned ${input.postgresQueryReturnedCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryCandidateYieldRatio === 'number'\n\t\t\t? `yield ${(input.postgresQueryCandidateYieldRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryTopKFillRatio === 'number'\n\t\t\t? `fill ${(input.postgresQueryTopKFillRatio * 100).toFixed(0)}%`\n\t\t\t: undefined,\n\t\tinput?.postgresQueryCandidateCoverage\n\t\t\t? `coverage ${input.postgresQueryCandidateCoverage}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryUnderfilledTopK === 'boolean' &&\n\t\tinput.postgresQueryUnderfilledTopK\n\t\t\t? 'underfilled topK'\n\t\t\t: undefined,\n\t\ttypeof input?.postgresQueryCandidateBudgetExhausted === 'boolean' &&\n\t\tinput.postgresQueryCandidateBudgetExhausted\n\t\t\t? 'budget exhausted'\n\t\t\t: undefined,\n\t\tplannerJudgment\n\t].filter((value): value is string => typeof value === 'string');\n\n\treturn parts.length > 0 ? parts.join(' · ') : 'none';\n};\n\nconst formatComparisonSQLitePlannerCueSummary = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst labels = Array.from(\n\t\tnew Set(\n\t\t\t(entry.caseTraceSnapshots ?? [])\n\t\t\t\t.map((snapshot) =>\n\t\t\t\t\tformatSQLitePlannerCueSummary({\n\t\t\t\t\t\tsqliteQueryBackfillCount:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryBackfillCount,\n\t\t\t\t\t\tsqliteQueryCandidateBudgetExhausted:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryCandidateBudgetExhausted,\n\t\t\t\t\t\tsqliteQueryCandidateCoverage:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryCandidateCoverage,\n\t\t\t\t\t\tsqliteQueryFilteredCandidates:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryFilteredCandidates,\n\t\t\t\t\t\tsqliteQueryFinalSearchK:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryFinalSearchK,\n\t\t\t\t\t\tsqliteQueryInitialSearchK:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryInitialSearchK,\n\t\t\t\t\t\tsqliteQuerySearchExpansionRatio:\n\t\t\t\t\t\t\tsnapshot.sqliteQuerySearchExpansionRatio,\n\t\t\t\t\t\tsqliteQueryJsRemainderClauseCount:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryJsRemainderClauseCount,\n\t\t\t\t\t\tsqliteQueryCandidateLimitUsed:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryCandidateLimitUsed,\n\t\t\t\t\t\tsqliteQueryMaxBackfillsUsed:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryMaxBackfillsUsed,\n\t\t\t\t\t\tsqliteQueryMinResultsUsed:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryMinResultsUsed,\n\t\t\t\t\t\tsqliteQueryFillPolicyUsed:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryFillPolicyUsed,\n\t\t\t\t\t\tsqliteQueryMode: snapshot.sqliteQueryMode,\n\t\t\t\t\t\tsqliteQueryPushdownApplied:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryPushdownApplied,\n\t\t\t\t\t\tsqliteQueryPushdownClauseCount:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryPushdownClauseCount,\n\t\t\t\t\t\tsqliteQueryPushdownCoverageRatio:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryPushdownCoverageRatio,\n\t\t\t\t\t\tsqliteQueryPushdownMode:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryPushdownMode,\n\t\t\t\t\t\tsqliteQueryTotalFilterClauseCount:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryTotalFilterClauseCount,\n\t\t\t\t\t\tsqliteQueryReturnedCount:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryReturnedCount,\n\t\t\t\t\t\tsqliteQueryBackfillLimitReached:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryBackfillLimitReached,\n\t\t\t\t\t\tsqliteQueryMinResultsSatisfied:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryMinResultsSatisfied,\n\t\t\t\t\t\tsqliteQueryCandidateYieldRatio:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryCandidateYieldRatio,\n\t\t\t\t\t\tsqliteQueryTopKFillRatio:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryTopKFillRatio,\n\t\t\t\t\t\tsqliteQueryJsRemainderRatio:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryJsRemainderRatio,\n\t\t\t\t\t\tsqliteQueryUnderfilledTopK:\n\t\t\t\t\t\t\tsnapshot.sqliteQueryUnderfilledTopK\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.filter(\n\t\t\t\t\t(value): value is string =>\n\t\t\t\t\t\ttypeof value === 'string' && value !== 'none'\n\t\t\t\t)\n\t\t)\n\t).slice(0, 3);\n\n\treturn labels.length > 0 ? labels.join(' · ') : 'none';\n};\n\nconst formatComparisonPostgresPlannerCueSummary = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst labels = Array.from(\n\t\tnew Set(\n\t\t\t(entry.caseTraceSnapshots ?? [])\n\t\t\t\t.map((snapshot) =>\n\t\t\t\t\tformatPostgresPlannerCueSummary({\n\t\t\t\t\t\tpostgresQueryBackfillCount:\n\t\t\t\t\t\t\tsnapshot.postgresQueryBackfillCount,\n\t\t\t\t\t\tpostgresQueryCandidateBudgetExhausted:\n\t\t\t\t\t\t\tsnapshot.postgresQueryCandidateBudgetExhausted,\n\t\t\t\t\t\tpostgresQueryCandidateCoverage:\n\t\t\t\t\t\t\tsnapshot.postgresQueryCandidateCoverage,\n\t\t\t\t\t\tpostgresQueryFilteredCandidates:\n\t\t\t\t\t\t\tsnapshot.postgresQueryFilteredCandidates,\n\t\t\t\t\t\tpostgresQueryFinalSearchK:\n\t\t\t\t\t\t\tsnapshot.postgresQueryFinalSearchK,\n\t\t\t\t\t\tpostgresQueryInitialSearchK:\n\t\t\t\t\t\t\tsnapshot.postgresQueryInitialSearchK,\n\t\t\t\t\t\tpostgresQuerySearchExpansionRatio:\n\t\t\t\t\t\t\tsnapshot.postgresQuerySearchExpansionRatio,\n\t\t\t\t\t\tpostgresQueryJsRemainderClauseCount:\n\t\t\t\t\t\t\tsnapshot.postgresQueryJsRemainderClauseCount,\n\t\t\t\t\t\tpostgresQueryCandidateLimitUsed:\n\t\t\t\t\t\t\tsnapshot.postgresQueryCandidateLimitUsed,\n\t\t\t\t\t\tpostgresQueryMaxBackfillsUsed:\n\t\t\t\t\t\t\tsnapshot.postgresQueryMaxBackfillsUsed,\n\t\t\t\t\t\tpostgresQueryMinResultsUsed:\n\t\t\t\t\t\t\tsnapshot.postgresQueryMinResultsUsed,\n\t\t\t\t\t\tpostgresQueryFillPolicyUsed:\n\t\t\t\t\t\t\tsnapshot.postgresQueryFillPolicyUsed,\n\t\t\t\t\t\tpostgresQueryMultiplierUsed:\n\t\t\t\t\t\t\tsnapshot.postgresQueryMultiplierUsed,\n\t\t\t\t\t\tpostgresQueryMode: snapshot.postgresQueryMode,\n\t\t\t\t\t\tpostgresQueryPushdownApplied:\n\t\t\t\t\t\t\tsnapshot.postgresQueryPushdownApplied,\n\t\t\t\t\t\tpostgresQueryPushdownClauseCount:\n\t\t\t\t\t\t\tsnapshot.postgresQueryPushdownClauseCount,\n\t\t\t\t\t\tpostgresQueryPushdownCoverageRatio:\n\t\t\t\t\t\t\tsnapshot.postgresQueryPushdownCoverageRatio,\n\t\t\t\t\t\tpostgresQueryPushdownMode:\n\t\t\t\t\t\t\tsnapshot.postgresQueryPushdownMode,\n\t\t\t\t\t\tpostgresQueryTotalFilterClauseCount:\n\t\t\t\t\t\t\tsnapshot.postgresQueryTotalFilterClauseCount,\n\t\t\t\t\t\tpostgresQueryReturnedCount:\n\t\t\t\t\t\t\tsnapshot.postgresQueryReturnedCount,\n\t\t\t\t\t\tpostgresQueryBackfillLimitReached:\n\t\t\t\t\t\t\tsnapshot.postgresQueryBackfillLimitReached,\n\t\t\t\t\t\tpostgresQueryMinResultsSatisfied:\n\t\t\t\t\t\t\tsnapshot.postgresQueryMinResultsSatisfied,\n\t\t\t\t\t\tpostgresQueryCandidateYieldRatio:\n\t\t\t\t\t\t\tsnapshot.postgresQueryCandidateYieldRatio,\n\t\t\t\t\t\tpostgresQueryTopKFillRatio:\n\t\t\t\t\t\t\tsnapshot.postgresQueryTopKFillRatio,\n\t\t\t\t\t\tpostgresQueryJsRemainderRatio:\n\t\t\t\t\t\t\tsnapshot.postgresQueryJsRemainderRatio,\n\t\t\t\t\t\tpostgresQueryUnderfilledTopK:\n\t\t\t\t\t\t\tsnapshot.postgresQueryUnderfilledTopK\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\t.filter(\n\t\t\t\t\t(value): value is string =>\n\t\t\t\t\t\ttypeof value === 'string' && value !== 'none'\n\t\t\t\t)\n\t\t)\n\t).slice(0, 3);\n\n\treturn labels.length > 0 ? labels.join(' · ') : 'none';\n};\n\nconst formatComparisonLeadDrift = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tif (\n\t\t!leader?.caseTraceSnapshots?.length ||\n\t\t!entry.caseTraceSnapshots?.length\n\t) {\n\t\treturn 'none';\n\t}\n\n\tconst leaderCases = new Map(\n\t\tleader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot])\n\t);\n\n\tconst drift = entry.caseTraceSnapshots\n\t\t.map((snapshot) => {\n\t\t\tconst leaderSnapshot = leaderCases.get(snapshot.caseId);\n\t\t\tconst currentLead = buildComparisonCaseLeadLabel(snapshot);\n\t\t\tconst leaderLead = buildComparisonCaseLeadLabel(leaderSnapshot);\n\t\t\tif (!currentLead || !leaderLead || currentLead === leaderLead) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${snapshot.label ?? snapshot.caseId} ${leaderLead}→${currentLead}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn drift.length > 0 ? drift.join(' · ') : 'none';\n};\n\nconst formatComparisonLeadMediaDrift = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tif (\n\t\t!leader?.caseTraceSnapshots?.length ||\n\t\t!entry.caseTraceSnapshots?.length\n\t) {\n\t\treturn 'none';\n\t}\n\n\tconst leaderCases = new Map(\n\t\tleader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot])\n\t);\n\n\tconst drift = entry.caseTraceSnapshots\n\t\t.map((snapshot) => {\n\t\t\tconst leaderSnapshot = leaderCases.get(snapshot.caseId);\n\t\t\tconst currentMediaCues = formatLeadMediaCueSummary({\n\t\t\t\tleadSpeakerCue: snapshot.leadSpeakerCue,\n\t\t\t\tleadSpeakerAttributionCue: snapshot.leadSpeakerAttributionCue,\n\t\t\t\tleadChannelCue: snapshot.leadChannelCue,\n\t\t\t\tleadChannelAttributionCue: snapshot.leadChannelAttributionCue,\n\t\t\t\tleadContinuityCue: snapshot.leadContinuityCue\n\t\t\t});\n\t\t\tconst leaderMediaCues = formatLeadMediaCueSummary({\n\t\t\t\tleadSpeakerCue: leaderSnapshot?.leadSpeakerCue,\n\t\t\t\tleadSpeakerAttributionCue:\n\t\t\t\t\tleaderSnapshot?.leadSpeakerAttributionCue,\n\t\t\t\tleadChannelCue: leaderSnapshot?.leadChannelCue,\n\t\t\t\tleadChannelAttributionCue:\n\t\t\t\t\tleaderSnapshot?.leadChannelAttributionCue,\n\t\t\t\tleadContinuityCue: leaderSnapshot?.leadContinuityCue\n\t\t\t});\n\t\t\tif (\n\t\t\t\tcurrentMediaCues === 'none' ||\n\t\t\t\tleaderMediaCues === 'none' ||\n\t\t\t\tcurrentMediaCues === leaderMediaCues\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${snapshot.label ?? snapshot.caseId} ${leaderMediaCues}→${currentMediaCues}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn drift.length > 0 ? drift.join(' · ') : 'none';\n};\n\nconst formatComparisonSQLitePlannerDrift = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tif (\n\t\t!leader?.caseTraceSnapshots?.length ||\n\t\t!entry.caseTraceSnapshots?.length\n\t) {\n\t\treturn 'none';\n\t}\n\n\tconst leaderCases = new Map(\n\t\tleader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot])\n\t);\n\n\tconst drift = entry.caseTraceSnapshots\n\t\t.map((snapshot) => {\n\t\t\tconst leaderSnapshot = leaderCases.get(snapshot.caseId);\n\t\t\tconst currentPlanner = formatSQLitePlannerCueSummary(snapshot);\n\t\t\tconst leaderPlanner = formatSQLitePlannerCueSummary(leaderSnapshot);\n\t\t\tif (\n\t\t\t\tcurrentPlanner === 'none' ||\n\t\t\t\tleaderPlanner === 'none' ||\n\t\t\t\tcurrentPlanner === leaderPlanner\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${snapshot.label ?? snapshot.caseId} ${leaderPlanner}→${currentPlanner}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn drift.length > 0 ? drift.join(' · ') : 'none';\n};\n\nconst formatComparisonPostgresPlannerDrift = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tif (\n\t\t!leader?.caseTraceSnapshots?.length ||\n\t\t!entry.caseTraceSnapshots?.length\n\t) {\n\t\treturn 'none';\n\t}\n\n\tconst leaderCases = new Map(\n\t\tleader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot])\n\t);\n\n\tconst drift = entry.caseTraceSnapshots\n\t\t.map((snapshot) => {\n\t\t\tconst leaderSnapshot = leaderCases.get(snapshot.caseId);\n\t\t\tconst currentPlanner = formatPostgresPlannerCueSummary(snapshot);\n\t\t\tconst leaderPlanner =\n\t\t\t\tformatPostgresPlannerCueSummary(leaderSnapshot);\n\t\t\tif (\n\t\t\t\tcurrentPlanner === 'none' ||\n\t\t\t\tleaderPlanner === 'none' ||\n\t\t\t\tcurrentPlanner === leaderPlanner\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${snapshot.label ?? snapshot.caseId} ${leaderPlanner}→${currentPlanner}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn drift.length > 0 ? drift.join(' · ') : 'none';\n};\n\nconst formatComparisonRoutingCueSummary = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst trace = entry.traceSummary;\n\tif (!trace) {\n\t\treturn 'none';\n\t}\n\n\tconst parts = [\n\t\t`modes ${formatTraceModes(trace.modes)}`,\n\t\t`balance ${formatSourceBalanceStrategies(trace.sourceBalanceStrategies)}`,\n\t\t`rewrites ${formatTraceRatio(trace.transformedCases, trace.totalCases)}`,\n\t\t`variants ${formatTraceRatio(trace.variantCases, trace.totalCases)}`\n\t].filter((value) => !value.endsWith('n/a'));\n\n\treturn parts.length > 0 ? parts.join(' · ') : 'none';\n};\n\nconst formatComparisonRoutingDrift = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n) => {\n\tconst trace = entry.traceSummary;\n\tconst leaderTrace = leader?.traceSummary;\n\tif (!trace || !leaderTrace || entry === leader) {\n\t\treturn 'none';\n\t}\n\n\tconst deltas: string[] = [];\n\tconst currentModes = formatTraceModes(trace.modes);\n\tconst previousModes = formatTraceModes(leaderTrace.modes);\n\tif (currentModes !== previousModes) {\n\t\tdeltas.push(`modes ${previousModes}→${currentModes}`);\n\t}\n\n\tconst currentBalance = formatSourceBalanceStrategies(\n\t\ttrace.sourceBalanceStrategies\n\t);\n\tconst previousBalance = formatSourceBalanceStrategies(\n\t\tleaderTrace.sourceBalanceStrategies\n\t);\n\tif (currentBalance !== previousBalance) {\n\t\tdeltas.push(`balance ${previousBalance}→${currentBalance}`);\n\t}\n\n\tconst transformedDelta =\n\t\ttrace.transformedCases - leaderTrace.transformedCases;\n\tif (transformedDelta !== 0) {\n\t\tdeltas.push(`rewrites ${formatTraceCountDelta(transformedDelta)}`);\n\t}\n\n\tconst variantDelta = trace.variantCases - leaderTrace.variantCases;\n\tif (variantDelta !== 0) {\n\t\tdeltas.push(`variants ${formatTraceCountDelta(variantDelta)}`);\n\t}\n\n\treturn deltas.length > 0 ? deltas.slice(0, 3).join(' · ') : 'none';\n};\n\nconst formatHistoryRoutingShift = (history?: RAGEvaluationHistory) => {\n\tconst delta = history?.diff?.traceSummaryDelta;\n\tif (!delta) {\n\t\treturn 'none';\n\t}\n\n\tconst shifts: string[] = [];\n\tif (delta.modesChanged) {\n\t\tshifts.push('modes changed');\n\t}\n\tif (delta.sourceBalanceStrategiesChanged) {\n\t\tshifts.push('balance changed');\n\t}\n\tif (delta.transformedCases !== 0) {\n\t\tshifts.push(\n\t\t\t`rewrites ${formatTraceCountDelta(delta.transformedCases)}`\n\t\t);\n\t}\n\tif (delta.variantCases !== 0) {\n\t\tshifts.push(`variants ${formatTraceCountDelta(delta.variantCases)}`);\n\t}\n\n\treturn shifts.length > 0 ? shifts.join(' · ') : 'none';\n};\n\nconst formatHistorySQLitePlannerShift = (history?: RAGEvaluationHistory) => {\n\tif (!history?.caseTraceSnapshots.length) {\n\t\treturn 'none';\n\t}\n\n\tconst shifts = history.caseTraceSnapshots\n\t\t.map((entry) => {\n\t\t\tconst previousPlanner = formatSQLitePlannerCueSummary({\n\t\t\t\tsqliteQueryBackfillCount:\n\t\t\t\t\tentry.previousSqliteQueryBackfillCount,\n\t\t\t\tsqliteQueryCandidateBudgetExhausted:\n\t\t\t\t\tentry.previousSqliteQueryCandidateBudgetExhausted,\n\t\t\t\tsqliteQueryCandidateCoverage:\n\t\t\t\t\tentry.previousSqliteQueryCandidateCoverage,\n\t\t\t\tsqliteQueryFilteredCandidates:\n\t\t\t\t\tentry.previousSqliteQueryFilteredCandidates,\n\t\t\t\tsqliteQueryFinalSearchK: entry.previousSqliteQueryFinalSearchK,\n\t\t\t\tsqliteQueryInitialSearchK:\n\t\t\t\t\tentry.previousSqliteQueryInitialSearchK,\n\t\t\t\tsqliteQuerySearchExpansionRatio:\n\t\t\t\t\tentry.previousSqliteQuerySearchExpansionRatio,\n\t\t\t\tsqliteQueryJsRemainderClauseCount:\n\t\t\t\t\tentry.previousSqliteQueryJsRemainderClauseCount,\n\t\t\t\tsqliteQueryCandidateLimitUsed:\n\t\t\t\t\tentry.previousSqliteQueryCandidateLimitUsed,\n\t\t\t\tsqliteQueryMaxBackfillsUsed:\n\t\t\t\t\tentry.previousSqliteQueryMaxBackfillsUsed,\n\t\t\t\tsqliteQueryMinResultsUsed:\n\t\t\t\t\tentry.previousSqliteQueryMinResultsUsed,\n\t\t\t\tsqliteQueryFillPolicyUsed:\n\t\t\t\t\tentry.previousSqliteQueryFillPolicyUsed,\n\t\t\t\tsqliteQueryMode: entry.previousSqliteQueryMode,\n\t\t\t\tsqliteQueryPushdownApplied:\n\t\t\t\t\tentry.previousSqliteQueryPushdownApplied,\n\t\t\t\tsqliteQueryPushdownClauseCount:\n\t\t\t\t\tentry.previousSqliteQueryPushdownClauseCount,\n\t\t\t\tsqliteQueryPushdownCoverageRatio:\n\t\t\t\t\tentry.previousSqliteQueryPushdownCoverageRatio,\n\t\t\t\tsqliteQueryPushdownMode: entry.previousSqliteQueryPushdownMode,\n\t\t\t\tsqliteQueryTotalFilterClauseCount:\n\t\t\t\t\tentry.previousSqliteQueryTotalFilterClauseCount,\n\t\t\t\tsqliteQueryJsRemainderRatio:\n\t\t\t\t\tentry.previousSqliteQueryJsRemainderRatio,\n\t\t\t\tsqliteQueryReturnedCount:\n\t\t\t\t\tentry.previousSqliteQueryReturnedCount,\n\t\t\t\tsqliteQueryBackfillLimitReached:\n\t\t\t\t\tentry.previousSqliteQueryBackfillLimitReached,\n\t\t\t\tsqliteQueryMinResultsSatisfied:\n\t\t\t\t\tentry.previousSqliteQueryMinResultsSatisfied,\n\t\t\t\tsqliteQueryCandidateYieldRatio:\n\t\t\t\t\tentry.previousSqliteQueryCandidateYieldRatio,\n\t\t\t\tsqliteQueryTopKFillRatio:\n\t\t\t\t\tentry.previousSqliteQueryTopKFillRatio,\n\t\t\t\tsqliteQueryUnderfilledTopK:\n\t\t\t\t\tentry.previousSqliteQueryUnderfilledTopK\n\t\t\t});\n\t\t\tconst currentPlanner = formatSQLitePlannerCueSummary(entry);\n\n\t\t\tif (\n\t\t\t\tpreviousPlanner === 'none' ||\n\t\t\t\tcurrentPlanner === 'none' ||\n\t\t\t\tpreviousPlanner === currentPlanner\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${entry.label ?? entry.caseId} ${previousPlanner}→${currentPlanner}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn shifts.length > 0 ? shifts.join(' · ') : 'none';\n};\n\nconst formatHistoryPostgresPlannerShift = (history?: RAGEvaluationHistory) => {\n\tif (!history?.caseTraceSnapshots.length) {\n\t\treturn 'none';\n\t}\n\n\tconst shifts = history.caseTraceSnapshots\n\t\t.map((entry) => {\n\t\t\tconst previousPlanner = formatPostgresPlannerCueSummary({\n\t\t\t\tpostgresQueryBackfillCount:\n\t\t\t\t\tentry.previousPostgresQueryBackfillCount,\n\t\t\t\tpostgresQueryCandidateBudgetExhausted:\n\t\t\t\t\tentry.previousPostgresQueryCandidateBudgetExhausted,\n\t\t\t\tpostgresQueryCandidateCoverage:\n\t\t\t\t\tentry.previousPostgresQueryCandidateCoverage,\n\t\t\t\tpostgresQueryFilteredCandidates:\n\t\t\t\t\tentry.previousPostgresQueryFilteredCandidates,\n\t\t\t\tpostgresQueryFinalSearchK:\n\t\t\t\t\tentry.previousPostgresQueryFinalSearchK,\n\t\t\t\tpostgresQueryInitialSearchK:\n\t\t\t\t\tentry.previousPostgresQueryInitialSearchK,\n\t\t\t\tpostgresQuerySearchExpansionRatio:\n\t\t\t\t\tentry.previousPostgresQuerySearchExpansionRatio,\n\t\t\t\tpostgresQueryJsRemainderClauseCount:\n\t\t\t\t\tentry.previousPostgresQueryJsRemainderClauseCount,\n\t\t\t\tpostgresQueryCandidateLimitUsed:\n\t\t\t\t\tentry.previousPostgresQueryCandidateLimitUsed,\n\t\t\t\tpostgresQueryMaxBackfillsUsed:\n\t\t\t\t\tentry.previousPostgresQueryMaxBackfillsUsed,\n\t\t\t\tpostgresQueryMinResultsUsed:\n\t\t\t\t\tentry.previousPostgresQueryMinResultsUsed,\n\t\t\t\tpostgresQueryFillPolicyUsed:\n\t\t\t\t\tentry.previousPostgresQueryFillPolicyUsed,\n\t\t\t\tpostgresQueryMultiplierUsed:\n\t\t\t\t\tentry.previousPostgresQueryMultiplierUsed,\n\t\t\t\tpostgresQueryMode: entry.previousPostgresQueryMode,\n\t\t\t\tpostgresQueryPushdownApplied:\n\t\t\t\t\tentry.previousPostgresQueryPushdownApplied,\n\t\t\t\tpostgresQueryPushdownClauseCount:\n\t\t\t\t\tentry.previousPostgresQueryPushdownClauseCount,\n\t\t\t\tpostgresQueryPushdownCoverageRatio:\n\t\t\t\t\tentry.previousPostgresQueryPushdownCoverageRatio,\n\t\t\t\tpostgresQueryPushdownMode:\n\t\t\t\t\tentry.previousPostgresQueryPushdownMode,\n\t\t\t\tpostgresQueryTotalFilterClauseCount:\n\t\t\t\t\tentry.previousPostgresQueryTotalFilterClauseCount,\n\t\t\t\tpostgresQueryJsRemainderRatio:\n\t\t\t\t\tentry.previousPostgresQueryJsRemainderRatio,\n\t\t\t\tpostgresQueryReturnedCount:\n\t\t\t\t\tentry.previousPostgresQueryReturnedCount,\n\t\t\t\tpostgresQueryBackfillLimitReached:\n\t\t\t\t\tentry.previousPostgresQueryBackfillLimitReached,\n\t\t\t\tpostgresQueryMinResultsSatisfied:\n\t\t\t\t\tentry.previousPostgresQueryMinResultsSatisfied,\n\t\t\t\tpostgresQueryCandidateYieldRatio:\n\t\t\t\t\tentry.previousPostgresQueryCandidateYieldRatio,\n\t\t\t\tpostgresQueryTopKFillRatio:\n\t\t\t\t\tentry.previousPostgresQueryTopKFillRatio,\n\t\t\t\tpostgresQueryUnderfilledTopK:\n\t\t\t\t\tentry.previousPostgresQueryUnderfilledTopK\n\t\t\t});\n\t\t\tconst currentPlanner = formatPostgresPlannerCueSummary(entry);\n\t\t\tif (\n\t\t\t\tpreviousPlanner === 'none' ||\n\t\t\t\tcurrentPlanner === 'none' ||\n\t\t\t\tpreviousPlanner === currentPlanner\n\t\t\t) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn `${entry.label ?? entry.caseId} ${previousPlanner}→${currentPlanner}`;\n\t\t})\n\t\t.filter((value): value is string => typeof value === 'string')\n\t\t.slice(0, 3);\n\n\treturn shifts.length > 0 ? shifts.join(' · ') : 'none';\n};\n\nconst formatTraceLeadChanges = (\n\tchanges?: Array<{\n\t\tcaseId: string;\n\t\tlabel?: string;\n\t\tpreviousLead?: string;\n\t\tcurrentLead: string;\n\t}>\n) =>\n\tchanges && changes.length > 0\n\t\t? changes\n\t\t\t\t.slice(0, 3)\n\t\t\t\t.map((entry) => {\n\t\t\t\t\tconst label = entry.label ?? entry.caseId;\n\t\t\t\t\tconst previousLead = entry.previousLead ?? 'n/a';\n\t\t\t\t\treturn `${label} ${previousLead}→${entry.currentLead}`;\n\t\t\t\t})\n\t\t\t\t.join(' · ')\n\t\t: 'none';\n\nconst formatGroundingHistoryCaseLabels = (\n\tcases: RAGAnswerGroundingEvaluationCaseDiff[]\n) =>\n\tcases.length > 0\n\t\t? cases.map((entry) => entry.label ?? entry.caseId).join(', ')\n\t\t: 'none';\n\nconst formatRerankerComparisonHeadline = (entry: RAGRerankerComparisonEntry) =>\n\t[\n\t\tentry.label,\n\t\t`passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n\t\t`f1 ${entry.response.summary.averageF1.toFixed(3)}`,\n\t\t`latency ${entry.response.summary.averageLatencyMs.toFixed(1)}ms`\n\t].join(' · ');\n\nconst formatRetrievalComparisonHeadline = (\n\tentry: RAGRetrievalComparisonEntry\n) =>\n\t[\n\t\tentry.label,\n\t\t`mode ${entry.retrievalMode}`,\n\t\t`passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n\t\t`f1 ${entry.response.summary.averageF1.toFixed(3)}`,\n\t\t`latency ${entry.response.summary.averageLatencyMs.toFixed(1)}ms`\n\t].join(' · ');\n\nconst formatTraceModes = (modes: RAGHybridRetrievalMode[]) =>\n\tmodes.length > 0 ? modes.join(' / ') : 'n/a';\n\nconst formatSourceBalanceStrategies = (\n\tstrategies: RAGSourceBalanceStrategy[]\n) => (strategies.length > 0 ? strategies.join(' / ') : 'n/a');\n\nconst formatTraceStageSummary = (\n\tstageCounts: Partial<\n\t\tRecord<RAGRetrievalTrace['steps'][number]['stage'], number>\n\t>\n) => {\n\tconst topStages = Object.entries(stageCounts)\n\t\t.sort((left, right) => right[1] - left[1])\n\t\t.slice(0, 3);\n\n\treturn topStages.length > 0\n\t\t? topStages.map(([stage, count]) => `${stage} ${count}`).join(' · ')\n\t\t: 'n/a';\n};\n\nconst formatTraceRatio = (count: number, total: number) => `${count}/${total}`;\n\nconst formatTraceCountDelta = (value: number) =>\n\t`${value >= 0 ? '+' : ''}${value}`;\n\nconst buildComparisonOverviewPresentation = <\n\tTEntry extends {\n\t\tlabel: string;\n\t\tresponse: {\n\t\t\tpassingRate: number;\n\t\t\tsummary: {\n\t\t\t\taverageF1: number;\n\t\t\t\taverageLatencyMs: number;\n\t\t\t};\n\t\t};\n\t}\n>(input: {\n\tentries: TEntry[];\n\tsummary: {\n\t\tbestByPassingRate?: string;\n\t\tbestByAverageF1?: string;\n\t\tfastest?: string;\n\t};\n\tresolveLabel: (id?: string) => string;\n\tresolveEntry: (id?: string) => TEntry | undefined;\n}): RAGComparisonOverviewPresentation => {\n\tconst winnerLabel = input.resolveLabel(input.summary.bestByPassingRate);\n\tconst winnerEntry = input.resolveEntry(input.summary.bestByPassingRate);\n\n\treturn {\n\t\trows: [\n\t\t\t{\n\t\t\t\tlabel: 'Best passing rate',\n\t\t\t\tvalue: input.resolveLabel(input.summary.bestByPassingRate)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Best average F1',\n\t\t\t\tvalue: input.resolveLabel(input.summary.bestByAverageF1)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Fastest',\n\t\t\t\tvalue: input.resolveLabel(input.summary.fastest)\n\t\t\t}\n\t\t],\n\t\twinnerLabel,\n\t\tsummary: winnerEntry\n\t\t\t? `passing ${formatEvaluationPassingRate(winnerEntry.response.passingRate)} · f1 ${winnerEntry.response.summary.averageF1.toFixed(3)} · latency ${winnerEntry.response.summary.averageLatencyMs.toFixed(1)}ms`\n\t\t\t: 'Stored benchmark comparison'\n\t};\n};\n\nexport const buildRAGComparisonTraceSummaryRows = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n): RAGLabelValueRow[] => {\n\tconst trace = entry.traceSummary;\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{\n\t\t\tlabel: 'Lead cues',\n\t\t\tvalue: formatComparisonLeadCueSummary(entry)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Lead media cues',\n\t\t\tvalue: formatComparisonLeadMediaCueSummary(entry)\n\t\t},\n\t\t{\n\t\t\tlabel: 'SQLite planner cues',\n\t\t\tvalue: formatComparisonSQLitePlannerCueSummary(entry)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Postgres planner cues',\n\t\t\tvalue: formatComparisonPostgresPlannerCueSummary(entry)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Routing cues',\n\t\t\tvalue: formatComparisonRoutingCueSummary(entry)\n\t\t}\n\t];\n\n\tif (!trace) {\n\t\trows.unshift({ label: 'Trace', value: 'Unavailable' });\n\t\treturn rows;\n\t}\n\n\trows.push(\n\t\t{ label: 'Modes', value: formatTraceModes(trace.modes) },\n\t\t{\n\t\t\tlabel: 'Balance',\n\t\t\tvalue: formatSourceBalanceStrategies(trace.sourceBalanceStrategies)\n\t\t},\n\t\t{ label: 'Avg final', value: trace.averageFinalCount.toFixed(1) },\n\t\t{ label: 'Avg vector', value: trace.averageVectorCount.toFixed(1) },\n\t\t{ label: 'Avg lexical', value: trace.averageLexicalCount.toFixed(1) },\n\t\t{\n\t\t\tlabel: 'Balanced',\n\t\t\tvalue: formatTraceRatio(trace.balancedCases, trace.totalCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Round robin',\n\t\t\tvalue: formatTraceRatio(trace.roundRobinCases, trace.totalCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Transforms',\n\t\t\tvalue: formatTraceRatio(trace.transformedCases, trace.totalCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Variants',\n\t\t\tvalue: formatTraceRatio(trace.variantCases, trace.totalCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'TopK',\n\t\t\tvalue: `${trace.averageCandidateTopK.toFixed(\n\t\t\t\t1\n\t\t\t)} / ${trace.averageLexicalTopK.toFixed(1)}`\n\t\t},\n\t\t{\n\t\t\tlabel: 'Stages',\n\t\t\tvalue: formatTraceStageSummary(trace.stageCounts)\n\t\t}\n\t);\n\n\treturn rows;\n};\n\nexport const buildRAGComparisonTraceDiffRows = (\n\tentry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n\tleader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry\n): RAGLabelValueRow[] => {\n\tconst trace = entry.traceSummary;\n\tconst leadDriftRow = {\n\t\tlabel: 'Lead drift vs leader',\n\t\tvalue: formatComparisonLeadDrift(entry, leader)\n\t} satisfies RAGLabelValueRow;\n\tconst leadMediaDriftRow = {\n\t\tlabel: 'Lead media shift vs leader',\n\t\tvalue: formatComparisonLeadMediaDrift(entry, leader)\n\t} satisfies RAGLabelValueRow;\n\tconst sqlitePlannerDriftRow = {\n\t\tlabel: 'SQLite planner shift vs leader',\n\t\tvalue: formatComparisonSQLitePlannerDrift(entry, leader)\n\t} satisfies RAGLabelValueRow;\n\tconst postgresPlannerDriftRow = {\n\t\tlabel: 'Postgres planner shift vs leader',\n\t\tvalue: formatComparisonPostgresPlannerDrift(entry, leader)\n\t} satisfies RAGLabelValueRow;\n\tconst routingDriftRow = {\n\t\tlabel: 'Routing shift vs leader',\n\t\tvalue: formatComparisonRoutingDrift(entry, leader)\n\t} satisfies RAGLabelValueRow;\n\n\tif (!trace) {\n\t\treturn [\n\t\t\t{ label: 'Trace', value: 'Unavailable for comparison' },\n\t\t\tleadDriftRow,\n\t\t\tleadMediaDriftRow,\n\t\t\tsqlitePlannerDriftRow,\n\t\t\tpostgresPlannerDriftRow,\n\t\t\troutingDriftRow\n\t\t];\n\t}\n\n\tconst leaderTrace = leader?.traceSummary;\n\tif (!leaderTrace) {\n\t\treturn [\n\t\t\t{ label: 'Baseline', value: 'Leader trace unavailable' },\n\t\t\tleadDriftRow,\n\t\t\tleadMediaDriftRow,\n\t\t\tsqlitePlannerDriftRow,\n\t\t\tpostgresPlannerDriftRow,\n\t\t\troutingDriftRow\n\t\t];\n\t}\n\n\tif (entry === leader) {\n\t\treturn [\n\t\t\t{ label: 'Baseline', value: 'Leader strategy' },\n\t\t\tleadDriftRow,\n\t\t\tleadMediaDriftRow,\n\t\t\tsqlitePlannerDriftRow,\n\t\t\tpostgresPlannerDriftRow,\n\t\t\troutingDriftRow\n\t\t];\n\t}\n\n\tconst stageDelta = Object.keys({\n\t\t...leaderTrace.stageCounts,\n\t\t...trace.stageCounts\n\t})\n\t\t.map((stage) => {\n\t\t\tconst typedStage = stage as RAGRetrievalTraceStep['stage'];\n\t\t\tconst delta =\n\t\t\t\t(trace.stageCounts[typedStage] ?? 0) -\n\t\t\t\t(leaderTrace.stageCounts[typedStage] ?? 0);\n\t\t\treturn delta === 0\n\t\t\t\t? null\n\t\t\t\t: `${typedStage} ${formatTraceCountDelta(delta)}`;\n\t\t})\n\t\t.filter((value): value is string => Boolean(value))\n\t\t.slice(0, 3)\n\t\t.join(' · ');\n\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{ label: 'Baseline', value: leader.label }\n\t];\n\n\tif (formatTraceModes(trace.modes) !== formatTraceModes(leaderTrace.modes)) {\n\t\trows.push({\n\t\t\tlabel: 'Modes vs leader',\n\t\t\tvalue: `${formatTraceModes(trace.modes)} vs ${formatTraceModes(\n\t\t\t\tleaderTrace.modes\n\t\t\t)}`\n\t\t});\n\t}\n\n\tif (\n\t\tformatSourceBalanceStrategies(trace.sourceBalanceStrategies) !==\n\t\tformatSourceBalanceStrategies(leaderTrace.sourceBalanceStrategies)\n\t) {\n\t\trows.push({\n\t\t\tlabel: 'Balance vs leader',\n\t\t\tvalue: `${formatSourceBalanceStrategies(\n\t\t\t\ttrace.sourceBalanceStrategies\n\t\t\t)} vs ${formatSourceBalanceStrategies(\n\t\t\t\tleaderTrace.sourceBalanceStrategies\n\t\t\t)}`\n\t\t});\n\t}\n\n\trows.push(\n\t\tleadDriftRow,\n\t\tleadMediaDriftRow,\n\t\tsqlitePlannerDriftRow,\n\t\tpostgresPlannerDriftRow,\n\t\troutingDriftRow\n\t);\n\n\trows.push(\n\t\t{\n\t\t\tlabel: 'Final delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\ttrace.averageFinalCount - leaderTrace.averageFinalCount,\n\t\t\t\t1\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Vector delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\ttrace.averageVectorCount - leaderTrace.averageVectorCount,\n\t\t\t\t1\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Lexical delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\ttrace.averageLexicalCount - leaderTrace.averageLexicalCount,\n\t\t\t\t1\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Transform delta',\n\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\ttrace.transformedCases - leaderTrace.transformedCases\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Balanced delta',\n\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\ttrace.balancedCases - leaderTrace.balancedCases\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Round robin delta',\n\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\ttrace.roundRobinCases - leaderTrace.roundRobinCases\n\t\t\t)\n\t\t}\n\t);\n\n\tif (stageDelta) {\n\t\trows.push({ label: 'Stage delta', value: stageDelta });\n\t}\n\n\treturn rows;\n};\n\nexport const buildRAGRetrievalComparisonPresentations = (\n\tcomparison: RAGRetrievalComparison\n): RAGComparisonPresentation[] => {\n\tconst leader = comparison.entries[0];\n\treturn comparison.entries.map((entry) => ({\n\t\tdiffLabel: leader?.label ?? 'Leader',\n\t\tdiffRows: buildRAGComparisonTraceDiffRows(entry, leader),\n\t\tsummary: formatRetrievalComparisonHeadline(entry),\n\t\tid: entry.retrievalId,\n\t\tlabel: entry.label,\n\t\ttraceSummaryRows: buildRAGComparisonTraceSummaryRows(entry)\n\t}));\n};\n\nexport const buildRAGRetrievalComparisonOverviewPresentation = (\n\tcomparison: RAGRetrievalComparison\n): RAGComparisonOverviewPresentation =>\n\tbuildComparisonOverviewPresentation({\n\t\tentries: comparison.entries,\n\t\tresolveEntry: (id?: string) =>\n\t\t\tcomparison.entries.find((entry) => entry.retrievalId === id),\n\t\tresolveLabel: (id?: string) =>\n\t\t\tcomparison.entries.find((entry) => entry.retrievalId === id)\n\t\t\t\t?.label ??\n\t\t\tid ??\n\t\t\t'n/a',\n\t\tsummary: comparison.summary\n\t});\n\nexport const buildRAGRerankerComparisonPresentations = (\n\tcomparison: RAGRerankerComparison\n): RAGComparisonPresentation[] => {\n\tconst leader = comparison.entries[0];\n\treturn comparison.entries.map((entry) => ({\n\t\tdiffLabel: leader?.label ?? 'Leader',\n\t\tdiffRows: buildRAGComparisonTraceDiffRows(entry, leader),\n\t\tsummary: formatRerankerComparisonHeadline(entry),\n\t\tid: entry.rerankerId,\n\t\tlabel: entry.label,\n\t\ttraceSummaryRows: buildRAGComparisonTraceSummaryRows(entry)\n\t}));\n};\n\nexport const buildRAGRerankerComparisonOverviewPresentation = (\n\tcomparison: RAGRerankerComparison\n): RAGComparisonOverviewPresentation =>\n\tbuildComparisonOverviewPresentation({\n\t\tentries: comparison.entries,\n\t\tresolveEntry: (id?: string) =>\n\t\t\tcomparison.entries.find((entry) => entry.rerankerId === id),\n\t\tresolveLabel: (id?: string) =>\n\t\t\tcomparison.entries.find((entry) => entry.rerankerId === id)\n\t\t\t\t?.label ??\n\t\t\tid ??\n\t\t\t'n/a',\n\t\tsummary: comparison.summary\n\t});\n\nexport const buildRAGGroundingProviderPresentations = (\n\tentries: Array<{\n\t\tproviderKey: string;\n\t\tlabel: string;\n\t\telapsedMs: number;\n\t\tresponse: RAGAnswerGroundingEvaluationResponse;\n\t}>\n): RAGGroundingProviderPresentation[] =>\n\tentries.map((entry) => ({\n\t\tsummary: [\n\t\t\tentry.label,\n\t\t\t`passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n\t\t\t`citation f1 ${entry.response.summary.averageCitationF1.toFixed(3)}`,\n\t\t\t`resolved ${formatEvaluationPassingRate(\n\t\t\t\tentry.response.summary.averageResolvedCitationRate\n\t\t\t)}`,\n\t\t\t`latency ${entry.elapsedMs.toFixed(1)}ms`\n\t\t].join(' · '),\n\t\tid: entry.providerKey,\n\t\tlabel: entry.label\n\t}));\n\nexport const buildRAGGroundingProviderOverviewPresentation = (input: {\n\tentries: Array<{\n\t\tproviderKey: string;\n\t\tlabel: string;\n\t\telapsedMs: number;\n\t\tresponse: RAGAnswerGroundingEvaluationResponse;\n\t}>;\n\tsummary: {\n\t\tbestByPassingRate?: string;\n\t\tbestByAverageCitationF1?: string;\n\t\tbestByResolvedCitationRate?: string;\n\t\tfastest?: string;\n\t};\n}): RAGGroundingProviderOverviewPresentation => {\n\tconst resolveLabel = (key?: string) =>\n\t\tinput.entries.find((entry) => entry.providerKey === key)?.label ??\n\t\tkey ??\n\t\t'n/a';\n\tconst winnerLabel = resolveLabel(input.summary.bestByPassingRate);\n\tconst winnerEntry = input.entries.find(\n\t\t(entry) => entry.providerKey === input.summary.bestByPassingRate\n\t);\n\n\treturn {\n\t\trows: [\n\t\t\t{\n\t\t\t\tlabel: 'Best passing rate',\n\t\t\t\tvalue: resolveLabel(input.summary.bestByPassingRate)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Best citation F1',\n\t\t\t\tvalue: resolveLabel(input.summary.bestByAverageCitationF1)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Best resolved citations',\n\t\t\t\tvalue: resolveLabel(input.summary.bestByResolvedCitationRate)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Fastest',\n\t\t\t\tvalue: resolveLabel(input.summary.fastest)\n\t\t\t}\n\t\t],\n\t\twinnerLabel,\n\t\tsummary: winnerEntry\n\t\t\t? `passing ${formatEvaluationPassingRate(winnerEntry.response.passingRate)} · citation f1 ${winnerEntry.response.summary.averageCitationF1.toFixed(3)} · resolved ${formatEvaluationPassingRate(winnerEntry.response.summary.averageResolvedCitationRate)}`\n\t\t\t: 'Stored workflow evaluation'\n\t};\n};\n\nexport const buildRAGRetrievalOverviewPresentation = (\n\tcomparison: RAGRetrievalComparison\n): RAGQualityOverviewPresentation => ({\n\trows: buildRAGRetrievalComparisonOverviewPresentation(comparison).rows\n});\n\nexport const buildRAGRerankerOverviewPresentation = (\n\tcomparison: RAGRerankerComparison\n): RAGQualityOverviewPresentation => ({\n\trows: buildRAGRerankerComparisonOverviewPresentation(comparison).rows\n});\n\nexport const buildRAGGroundingOverviewPresentation = (input: {\n\tgroundingEvaluation: RAGAnswerGroundingEvaluationResponse;\n\tgroundingProviderOverview?: RAGGroundingProviderOverviewPresentation | null;\n}): RAGGroundingOverviewPresentation => ({\n\trows: [\n\t\t{\n\t\t\tlabel: 'Grounding',\n\t\t\tvalue: formatGroundingHistorySummaryValue(input.groundingEvaluation)\n\t\t},\n\t\t...(input.groundingProviderOverview?.rows ?? [\n\t\t\t{\n\t\t\t\tlabel: 'Grounding providers',\n\t\t\t\tvalue: 'Configure an AI provider to compare grounded answers.'\n\t\t\t}\n\t\t])\n\t]\n});\n\nexport const buildRAGQualityOverviewPresentation = (input: {\n\tretrievalComparison: RAGRetrievalComparison;\n\trerankerComparison: RAGRerankerComparison;\n\tgroundingEvaluation: RAGAnswerGroundingEvaluationResponse;\n\tgroundingProviderOverview?: RAGGroundingProviderOverviewPresentation | null;\n}): RAGQualityOverviewPresentation => ({\n\trows: [\n\t\t...buildRAGRetrievalOverviewPresentation(input.retrievalComparison)\n\t\t\t.rows,\n\t\t...buildRAGRerankerOverviewPresentation(input.rerankerComparison).rows,\n\t\t...buildRAGGroundingOverviewPresentation({\n\t\t\tgroundingEvaluation: input.groundingEvaluation,\n\t\t\tgroundingProviderOverview: input.groundingProviderOverview\n\t\t}).rows\n\t]\n});\n\nexport const buildRAGGroundingProviderCaseComparisonPresentations = (\n\tcomparisons: Array<{\n\t\tcaseId: string;\n\t\tlabel: string;\n\t\tentries: Array<{\n\t\t\tproviderKey: string;\n\t\t\tlabel: string;\n\t\t\tstatus: string;\n\t\t\tcoverage: string;\n\t\t\tcitationF1: number;\n\t\t\tresolvedCitationRate: number;\n\t\t\tmatchedIds: string[];\n\t\t\tmissingIds: string[];\n\t\t\textraIds: string[];\n\t\t\tanswerExcerpt: string;\n\t\t}>;\n\t\tsummary: {\n\t\t\tbestByStatus?: string;\n\t\t\tbestByCitationF1?: string;\n\t\t\tbestByResolvedCitationRate?: string;\n\t\t};\n\t}>\n): RAGGroundingProviderCaseComparisonPresentation[] =>\n\tcomparisons.map((comparison) => {\n\t\tconst resolveLabel = (key?: string) =>\n\t\t\tcomparison.entries.find((entry) => entry.providerKey === key)\n\t\t\t\t?.label ??\n\t\t\tkey ??\n\t\t\t'n/a';\n\n\t\treturn {\n\t\t\tcaseId: comparison.caseId,\n\t\t\tlabel: comparison.label,\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Best grounded',\n\t\t\t\t\tvalue: resolveLabel(comparison.summary.bestByStatus)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Best citation F1',\n\t\t\t\t\tvalue: resolveLabel(comparison.summary.bestByCitationF1)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Best resolved citations',\n\t\t\t\t\tvalue: resolveLabel(\n\t\t\t\t\t\tcomparison.summary.bestByResolvedCitationRate\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t...comparison.entries.map((entry) => ({\n\t\t\t\t\tlabel: entry.label,\n\t\t\t\t\tvalue: [\n\t\t\t\t\t\tentry.status.toUpperCase(),\n\t\t\t\t\t\t`coverage ${entry.coverage}`,\n\t\t\t\t\t\t`f1 ${entry.citationF1.toFixed(3)}`,\n\t\t\t\t\t\t`resolved ${formatEvaluationPassingRate(\n\t\t\t\t\t\t\tentry.resolvedCitationRate\n\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t`matched ${entry.matchedIds.join(', ') || 'none'}`,\n\t\t\t\t\t\t`missing ${entry.missingIds.join(', ') || 'none'}`,\n\t\t\t\t\t\t`extra ${entry.extraIds.join(', ') || 'none'}`,\n\t\t\t\t\t\t`answer ${entry.answerExcerpt || 'n/a'}`\n\t\t\t\t\t].join(' · ')\n\t\t\t\t}))\n\t\t\t],\n\t\t\tsummary: [\n\t\t\t\t`Best grounded: ${resolveLabel(comparison.summary.bestByStatus)}`,\n\t\t\t\t`Best citation F1: ${resolveLabel(\n\t\t\t\t\tcomparison.summary.bestByCitationF1\n\t\t\t\t)}`,\n\t\t\t\t`Best resolved citations: ${resolveLabel(\n\t\t\t\t\tcomparison.summary.bestByResolvedCitationRate\n\t\t\t\t)}`\n\t\t\t].join(' · ')\n\t\t};\n\t});\n\nexport const buildRAGEvaluationHistoryRows = (\n\thistory?: RAGEvaluationHistory\n): RAGLabelValueRow[] => {\n\tif (!history?.latestRun) {\n\t\treturn [\n\t\t\t{ label: 'History', value: 'No persisted benchmark runs yet.' }\n\t\t];\n\t}\n\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{ label: 'Runs recorded', value: String(history.runs.length) },\n\t\t{\n\t\t\tlabel: 'Latest',\n\t\t\tvalue: `${history.latestRun.label} · ${formatEvaluationSummary(\n\t\t\t\thistory.latestRun.response\n\t\t\t)}`\n\t\t}\n\t];\n\n\tif (history.latestRun.traceSummary) {\n\t\trows.push({\n\t\t\tlabel: 'Latest trace',\n\t\t\tvalue: `${formatTraceModes(\n\t\t\t\thistory.latestRun.traceSummary.modes\n\t\t\t)} · balance ${formatSourceBalanceStrategies(\n\t\t\t\thistory.latestRun.traceSummary.sourceBalanceStrategies\n\t\t\t)} · final ${history.latestRun.traceSummary.averageFinalCount.toFixed(\n\t\t\t\t1\n\t\t\t)} · vector ${history.latestRun.traceSummary.averageVectorCount.toFixed(\n\t\t\t\t1\n\t\t\t)} · lexical ${history.latestRun.traceSummary.averageLexicalCount.toFixed(\n\t\t\t\t1\n\t\t\t)}`\n\t\t});\n\t}\n\n\tif (history.previousRun) {\n\t\trows.push({\n\t\t\tlabel: 'Previous',\n\t\t\tvalue: `${history.previousRun.label} · ${formatEvaluationSummary(\n\t\t\t\thistory.previousRun.response\n\t\t\t)}`\n\t\t});\n\t}\n\n\tif (!history.diff) {\n\t\trows.push({\n\t\t\tlabel: 'History diff',\n\t\t\tvalue: 'Run the benchmark again to diff regressions over time.'\n\t\t});\n\t\treturn rows;\n\t}\n\n\trows.push(\n\t\t{\n\t\t\tlabel: 'Passing delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\thistory.diff.summaryDelta.passingRate,\n\t\t\t\t1,\n\t\t\t\t'%'\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Average F1 delta',\n\t\t\tvalue: formatSignedDelta(history.diff.summaryDelta.averageF1, 3)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Latency delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\thistory.diff.summaryDelta.averageLatencyMs,\n\t\t\t\t1,\n\t\t\t\t'ms'\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Improved',\n\t\t\tvalue: formatHistoryCaseLabels(history.diff.improvedCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Regressed',\n\t\t\tvalue: formatHistoryCaseLabels(history.diff.regressedCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Lead drift',\n\t\t\tvalue: formatTraceLeadChanges(history.diff.traceLeadChanges)\n\t\t},\n\t\t{\n\t\t\tlabel: 'SQLite planner shift',\n\t\t\tvalue: formatHistorySQLitePlannerShift(history)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Postgres planner shift',\n\t\t\tvalue: formatHistoryPostgresPlannerShift(history)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Trace routing shift',\n\t\t\tvalue: formatHistoryRoutingShift(history)\n\t\t}\n\t);\n\n\tif (history.previousRun) {\n\t\tconst currentEntityView = buildRAGEvaluationEntityQualityView(\n\t\t\thistory.latestRun.response\n\t\t);\n\t\tconst previousEntityView = buildRAGEvaluationEntityQualityView(\n\t\t\thistory.previousRun.response\n\t\t);\n\t\trows.push(\n\t\t\t{\n\t\t\t\tlabel: 'Source regression hotspots',\n\t\t\t\tvalue: formatEntityRegressionHotspots(\n\t\t\t\t\tcurrentEntityView.bySource,\n\t\t\t\t\tpreviousEntityView.bySource,\n\t\t\t\t\t(entry) => entry.averageF1,\n\t\t\t\t\t'f1'\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Document regression hotspots',\n\t\t\t\tvalue: formatEntityRegressionHotspots(\n\t\t\t\t\tcurrentEntityView.byDocument,\n\t\t\t\t\tpreviousEntityView.byDocument,\n\t\t\t\t\t(entry) => entry.averageF1,\n\t\t\t\t\t'f1'\n\t\t\t\t)\n\t\t\t}\n\t\t);\n\t}\n\n\tif (history.diff.traceSummaryDelta) {\n\t\trows.push(\n\t\t\t{\n\t\t\t\tlabel: 'Trace mode shift',\n\t\t\t\tvalue: history.diff.traceSummaryDelta.modesChanged\n\t\t\t\t\t? 'changed'\n\t\t\t\t\t: 'stable'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace balance shift',\n\t\t\t\tvalue: history.diff.traceSummaryDelta\n\t\t\t\t\t.sourceBalanceStrategiesChanged\n\t\t\t\t\t? 'changed'\n\t\t\t\t\t: 'stable'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace final delta',\n\t\t\t\tvalue: formatSignedDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.averageFinalCount,\n\t\t\t\t\t1\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace vector delta',\n\t\t\t\tvalue: formatSignedDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.averageVectorCount,\n\t\t\t\t\t1\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace lexical delta',\n\t\t\t\tvalue: formatSignedDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.averageLexicalCount,\n\t\t\t\t\t1\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace balanced delta',\n\t\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.balancedCases\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace round robin delta',\n\t\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.roundRobinCases\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace transform delta',\n\t\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.transformedCases\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Trace variant delta',\n\t\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\t\thistory.diff.traceSummaryDelta.variantCases\n\t\t\t\t)\n\t\t\t}\n\t\t);\n\n\t\tconst stageDelta = Object.entries(\n\t\t\thistory.diff.traceSummaryDelta.stageCounts ?? {}\n\t\t)\n\t\t\t.map(([stage, count]) => `${stage} ${formatTraceCountDelta(count)}`)\n\t\t\t.join(', ');\n\n\t\tif (stageDelta) {\n\t\t\trows.push({ label: 'Trace stage delta', value: stageDelta });\n\t\t}\n\t}\n\n\tif (history.caseTraceSnapshots.length > 0) {\n\t\tconst changedCases = history.caseTraceSnapshots.filter(\n\t\t\t(entry) => entry.traceChange === 'changed'\n\t\t);\n\t\trows.push({\n\t\t\tlabel: 'Trace drift cases',\n\t\t\tvalue:\n\t\t\t\tchangedCases.length > 0\n\t\t\t\t\t? changedCases\n\t\t\t\t\t\t\t.map((entry) => entry.label ?? entry.caseId)\n\t\t\t\t\t\t\t.slice(0, 4)\n\t\t\t\t\t\t\t.join(', ')\n\t\t\t\t\t: 'none'\n\t\t});\n\t\trows.push({\n\t\t\tlabel: 'Lead media cues',\n\t\t\tvalue:\n\t\t\t\tArray.from(\n\t\t\t\t\tnew Set(\n\t\t\t\t\t\thistory.caseTraceSnapshots\n\t\t\t\t\t\t\t.map((entry) =>\n\t\t\t\t\t\t\t\tformatLeadMediaCueSummary({\n\t\t\t\t\t\t\t\t\tleadChannelAttributionCue:\n\t\t\t\t\t\t\t\t\t\tentry.leadChannelAttributionCue,\n\t\t\t\t\t\t\t\t\tleadChannelCue: entry.leadChannelCue,\n\t\t\t\t\t\t\t\t\tleadContinuityCue: entry.leadContinuityCue,\n\t\t\t\t\t\t\t\t\tleadSpeakerAttributionCue:\n\t\t\t\t\t\t\t\t\t\tentry.leadSpeakerAttributionCue,\n\t\t\t\t\t\t\t\t\tleadSpeakerCue: entry.leadSpeakerCue\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter((value) => value !== 'none')\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t\t.slice(0, 3)\n\t\t\t\t\t.join(' · ') || 'none'\n\t\t});\n\t}\n\n\treturn rows;\n};\n\nexport const buildRAGEvaluationCaseTracePresentations = (\n\thistory?: RAGEvaluationHistory\n): RAGEvaluationCaseTracePresentation[] => {\n\tif (!history?.caseTraceSnapshots.length) {\n\t\treturn [];\n\t}\n\n\treturn history.caseTraceSnapshots.map((entry) => {\n\t\tconst label = entry.label ?? entry.caseId;\n\t\tconst currentMode = entry.traceMode ?? 'no-trace';\n\t\tconst previousMode = entry.previousTraceMode ?? 'n/a';\n\t\tconst currentBalance = entry.sourceBalanceStrategy ?? 'cap';\n\t\tconst previousBalance = entry.previousSourceBalanceStrategy ?? 'n/a';\n\t\tconst currentVariants =\n\t\t\tentry.variantQueries.length > 0\n\t\t\t\t? entry.variantQueries.join(', ')\n\t\t\t\t: 'none';\n\t\tconst previousVariants =\n\t\t\tentry.previousVariantQueries.length > 0\n\t\t\t\t? entry.previousVariantQueries.join(', ')\n\t\t\t\t: 'none';\n\t\tconst currentStages =\n\t\t\tObject.keys(entry.stageCounts).length > 0\n\t\t\t\t? Object.entries(entry.stageCounts)\n\t\t\t\t\t\t.map(([stage, count]) => `${stage} ${count}`)\n\t\t\t\t\t\t.join(', ')\n\t\t\t\t: 'none';\n\t\tconst previousStages =\n\t\t\tObject.keys(entry.previousStageCounts).length > 0\n\t\t\t\t? Object.entries(entry.previousStageCounts)\n\t\t\t\t\t\t.map(([stage, count]) => `${stage} ${count}`)\n\t\t\t\t\t\t.join(', ')\n\t\t\t\t: 'none';\n\t\tconst currentLeadContext = entry.topContextLabel ?? 'n/a';\n\t\tconst previousLeadContext = entry.previousTopContextLabel ?? 'n/a';\n\t\tconst currentLeadLocation = entry.topLocatorLabel ?? 'n/a';\n\t\tconst previousLeadLocation = entry.previousTopLocatorLabel ?? 'n/a';\n\t\tconst currentBoundary = entry.sourceAwareChunkReasonLabel ?? 'n/a';\n\t\tconst previousBoundary =\n\t\t\tentry.previousSourceAwareChunkReasonLabel ?? 'n/a';\n\t\tconst currentScope = entry.sourceAwareUnitScopeLabel ?? 'n/a';\n\t\tconst previousScope = entry.previousSourceAwareUnitScopeLabel ?? 'n/a';\n\t\tconst currentMediaCues = formatLeadMediaCueSummary({\n\t\t\tleadChannelAttributionCue: entry.leadChannelAttributionCue,\n\t\t\tleadChannelCue: entry.leadChannelCue,\n\t\t\tleadContinuityCue: entry.leadContinuityCue,\n\t\t\tleadSpeakerAttributionCue: entry.leadSpeakerAttributionCue,\n\t\t\tleadSpeakerCue: entry.leadSpeakerCue\n\t\t});\n\t\tconst previousMediaCues = formatLeadMediaCueSummary({\n\t\t\tleadChannelAttributionCue: entry.previousLeadChannelAttributionCue,\n\t\t\tleadChannelCue: entry.previousLeadChannelCue,\n\t\t\tleadContinuityCue: entry.previousLeadContinuityCue,\n\t\t\tleadSpeakerAttributionCue: entry.previousLeadSpeakerAttributionCue,\n\t\t\tleadSpeakerCue: entry.previousLeadSpeakerCue\n\t\t});\n\t\tconst leadSummary =\n\t\t\tentry.topLocatorLabel ??\n\t\t\tentry.topContextLabel ??\n\t\t\tentry.sourceAwareUnitScopeLabel ??\n\t\t\t'n/a';\n\t\tconst previousLeadSummary =\n\t\t\tentry.previousTopLocatorLabel ??\n\t\t\tentry.previousTopContextLabel ??\n\t\t\tentry.previousSourceAwareUnitScopeLabel ??\n\t\t\t'n/a';\n\n\t\treturn {\n\t\t\tcaseId: entry.caseId,\n\t\t\tlabel,\n\t\t\tsummary: `${entry.traceChange} · ${previousMode}→${currentMode} · ${previousBalance}→${currentBalance} · lead ${previousLeadSummary}→${leadSummary} · final ${\n\t\t\t\tentry.previousFinalCount ?? 0\n\t\t\t}→${entry.finalCount}`,\n\t\t\ttraceChange: entry.traceChange,\n\t\t\trows: [\n\t\t\t\t{ label: 'Query', value: entry.query },\n\t\t\t\t{ label: 'Trace change', value: entry.traceChange },\n\t\t\t\t{ label: 'Mode', value: `${previousMode}→${currentMode}` },\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Balance',\n\t\t\t\t\tvalue: `${previousBalance}→${currentBalance}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Transformed query',\n\t\t\t\t\tvalue: `${\n\t\t\t\t\t\tentry.previousTransformedQuery?.trim() || 'n/a'\n\t\t\t\t\t}→${entry.transformedQuery?.trim() || 'n/a'}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Final',\n\t\t\t\t\tvalue: `${entry.previousFinalCount ?? 0}→${entry.finalCount}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Vector',\n\t\t\t\t\tvalue: `${entry.previousVectorCount ?? 0}→${entry.vectorCount}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lexical',\n\t\t\t\t\tvalue: `${entry.previousLexicalCount ?? 0}→${entry.lexicalCount}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Candidate topK',\n\t\t\t\t\tvalue: `${entry.previousCandidateTopK ?? 0}→${entry.candidateTopK}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lexical topK',\n\t\t\t\t\tvalue: `${entry.previousLexicalTopK ?? 0}→${entry.lexicalTopK}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Variants',\n\t\t\t\t\tvalue: `${previousVariants}→${currentVariants}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lead context',\n\t\t\t\t\tvalue: `${previousLeadContext}→${currentLeadContext}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lead location',\n\t\t\t\t\tvalue: `${previousLeadLocation}→${currentLeadLocation}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Chunk boundary',\n\t\t\t\t\tvalue: `${previousBoundary}→${currentBoundary}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Source-aware scope',\n\t\t\t\t\tvalue: `${previousScope}→${currentScope}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Lead media cues',\n\t\t\t\t\tvalue: `${previousMediaCues}→${currentMediaCues}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Stages',\n\t\t\t\t\tvalue: `${previousStages}→${currentStages}`\n\t\t\t\t},\n\t\t\t\t{ label: 'Status', value: entry.status }\n\t\t\t]\n\t\t};\n\t});\n};\n\nexport const buildRAGEvaluationHistoryPresentation = (\n\thistory?: RAGEvaluationHistory\n): RAGEvaluationHistoryPresentation => ({\n\tcaseTraces: buildRAGEvaluationCaseTracePresentations(history),\n\trows: buildRAGEvaluationHistoryRows(history),\n\tsummary: history?.latestRun\n\t\t? history.latestRun.label\n\t\t: 'No persisted benchmark runs yet.'\n});\n\nexport const buildRAGEvaluationSuiteSnapshotRows = (\n\thistory?: RAGEvaluationSuiteSnapshotHistory\n): RAGLabelValueRow[] => {\n\tif (!history?.latestSnapshot) {\n\t\treturn [\n\t\t\t{ label: 'Suite snapshots', value: 'No saved suite snapshots yet.' }\n\t\t];\n\t}\n\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{\n\t\t\tlabel: 'Snapshots recorded',\n\t\t\tvalue: String(history.snapshots.length)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Latest snapshot',\n\t\t\tvalue: `v${history.latestSnapshot.version} · ${history.latestSnapshot.caseCount} cases`\n\t\t}\n\t];\n\n\tif (history.previousSnapshot) {\n\t\trows.push({\n\t\t\tlabel: 'Previous snapshot',\n\t\t\tvalue: `v${history.previousSnapshot.version} · ${history.previousSnapshot.caseCount} cases`\n\t\t});\n\t}\n\n\tif (!history.diff) {\n\t\trows.push({\n\t\t\tlabel: 'Snapshot diff',\n\t\t\tvalue: 'Save another suite snapshot to compare dataset changes.'\n\t\t});\n\t\treturn rows;\n\t}\n\n\trows.push(\n\t\t{\n\t\t\tlabel: 'Case count change',\n\t\t\tvalue: formatSignedDelta(history.diff.caseCountDelta)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Added cases',\n\t\t\tvalue:\n\t\t\t\thistory.diff.addedCaseIds.length > 0\n\t\t\t\t\t? history.diff.addedCaseIds.join(', ')\n\t\t\t\t\t: 'none'\n\t\t},\n\t\t{\n\t\t\tlabel: 'Removed cases',\n\t\t\tvalue:\n\t\t\t\thistory.diff.removedCaseIds.length > 0\n\t\t\t\t\t? history.diff.removedCaseIds.join(', ')\n\t\t\t\t\t: 'none'\n\t\t},\n\t\t{\n\t\t\tlabel: 'Changed cases',\n\t\t\tvalue:\n\t\t\t\thistory.diff.changedCaseIds.length > 0\n\t\t\t\t\t? history.diff.changedCaseIds.join(', ')\n\t\t\t\t\t: 'none'\n\t\t},\n\t\t{\n\t\t\tlabel: 'Order changed',\n\t\t\tvalue: history.diff.orderChanged ? 'changed' : 'stable'\n\t\t}\n\t);\n\n\treturn rows;\n};\n\nexport const buildRAGEvaluationSuiteSnapshotPresentations = (\n\thistory?: RAGEvaluationSuiteSnapshotHistory\n): RAGEvaluationSuiteSnapshotPresentation[] =>\n\t(history?.snapshots ?? []).map((snapshot) => ({\n\t\tid: snapshot.id,\n\t\tlabel: snapshot.label ?? snapshot.suiteId,\n\t\trows: [\n\t\t\t{ label: 'Version', value: `v${snapshot.version}` },\n\t\t\t{ label: 'Created', value: formatDateLabel(snapshot.createdAt) },\n\t\t\t{ label: 'Cases', value: String(snapshot.caseCount) },\n\t\t\t{\n\t\t\t\tlabel: 'Case ids',\n\t\t\t\tvalue:\n\t\t\t\t\tsnapshot.suite.input.cases\n\t\t\t\t\t\t.map((entry) => entry.id)\n\t\t\t\t\t\t.join(', ') || 'none'\n\t\t\t}\n\t\t],\n\t\tsummary: `v${snapshot.version} · ${snapshot.caseCount} cases`,\n\t\tversion: snapshot.version\n\t}));\n\nexport const buildRAGEvaluationSuiteSnapshotHistoryPresentation = (\n\thistory?: RAGEvaluationSuiteSnapshotHistory\n): RAGEvaluationSuiteSnapshotHistoryPresentation => ({\n\trows: buildRAGEvaluationSuiteSnapshotRows(history),\n\tsnapshots: buildRAGEvaluationSuiteSnapshotPresentations(history),\n\tsummary: history?.latestSnapshot\n\t\t? `v${history.latestSnapshot.version}`\n\t\t: 'No saved suite snapshots yet.'\n});\n\nexport const buildRAGAnswerGroundingCaseSnapshotPresentations = (\n\thistory?: RAGAnswerGroundingEvaluationHistory\n): RAGAnswerGroundingCaseSnapshotPresentation[] => {\n\tif (!history?.caseSnapshots.length) {\n\t\treturn [];\n\t}\n\n\treturn history.caseSnapshots.map((entry) => {\n\t\tconst label = entry.label ?? entry.caseId;\n\t\treturn {\n\t\t\tanswerChange: entry.answerChange,\n\t\t\tcaseId: entry.caseId,\n\t\t\tlabel,\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Query',\n\t\t\t\t\tvalue: entry.query?.trim().length ? entry.query : 'n/a'\n\t\t\t\t},\n\t\t\t\t{ label: 'Answer change', value: entry.answerChange },\n\t\t\t\t{ label: 'Coverage', value: entry.coverage },\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Resolved citations',\n\t\t\t\t\tvalue: `${entry.resolvedCitationCount}/${entry.citationCount}`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Resolved citation rate',\n\t\t\t\t\tvalue: entry.resolvedCitationRate.toFixed(3)\n\t\t\t\t},\n\t\t\t\t{ label: 'Citation F1', value: entry.citationF1.toFixed(3) },\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Reference count',\n\t\t\t\t\tvalue: String(entry.referenceCount)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Cited IDs',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.citedIds.length > 0\n\t\t\t\t\t\t\t? entry.citedIds.join(', ')\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Matched IDs',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.matchedIds.length > 0\n\t\t\t\t\t\t\t? entry.matchedIds.join(', ')\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Missing IDs',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.missingIds.length > 0\n\t\t\t\t\t\t\t? entry.missingIds.join(', ')\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Extra IDs',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.extraIds.length > 0\n\t\t\t\t\t\t\t? entry.extraIds.join(', ')\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Unresolved refs',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.ungroundedReferenceNumbers.length > 0\n\t\t\t\t\t\t\t? entry.ungroundedReferenceNumbers.join(', ')\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Answer',\n\t\t\t\t\tvalue: entry.answer.trim().length > 0 ? entry.answer : 'n/a'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Previous answer',\n\t\t\t\t\tvalue:\n\t\t\t\t\t\tentry.previousAnswer &&\n\t\t\t\t\t\tentry.previousAnswer.trim().length > 0\n\t\t\t\t\t\t\t? entry.previousAnswer\n\t\t\t\t\t\t\t: 'n/a'\n\t\t\t\t}\n\t\t\t],\n\t\t\tsummary: `${entry.answerChange} · ${entry.coverage} · resolved ${entry.resolvedCitationCount}/${entry.citationCount} · refs ${entry.referenceCount}`\n\t\t};\n\t});\n};\n\nexport const buildRAGAnswerGroundingHistoryRows = (\n\thistory?: RAGAnswerGroundingEvaluationHistory\n): RAGLabelValueRow[] => {\n\tif (!history?.latestRun) {\n\t\treturn [{ label: 'History', value: 'No persisted provider runs yet.' }];\n\t}\n\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{ label: 'Runs recorded', value: String(history.runs.length) },\n\t\t{\n\t\t\tlabel: 'Latest',\n\t\t\tvalue: `${history.latestRun.label} · ${formatGroundingHistorySummaryValue(\n\t\t\t\thistory.latestRun.response\n\t\t\t)}`\n\t\t}\n\t];\n\n\tif (history.previousRun) {\n\t\trows.push({\n\t\t\tlabel: 'Previous',\n\t\t\tvalue: `${history.previousRun.label} · ${formatGroundingHistorySummaryValue(\n\t\t\t\thistory.previousRun.response\n\t\t\t)}`\n\t\t});\n\t}\n\n\tif (history.leaderboard[0]) {\n\t\trows.push({\n\t\t\tlabel: 'Best recorded',\n\t\t\tvalue: `#${history.leaderboard[0].rank} · ${history.leaderboard[0].label} · passing ${formatEvaluationPassingRate(\n\t\t\t\thistory.leaderboard[0].passingRate\n\t\t\t)} · citation f1 ${history.leaderboard[0].averageCitationF1.toFixed(\n\t\t\t\t3\n\t\t\t)} · resolved ${formatEvaluationPassingRate(\n\t\t\t\thistory.leaderboard[0].averageResolvedCitationRate\n\t\t\t)}`\n\t\t});\n\t}\n\n\tif (history.caseSnapshots.length > 0) {\n\t\tconst changedAnswers = history.caseSnapshots.filter(\n\t\t\t(entry) => entry.answerChange === 'changed'\n\t\t).length;\n\t\trows.push({\n\t\t\tlabel: 'Answer drift',\n\t\t\tvalue: `${changedAnswers}/${history.caseSnapshots.length} changed`\n\t\t});\n\t}\n\n\tif (!history.diff) {\n\t\trows.push({\n\t\t\tlabel: 'History diff',\n\t\t\tvalue: 'Run the provider comparison again to diff grounding regressions over time.'\n\t\t});\n\t\treturn rows;\n\t}\n\n\trows.push(\n\t\t{\n\t\t\tlabel: 'Passing delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\thistory.diff.summaryDelta.passingRate,\n\t\t\t\t1,\n\t\t\t\t'%'\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Citation F1 delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\thistory.diff.summaryDelta.averageCitationF1,\n\t\t\t\t3\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Resolved citation delta',\n\t\t\tvalue: formatSignedDelta(\n\t\t\t\thistory.diff.summaryDelta.averageResolvedCitationRate * 100,\n\t\t\t\t1,\n\t\t\t\t'%'\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Improved',\n\t\t\tvalue: formatGroundingHistoryCaseLabels(history.diff.improvedCases)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Regressed',\n\t\t\tvalue: formatGroundingHistoryCaseLabels(history.diff.regressedCases)\n\t\t}\n\t);\n\n\tif (history.previousRun) {\n\t\tconst currentEntityView = buildRAGAnswerGroundingEntityQualityView(\n\t\t\thistory.latestRun.response\n\t\t);\n\t\tconst previousEntityView = buildRAGAnswerGroundingEntityQualityView(\n\t\t\thistory.previousRun.response\n\t\t);\n\t\trows.push(\n\t\t\t{\n\t\t\t\tlabel: 'Source regression hotspots',\n\t\t\t\tvalue: formatEntityRegressionHotspots(\n\t\t\t\t\tcurrentEntityView.bySource,\n\t\t\t\t\tpreviousEntityView.bySource,\n\t\t\t\t\t(entry) => entry.averageCitationF1,\n\t\t\t\t\t'citation f1'\n\t\t\t\t)\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Document regression hotspots',\n\t\t\t\tvalue: formatEntityRegressionHotspots(\n\t\t\t\t\tcurrentEntityView.byDocument,\n\t\t\t\t\tpreviousEntityView.byDocument,\n\t\t\t\t\t(entry) => entry.averageCitationF1,\n\t\t\t\t\t'citation f1'\n\t\t\t\t)\n\t\t\t}\n\t\t);\n\t}\n\n\treturn rows;\n};\n\nexport const buildRAGAnswerGroundingHistoryPresentation = (\n\thistory?: RAGAnswerGroundingEvaluationHistory\n): RAGAnswerGroundingHistoryPresentation => ({\n\tcaseSnapshots: buildRAGAnswerGroundingCaseSnapshotPresentations(history),\n\trows: buildRAGAnswerGroundingHistoryRows(history),\n\tsummary: history?.latestRun\n\t\t? history.latestRun.label\n\t\t: 'No persisted provider runs yet.'\n});\n\nconst formatFailureCounts = (failureCounts: Record<string, number>) => {\n\tconst entries = Object.entries(failureCounts).sort((left, right) => {\n\t\tif (right[1] !== left[1]) {\n\t\t\treturn right[1] - left[1];\n\t\t}\n\n\t\treturn left[0].localeCompare(right[0]);\n\t});\n\n\treturn entries.length > 0\n\t\t? entries.map(([key, count]) => `${key} ${count}`).join(' · ')\n\t\t: 'none';\n};\n\nconst formatFailureCountDelta = (\n\tcurrent: Record<string, number>,\n\tprevious: Record<string, number>\n) => {\n\tconst deltas = Object.keys({ ...current, ...previous })\n\t\t.map((key) => ({\n\t\t\tdelta: (current[key] ?? 0) - (previous[key] ?? 0),\n\t\t\tkey\n\t\t}))\n\t\t.filter((entry) => entry.delta > 0)\n\t\t.sort((left, right) => {\n\t\t\tif (right.delta !== left.delta) {\n\t\t\t\treturn right.delta - left.delta;\n\t\t\t}\n\n\t\t\treturn left.key.localeCompare(right.key);\n\t\t});\n\n\treturn deltas.length > 0\n\t\t? deltas\n\t\t\t\t.slice(0, 3)\n\t\t\t\t.map((entry) => `${entry.key} +${entry.delta}`)\n\t\t\t\t.join(' · ')\n\t\t: 'stable';\n};\n\nconst formatEntityRegressionHotspots = <\n\tT extends {\n\t\tkey: string;\n\t\tlabel: string;\n\t\tpassingRate: number;\n\t\tfailureCounts: Record<string, number>;\n\t}\n>(\n\tcurrentEntries: T[],\n\tpreviousEntries: T[],\n\tmetricSelector: (entry: T) => number,\n\tmetricLabel: string\n) => {\n\tconst previousMap = new Map(\n\t\tpreviousEntries.map((entry) => [entry.key, entry])\n\t);\n\tconst regressions = currentEntries\n\t\t.map((entry) => {\n\t\t\tconst previous = previousMap.get(entry.key);\n\t\t\tconst passDelta = entry.passingRate - (previous?.passingRate ?? 0);\n\t\t\tconst metricDelta =\n\t\t\t\tmetricSelector(entry) -\n\t\t\t\t(previous ? metricSelector(previous) : 0);\n\t\t\tconst failureDelta = formatFailureCountDelta(\n\t\t\t\tentry.failureCounts,\n\t\t\t\tprevious?.failureCounts ?? {}\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\tentry,\n\t\t\t\tfailureDelta,\n\t\t\t\tmetricDelta,\n\t\t\t\tpassDelta\n\t\t\t};\n\t\t})\n\t\t.filter(\n\t\t\t(entry) =>\n\t\t\t\tentry.passDelta < 0 ||\n\t\t\t\tentry.metricDelta < 0 ||\n\t\t\t\tentry.failureDelta !== 'stable'\n\t\t)\n\t\t.sort((left, right) => {\n\t\t\tif (left.passDelta !== right.passDelta) {\n\t\t\t\treturn left.passDelta - right.passDelta;\n\t\t\t}\n\t\t\tif (left.metricDelta !== right.metricDelta) {\n\t\t\t\treturn left.metricDelta - right.metricDelta;\n\t\t\t}\n\n\t\t\treturn left.entry.label.localeCompare(right.entry.label);\n\t\t});\n\n\treturn regressions.length > 0\n\t\t? regressions\n\t\t\t\t.slice(0, 3)\n\t\t\t\t.map(\n\t\t\t\t\t({ entry, failureDelta, metricDelta, passDelta }) =>\n\t\t\t\t\t\t`${entry.label} pass ${formatSignedDelta(\n\t\t\t\t\t\t\tpassDelta,\n\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t'%'\n\t\t\t\t\t\t)} · ${metricLabel} ${formatSignedDelta(\n\t\t\t\t\t\t\tmetricDelta,\n\t\t\t\t\t\t\t3\n\t\t\t\t\t\t)} · ${failureDelta}`\n\t\t\t\t)\n\t\t\t\t.join(' | ')\n\t\t: 'none';\n};\n\nconst buildEvaluationEntityPresentation = (\n\tentry: RAGEvaluationEntityQualitySummary\n): RAGEntityQualityPresentation => ({\n\tkey: entry.key,\n\tlabel: entry.label,\n\trows: [\n\t\t{ label: 'Entity type', value: entry.entityType },\n\t\t{ label: 'Cases', value: String(entry.totalCases) },\n\t\t{\n\t\t\tlabel: 'Status mix',\n\t\t\tvalue: `${entry.passedCases} pass · ${entry.partialCases} partial · ${entry.failedCases} fail`\n\t\t},\n\t\t{\n\t\t\tlabel: 'Passing rate',\n\t\t\tvalue: formatEvaluationPassingRate(entry.passingRate)\n\t\t},\n\t\t{ label: 'Average F1', value: entry.averageF1.toFixed(3) },\n\t\t{\n\t\t\tlabel: 'Failure classes',\n\t\t\tvalue: formatFailureCounts(entry.failureCounts)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Cases',\n\t\t\tvalue: entry.caseIds.length > 0 ? entry.caseIds.join(', ') : 'none'\n\t\t}\n\t],\n\tsummary: `${entry.entityType} · passing ${formatEvaluationPassingRate(\n\t\tentry.passingRate\n\t)} · f1 ${entry.averageF1.toFixed(3)} · failures ${formatFailureCounts(\n\t\tentry.failureCounts\n\t)}`\n});\n\nconst buildGroundingEntityPresentation = (\n\tentry: RAGAnswerGroundingEntityQualitySummary\n): RAGEntityQualityPresentation => ({\n\tkey: entry.key,\n\tlabel: entry.label,\n\trows: [\n\t\t{ label: 'Entity type', value: entry.entityType },\n\t\t{ label: 'Cases', value: String(entry.totalCases) },\n\t\t{\n\t\t\tlabel: 'Status mix',\n\t\t\tvalue: `${entry.passedCases} pass · ${entry.partialCases} partial · ${entry.failedCases} fail`\n\t\t},\n\t\t{\n\t\t\tlabel: 'Passing rate',\n\t\t\tvalue: formatEvaluationPassingRate(entry.passingRate)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Average citation F1',\n\t\t\tvalue: entry.averageCitationF1.toFixed(3)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Average resolved citation rate',\n\t\t\tvalue: formatEvaluationPassingRate(\n\t\t\t\tentry.averageResolvedCitationRate * 100\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Failure classes',\n\t\t\tvalue: formatFailureCounts(entry.failureCounts)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Cases',\n\t\t\tvalue: entry.caseIds.length > 0 ? entry.caseIds.join(', ') : 'none'\n\t\t}\n\t],\n\tsummary: `${entry.entityType} · passing ${formatEvaluationPassingRate(\n\t\tentry.passingRate\n\t)} · citation f1 ${entry.averageCitationF1.toFixed(\n\t\t3\n\t)} · failures ${formatFailureCounts(entry.failureCounts)}`\n});\n\nexport const buildRAGEvaluationEntityQualityPresentation = (\n\tview: RAGEvaluationEntityQualityView,\n\tentityType: 'source' | 'document'\n): RAGEntityQualityViewPresentation => {\n\tconst entities =\n\t\tentityType === 'source'\n\t\t\t? view.bySource.map(buildEvaluationEntityPresentation)\n\t\t\t: view.byDocument.map(buildEvaluationEntityPresentation);\n\n\treturn {\n\t\tentities,\n\t\trows: [\n\t\t\t{ label: 'Entity type', value: entityType },\n\t\t\t{ label: 'Entities tracked', value: String(entities.length) },\n\t\t\t{\n\t\t\t\tlabel: 'Best coverage',\n\t\t\t\tvalue: entities[0]?.summary ?? 'No entity quality data yet.'\n\t\t\t}\n\t\t],\n\t\tsummary:\n\t\t\tentities[0]?.label ??\n\t\t\t`No ${entityType === 'source' ? 'source' : 'document'} quality data yet.`\n\t};\n};\n\nexport const buildRAGAnswerGroundingEntityQualityPresentation = (\n\tview: RAGAnswerGroundingEntityQualityView,\n\tentityType: 'source' | 'document'\n): RAGEntityQualityViewPresentation => {\n\tconst entities =\n\t\tentityType === 'source'\n\t\t\t? view.bySource.map(buildGroundingEntityPresentation)\n\t\t\t: view.byDocument.map(buildGroundingEntityPresentation);\n\n\treturn {\n\t\tentities,\n\t\trows: [\n\t\t\t{ label: 'Entity type', value: entityType },\n\t\t\t{ label: 'Entities tracked', value: String(entities.length) },\n\t\t\t{\n\t\t\t\tlabel: 'Best coverage',\n\t\t\t\tvalue: entities[0]?.summary ?? 'No entity quality data yet.'\n\t\t\t}\n\t\t],\n\t\tsummary:\n\t\t\tentities[0]?.label ??\n\t\t\t`No ${entityType === 'source' ? 'source' : 'document'} quality data yet.`\n\t};\n};\n",
|
|
11
11
|
"import type { AIServerMessage } from '../../../types/ai';\n\nexport const serverMessageToAction = (message: AIServerMessage) => {\n\tswitch (message.type) {\n\t\tcase 'chunk':\n\t\t\treturn {\n\t\t\t\tcontent: message.content,\n\t\t\t\tconversationId: message.conversationId,\n\t\t\t\tmessageId: message.messageId,\n\t\t\t\ttype: 'chunk' as const\n\t\t\t};\n\t\tcase 'thinking':\n\t\t\treturn {\n\t\t\t\tcontent: message.content,\n\t\t\t\tconversationId: message.conversationId,\n\t\t\t\tmessageId: message.messageId,\n\t\t\t\ttype: 'thinking' as const\n\t\t\t};\n\t\tcase 'tool_status':\n\t\t\treturn {\n\t\t\t\tconversationId: message.conversationId,\n\t\t\t\tinput: message.input,\n\t\t\t\tmessageId: message.messageId,\n\t\t\t\tname: message.name,\n\t\t\t\tresult: message.result,\n\t\t\t\tstatus: message.status,\n\t\t\t\ttype: 'tool_status' as const\n\t\t\t};\n\t\tcase 'image':\n\t\t\treturn {\n\t\t\t\tconversationId: message.conversationId,\n\t\t\t\tdata: message.data,\n\t\t\t\tformat: message.format,\n\t\t\t\timageId: message.imageId,\n\t\t\t\tisPartial: message.isPartial,\n\t\t\t\tmessageId: message.messageId,\n\t\t\t\trevisedPrompt: message.revisedPrompt,\n\t\t\t\ttype: 'image' as const\n\t\t\t};\n\t\tcase 'complete':\n\t\t\treturn {\n\t\t\t\tconversationId: message.conversationId,\n\t\t\t\tdurationMs: message.durationMs,\n\t\t\t\tmessageId: message.messageId,\n\t\t\t\tmodel: message.model,\n\t\t\t\tsources: message.sources,\n\t\t\t\ttype: 'complete' as const,\n\t\t\t\tusage: message.usage\n\t\t\t};\n\t\tcase 'rag_retrieving':\n\t\t\treturn {\n\t\t\t\tconversationId: message.conversationId,\n\t\t\t\tmessageId: message.messageId,\n\t\t\t\tretrievalStartedAt: message.retrievalStartedAt,\n\t\t\t\ttype: 'rag_retrieving' as const\n\t\t\t};\n\t\tcase 'rag_retrieved':\n\t\t\treturn {\n\t\t\t\tconversationId: message.conversationId,\n\t\t\t\tmessageId: message.messageId,\n\t\t\t\tretrievalDurationMs: message.retrievalDurationMs,\n\t\t\t\tretrievalStartedAt: message.retrievalStartedAt,\n\t\t\t\tretrievedAt: message.retrievedAt,\n\t\t\t\tsources: message.sources,\n\t\t\t\ttrace: message.trace,\n\t\t\t\ttype: 'rag_retrieved' as const\n\t\t\t};\n\t\tcase 'error':\n\t\t\treturn { message: message.message, type: 'error' as const };\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n",
|
|
12
12
|
"import type {\n\tAIClientMessage,\n\tAIConnectionOptions,\n\tAIServerMessage\n} from '../../../types/ai';\nimport { isValidAIServerMessage } from '../../../types/typeGuards';\n\nconst WS_OPEN = 1;\nconst WS_NORMAL_CLOSURE = 1000;\nconst WS_CLOSED = 3;\nconst DEFAULT_PING_INTERVAL = 30_000;\nconst RECONNECT_INITIAL_DELAY = 500;\nconst RECONNECT_POLL_INTERVAL = 300;\nconst DEFAULT_MAX_RECONNECT_ATTEMPTS = 60;\n\ntype AIConnectionState = {\n\tisConnected: boolean;\n\tpendingMessages: string[];\n\tpingInterval: ReturnType<typeof setInterval> | null;\n\treconnectAttempts: number;\n\treconnectTimeout: ReturnType<typeof setTimeout> | null;\n\tws: WebSocket | null;\n};\n\ntype AIConnectionHandle = {\n\tclose: () => void;\n\tgetReadyState: () => number;\n\tsend: (msg: AIClientMessage) => void;\n\tsubscribe: (callback: (msg: AIServerMessage) => void) => () => void;\n};\n\n// eslint-disable-next-line no-empty-function\nconst noop = () => {};\nconst noopUnsubscribe = () => noop;\n\nconst NOOP_CONNECTION: AIConnectionHandle = {\n\tclose: noop,\n\tsend: noop,\n\tsubscribe: noopUnsubscribe,\n\tgetReadyState: () => WS_CLOSED\n};\n\nconst buildWsUrl = (path: string) => {\n\tconst { hostname, port, protocol } = window.location;\n\tconst wsProtocol = protocol === 'https:' ? 'wss:' : 'ws:';\n\tconst portSuffix = port ? `:${port}` : '';\n\n\treturn `${wsProtocol}//${hostname}${portSuffix}${path}`;\n};\n\nconst parseServerMessage = (event: MessageEvent) => {\n\tlet data: unknown;\n\n\ttry {\n\t\tdata = JSON.parse(String(event.data));\n\t} catch {\n\t\treturn null;\n\t}\n\n\tif (\n\t\tdata &&\n\t\ttypeof data === 'object' &&\n\t\t'type' in data &&\n\t\tdata.type === 'pong'\n\t) {\n\t\treturn null;\n\t}\n\n\tif (!isValidAIServerMessage(data)) {\n\t\treturn null;\n\t}\n\n\treturn data;\n};\n\nexport const createAIConnection = (\n\tpath: string,\n\toptions: AIConnectionOptions = {}\n) => {\n\tif (typeof window === 'undefined') {\n\t\treturn NOOP_CONNECTION;\n\t}\n\n\tconst shouldReconnect = options.reconnect !== false;\n\tconst pingInterval = options.pingInterval ?? DEFAULT_PING_INTERVAL;\n\tconst maxReconnectAttempts =\n\t\toptions.maxReconnectAttempts ?? DEFAULT_MAX_RECONNECT_ATTEMPTS;\n\n\tconst listeners = new Set<(msg: AIServerMessage) => void>();\n\n\tconst connState: AIConnectionState = {\n\t\tisConnected: false,\n\t\tpendingMessages: [],\n\t\tpingInterval: null,\n\t\treconnectAttempts: 0,\n\t\treconnectTimeout: null,\n\t\tws: null\n\t};\n\n\tconst flushPendingMessages = () => {\n\t\tif (connState.ws?.readyState !== WS_OPEN) {\n\t\t\treturn;\n\t\t}\n\n\t\twhile (connState.pendingMessages.length > 0) {\n\t\t\tconst next = connState.pendingMessages.shift();\n\t\t\tif (typeof next === 'string') {\n\t\t\t\tconnState.ws.send(next);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst clearTimers = () => {\n\t\tif (connState.pingInterval) {\n\t\t\tclearInterval(connState.pingInterval);\n\t\t\tconnState.pingInterval = null;\n\t\t}\n\n\t\tif (connState.reconnectTimeout) {\n\t\t\tclearTimeout(connState.reconnectTimeout);\n\t\t\tconnState.reconnectTimeout = null;\n\t\t}\n\t};\n\n\tconst scheduleReconnect = () => {\n\t\tconnState.reconnectAttempts++;\n\t\tconst delay =\n\t\t\tconnState.reconnectAttempts === 1\n\t\t\t\t? RECONNECT_INITIAL_DELAY\n\t\t\t\t: RECONNECT_POLL_INTERVAL;\n\n\t\tconnState.reconnectTimeout = setTimeout(() => {\n\t\t\tif (connState.reconnectAttempts > maxReconnectAttempts) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconnect();\n\t\t}, delay);\n\t};\n\n\tconst connect = () => {\n\t\tconst url = buildWsUrl(path);\n\t\tconst wsInstance = new WebSocket(url, options.protocols);\n\n\t\twsInstance.onopen = () => {\n\t\t\tconnState.isConnected = true;\n\t\t\tconnState.reconnectAttempts = 0;\n\t\t\tflushPendingMessages();\n\n\t\t\tconnState.pingInterval = setInterval(() => {\n\t\t\t\tif (\n\t\t\t\t\twsInstance.readyState === WS_OPEN &&\n\t\t\t\t\tconnState.isConnected\n\t\t\t\t) {\n\t\t\t\t\twsInstance.send(JSON.stringify({ type: 'ping' }));\n\t\t\t\t}\n\t\t\t}, pingInterval);\n\t\t};\n\n\t\twsInstance.onmessage = (event: MessageEvent) => {\n\t\t\tconst message = parseServerMessage(event);\n\n\t\t\tif (!message) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlisteners.forEach((listener) => listener(message));\n\t\t};\n\n\t\twsInstance.onclose = (event: CloseEvent) => {\n\t\t\tconnState.isConnected = false;\n\t\t\tclearTimers();\n\n\t\t\tconst shouldAttemptReconnect =\n\t\t\t\tshouldReconnect &&\n\t\t\t\tevent.code !== WS_NORMAL_CLOSURE &&\n\t\t\t\tconnState.reconnectAttempts < maxReconnectAttempts;\n\n\t\t\tif (shouldAttemptReconnect) {\n\t\t\t\tscheduleReconnect();\n\t\t\t}\n\t\t};\n\n\t\twsInstance.onerror = () => {\n\t\t\t// Error is followed by close event, reconnection handled there\n\t\t};\n\n\t\tconnState.ws = wsInstance;\n\t};\n\n\tconst send = (msg: AIClientMessage) => {\n\t\tconst serialized = JSON.stringify(msg);\n\n\t\tif (connState.ws?.readyState === WS_OPEN) {\n\t\t\tconnState.ws.send(serialized);\n\n\t\t\treturn;\n\t\t}\n\n\t\tconnState.pendingMessages.push(serialized);\n\t};\n\n\tconst subscribe = (callback: (msg: AIServerMessage) => void) => {\n\t\tlisteners.add(callback);\n\n\t\treturn () => {\n\t\t\tlisteners.delete(callback);\n\t\t};\n\t};\n\n\tconst close = () => {\n\t\tclearTimers();\n\n\t\tif (connState.ws) {\n\t\t\tconnState.ws.close(WS_NORMAL_CLOSURE);\n\t\t\tconnState.ws = null;\n\t\t}\n\n\t\tconnState.isConnected = false;\n\t\tlisteners.clear();\n\t};\n\n\tconst getReadyState = () => connState.ws?.readyState ?? WS_CLOSED;\n\n\tconnect();\n\n\treturn { close, getReadyState, send, subscribe };\n};\n",
|
|
13
13
|
"import type {\n\tAIConversation,\n\tRAGSource,\n\tAIImageData,\n\tAIMessage,\n\tAIStreamState,\n\tAIStoreAction,\n\tAIToolCall\n} from '../../../types/ai';\n\nconst EMPTY_STATE: AIStreamState = {\n\tactiveConversationId: null,\n\tconversations: new Map(),\n\terror: null,\n\tisStreaming: false\n};\n\nconst initialActiveConversationId: string | null = null;\nconst initialError: string | null = null;\n\n// eslint-disable-next-line absolute/no-useless-function -- returns a new instance each call\nconst freshState = () => ({\n\tactiveConversationId: initialActiveConversationId,\n\tconversations: new Map<string, AIConversation>(),\n\terror: initialError,\n\tisStreaming: false\n});\n\nconst findAssistantMessage = (\n\tconversation: AIConversation,\n\tmessageId: string\n) =>\n\tconversation.messages.find(\n\t\t(msg) => msg.id === messageId && msg.role === 'assistant'\n\t);\n\nconst getOrCreate = (state: AIStreamState, conversationId: string) => {\n\tlet conversation = state.conversations.get(conversationId);\n\n\tif (!conversation) {\n\t\tconversation = {\n\t\t\tcreatedAt: Date.now(),\n\t\t\tid: conversationId,\n\t\t\tmessages: []\n\t\t};\n\t\tstate.conversations.set(conversationId, conversation);\n\t}\n\n\treturn conversation;\n};\n\nconst handleSend = (\n\tstate: AIStreamState,\n\taction: AIStoreAction & { type: 'send' }\n) => {\n\tconst conversation = getOrCreate(state, action.conversationId);\n\tconst message: AIMessage = {\n\t\tattachments: action.attachments,\n\t\tcontent: action.content,\n\t\tconversationId: action.conversationId,\n\t\tid: action.messageId,\n\t\trole: 'user',\n\t\ttimestamp: Date.now()\n\t};\n\n\tconversation.messages = [...conversation.messages, message];\n\tstate.activeConversationId = action.conversationId;\n\tstate.error = null;\n\tstate.isStreaming = true;\n};\n\nconst handleChunk = (\n\tstate: AIStreamState,\n\taction: AIStoreAction & { type: 'chunk' }\n) => {\n\tconst conversation = getOrCreate(state, action.conversationId);\n\tconst existingIdx = conversation.messages.findIndex(\n\t\t(msg) => msg.id === action.messageId && msg.role === 'assistant'\n\t);\n\n\tif (existingIdx >= 0) {\n\t\tconst prevContent = conversation.messages[existingIdx]?.content ?? '';\n\t\tconversation.messages = conversation.messages.map((msg, idx) =>\n\t\t\tidx === existingIdx\n\t\t\t\t? { ...msg, content: prevContent + action.content }\n\t\t\t\t: msg\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst message: AIMessage = {\n\t\tcontent: action.content,\n\t\tconversationId: action.conversationId,\n\t\tid: action.messageId,\n\t\tisStreaming: true,\n\t\trole: 'assistant',\n\t\ttimestamp: Date.now()\n\t};\n\n\tconversation.messages = [...conversation.messages, message];\n};\n\nconst handleThinking = (\n\tstate: AIStreamState,\n\taction: AIStoreAction & { type: 'thinking' }\n) => {\n\tconst conversation = getOrCreate(state, action.conversationId);\n\tconst existingIdx = conversation.messages.findIndex(\n\t\t(msg) => msg.id === action.messageId && msg.role === 'assistant'\n\t);\n\n\tif (existingIdx >= 0) {\n\t\tconst prevThinking = conversation.messages[existingIdx]?.thinking ?? '';\n\t\tconversation.messages = conversation.messages.map((msg, idx) =>\n\t\t\tidx === existingIdx\n\t\t\t\t? { ...msg, thinking: prevThinking + action.content }\n\t\t\t\t: msg\n\t\t);\n\n\t\treturn;\n\t}\n\n\tconst message: AIMessage = {\n\t\tcontent: '',\n\t\tconversationId: action.conversationId,\n\t\tid: action.messageId,\n\t\tisStreaming: true,\n\t\trole: 'assistant',\n\t\tthinking: action.content,\n\t\ttimestamp: Date.now()\n\t};\n\n\tconversation.messages = [...conversation.messages, message];\n};\n\nconst upsertToolCall = (message: AIMessage, toolCall: AIToolCall) => {\n\tif (!message.toolCalls) {\n\t\tmessage.toolCalls = [toolCall];\n\n\t\treturn;\n\t}\n\n\tconst existingIdx = message.toolCalls.findIndex(\n\t\t(existing) => existing.name === toolCall.name\n\t);\n\n\tif (existingIdx >= 0) {\n\t\tmessage.toolCalls[existingIdx] = toolCall;\n\t} else {\n\t\tmessage.toolCalls = [...message.toolCalls, toolCall];\n\t}\n};\n\nconst getOrCreateAssistantMessage = (\n\tconversation: AIConversation,\n\tmessageId: string,\n\tconversationId: string\n) => {\n\tconst existing = findAssistantMessage(conversation, messageId);\n\n\tif (existing) {\n\t\treturn existing;\n\t}\n\n\tconst message: AIMessage = {\n\t\tcontent: '',\n\t\tconversationId,\n\t\tid: messageId,\n\t\tisStreaming: true,\n\t\trole: 'assistant',\n\t\ttimestamp: Date.now()\n\t};\n\tconversation.messages = [...conversation.messages, message];\n\n\treturn message;\n};\n\nconst handleRAGRetrieved = (\n\tstate: AIStreamState,\n\taction: AIStoreAction & { type: 'rag_retrieved' }\n) => {\n\tconst conversation = getOrCreate(state, action.conversationId);\n\tconst message = getOrCreateAssistantMessage(\n\t\tconversation,\n\t\taction.messageId,\n\t\taction.conversationId\n\t);\n\n\tmessage.sources = action.sources;\n\tmessage.retrievalStartedAt =\n\t\taction.retrievalStartedAt ?? message.retrievalStartedAt;\n\tmessage.retrievedAt = action.retrievedAt;\n\tmessage.retrievalDurationMs = action.retrievalDurationMs;\n\tmessage.retrievalTrace = action.trace;\n\tconversation.messages = [...conversation.messages];\n};\n\nconst handleRAGRetrieving = (\n\tstate: AIStreamState,\n\taction: AIStoreAction & { type: 'rag_retrieving' }\n) => {\n\tconst conversation = getOrCreate(state, action.conversationId);\n\tconst message = getOrCreateAssistantMessage(\n\t\tconversation,\n\t\taction.messageId,\n\t\taction.conversationId\n\t);\n\n\tmessage.retrievalStartedAt = action.retrievalStartedAt;\n\tconversation.messages = [...conversation.messages];\n};\n\nconst handleToolStatus = (\n\tstate: AIStreamState,\n\taction: AIStoreAction & { type: 'tool_status' }\n) => {\n\tconst conversation = getOrCreate(state, action.conversationId);\n\tconst message = getOrCreateAssistantMessage(\n\t\tconversation,\n\t\taction.messageId,\n\t\taction.conversationId\n\t);\n\n\tconst toolCall: AIToolCall = {\n\t\tid: action.messageId,\n\t\tinput: action.input,\n\t\tname: action.name,\n\t\tresult: action.status === 'complete' ? (action.result ?? '') : undefined\n\t};\n\n\tupsertToolCall(message, toolCall);\n\tconversation.messages = [...conversation.messages];\n};\n\nconst markMessageComplete = (\n\tconversation: AIConversation,\n\tmessageId: string,\n\tusage?: { inputTokens: number; outputTokens: number },\n\tdurationMs?: number,\n\tmodel?: string,\n\tsources?: RAGSource[]\n) => {\n\tconversation.messages = conversation.messages.map((msg) =>\n\t\tmsg.id === messageId && msg.role === 'assistant'\n\t\t\t? {\n\t\t\t\t\t...msg,\n\t\t\t\t\tdurationMs,\n\t\t\t\t\tisStreaming: false,\n\t\t\t\t\tmodel,\n\t\t\t\t\tsources: sources ?? msg.sources,\n\t\t\t\t\tusage\n\t\t\t\t}\n\t\t\t: msg\n\t);\n};\n\nconst NOT_FOUND = -1;\n\nconst findExistingImageById = (\n\timages: AIImageData[],\n\timageId: string | undefined\n) => {\n\tif (!imageId) return NOT_FOUND;\n\n\treturn images.findIndex((img) => img.imageId === imageId);\n};\n\nconst findReplaceablePartialIndex = (images: AIImageData[]) => {\n\tconst lastIdx = images.length - 1;\n\n\tif (lastIdx >= 0 && images[lastIdx]?.isPartial) {\n\t\treturn lastIdx;\n\t}\n\n\treturn NOT_FOUND;\n};\n\nconst upsertImage = (message: AIMessage, imageData: AIImageData) => {\n\tif (!message.images) {\n\t\tmessage.images = [imageData];\n\n\t\treturn;\n\t}\n\n\tconst existingIdx = findExistingImageById(\n\t\tmessage.images,\n\t\timageData.imageId\n\t);\n\n\tif (existingIdx >= 0) {\n\t\tmessage.images[existingIdx] = imageData;\n\n\t\treturn;\n\t}\n\n\tconst replaceableIdx = findReplaceablePartialIndex(message.images);\n\n\tif (replaceableIdx >= 0) {\n\t\tmessage.images[replaceableIdx] = imageData;\n\n\t\treturn;\n\t}\n\n\tmessage.images = [...message.images, imageData];\n};\n\nconst handleImage = (\n\tstate: AIStreamState,\n\taction: AIStoreAction & { type: 'image' }\n) => {\n\tconst conversation = getOrCreate(state, action.conversationId);\n\tconst message = getOrCreateAssistantMessage(\n\t\tconversation,\n\t\taction.messageId,\n\t\taction.conversationId\n\t);\n\n\tupsertImage(message, {\n\t\tdata: action.data,\n\t\tformat: action.format,\n\t\timageId: action.imageId,\n\t\tisPartial: action.isPartial,\n\t\trevisedPrompt: action.revisedPrompt\n\t});\n\n\tconversation.messages = [...conversation.messages];\n};\n\nconst handleComplete = (\n\tstate: AIStreamState,\n\taction: AIStoreAction & { type: 'complete' }\n) => {\n\tconst conversation = state.conversations.get(action.conversationId);\n\n\tif (conversation) {\n\t\tmarkMessageComplete(\n\t\t\tconversation,\n\t\t\taction.messageId,\n\t\t\taction.usage,\n\t\t\taction.durationMs,\n\t\t\taction.model,\n\t\t\taction.sources\n\t\t);\n\t}\n\n\tstate.isStreaming = false;\n};\n\nconst markConversationStreamsComplete = (conversation: AIConversation) => {\n\tconst streamingMessages = conversation.messages.filter(\n\t\t(msg) => msg.isStreaming\n\t);\n\n\tif (streamingMessages.length === 0) {\n\t\treturn;\n\t}\n\n\tfor (const msg of streamingMessages) {\n\t\tmsg.isStreaming = false;\n\t}\n\n\tconversation.messages = [...conversation.messages];\n};\n\nconst markAllStreamsComplete = (state: AIStreamState) => {\n\tfor (const [, conversation] of state.conversations) {\n\t\tmarkConversationStreamsComplete(conversation);\n\t}\n};\n\nconst handleBranch = (\n\tstate: AIStreamState,\n\taction: AIStoreAction & { type: 'branch' }\n) => {\n\tconst source = state.conversations.get(action.oldConversationId);\n\n\tif (!source) {\n\t\treturn;\n\t}\n\n\tconst cutoffIndex = source.messages.findIndex(\n\t\t(msg) => msg.id === action.fromMessageId\n\t);\n\n\tif (cutoffIndex < 0) {\n\t\treturn;\n\t}\n\n\tconst branchedMessages = source.messages\n\t\t.slice(0, cutoffIndex + 1)\n\t\t.map((msg) => ({ ...msg, conversationId: action.newConversationId }));\n\n\tconst newConversation: AIConversation = {\n\t\tcreatedAt: Date.now(),\n\t\tid: action.newConversationId,\n\t\tmessages: branchedMessages\n\t};\n\n\tstate.conversations.set(action.newConversationId, newConversation);\n\tstate.activeConversationId = action.newConversationId;\n};\n\nconst applyAction = (state: AIStreamState, action: AIStoreAction) => {\n\tswitch (action.type) {\n\t\tcase 'send':\n\t\t\thandleSend(state, action);\n\t\t\tbreak;\n\t\tcase 'chunk':\n\t\t\thandleChunk(state, action);\n\t\t\tbreak;\n\t\tcase 'thinking':\n\t\t\thandleThinking(state, action);\n\t\t\tbreak;\n\t\tcase 'tool_status':\n\t\t\thandleToolStatus(state, action);\n\t\t\tbreak;\n\t\tcase 'image':\n\t\t\thandleImage(state, action);\n\t\t\tbreak;\n\t\tcase 'complete':\n\t\t\thandleComplete(state, action);\n\t\t\tbreak;\n\t\tcase 'error':\n\t\t\tstate.error = action.message;\n\t\t\tstate.isStreaming = false;\n\t\t\tbreak;\n\t\tcase 'rag_retrieving':\n\t\t\thandleRAGRetrieving(state, action);\n\t\t\tbreak;\n\t\tcase 'rag_retrieved':\n\t\t\thandleRAGRetrieved(state, action);\n\t\t\tbreak;\n\t\tcase 'cancel':\n\t\t\tstate.isStreaming = false;\n\t\t\tmarkAllStreamsComplete(state);\n\t\t\tbreak;\n\t\tcase 'branch':\n\t\t\thandleBranch(state, action);\n\t\t\tbreak;\n\t\tcase 'set_conversation':\n\t\t\tstate.activeConversationId = action.conversationId;\n\t\t\tbreak;\n\t}\n};\n\nexport const createAIMessageStore = () => {\n\tlet state = freshState();\n\tconst subscribers = new Set<() => void>();\n\n\treturn {\n\t\tdispatch: (action: AIStoreAction) => {\n\t\t\tapplyAction(state, action);\n\t\t\t// New reference so useSyncExternalStore detects the change\n\t\t\tstate = { ...state, conversations: new Map(state.conversations) };\n\t\t\tsubscribers.forEach((callback) => callback());\n\t\t},\n\t\tgetServerSnapshot: () => EMPTY_STATE,\n\t\tgetSnapshot: () => state,\n\t\tsubscribe: (callback: () => void) => {\n\t\t\tsubscribers.add(callback);\n\n\t\t\treturn () => {\n\t\t\t\tsubscribers.delete(callback);\n\t\t\t};\n\t\t}\n\t};\n};\n",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"import { derived, type Readable } from 'svelte/store';\nimport type { AIMessage } from '../../../types/ai';\nimport { buildRAGStreamProgress } from '../../ai/rag/workflowState';\n\nexport const createRAGStreamProgress = (params: {\n\terror: Readable<string | null>;\n\tisStreaming: Readable<boolean>;\n\tmessages: Readable<AIMessage[]>;\n}) =>\n\tderived(\n\t\t[params.error, params.isStreaming, params.messages],\n\t\t([$error, $isStreaming, $messages]) =>\n\t\t\tbuildRAGStreamProgress({\n\t\t\t\terror: $error,\n\t\t\t\tisStreaming: $isStreaming,\n\t\t\t\tmessages: $messages\n\t\t\t})\n\t);\n\nexport type CreateRAGStreamProgressResult = ReturnType<\n\ttypeof createRAGStreamProgress\n>;\n",
|
|
30
30
|
"import { createRAGChunkPreview } from './createRAGChunkPreview';\nimport { createRAGCitations } from './createRAGCitations';\nimport { createRAGDocuments } from './createRAGDocuments';\nimport { createRAGEvaluate } from './createRAGEvaluate';\nimport { createRAGGrounding } from './createRAGGrounding';\nimport { createRAGIngest } from './createRAGIngest';\nimport { createRAGIndexAdmin } from './createRAGIndexAdmin';\nimport { createRAGOps } from './createRAGOps';\nimport { createRAGSearch } from './createRAGSearch';\nimport { createRAGSources } from './createRAGSources';\nimport { createRAGStatus } from './createRAGStatus';\nimport { createRAGWorkflow } from './createRAGWorkflow';\nimport { derived } from 'svelte/store';\n\nexport type CreateRAGOptions = {\n\tautoLoadOps?: boolean;\n\tautoLoadStatus?: boolean;\n\tconversationId?: string;\n\tstreamPath?: string;\n};\n\nexport const createRAG = (path: string, options: CreateRAGOptions = {}) => {\n\tconst search = createRAGSearch(path);\n\tconst ingest = createRAGIngest(path);\n\tconst status = createRAGStatus(path, options.autoLoadStatus ?? true);\n\tconst ops = createRAGOps(path, options.autoLoadOps ?? true);\n\tconst documents = createRAGDocuments(path);\n\tconst chunkPreview = createRAGChunkPreview(path);\n\tconst evaluate = createRAGEvaluate(path);\n\tconst index = createRAGIndexAdmin(path);\n\tconst workflow = createRAGWorkflow(\n\t\toptions.streamPath ?? path,\n\t\toptions.conversationId\n\t);\n\tconst sources = createRAGSources(workflow.messages);\n\tconst citations = createRAGCitations(sources.sources);\n\tconst grounding = createRAGGrounding(\n\t\tderived(\n\t\t\tworkflow.latestAssistantMessage,\n\t\t\t($latestAssistantMessage) => $latestAssistantMessage?.content ?? ''\n\t\t),\n\t\tsources.sources\n\t);\n\n\treturn {\n\t\tchunkPreview,\n\t\tcitations,\n\t\tdocuments,\n\t\tevaluate,\n\t\tgrounding,\n\t\tindex,\n\t\tingest,\n\t\tops,\n\t\tsearch,\n\t\tsources,\n\t\tstatus,\n\t\tstream: workflow,\n\t\tworkflow\n\t};\n};\n\nexport type CreateRAGResult = ReturnType<typeof createRAG>;\n"
|
|
31
31
|
],
|
|
32
|
-
"mappings": "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CL,MAAM,QAAQ;AAAA,IACb,OAAO,iBAAiB,WAAW,MAAM,mBAAmB;AAAA,IAC5D,OAAO,8BAA8B,iBAClC,yBACA;AAAA,IACH,OAAO,iBAAiB,WAAW,MAAM,mBAAmB;AAAA,IAC5D,OAAO,8BAA8B,iBAClC,yBACA;AAAA,IACH,wBAAwB,OAAO,iBAAiB;AAAA,EACjD,EAAE,OACD,CAAC,UACA,OAAO,UAAU,YAAY,MAAM,SAAS,CAC9C;AAAA,EAEA,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK,QAAI,IAAI;AAAA;AAG9C,IAAM,4BAA4B,CACjC,KACA,WACuB;AAAA,EACvB,OACC,QAAQ,oBACL,sBACA,QAAQ,sBACP,wBACA,QAAQ,4BACP,yBACA,QAAQ,8BACP,2BACA,QAAQ,+BACP,4BACA,QAAQ,iCACP,8BACA,QAAQ,mCACP,4BACA,QAAQ,qCACP,8BACA,QACC,qCACA,6BACA,QACC,uCACA,+BACA,QACC,sCACA,gCACA,QACC,wCACA,kCACA,QACC,sCACA,gCACA,QACC,8BACA,4BACA,QACC,kCACA,2BACA,QACC,gCACA,yBACA,QACC,8BACA,uBACA,QACC,wCACA,kCACA,QACC,gCACA,8BACA,QACC,oCACA,6BACA,QACC,kCACA,2BACA,QACC,gCACA,yBACA,QACC,gCACA,8BACA,QACC,kCACA,gCACA,QACC,kCACA,+BACA,QACC,oCACA,iCACA,QACC,8BACA,2BACA,QACC,gCACA,6BACA,QACC,4BACA,yBACA,QACC,8BACA,2BACA,QACC,oCACA,4BACA,QACC,sCACA,8BACA,QACC,6BACA,0BACA,QACC,oCACA,kCACA,QACC,mCACA,iCACA,QACC,+BACA,4BACA,QACC,sCACA,oCACA,QACC,qCACA,mCACA,QACC,6BACA,yBACA,QACC,+BACA,2BACA,QACC,mCACA,2BACA,QACC,qCACA,6BACA,QACC,6BACA,0BACA,QACC,+BACA,4BACA,QACC,+BACA,4BACA,QACC,iCACA,8BACA,QACC,wCACA,sCACA,QACC,0CACA,wCACA,QACC,iCACA,8BACA,QACC,mC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AG,KAAK,GAAG,KAC7C,cAAc,gBACb,cAAc,aAAa,SAAS,MACrC,cAAc,iBACb,cAAc,aAAa,UAAU,MACtC,cAAc,kBACb,cAAc,aAAa,WAAW,MACvC,cAAc,mBACb,cAAc,iBAAiB,MAChC,cAAc,iBAAiB,cAAc,eAAe,MAC5D,cAAc,oBAAoB,mBAClC,cAAc,oBAAoB,mBAClC,cAAc,gCACd,+BACA,cAAc,8BACd,6BACA,cAAc,mBAAmB,kBACjC,cAAc,8BACd,6BACA,cAAc,mBAAmB,kBACjC,cAAc,8BACd,6BACA,cAAc,sBAAsB,qBACpC,cAAc,oBAAoB,mBAClC,cAAc,4BACd,2BACA,cAAc,+BACd,8BACA,cAAc,mCACd,kCACA,cAAc,sCACd,qCACA,cAAc,sCACd,qCACA,cAAc,8BACd,6BACA,cAAc,kCACd,iCACA,cAAc,gCACd,+BACA,cAAc,8BACd,6BACA,cAAc,qCACd,oCACA,cAAc,gCACd,+BACA,cAAc,kCACd,iCACA,cAAc,8BACd,6BACA,cAAc,4BACd,2BACA,cAAc,oCACd,mCACA,cAAc,6BACd,4BACA,cAAc,oCACd,mCACA,cAAc,mCACd,kCACA,cAAc,6BACd,4BACA,cAAc,mCACd,kCACA,cAAc,6BACd,4BACA,cAAc,+BACd,8BACA,cAAc,wCACd,uCACA,cAAc,iCACd,gCACA,cAAc,sBAAsB,qBACpC,cAAc,8BACd,6BACA,cAAc,iCACd,gCACA,cAAc,qCACd,oCACA,cAAc,wCACd,uCACA,cAAc,wCACd,uCACA,cAAc,gCACd,+BACA,cAAc,oCACd,mCACA,cAAc,kCACd,iCACA,cAAc,gCACd,+BACA,cAAc,uCACd,sCACA,cAAc,kCACd,iCACA,cAAc,oCACd,mCACA,cAAc,gCACd,+BACA,cAAc,8BACd,6BACA,cAAc,sCACd,qCACA,cAAc,+BACd,8BACA,cAAc,sCACd,qCACA,cAAc,qCACd,oCACA,cAAc,+BACd,8BACA,cAAc,qCACd,oCACA,cAAc,+BACd,8BACA,cAAc,iCACd,gCACA,cAAc,0CACd,yCACA,cAAc,mCACd,kCACA,CAAC,oBAAoB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",
|
|
33
|
-
"debugId": "
|
|
32
|
+
"mappings": "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CL,MAAM,QAAQ;AAAA,IACb,OAAO,iBAAiB,WAAW,MAAM,mBAAmB;AAAA,IAC5D,OAAO,8BAA8B,iBAClC,yBACA;AAAA,IACH,OAAO,iBAAiB,WAAW,MAAM,mBAAmB;AAAA,IAC5D,OAAO,8BAA8B,iBAClC,yBACA;AAAA,IACH,wBAAwB,OAAO,iBAAiB;AAAA,EACjD,EAAE,OACD,CAAC,UACA,OAAO,UAAU,YAAY,MAAM,SAAS,CAC9C;AAAA,EAEA,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK,QAAI,IAAI;AAAA;AAG9C,IAAM,4BAA4B,CACjC,KACA,WACuB;AAAA,EACvB,OACC,QAAQ,oBACL,sBACA,QAAQ,sBACP,wBACA,QAAQ,4BACP,yBACA,QAAQ,8BACP,2BACA,QAAQ,+BACP,4BACA,QAAQ,iCACP,8BACA,QAAQ,mCACP,4BACA,QAAQ,qCACP,8BACA,QACC,qCACA,6BACA,QACC,uCACA,+BACA,QACC,sCACA,gCACA,QACC,wCACA,kCACA,QACC,sCACA,gCACA,QACC,8BACA,4BACA,QACC,kCACA,2BACA,QACC,gCACA,yBACA,QACC,8BACA,uBACA,QACC,8BACA,uBACA,QACC,wCACA,kCACA,QACC,gCACA,8BACA,QACC,oCACA,6BACA,QACC,kCACA,2BACA,QACC,gCACA,yBACA,QACC,gCACA,yBACA,QACC,gCACA,8BACA,QACC,kCACA,gCACA,QACC,kCACA,+BACA,QACC,oCACA,iCACA,QACC,8BACA,2BACA,QACC,gCACA,6BACA,QACC,4BACA,yBACA,QACC,8BACA,2BACA,QACC,oCACA,4BACA,QACC,sCACA,8BACA,QACC,6BACA,0BACA,QACC,oCACA,kCACA,QACC,mCACA,iCACA,QACC,+BACA,4BACA,QACC,sCACA,oCACA,QACC,qCACA,mCACA,QACC,6BACA,yBACA,QACC,+BACA,2BACA,QACC,mCACA,2BACA,QACC,qCACA,6BACA,QACC,6BACA,0BACA,QACC,+BACA,4BACA,QACC,+BACA,4BACA,QACC,iCACA,8BACA,QACC,wCACA,sCACA,QACC,0C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",
|
|
33
|
+
"debugId": "0F1DBD41F100F9B064756E2164756E21",
|
|
34
34
|
"names": []
|
|
35
35
|
}
|