@absolutejs/absolute 0.19.0-beta.643 → 0.19.0-beta.644
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 +283 -5
- package/dist/ai/client/index.js.map +5 -5
- package/dist/ai/client/ui.js +235 -5
- package/dist/ai/client/ui.js.map +4 -4
- package/dist/ai/index.js +658 -76
- package/dist/ai/index.js.map +11 -11
- package/dist/ai/rag/quality.js +237 -5
- package/dist/ai/rag/quality.js.map +4 -4
- package/dist/ai/rag/ui.js +235 -5
- package/dist/ai/rag/ui.js.map +4 -4
- package/dist/ai-client/angular/ai/index.js +48 -0
- package/dist/ai-client/react/ai/index.js +48 -0
- package/dist/ai-client/vue/ai/index.js +48 -0
- package/dist/angular/ai/index.js +283 -5
- package/dist/angular/ai/index.js.map +5 -5
- package/dist/react/ai/index.js +283 -5
- package/dist/react/ai/index.js.map +5 -5
- package/dist/src/ai/client/ragClient.d.ts +16 -1
- package/dist/src/ai/index.d.ts +1 -1
- package/dist/src/ai/rag/adapters/queryPlanning.d.ts +8 -0
- package/dist/src/ai/rag/chat.d.ts +49 -7
- package/dist/src/ai/rag/index.d.ts +1 -1
- package/dist/src/ai/rag/presentation.d.ts +5 -1
- package/dist/src/ai/rag/quality.d.ts +14 -0
- package/dist/src/vue/ai/useRAG.d.ts +4 -0
- package/dist/src/vue/ai/useRAGEvaluate.d.ts +4 -0
- package/dist/svelte/ai/index.js +283 -5
- package/dist/svelte/ai/index.js.map +5 -5
- package/dist/types/ai.d.ts +64 -5
- package/dist/vue/ai/index.js +283 -5
- package/dist/vue/ai/index.js.map +5 -5
- package/package.json +7 -7
package/dist/vue/ai/index.js.map
CHANGED
|
@@ -4,16 +4,16 @@
|
|
|
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| '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\tmultiVectorCollapsedCasesDelta?: number;\n\t\tmultiVectorLexicalHitCasesDelta?: number;\n\t\tmultiVectorVectorHitCasesDelta?: 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\tif (\n\t\ttypeof policy.minMultiVectorCollapsedCasesDelta === 'number' &&\n\t\t(delta.multiVectorCollapsedCasesDelta ?? 0) <\n\t\t\tpolicy.minMultiVectorCollapsedCasesDelta\n\t) {\n\t\treasons.push(\n\t\t\t`multivector collapsed delta ${delta.multiVectorCollapsedCasesDelta ?? 0} is below ${policy.minMultiVectorCollapsedCasesDelta}`\n\t\t);\n\t}\n\tif (\n\t\ttypeof policy.minMultiVectorLexicalHitCasesDelta === 'number' &&\n\t\t(delta.multiVectorLexicalHitCasesDelta ?? 0) <\n\t\t\tpolicy.minMultiVectorLexicalHitCasesDelta\n\t) {\n\t\treasons.push(\n\t\t\t`multivector lexical-hit delta ${delta.multiVectorLexicalHitCasesDelta ?? 0} is below ${policy.minMultiVectorLexicalHitCasesDelta}`\n\t\t);\n\t}\n\tif (\n\t\ttypeof policy.minMultiVectorVectorHitCasesDelta === 'number' &&\n\t\t(delta.multiVectorVectorHitCasesDelta ?? 0) <\n\t\t\tpolicy.minMultiVectorVectorHitCasesDelta\n\t) {\n\t\treasons.push(\n\t\t\t`multivector vector-hit delta ${delta.multiVectorVectorHitCasesDelta ?? 0} is below ${policy.minMultiVectorVectorHitCasesDelta}`\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\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'multiVectorCases',\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: 'multiVectorVectorHitCases',\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: 'multiVectorLexicalHitCases',\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: 'multiVectorCollapsedCases',\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\t{\n\t\t\tcurrent: latest.multiVectorCases,\n\t\t\tdelta: latest.multiVectorCases - previous.multiVectorCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.multiVectorCases - previous.multiVectorCases\n\t\t\t),\n\t\t\tmetric: 'multiVectorCases',\n\t\t\tprevious: previous.multiVectorCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.multiVectorVectorHitCases,\n\t\t\tdelta:\n\t\t\t\tlatest.multiVectorVectorHitCases -\n\t\t\t\tprevious.multiVectorVectorHitCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.multiVectorVectorHitCases -\n\t\t\t\t\tprevious.multiVectorVectorHitCases\n\t\t\t),\n\t\t\tmetric: 'multiVectorVectorHitCases',\n\t\t\tprevious: previous.multiVectorVectorHitCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.multiVectorLexicalHitCases,\n\t\t\tdelta:\n\t\t\t\tlatest.multiVectorLexicalHitCases -\n\t\t\t\tprevious.multiVectorLexicalHitCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.multiVectorLexicalHitCases -\n\t\t\t\t\tprevious.multiVectorLexicalHitCases\n\t\t\t),\n\t\t\tmetric: 'multiVectorLexicalHitCases',\n\t\t\tprevious: previous.multiVectorLexicalHitCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.multiVectorCollapsedCases,\n\t\t\tdelta:\n\t\t\t\tlatest.multiVectorCollapsedCases -\n\t\t\t\tprevious.multiVectorCollapsedCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.multiVectorCollapsedCases -\n\t\t\t\t\tprevious.multiVectorCollapsedCases\n\t\t\t),\n\t\t\tmetric: 'multiVectorCollapsedCases',\n\t\t\tprevious: previous.multiVectorCollapsedCases\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 multiVectorCases = 0;\n\tlet multiVectorVectorHitCases = 0;\n\tlet multiVectorLexicalHitCases = 0;\n\tlet multiVectorCollapsedCases = 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\tif (trace.multiVector?.configured) {\n\t\t\tmultiVectorCases += 1;\n\t\t}\n\t\tif ((trace.multiVector?.vectorVariantHits ?? 0) > 0) {\n\t\t\tmultiVectorVectorHitCases += 1;\n\t\t}\n\t\tif ((trace.multiVector?.lexicalVariantHits ?? 0) > 0) {\n\t\t\tmultiVectorLexicalHitCases += 1;\n\t\t}\n\t\tif ((trace.multiVector?.collapsedParents ?? 0) > 0) {\n\t\t\tmultiVectorCollapsedCases += 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\tmultiVectorCases,\n\t\tmultiVectorVectorHitCases,\n\t\tmultiVectorLexicalHitCases,\n\t\tmultiVectorCollapsedCases,\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\tmultiVectorCollapsedCasesDelta:\n\t\t\t\t\t\t(candidateEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorCollapsedCases ?? 0) -\n\t\t\t\t\t\t(baselineEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorCollapsedCases ?? 0),\n\t\t\t\t\tmultiVectorLexicalHitCasesDelta:\n\t\t\t\t\t\t(candidateEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorLexicalHitCases ?? 0) -\n\t\t\t\t\t\t(baselineEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorLexicalHitCases ?? 0),\n\t\t\t\t\tmultiVectorVectorHitCasesDelta:\n\t\t\t\t\t\t(candidateEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorVectorHitCases ?? 0) -\n\t\t\t\t\t\t(baselineEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorVectorHitCases ?? 0)\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\tmultiVectorCollapsedCases:\n\t\t\t\t\t\tbaselineEntry.traceSummary?.multiVectorCollapsedCases,\n\t\t\t\t\tmultiVectorLexicalHitCases:\n\t\t\t\t\t\tbaselineEntry.traceSummary?.multiVectorLexicalHitCases,\n\t\t\t\t\tmultiVectorVectorHitCases:\n\t\t\t\t\t\tbaselineEntry.traceSummary?.multiVectorVectorHitCases,\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\tmultiVectorCollapsedCases:\n\t\t\t\t\t\tcandidateEntry.traceSummary?.multiVectorCollapsedCases,\n\t\t\t\t\tmultiVectorLexicalHitCases:\n\t\t\t\t\t\tcandidateEntry.traceSummary?.multiVectorLexicalHitCases,\n\t\t\t\t\tmultiVectorVectorHitCases:\n\t\t\t\t\t\tcandidateEntry.traceSummary?.multiVectorVectorHitCases,\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\twinnerByMultivectorCollapsedCases:\n\t\t\tcomparison.summary.bestByMultivectorCollapsedCases,\n\t\twinnerByMultivectorLexicalHitCases:\n\t\t\tcomparison.summary.bestByMultivectorLexicalHitCases,\n\t\twinnerByMultivectorVectorHitCases:\n\t\t\tcomparison.summary.bestByMultivectorVectorHitCases\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};\n\nconst selectComparisonEntryByTraceMetric = <\n\tTEntry extends {\n\t\ttraceSummary?: RAGRetrievalTraceComparisonSummary;\n\t\tresponse: RAGEvaluationResponse;\n\t\t[key: string]: unknown;\n\t}\n>(\n\tentries: TEntry[],\n\tidKey: keyof TEntry,\n\tmetric: keyof Pick<\n\t\tRAGRetrievalTraceComparisonSummary,\n\t\t| 'multiVectorCollapsedCases'\n\t\t| 'multiVectorLexicalHitCases'\n\t\t| 'multiVectorVectorHitCases'\n\t>\n) => {\n\tconst ranked = [...entries].sort((left, right) => {\n\t\tconst leftMetric = left.traceSummary?.[metric] ?? 0;\n\t\tconst rightMetric = right.traceSummary?.[metric] ?? 0;\n\t\tif (rightMetric !== leftMetric) {\n\t\t\treturn rightMetric - leftMetric;\n\t\t}\n\t\tconst leftEvidenceScore =\n\t\t\t(left.traceSummary?.multiVectorCollapsedCases ?? 0) +\n\t\t\t(left.traceSummary?.multiVectorLexicalHitCases ?? 0) +\n\t\t\t(left.traceSummary?.multiVectorVectorHitCases ?? 0);\n\t\tconst rightEvidenceScore =\n\t\t\t(right.traceSummary?.multiVectorCollapsedCases ?? 0) +\n\t\t\t(right.traceSummary?.multiVectorLexicalHitCases ?? 0) +\n\t\t\t(right.traceSummary?.multiVectorVectorHitCases ?? 0);\n\t\tif (rightEvidenceScore !== leftEvidenceScore) {\n\t\t\treturn rightEvidenceScore - leftEvidenceScore;\n\t\t}\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 winner = ranked[0];\n\tif (!winner || (winner.traceSummary?.[metric] ?? 0) === 0) {\n\t\treturn undefined;\n\t}\n\n\treturn typeof winner[idKey] === 'string'\n\t\t? (winner[idKey] as string)\n\t\t: undefined;\n};\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\tmultiVectorCasesDelta: current.multiVectorCases - previous.multiVectorCases,\n\tmultiVectorVectorHitCasesDelta:\n\t\tcurrent.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n\tmultiVectorLexicalHitCasesDelta:\n\t\tcurrent.multiVectorLexicalHitCases -\n\t\tprevious.multiVectorLexicalHitCases,\n\tmultiVectorCollapsedCasesDelta:\n\t\tcurrent.multiVectorCollapsedCases - previous.multiVectorCollapsedCases\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\t...summarizeEvaluationResponseComparison(entries, 'retrievalId'),\n\tbestByMultivectorCollapsedCases: selectComparisonEntryByTraceMetric(\n\t\tentries,\n\t\t'retrievalId',\n\t\t'multiVectorCollapsedCases'\n\t),\n\tbestByMultivectorLexicalHitCases: selectComparisonEntryByTraceMetric(\n\t\tentries,\n\t\t'retrievalId',\n\t\t'multiVectorLexicalHitCases'\n\t),\n\tbestByMultivectorVectorHitCases: selectComparisonEntryByTraceMetric(\n\t\tentries,\n\t\t'retrievalId',\n\t\t'multiVectorVectorHitCases'\n\t)\n});\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\tmultiVectorCollapsedCasesDelta?: number;\n\t\tmultiVectorLexicalHitCasesDelta?: number;\n\t\tmultiVectorVectorHitCasesDelta?: number;\n\t\truntimeCandidateBudgetExhaustedCasesDelta?: number;\n\t\truntimeUnderfilledTopKCasesDelta?: 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\tif (\n\t\ttypeof policy.minMultiVectorCollapsedCasesDelta === 'number' &&\n\t\t(delta.multiVectorCollapsedCasesDelta ?? 0) <\n\t\t\tpolicy.minMultiVectorCollapsedCasesDelta\n\t) {\n\t\treasons.push(\n\t\t\t`multivector collapsed delta ${delta.multiVectorCollapsedCasesDelta ?? 0} is below ${policy.minMultiVectorCollapsedCasesDelta}`\n\t\t);\n\t}\n\tif (\n\t\ttypeof policy.minMultiVectorLexicalHitCasesDelta === 'number' &&\n\t\t(delta.multiVectorLexicalHitCasesDelta ?? 0) <\n\t\t\tpolicy.minMultiVectorLexicalHitCasesDelta\n\t) {\n\t\treasons.push(\n\t\t\t`multivector lexical-hit delta ${delta.multiVectorLexicalHitCasesDelta ?? 0} is below ${policy.minMultiVectorLexicalHitCasesDelta}`\n\t\t);\n\t}\n\tif (\n\t\ttypeof policy.minMultiVectorVectorHitCasesDelta === 'number' &&\n\t\t(delta.multiVectorVectorHitCasesDelta ?? 0) <\n\t\t\tpolicy.minMultiVectorVectorHitCasesDelta\n\t) {\n\t\treasons.push(\n\t\t\t`multivector vector-hit delta ${delta.multiVectorVectorHitCasesDelta ?? 0} is below ${policy.minMultiVectorVectorHitCasesDelta}`\n\t\t);\n\t}\n\tif (\n\t\ttypeof policy.maxRuntimeCandidateBudgetExhaustedCasesDelta ===\n\t\t\t'number' &&\n\t\t(delta.runtimeCandidateBudgetExhaustedCasesDelta ?? 0) >\n\t\t\tpolicy.maxRuntimeCandidateBudgetExhaustedCasesDelta\n\t) {\n\t\treasons.push(\n\t\t\t`runtime candidate-budget-exhausted delta ${delta.runtimeCandidateBudgetExhaustedCasesDelta ?? 0} exceeds ${policy.maxRuntimeCandidateBudgetExhaustedCasesDelta}`\n\t\t);\n\t}\n\tif (\n\t\ttypeof policy.maxRuntimeUnderfilledTopKCasesDelta === 'number' &&\n\t\t(delta.runtimeUnderfilledTopKCasesDelta ?? 0) >\n\t\t\tpolicy.maxRuntimeUnderfilledTopKCasesDelta\n\t) {\n\t\treasons.push(\n\t\t\t`runtime underfilled-topk delta ${delta.runtimeUnderfilledTopKCasesDelta ?? 0} exceeds ${policy.maxRuntimeUnderfilledTopKCasesDelta}`\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\t{\n\t\t\t\tcurrent: 0,\n\t\t\t\tdelta: 0,\n\t\t\t\tdirection: 'flat',\n\t\t\t\tmetric: 'multiVectorCases',\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: 'multiVectorVectorHitCases',\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: 'multiVectorLexicalHitCases',\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: 'multiVectorCollapsedCases',\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: 'runtimeCandidateBudgetExhaustedCases',\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: 'runtimeUnderfilledTopKCases',\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\t{\n\t\t\tcurrent: latest.multiVectorCases,\n\t\t\tdelta: latest.multiVectorCases - previous.multiVectorCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.multiVectorCases - previous.multiVectorCases\n\t\t\t),\n\t\t\tmetric: 'multiVectorCases',\n\t\t\tprevious: previous.multiVectorCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.multiVectorVectorHitCases,\n\t\t\tdelta:\n\t\t\t\tlatest.multiVectorVectorHitCases -\n\t\t\t\tprevious.multiVectorVectorHitCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.multiVectorVectorHitCases -\n\t\t\t\t\tprevious.multiVectorVectorHitCases\n\t\t\t),\n\t\t\tmetric: 'multiVectorVectorHitCases',\n\t\t\tprevious: previous.multiVectorVectorHitCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.multiVectorLexicalHitCases,\n\t\t\tdelta:\n\t\t\t\tlatest.multiVectorLexicalHitCases -\n\t\t\t\tprevious.multiVectorLexicalHitCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.multiVectorLexicalHitCases -\n\t\t\t\t\tprevious.multiVectorLexicalHitCases\n\t\t\t),\n\t\t\tmetric: 'multiVectorLexicalHitCases',\n\t\t\tprevious: previous.multiVectorLexicalHitCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.multiVectorCollapsedCases,\n\t\t\tdelta:\n\t\t\t\tlatest.multiVectorCollapsedCases -\n\t\t\t\tprevious.multiVectorCollapsedCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.multiVectorCollapsedCases -\n\t\t\t\t\tprevious.multiVectorCollapsedCases\n\t\t\t),\n\t\t\tmetric: 'multiVectorCollapsedCases',\n\t\t\tprevious: previous.multiVectorCollapsedCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.runtimeCandidateBudgetExhaustedCases,\n\t\t\tdelta:\n\t\t\t\tlatest.runtimeCandidateBudgetExhaustedCases -\n\t\t\t\tprevious.runtimeCandidateBudgetExhaustedCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.runtimeCandidateBudgetExhaustedCases -\n\t\t\t\t\tprevious.runtimeCandidateBudgetExhaustedCases\n\t\t\t),\n\t\t\tmetric: 'runtimeCandidateBudgetExhaustedCases',\n\t\t\tprevious: previous.runtimeCandidateBudgetExhaustedCases\n\t\t},\n\t\t{\n\t\t\tcurrent: latest.runtimeUnderfilledTopKCases,\n\t\t\tdelta:\n\t\t\t\tlatest.runtimeUnderfilledTopKCases -\n\t\t\t\tprevious.runtimeUnderfilledTopKCases,\n\t\t\tdirection: buildTraceSummaryDirection(\n\t\t\t\tlatest.runtimeUnderfilledTopKCases -\n\t\t\t\t\tprevious.runtimeUnderfilledTopKCases\n\t\t\t),\n\t\t\tmetric: 'runtimeUnderfilledTopKCases',\n\t\t\tprevious: previous.runtimeUnderfilledTopKCases\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 multiVectorCases = 0;\n\tlet multiVectorVectorHitCases = 0;\n\tlet multiVectorLexicalHitCases = 0;\n\tlet multiVectorCollapsedCases = 0;\n\tlet runtimeCandidateBudgetExhaustedCases = 0;\n\tlet runtimeUnderfilledTopKCases = 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\tconst vectorSearchMetadata = trace.steps.find(\n\t\t\t(step) => step.stage === 'vector_search'\n\t\t)?.metadata;\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\tif (trace.multiVector?.configured) {\n\t\t\tmultiVectorCases += 1;\n\t\t}\n\t\tif ((trace.multiVector?.vectorVariantHits ?? 0) > 0) {\n\t\t\tmultiVectorVectorHitCases += 1;\n\t\t}\n\t\tif ((trace.multiVector?.lexicalVariantHits ?? 0) > 0) {\n\t\t\tmultiVectorLexicalHitCases += 1;\n\t\t}\n\t\tif ((trace.multiVector?.collapsedParents ?? 0) > 0) {\n\t\t\tmultiVectorCollapsedCases += 1;\n\t\t}\n\t\tif (vectorSearchMetadata?.sqliteQueryCandidateBudgetExhausted) {\n\t\t\truntimeCandidateBudgetExhaustedCases += 1;\n\t\t}\n\t\tif (vectorSearchMetadata?.postgresQueryCandidateBudgetExhausted) {\n\t\t\truntimeCandidateBudgetExhaustedCases += 1;\n\t\t}\n\t\tif (vectorSearchMetadata?.sqliteQueryUnderfilledTopK) {\n\t\t\truntimeUnderfilledTopKCases += 1;\n\t\t}\n\t\tif (vectorSearchMetadata?.postgresQueryUnderfilledTopK) {\n\t\t\truntimeUnderfilledTopKCases += 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\tmultiVectorCases,\n\t\tmultiVectorVectorHitCases,\n\t\tmultiVectorLexicalHitCases,\n\t\tmultiVectorCollapsedCases,\n\t\truntimeCandidateBudgetExhaustedCases,\n\t\truntimeUnderfilledTopKCases,\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\tmultiVectorCollapsedCasesDelta:\n\t\t\t\t\t\t(candidateEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorCollapsedCases ?? 0) -\n\t\t\t\t\t\t(baselineEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorCollapsedCases ?? 0),\n\t\t\t\t\tmultiVectorLexicalHitCasesDelta:\n\t\t\t\t\t\t(candidateEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorLexicalHitCases ?? 0) -\n\t\t\t\t\t\t(baselineEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorLexicalHitCases ?? 0),\n\t\t\t\t\tmultiVectorVectorHitCasesDelta:\n\t\t\t\t\t\t(candidateEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorVectorHitCases ?? 0) -\n\t\t\t\t\t\t(baselineEntry.traceSummary\n\t\t\t\t\t\t\t?.multiVectorVectorHitCases ?? 0),\n\t\t\t\t\truntimeCandidateBudgetExhaustedCasesDelta:\n\t\t\t\t\t\t(candidateEntry.traceSummary\n\t\t\t\t\t\t\t?.runtimeCandidateBudgetExhaustedCases ?? 0) -\n\t\t\t\t\t\t(baselineEntry.traceSummary\n\t\t\t\t\t\t\t?.runtimeCandidateBudgetExhaustedCases ?? 0),\n\t\t\t\t\truntimeUnderfilledTopKCasesDelta:\n\t\t\t\t\t\t(candidateEntry.traceSummary\n\t\t\t\t\t\t\t?.runtimeUnderfilledTopKCases ?? 0) -\n\t\t\t\t\t\t(baselineEntry.traceSummary\n\t\t\t\t\t\t\t?.runtimeUnderfilledTopKCases ?? 0)\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\tmultiVectorCollapsedCases:\n\t\t\t\t\t\tbaselineEntry.traceSummary?.multiVectorCollapsedCases,\n\t\t\t\t\tmultiVectorLexicalHitCases:\n\t\t\t\t\t\tbaselineEntry.traceSummary?.multiVectorLexicalHitCases,\n\t\t\t\t\tmultiVectorVectorHitCases:\n\t\t\t\t\t\tbaselineEntry.traceSummary?.multiVectorVectorHitCases,\n\t\t\t\t\truntimeCandidateBudgetExhaustedCases:\n\t\t\t\t\t\tbaselineEntry.traceSummary\n\t\t\t\t\t\t\t?.runtimeCandidateBudgetExhaustedCases,\n\t\t\t\t\truntimeUnderfilledTopKCases:\n\t\t\t\t\t\tbaselineEntry.traceSummary?.runtimeUnderfilledTopKCases,\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\tmultiVectorCollapsedCases:\n\t\t\t\t\t\tcandidateEntry.traceSummary?.multiVectorCollapsedCases,\n\t\t\t\t\tmultiVectorLexicalHitCases:\n\t\t\t\t\t\tcandidateEntry.traceSummary?.multiVectorLexicalHitCases,\n\t\t\t\t\tmultiVectorVectorHitCases:\n\t\t\t\t\t\tcandidateEntry.traceSummary?.multiVectorVectorHitCases,\n\t\t\t\t\truntimeCandidateBudgetExhaustedCases:\n\t\t\t\t\t\tcandidateEntry.traceSummary\n\t\t\t\t\t\t\t?.runtimeCandidateBudgetExhaustedCases,\n\t\t\t\t\truntimeUnderfilledTopKCases:\n\t\t\t\t\t\tcandidateEntry.traceSummary\n\t\t\t\t\t\t\t?.runtimeUnderfilledTopKCases,\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\twinnerByMultivectorCollapsedCases:\n\t\t\tcomparison.summary.bestByMultivectorCollapsedCases,\n\t\twinnerByMultivectorLexicalHitCases:\n\t\t\tcomparison.summary.bestByMultivectorLexicalHitCases,\n\t\twinnerByMultivectorVectorHitCases:\n\t\t\tcomparison.summary.bestByMultivectorVectorHitCases,\n\t\twinnerByLowestRuntimeCandidateBudgetExhaustedCases:\n\t\t\tcomparison.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases,\n\t\twinnerByLowestRuntimeUnderfilledTopKCases:\n\t\t\tcomparison.summary.bestByLowestRuntimeUnderfilledTopKCases\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};\n\nconst selectComparisonEntryByTraceMetric = <\n\tTEntry extends {\n\t\ttraceSummary?: RAGRetrievalTraceComparisonSummary;\n\t\tresponse: RAGEvaluationResponse;\n\t\t[key: string]: unknown;\n\t}\n>(\n\tentries: TEntry[],\n\tidKey: keyof TEntry,\n\tmetric: keyof Pick<\n\t\tRAGRetrievalTraceComparisonSummary,\n\t\t| 'multiVectorCollapsedCases'\n\t\t| 'multiVectorLexicalHitCases'\n\t\t| 'multiVectorVectorHitCases'\n\t>\n) => {\n\tconst ranked = [...entries].sort((left, right) => {\n\t\tconst leftMetric = left.traceSummary?.[metric] ?? 0;\n\t\tconst rightMetric = right.traceSummary?.[metric] ?? 0;\n\t\tif (rightMetric !== leftMetric) {\n\t\t\treturn rightMetric - leftMetric;\n\t\t}\n\t\tconst leftEvidenceScore =\n\t\t\t(left.traceSummary?.multiVectorCollapsedCases ?? 0) +\n\t\t\t(left.traceSummary?.multiVectorLexicalHitCases ?? 0) +\n\t\t\t(left.traceSummary?.multiVectorVectorHitCases ?? 0);\n\t\tconst rightEvidenceScore =\n\t\t\t(right.traceSummary?.multiVectorCollapsedCases ?? 0) +\n\t\t\t(right.traceSummary?.multiVectorLexicalHitCases ?? 0) +\n\t\t\t(right.traceSummary?.multiVectorVectorHitCases ?? 0);\n\t\tif (rightEvidenceScore !== leftEvidenceScore) {\n\t\t\treturn rightEvidenceScore - leftEvidenceScore;\n\t\t}\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 winner = ranked[0];\n\tif (!winner || (winner.traceSummary?.[metric] ?? 0) === 0) {\n\t\treturn undefined;\n\t}\n\n\treturn typeof winner[idKey] === 'string'\n\t\t? (winner[idKey] as string)\n\t\t: undefined;\n};\n\nconst selectComparisonEntryByLowestTraceMetric = <\n\tTEntry extends {\n\t\ttraceSummary?: RAGRetrievalTraceComparisonSummary;\n\t\tresponse: RAGEvaluationResponse;\n\t\t[key: string]: unknown;\n\t}\n>(\n\tentries: TEntry[],\n\tidKey: keyof TEntry,\n\tmetric: keyof Pick<\n\t\tRAGRetrievalTraceComparisonSummary,\n\t\t'runtimeCandidateBudgetExhaustedCases' | 'runtimeUnderfilledTopKCases'\n\t>\n) => {\n\tconst ranked = [...entries].sort((left, right) => {\n\t\tconst leftMetric = left.traceSummary?.[metric] ?? 0;\n\t\tconst rightMetric = right.traceSummary?.[metric] ?? 0;\n\t\tif (leftMetric !== rightMetric) {\n\t\t\treturn leftMetric - rightMetric;\n\t\t}\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 winner = ranked[0];\n\treturn typeof winner?.[idKey] === 'string'\n\t\t? (winner[idKey] as string)\n\t\t: undefined;\n};\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\tmultiVectorCasesDelta: current.multiVectorCases - previous.multiVectorCases,\n\tmultiVectorVectorHitCasesDelta:\n\t\tcurrent.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n\tmultiVectorLexicalHitCasesDelta:\n\t\tcurrent.multiVectorLexicalHitCases -\n\t\tprevious.multiVectorLexicalHitCases,\n\tmultiVectorCollapsedCasesDelta:\n\t\tcurrent.multiVectorCollapsedCases - previous.multiVectorCollapsedCases,\n\truntimeCandidateBudgetExhaustedCasesDelta:\n\t\tcurrent.runtimeCandidateBudgetExhaustedCases -\n\t\tprevious.runtimeCandidateBudgetExhaustedCases,\n\truntimeUnderfilledTopKCasesDelta:\n\t\tcurrent.runtimeUnderfilledTopKCases -\n\t\tprevious.runtimeUnderfilledTopKCases\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\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_SUITE_ID =\n\t'rag-native-planner-larger-corpus';\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_LABEL =\n\t'Adaptive Native Planner Benchmark';\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY =\n\t'Which launch checklist phrase is exact wording?';\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER = {\n\tlane: 'focus'\n} satisfies Record<string, unknown>;\n\nexport const createRAGAdaptiveNativePlannerBenchmarkSuite = (input?: {\n\tid?: string;\n\tlabel?: string;\n\tdescription?: string;\n\ttopK?: number;\n\tmetadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n\tcreateRAGEvaluationSuite({\n\t\tdescription:\n\t\t\tinput?.description ??\n\t\t\t'Stress-tests larger-corpus native planner selection, candidate-budget pressure, and transformed-query recovery on filtered retrieval.',\n\t\tid: input?.id ?? DEFAULT_NATIVE_PLANNER_BENCHMARK_SUITE_ID,\n\t\tinput: {\n\t\t\tcases: [\n\t\t\t\t{\n\t\t\t\t\texpectedDocumentIds: ['focus-target'],\n\t\t\t\t\tfilter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n\t\t\t\t\thardNegativeDocumentIds: [\n\t\t\t\t\t\t'focus-distractor-0',\n\t\t\t\t\t\t'focus-distractor-1',\n\t\t\t\t\t\t'focus-distractor-2'\n\t\t\t\t\t],\n\t\t\t\t\tid: 'planner-pressure-exact-phrase',\n\t\t\t\t\tlabel: 'Exact phrase survives larger-corpus native pressure',\n\t\t\t\t\tquery: DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY,\n\t\t\t\t\ttopK: input?.topK ?? 1\n\t\t\t\t}\n\t\t\t],\n\t\t\tfilter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n\t\t\tretrieval: 'vector',\n\t\t\ttopK: input?.topK ?? 1\n\t\t},\n\t\tlabel: input?.label ?? DEFAULT_NATIVE_PLANNER_BENCHMARK_LABEL,\n\t\tmetadata: {\n\t\t\tbenchmarkKind: 'adaptive_native_planner',\n\t\t\tbenchmarkScope: 'larger_corpus',\n\t\t\texpectedSignals: [\n\t\t\t\t'selected native planner profile',\n\t\t\t\t'candidate-budget exhaustion',\n\t\t\t\t'underfilled topk'\n\t\t\t],\n\t\t\trecommendedGroupKey: 'runtime-native-planner',\n\t\t\trecommendedTags: ['runtime', 'native', 'planner'],\n\t\t\t...input?.metadata\n\t\t}\n\t});\n\nexport const createRAGAdaptiveNativePlannerBenchmarkSnapshot = (input?: {\n\tsuite?: RAGEvaluationSuite;\n\tid?: string;\n\tversion?: number;\n\tcreatedAt?: number;\n\tmetadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n\tconst suite =\n\t\tinput?.suite ?? createRAGAdaptiveNativePlannerBenchmarkSuite();\n\n\treturn createRAGEvaluationSuiteSnapshot({\n\t\tcreatedAt: input?.createdAt,\n\t\tid: input?.id,\n\t\tmetadata: {\n\t\t\tartifactKind: 'adaptive_native_planner_benchmark',\n\t\t\tpersistForReleaseHistory: true,\n\t\t\t...input?.metadata\n\t\t},\n\t\tsuite,\n\t\tversion: input?.version\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\t...summarizeEvaluationResponseComparison(entries, 'retrievalId'),\n\tbestByMultivectorCollapsedCases: selectComparisonEntryByTraceMetric(\n\t\tentries,\n\t\t'retrievalId',\n\t\t'multiVectorCollapsedCases'\n\t),\n\tbestByMultivectorLexicalHitCases: selectComparisonEntryByTraceMetric(\n\t\tentries,\n\t\t'retrievalId',\n\t\t'multiVectorLexicalHitCases'\n\t),\n\tbestByMultivectorVectorHitCases: selectComparisonEntryByTraceMetric(\n\t\tentries,\n\t\t'retrievalId',\n\t\t'multiVectorVectorHitCases'\n\t),\n\tbestByLowestRuntimeCandidateBudgetExhaustedCases:\n\t\tselectComparisonEntryByLowestTraceMetric(\n\t\t\tentries,\n\t\t\t'retrievalId',\n\t\t\t'runtimeCandidateBudgetExhaustedCases'\n\t\t),\n\tbestByLowestRuntimeUnderfilledTopKCases:\n\t\tselectComparisonEntryByLowestTraceMetric(\n\t\t\tentries,\n\t\t\t'retrievalId',\n\t\t\t'runtimeUnderfilledTopKCases'\n\t\t)\n});\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 'sqliteQueryPlannerProfileUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite query profile'\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 'sqliteQueryCandidateLimitUsed'\n\t\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\t: key ===\n\t\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\t? 'SQLite max backfills'\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 'sqliteQueryMinResultsUsed'\n\t\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\t: key ===\n\t\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\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\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 'postgresQueryJsRemainderClauseCount'\n\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 clauses'\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 'postgresQueryMultiplierUsed'\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 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\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 'postgresQueryPlannerProfileUsed'\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 query profile'\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 'postgresIndexType'\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? 'Postgres index type'\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 'postgresIndexName'\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? 'Postgres index name'\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 'postgresIndexPresent'\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? 'Postgres index present'\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\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresEstimatedRowCount'\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\t? 'Postgres estimated rows'\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\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\t\t 'postgresTableBytes'\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\t\t? 'Postgres table bytes'\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\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\t\t\t 'postgresIndexBytes'\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\t\t\t? 'Postgres index bytes'\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\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\t\t\t\t 'postgresTotalBytes'\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\t\t\t\t? 'Postgres total bytes'\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\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\t\t\t\t\t 'postgresIndexStorageRatio'\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\t\t\t\t\t? 'Postgres index storage ratio'\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\tconst sqlitePlannerCues = formatSQLitePlannerCueSummary(step.metadata);\n\t\tconst postgresPlannerCues = formatPostgresPlannerCueSummary(\n\t\t\tstep.metadata\n\t\t);\n\n\t\treturn {\n\t\t\tcount: step.count,\n\t\t\tlabel: step.label,\n\t\t\trows: [\n\t\t\t\t{ label: 'stage', value: step.stage },\n\t\t\t\t...(typeof step.count === 'number'\n\t\t\t\t\t? [{ label: 'count', value: String(step.count) }]\n\t\t\t\t\t: []),\n\t\t\t\t...(typeof step.durationMs === 'number'\n\t\t\t\t\t? [{ label: 'durationMs', value: String(step.durationMs) }]\n\t\t\t\t\t: []),\n\t\t\t\t...(sqlitePlannerCues !== 'none'\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: 'SQLite planner cues',\n\t\t\t\t\t\t\t\tvalue: sqlitePlannerCues\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t: []),\n\t\t\t\t...(postgresPlannerCues !== 'none'\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: 'Postgres planner cues',\n\t\t\t\t\t\t\t\tvalue: postgresPlannerCues\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t: []),\n\t\t\t\t...Object.entries(step.metadata ?? {}).map(([key, value]) =>\n\t\t\t\t\tformatRAGTraceMetadataRow(key, value)\n\t\t\t\t)\n\t\t\t],\n\t\t\tstage: step.stage\n\t\t};\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 formatByteSizeLabel = (value?: number) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n\t\treturn 'n/a';\n\t}\n\n\tif (value < 1024) {\n\t\treturn `${Math.round(value)} B`;\n\t}\n\n\tif (value < 1024 * 1024) {\n\t\treturn `${(value / 1024).toFixed(value >= 10 * 1024 ? 0 : 1)} KiB`;\n\t}\n\n\tif (value < 1024 * 1024 * 1024) {\n\t\treturn `${(value / (1024 * 1024)).toFixed(\n\t\t\tvalue >= 10 * 1024 * 1024 ? 0 : 1\n\t\t)} MiB`;\n\t}\n\n\treturn `${(value / (1024 * 1024 * 1024)).toFixed(\n\t\tvalue >= 10 * 1024 * 1024 * 1024 ? 0 : 1\n\t)} GiB`;\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\tsqliteQueryPlannerProfileUsed?: string;\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\tinput?.sqliteQueryPlannerProfileUsed\n\t\t\t? `profile ${input.sqliteQueryPlannerProfileUsed}`\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\tpostgresQueryPlannerProfileUsed?: string;\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\tpostgresIndexType?: string;\n\tpostgresIndexName?: string;\n\tpostgresIndexPresent?: boolean;\n\tpostgresEstimatedRowCount?: number;\n\tpostgresTableBytes?: number;\n\tpostgresIndexBytes?: number;\n\tpostgresTotalBytes?: number;\n\tpostgresIndexStorageRatio?: number;\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\tconst healthJudgment =\n\t\tinput?.postgresIndexPresent === false\n\t\t\t? 'index missing'\n\t\t\t: typeof input?.postgresIndexStorageRatio === 'number' &&\n\t\t\t\t input.postgresIndexStorageRatio >= 0.7\n\t\t\t\t? 'index-heavy storage'\n\t\t\t\t: typeof input?.postgresEstimatedRowCount === 'number' &&\n\t\t\t\t\t input.postgresEstimatedRowCount >= 1000 &&\n\t\t\t\t\t input.postgresIndexPresent === true\n\t\t\t\t\t? 'indexed larger corpus'\n\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?.postgresIndexType\n\t\t\t? `index ${input.postgresIndexType}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresIndexPresent === 'boolean'\n\t\t\t? input.postgresIndexPresent\n\t\t\t\t? 'index present'\n\t\t\t\t: 'index missing'\n\t\t\t: undefined,\n\t\ttypeof input?.postgresEstimatedRowCount === 'number'\n\t\t\t? `rows ${input.postgresEstimatedRowCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresTableBytes === 'number'\n\t\t\t? `table ${formatByteSizeLabel(input.postgresTableBytes)}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresIndexBytes === 'number'\n\t\t\t? `index ${formatByteSizeLabel(input.postgresIndexBytes)}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresIndexStorageRatio === 'number'\n\t\t\t? `index share ${(input.postgresIndexStorageRatio * 100).toFixed(0)}%`\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\tinput?.postgresQueryPlannerProfileUsed\n\t\t\t? `profile ${input.postgresQueryPlannerProfileUsed}`\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\thealthJudgment\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\tpostgresEstimatedRowCount:\n\t\t\t\t\t\t\tsnapshot.postgresEstimatedRowCount,\n\t\t\t\t\t\tpostgresIndexBytes: snapshot.postgresIndexBytes,\n\t\t\t\t\t\tpostgresIndexName: snapshot.postgresIndexName,\n\t\t\t\t\t\tpostgresIndexPresent: snapshot.postgresIndexPresent,\n\t\t\t\t\t\tpostgresIndexStorageRatio:\n\t\t\t\t\t\t\tsnapshot.postgresIndexStorageRatio,\n\t\t\t\t\t\tpostgresIndexType: snapshot.postgresIndexType,\n\t\t\t\t\t\tpostgresTableBytes: snapshot.postgresTableBytes,\n\t\t\t\t\t\tpostgresTotalBytes: snapshot.postgresTotalBytes,\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\tbestByMultivectorCollapsedCases?: string;\n\t\tbestByMultivectorLexicalHitCases?: string;\n\t\tbestByMultivectorVectorHitCases?: 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\tconst rows: RAGLabelValueRow[] = [\n\t\t{\n\t\t\tlabel: 'Best passing rate',\n\t\t\tvalue: input.resolveLabel(input.summary.bestByPassingRate)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Best average F1',\n\t\t\tvalue: input.resolveLabel(input.summary.bestByAverageF1)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Fastest',\n\t\t\tvalue: input.resolveLabel(input.summary.fastest)\n\t\t}\n\t];\n\n\tif (input.summary.bestByMultivectorCollapsedCases) {\n\t\trows.push({\n\t\t\tlabel: 'Best multivector collapse',\n\t\t\tvalue: input.resolveLabel(\n\t\t\t\tinput.summary.bestByMultivectorCollapsedCases\n\t\t\t)\n\t\t});\n\t}\n\tif (input.summary.bestByMultivectorLexicalHitCases) {\n\t\trows.push({\n\t\t\tlabel: 'Best multivector lexical hits',\n\t\t\tvalue: input.resolveLabel(\n\t\t\t\tinput.summary.bestByMultivectorLexicalHitCases\n\t\t\t)\n\t\t});\n\t}\n\tif (input.summary.bestByMultivectorVectorHitCases) {\n\t\trows.push({\n\t\t\tlabel: 'Best multivector vector hits',\n\t\t\tvalue: input.resolveLabel(\n\t\t\t\tinput.summary.bestByMultivectorVectorHitCases\n\t\t\t)\n\t\t});\n\t}\n\n\treturn {\n\t\trows,\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: 'Multivector',\n\t\t\tvalue: `${formatTraceRatio(\n\t\t\t\ttrace.multiVectorCases,\n\t\t\t\ttrace.totalCases\n\t\t\t)} · collapse ${formatTraceRatio(\n\t\t\t\ttrace.multiVectorCollapsedCases,\n\t\t\t\ttrace.totalCases\n\t\t\t)} · lexical ${formatTraceRatio(\n\t\t\t\ttrace.multiVectorLexicalHitCases,\n\t\t\t\ttrace.totalCases\n\t\t\t)} · vector ${formatTraceRatio(\n\t\t\t\ttrace.multiVectorVectorHitCases,\n\t\t\t\ttrace.totalCases\n\t\t\t)}`\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\tRAGRetrievalComparisonRun,\n\tRAGRetrievalReleaseGroupHistoryPresentation,\n\tRAGRetrievalReleaseHistoryRunPresentation,\n\tRAGRetrievalReleaseTimelineSummary,\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 'sqliteQueryPlannerProfileUsed'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'SQLite query profile'\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 'sqliteQueryCandidateLimitUsed'\n\t\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\t: key ===\n\t\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\t? 'SQLite max backfills'\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 'sqliteQueryMinResultsUsed'\n\t\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\t: key ===\n\t\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\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\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 'postgresQueryJsRemainderClauseCount'\n\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 clauses'\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 'postgresQueryMultiplierUsed'\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 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\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 'postgresQueryPlannerProfileUsed'\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 query profile'\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 '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\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\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 'postgresIndexType'\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? 'Postgres index type'\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 'postgresIndexName'\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? 'Postgres index name'\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 'postgresIndexPresent'\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? 'Postgres index present'\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\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 'postgresEstimatedRowCount'\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\t? 'Postgres estimated rows'\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\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\t\t 'postgresTableBytes'\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\t\t? 'Postgres table bytes'\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\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\t\t\t 'postgresIndexBytes'\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\t\t\t? 'Postgres index bytes'\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\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\t\t\t\t 'postgresTotalBytes'\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\t\t\t\t? 'Postgres total bytes'\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\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\t\t\t\t\t 'postgresIndexStorageRatio'\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\t\t\t\t\t? 'Postgres index storage ratio'\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\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\tconst sqlitePlannerCues = formatSQLitePlannerCueSummary(step.metadata);\n\t\tconst postgresPlannerCues = formatPostgresPlannerCueSummary(\n\t\t\tstep.metadata\n\t\t);\n\n\t\treturn {\n\t\t\tcount: step.count,\n\t\t\tlabel: step.label,\n\t\t\trows: [\n\t\t\t\t{ label: 'stage', value: step.stage },\n\t\t\t\t...(typeof step.count === 'number'\n\t\t\t\t\t? [{ label: 'count', value: String(step.count) }]\n\t\t\t\t\t: []),\n\t\t\t\t...(typeof step.durationMs === 'number'\n\t\t\t\t\t? [{ label: 'durationMs', value: String(step.durationMs) }]\n\t\t\t\t\t: []),\n\t\t\t\t...(sqlitePlannerCues !== 'none'\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: 'SQLite planner cues',\n\t\t\t\t\t\t\t\tvalue: sqlitePlannerCues\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t: []),\n\t\t\t\t...(postgresPlannerCues !== 'none'\n\t\t\t\t\t? [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: 'Postgres planner cues',\n\t\t\t\t\t\t\t\tvalue: postgresPlannerCues\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t: []),\n\t\t\t\t...Object.entries(step.metadata ?? {}).map(([key, value]) =>\n\t\t\t\t\tformatRAGTraceMetadataRow(key, value)\n\t\t\t\t)\n\t\t\t],\n\t\t\tstage: step.stage\n\t\t};\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 formatByteSizeLabel = (value?: number) => {\n\tif (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n\t\treturn 'n/a';\n\t}\n\n\tif (value < 1024) {\n\t\treturn `${Math.round(value)} B`;\n\t}\n\n\tif (value < 1024 * 1024) {\n\t\treturn `${(value / 1024).toFixed(value >= 10 * 1024 ? 0 : 1)} KiB`;\n\t}\n\n\tif (value < 1024 * 1024 * 1024) {\n\t\treturn `${(value / (1024 * 1024)).toFixed(\n\t\t\tvalue >= 10 * 1024 * 1024 ? 0 : 1\n\t\t)} MiB`;\n\t}\n\n\treturn `${(value / (1024 * 1024 * 1024)).toFixed(\n\t\tvalue >= 10 * 1024 * 1024 * 1024 ? 0 : 1\n\t)} GiB`;\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\tsqliteQueryPlannerProfileUsed?: string;\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\tinput?.sqliteQueryPlannerProfileUsed\n\t\t\t? `profile ${input.sqliteQueryPlannerProfileUsed}`\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\tpostgresQueryPlannerProfileUsed?: string;\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\tpostgresIndexType?: string;\n\tpostgresIndexName?: string;\n\tpostgresIndexPresent?: boolean;\n\tpostgresEstimatedRowCount?: number;\n\tpostgresTableBytes?: number;\n\tpostgresIndexBytes?: number;\n\tpostgresTotalBytes?: number;\n\tpostgresIndexStorageRatio?: number;\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\tconst healthJudgment =\n\t\tinput?.postgresIndexPresent === false\n\t\t\t? 'index missing'\n\t\t\t: typeof input?.postgresIndexStorageRatio === 'number' &&\n\t\t\t\t input.postgresIndexStorageRatio >= 0.7\n\t\t\t\t? 'index-heavy storage'\n\t\t\t\t: typeof input?.postgresEstimatedRowCount === 'number' &&\n\t\t\t\t\t input.postgresEstimatedRowCount >= 1000 &&\n\t\t\t\t\t input.postgresIndexPresent === true\n\t\t\t\t\t? 'indexed larger corpus'\n\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?.postgresIndexType\n\t\t\t? `index ${input.postgresIndexType}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresIndexPresent === 'boolean'\n\t\t\t? input.postgresIndexPresent\n\t\t\t\t? 'index present'\n\t\t\t\t: 'index missing'\n\t\t\t: undefined,\n\t\ttypeof input?.postgresEstimatedRowCount === 'number'\n\t\t\t? `rows ${input.postgresEstimatedRowCount}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresTableBytes === 'number'\n\t\t\t? `table ${formatByteSizeLabel(input.postgresTableBytes)}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresIndexBytes === 'number'\n\t\t\t? `index ${formatByteSizeLabel(input.postgresIndexBytes)}`\n\t\t\t: undefined,\n\t\ttypeof input?.postgresIndexStorageRatio === 'number'\n\t\t\t? `index share ${(input.postgresIndexStorageRatio * 100).toFixed(0)}%`\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\tinput?.postgresQueryPlannerProfileUsed\n\t\t\t? `profile ${input.postgresQueryPlannerProfileUsed}`\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\thealthJudgment\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\tpostgresEstimatedRowCount:\n\t\t\t\t\t\t\tsnapshot.postgresEstimatedRowCount,\n\t\t\t\t\t\tpostgresIndexBytes: snapshot.postgresIndexBytes,\n\t\t\t\t\t\tpostgresIndexName: snapshot.postgresIndexName,\n\t\t\t\t\t\tpostgresIndexPresent: snapshot.postgresIndexPresent,\n\t\t\t\t\t\tpostgresIndexStorageRatio:\n\t\t\t\t\t\t\tsnapshot.postgresIndexStorageRatio,\n\t\t\t\t\t\tpostgresIndexType: snapshot.postgresIndexType,\n\t\t\t\t\t\tpostgresTableBytes: snapshot.postgresTableBytes,\n\t\t\t\t\t\tpostgresTotalBytes: snapshot.postgresTotalBytes,\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\tbestByMultivectorCollapsedCases?: string;\n\t\tbestByMultivectorLexicalHitCases?: string;\n\t\tbestByMultivectorVectorHitCases?: string;\n\t\tbestByLowestRuntimeCandidateBudgetExhaustedCases?: string;\n\t\tbestByLowestRuntimeUnderfilledTopKCases?: 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\tconst rows: RAGLabelValueRow[] = [\n\t\t{\n\t\t\tlabel: 'Best passing rate',\n\t\t\tvalue: input.resolveLabel(input.summary.bestByPassingRate)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Best average F1',\n\t\t\tvalue: input.resolveLabel(input.summary.bestByAverageF1)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Fastest',\n\t\t\tvalue: input.resolveLabel(input.summary.fastest)\n\t\t}\n\t];\n\n\tif (input.summary.bestByMultivectorCollapsedCases) {\n\t\trows.push({\n\t\t\tlabel: 'Best multivector collapse',\n\t\t\tvalue: input.resolveLabel(\n\t\t\t\tinput.summary.bestByMultivectorCollapsedCases\n\t\t\t)\n\t\t});\n\t}\n\tif (input.summary.bestByMultivectorLexicalHitCases) {\n\t\trows.push({\n\t\t\tlabel: 'Best multivector lexical hits',\n\t\t\tvalue: input.resolveLabel(\n\t\t\t\tinput.summary.bestByMultivectorLexicalHitCases\n\t\t\t)\n\t\t});\n\t}\n\tif (input.summary.bestByMultivectorVectorHitCases) {\n\t\trows.push({\n\t\t\tlabel: 'Best multivector vector hits',\n\t\t\tvalue: input.resolveLabel(\n\t\t\t\tinput.summary.bestByMultivectorVectorHitCases\n\t\t\t)\n\t\t});\n\t}\n\tif (input.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases) {\n\t\trows.push({\n\t\t\tlabel: 'Lowest runtime budget exhaustion',\n\t\t\tvalue: input.resolveLabel(\n\t\t\t\tinput.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases\n\t\t\t)\n\t\t});\n\t}\n\tif (input.summary.bestByLowestRuntimeUnderfilledTopKCases) {\n\t\trows.push({\n\t\t\tlabel: 'Lowest runtime underfilled TopK',\n\t\t\tvalue: input.resolveLabel(\n\t\t\t\tinput.summary.bestByLowestRuntimeUnderfilledTopKCases\n\t\t\t)\n\t\t});\n\t}\n\n\treturn {\n\t\trows,\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: 'Multivector',\n\t\t\tvalue: `${formatTraceRatio(\n\t\t\t\ttrace.multiVectorCases,\n\t\t\t\ttrace.totalCases\n\t\t\t)} · collapse ${formatTraceRatio(\n\t\t\t\ttrace.multiVectorCollapsedCases,\n\t\t\t\ttrace.totalCases\n\t\t\t)} · lexical ${formatTraceRatio(\n\t\t\t\ttrace.multiVectorLexicalHitCases,\n\t\t\t\ttrace.totalCases\n\t\t\t)} · vector ${formatTraceRatio(\n\t\t\t\ttrace.multiVectorVectorHitCases,\n\t\t\t\ttrace.totalCases\n\t\t\t)}`\n\t\t},\n\t\t{\n\t\t\tlabel: 'Runtime',\n\t\t\tvalue: `budget ${formatTraceRatio(\n\t\t\t\ttrace.runtimeCandidateBudgetExhaustedCases,\n\t\t\t\ttrace.totalCases\n\t\t\t)} · underfilled ${formatTraceRatio(\n\t\t\t\ttrace.runtimeUnderfilledTopKCases,\n\t\t\t\ttrace.totalCases\n\t\t\t)}`\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\t{\n\t\t\tlabel: 'Runtime budget delta',\n\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\ttrace.runtimeCandidateBudgetExhaustedCases -\n\t\t\t\t\tleaderTrace.runtimeCandidateBudgetExhaustedCases\n\t\t\t)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Runtime underfilled delta',\n\t\t\tvalue: formatTraceCountDelta(\n\t\t\t\ttrace.runtimeUnderfilledTopKCases -\n\t\t\t\t\tleaderTrace.runtimeUnderfilledTopKCases\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\nconst isRuntimeGateReason = (reason: string) =>\n\t/runtime|candidate-budget|underfilled/i.test(reason);\n\nconst buildRAGRetrievalReleaseHistoryRunPresentation = (\n\trun: RAGRetrievalComparisonRun\n): RAGRetrievalReleaseHistoryRunPresentation => {\n\tconst runtimeGateReasons = (\n\t\trun.decisionSummary?.gate?.reasons ??\n\t\trun.releaseVerdict?.gate?.reasons ??\n\t\t[]\n\t).filter(isRuntimeGateReason);\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{ label: 'Finished', value: formatDateLabel(run.finishedAt) },\n\t\t{\n\t\t\tlabel: 'Passing-rate winner',\n\t\t\tvalue: run.comparison.summary.bestByPassingRate ?? 'n/a'\n\t\t},\n\t\t{\n\t\t\tlabel: 'Average F1 winner',\n\t\t\tvalue: run.comparison.summary.bestByAverageF1 ?? 'n/a'\n\t\t}\n\t];\n\n\tif (\n\t\trun.comparison.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases\n\t) {\n\t\trows.push({\n\t\t\tlabel: 'Lowest runtime budget exhaustion',\n\t\t\tvalue: run.comparison.summary\n\t\t\t\t.bestByLowestRuntimeCandidateBudgetExhaustedCases\n\t\t});\n\t}\n\n\tif (run.comparison.summary.bestByLowestRuntimeUnderfilledTopKCases) {\n\t\trows.push({\n\t\t\tlabel: 'Lowest runtime underfilled TopK',\n\t\t\tvalue: run.comparison.summary\n\t\t\t\t.bestByLowestRuntimeUnderfilledTopKCases\n\t\t});\n\t}\n\n\trows.push(\n\t\t{\n\t\t\tlabel: 'Gate status',\n\t\t\tvalue:\n\t\t\t\trun.decisionSummary?.gate?.status ??\n\t\t\t\trun.releaseVerdict?.gate?.status ??\n\t\t\t\t'n/a'\n\t\t},\n\t\t{\n\t\t\tlabel: 'Runtime gate failures',\n\t\t\tvalue:\n\t\t\t\truntimeGateReasons.length > 0\n\t\t\t\t\t? runtimeGateReasons.join('; ')\n\t\t\t\t\t: 'none'\n\t\t}\n\t);\n\n\treturn {\n\t\tlabel: run.label,\n\t\trows,\n\t\trunId: run.id,\n\t\tsummary:\n\t\t\truntimeGateReasons.length > 0\n\t\t\t\t? `${run.label} · runtime gate blocked`\n\t\t\t\t: `${run.label} · ${run.comparison.summary.bestByPassingRate ?? 'n/a'} leads passing rate`\n\t};\n};\n\nexport const buildRAGRetrievalReleaseGroupHistoryPresentation = (input: {\n\ttimeline?: RAGRetrievalReleaseTimelineSummary;\n\truns?: RAGRetrievalComparisonRun[];\n}): RAGRetrievalReleaseGroupHistoryPresentation => {\n\tconst recentRuns = (input.runs ?? []).map(\n\t\tbuildRAGRetrievalReleaseHistoryRunPresentation\n\t);\n\tconst runtimeBlockedRuns = recentRuns.filter((entry) =>\n\t\tentry.rows.some(\n\t\t\t(row) =>\n\t\t\t\trow.label === 'Runtime gate failures' && row.value !== 'none'\n\t\t)\n\t).length;\n\tconst rows: RAGLabelValueRow[] = [\n\t\t{\n\t\t\tlabel: 'Latest decision',\n\t\t\tvalue: input.timeline?.latestDecisionKind ?? 'none'\n\t\t},\n\t\t{\n\t\t\tlabel: 'Latest decision at',\n\t\t\tvalue: formatDateLabel(input.timeline?.latestDecisionAt)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Last promoted',\n\t\t\tvalue: formatDateLabel(input.timeline?.lastPromotedAt)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Last reverted',\n\t\t\tvalue: formatDateLabel(input.timeline?.lastRevertedAt)\n\t\t},\n\t\t{\n\t\t\tlabel: 'Recent runtime-blocked runs',\n\t\t\tvalue: String(runtimeBlockedRuns)\n\t\t}\n\t];\n\n\treturn {\n\t\trecentRuns,\n\t\trows,\n\t\tsummary: input.timeline?.latestDecisionKind\n\t\t\t? `${input.timeline.latestDecisionKind} · ${recentRuns.length} recent runs`\n\t\t\t: recentRuns.length > 0\n\t\t\t\t? `${recentRuns.length} recent runs`\n\t\t\t\t: 'No release history yet.'\n\t};\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 { onUnmounted, ref, shallowRef, type InjectionKey, type Ref } from 'vue';\nimport type {\n\tAIAttachment,\n\tAIMessage,\n\tAIServerMessage\n} from '../../../types/ai';\nimport { serverMessageToAction } from '../../ai/client/actions';\nimport { createAIConnection } from '../../ai/client/connection';\nimport { createAIMessageStore } from '../../ai/client/messageStore';\nimport { generateId } from '../../ai/protocol';\n\ntype AIStreamReturn = {\n\tbranch: (messageId: string, content: string) => void;\n\tcancel: () => void;\n\tdestroy: () => void;\n\terror: Ref<string | null>;\n\tisStreaming: Ref<boolean>;\n\tmessages: Ref<AIMessage[]>;\n\tsend: (content: string, attachments?: AIAttachment[]) => void;\n};\n\nexport const AIStreamKey: InjectionKey<AIStreamReturn> = Symbol('ai-stream');\n\nexport const useAIStream = (path: string, conversationId?: string) => {\n\tconst connection = createAIConnection(path);\n\tconst store = createAIMessageStore();\n\n\tconst messages = shallowRef<AIMessage[]>([]);\n\tconst isStreaming = ref(false);\n\tconst error = ref<string | null>(null);\n\tconst activeConversationId = ref<string | null>(conversationId ?? null);\n\n\tlet unsubscribeConnection: (() => void) | null = null;\n\tlet unsubscribeStore: (() => void) | null = null;\n\n\tconst syncState = () => {\n\t\tconst snapshot = store.getSnapshot();\n\t\tconst convId =\n\t\t\tactiveConversationId.value ?? snapshot.activeConversationId;\n\t\tconst conversation = convId\n\t\t\t? snapshot.conversations.get(convId)\n\t\t\t: undefined;\n\t\tmessages.value = conversation?.messages ?? [];\n\t\tisStreaming.value = snapshot.isStreaming;\n\t\terror.value = snapshot.error;\n\t\tif (convId) {\n\t\t\tactiveConversationId.value = convId;\n\t\t}\n\t};\n\n\tunsubscribeStore = store.subscribe(syncState);\n\n\tunsubscribeConnection = connection.subscribe((message: AIServerMessage) => {\n\t\tconst action = serverMessageToAction(message);\n\t\tif (action) {\n\t\t\tstore.dispatch(action);\n\t\t}\n\t});\n\n\tconst send = (content: string, attachments?: AIAttachment[]) => {\n\t\tconst convId = activeConversationId.value ?? generateId();\n\t\tconst msgId = generateId();\n\n\t\tstore.dispatch({\n\t\t\tattachments,\n\t\t\tcontent,\n\t\t\tconversationId: convId,\n\t\t\tmessageId: msgId,\n\t\t\ttype: 'send'\n\t\t});\n\n\t\tconnection.send({\n\t\t\tattachments,\n\t\t\tcontent,\n\t\t\tconversationId: convId,\n\t\t\ttype: 'message'\n\t\t});\n\t};\n\n\tconst cancel = () => {\n\t\tif (activeConversationId.value) {\n\t\t\tstore.dispatch({ type: 'cancel' });\n\t\t\tconnection.send({\n\t\t\t\tconversationId: activeConversationId.value,\n\t\t\t\ttype: 'cancel'\n\t\t\t});\n\t\t}\n\t};\n\n\tconst branch = (messageId: string, content: string) => {\n\t\tif (activeConversationId.value) {\n\t\t\tconnection.send({\n\t\t\t\tcontent,\n\t\t\t\tconversationId: activeConversationId.value,\n\t\t\t\tmessageId,\n\t\t\t\ttype: 'branch'\n\t\t\t});\n\t\t}\n\t};\n\n\tconst destroy = () => {\n\t\tunsubscribeConnection?.();\n\t\tunsubscribeStore?.();\n\t\tconnection.close();\n\t};\n\n\tonUnmounted(destroy);\n\n\treturn {\n\t\tbranch,\n\t\tcancel,\n\t\tdestroy,\n\t\terror,\n\t\tisStreaming,\n\t\tmessages,\n\t\tsend\n\t};\n};\n",
|
|
12
12
|
"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",
|
|
13
13
|
"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",
|
|
14
14
|
"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",
|
|
15
15
|
"import { computed, ref } from 'vue';\nimport type { RAGDocumentChunkPreview } from '../../../types/ai';\nimport { createRAGClient } from '../../ai/client/ragClient';\nimport {\n\tbuildRAGSectionRetrievalDiagnostics,\n\tbuildRAGChunkPreviewNavigation,\n\tbuildRAGChunkPreviewGraph\n} from '../../ai/rag/ui';\n\nexport const useRAGChunkPreview = (path: string) => {\n\tconst client = createRAGClient({ path });\n\tconst preview = ref<RAGDocumentChunkPreview | null>(null);\n\tconst activeChunkId = ref<string | null>(null);\n\tconst error = ref<string | null>(null);\n\tconst isLoading = ref(false);\n\tconst chunkGraph = computed(() =>\n\t\tpreview.value ? buildRAGChunkPreviewGraph(preview.value) : null\n\t);\n\tconst navigation = computed(() =>\n\t\tpreview.value\n\t\t\t? buildRAGChunkPreviewNavigation(\n\t\t\t\t\tpreview.value,\n\t\t\t\t\tactiveChunkId.value ?? undefined\n\t\t\t\t)\n\t\t\t: null\n\t);\n\tconst previewSources = computed(() =>\n\t\tpreview.value\n\t\t\t? preview.value.chunks.map((chunk, index) => ({\n\t\t\t\t\tchunkId: chunk.chunkId,\n\t\t\t\t\tlabels: chunk.labels,\n\t\t\t\t\tmetadata: chunk.metadata,\n\t\t\t\t\tscore: Math.max(0, preview.value!.chunks.length - index),\n\t\t\t\t\tsource: chunk.source ?? preview.value!.document.source,\n\t\t\t\t\tstructure: chunk.structure,\n\t\t\t\t\ttext: chunk.text,\n\t\t\t\t\ttitle: chunk.title ?? preview.value!.document.title\n\t\t\t\t}))\n\t\t\t: []\n\t);\n\tconst sectionDiagnostics = computed(() =>\n\t\tbuildRAGSectionRetrievalDiagnostics(previewSources.value)\n\t);\n\tconst activeSectionDiagnostic = computed(() => {\n\t\tconst sectionKey = navigation.value?.section?.path?.join(' > ');\n\t\treturn sectionKey\n\t\t\t? (sectionDiagnostics.value.find(\n\t\t\t\t\t(diagnostic) => diagnostic.key === sectionKey\n\t\t\t\t) ?? null)\n\t\t\t: null;\n\t});\n\n\tconst inspect = async (id: string) => {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\n\t\ttry {\n\t\t\tconst response = await client.documentChunks(id);\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(response.error);\n\t\t\t}\n\n\t\t\tpreview.value = response;\n\t\t\tactiveChunkId.value = response.chunks[0]?.chunkId ?? null;\n\n\t\t\treturn response;\n\t\t} catch (caught) {\n\t\t\terror.value =\n\t\t\t\tcaught instanceof Error ? caught.message : String(caught);\n\t\t\tthrow caught;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\tconst clear = () => {\n\t\terror.value = null;\n\t\tisLoading.value = false;\n\t\tactiveChunkId.value = null;\n\t\tpreview.value = null;\n\t};\n\n\tconst selectChunk = (id: string | null) => {\n\t\tactiveChunkId.value = id;\n\t};\n\tconst selectParentSection = () => {\n\t\tconst leadChunkId = navigation.value?.parentSection?.leadChunkId;\n\t\tif (leadChunkId) {\n\t\t\tactiveChunkId.value = leadChunkId;\n\t\t}\n\t};\n\tconst selectChildSection = (sectionId: string) => {\n\t\tconst leadChunkId = navigation.value?.childSections.find(\n\t\t\t(section) => section.id === sectionId\n\t\t)?.leadChunkId;\n\t\tif (leadChunkId) {\n\t\t\tactiveChunkId.value = leadChunkId;\n\t\t}\n\t};\n\tconst selectSiblingSection = (sectionId: string) => {\n\t\tconst leadChunkId = navigation.value?.siblingSections.find(\n\t\t\t(section) => section.id === sectionId\n\t\t)?.leadChunkId;\n\t\tif (leadChunkId) {\n\t\t\tactiveChunkId.value = leadChunkId;\n\t\t}\n\t};\n\n\treturn {\n\t\tactiveChunkId,\n\t\tactiveSectionDiagnostic,\n\t\tclear,\n\t\tchunkGraph,\n\t\terror,\n\t\tinspect,\n\t\tisLoading,\n\t\tnavigation,\n\t\tpreview,\n\t\tsectionDiagnostics,\n\t\tselectChildSection,\n\t\tselectChunk,\n\t\tselectParentSection,\n\t\tselectSiblingSection\n\t};\n};\n\nexport type UseRAGChunkPreviewResult = ReturnType<typeof useRAGChunkPreview>;\n",
|
|
16
|
-
"import type {\n\tRAGAdminCapabilities,\n\tRAGBackendsResponse,\n\tRAGBackendMaintenanceRecommendation,\n\tRAGBackendMaintenanceSummary,\n\tRAGDocumentChunksResponse,\n\tRAGEvaluationInput,\n\tRAGEvaluationResponse,\n\tRAGRetrievalBaselineListResponse,\n\tRAGRetrievalBaselinePromotionFromRunRequest,\n\tRAGRetrievalBaselinePromotionRequest,\n\tRAGRetrievalBaselineRevertRequest,\n\tRAGRetrievalReleaseIncidentAcknowledgeRequest,\n\tRAGRetrievalReleaseDecisionActionRequest,\n\tRAGRetrievalBaselineResponse,\n\tRAGRetrievalPromotionCandidateListResponse,\n\tRAGRetrievalReleaseDecisionListResponse,\n\tRAGRetrievalLaneHandoffDecisionListResponse,\n\tRAGRetrievalLaneHandoffDecisionRequest,\n\tRAGRetrievalLaneHandoffDecisionResponse,\n\tRAGRetrievalLaneHandoffAutoCompletePolicyHistoryResponse,\n\tRAGRetrievalReleaseLanePolicyHistoryResponse,\n\tRAGRetrievalBaselineGatePolicyHistoryResponse,\n\tRAGRetrievalReleaseLaneEscalationPolicyHistoryResponse,\n\tRAGRetrievalLaneHandoffIncidentHistoryResponse,\n\tRAGRetrievalLaneHandoffIncidentListResponse,\n\tRAGRetrievalLaneHandoffIncidentStatusResponse,\n\tRAGRetrievalLaneHandoffListResponse,\n\tRAGRetrievalLaneHandoffStatusResponse,\n\tRAGRetrievalIncidentRemediationDecisionListResponse,\n\tRAGRetrievalIncidentRemediationDecisionRequest,\n\tRAGRetrievalIncidentRemediationExecutionHistoryResponse,\n\tRAGRetrievalIncidentRemediationBulkExecutionRequest,\n\tRAGRetrievalIncidentRemediationBulkExecutionResponse,\n\tRAGRetrievalIncidentRemediationExecutionRequest,\n\tRAGRetrievalIncidentRemediationExecutionResponse,\n\tRAGRetrievalIncidentRemediationStatusResponse,\n\tRAGRetrievalReleaseGroupHistoryResponse,\n\tRAGRetrievalReleaseIncidentListResponse,\n\tRAGRetrievalReleaseIncidentStatusResponse,\n\tRAGRetrievalReleaseDriftStatusResponse,\n\tRAGRetrievalReleaseStatusResponse,\n\tRAGRetrievalComparisonHistoryResponse,\n\tRAGRetrievalComparisonRequest,\n\tRAGRetrievalComparisonResponse,\n\tRAGDocumentIngestInput,\n\tRAGDocumentChunk,\n\tRAGDocumentsResponse,\n\tRAGDocumentUrlIngestInput,\n\tRAGDocumentUploadIngestInput,\n\tRAGIngestResponse,\n\tRAGMutationResponse,\n\tRAGOperationsResponse,\n\tRAGSearchRequest,\n\tRAGSearchResponse,\n\tRAGSearchTracePrunePreviewResponse,\n\tRAGSearchTracePruneHistoryResponse,\n\tRAGSearchTracePruneResponse,\n\tRAGSearchTraceGroupHistoryResponse,\n\tRAGSearchTraceHistoryResponse,\n\tRAGSearchTraceStatsResponse,\n\tRAGSource,\n\tRAGStatusResponse,\n\tRAGSyncRunOptions,\n\tRAGSyncResponse\n} from '../../../types/ai';\nimport { UNFOUND_INDEX } from '../../constants';\n\ntype FetchLike = typeof fetch;\n\nexport type RAGClientOptions = {\n\tpath: string;\n\tfetch?: FetchLike;\n};\n\nexport type RAGDetailedSearchResponse = {\n\tresults: RAGSource[];\n\ttrace?: RAGSearchResponse['trace'];\n};\n\nexport type RAGMaintenancePayload =\n\t| Pick<RAGMutationResponse, 'maintenance' | 'admin' | 'workflowStatus'>\n\t| Pick<RAGOperationsResponse, 'maintenance' | 'admin' | 'status'>\n\t| Pick<RAGStatusResponse, 'maintenance' | 'admin' | 'status'>\n\t| null\n\t| undefined;\n\nexport type RAGMaintenanceActionDescriptor = {\n\tkind: 'analyze_backend' | 'rebuild_native_index';\n\tlabel: string;\n\tavailable: boolean;\n\trecommended: boolean;\n\treason?: string;\n};\n\nexport type RAGMaintenanceOverview = {\n\tactiveJobCount: number;\n\tactions: RAGMaintenanceActionDescriptor[];\n\tavailableActions: RAGMaintenanceActionDescriptor[];\n\tbackend?: RAGBackendMaintenanceSummary['backend'];\n\tblockingRecommendations: RAGBackendMaintenanceRecommendation[];\n\tcriticalCount: number;\n\thasBlockingIssue: boolean;\n\tinfoCount: number;\n\tprimaryRecommendation?: RAGBackendMaintenanceRecommendation;\n\trecentlyCompletedActions: NonNullable<RAGBackendMaintenanceSummary>['recentActions'];\n\trecommendationCount: number;\n\trecommendations: RAGBackendMaintenanceRecommendation[];\n\trecommendedNow: RAGBackendMaintenanceRecommendation[];\n\twarningCount: number;\n};\n\nconst jsonHeaders: { 'Content-Type': string } = {\n\t'Content-Type': 'application/json'\n};\n\nconst normalizeBasePath = (path: string) =>\n\tpath.endsWith('/') ? path.slice(0, UNFOUND_INDEX) : path;\n\nconst parseJson = async <T>(response: Response) => {\n\tconst payload: T = JSON.parse(await response.text());\n\n\treturn payload;\n};\n\nconst isErrorPayload = (value: unknown): value is { error?: string } => {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\treturn !('error' in value) || typeof value.error === 'string';\n};\n\nconst toErrorMessage = async (response: Response) => {\n\ttry {\n\t\tconst payload = JSON.parse(await response.text());\n\t\tif (\n\t\t\tisErrorPayload(payload) &&\n\t\t\ttypeof payload.error === 'string' &&\n\t\t\tpayload.error\n\t\t) {\n\t\t\treturn payload.error;\n\t\t}\n\t} catch {\n\t\t// fall through\n\t}\n\n\treturn `Request failed with status ${response.status}`;\n};\n\nconst getMaintenanceSummary = (\n\tpayload: RAGMaintenancePayload\n): RAGBackendMaintenanceSummary | undefined => payload?.maintenance;\n\nconst getMaintenanceAdmin = (\n\tpayload: RAGMaintenancePayload\n): RAGAdminCapabilities | undefined => payload?.admin;\n\nexport const buildRAGMaintenanceOverview = (\n\tpayload: RAGMaintenancePayload\n): RAGMaintenanceOverview => {\n\tconst summary = getMaintenanceSummary(payload);\n\tconst admin = getMaintenanceAdmin(payload);\n\tconst recommendations = summary?.recommendations ?? [];\n\tconst blockingRecommendations = recommendations.filter(\n\t\t(entry) => entry.severity === 'error'\n\t);\n\tconst recommendedNow = recommendations.filter(\n\t\t(entry) => entry.severity !== 'info'\n\t);\n\tconst recommendedActions = new Set(\n\t\trecommendations.flatMap((entry) => (entry.action ? [entry.action] : []))\n\t);\n\tconst actionReason = (kind: 'analyze_backend' | 'rebuild_native_index') =>\n\t\trecommendations.find((entry) => entry.action === kind)?.message;\n\n\tconst actions: RAGMaintenanceActionDescriptor[] = [\n\t\t{\n\t\t\tavailable: admin?.canAnalyzeBackend ?? false,\n\t\t\tkind: 'analyze_backend',\n\t\t\tlabel: 'Analyze backend',\n\t\t\treason: actionReason('analyze_backend'),\n\t\t\trecommended: recommendedActions.has('analyze_backend')\n\t\t},\n\t\t{\n\t\t\tavailable: admin?.canRebuildNativeIndex ?? false,\n\t\t\tkind: 'rebuild_native_index',\n\t\t\tlabel: 'Rebuild native index',\n\t\t\treason: actionReason('rebuild_native_index'),\n\t\t\trecommended: recommendedActions.has('rebuild_native_index')\n\t\t}\n\t];\n\n\treturn {\n\t\tactiveJobCount: summary?.activeJobs.length ?? 0,\n\t\tactions,\n\t\tavailableActions: actions.filter((action) => action.available),\n\t\tbackend: summary?.backend,\n\t\tblockingRecommendations,\n\t\tcriticalCount: blockingRecommendations.length,\n\t\thasBlockingIssue: blockingRecommendations.length > 0,\n\t\tinfoCount: recommendations.filter((entry) => entry.severity === 'info')\n\t\t\t.length,\n\t\tprimaryRecommendation: [...recommendations].sort((left, right) => {\n\t\t\tconst severityRank = { error: 0, warning: 1, info: 2 } as const;\n\t\t\treturn severityRank[left.severity] - severityRank[right.severity];\n\t\t})[0],\n\t\trecentlyCompletedActions: (summary?.recentActions ?? []).filter(\n\t\t\t(action) => action.status === 'completed'\n\t\t),\n\t\trecommendationCount: recommendations.length,\n\t\trecommendations,\n\t\trecommendedNow,\n\t\twarningCount: recommendations.filter(\n\t\t\t(entry) => entry.severity === 'warning'\n\t\t).length\n\t};\n};\n\nexport const createRAGClient = (options: RAGClientOptions) => {\n\tconst basePath = normalizeBasePath(options.path);\n\tconst fetchImpl = options.fetch ?? fetch;\n\n\tconst search = async <IncludeTrace extends boolean | undefined = undefined>(\n\t\tinput: RAGSearchRequest & { includeTrace?: IncludeTrace }\n\t): Promise<\n\t\tIncludeTrace extends true ? RAGDetailedSearchResponse : RAGSource[]\n\t> => {\n\t\tconst response = await fetchImpl(`${basePath}/search`, {\n\t\t\tbody: JSON.stringify(input),\n\t\t\theaders: jsonHeaders,\n\t\t\tmethod: 'POST'\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t}\n\n\t\tconst payload = await parseJson<RAGSearchResponse>(response);\n\n\t\tif (!payload.ok) {\n\t\t\tthrow new Error(payload.error ?? 'RAG search failed');\n\t\t}\n\n\t\tif (input.includeTrace === true) {\n\t\t\treturn {\n\t\t\t\tresults: payload.results ?? [],\n\t\t\t\ttrace: payload.trace\n\t\t\t} as IncludeTrace extends true\n\t\t\t\t? RAGDetailedSearchResponse\n\t\t\t\t: RAGSource[];\n\t\t}\n\n\t\treturn (payload.results ?? []) as IncludeTrace extends true\n\t\t\t? RAGDetailedSearchResponse\n\t\t\t: RAGSource[];\n\t};\n\n\treturn {\n\t\tasync backends() {\n\t\t\tconst response = await fetchImpl(`${basePath}/backends`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGBackendsResponse>(response);\n\t\t},\n\t\tasync clearIndex() {\n\t\t\tconst response = await fetchImpl(`${basePath}/index`, {\n\t\t\t\tmethod: 'DELETE'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<{ ok: boolean }>(response);\n\t\t},\n\t\tasync createDocument(\n\t\t\tinput: RAGDocumentIngestInput['documents'][number]\n\t\t) {\n\t\t\tconst response = await fetchImpl(`${basePath}/documents`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync deleteDocument(id: string) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/documents/${encodeURIComponent(id)}`,\n\t\t\t\t{\n\t\t\t\t\tmethod: 'DELETE'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync documentChunks(id: string) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/documents/${encodeURIComponent(id)}/chunks`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = await toErrorMessage(response);\n\n\t\t\t\tconst errorResponse: RAGDocumentChunksResponse = {\n\t\t\t\t\terror,\n\t\t\t\t\tok: false\n\t\t\t\t};\n\n\t\t\t\treturn errorResponse;\n\t\t\t}\n\n\t\t\treturn parseJson<RAGDocumentChunksResponse>(response);\n\t\t},\n\t\tasync documents(kind?: string) {\n\t\t\tconst query = kind ? `?kind=${encodeURIComponent(kind)}` : '';\n\t\t\tconst response = await fetchImpl(`${basePath}/documents${query}`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGDocumentsResponse>(response);\n\t\t},\n\t\tasync evaluate(input: RAGEvaluationInput) {\n\t\t\tconst response = await fetchImpl(`${basePath}/evaluate`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGEvaluationResponse>(response);\n\t\t},\n\t\tasync compareRetrievals(input: RAGRetrievalComparisonRequest) {\n\t\t\tconst response = await fetchImpl(`${basePath}/compare/retrieval`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalComparisonResponse>(response);\n\t\t\tif (!payload.ok || !payload.comparison) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval comparison failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.comparison;\n\t\t},\n\t\tasync retrievalComparisonHistory(input?: {\n\t\t\tlimit?: number;\n\t\t\tsuiteId?: string;\n\t\t\tlabel?: string;\n\t\t\twinnerId?: string;\n\t\t\tgroupKey?: string;\n\t\t\ttag?: string;\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.suiteId) {\n\t\t\t\tsearchParams.set('suiteId', input.suiteId);\n\t\t\t}\n\t\t\tif (input?.label) {\n\t\t\t\tsearchParams.set('label', input.label);\n\t\t\t}\n\t\t\tif (input?.winnerId) {\n\t\t\t\tsearchParams.set('winnerId', input.winnerId);\n\t\t\t}\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalComparisonHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.runs) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval comparison history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.runs;\n\t\t},\n\t\tasync retrievalBaselines(input?: {\n\t\t\tgroupKey?: string;\n\t\t\ttag?: string;\n\t\t\tlimit?: number;\n\t\t\tstatus?: 'active' | 'superseded';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.status) {\n\t\t\t\tsearchParams.set('status', input.status);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineListResponse>(response);\n\t\t\tif (!payload.ok || !payload.baselines) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval baseline list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.baselines;\n\t\t},\n\t\tasync promoteRetrievalBaseline(\n\t\t\tinput: RAGRetrievalBaselinePromotionRequest\n\t\t) {\n\t\t\tconst payload = await this.promoteRetrievalBaselineDetailed(input);\n\t\t\treturn payload.baseline!;\n\t\t},\n\t\tasync promoteRetrievalBaselineDetailed(\n\t\t\tinput: RAGRetrievalBaselinePromotionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/promote`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineResponse>(response);\n\t\t\tif (!payload.ok || !payload.baseline) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval baseline promotion failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync promoteRetrievalBaselineToLane(\n\t\t\tinput: RAGRetrievalBaselinePromotionRequest & {\n\t\t\t\trolloutLabel: 'canary' | 'stable' | 'rollback_target';\n\t\t\t}\n\t\t) {\n\t\t\tconst payload =\n\t\t\t\tawait this.promoteRetrievalBaselineToLaneDetailed(input);\n\t\t\treturn payload.baseline!;\n\t\t},\n\t\tasync promoteRetrievalBaselineToLaneDetailed(\n\t\t\tinput: RAGRetrievalBaselinePromotionRequest & {\n\t\t\t\trolloutLabel: 'canary' | 'stable' | 'rollback_target';\n\t\t\t}\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/promote-lane`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineResponse>(response);\n\t\t\tif (!payload.ok || !payload.baseline) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval rollout-lane promotion failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync promoteRetrievalBaselineFromRun(\n\t\t\tinput: RAGRetrievalBaselinePromotionFromRunRequest\n\t\t) {\n\t\t\tconst payload =\n\t\t\t\tawait this.promoteRetrievalBaselineFromRunDetailed(input);\n\t\t\treturn payload.baseline!;\n\t\t},\n\t\tasync promoteRetrievalBaselineFromRunDetailed(\n\t\t\tinput: RAGRetrievalBaselinePromotionFromRunRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/promote-run`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineResponse>(response);\n\t\t\tif (!payload.ok || !payload.baseline) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval baseline promotion from run failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync revertRetrievalBaseline(\n\t\t\tinput: RAGRetrievalBaselineRevertRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/revert`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineResponse>(response);\n\t\t\tif (!payload.ok || !payload.baseline) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval baseline revert failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.baseline;\n\t\t},\n\t\tasync retrievalBaselineDecisions(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\tkind?: 'approve' | 'promote' | 'reject' | 'revert';\n\t\t\tfreshnessStatus?: 'fresh' | 'expired' | 'not_applicable';\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.kind) {\n\t\t\t\tsearchParams.set('kind', input.kind);\n\t\t\t}\n\t\t\tif (input?.freshnessStatus) {\n\t\t\t\tsearchParams.set('freshnessStatus', input.freshnessStatus);\n\t\t\t}\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/decisions${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.decisions) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release decision list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.decisions;\n\t\t},\n\t\tasync retrievalReleaseGroupHistory(input: {\n\t\t\tgroupKey: string;\n\t\t\tdecisionLimit?: number;\n\t\t\tbaselineLimit?: number;\n\t\t\trunLimit?: number;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\tif (typeof input.decisionLimit === 'number') {\n\t\t\t\tsearchParams.set('decisionLimit', String(input.decisionLimit));\n\t\t\t}\n\t\t\tif (typeof input.baselineLimit === 'number') {\n\t\t\t\tsearchParams.set('baselineLimit', String(input.baselineLimit));\n\t\t\t}\n\t\t\tif (typeof input.runLimit === 'number') {\n\t\t\t\tsearchParams.set('runLimit', String(input.runLimit));\n\t\t\t}\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/release-history?${searchParams}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseGroupHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release group history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync retrievalLaneHandoffs(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tsourceRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\tlimit?: number;\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (input?.sourceRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'sourceRolloutLabel',\n\t\t\t\t\tinput.sourceRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffListResponse>(response);\n\t\t\tif (!payload.ok || !payload.handoffs) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval lane handoff list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.handoffs;\n\t\t},\n\t\tasync retrievalLaneHandoffDecisions(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tsourceRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\tkind?: 'approve' | 'reject' | 'complete';\n\t\t\tlimit?: number;\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (input?.sourceRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'sourceRolloutLabel',\n\t\t\t\t\tinput.sourceRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (input?.kind) {\n\t\t\t\tsearchParams.set('kind', input.kind);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/decisions${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.decisions) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff decision list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.decisions;\n\t\t},\n\t\tasync retrievalLaneHandoffIncidents(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\tstatus?: 'open' | 'resolved';\n\t\t\tseverity?: 'warning' | 'critical';\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) searchParams.set('groupKey', input.groupKey);\n\t\t\tif (typeof input?.limit === 'number')\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\tif (input?.status) searchParams.set('status', input.status);\n\t\t\tif (input?.severity) searchParams.set('severity', input.severity);\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/incidents${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff incident list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync retrievalLaneHandoffIncidentHistory(input?: {\n\t\t\taction?: 'opened' | 'acknowledged' | 'unacknowledged' | 'resolved';\n\t\t\tgroupKey?: string;\n\t\t\tincidentId?: string;\n\t\t\tlimit?: number;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/incidents/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffIncidentHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff incident history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalLaneHandoffAutoCompletePolicyHistory(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/policies/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffAutoCompletePolicyHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff auto-complete policy history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalReleaseLanePolicyHistory(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\trolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\tscope?: 'rollout_label' | 'group_rollout_label';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/release-policies/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseLanePolicyHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release lane policy history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalBaselineGatePolicyHistory(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\trolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\tscope?: 'rollout_label' | 'group_rollout_label';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/gate-policies/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineGatePolicyHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval baseline gate policy history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalReleaseLaneEscalationPolicyHistory(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/escalation-policies/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseLaneEscalationPolicyHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release lane escalation policy history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalReleaseIncidentPolicyHistory(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incident-policies/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseLaneEscalationPolicyHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release incident policy history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalReleaseIncidentStatus() {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/status/release/incidents`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalReleaseIncidentStatusResponse>(\n\t\t\t\tresponse\n\t\t\t);\n\t\t},\n\t\tasync retrievalIncidentRemediationStatus() {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/status/release/remediations`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalIncidentRemediationStatusResponse>(\n\t\t\t\tresponse\n\t\t\t);\n\t\t},\n\t\tasync retrievalLaneHandoffIncidentStatus() {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/status/handoffs/incidents`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalLaneHandoffIncidentStatusResponse>(\n\t\t\t\tresponse\n\t\t\t);\n\t\t},\n\t\tasync acknowledgeRetrievalLaneHandoffIncident(\n\t\t\tinput: RAGRetrievalReleaseIncidentAcknowledgeRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/incidents/acknowledge`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff incident acknowledgement failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync unacknowledgeRetrievalLaneHandoffIncident(input: {\n\t\t\tincidentId: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/incidents/unacknowledge`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff incident unacknowledge failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync resolveRetrievalLaneHandoffIncident(input: {\n\t\t\tincidentId: string;\n\t\t\tresolvedAt?: number;\n\t\t\tresolvedBy?: string;\n\t\t\tresolutionNotes?: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/incidents/resolve`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff incident resolve failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync decideRetrievalLaneHandoff(\n\t\t\tinput: RAGRetrievalLaneHandoffDecisionRequest\n\t\t) {\n\t\t\tconst payload =\n\t\t\t\tawait this.decideRetrievalLaneHandoffDetailed(input);\n\t\t\tif (!payload.decision) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff decision failed'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn payload.decision;\n\t\t},\n\t\tasync decideRetrievalLaneHandoffDetailed(\n\t\t\tinput: RAGRetrievalLaneHandoffDecisionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/decide`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalLaneHandoffDecisionResponse>(response);\n\t\t},\n\t\tasync retrievalReleaseIncidents(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\tstatus?: 'open' | 'resolved';\n\t\t\tseverity?: 'warning' | 'critical';\n\t\t\tkind?:\n\t\t\t\t| 'approval_expired'\n\t\t\t\t| 'baseline_regression'\n\t\t\t\t| 'gate_failure'\n\t\t\t\t| 'handoff_stale';\n\t\t\tacknowledged?: boolean;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.status) {\n\t\t\t\tsearchParams.set('status', input.status);\n\t\t\t}\n\t\t\tif (input?.severity) {\n\t\t\t\tsearchParams.set('severity', input.severity);\n\t\t\t}\n\t\t\tif (input?.kind) {\n\t\t\t\tsearchParams.set('kind', input.kind);\n\t\t\t}\n\t\t\tif (typeof input?.acknowledged === 'boolean') {\n\t\t\t\tsearchParams.set('acknowledged', String(input.acknowledged));\n\t\t\t}\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release incident list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync retrievalIncidentRemediationDecisions(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tincidentId?: string;\n\t\t\tlimit?: number;\n\t\t\tremediationKind?: RAGRetrievalIncidentRemediationDecisionRequest['remediationKind'];\n\t\t\tstatus?: 'planned' | 'applied' | 'dismissed';\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/remediations${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalIncidentRemediationDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval incident remediation decision list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalIncidentRemediationExecutions(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tincidentId?: string;\n\t\t\tlimit?: number;\n\t\t\tactionKind?: RAGRetrievalIncidentRemediationExecutionRequest['action']['kind'];\n\t\t\tcode?: NonNullable<\n\t\t\t\tRAGRetrievalIncidentRemediationExecutionResponse['execution']\n\t\t\t>['code'];\n\t\t\tblockedByGuardrail?: boolean;\n\t\t\tidempotentReplay?: boolean;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/remediations/executions${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalIncidentRemediationExecutionHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval incident remediation execution history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync recordRetrievalIncidentRemediationDecision(\n\t\t\tinput: RAGRetrievalIncidentRemediationDecisionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/remediations`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalIncidentRemediationDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval incident remediation decision record failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync executeRetrievalIncidentRemediation(\n\t\t\tinput: RAGRetrievalIncidentRemediationExecutionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/remediations/execute`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalIncidentRemediationExecutionResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.execution) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval incident remediation execution failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync bulkExecuteRetrievalIncidentRemediations(\n\t\t\tinput: RAGRetrievalIncidentRemediationBulkExecutionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/remediations/execute/bulk`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalIncidentRemediationBulkExecutionResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.results) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'Bulk RAG retrieval incident remediation execution failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.results;\n\t\t},\n\t\tasync acknowledgeRetrievalReleaseIncident(\n\t\t\tinput: RAGRetrievalReleaseIncidentAcknowledgeRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/acknowledge`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release incident acknowledgement failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync unacknowledgeRetrievalReleaseIncident(input: {\n\t\t\tincidentId: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/unacknowledge`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release incident unacknowledge failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync resolveRetrievalReleaseIncident(input: {\n\t\t\tincidentId: string;\n\t\t\tresolvedAt?: number;\n\t\t\tresolvedBy?: string;\n\t\t\tresolutionNotes?: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/resolve`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release incident resolve failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync retrievalPromotionCandidates(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\ttag?: string;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\tapproved?: boolean;\n\t\t\tready?: boolean;\n\t\t\tblocked?: boolean;\n\t\t\treviewStatus?: 'approved' | 'blocked' | 'needs_review' | 'ready';\n\t\t\tfreshnessStatus?: 'fresh' | 'expired' | 'not_applicable';\n\t\t\tsortBy?:\n\t\t\t\t| 'approvalFreshness'\n\t\t\t\t| 'finishedAt'\n\t\t\t\t| 'gateSeverity'\n\t\t\t\t| 'priority';\n\t\t\tsortDirection?: 'asc' | 'desc';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof input?.approved === 'boolean') {\n\t\t\t\tsearchParams.set('approved', String(input.approved));\n\t\t\t}\n\t\t\tif (typeof input?.ready === 'boolean') {\n\t\t\t\tsearchParams.set('ready', String(input.ready));\n\t\t\t}\n\t\t\tif (typeof input?.blocked === 'boolean') {\n\t\t\t\tsearchParams.set('blocked', String(input.blocked));\n\t\t\t}\n\t\t\tif (input?.reviewStatus) {\n\t\t\t\tsearchParams.set('reviewStatus', input.reviewStatus);\n\t\t\t}\n\t\t\tif (input?.freshnessStatus) {\n\t\t\t\tsearchParams.set('freshnessStatus', input.freshnessStatus);\n\t\t\t}\n\t\t\tif (input?.sortBy) {\n\t\t\t\tsearchParams.set('sortBy', input.sortBy);\n\t\t\t}\n\t\t\tif (input?.sortDirection) {\n\t\t\t\tsearchParams.set('sortDirection', input.sortDirection);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/candidates${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalPromotionCandidateListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.candidates) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval promotion candidate list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.candidates;\n\t\t},\n\t\tasync approveRetrievalCandidate(\n\t\t\tinput: RAGRetrievalReleaseDecisionActionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/approve`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.decisions) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval approval failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.decisions;\n\t\t},\n\t\tasync rejectRetrievalCandidate(\n\t\t\tinput: RAGRetrievalReleaseDecisionActionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/reject`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.decisions) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval rejection failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.decisions;\n\t\t},\n\t\tasync ingest(chunks: RAGDocumentChunk[]) {\n\t\t\tconst response = await fetchImpl(`${basePath}/ingest`, {\n\t\t\t\tbody: JSON.stringify({ chunks }),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGIngestResponse>(response);\n\t\t},\n\t\tasync ingestDocuments(input: RAGDocumentIngestInput) {\n\t\t\tconst response = await fetchImpl(`${basePath}/ingest`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGIngestResponse>(response);\n\t\t},\n\t\tasync ingestUploads(input: RAGDocumentUploadIngestInput) {\n\t\t\tconst response = await fetchImpl(`${basePath}/ingest`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGIngestResponse>(response);\n\t\t},\n\t\tasync ingestUrls(input: RAGDocumentUrlIngestInput) {\n\t\t\tconst response = await fetchImpl(`${basePath}/ingest`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGIngestResponse>(response);\n\t\t},\n\t\tasync analyzeBackend() {\n\t\t\tconst response = await fetchImpl(`${basePath}/backend/analyze`, {\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync ops() {\n\t\t\tconst response = await fetchImpl(`${basePath}/ops`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGOperationsResponse>(response);\n\t\t},\n\t\tasync searchTraceHistory(input?: {\n\t\t\tquery?: string;\n\t\t\tgroupKey?: string;\n\t\t\ttag?: string;\n\t\t\tlimit?: number;\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.query) {\n\t\t\t\tsearchParams.set('query', input.query);\n\t\t\t}\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(`${basePath}/traces${suffix}`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTraceHistoryResponse>(response);\n\t\t\tif (!payload.ok || !payload.history) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.history;\n\t\t},\n\t\tasync searchTraceGroups(input?: { tag?: string; limit?: number }) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/traces/groups${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTraceGroupHistoryResponse>(response);\n\t\t\tif (!payload.ok || !payload.history) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace group history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.history;\n\t\t},\n\t\tasync searchTraceStats(input?: { tag?: string }) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/traces/stats${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTraceStatsResponse>(response);\n\t\t\tif (!payload.ok || !payload.stats) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace stats failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.stats;\n\t\t},\n\t\tasync previewSearchTracePrune(input?: {\n\t\t\tmaxAgeMs?: number;\n\t\t\tmaxRecordsPerQuery?: number;\n\t\t\tmaxRecordsPerGroup?: number;\n\t\t\tnow?: number;\n\t\t\ttag?: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/traces/prune/preview`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input ?? {}),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTracePrunePreviewResponse>(response);\n\t\t\tif (!payload.ok || !payload.preview) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace prune preview failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.preview;\n\t\t},\n\t\tasync pruneSearchTraces(input?: {\n\t\t\tmaxAgeMs?: number;\n\t\t\tmaxRecordsPerQuery?: number;\n\t\t\tmaxRecordsPerGroup?: number;\n\t\t\tnow?: number;\n\t\t\ttag?: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(`${basePath}/traces/prune`, {\n\t\t\t\tbody: JSON.stringify(input ?? {}),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTracePruneResponse>(response);\n\t\t\tif (!payload.ok || !payload.result) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace prune failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync searchTracePruneHistory(input?: {\n\t\t\tlimit?: number;\n\t\t\ttrigger?: 'manual' | 'write' | 'schedule';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.trigger) {\n\t\t\t\tsearchParams.set('trigger', input.trigger);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/traces/prune/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTracePruneHistoryResponse>(response);\n\t\t\tif (!payload.ok || !payload.runs) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace prune history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.runs;\n\t\t},\n\t\tasync syncSources() {\n\t\t\tconst response = await fetchImpl(`${basePath}/sync`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGSyncResponse>(response);\n\t\t},\n\t\tasync syncAllSources(options?: RAGSyncRunOptions) {\n\t\t\tconst response = await fetchImpl(`${basePath}/sync`, {\n\t\t\t\tbody:\n\t\t\t\t\toptions?.background === true\n\t\t\t\t\t\t? JSON.stringify({ background: true })\n\t\t\t\t\t\t: undefined,\n\t\t\t\theaders: options?.background === true ? jsonHeaders : undefined,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t} satisfies RAGSyncResponse;\n\t\t\t}\n\n\t\t\treturn parseJson<RAGSyncResponse>(response);\n\t\t},\n\t\tasync syncSource(id: string, options?: RAGSyncRunOptions) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/sync/${encodeURIComponent(id)}`,\n\t\t\t\t{\n\t\t\t\t\tbody:\n\t\t\t\t\t\toptions?.background === true\n\t\t\t\t\t\t\t? JSON.stringify({ background: true })\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\theaders:\n\t\t\t\t\t\toptions?.background === true ? jsonHeaders : undefined,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t} satisfies RAGSyncResponse;\n\t\t\t}\n\n\t\t\treturn parseJson<RAGSyncResponse>(response);\n\t\t},\n\t\tasync reindexDocument(id: string) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/reindex/documents/${encodeURIComponent(id)}`,\n\t\t\t\t{\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync reindexSource(source: string) {\n\t\t\tconst response = await fetchImpl(`${basePath}/reindex/source`, {\n\t\t\t\tbody: JSON.stringify({ source }),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync reseed() {\n\t\t\tconst response = await fetchImpl(`${basePath}/reseed`, {\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync reset() {\n\t\t\tconst response = await fetchImpl(`${basePath}/reset`, {\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync rebuildNativeIndex() {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/backend/reindex-native`,\n\t\t\t\t{\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tsearch,\n\t\tasync searchWithTrace(input: RAGSearchRequest) {\n\t\t\treturn search({ ...input, includeTrace: true });\n\t\t},\n\t\t/**\n\t\t * @deprecated Use `searchWithTrace` for trace-aware search responses.\n\t\t */\n\t\tasync searchDetailed(input: RAGSearchRequest) {\n\t\t\treturn search({ ...input, includeTrace: true });\n\t\t},\n\t\tasync status() {\n\t\t\tconst response = await fetchImpl(`${basePath}/status`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGStatusResponse>(response);\n\t\t},\n\t\tasync statusMaintenance() {\n\t\t\tconst response = await fetchImpl(`${basePath}/status/maintenance`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGStatusResponse>(response);\n\t\t},\n\t\tasync retrievalReleaseStatus() {\n\t\t\tconst response = await fetchImpl(`${basePath}/status/release`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseStatusResponse>(response);\n\t\t\treturn payload.retrievalComparisons;\n\t\t},\n\t\tasync retrievalReleaseDriftStatus() {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/status/release/drift`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalReleaseDriftStatusResponse>(response);\n\t\t},\n\t\tasync retrievalLaneHandoffStatus() {\n\t\t\tconst response = await fetchImpl(`${basePath}/status/handoffs`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalLaneHandoffStatusResponse>(response);\n\t\t}\n\t};\n};\n\nexport type RAGClient = ReturnType<typeof createRAGClient>;\n",
|
|
16
|
+
"import type {\n\tRAGAdminCapabilities,\n\tRAGBackendsResponse,\n\tRAGBackendMaintenanceRecommendation,\n\tRAGBackendMaintenanceSummary,\n\tRAGDocumentChunksResponse,\n\tRAGEvaluationInput,\n\tRAGEvaluationResponse,\n\tRAGRetrievalBaselineListResponse,\n\tRAGRetrievalBaselinePromotionFromRunRequest,\n\tRAGRetrievalBaselinePromotionRequest,\n\tRAGRetrievalBaselineRevertRequest,\n\tRAGRetrievalReleaseIncidentAcknowledgeRequest,\n\tRAGRetrievalReleaseDecisionActionRequest,\n\tRAGRetrievalBaselineResponse,\n\tRAGRetrievalPromotionCandidateListResponse,\n\tRAGRetrievalReleaseDecisionListResponse,\n\tRAGRetrievalLaneHandoffDecisionListResponse,\n\tRAGRetrievalLaneHandoffDecisionRequest,\n\tRAGRetrievalLaneHandoffDecisionResponse,\n\tRAGRetrievalLaneHandoffAutoCompletePolicyHistoryResponse,\n\tRAGRetrievalReleaseLanePolicyHistoryResponse,\n\tRAGRetrievalBaselineGatePolicyHistoryResponse,\n\tRAGRetrievalReleaseLaneEscalationPolicyHistoryResponse,\n\tRAGRetrievalLaneHandoffIncidentHistoryResponse,\n\tRAGRetrievalLaneHandoffIncidentListResponse,\n\tRAGRetrievalLaneHandoffIncidentStatusResponse,\n\tRAGRetrievalLaneHandoffListResponse,\n\tRAGRetrievalLaneHandoffStatusResponse,\n\tRAGRetrievalIncidentRemediationDecisionListResponse,\n\tRAGRetrievalIncidentRemediationDecisionRequest,\n\tRAGRetrievalIncidentRemediationExecutionHistoryResponse,\n\tRAGRetrievalIncidentRemediationBulkExecutionRequest,\n\tRAGRetrievalIncidentRemediationBulkExecutionResponse,\n\tRAGRetrievalIncidentRemediationExecutionRequest,\n\tRAGRetrievalIncidentRemediationExecutionResponse,\n\tRAGRetrievalIncidentRemediationStatusResponse,\n\tRAGRetrievalReleaseGroupHistoryResponse,\n\tRAGRetrievalReleaseIncidentListResponse,\n\tRAGRetrievalReleaseIncidentStatusResponse,\n\tRAGRetrievalReleaseDriftStatusResponse,\n\tRAGRetrievalReleaseStatusResponse,\n\tRAGRetrievalComparisonHistoryResponse,\n\tRAGRetrievalComparisonRequest,\n\tRAGRetrievalComparisonResponse,\n\tRAGAdaptiveNativePlannerBenchmarkResponse,\n\tRAGAdaptiveNativePlannerBenchmarkSnapshotResponse,\n\tRAGDocumentIngestInput,\n\tRAGDocumentChunk,\n\tRAGDocumentsResponse,\n\tRAGDocumentUrlIngestInput,\n\tRAGDocumentUploadIngestInput,\n\tRAGIngestResponse,\n\tRAGMutationResponse,\n\tRAGOperationsResponse,\n\tRAGSearchRequest,\n\tRAGSearchResponse,\n\tRAGSearchTracePrunePreviewResponse,\n\tRAGSearchTracePruneHistoryResponse,\n\tRAGSearchTracePruneResponse,\n\tRAGSearchTraceGroupHistoryResponse,\n\tRAGSearchTraceHistoryResponse,\n\tRAGSearchTraceStatsResponse,\n\tRAGSource,\n\tRAGStatusResponse,\n\tRAGSyncRunOptions,\n\tRAGSyncResponse\n} from '../../../types/ai';\nimport { UNFOUND_INDEX } from '../../constants';\n\ntype FetchLike = typeof fetch;\n\nexport type RAGClientOptions = {\n\tpath: string;\n\tfetch?: FetchLike;\n};\n\nexport type RAGDetailedSearchResponse = {\n\tresults: RAGSource[];\n\ttrace?: RAGSearchResponse['trace'];\n};\n\nexport type RAGMaintenancePayload =\n\t| Pick<RAGMutationResponse, 'maintenance' | 'admin' | 'workflowStatus'>\n\t| Pick<RAGOperationsResponse, 'maintenance' | 'admin' | 'status'>\n\t| Pick<RAGStatusResponse, 'maintenance' | 'admin' | 'status'>\n\t| null\n\t| undefined;\n\nexport type RAGMaintenanceActionDescriptor = {\n\tkind: 'analyze_backend' | 'rebuild_native_index';\n\tlabel: string;\n\tavailable: boolean;\n\trecommended: boolean;\n\treason?: string;\n};\n\nexport type RAGMaintenanceOverview = {\n\tactiveJobCount: number;\n\tactions: RAGMaintenanceActionDescriptor[];\n\tavailableActions: RAGMaintenanceActionDescriptor[];\n\tbackend?: RAGBackendMaintenanceSummary['backend'];\n\tblockingRecommendations: RAGBackendMaintenanceRecommendation[];\n\tcriticalCount: number;\n\thasBlockingIssue: boolean;\n\tinfoCount: number;\n\tprimaryRecommendation?: RAGBackendMaintenanceRecommendation;\n\trecentlyCompletedActions: NonNullable<RAGBackendMaintenanceSummary>['recentActions'];\n\trecommendationCount: number;\n\trecommendations: RAGBackendMaintenanceRecommendation[];\n\trecommendedNow: RAGBackendMaintenanceRecommendation[];\n\twarningCount: number;\n};\n\nconst jsonHeaders: { 'Content-Type': string } = {\n\t'Content-Type': 'application/json'\n};\n\nconst normalizeBasePath = (path: string) =>\n\tpath.endsWith('/') ? path.slice(0, UNFOUND_INDEX) : path;\n\nconst parseJson = async <T>(response: Response) => {\n\tconst payload: T = JSON.parse(await response.text());\n\n\treturn payload;\n};\n\nconst isErrorPayload = (value: unknown): value is { error?: string } => {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\n\treturn !('error' in value) || typeof value.error === 'string';\n};\n\nconst toErrorMessage = async (response: Response) => {\n\ttry {\n\t\tconst payload = JSON.parse(await response.text());\n\t\tif (\n\t\t\tisErrorPayload(payload) &&\n\t\t\ttypeof payload.error === 'string' &&\n\t\t\tpayload.error\n\t\t) {\n\t\t\treturn payload.error;\n\t\t}\n\t} catch {\n\t\t// fall through\n\t}\n\n\treturn `Request failed with status ${response.status}`;\n};\n\nconst getMaintenanceSummary = (\n\tpayload: RAGMaintenancePayload\n): RAGBackendMaintenanceSummary | undefined => payload?.maintenance;\n\nconst getMaintenanceAdmin = (\n\tpayload: RAGMaintenancePayload\n): RAGAdminCapabilities | undefined => payload?.admin;\n\nexport const buildRAGMaintenanceOverview = (\n\tpayload: RAGMaintenancePayload\n): RAGMaintenanceOverview => {\n\tconst summary = getMaintenanceSummary(payload);\n\tconst admin = getMaintenanceAdmin(payload);\n\tconst recommendations = summary?.recommendations ?? [];\n\tconst blockingRecommendations = recommendations.filter(\n\t\t(entry) => entry.severity === 'error'\n\t);\n\tconst recommendedNow = recommendations.filter(\n\t\t(entry) => entry.severity !== 'info'\n\t);\n\tconst recommendedActions = new Set(\n\t\trecommendations.flatMap((entry) => (entry.action ? [entry.action] : []))\n\t);\n\tconst actionReason = (kind: 'analyze_backend' | 'rebuild_native_index') =>\n\t\trecommendations.find((entry) => entry.action === kind)?.message;\n\n\tconst actions: RAGMaintenanceActionDescriptor[] = [\n\t\t{\n\t\t\tavailable: admin?.canAnalyzeBackend ?? false,\n\t\t\tkind: 'analyze_backend',\n\t\t\tlabel: 'Analyze backend',\n\t\t\treason: actionReason('analyze_backend'),\n\t\t\trecommended: recommendedActions.has('analyze_backend')\n\t\t},\n\t\t{\n\t\t\tavailable: admin?.canRebuildNativeIndex ?? false,\n\t\t\tkind: 'rebuild_native_index',\n\t\t\tlabel: 'Rebuild native index',\n\t\t\treason: actionReason('rebuild_native_index'),\n\t\t\trecommended: recommendedActions.has('rebuild_native_index')\n\t\t}\n\t];\n\n\treturn {\n\t\tactiveJobCount: summary?.activeJobs.length ?? 0,\n\t\tactions,\n\t\tavailableActions: actions.filter((action) => action.available),\n\t\tbackend: summary?.backend,\n\t\tblockingRecommendations,\n\t\tcriticalCount: blockingRecommendations.length,\n\t\thasBlockingIssue: blockingRecommendations.length > 0,\n\t\tinfoCount: recommendations.filter((entry) => entry.severity === 'info')\n\t\t\t.length,\n\t\tprimaryRecommendation: [...recommendations].sort((left, right) => {\n\t\t\tconst severityRank = { error: 0, warning: 1, info: 2 } as const;\n\t\t\treturn severityRank[left.severity] - severityRank[right.severity];\n\t\t})[0],\n\t\trecentlyCompletedActions: (summary?.recentActions ?? []).filter(\n\t\t\t(action) => action.status === 'completed'\n\t\t),\n\t\trecommendationCount: recommendations.length,\n\t\trecommendations,\n\t\trecommendedNow,\n\t\twarningCount: recommendations.filter(\n\t\t\t(entry) => entry.severity === 'warning'\n\t\t).length\n\t};\n};\n\nexport const createRAGClient = (options: RAGClientOptions) => {\n\tconst basePath = normalizeBasePath(options.path);\n\tconst fetchImpl = options.fetch ?? fetch;\n\n\tconst search = async <IncludeTrace extends boolean | undefined = undefined>(\n\t\tinput: RAGSearchRequest & { includeTrace?: IncludeTrace }\n\t): Promise<\n\t\tIncludeTrace extends true ? RAGDetailedSearchResponse : RAGSource[]\n\t> => {\n\t\tconst response = await fetchImpl(`${basePath}/search`, {\n\t\t\tbody: JSON.stringify(input),\n\t\t\theaders: jsonHeaders,\n\t\t\tmethod: 'POST'\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t}\n\n\t\tconst payload = await parseJson<RAGSearchResponse>(response);\n\n\t\tif (!payload.ok) {\n\t\t\tthrow new Error(payload.error ?? 'RAG search failed');\n\t\t}\n\n\t\tif (input.includeTrace === true) {\n\t\t\treturn {\n\t\t\t\tresults: payload.results ?? [],\n\t\t\t\ttrace: payload.trace\n\t\t\t} as IncludeTrace extends true\n\t\t\t\t? RAGDetailedSearchResponse\n\t\t\t\t: RAGSource[];\n\t\t}\n\n\t\treturn (payload.results ?? []) as IncludeTrace extends true\n\t\t\t? RAGDetailedSearchResponse\n\t\t\t: RAGSource[];\n\t};\n\n\treturn {\n\t\tasync backends() {\n\t\t\tconst response = await fetchImpl(`${basePath}/backends`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGBackendsResponse>(response);\n\t\t},\n\t\tasync clearIndex() {\n\t\t\tconst response = await fetchImpl(`${basePath}/index`, {\n\t\t\t\tmethod: 'DELETE'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<{ ok: boolean }>(response);\n\t\t},\n\t\tasync createDocument(\n\t\t\tinput: RAGDocumentIngestInput['documents'][number]\n\t\t) {\n\t\t\tconst response = await fetchImpl(`${basePath}/documents`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync deleteDocument(id: string) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/documents/${encodeURIComponent(id)}`,\n\t\t\t\t{\n\t\t\t\t\tmethod: 'DELETE'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync documentChunks(id: string) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/documents/${encodeURIComponent(id)}/chunks`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst error = await toErrorMessage(response);\n\n\t\t\t\tconst errorResponse: RAGDocumentChunksResponse = {\n\t\t\t\t\terror,\n\t\t\t\t\tok: false\n\t\t\t\t};\n\n\t\t\t\treturn errorResponse;\n\t\t\t}\n\n\t\t\treturn parseJson<RAGDocumentChunksResponse>(response);\n\t\t},\n\t\tasync documents(kind?: string) {\n\t\t\tconst query = kind ? `?kind=${encodeURIComponent(kind)}` : '';\n\t\t\tconst response = await fetchImpl(`${basePath}/documents${query}`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGDocumentsResponse>(response);\n\t\t},\n\t\tasync evaluate(input: RAGEvaluationInput) {\n\t\t\tconst response = await fetchImpl(`${basePath}/evaluate`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGEvaluationResponse>(response);\n\t\t},\n\t\tasync compareRetrievals(input: RAGRetrievalComparisonRequest) {\n\t\t\tconst response = await fetchImpl(`${basePath}/compare/retrieval`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalComparisonResponse>(response);\n\t\t\tif (!payload.ok || !payload.comparison) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval comparison failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.comparison;\n\t\t},\n\t\tasync retrievalComparisonHistory(input?: {\n\t\t\tlimit?: number;\n\t\t\tsuiteId?: string;\n\t\t\tlabel?: string;\n\t\t\twinnerId?: string;\n\t\t\tgroupKey?: string;\n\t\t\ttag?: string;\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.suiteId) {\n\t\t\t\tsearchParams.set('suiteId', input.suiteId);\n\t\t\t}\n\t\t\tif (input?.label) {\n\t\t\t\tsearchParams.set('label', input.label);\n\t\t\t}\n\t\t\tif (input?.winnerId) {\n\t\t\t\tsearchParams.set('winnerId', input.winnerId);\n\t\t\t}\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalComparisonHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.runs) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval comparison history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.runs;\n\t\t},\n\t\tasync retrievalBaselines(input?: {\n\t\t\tgroupKey?: string;\n\t\t\ttag?: string;\n\t\t\tlimit?: number;\n\t\t\tstatus?: 'active' | 'superseded';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.status) {\n\t\t\t\tsearchParams.set('status', input.status);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineListResponse>(response);\n\t\t\tif (!payload.ok || !payload.baselines) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval baseline list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.baselines;\n\t\t},\n\t\tasync promoteRetrievalBaseline(\n\t\t\tinput: RAGRetrievalBaselinePromotionRequest\n\t\t) {\n\t\t\tconst payload = await this.promoteRetrievalBaselineDetailed(input);\n\t\t\treturn payload.baseline!;\n\t\t},\n\t\tasync promoteRetrievalBaselineDetailed(\n\t\t\tinput: RAGRetrievalBaselinePromotionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/promote`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineResponse>(response);\n\t\t\tif (!payload.ok || !payload.baseline) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval baseline promotion failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync promoteRetrievalBaselineToLane(\n\t\t\tinput: RAGRetrievalBaselinePromotionRequest & {\n\t\t\t\trolloutLabel: 'canary' | 'stable' | 'rollback_target';\n\t\t\t}\n\t\t) {\n\t\t\tconst payload =\n\t\t\t\tawait this.promoteRetrievalBaselineToLaneDetailed(input);\n\t\t\treturn payload.baseline!;\n\t\t},\n\t\tasync promoteRetrievalBaselineToLaneDetailed(\n\t\t\tinput: RAGRetrievalBaselinePromotionRequest & {\n\t\t\t\trolloutLabel: 'canary' | 'stable' | 'rollback_target';\n\t\t\t}\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/promote-lane`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineResponse>(response);\n\t\t\tif (!payload.ok || !payload.baseline) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval rollout-lane promotion failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync promoteRetrievalBaselineFromRun(\n\t\t\tinput: RAGRetrievalBaselinePromotionFromRunRequest\n\t\t) {\n\t\t\tconst payload =\n\t\t\t\tawait this.promoteRetrievalBaselineFromRunDetailed(input);\n\t\t\treturn payload.baseline!;\n\t\t},\n\t\tasync promoteRetrievalBaselineFromRunDetailed(\n\t\t\tinput: RAGRetrievalBaselinePromotionFromRunRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/promote-run`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineResponse>(response);\n\t\t\tif (!payload.ok || !payload.baseline) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval baseline promotion from run failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync revertRetrievalBaseline(\n\t\t\tinput: RAGRetrievalBaselineRevertRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/revert`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineResponse>(response);\n\t\t\tif (!payload.ok || !payload.baseline) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval baseline revert failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.baseline;\n\t\t},\n\t\tasync retrievalBaselineDecisions(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\tkind?: 'approve' | 'promote' | 'reject' | 'revert';\n\t\t\tfreshnessStatus?: 'fresh' | 'expired' | 'not_applicable';\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.kind) {\n\t\t\t\tsearchParams.set('kind', input.kind);\n\t\t\t}\n\t\t\tif (input?.freshnessStatus) {\n\t\t\t\tsearchParams.set('freshnessStatus', input.freshnessStatus);\n\t\t\t}\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/decisions${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.decisions) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release decision list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.decisions;\n\t\t},\n\t\tasync retrievalReleaseGroupHistory(input: {\n\t\t\tgroupKey: string;\n\t\t\tdecisionLimit?: number;\n\t\t\tbaselineLimit?: number;\n\t\t\tbenchmarkLimit?: number;\n\t\t\trunLimit?: number;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\tif (typeof input.decisionLimit === 'number') {\n\t\t\t\tsearchParams.set('decisionLimit', String(input.decisionLimit));\n\t\t\t}\n\t\t\tif (typeof input.baselineLimit === 'number') {\n\t\t\t\tsearchParams.set('baselineLimit', String(input.baselineLimit));\n\t\t\t}\n\t\t\tif (typeof input.runLimit === 'number') {\n\t\t\t\tsearchParams.set('runLimit', String(input.runLimit));\n\t\t\t}\n\t\t\tif (typeof input.benchmarkLimit === 'number') {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'benchmarkLimit',\n\t\t\t\t\tString(input.benchmarkLimit)\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (input.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/release-history?${searchParams}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseGroupHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release group history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync adaptiveNativePlannerBenchmark(input?: {\n\t\t\tlimit?: number;\n\t\t\tlabel?: string;\n\t\t\tdescription?: string;\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.label) {\n\t\t\t\tsearchParams.set('label', input.label);\n\t\t\t}\n\t\t\tif (input?.description) {\n\t\t\t\tsearchParams.set('description', input.description);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/benchmarks/adaptive-native-planner${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGAdaptiveNativePlannerBenchmarkResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'Adaptive native planner benchmark history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync saveAdaptiveNativePlannerBenchmarkSnapshot(input?: {\n\t\t\tlimit?: number;\n\t\t\tlabel?: string;\n\t\t\tdescription?: string;\n\t\t\tversion?: number;\n\t\t\tcreatedAt?: number;\n\t\t\tmetadata?: Record<string, unknown>;\n\t\t\tsnapshotMetadata?: Record<string, unknown>;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/benchmarks/adaptive-native-planner/snapshots`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\tcreatedAt: input?.createdAt,\n\t\t\t\t\t\tdescription: input?.description,\n\t\t\t\t\t\tlabel: input?.label,\n\t\t\t\t\t\tlimit: input?.limit,\n\t\t\t\t\t\tmetadata: input?.metadata,\n\t\t\t\t\t\tsnapshotMetadata: input?.snapshotMetadata,\n\t\t\t\t\t\tversion: input?.version\n\t\t\t\t\t}),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGAdaptiveNativePlannerBenchmarkSnapshotResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'Adaptive native planner benchmark snapshot failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync retrievalLaneHandoffs(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tsourceRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\tlimit?: number;\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (input?.sourceRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'sourceRolloutLabel',\n\t\t\t\t\tinput.sourceRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffListResponse>(response);\n\t\t\tif (!payload.ok || !payload.handoffs) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval lane handoff list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.handoffs;\n\t\t},\n\t\tasync retrievalLaneHandoffDecisions(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tsourceRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\tkind?: 'approve' | 'reject' | 'complete';\n\t\t\tlimit?: number;\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (input?.sourceRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'sourceRolloutLabel',\n\t\t\t\t\tinput.sourceRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (input?.kind) {\n\t\t\t\tsearchParams.set('kind', input.kind);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/decisions${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.decisions) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff decision list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.decisions;\n\t\t},\n\t\tasync retrievalLaneHandoffIncidents(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\tstatus?: 'open' | 'resolved';\n\t\t\tseverity?: 'warning' | 'critical';\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) searchParams.set('groupKey', input.groupKey);\n\t\t\tif (typeof input?.limit === 'number')\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\tif (input?.status) searchParams.set('status', input.status);\n\t\t\tif (input?.severity) searchParams.set('severity', input.severity);\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/incidents${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff incident list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync retrievalLaneHandoffIncidentHistory(input?: {\n\t\t\taction?: 'opened' | 'acknowledged' | 'unacknowledged' | 'resolved';\n\t\t\tgroupKey?: string;\n\t\t\tincidentId?: string;\n\t\t\tlimit?: number;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/incidents/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffIncidentHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff incident history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalLaneHandoffAutoCompletePolicyHistory(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/policies/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffAutoCompletePolicyHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff auto-complete policy history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalReleaseLanePolicyHistory(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\trolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\tscope?: 'rollout_label' | 'group_rollout_label';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/release-policies/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseLanePolicyHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release lane policy history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalBaselineGatePolicyHistory(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\trolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\tscope?: 'rollout_label' | 'group_rollout_label';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/gate-policies/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalBaselineGatePolicyHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval baseline gate policy history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalReleaseLaneEscalationPolicyHistory(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/escalation-policies/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseLaneEscalationPolicyHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release lane escalation policy history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalReleaseIncidentPolicyHistory(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incident-policies/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseLaneEscalationPolicyHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release incident policy history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalReleaseIncidentStatus() {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/status/release/incidents`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalReleaseIncidentStatusResponse>(\n\t\t\t\tresponse\n\t\t\t);\n\t\t},\n\t\tasync retrievalIncidentRemediationStatus() {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/status/release/remediations`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalIncidentRemediationStatusResponse>(\n\t\t\t\tresponse\n\t\t\t);\n\t\t},\n\t\tasync retrievalLaneHandoffIncidentStatus() {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/status/handoffs/incidents`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalLaneHandoffIncidentStatusResponse>(\n\t\t\t\tresponse\n\t\t\t);\n\t\t},\n\t\tasync acknowledgeRetrievalLaneHandoffIncident(\n\t\t\tinput: RAGRetrievalReleaseIncidentAcknowledgeRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/incidents/acknowledge`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff incident acknowledgement failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync unacknowledgeRetrievalLaneHandoffIncident(input: {\n\t\t\tincidentId: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/incidents/unacknowledge`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff incident unacknowledge failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync resolveRetrievalLaneHandoffIncident(input: {\n\t\t\tincidentId: string;\n\t\t\tresolvedAt?: number;\n\t\t\tresolvedBy?: string;\n\t\t\tresolutionNotes?: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/incidents/resolve`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff incident resolve failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync decideRetrievalLaneHandoff(\n\t\t\tinput: RAGRetrievalLaneHandoffDecisionRequest\n\t\t) {\n\t\t\tconst payload =\n\t\t\t\tawait this.decideRetrievalLaneHandoffDetailed(input);\n\t\t\tif (!payload.decision) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval lane handoff decision failed'\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn payload.decision;\n\t\t},\n\t\tasync decideRetrievalLaneHandoffDetailed(\n\t\t\tinput: RAGRetrievalLaneHandoffDecisionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/handoffs/decide`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalLaneHandoffDecisionResponse>(response);\n\t\t},\n\t\tasync retrievalReleaseIncidents(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\tstatus?: 'open' | 'resolved';\n\t\t\tseverity?: 'warning' | 'critical';\n\t\t\tkind?:\n\t\t\t\t| 'approval_expired'\n\t\t\t\t| 'baseline_regression'\n\t\t\t\t| 'gate_failure'\n\t\t\t\t| 'handoff_stale';\n\t\t\tacknowledged?: boolean;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.status) {\n\t\t\t\tsearchParams.set('status', input.status);\n\t\t\t}\n\t\t\tif (input?.severity) {\n\t\t\t\tsearchParams.set('severity', input.severity);\n\t\t\t}\n\t\t\tif (input?.kind) {\n\t\t\t\tsearchParams.set('kind', input.kind);\n\t\t\t}\n\t\t\tif (typeof input?.acknowledged === 'boolean') {\n\t\t\t\tsearchParams.set('acknowledged', String(input.acknowledged));\n\t\t\t}\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release incident list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync retrievalIncidentRemediationDecisions(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tincidentId?: string;\n\t\t\tlimit?: number;\n\t\t\tremediationKind?: RAGRetrievalIncidentRemediationDecisionRequest['remediationKind'];\n\t\t\tstatus?: 'planned' | 'applied' | 'dismissed';\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/remediations${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalIncidentRemediationDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval incident remediation decision list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync retrievalIncidentRemediationExecutions(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tincidentId?: string;\n\t\t\tlimit?: number;\n\t\t\tactionKind?: RAGRetrievalIncidentRemediationExecutionRequest['action']['kind'];\n\t\t\tcode?: NonNullable<\n\t\t\t\tRAGRetrievalIncidentRemediationExecutionResponse['execution']\n\t\t\t>['code'];\n\t\t\tblockedByGuardrail?: boolean;\n\t\t\tidempotentReplay?: boolean;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t}) {\n\t\t\tconst suffix = input\n\t\t\t\t? `?${new URLSearchParams(\n\t\t\t\t\t\tObject.entries(input)\n\t\t\t\t\t\t\t.filter(([, value]) => value !== undefined)\n\t\t\t\t\t\t\t.map(([key, value]) => [key, String(value)])\n\t\t\t\t\t).toString()}`\n\t\t\t\t: '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/remediations/executions${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalIncidentRemediationExecutionHistoryResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval incident remediation execution history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync recordRetrievalIncidentRemediationDecision(\n\t\t\tinput: RAGRetrievalIncidentRemediationDecisionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/remediations`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalIncidentRemediationDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.records) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval incident remediation decision record failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.records;\n\t\t},\n\t\tasync executeRetrievalIncidentRemediation(\n\t\t\tinput: RAGRetrievalIncidentRemediationExecutionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/remediations/execute`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalIncidentRemediationExecutionResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.execution) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval incident remediation execution failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync bulkExecuteRetrievalIncidentRemediations(\n\t\t\tinput: RAGRetrievalIncidentRemediationBulkExecutionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/remediations/execute/bulk`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalIncidentRemediationBulkExecutionResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.results) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'Bulk RAG retrieval incident remediation execution failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.results;\n\t\t},\n\t\tasync acknowledgeRetrievalReleaseIncident(\n\t\t\tinput: RAGRetrievalReleaseIncidentAcknowledgeRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/acknowledge`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release incident acknowledgement failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync unacknowledgeRetrievalReleaseIncident(input: {\n\t\t\tincidentId: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/unacknowledge`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release incident unacknowledge failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync resolveRetrievalReleaseIncident(input: {\n\t\t\tincidentId: string;\n\t\t\tresolvedAt?: number;\n\t\t\tresolvedBy?: string;\n\t\t\tresolutionNotes?: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/incidents/resolve`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseIncidentListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.incidents) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval release incident resolve failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.incidents;\n\t\t},\n\t\tasync retrievalPromotionCandidates(input?: {\n\t\t\tgroupKey?: string;\n\t\t\tlimit?: number;\n\t\t\ttag?: string;\n\t\t\ttargetRolloutLabel?: 'canary' | 'stable' | 'rollback_target';\n\t\t\tapproved?: boolean;\n\t\t\tready?: boolean;\n\t\t\tblocked?: boolean;\n\t\t\treviewStatus?: 'approved' | 'blocked' | 'needs_review' | 'ready';\n\t\t\tfreshnessStatus?: 'fresh' | 'expired' | 'not_applicable';\n\t\t\tsortBy?:\n\t\t\t\t| 'approvalFreshness'\n\t\t\t\t| 'finishedAt'\n\t\t\t\t| 'gateSeverity'\n\t\t\t\t| 'priority';\n\t\t\tsortDirection?: 'asc' | 'desc';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tif (input?.targetRolloutLabel) {\n\t\t\t\tsearchParams.set(\n\t\t\t\t\t'targetRolloutLabel',\n\t\t\t\t\tinput.targetRolloutLabel\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (typeof input?.approved === 'boolean') {\n\t\t\t\tsearchParams.set('approved', String(input.approved));\n\t\t\t}\n\t\t\tif (typeof input?.ready === 'boolean') {\n\t\t\t\tsearchParams.set('ready', String(input.ready));\n\t\t\t}\n\t\t\tif (typeof input?.blocked === 'boolean') {\n\t\t\t\tsearchParams.set('blocked', String(input.blocked));\n\t\t\t}\n\t\t\tif (input?.reviewStatus) {\n\t\t\t\tsearchParams.set('reviewStatus', input.reviewStatus);\n\t\t\t}\n\t\t\tif (input?.freshnessStatus) {\n\t\t\t\tsearchParams.set('freshnessStatus', input.freshnessStatus);\n\t\t\t}\n\t\t\tif (input?.sortBy) {\n\t\t\t\tsearchParams.set('sortBy', input.sortBy);\n\t\t\t}\n\t\t\tif (input?.sortDirection) {\n\t\t\t\tsearchParams.set('sortDirection', input.sortDirection);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/candidates${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalPromotionCandidateListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.candidates) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ??\n\t\t\t\t\t\t'RAG retrieval promotion candidate list failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.candidates;\n\t\t},\n\t\tasync approveRetrievalCandidate(\n\t\t\tinput: RAGRetrievalReleaseDecisionActionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/approve`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.decisions) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval approval failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.decisions;\n\t\t},\n\t\tasync rejectRetrievalCandidate(\n\t\t\tinput: RAGRetrievalReleaseDecisionActionRequest\n\t\t) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/compare/retrieval/baselines/reject`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseDecisionListResponse>(\n\t\t\t\t\tresponse\n\t\t\t\t);\n\t\t\tif (!payload.ok || !payload.decisions) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG retrieval rejection failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.decisions;\n\t\t},\n\t\tasync ingest(chunks: RAGDocumentChunk[]) {\n\t\t\tconst response = await fetchImpl(`${basePath}/ingest`, {\n\t\t\t\tbody: JSON.stringify({ chunks }),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGIngestResponse>(response);\n\t\t},\n\t\tasync ingestDocuments(input: RAGDocumentIngestInput) {\n\t\t\tconst response = await fetchImpl(`${basePath}/ingest`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGIngestResponse>(response);\n\t\t},\n\t\tasync ingestUploads(input: RAGDocumentUploadIngestInput) {\n\t\t\tconst response = await fetchImpl(`${basePath}/ingest`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGIngestResponse>(response);\n\t\t},\n\t\tasync ingestUrls(input: RAGDocumentUrlIngestInput) {\n\t\t\tconst response = await fetchImpl(`${basePath}/ingest`, {\n\t\t\t\tbody: JSON.stringify(input),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGIngestResponse>(response);\n\t\t},\n\t\tasync analyzeBackend() {\n\t\t\tconst response = await fetchImpl(`${basePath}/backend/analyze`, {\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync ops() {\n\t\t\tconst response = await fetchImpl(`${basePath}/ops`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGOperationsResponse>(response);\n\t\t},\n\t\tasync searchTraceHistory(input?: {\n\t\t\tquery?: string;\n\t\t\tgroupKey?: string;\n\t\t\ttag?: string;\n\t\t\tlimit?: number;\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.query) {\n\t\t\t\tsearchParams.set('query', input.query);\n\t\t\t}\n\t\t\tif (input?.groupKey) {\n\t\t\t\tsearchParams.set('groupKey', input.groupKey);\n\t\t\t}\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(`${basePath}/traces${suffix}`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTraceHistoryResponse>(response);\n\t\t\tif (!payload.ok || !payload.history) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.history;\n\t\t},\n\t\tasync searchTraceGroups(input?: { tag?: string; limit?: number }) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/traces/groups${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTraceGroupHistoryResponse>(response);\n\t\t\tif (!payload.ok || !payload.history) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace group history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.history;\n\t\t},\n\t\tasync searchTraceStats(input?: { tag?: string }) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (input?.tag) {\n\t\t\t\tsearchParams.set('tag', input.tag);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/traces/stats${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTraceStatsResponse>(response);\n\t\t\tif (!payload.ok || !payload.stats) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace stats failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.stats;\n\t\t},\n\t\tasync previewSearchTracePrune(input?: {\n\t\t\tmaxAgeMs?: number;\n\t\t\tmaxRecordsPerQuery?: number;\n\t\t\tmaxRecordsPerGroup?: number;\n\t\t\tnow?: number;\n\t\t\ttag?: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/traces/prune/preview`,\n\t\t\t\t{\n\t\t\t\t\tbody: JSON.stringify(input ?? {}),\n\t\t\t\t\theaders: jsonHeaders,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTracePrunePreviewResponse>(response);\n\t\t\tif (!payload.ok || !payload.preview) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace prune preview failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.preview;\n\t\t},\n\t\tasync pruneSearchTraces(input?: {\n\t\t\tmaxAgeMs?: number;\n\t\t\tmaxRecordsPerQuery?: number;\n\t\t\tmaxRecordsPerGroup?: number;\n\t\t\tnow?: number;\n\t\t\ttag?: string;\n\t\t}) {\n\t\t\tconst response = await fetchImpl(`${basePath}/traces/prune`, {\n\t\t\t\tbody: JSON.stringify(input ?? {}),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTracePruneResponse>(response);\n\t\t\tif (!payload.ok || !payload.result) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace prune failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload;\n\t\t},\n\t\tasync searchTracePruneHistory(input?: {\n\t\t\tlimit?: number;\n\t\t\ttrigger?: 'manual' | 'write' | 'schedule';\n\t\t}) {\n\t\t\tconst searchParams = new URLSearchParams();\n\t\t\tif (typeof input?.limit === 'number') {\n\t\t\t\tsearchParams.set('limit', String(input.limit));\n\t\t\t}\n\t\t\tif (input?.trigger) {\n\t\t\t\tsearchParams.set('trigger', input.trigger);\n\t\t\t}\n\t\t\tconst suffix = searchParams.size > 0 ? `?${searchParams}` : '';\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/traces/prune/history${suffix}`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGSearchTracePruneHistoryResponse>(response);\n\t\t\tif (!payload.ok || !payload.runs) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\tpayload.error ?? 'RAG search trace prune history failed'\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn payload.runs;\n\t\t},\n\t\tasync syncSources() {\n\t\t\tconst response = await fetchImpl(`${basePath}/sync`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGSyncResponse>(response);\n\t\t},\n\t\tasync syncAllSources(options?: RAGSyncRunOptions) {\n\t\t\tconst response = await fetchImpl(`${basePath}/sync`, {\n\t\t\t\tbody:\n\t\t\t\t\toptions?.background === true\n\t\t\t\t\t\t? JSON.stringify({ background: true })\n\t\t\t\t\t\t: undefined,\n\t\t\t\theaders: options?.background === true ? jsonHeaders : undefined,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t} satisfies RAGSyncResponse;\n\t\t\t}\n\n\t\t\treturn parseJson<RAGSyncResponse>(response);\n\t\t},\n\t\tasync syncSource(id: string, options?: RAGSyncRunOptions) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/sync/${encodeURIComponent(id)}`,\n\t\t\t\t{\n\t\t\t\t\tbody:\n\t\t\t\t\t\toptions?.background === true\n\t\t\t\t\t\t\t? JSON.stringify({ background: true })\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\theaders:\n\t\t\t\t\t\toptions?.background === true ? jsonHeaders : undefined,\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t} satisfies RAGSyncResponse;\n\t\t\t}\n\n\t\t\treturn parseJson<RAGSyncResponse>(response);\n\t\t},\n\t\tasync reindexDocument(id: string) {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/reindex/documents/${encodeURIComponent(id)}`,\n\t\t\t\t{\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync reindexSource(source: string) {\n\t\t\tconst response = await fetchImpl(`${basePath}/reindex/source`, {\n\t\t\t\tbody: JSON.stringify({ source }),\n\t\t\t\theaders: jsonHeaders,\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync reseed() {\n\t\t\tconst response = await fetchImpl(`${basePath}/reseed`, {\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync reset() {\n\t\t\tconst response = await fetchImpl(`${basePath}/reset`, {\n\t\t\t\tmethod: 'POST'\n\t\t\t});\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tasync rebuildNativeIndex() {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/backend/reindex-native`,\n\t\t\t\t{\n\t\t\t\t\tmethod: 'POST'\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\treturn {\n\t\t\t\t\terror: await toErrorMessage(response),\n\t\t\t\t\tok: false\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn parseJson<RAGMutationResponse>(response);\n\t\t},\n\t\tsearch,\n\t\tasync searchWithTrace(input: RAGSearchRequest) {\n\t\t\treturn search({ ...input, includeTrace: true });\n\t\t},\n\t\t/**\n\t\t * @deprecated Use `searchWithTrace` for trace-aware search responses.\n\t\t */\n\t\tasync searchDetailed(input: RAGSearchRequest) {\n\t\t\treturn search({ ...input, includeTrace: true });\n\t\t},\n\t\tasync status() {\n\t\t\tconst response = await fetchImpl(`${basePath}/status`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGStatusResponse>(response);\n\t\t},\n\t\tasync statusMaintenance() {\n\t\t\tconst response = await fetchImpl(`${basePath}/status/maintenance`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGStatusResponse>(response);\n\t\t},\n\t\tasync retrievalReleaseStatus() {\n\t\t\tconst response = await fetchImpl(`${basePath}/status/release`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\tconst payload =\n\t\t\t\tawait parseJson<RAGRetrievalReleaseStatusResponse>(response);\n\t\t\treturn payload.retrievalComparisons;\n\t\t},\n\t\tasync retrievalReleaseDriftStatus() {\n\t\t\tconst response = await fetchImpl(\n\t\t\t\t`${basePath}/status/release/drift`\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalReleaseDriftStatusResponse>(response);\n\t\t},\n\t\tasync retrievalLaneHandoffStatus() {\n\t\t\tconst response = await fetchImpl(`${basePath}/status/handoffs`);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow new Error(await toErrorMessage(response));\n\t\t\t}\n\n\t\t\treturn parseJson<RAGRetrievalLaneHandoffStatusResponse>(response);\n\t\t}\n\t};\n};\n\nexport type RAGClient = ReturnType<typeof createRAGClient>;\n",
|
|
17
17
|
"import { computed } from 'vue';\nimport { useRAGChunkPreview } from './useRAGChunkPreview';\nimport { useRAGCitations } from './useRAGCitations';\nimport { useRAGDocuments } from './useRAGDocuments';\nimport { useRAGEvaluate } from './useRAGEvaluate';\nimport { useRAGGrounding } from './useRAGGrounding';\nimport { useRAGIngest } from './useRAGIngest';\nimport { useRAGIndexAdmin } from './useRAGIndexAdmin';\nimport { useRAGOps } from './useRAGOps';\nimport { useRAGSearch } from './useRAGSearch';\nimport { useRAGSources } from './useRAGSources';\nimport { useRAGStatus } from './useRAGStatus';\nimport { useRAGWorkflow } from './useRAGWorkflow';\n\nexport type UseRAGOptions = {\n\tautoLoadOps?: boolean;\n\tautoLoadStatus?: boolean;\n\tconversationId?: string;\n\tstreamPath?: string;\n};\n\nexport const useRAG = (path: string, options: UseRAGOptions = {}) => {\n\tconst search = useRAGSearch(path);\n\tconst ingest = useRAGIngest(path);\n\tconst status = useRAGStatus(path, options.autoLoadStatus ?? true);\n\tconst ops = useRAGOps(path, options.autoLoadOps ?? true);\n\tconst documents = useRAGDocuments(path);\n\tconst chunkPreview = useRAGChunkPreview(path);\n\tconst evaluate = useRAGEvaluate(path);\n\tconst index = useRAGIndexAdmin(path);\n\tconst workflow = useRAGWorkflow(\n\t\toptions.streamPath ?? path,\n\t\toptions.conversationId\n\t);\n\tconst sources = useRAGSources(workflow.messages);\n\tconst citations = useRAGCitations(sources.sources);\n\tconst grounding = useRAGGrounding(\n\t\tcomputed(() => workflow.latestAssistantMessage.value?.content ?? ''),\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 UseRAGResult = ReturnType<typeof useRAG>;\n",
|
|
18
18
|
"import { computed, type Ref } from 'vue';\nimport type { RAGSource } from '../../../types/ai';\nimport {\n\tbuildRAGCitations,\n\tbuildRAGCitationReferenceMap,\n\tbuildRAGSourceSummaries,\n\tbuildRAGSourceGroups\n} from '../../ai/rag/ui';\n\nexport const useRAGCitations = (sources: Ref<RAGSource[]>) => {\n\tconst citations = computed(() => buildRAGCitations(sources.value));\n\tconst citationReferenceMap = computed(() =>\n\t\tbuildRAGCitationReferenceMap(citations.value)\n\t);\n\tconst sourceGroups = computed(() => buildRAGSourceGroups(sources.value));\n\tconst sourceSummaries = computed(() =>\n\t\tbuildRAGSourceSummaries(sources.value)\n\t);\n\tconst hasCitations = computed(() => citations.value.length > 0);\n\n\treturn {\n\t\tcitationReferenceMap,\n\t\tcitations,\n\t\thasCitations,\n\t\tsourceGroups,\n\t\tsourceSummaries\n\t};\n};\n\nexport type UseRAGCitationsResult = ReturnType<typeof useRAGCitations>;\n",
|
|
19
19
|
"import { ref } from 'vue';\nimport type {\n\tRAGDocumentsResponse,\n\tRAGIndexedDocument\n} from '../../../types/ai';\nimport { createRAGClient } from '../../ai/client/ragClient';\n\nexport const useRAGDocuments = (path: string) => {\n\tconst client = createRAGClient({ path });\n\tconst documents = ref<RAGIndexedDocument[]>([]);\n\tconst error = ref<string | null>(null);\n\tconst isLoading = ref(false);\n\tconst lastResponse = ref<RAGDocumentsResponse | null>(null);\n\n\tconst load = async (kind?: string) => {\n\t\tisLoading.value = true;\n\t\terror.value = null;\n\n\t\ttry {\n\t\t\tconst response = await client.documents(kind);\n\t\t\tdocuments.value = response.documents;\n\t\t\tlastResponse.value = response;\n\n\t\t\treturn response;\n\t\t} catch (caught) {\n\t\t\terror.value =\n\t\t\t\tcaught instanceof Error ? caught.message : String(caught);\n\t\t\tthrow caught;\n\t\t} finally {\n\t\t\tisLoading.value = false;\n\t\t}\n\t};\n\n\tconst reset = () => {\n\t\tdocuments.value = [];\n\t\terror.value = null;\n\t\tisLoading.value = false;\n\t\tlastResponse.value = null;\n\t};\n\n\treturn {\n\t\tdocuments,\n\t\terror,\n\t\tisLoading,\n\t\tlastResponse,\n\t\tload,\n\t\treset\n\t};\n};\n\nexport type UseRAGDocumentsResult = ReturnType<typeof useRAGDocuments>;\n",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"import { computed } from 'vue';\nimport type { AIAttachment } from '../../../types/ai';\nimport { buildRAGAnswerWorkflowState } from '../../ai/rag/workflowState';\nimport { useAIStream } from './useAIStream';\nimport { useRAGStreamProgress } from './useRAGStreamProgress';\n\nexport const useRAGStream = (path: string, conversationId?: string) => {\n\tconst stream = useAIStream(path, conversationId);\n\n\tconst workflow = computed(() =>\n\t\tbuildRAGAnswerWorkflowState({\n\t\t\terror: stream.error.value,\n\t\t\tisStreaming: stream.isStreaming.value,\n\t\t\tmessages: stream.messages.value\n\t\t})\n\t);\n\tconst progress = useRAGStreamProgress({\n\t\terror: stream.error,\n\t\tisStreaming: stream.isStreaming,\n\t\tmessages: stream.messages\n\t});\n\n\tconst query = (content: string, attachments?: AIAttachment[]) => {\n\t\tstream.send(content, attachments);\n\t};\n\n\tconst hasRetrieved = computed(() => workflow.value.hasRetrieved);\n\tconst isRetrieving = computed(() => workflow.value.isRetrieving);\n\tconst isRetrieved = computed(() => workflow.value.isRetrieved);\n\tconst isAnswerStreaming = computed(() => workflow.value.isAnswerStreaming);\n\tconst isComplete = computed(() => workflow.value.isComplete);\n\tconst hasSources = computed(() => workflow.value.hasSources);\n\n\treturn {\n\t\t...stream,\n\t\tcitationReferenceMap: computed(\n\t\t\t() => workflow.value.citationReferenceMap\n\t\t),\n\t\tcitations: computed(() => workflow.value.citations),\n\t\tcoverage: computed(() => workflow.value.coverage),\n\t\tgroundedAnswer: computed(() => workflow.value.groundedAnswer),\n\t\tgroundingReferences: computed(() => workflow.value.groundingReferences),\n\t\thasGrounding: computed(() => workflow.value.hasGrounding),\n\t\thasRetrieved,\n\t\thasSources,\n\t\tisAnswerStreaming,\n\t\tisComplete,\n\t\tisError: computed(() => workflow.value.isError),\n\t\tisRetrieved,\n\t\tisRetrieving,\n\t\tisRunning: computed(() => workflow.value.isRunning),\n\t\tlatestAssistantMessage: computed(\n\t\t\t() => workflow.value.latestAssistantMessage\n\t\t),\n\t\tprogress,\n\t\tquery,\n\t\tretrieval: computed(() => workflow.value.retrieval),\n\t\tsourceGroups: computed(() => workflow.value.sourceGroups),\n\t\tsourceSummaries: computed(() => workflow.value.sourceSummaries),\n\t\tsources: computed(() => workflow.value.sources),\n\t\tstage: computed(() => workflow.value.stage),\n\t\tungroundedReferenceNumbers: computed(\n\t\t\t() => workflow.value.ungroundedReferenceNumbers\n\t\t),\n\t\tworkflow\n\t};\n};\n\nexport type UseRAGStreamResult = ReturnType<typeof useRAGStream>;\n",
|
|
30
30
|
"import { computed, type Ref } from 'vue';\nimport type { AIMessage } from '../../../types/ai';\nimport { buildRAGStreamProgress } from '../../ai/rag/workflowState';\n\nexport const useRAGStreamProgress = (params: {\n\terror: Ref<string | null>;\n\tisStreaming: Ref<boolean>;\n\tmessages: Ref<AIMessage[]>;\n}) =>\n\tcomputed(() =>\n\t\tbuildRAGStreamProgress({\n\t\t\terror: params.error.value,\n\t\t\tisStreaming: params.isStreaming.value,\n\t\t\tmessages: params.messages.value\n\t\t})\n\t);\n\nexport type UseRAGStreamProgressResult = ReturnType<\n\ttypeof useRAGStreamProgress\n>;\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,yBACA,QACC,kCACA,2BACA,QACC,gCACA,yBACA,QACC,8BACA,uBACA,QACC,8BACA,uBACA,QACC,wCACA,kCACA,QACC,gCACA,8BACA,QACC,oCACA,2BACA,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,iC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A,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,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,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,qBAAqB,WAAW,IACrD,YACA;AAAA,EAEJ,OAAO;AAAA,IACN,eAAe,cAAc,iBAAiB;AAAA,IAC9C,QAAQ,WAAW;AAAA,IACnB,WAAW,WAAW;AAAA,IACtB,aAAa;AAAA,IACb,YAAY,cAAc,aAAa,SAAS;AAAA,IAChD,OAAO,WAAW;AAAA,IAClB,cAAc,cAAc,aAAa,WAAW;AAAA,IACpD,aAAa,cAAc,eAAe;AAAA,IAC1C,g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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,yBACA,QACC,kCACA,2BACA,QACC,gCACA,yBACA,QACC,8BACA,uBACA,QACC,8BACA,uBACA,QACC,wCACA,kCACA,QACC,gCACA,8BACA,QACC,oCACA,2BACA,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,iC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",
|
|
33
|
+
"debugId": "90B51DBE5DB4C81864756E2164756E21",
|
|
34
34
|
"names": []
|
|
35
35
|
}
|