@absolutejs/rag 0.16.0 → 0.18.0

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +6 -0
  3. package/RESEARCH.md +269 -0
  4. package/changelog.json +27 -0
  5. package/dist/angular/index.js +174 -2
  6. package/dist/angular/index.js.map +6 -4
  7. package/dist/client/index.js +149 -1
  8. package/dist/client/index.js.map +5 -4
  9. package/dist/client/research.js +223 -0
  10. package/dist/client/research.js.map +10 -0
  11. package/dist/manifest.js +3722 -269
  12. package/dist/manifest.js.map +29 -3
  13. package/dist/react/index.js +158 -2
  14. package/dist/react/index.js.map +6 -4
  15. package/dist/research/index.js +125277 -0
  16. package/dist/research/index.js.map +368 -0
  17. package/dist/src/angular/index.d.ts +1 -0
  18. package/dist/src/angular/research.service.d.ts +12 -0
  19. package/dist/src/client/index.d.ts +1 -0
  20. package/dist/src/client/research.d.ts +30 -0
  21. package/dist/src/react/index.d.ts +1 -0
  22. package/dist/src/react/useResearch.d.ts +9 -0
  23. package/dist/src/research/budget.d.ts +26 -0
  24. package/dist/src/research/evaluation.d.ts +42 -0
  25. package/dist/src/research/evidence.d.ts +21 -0
  26. package/dist/src/research/index.d.ts +9 -0
  27. package/dist/src/research/manifest.d.ts +18 -0
  28. package/dist/src/research/plugin.d.ts +230 -0
  29. package/dist/src/research/runtime.d.ts +2 -0
  30. package/dist/src/research/store.d.ts +29 -0
  31. package/dist/src/research/types.d.ts +95 -0
  32. package/dist/src/research/workflows.d.ts +96 -0
  33. package/dist/src/svelte/createResearch.d.ts +9 -0
  34. package/dist/src/svelte/index.d.ts +1 -0
  35. package/dist/src/vue/index.d.ts +1 -0
  36. package/dist/src/vue/useResearch.d.ts +9 -0
  37. package/dist/src/web/index.d.ts +1 -0
  38. package/dist/src/web/remote.d.ts +30 -0
  39. package/dist/svelte/index.js +164 -2
  40. package/dist/svelte/index.js.map +6 -4
  41. package/dist/vue/index.js +164 -2
  42. package/dist/vue/index.js.map +6 -4
  43. package/dist/web/index.js +116 -79
  44. package/dist/web/index.js.map +6 -5
  45. package/dist/web/playwright.js +38 -79
  46. package/dist/web/playwright.js.map +3 -3
  47. package/package.json +199 -182
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/react/useRAGChunkPreview.ts", "../src/retrieval/grounding.ts", "../src/quality/quality.ts", "../src/internal/atomicWrite.ts", "node:path", "../src/presentation/presentation.ts", "../src/client/createRAGAnswerWorkflow.ts", "../src/client/createRAGStream.ts", "../src/client/ragClient.ts", "../src/react/useRAG.ts", "../src/react/useRAGCitations.ts", "../src/react/useRAGDocuments.ts", "../src/react/useRAGEvaluate.ts", "../src/react/useRAGGrounding.ts", "../src/react/useRAGIngest.ts", "../src/react/useRAGIndexAdmin.ts", "../src/react/useRAGOps.ts", "../src/react/useRAGSearch.ts", "../src/react/useRAGSources.ts", "../src/react/useRAGStatus.ts", "../src/react/useRAGWorkflow.ts", "../src/react/useRAGStream.ts", "../src/react/useRAGStreamProgress.ts"],
3
+ "sources": ["../src/client/research.ts", "../src/react/useRAGChunkPreview.ts", "../src/retrieval/grounding.ts", "../src/quality/quality.ts", "../src/internal/atomicWrite.ts", "node:path", "../src/presentation/presentation.ts", "../src/client/createRAGAnswerWorkflow.ts", "../src/client/createRAGStream.ts", "../src/client/ragClient.ts", "../src/react/useRAG.ts", "../src/react/useRAGCitations.ts", "../src/react/useRAGDocuments.ts", "../src/react/useRAGEvaluate.ts", "../src/react/useRAGGrounding.ts", "../src/react/useRAGIngest.ts", "../src/react/useRAGIndexAdmin.ts", "../src/react/useRAGOps.ts", "../src/react/useRAGSearch.ts", "../src/react/useRAGSources.ts", "../src/react/useRAGStatus.ts", "../src/react/useRAGWorkflow.ts", "../src/react/useRAGStream.ts", "../src/react/useRAGStreamProgress.ts", "../src/react/useResearch.ts"],
4
4
  "sourcesContent": [
5
+ "import type {\n ResearchInput,\n ResearchResult,\n ResearchProgress,\n} from \"../research/types\";\nexport type ResearchRequest = Pick<\n ResearchInput,\n \"query\" | \"task\" | \"freshness\"\n>;\nexport type ResearchState = {\n status: \"idle\" | \"running\" | \"complete\" | \"cancelled\" | \"error\";\n result: ResearchResult | null;\n progress: ResearchProgress | null;\n error: string | null;\n};\nexport type ResearchClientOptions = {\n path?: string;\n fetch?: typeof fetch;\n headers?: () => HeadersInit;\n};\nexport const createResearchClient = (options: ResearchClientOptions = {}) => {\n let state: ResearchState = {\n status: \"idle\",\n result: null,\n progress: null,\n error: null,\n };\n let active: AbortController | undefined;\n let generation = 0;\n const listeners = new Set<() => void>();\n const publish = (next: ResearchState) => {\n state = next;\n listeners.forEach((listener) => listener());\n };\n const cancel = () => {\n generation++;\n active?.abort();\n active = undefined;\n if (state.status === \"running\") publish({ ...state, status: \"cancelled\" });\n };\n const run = async (input: ResearchRequest): Promise<ResearchResult> => {\n active?.abort();\n const id = ++generation;\n const controller = new AbortController();\n active = controller;\n publish({ status: \"running\", result: null, progress: null, error: null });\n let reader: ReadableStreamDefaultReader<Uint8Array> | undefined;\n try {\n const headers = new Headers(options.headers?.());\n headers.set(\"content-type\", \"application/json\");\n const response = await (options.fetch ?? fetch)(\n `${options.path ?? \"/research\"}/stream`,\n {\n method: \"POST\",\n body: JSON.stringify(input),\n headers,\n credentials: \"same-origin\",\n signal: controller.signal,\n },\n );\n if (!response.ok || !response.body)\n throw new Error(`Research request failed (${response.status})`);\n reader = response.body.getReader();\n const decoder = new TextDecoder();\n let pending = \"\";\n let result: ResearchResult | undefined;\n const processLine = (line: string) => {\n if (!line.trim()) return;\n const event = JSON.parse(line);\n if (event.type === \"error\") throw new Error(\"Research request failed\");\n if (event.type === \"result\") {\n if (\n !event.result ||\n ![\"reviewed\", \"partial\", \"empty\", \"unavailable\"].includes(\n event.result.status,\n ) ||\n !Array.isArray(event.result.fields) ||\n !Array.isArray(event.result.sources)\n )\n throw new Error(\"Invalid research result\");\n result = event.result;\n }\n if (event.type === \"progress\" && id === generation)\n publish({ ...state, progress: event.progress });\n };\n while (true) {\n controller.signal.throwIfAborted();\n const chunk = await reader.read();\n pending += decoder.decode(chunk.value, { stream: !chunk.done });\n if (pending.length > 4_000_000)\n throw new Error(\"Research response too large\");\n let newline: number;\n while ((newline = pending.indexOf(\"\\n\")) >= 0) {\n processLine(pending.slice(0, newline));\n pending = pending.slice(newline + 1);\n }\n if (chunk.done) break;\n }\n if (pending) processLine(pending);\n controller.signal.throwIfAborted();\n if (!result) throw new Error(\"Research stream ended without a result\");\n if (id === generation) publish({ ...state, status: \"complete\", result });\n return result;\n } catch (error) {\n if (id === generation)\n publish({\n ...state,\n status: controller.signal.aborted ? \"cancelled\" : \"error\",\n error: controller.signal.aborted\n ? null\n : error instanceof Error\n ? error.message\n : \"Research request failed\",\n });\n throw error;\n } finally {\n await reader?.cancel().catch(() => undefined);\n reader?.releaseLock();\n if (id === generation) active = undefined;\n }\n };\n return {\n run,\n cancel,\n getSnapshot: () => state,\n subscribe: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n reset: () => {\n cancel();\n publish({ status: \"idle\", result: null, progress: null, error: null });\n },\n dispose: () => {\n cancel();\n listeners.clear();\n },\n };\n};\n\n/** HTML binding uses textContent, never model-produced HTML. Returns cleanup. */\nexport const bindResearchForm = (\n form: HTMLFormElement,\n output: HTMLElement,\n options: ResearchClientOptions = {},\n) => {\n const client = createResearchClient(options);\n const unsubscribe = client.subscribe(() => {\n const state = client.getSnapshot();\n output.setAttribute(\"aria-busy\", String(state.status === \"running\"));\n output.textContent = state.result\n ? JSON.stringify(state.result, null, 2)\n : (state.error ?? state.status);\n });\n const submit = (event: SubmitEvent) => {\n event.preventDefault();\n const data = new FormData(form);\n void client\n .run({\n query: String(data.get(\"query\") ?? \"\"),\n ...(data.get(\"task\") ? { task: String(data.get(\"task\")) } : {}),\n })\n .catch(() => undefined);\n };\n form.addEventListener(\"submit\", submit);\n return {\n ...client,\n dispose: () => {\n form.removeEventListener(\"submit\", submit);\n unsubscribe();\n client.dispose();\n },\n };\n};\n",
5
6
  "import { useCallback, useMemo, useState } from \"react\";\nimport type {\n RAGDocumentChunkPreview,\n} from \"../../types/engine\";\nimport { createRAGClient } from \"../client/index\";\nimport {\n buildRAGSectionRetrievalDiagnostics,\n buildRAGChunkPreviewNavigation,\n buildRAGChunkPreviewGraph,\n} from \"../presentation/ui\";\n\nexport const useRAGChunkPreview = (path: string) => {\n const client = useMemo(() => createRAGClient({ path }), [path]);\n const [preview, setPreview] = useState<RAGDocumentChunkPreview | null>(null);\n const [activeChunkId, setActiveChunkId] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const inspect = useCallback(\n async (id: string) => {\n setIsLoading(true);\n setError(null);\n\n try {\n const response = await client.documentChunks(id);\n if (!response.ok) {\n throw new Error(response.error);\n }\n\n setPreview(response);\n setActiveChunkId(response.chunks[0]?.chunkId ?? null);\n\n return response;\n } catch (err) {\n const message =\n err instanceof Error\n ? err.message\n : \"Failed to load RAG chunk preview\";\n setError(message);\n throw err;\n } finally {\n setIsLoading(false);\n }\n },\n [client],\n );\n\n const clear = useCallback(() => {\n setPreview(null);\n setActiveChunkId(null);\n setError(null);\n setIsLoading(false);\n }, []);\n\n const chunkGraph = useMemo(\n () => (preview ? buildRAGChunkPreviewGraph(preview) : null),\n [preview],\n );\n const navigation = useMemo(\n () =>\n preview\n ? buildRAGChunkPreviewNavigation(preview, activeChunkId ?? undefined)\n : null,\n [activeChunkId, preview],\n );\n const previewSources = useMemo(\n () =>\n preview\n ? preview.chunks.map((chunk, index) => ({\n chunkId: chunk.chunkId,\n labels: chunk.labels,\n metadata: chunk.metadata,\n score: Math.max(0, preview.chunks.length - index),\n source: chunk.source ?? preview.document.source,\n structure: chunk.structure,\n text: chunk.text,\n title: chunk.title ?? preview.document.title,\n }))\n : [],\n [preview],\n );\n const sectionDiagnostics = useMemo(\n () => buildRAGSectionRetrievalDiagnostics(previewSources),\n [previewSources],\n );\n const activeSectionDiagnostic = useMemo(() => {\n const sectionKey = navigation?.section?.path?.join(\" > \");\n return sectionKey\n ? (sectionDiagnostics.find(\n (diagnostic) => diagnostic.key === sectionKey,\n ) ?? null)\n : null;\n }, [navigation, sectionDiagnostics]);\n const selectChunk = useCallback((id: string | null) => {\n setActiveChunkId(id);\n }, []);\n const selectParentSection = useCallback(() => {\n const leadChunkId = navigation?.parentSection?.leadChunkId;\n if (leadChunkId) {\n setActiveChunkId(leadChunkId);\n }\n }, [navigation]);\n const selectChildSection = useCallback(\n (sectionId: string) => {\n const leadChunkId = navigation?.childSections.find(\n (section) => section.id === sectionId,\n )?.leadChunkId;\n if (leadChunkId) {\n setActiveChunkId(leadChunkId);\n }\n },\n [navigation],\n );\n const selectSiblingSection = useCallback(\n (sectionId: string) => {\n const leadChunkId = navigation?.siblingSections.find(\n (section) => section.id === sectionId,\n )?.leadChunkId;\n if (leadChunkId) {\n setActiveChunkId(leadChunkId);\n }\n },\n [navigation],\n );\n\n return {\n activeChunkId,\n activeSectionDiagnostic,\n chunkGraph,\n clear,\n error,\n inspect,\n isLoading,\n navigation,\n preview,\n sectionDiagnostics,\n selectChildSection,\n selectChunk,\n selectParentSection,\n selectSiblingSection,\n };\n};\n\nexport type UseRAGChunkPreviewResult = ReturnType<typeof useRAGChunkPreview>;\n",
6
7
  "import type {\n RAGSource,\n} from \"@absolutejs/ai\";\nimport type {\n RAGCitation,\n RAGCitationReferenceMap,\n RAGExcerptModeCounts,\n RAGGroundedAnswer,\n RAGGroundedAnswerCitationDetail,\n RAGGroundedAnswerSectionSummary,\n RAGGroundingReference,\n} from \"../../types/engine\";\n\nconst getContextString = (value: unknown) =>\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n\nconst getContextNumber = (value: unknown) =>\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n\nconst getAttachmentName = (source?: string, title?: string) => {\n const sourceAttachment = source?.split(\"/\").at(-1);\n if (sourceAttachment && sourceAttachment.includes(\".\")) {\n return sourceAttachment;\n }\n\n const titleAttachment = title?.split(\" · \").at(-1);\n if (titleAttachment && titleAttachment.includes(\".\")) {\n return titleAttachment;\n }\n\n return undefined;\n};\n\nconst buildContextLabel = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const emailKind = getContextString(metadata.emailKind);\n const officeBlockKindValue = getContextString(metadata.officeBlockKind);\n const officeBlockKind =\n officeBlockKindValue === \"table\" ||\n officeBlockKindValue === \"list\" ||\n officeBlockKindValue === \"paragraph\"\n ? officeBlockKindValue\n : undefined;\n if (emailKind === \"attachment\") {\n return \"Attachment evidence\";\n }\n\n if (emailKind === \"message\") {\n const from = getContextString(metadata.from);\n return from ? `Message from ${from}` : \"Message evidence\";\n }\n\n const page =\n getContextNumber(metadata.page) ??\n getContextNumber(metadata.pageNumber) ??\n (typeof metadata.pageIndex === \"number\"\n ? metadata.pageIndex + 1\n : undefined);\n const region =\n getContextNumber(metadata.regionNumber) ??\n (typeof metadata.regionIndex === \"number\"\n ? metadata.regionIndex + 1\n : undefined);\n if (page && region) {\n return `Page ${page} region ${region}`;\n }\n if (page) {\n return `Page ${page}`;\n }\n\n const sheet =\n getContextString(metadata.sheetName) ??\n (Array.isArray(metadata.sheetNames)\n ? getContextString(metadata.sheetNames[0])\n : undefined);\n if (sheet) {\n return `Sheet ${sheet}`;\n }\n\n const slide =\n getContextNumber(metadata.slide) ??\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n const slideTitle = getContextString(metadata.slideTitle);\n if (slide) {\n return slideTitle ? `Slide ${slide} · ${slideTitle}` : `Slide ${slide}`;\n }\n\n const archiveEntry =\n getContextString(metadata.archiveEntryPath) ??\n getContextString(metadata.entryPath);\n if (archiveEntry) {\n return `Archive entry ${archiveEntry}`;\n }\n\n const threadTopic = getContextString(metadata.threadTopic);\n if (threadTopic) {\n return `Thread ${threadTopic}`;\n }\n\n const speaker = getContextString(metadata.speaker);\n if (speaker) {\n return `Speaker ${speaker}`;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const officeSectionLabel =\n sectionPath.length > 0 ? sectionPath.join(\" > \") : sectionTitle;\n if (officeBlockKind === \"table\" && officeSectionLabel) {\n return `Office table block ${officeSectionLabel}`;\n }\n if (officeBlockKind === \"list\" && officeSectionLabel) {\n return `Office list block ${officeSectionLabel}`;\n }\n if (officeBlockKind === \"paragraph\" && officeSectionLabel) {\n return `Office paragraph block ${officeSectionLabel}`;\n }\n if (sectionTitle) {\n return `Section ${sectionTitle}`;\n }\n\n return undefined;\n};\n\nconst formatMediaTimestamp = (value: unknown) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n\n const totalSeconds = Math.floor(value / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const milliseconds = Math.floor(value % 1000);\n\n return `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(\n 2,\n \"0\",\n )}.${String(milliseconds).padStart(3, \"0\")}`;\n};\n\nconst formatMediaDurationLabel = (value: unknown) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n\n return formatMediaTimestamp(value);\n};\n\nconst formatOfficeListLevelsLabel = (value: unknown) => {\n if (!Array.isArray(value) || value.length === 0) {\n return undefined;\n }\n\n const levels = value\n .map((entry) => getContextNumber(entry))\n .filter((entry): entry is number => typeof entry === \"number\")\n .sort((left, right) => left - right);\n\n if (levels.length === 0) {\n return undefined;\n }\n\n const minLevel = levels[0];\n const maxLevel = levels[levels.length - 1];\n\n return minLevel === maxLevel\n ? `Office list level ${minLevel}`\n : `Office list levels ${minLevel}-${maxLevel}`;\n};\n\ntype OfficeCitationScope = {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n};\n\ntype GenericStructuredCitationScope = {\n familyPath: string[];\n kind: \"presentation_slide\" | \"spreadsheet_rows\";\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n};\n\nconst getOfficeTableCitationScope = (\n metadata?: Record<string, unknown>,\n): OfficeCitationScope | undefined => {\n if (!metadata) {\n return undefined;\n }\n\n const officeBlockKindValue = getContextString(metadata.officeBlockKind);\n const officeBlockKind =\n officeBlockKindValue === \"table\" ||\n officeBlockKindValue === \"list\" ||\n officeBlockKindValue === \"paragraph\"\n ? officeBlockKindValue\n : undefined;\n if (\n officeBlockKind !== \"table\" &&\n officeBlockKind !== \"list\" &&\n officeBlockKind !== \"paragraph\"\n ) {\n return undefined;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const officeContextText =\n officeBlockKind === \"table\"\n ? getContextString(metadata.officeTableContextText)\n : officeBlockKind === \"list\"\n ? getContextString(metadata.officeListContextText)\n : undefined;\n\n if (!sectionTitle) {\n return undefined;\n }\n\n return {\n blockKind: officeBlockKind,\n familyPath: (() => {\n const explicitGenericFamilyPath = Array.isArray(\n metadata.sectionFamilyPath,\n )\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitGenericOrdinalPath = Array.isArray(\n metadata.sectionOrdinalPath,\n )\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n if (\n explicitGenericFamilyPath.length > 0 &&\n explicitGenericFamilyPath.length === explicitGenericOrdinalPath.length\n ) {\n return explicitGenericFamilyPath;\n }\n\n const explicitOfficeFamilyPath = Array.isArray(metadata.officeFamilyPath)\n ? metadata.officeFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n return explicitOfficeFamilyPath.length > 0\n ? explicitOfficeFamilyPath\n : sectionPath.map((value) => value.replace(/\\s+\\((\\d+)\\)$/, \"\").trim());\n })(),\n pathDepth: sectionPath.length,\n ordinalPath: (() => {\n const explicitGenericFamilyPath = Array.isArray(\n metadata.sectionFamilyPath,\n )\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitGenericOrdinalPath = Array.isArray(\n metadata.sectionOrdinalPath,\n )\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n if (\n explicitGenericFamilyPath.length > 0 &&\n explicitGenericFamilyPath.length === explicitGenericOrdinalPath.length\n ) {\n return explicitGenericOrdinalPath;\n }\n\n const explicitOfficeOrdinalPath = Array.isArray(\n metadata.officeOrdinalPath,\n )\n ? metadata.officeOrdinalPath\n .map((value) =>\n typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined,\n )\n .filter((value): value is number => typeof value === \"number\")\n : [];\n return explicitOfficeOrdinalPath.length > 0\n ? explicitOfficeOrdinalPath\n : sectionPath.map((value) => {\n const match = value.match(/\\((\\d+)\\)$/);\n return match ? Number.parseInt(match[1] ?? \"1\", 10) : 1;\n });\n })(),\n sectionFamilyKey:\n getContextString(metadata.sectionSiblingFamilyKey) ??\n getContextString(metadata.officeSiblingFamilyKey) ??\n sectionPath\n .at(-1)\n ?.replace(/\\s+\\((\\d+)\\)$/, \"\")\n .trim() ??\n sectionTitle,\n sectionOrdinal:\n getContextNumber(metadata.sectionSiblingOrdinal) ??\n getContextNumber(metadata.officeSiblingOrdinal) ??\n (() => {\n const match = sectionTitle.match(/\\((\\d+)\\)$/);\n return match ? Number.parseInt(match[1] ?? \"1\", 10) : 1;\n })(),\n sectionTitle,\n hasContext: typeof officeContextText === \"string\",\n };\n};\n\nconst areOfficeCitationScopesComparable = (\n left:\n | {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n }\n | undefined,\n right:\n | {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n }\n | undefined,\n) => {\n if (!left || !right) {\n return false;\n }\n if (\n left.blockKind !== right.blockKind ||\n left.sectionFamilyKey !== right.sectionFamilyKey ||\n left.sectionOrdinal !== right.sectionOrdinal\n ) {\n return false;\n }\n const leftAncestorFamilyPath = left.familyPath.slice(0, -1);\n const rightAncestorFamilyPath = right.familyPath.slice(0, -1);\n const leftAncestorOrdinalPath = left.ordinalPath.slice(0, -1);\n const rightAncestorOrdinalPath = right.ordinalPath.slice(0, -1);\n const sharedDepth = Math.min(\n leftAncestorFamilyPath.length,\n rightAncestorFamilyPath.length,\n );\n for (let index = 0; index < sharedDepth; index += 1) {\n if (\n leftAncestorFamilyPath[index] !== rightAncestorFamilyPath[index] ||\n leftAncestorOrdinalPath[index] !== rightAncestorOrdinalPath[index]\n ) {\n return false;\n }\n }\n return true;\n};\n\nconst getGenericStructuredCitationScope = (\n metadata?: Record<string, unknown>,\n): GenericStructuredCitationScope | undefined => {\n if (!metadata || metadata.officeBlockKind || metadata.pageNumber) {\n return undefined;\n }\n\n const kind =\n metadata.sectionKind === \"spreadsheet_rows\" ||\n metadata.sectionKind === \"presentation_slide\"\n ? metadata.sectionKind\n : undefined;\n if (!kind) {\n return undefined;\n }\n\n const explicitFamilyPath = Array.isArray(metadata.sectionFamilyPath)\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitOrdinalPath = Array.isArray(metadata.sectionOrdinalPath)\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n let familyPath =\n explicitFamilyPath.length > 0 &&\n explicitFamilyPath.length === explicitOrdinalPath.length\n ? explicitFamilyPath\n : [];\n let ordinalPath =\n explicitFamilyPath.length > 0 &&\n explicitFamilyPath.length === explicitOrdinalPath.length\n ? explicitOrdinalPath\n : [];\n\n if (familyPath.length === 0) {\n if (kind === \"spreadsheet_rows\") {\n const sheetName = getContextString(metadata.sheetName) ?? \"Sheet\";\n const tableIndex = getContextNumber(metadata.spreadsheetTableIndex) ?? 1;\n familyPath = [sheetName, \"Spreadsheet Table\"];\n ordinalPath = [1, tableIndex];\n } else {\n const slideFamily = getContextString(metadata.slideTitle) ?? \"Slide\";\n const slideOrdinal =\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\" ? metadata.slideIndex + 1 : 1);\n familyPath = [slideFamily];\n ordinalPath = [slideOrdinal];\n }\n }\n\n const sectionFamilyKey =\n getContextString(metadata.sectionSiblingFamilyKey) ?? familyPath.at(-1);\n const sectionOrdinal =\n getContextNumber(metadata.sectionSiblingOrdinal) ?? ordinalPath.at(-1);\n if (!sectionFamilyKey || typeof sectionOrdinal !== \"number\") {\n return undefined;\n }\n\n return {\n familyPath,\n kind,\n ordinalPath,\n pathDepth: familyPath.length,\n sectionFamilyKey,\n sectionOrdinal,\n };\n};\n\nconst areGenericStructuredCitationScopesComparable = (\n left: GenericStructuredCitationScope | undefined,\n right: GenericStructuredCitationScope | undefined,\n) => {\n if (!left || !right) {\n return false;\n }\n if (\n left.kind !== right.kind ||\n left.sectionFamilyKey !== right.sectionFamilyKey ||\n left.sectionOrdinal !== right.sectionOrdinal\n ) {\n return false;\n }\n const leftAncestorFamilyPath = left.familyPath.slice(0, -1);\n const rightAncestorFamilyPath = right.familyPath.slice(0, -1);\n const leftAncestorOrdinalPath = left.ordinalPath.slice(0, -1);\n const rightAncestorOrdinalPath = right.ordinalPath.slice(0, -1);\n const sharedDepth = Math.min(\n leftAncestorFamilyPath.length,\n rightAncestorFamilyPath.length,\n );\n for (let index = 0; index < sharedDepth; index += 1) {\n if (\n leftAncestorFamilyPath[index] !== rightAncestorFamilyPath[index] ||\n leftAncestorOrdinalPath[index] !== rightAncestorOrdinalPath[index]\n ) {\n return false;\n }\n }\n return true;\n};\n\nconst getOfficeTableCitationPreference = (\n metadata?: Record<string, unknown>,\n) => {\n const scope = getOfficeTableCitationScope(metadata);\n if (!scope) {\n return 0;\n }\n\n return (\n scope.pathDepth * 10 +\n (scope.hasContext ? 1 : 0) +\n (scope.blockKind === \"list\" &&\n typeof metadata?.officeListGroupItemCount === \"number\" &&\n metadata.officeListGroupItemCount > 1\n ? 1\n : 0)\n );\n};\n\nconst getGenericStructuredCitationPreference = (\n metadata?: Record<string, unknown>,\n) => {\n const scope = getGenericStructuredCitationScope(metadata);\n if (!scope) {\n return 0;\n }\n\n return (\n scope.pathDepth * 10 +\n (scope.kind === \"spreadsheet_rows\" &&\n typeof metadata?.spreadsheetTableIndex === \"number\"\n ? 2\n : 0) +\n (Array.isArray(metadata?.spreadsheetHeaders) &&\n metadata.spreadsheetHeaders.length > 0\n ? 1\n : 0) +\n (typeof metadata?.slideNotesText === \"string\" &&\n metadata.slideNotesText.trim().length > 0\n ? 1\n : 0)\n );\n};\n\nconst buildLocatorLabel = (\n metadata?: Record<string, unknown>,\n source?: string,\n title?: string,\n) => {\n if (!metadata) {\n return undefined;\n }\n\n const page =\n getContextNumber(metadata.page) ??\n getContextNumber(metadata.pageNumber) ??\n (typeof metadata.pageIndex === \"number\"\n ? metadata.pageIndex + 1\n : undefined);\n const region =\n getContextNumber(metadata.regionNumber) ??\n (typeof metadata.regionIndex === \"number\"\n ? metadata.regionIndex + 1\n : undefined);\n if (page && region) {\n return `Page ${page} · Region ${region}`;\n }\n if (page) {\n return `Page ${page}`;\n }\n\n const sheet =\n getContextString(metadata.sheetName) ??\n (Array.isArray(metadata.sheetNames)\n ? getContextString(metadata.sheetNames[0])\n : undefined);\n if (sheet) {\n return `Sheet ${sheet}`;\n }\n\n const slide =\n getContextNumber(metadata.slide) ??\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n const slideTitle = getContextString(metadata.slideTitle);\n if (slide) {\n return slideTitle ? `Slide ${slide} · ${slideTitle}` : `Slide ${slide}`;\n }\n\n const archiveEntry =\n getContextString(metadata.archiveEntryPath) ??\n getContextString(metadata.entryPath);\n if (archiveEntry) {\n return `Archive entry ${archiveEntry}`;\n }\n\n const emailKind = getContextString(metadata.emailKind);\n const officeBlockKind = getContextString(metadata.officeBlockKind);\n const officeBlockNumber = getContextNumber(metadata.officeBlockNumber);\n const officeTableBodyRowStart = getContextNumber(\n metadata.officeTableBodyRowStart,\n );\n const officeTableBodyRowEnd = getContextNumber(\n metadata.officeTableBodyRowEnd,\n );\n if (emailKind === \"attachment\") {\n const attachmentName =\n getContextString(metadata.attachmentName) ??\n getAttachmentName(source, title);\n return attachmentName ? `Attachment ${attachmentName}` : \"Attachment\";\n }\n\n const mediaStart = formatMediaTimestamp(metadata.startMs);\n const mediaEnd = formatMediaTimestamp(metadata.endMs);\n if (mediaStart && mediaEnd) {\n return `Timestamp ${mediaStart} - ${mediaEnd}`;\n }\n\n if (mediaStart) {\n return `Timestamp ${mediaStart}`;\n }\n\n if (officeBlockNumber && officeBlockKind === \"table\") {\n if (\n typeof officeTableBodyRowStart === \"number\" &&\n typeof officeTableBodyRowEnd === \"number\"\n ) {\n return officeTableBodyRowStart === officeTableBodyRowEnd\n ? `Office table block ${officeBlockNumber} · Row ${officeTableBodyRowStart}`\n : `Office table block ${officeBlockNumber} · Rows ${officeTableBodyRowStart}-${officeTableBodyRowEnd}`;\n }\n return `Office table block ${officeBlockNumber}`;\n }\n if (officeBlockNumber && officeBlockKind === \"list\") {\n return `Office list block ${officeBlockNumber}`;\n }\n if (officeBlockNumber && officeBlockKind === \"paragraph\") {\n return `Office paragraph block ${officeBlockNumber}`;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n if (sectionPath.length > 0) {\n return `Section ${sectionPath.join(\" > \")}`;\n }\n\n return undefined;\n};\n\nconst formatTimestampLabel = (value: unknown) => {\n const timestamp =\n typeof value === \"number\" && Number.isFinite(value)\n ? value\n : typeof value === \"string\"\n ? Date.parse(value)\n : Number.NaN;\n if (!Number.isFinite(timestamp)) {\n return undefined;\n }\n\n return new Date(timestamp).toLocaleString(\"en-US\", {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n });\n};\n\nconst buildProvenanceLabel = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const threadTopic = getContextString(metadata.threadTopic);\n const from = getContextString(metadata.from);\n const sentAt =\n formatTimestampLabel(metadata.sentAt) ??\n formatTimestampLabel(metadata.receivedAt);\n const speaker = getContextString(metadata.speaker);\n const mediaKind = getContextString(metadata.mediaKind);\n const mediaSegmentCount = getContextNumber(metadata.mediaSegmentCount);\n const mediaSegmentGroupSize = getContextNumber(\n metadata.mediaSegmentGroupSize,\n );\n const mediaSegmentGroupIndex = getContextNumber(\n metadata.mediaSegmentGroupIndex,\n );\n const mediaChannel = getContextString(metadata.mediaChannel);\n const mediaSpeakerCount = getContextNumber(metadata.mediaSpeakerCount);\n const mediaDurationLabel = formatMediaDurationLabel(metadata.mediaDurationMs);\n const transcriptSource = getContextString(metadata.transcriptSource);\n const pdfTextMode = getContextString(metadata.pdfTextMode);\n const officeBlockKind = getContextString(metadata.officeBlockKind);\n const officeListContextText = getContextString(\n metadata.officeListContextText,\n );\n const officeListGroupItemCount = getContextNumber(\n metadata.officeListGroupItemCount,\n );\n const officeListLevelsLabel = formatOfficeListLevelsLabel(\n metadata.officeListLevels,\n );\n const officeTableHeaders = Array.isArray(metadata.officeTableHeaders)\n ? metadata.officeTableHeaders\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const officeTableColumnCount = getContextNumber(\n metadata.officeTableColumnCount,\n );\n const officeTableBodyRowCount = getContextNumber(\n metadata.officeTableBodyRowCount,\n );\n const officeTableBodyRowStart = getContextNumber(\n metadata.officeTableBodyRowStart,\n );\n const officeTableBodyRowEnd = getContextNumber(\n metadata.officeTableBodyRowEnd,\n );\n const officeTableContextText = getContextString(\n metadata.officeTableContextText,\n );\n const officeTableFollowUpText = getContextString(\n metadata.officeTableFollowUpText,\n );\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const ocrEngine = getContextString(metadata.ocrEngine);\n const ocrConfidence =\n getContextNumber(metadata.ocrRegionConfidence) ??\n getContextNumber(metadata.ocrConfidence);\n\n const labels = [\n pdfTextMode ? `PDF ${pdfTextMode}` : \"\",\n officeBlockKind ? `Office ${officeBlockKind}` : \"\",\n typeof officeListGroupItemCount === \"number\"\n ? `Office list ${officeListGroupItemCount} items`\n : \"\",\n officeListLevelsLabel ?? \"\",\n sectionPath.length > 0 && officeBlockKind\n ? `Source-aware office ${officeBlockKind} block ${sectionPath.join(\" > \")}`\n : \"\",\n officeListContextText ? `Office list context ${officeListContextText}` : \"\",\n officeTableHeaders.length > 0\n ? `Office table ${officeTableHeaders.join(\", \")}`\n : \"\",\n typeof officeTableColumnCount === \"number\"\n ? `Office table ${officeTableColumnCount} cols`\n : \"\",\n typeof officeTableBodyRowCount === \"number\"\n ? `Office table ${officeTableBodyRowCount} body rows`\n : \"\",\n typeof officeTableBodyRowStart === \"number\" &&\n typeof officeTableBodyRowEnd === \"number\"\n ? officeTableBodyRowStart === officeTableBodyRowEnd\n ? `Office table row ${officeTableBodyRowStart}`\n : `Office table rows ${officeTableBodyRowStart}-${officeTableBodyRowEnd}`\n : \"\",\n officeTableContextText\n ? `Office table context ${officeTableContextText}`\n : \"\",\n officeTableFollowUpText\n ? `Office table follow-up ${officeTableFollowUpText}`\n : \"\",\n ocrEngine ? `OCR ${ocrEngine}` : \"\",\n typeof ocrConfidence === \"number\"\n ? `Confidence ${ocrConfidence.toFixed(2)}`\n : \"\",\n mediaKind ? `Media ${mediaKind}` : \"\",\n mediaSegmentCount ? `${mediaSegmentCount} segments` : \"\",\n mediaSegmentGroupSize ? `${mediaSegmentGroupSize} grouped segments` : \"\",\n mediaSegmentGroupIndex !== undefined\n ? `Segment group ${mediaSegmentGroupIndex + 1}`\n : \"\",\n mediaChannel ? `Channel ${mediaChannel}` : \"\",\n mediaSpeakerCount ? `${mediaSpeakerCount} speakers` : \"\",\n mediaDurationLabel ? `Duration ${mediaDurationLabel}` : \"\",\n transcriptSource ? `Transcript ${transcriptSource}` : \"\",\n threadTopic ? `Thread ${threadTopic}` : \"\",\n speaker ? `Speaker ${speaker}` : \"\",\n from ? `Sender ${from}` : \"\",\n sentAt ? `Sent ${sentAt}` : \"\",\n ].filter((value) => value.length > 0);\n\n return labels.length > 0 ? labels.join(\" · \") : undefined;\n};\n\nconst buildSourceLabel = (source: RAGSource) =>\n source.source ?? source.title ?? source.chunkId;\n\nconst buildExcerpt = (text: string, maxLength = 160) => {\n const normalized = text.replaceAll(/\\s+/g, \" \").trim();\n if (normalized.length <= maxLength) {\n return normalized;\n }\n\n return `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;\n};\n\nconst selectPreferredExcerpt = (\n excerpts?: {\n chunkExcerpt?: string;\n windowExcerpt?: string;\n sectionExcerpt?: string;\n },\n sectionChunkCount?: number,\n) => {\n if (!excerpts) {\n return {\n excerpt: \"\",\n mode: \"chunk\" as const,\n reason: \"single_chunk\" as const,\n };\n }\n\n const chunkExcerpt = excerpts.chunkExcerpt?.trim() ?? \"\";\n const windowExcerpt = excerpts.windowExcerpt?.trim() ?? \"\";\n const sectionExcerpt = excerpts.sectionExcerpt?.trim() ?? \"\";\n if (\n sectionChunkCount &&\n sectionChunkCount > 1 &&\n chunkExcerpt.length > 0 &&\n chunkExcerpt.length < 72\n ) {\n if (sectionChunkCount <= 3 && sectionExcerpt) {\n return {\n excerpt: sectionExcerpt,\n mode: \"section\" as const,\n reason: \"section_small_enough\" as const,\n };\n }\n if (windowExcerpt) {\n return {\n excerpt: windowExcerpt,\n mode: \"window\" as const,\n reason: \"section_too_large_use_window\" as const,\n };\n }\n\n return {\n excerpt: chunkExcerpt,\n mode: \"chunk\" as const,\n reason: \"chunk_too_narrow\" as const,\n };\n }\n\n return {\n excerpt: chunkExcerpt || windowExcerpt || sectionExcerpt,\n mode: \"chunk\" as const,\n reason:\n (sectionChunkCount ?? 0) > 1\n ? (\"chunk_too_narrow\" as const)\n : (\"single_chunk\" as const),\n };\n};\n\nconst buildExcerptModeCounts = (\n references: Array<\n { excerptSelection?: { mode: \"chunk\" | \"window\" | \"section\" } } | undefined\n >,\n): RAGExcerptModeCounts =>\n references.reduce<RAGExcerptModeCounts>(\n (counts, reference) => {\n if (reference?.excerptSelection) {\n counts[reference.excerptSelection.mode] += 1;\n }\n return counts;\n },\n { chunk: 0, section: 0, window: 0 },\n );\n\nconst buildGroundingChunkExcerpts = (\n sources: RAGSource[],\n activeChunkId?: string,\n) => {\n if (sources.length === 0) {\n return undefined;\n }\n\n const activeSource =\n (activeChunkId\n ? sources.find((source) => source.chunkId === activeChunkId)\n : undefined) ?? sources[0];\n if (!activeSource) {\n return undefined;\n }\n\n const chunkMap = new Map(sources.map((source) => [source.chunkId, source]));\n const activeMetadata = activeSource.metadata ?? {};\n const previousChunkId = getContextString(activeMetadata.previousChunkId);\n const nextChunkId = getContextString(activeMetadata.nextChunkId);\n const sectionChunkId = getContextString(activeMetadata.sectionChunkId);\n const sectionSources = sectionChunkId\n ? sources\n .filter(\n (source) =>\n getContextString(source.metadata?.sectionChunkId) ===\n sectionChunkId,\n )\n .sort((left, right) => {\n const leftIndex =\n getContextNumber(left.metadata?.sectionChunkIndex) ??\n Number.MAX_SAFE_INTEGER;\n const rightIndex =\n getContextNumber(right.metadata?.sectionChunkIndex) ??\n Number.MAX_SAFE_INTEGER;\n if (leftIndex !== rightIndex) {\n return leftIndex - rightIndex;\n }\n return left.chunkId.localeCompare(right.chunkId);\n })\n : [activeSource];\n const collectText = (chunkIds: string[]) =>\n chunkIds\n .map((chunkId) => chunkMap.get(chunkId)?.text)\n .filter((text): text is string => typeof text === \"string\")\n .join(\"\\n\\n\");\n const orderedWindowIds = [\n previousChunkId,\n activeSource.chunkId,\n nextChunkId,\n ].filter(\n (chunkId, index, values): chunkId is string =>\n Boolean(chunkId) && values.indexOf(chunkId) === index,\n );\n\n return {\n chunkExcerpt: buildExcerpt(activeSource.text, 160),\n sectionExcerpt: buildExcerpt(\n sectionSources.map((source) => source.text).join(\"\\n\\n\"),\n 320,\n ),\n windowExcerpt: buildExcerpt(collectText(orderedWindowIds), 240),\n };\n};\n\nconst buildGroundingReferenceEvidenceLabel = (\n reference: RAGGroundingReference,\n) =>\n [reference.label, reference.locatorLabel, reference.contextLabel]\n .filter((value): value is string => Boolean(value && value.length > 0))\n .filter(\n (value, index, values) =>\n values.findIndex((entry) => entry === value) === index,\n )\n .join(\" · \");\n\nconst buildGroundingReferenceEvidenceSummary = (\n reference: RAGGroundingReference,\n) =>\n [\n reference.source ?? reference.title ?? reference.chunkId,\n reference.locatorLabel,\n reference.contextLabel,\n reference.provenanceLabel,\n ]\n .filter((value): value is string => Boolean(value && value.length > 0))\n .filter(\n (value, index, values) =>\n values.findIndex((entry) => entry === value) === index,\n )\n .join(\" · \");\n\nconst buildGroundingSectionKey = (reference: RAGGroundingReference) =>\n reference.contextLabel ??\n reference.locatorLabel ??\n reference.label ??\n reference.source ??\n reference.chunkId;\n\nconst buildGroundingSectionSummaryLine = (reference: RAGGroundingReference) =>\n [\n reference.source ?? reference.title ?? reference.chunkId,\n reference.locatorLabel,\n reference.contextLabel,\n reference.provenanceLabel,\n ]\n .filter((value): value is string => Boolean(value && value.length > 0))\n .filter(\n (value, index, values) =>\n values.findIndex((entry) => entry === value) === index,\n )\n .join(\" · \");\n\nconst buildGroundedAnswerCitationDetail = (\n reference: RAGGroundingReference,\n): RAGGroundedAnswerCitationDetail => ({\n contextLabel: reference.contextLabel,\n evidenceLabel: buildGroundingReferenceEvidenceLabel(reference),\n evidenceSummary: buildGroundingReferenceEvidenceSummary(reference),\n excerpt:\n selectPreferredExcerpt(\n reference.excerpts,\n getContextNumber(reference.metadata?.sectionChunkCount),\n ).excerpt || reference.excerpt,\n excerpts: reference.excerpts,\n excerptSelection: reference.excerptSelection,\n label: reference.label,\n locatorLabel: reference.locatorLabel,\n number: reference.number,\n provenanceLabel: reference.provenanceLabel,\n source: reference.source,\n title: reference.title,\n});\n\nexport const buildRAGCitationReferenceMap = (\n citations: RAGCitation[],\n): RAGCitationReferenceMap =>\n Object.fromEntries(\n citations.map((citation, index) => [citation.chunkId, index + 1]),\n );\n\nexport const buildRAGCitations = (sources: RAGSource[]) => {\n const unique = new Map<string, RAGCitation>();\n\n for (const source of sources) {\n const key = source.chunkId;\n const existing = unique.get(key);\n const hasBetterExisting =\n existing !== undefined && existing.score >= source.score;\n if (hasBetterExisting) continue;\n const excerpts = buildGroundingChunkExcerpts(sources, source.chunkId);\n const excerptSelection = selectPreferredExcerpt(\n excerpts,\n getContextNumber(source.metadata?.sectionChunkCount),\n );\n\n unique.set(key, {\n chunkId: source.chunkId,\n contextLabel:\n source.labels?.contextLabel ?? buildContextLabel(source.metadata),\n excerpt: excerptSelection.excerpt || buildExcerpt(source.text),\n excerpts,\n excerptSelection,\n key,\n label: buildSourceLabel(source),\n locatorLabel:\n source.labels?.locatorLabel ??\n buildLocatorLabel(source.metadata, source.source, source.title),\n metadata: source.metadata,\n provenanceLabel:\n source.labels?.provenanceLabel ?? buildProvenanceLabel(source.metadata),\n score: source.score,\n source: source.source,\n text: source.text,\n title: source.title,\n });\n }\n\n return [...unique.values()].sort((left, right) => {\n const leftOfficeScope = getOfficeTableCitationScope(left.metadata);\n const rightOfficeScope = getOfficeTableCitationScope(right.metadata);\n if (\n left.source === right.source &&\n areOfficeCitationScopesComparable(leftOfficeScope, rightOfficeScope)\n ) {\n const leftOfficePreference = getOfficeTableCitationPreference(\n left.metadata,\n );\n const rightOfficePreference = getOfficeTableCitationPreference(\n right.metadata,\n );\n if (rightOfficePreference !== leftOfficePreference) {\n return rightOfficePreference - leftOfficePreference;\n }\n }\n const leftGenericScope = getGenericStructuredCitationScope(left.metadata);\n const rightGenericScope = getGenericStructuredCitationScope(right.metadata);\n if (\n left.source === right.source &&\n areGenericStructuredCitationScopesComparable(\n leftGenericScope,\n rightGenericScope,\n )\n ) {\n const leftGenericPreference = getGenericStructuredCitationPreference(\n left.metadata,\n );\n const rightGenericPreference = getGenericStructuredCitationPreference(\n right.metadata,\n );\n if (rightGenericPreference !== leftGenericPreference) {\n return rightGenericPreference - leftGenericPreference;\n }\n }\n if (right.score !== left.score) {\n return right.score - left.score;\n }\n\n return left.label.localeCompare(right.label);\n });\n};\n\nexport const buildRAGGroundedAnswer = (\n content: string,\n sources: RAGSource[],\n): RAGGroundedAnswer => {\n const references = buildRAGGroundingReferences(sources);\n const sectionSummaries = buildRAGGroundedAnswerSectionSummaries(references);\n const referenceMap = new Map(\n references.map((reference) => [reference.number, reference]),\n );\n const parts: RAGGroundedAnswer[\"parts\"] = [];\n const ungroundedReferenceNumbers = new Set<number>();\n const citationPattern = /\\[(\\d+(?:\\s*,\\s*\\d+)*)\\]/g;\n let cursor = 0;\n\n for (const match of content.matchAll(citationPattern)) {\n const raw = match[0];\n const numbers = (match[1] ?? \"\")\n .split(\",\")\n .map((value) => Number.parseInt(value.trim(), 10))\n .filter((value) => Number.isInteger(value) && value > 0);\n const start = match.index ?? cursor;\n if (start > cursor) {\n parts.push({\n text: content.slice(cursor, start),\n type: \"text\",\n });\n }\n\n const resolvedReferences = numbers\n .map((number) => referenceMap.get(number))\n .filter((reference): reference is RAGGroundingReference =>\n Boolean(reference),\n );\n for (const number of numbers) {\n if (!referenceMap.has(number)) {\n ungroundedReferenceNumbers.add(number);\n }\n }\n const unresolvedNumbers = numbers.filter(\n (number) => !referenceMap.has(number),\n );\n\n parts.push({\n referenceNumbers: numbers,\n referenceDetails: resolvedReferences.map(\n buildGroundedAnswerCitationDetail,\n ),\n references: resolvedReferences,\n text: raw,\n type: \"citation\",\n unresolvedReferenceNumbers: unresolvedNumbers,\n });\n cursor = start + raw.length;\n }\n\n if (cursor < content.length || parts.length === 0) {\n parts.push({\n text: content.slice(cursor),\n type: \"text\",\n });\n }\n\n const hasCitations = parts.some((part) => part.type === \"citation\");\n const coverage: RAGGroundedAnswer[\"coverage\"] = !hasCitations\n ? \"ungrounded\"\n : ungroundedReferenceNumbers.size === 0\n ? \"grounded\"\n : references.length > 0\n ? \"partial\"\n : \"ungrounded\";\n\n return {\n content,\n coverage,\n excerptModeCounts: buildExcerptModeCounts([\n ...references,\n ...sectionSummaries,\n ]),\n hasCitations,\n parts,\n references,\n sectionSummaries,\n ungroundedReferenceNumbers: [...ungroundedReferenceNumbers].sort(\n (left, right) => left - right,\n ),\n };\n};\n\nexport const buildRAGGroundedAnswerSectionSummaries = (\n references: RAGGroundingReference[],\n): RAGGroundedAnswerSectionSummary[] => {\n const groups = new Map<string, RAGGroundedAnswerSectionSummary>();\n\n for (const reference of references) {\n const key = buildGroundingSectionKey(reference);\n const existing = groups.get(key);\n if (!existing) {\n const excerpts = reference.excerpts\n ? {\n chunkExcerpt: reference.excerpts.chunkExcerpt,\n sectionExcerpt: reference.excerpts.sectionExcerpt,\n windowExcerpt: reference.excerpts.windowExcerpt,\n }\n : undefined;\n groups.set(key, {\n chunkIds: [reference.chunkId],\n contextLabel: reference.contextLabel,\n count: 1,\n excerpt:\n selectPreferredExcerpt(\n excerpts,\n getContextNumber(reference.metadata?.sectionChunkCount),\n ).excerpt ||\n excerpts?.sectionExcerpt ||\n reference.excerpt,\n excerpts,\n excerptSelection: reference.excerptSelection,\n key,\n label: key,\n locatorLabel: reference.locatorLabel,\n provenanceLabel: reference.provenanceLabel,\n referenceNumbers: [reference.number],\n references: [reference],\n summary:\n buildGroundingSectionSummaryLine(reference) ||\n reference.label ||\n reference.chunkId,\n });\n continue;\n }\n\n existing.count += 1;\n if (!existing.chunkIds.includes(reference.chunkId)) {\n existing.chunkIds.push(reference.chunkId);\n }\n if (!existing.referenceNumbers.includes(reference.number)) {\n existing.referenceNumbers.push(reference.number);\n }\n existing.references.push(reference);\n if (!existing.contextLabel && reference.contextLabel) {\n existing.contextLabel = reference.contextLabel;\n }\n if (!existing.locatorLabel && reference.locatorLabel) {\n existing.locatorLabel = reference.locatorLabel;\n }\n if (!existing.provenanceLabel && reference.provenanceLabel) {\n existing.provenanceLabel = reference.provenanceLabel;\n }\n if (!existing.excerpts && reference.excerpts) {\n existing.excerpts = {\n chunkExcerpt: reference.excerpts.chunkExcerpt,\n sectionExcerpt: reference.excerpts.sectionExcerpt,\n windowExcerpt: reference.excerpts.windowExcerpt,\n };\n existing.excerpt = reference.excerpts.sectionExcerpt;\n }\n if (!existing.excerptSelection && reference.excerptSelection) {\n existing.excerptSelection = reference.excerptSelection;\n }\n }\n\n return [...groups.values()]\n .map((group) => ({\n ...group,\n referenceNumbers: [...group.referenceNumbers].sort(\n (left, right) => left - right,\n ),\n references: group.references\n .slice()\n .sort((left, right) => left.number - right.number),\n }))\n .sort((left, right) => {\n const leftFirst = left.referenceNumbers[0] ?? Number.POSITIVE_INFINITY;\n const rightFirst = right.referenceNumbers[0] ?? Number.POSITIVE_INFINITY;\n if (leftFirst !== rightFirst) {\n return leftFirst - rightFirst;\n }\n return left.label.localeCompare(right.label);\n });\n};\n\nexport const buildRAGGroundingReferences = (sources: RAGSource[]) => {\n const citations = buildRAGCitations(sources);\n const citationReferenceMap = buildRAGCitationReferenceMap(citations);\n\n return citations.map<RAGGroundingReference>((citation) => {\n const excerpts = buildGroundingChunkExcerpts(sources, citation.chunkId);\n const excerptSelection = selectPreferredExcerpt(\n excerpts,\n getContextNumber(citation.metadata?.sectionChunkCount),\n );\n return {\n chunkId: citation.chunkId,\n contextLabel:\n citation.contextLabel ?? buildContextLabel(citation.metadata),\n excerpt:\n excerptSelection.excerpt ||\n excerpts?.chunkExcerpt ||\n buildExcerpt(citation.text),\n excerpts,\n excerptSelection,\n label: citation.label,\n locatorLabel:\n citation.locatorLabel ??\n buildLocatorLabel(citation.metadata, citation.source, citation.title),\n metadata: citation.metadata,\n number: citationReferenceMap[citation.chunkId] ?? 0,\n provenanceLabel:\n citation.provenanceLabel ?? buildProvenanceLabel(citation.metadata),\n score: citation.score,\n source: citation.source,\n text: citation.text,\n title: citation.title,\n };\n });\n};\n",
7
8
  "import { mkdir, readFile } from \"node:fs/promises\";\nimport { writeFileAtomic } from \"../internal/atomicWrite\";\nimport { dirname } from \"node:path\";\nimport type { Database } from \"bun:sqlite\";\nimport type {\n SQLiteRAGAnswerGroundingEvaluationHistoryStoreOptions,\n SQLiteRAGEvaluationHistoryStoreOptions,\n SQLiteRAGEvaluationSuiteSnapshotHistoryStoreOptions,\n SQLiteRAGGovernanceStoreBundleOptions,\n SQLiteRAGRetrievalBaselineGatePolicyHistoryStoreOptions,\n SQLiteRAGRetrievalBaselineStoreOptions,\n SQLiteRAGRetrievalComparisonHistoryStoreOptions,\n SQLiteRAGRetrievalIncidentRemediationDecisionStoreOptions,\n SQLiteRAGRetrievalIncidentRemediationExecutionHistoryStoreOptions,\n SQLiteRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStoreOptions,\n SQLiteRAGRetrievalLaneHandoffDecisionStoreOptions,\n SQLiteRAGRetrievalLaneHandoffIncidentHistoryStoreOptions,\n SQLiteRAGRetrievalLaneHandoffIncidentStoreOptions,\n SQLiteRAGRetrievalReleaseDecisionStoreOptions,\n SQLiteRAGRetrievalReleaseLaneEscalationPolicyHistoryStoreOptions,\n SQLiteRAGRetrievalReleaseLanePolicyHistoryStoreOptions,\n SQLiteRAGRetrievalReleaseIncidentStoreOptions,\n SQLiteRAGSearchTracePruneHistoryStoreOptions,\n SQLiteRAGSearchTraceStoreOptions,\n SQLiteRAGStoreMigrationOptions,\n} from \"../../types/quality\";\n// Re-exported so `@absolutejs/rag/quality` consumers keep these option types.\nexport type * from \"../../types/quality\";\nimport type {\n RAGHybridRetrievalMode,\n RAGSourceBalanceStrategy,\n RAGRetrievalTrace,\n RAGRetrievalTraceStep,\n RAGRetrievalTraceStage,\n RAGSource,\n} from \"@absolutejs/ai\";\nimport type {\n RAGAnswerGroundingCaseDifficultyDiffEntry,\n RAGAnswerGroundingCaseDifficultyHistory,\n RAGAnswerGroundingCaseDifficultyHistoryStore,\n RAGAnswerGroundingCaseDifficultyRun,\n RAGAnswerGroundingCaseDifficultyRunDiff,\n RAGAnswerGroundingEvaluationCaseDiff,\n RAGAnswerGroundingEvaluationCase,\n RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n RAGAnswerGroundingEvaluationCaseSnapshot,\n RAGAnswerGroundingEvaluationCaseResult,\n RAGAnswerGroundingEvaluationHistory,\n RAGAnswerGroundingEvaluationLeaderboardEntry,\n RAGAnswerGroundingEvaluationHistoryStore,\n RAGAnswerGroundingEvaluationInput,\n RAGAnswerGroundingEvaluationResponse,\n RAGAnswerGroundingEvaluationRun,\n RAGAnswerGroundingEvaluationRunDiff,\n RAGCollection,\n RAGIndexedDocument,\n RAGEvaluationCase,\n RAGEvaluationCaseDiff,\n RAGEvaluationCaseTraceSnapshot,\n RAGEvaluationCaseResult,\n RAGEvaluationHistory,\n RAGEvaluationHistoryStore,\n RAGEvaluationHistoryPruneInput,\n RAGEvaluationHistoryPruneResult,\n RAGEvaluationInput,\n RAGEvaluationLeaderboardEntry,\n RAGEvaluationResponse,\n RAGEvaluationRunDiff,\n RAGLabelValueRow,\n RAGComparisonPresentation,\n RAGComparisonOverviewPresentation,\n RAGGroundingProviderPresentation,\n RAGGroundingProviderOverviewPresentation,\n RAGGroundingProviderCaseComparisonPresentation,\n RAGGroundingOverviewPresentation,\n RAGQualityOverviewPresentation,\n RAGDocumentChunk,\n RAGEvaluationSuite,\n RAGEvaluationSuiteGenerationOptions,\n RAGEvaluationSuiteDatasetSummary,\n RAGEvaluationSuiteSnapshot,\n RAGEvaluationSuiteSnapshotDiff,\n RAGEvaluationSuiteSnapshotHistory,\n RAGEvaluationSuiteSnapshotHistoryStore,\n RAGEvaluationSuiteRun,\n RAGEvaluationEntityQualitySummary,\n RAGEvaluationEntityQualityView,\n RAGAnswerGroundingEntityQualitySummary,\n RAGAnswerGroundingEntityQualityView,\n RAGRetrievalTraceSummaryRun,\n RAGRetrievalCandidate,\n RAGRetrievalComparison,\n RAGRetrievalBaselineGatePolicy,\n RAGRetrievalBaselineGatePolicyHistoryRecord,\n RAGRetrievalBaselineGatePolicyHistoryStore,\n RAGRetrievalComparisonDecisionSummary,\n RAGRetrievalComparisonGateResult,\n RAGRetrievalReleaseVerdict,\n RAGRetrievalComparisonHistoryStore,\n RAGRetrievalBaselineRecord,\n RAGRetrievalBaselineStore,\n RAGRetrievalLaneHandoffDecisionRecord,\n RAGRetrievalLaneHandoffDecisionStore,\n RAGRetrievalLaneHandoffIncidentHistoryRecord,\n RAGRetrievalLaneHandoffIncidentHistoryStore,\n RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore,\n RAGRetrievalLaneHandoffIncidentRecord,\n RAGRetrievalLaneHandoffIncidentStore,\n RAGRetrievalIncidentRemediationDecisionRecord,\n RAGRetrievalIncidentRemediationDecisionStore,\n RAGRetrievalIncidentRemediationExecutionHistoryRecord,\n RAGRetrievalIncidentRemediationExecutionHistoryStore,\n RAGRetrievalReleaseDecisionRecord,\n RAGRetrievalReleaseLanePolicyHistoryRecord,\n RAGRetrievalReleaseLanePolicyHistoryStore,\n RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n RAGRetrievalReleaseLaneEscalationPolicyHistoryStore,\n RAGRetrievalReleaseDecisionStore,\n RAGRetrievalReleaseIncidentRecord,\n RAGRetrievalReleaseIncidentStore,\n RAGRetrievalComparisonRun,\n RAGRetrievalComparisonEntry,\n RAGRetrievalTraceComparisonSummary,\n RAGRetrievalTraceComparisonSummaryDiff,\n RAGQueryResult,\n RAGTraceSummaryListTrend,\n RAGTraceSummaryTrendDirection,\n RAGTraceSummaryNumericDelta,\n RAGTraceSummaryStageTrend,\n RAGTraceSummaryStageCountsDelta,\n RAGRetrievalComparisonSummary,\n RAGRetrievalTraceHistoryWindow,\n RAGRerankerCandidate,\n RAGRerankerComparison,\n RAGRerankerComparisonEntry,\n RAGRerankerComparisonSummary,\n RAGRerankerProviderLike,\n RAGRetrievalTraceTrend,\n RAGSearchTraceDiff,\n RAGSearchTraceGroupHistory,\n RAGSearchTraceGroupHistoryEntry,\n RAGSearchTraceHistory,\n RAGChatPluginConfig,\n RAGSearchTracePruneInput,\n RAGSearchTracePruneHistoryStore,\n RAGSearchTracePruneRun,\n RAGSearchTracePrunePreview,\n RAGSearchTracePruneResult,\n RAGSearchTraceRecord,\n RAGSearchTraceResultSnapshot,\n RAGSearchTraceStats,\n RAGSearchTraceStore,\n RAGRemediationAction,\n RAGCollectionSearchParams,\n RAGSQLiteStoreMigrationInspection,\n RAGSQLiteStoreMigrationIssue,\n RAGSQLiteStoreMigrationResult,\n} from \"../../types/engine\";\nimport { generateId } from \"@absolutejs/ai\";\nimport { buildRAGGroundedAnswer } from \"../retrieval/grounding\";\nimport { buildRAGSourceLabels } from \"../presentation/presentation\";\n\nconst DEFAULT_TOP_K = 6;\nconst DEFAULT_HISTORY_LIMIT = 20;\nconst DEFAULT_SEARCH_TRACE_TABLE_NAME = \"rag_search_traces\";\n\nconst getTraceLabelString = (value: unknown) =>\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n\nconst getTraceLabelNumber = (value: unknown) =>\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n\nconst formatTraceSpreadsheetTableLabel = (\n tableIndex?: number,\n tableCount?: number,\n) => {\n if (\n typeof tableIndex !== \"number\" ||\n !Number.isFinite(tableIndex) ||\n tableIndex < 1\n ) {\n return undefined;\n }\n\n if (\n typeof tableCount === \"number\" &&\n Number.isFinite(tableCount) &&\n tableCount >= tableIndex\n ) {\n return `Table ${tableIndex} of ${tableCount}`;\n }\n\n return `Table ${tableIndex}`;\n};\n\nconst formatTraceSourceAwareChunkReason = (value: unknown) => {\n const reason = getTraceLabelString(value);\n if (reason === \"section_boundary\") {\n return \"Chunk boundary section\";\n }\n if (reason === \"size_limit\") {\n return \"Chunk boundary size limit\";\n }\n if (reason === \"source_native_unit\") {\n return \"Chunk boundary source-native unit\";\n }\n return undefined;\n};\n\nconst buildTraceSourceAwareUnitScopeLabel = (\n metadata?: Record<string, unknown>,\n) => {\n if (!metadata) {\n return undefined;\n }\n\n const sectionKind = getTraceLabelString(metadata.sectionKind);\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getTraceLabelString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getTraceLabelString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const pdfTextKind = getTraceLabelString(metadata.pdfTextKind);\n const officeBlockKind = getTraceLabelString(metadata.officeBlockKind);\n const sheetName = getTraceLabelString(metadata.sheetName);\n const spreadsheetTableLabel = formatTraceSpreadsheetTableLabel(\n getTraceLabelNumber(metadata.spreadsheetTableIndex),\n getTraceLabelNumber(metadata.spreadsheetTableCount),\n );\n const slideTitle = getTraceLabelString(metadata.slideTitle);\n const slideNumber =\n getTraceLabelNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n\n if (\n sectionPath.length > 0 &&\n (sectionKind === \"markdown_heading\" ||\n sectionKind === \"html_heading\" ||\n sectionKind === \"office_heading\" ||\n sectionKind === undefined)\n ) {\n return `Source-aware section ${sectionPath.join(\" > \")}`;\n }\n\n if (sectionKind === \"pdf_block\") {\n if (pdfTextKind === \"table_like\" && sectionTitle) {\n return `Source-aware PDF table block ${sectionTitle}`;\n }\n if (sectionTitle) {\n return `Source-aware PDF block ${sectionTitle}`;\n }\n return \"Source-aware PDF block\";\n }\n\n if (sectionKind === \"office_block\") {\n if (officeBlockKind && sectionTitle) {\n return `Source-aware office ${officeBlockKind} block ${sectionTitle}`;\n }\n if (sectionTitle) {\n return `Source-aware office block ${sectionTitle}`;\n }\n return \"Source-aware office block\";\n }\n\n if (\n sectionKind === \"spreadsheet_rows\" ||\n (sectionKind === undefined &&\n (sheetName ||\n spreadsheetTableLabel ||\n getTraceLabelNumber(metadata.spreadsheetRowStart) !== undefined ||\n getTraceLabelNumber(metadata.spreadsheetRowEnd) !== undefined))\n ) {\n if (sheetName && spreadsheetTableLabel) {\n return `Source-aware spreadsheet ${sheetName} ${spreadsheetTableLabel}`;\n }\n if (sheetName) {\n return `Source-aware spreadsheet ${sheetName}`;\n }\n return \"Source-aware spreadsheet\";\n }\n\n if (sectionKind === \"presentation_slide\") {\n if (slideNumber && slideTitle) {\n return `Source-aware slide ${slideNumber} ${slideTitle}`;\n }\n if (slideTitle) {\n return `Source-aware slide ${slideTitle}`;\n }\n if (slideNumber) {\n return `Source-aware slide ${slideNumber}`;\n }\n return \"Source-aware slide\";\n }\n\n return undefined;\n};\n\nconst buildEvaluationLeadSnapshot = (input?: {\n metadata?: Record<string, unknown>;\n source?: string;\n title?: string;\n}): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"topContextLabel\"\n | \"topLocatorLabel\"\n | \"sourceAwareChunkReasonLabel\"\n | \"sourceAwareUnitScopeLabel\"\n> => {\n const labels = buildRAGSourceLabels({\n metadata: input?.metadata,\n source: input?.source,\n title: input?.title,\n });\n\n return {\n sourceAwareChunkReasonLabel: formatTraceSourceAwareChunkReason(\n input?.metadata?.sourceAwareChunkReason,\n ),\n sourceAwareUnitScopeLabel: buildTraceSourceAwareUnitScopeLabel(\n input?.metadata,\n ),\n topContextLabel: labels?.contextLabel,\n topLocatorLabel: labels?.locatorLabel,\n };\n};\n\nconst buildEvaluationLeadMediaCueSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"leadSpeakerCue\"\n | \"leadSpeakerAttributionCue\"\n | \"leadChannelCue\"\n | \"leadChannelAttributionCue\"\n | \"leadContinuityCue\"\n> => {\n const rerankStep = trace?.steps.find((step) => step.stage === \"rerank\");\n const metadata = rerankStep?.metadata ?? {};\n\n return {\n leadChannelAttributionCue:\n typeof metadata.leadChannelAttributionCue === \"string\"\n ? metadata.leadChannelAttributionCue\n : undefined,\n leadChannelCue:\n typeof metadata.leadChannelCue === \"string\"\n ? metadata.leadChannelCue\n : undefined,\n leadContinuityCue:\n typeof metadata.leadContinuityCue === \"string\"\n ? metadata.leadContinuityCue\n : undefined,\n leadSpeakerAttributionCue:\n typeof metadata.leadSpeakerAttributionCue === \"string\"\n ? metadata.leadSpeakerAttributionCue\n : undefined,\n leadSpeakerCue:\n typeof metadata.leadSpeakerCue === \"string\"\n ? metadata.leadSpeakerCue\n : undefined,\n };\n};\n\nconst buildEvaluationLeadPresentationCueSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<RAGEvaluationCaseTraceSnapshot, \"leadPresentationCue\"> => {\n const rerankStep = trace?.steps.find((step) => step.stage === \"rerank\");\n const metadata = rerankStep?.metadata ?? {};\n const cue = metadata.leadPresentationCue;\n\n return {\n leadPresentationCue:\n cue === \"title\" || cue === \"body\" || cue === \"notes\" ? cue : undefined,\n };\n};\n\nconst buildEvaluationLeadSpreadsheetCueSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<RAGEvaluationCaseTraceSnapshot, \"leadSpreadsheetCue\"> => {\n const rerankStep = trace?.steps.find((step) => step.stage === \"rerank\");\n const metadata = rerankStep?.metadata ?? {};\n const cue = metadata.leadSpreadsheetCue;\n\n return {\n leadSpreadsheetCue:\n cue === \"sheet\" || cue === \"table\" || cue === \"column\" ? cue : undefined,\n };\n};\n\nconst buildEvaluationSQLiteQueryPlanSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"sqliteQueryMode\"\n | \"sqliteQueryPushdownMode\"\n | \"sqliteQueryPushdownApplied\"\n | \"sqliteQueryPushdownClauseCount\"\n | \"sqliteQueryTotalFilterClauseCount\"\n | \"sqliteQueryJsRemainderClauseCount\"\n | \"sqliteQueryMultiplierUsed\"\n | \"sqliteQueryCandidateLimitUsed\"\n | \"sqliteQueryMaxBackfillsUsed\"\n | \"sqliteQueryMinResultsUsed\"\n | \"sqliteQueryFillPolicyUsed\"\n | \"sqliteQueryPushdownCoverageRatio\"\n | \"sqliteQueryJsRemainderRatio\"\n | \"sqliteQueryFilteredCandidates\"\n | \"sqliteQueryInitialSearchK\"\n | \"sqliteQueryFinalSearchK\"\n | \"sqliteQuerySearchExpansionRatio\"\n | \"sqliteQueryBackfillCount\"\n | \"sqliteQueryBackfillLimitReached\"\n | \"sqliteQueryMinResultsSatisfied\"\n | \"sqliteQueryReturnedCount\"\n | \"sqliteQueryCandidateYieldRatio\"\n | \"sqliteQueryTopKFillRatio\"\n | \"sqliteQueryUnderfilledTopK\"\n | \"sqliteQueryCandidateBudgetExhausted\"\n | \"sqliteQueryCandidateCoverage\"\n> => {\n const vectorStep = trace?.steps.find(\n (step) => step.stage === \"vector_search\",\n );\n const metadata = vectorStep?.metadata ?? {};\n\n return {\n sqliteQueryBackfillCount:\n typeof metadata.sqliteQueryBackfillCount === \"number\"\n ? metadata.sqliteQueryBackfillCount\n : undefined,\n sqliteQueryCandidateBudgetExhausted:\n typeof metadata.sqliteQueryCandidateBudgetExhausted === \"boolean\"\n ? metadata.sqliteQueryCandidateBudgetExhausted\n : undefined,\n sqliteQueryCandidateCoverage:\n metadata.sqliteQueryCandidateCoverage === \"empty\" ||\n metadata.sqliteQueryCandidateCoverage === \"under_target\" ||\n metadata.sqliteQueryCandidateCoverage === \"target_sized\" ||\n metadata.sqliteQueryCandidateCoverage === \"broad\"\n ? metadata.sqliteQueryCandidateCoverage\n : undefined,\n sqliteQueryFilteredCandidates:\n typeof metadata.sqliteQueryFilteredCandidates === \"number\"\n ? metadata.sqliteQueryFilteredCandidates\n : undefined,\n sqliteQueryFinalSearchK:\n typeof metadata.sqliteQueryFinalSearchK === \"number\"\n ? metadata.sqliteQueryFinalSearchK\n : undefined,\n sqliteQueryInitialSearchK:\n typeof metadata.sqliteQueryInitialSearchK === \"number\"\n ? metadata.sqliteQueryInitialSearchK\n : undefined,\n sqliteQuerySearchExpansionRatio:\n typeof metadata.sqliteQuerySearchExpansionRatio === \"number\"\n ? metadata.sqliteQuerySearchExpansionRatio\n : undefined,\n sqliteQueryMode:\n metadata.sqliteQueryMode === \"json_fallback\" ||\n metadata.sqliteQueryMode === \"native_vec0\"\n ? metadata.sqliteQueryMode\n : undefined,\n sqliteQueryPushdownMode:\n metadata.sqliteQueryPushdownMode === \"none\" ||\n metadata.sqliteQueryPushdownMode === \"partial\" ||\n metadata.sqliteQueryPushdownMode === \"full\"\n ? metadata.sqliteQueryPushdownMode\n : undefined,\n sqliteQueryPushdownApplied:\n typeof metadata.sqliteQueryPushdownApplied === \"boolean\"\n ? metadata.sqliteQueryPushdownApplied\n : undefined,\n sqliteQueryPushdownClauseCount:\n typeof metadata.sqliteQueryPushdownClauseCount === \"number\"\n ? metadata.sqliteQueryPushdownClauseCount\n : undefined,\n sqliteQueryTotalFilterClauseCount:\n typeof metadata.sqliteQueryTotalFilterClauseCount === \"number\"\n ? metadata.sqliteQueryTotalFilterClauseCount\n : undefined,\n sqliteQueryJsRemainderClauseCount:\n typeof metadata.sqliteQueryJsRemainderClauseCount === \"number\"\n ? metadata.sqliteQueryJsRemainderClauseCount\n : undefined,\n sqliteQueryMultiplierUsed:\n typeof metadata.sqliteQueryMultiplierUsed === \"number\"\n ? metadata.sqliteQueryMultiplierUsed\n : undefined,\n sqliteQueryCandidateLimitUsed:\n typeof metadata.sqliteQueryCandidateLimitUsed === \"number\"\n ? metadata.sqliteQueryCandidateLimitUsed\n : undefined,\n sqliteQueryMaxBackfillsUsed:\n typeof metadata.sqliteQueryMaxBackfillsUsed === \"number\"\n ? metadata.sqliteQueryMaxBackfillsUsed\n : undefined,\n sqliteQueryMinResultsUsed:\n typeof metadata.sqliteQueryMinResultsUsed === \"number\"\n ? metadata.sqliteQueryMinResultsUsed\n : undefined,\n sqliteQueryFillPolicyUsed:\n metadata.sqliteQueryFillPolicyUsed === \"strict_topk\" ||\n metadata.sqliteQueryFillPolicyUsed === \"satisfy_min_results\"\n ? metadata.sqliteQueryFillPolicyUsed\n : undefined,\n sqliteQueryPushdownCoverageRatio:\n typeof metadata.sqliteQueryPushdownCoverageRatio === \"number\"\n ? metadata.sqliteQueryPushdownCoverageRatio\n : undefined,\n sqliteQueryJsRemainderRatio:\n typeof metadata.sqliteQueryJsRemainderRatio === \"number\"\n ? metadata.sqliteQueryJsRemainderRatio\n : undefined,\n sqliteQueryReturnedCount:\n typeof metadata.sqliteQueryReturnedCount === \"number\"\n ? metadata.sqliteQueryReturnedCount\n : undefined,\n sqliteQueryCandidateYieldRatio:\n typeof metadata.sqliteQueryCandidateYieldRatio === \"number\"\n ? metadata.sqliteQueryCandidateYieldRatio\n : undefined,\n sqliteQueryBackfillLimitReached:\n typeof metadata.sqliteQueryBackfillLimitReached === \"boolean\"\n ? metadata.sqliteQueryBackfillLimitReached\n : undefined,\n sqliteQueryMinResultsSatisfied:\n typeof metadata.sqliteQueryMinResultsSatisfied === \"boolean\"\n ? metadata.sqliteQueryMinResultsSatisfied\n : undefined,\n sqliteQueryTopKFillRatio:\n typeof metadata.sqliteQueryTopKFillRatio === \"number\"\n ? metadata.sqliteQueryTopKFillRatio\n : undefined,\n sqliteQueryUnderfilledTopK:\n typeof metadata.sqliteQueryUnderfilledTopK === \"boolean\"\n ? metadata.sqliteQueryUnderfilledTopK\n : undefined,\n };\n};\n\nconst buildEvaluationPostgresQueryPlanSnapshot = (\n trace?: RAGRetrievalTrace,\n): Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"postgresQueryMode\"\n | \"postgresQueryPushdownMode\"\n | \"postgresQueryPushdownApplied\"\n | \"postgresQueryPushdownClauseCount\"\n | \"postgresQueryTotalFilterClauseCount\"\n | \"postgresQueryJsRemainderClauseCount\"\n | \"postgresQueryMultiplierUsed\"\n | \"postgresQueryCandidateLimitUsed\"\n | \"postgresQueryMaxBackfillsUsed\"\n | \"postgresQueryMinResultsUsed\"\n | \"postgresQueryFillPolicyUsed\"\n | \"postgresQueryPushdownCoverageRatio\"\n | \"postgresQueryJsRemainderRatio\"\n | \"postgresQueryFilteredCandidates\"\n | \"postgresQueryInitialSearchK\"\n | \"postgresQueryFinalSearchK\"\n | \"postgresQuerySearchExpansionRatio\"\n | \"postgresQueryBackfillCount\"\n | \"postgresQueryBackfillLimitReached\"\n | \"postgresQueryMinResultsSatisfied\"\n | \"postgresQueryReturnedCount\"\n | \"postgresQueryCandidateYieldRatio\"\n | \"postgresQueryTopKFillRatio\"\n | \"postgresQueryUnderfilledTopK\"\n | \"postgresQueryCandidateBudgetExhausted\"\n | \"postgresQueryCandidateCoverage\"\n> => {\n const vectorStep = trace?.steps.find(\n (step) => step.stage === \"vector_search\",\n );\n const metadata = vectorStep?.metadata ?? {};\n\n return {\n postgresQueryBackfillCount:\n typeof metadata.postgresQueryBackfillCount === \"number\"\n ? metadata.postgresQueryBackfillCount\n : undefined,\n postgresQueryCandidateBudgetExhausted:\n typeof metadata.postgresQueryCandidateBudgetExhausted === \"boolean\"\n ? metadata.postgresQueryCandidateBudgetExhausted\n : undefined,\n postgresQueryCandidateCoverage:\n metadata.postgresQueryCandidateCoverage === \"empty\" ||\n metadata.postgresQueryCandidateCoverage === \"under_target\" ||\n metadata.postgresQueryCandidateCoverage === \"target_sized\" ||\n metadata.postgresQueryCandidateCoverage === \"broad\"\n ? metadata.postgresQueryCandidateCoverage\n : undefined,\n postgresQueryFilteredCandidates:\n typeof metadata.postgresQueryFilteredCandidates === \"number\"\n ? metadata.postgresQueryFilteredCandidates\n : undefined,\n postgresQueryFinalSearchK:\n typeof metadata.postgresQueryFinalSearchK === \"number\"\n ? metadata.postgresQueryFinalSearchK\n : undefined,\n postgresQueryInitialSearchK:\n typeof metadata.postgresQueryInitialSearchK === \"number\"\n ? metadata.postgresQueryInitialSearchK\n : undefined,\n postgresQuerySearchExpansionRatio:\n typeof metadata.postgresQuerySearchExpansionRatio === \"number\"\n ? metadata.postgresQuerySearchExpansionRatio\n : undefined,\n postgresQueryMode:\n metadata.postgresQueryMode === \"native_pgvector\"\n ? metadata.postgresQueryMode\n : undefined,\n postgresQueryPushdownMode:\n metadata.postgresQueryPushdownMode === \"none\" ||\n metadata.postgresQueryPushdownMode === \"partial\" ||\n metadata.postgresQueryPushdownMode === \"full\"\n ? metadata.postgresQueryPushdownMode\n : undefined,\n postgresQueryPushdownApplied:\n typeof metadata.postgresQueryPushdownApplied === \"boolean\"\n ? metadata.postgresQueryPushdownApplied\n : undefined,\n postgresQueryPushdownClauseCount:\n typeof metadata.postgresQueryPushdownClauseCount === \"number\"\n ? metadata.postgresQueryPushdownClauseCount\n : undefined,\n postgresQueryTotalFilterClauseCount:\n typeof metadata.postgresQueryTotalFilterClauseCount === \"number\"\n ? metadata.postgresQueryTotalFilterClauseCount\n : undefined,\n postgresQueryJsRemainderClauseCount:\n typeof metadata.postgresQueryJsRemainderClauseCount === \"number\"\n ? metadata.postgresQueryJsRemainderClauseCount\n : undefined,\n postgresQueryMultiplierUsed:\n typeof metadata.postgresQueryMultiplierUsed === \"number\"\n ? metadata.postgresQueryMultiplierUsed\n : undefined,\n postgresQueryCandidateLimitUsed:\n typeof metadata.postgresQueryCandidateLimitUsed === \"number\"\n ? metadata.postgresQueryCandidateLimitUsed\n : undefined,\n postgresQueryMaxBackfillsUsed:\n typeof metadata.postgresQueryMaxBackfillsUsed === \"number\"\n ? metadata.postgresQueryMaxBackfillsUsed\n : undefined,\n postgresQueryMinResultsUsed:\n typeof metadata.postgresQueryMinResultsUsed === \"number\"\n ? metadata.postgresQueryMinResultsUsed\n : undefined,\n postgresQueryFillPolicyUsed:\n metadata.postgresQueryFillPolicyUsed === \"strict_topk\" ||\n metadata.postgresQueryFillPolicyUsed === \"satisfy_min_results\"\n ? metadata.postgresQueryFillPolicyUsed\n : undefined,\n postgresQueryPushdownCoverageRatio:\n typeof metadata.postgresQueryPushdownCoverageRatio === \"number\"\n ? metadata.postgresQueryPushdownCoverageRatio\n : undefined,\n postgresQueryJsRemainderRatio:\n typeof metadata.postgresQueryJsRemainderRatio === \"number\"\n ? metadata.postgresQueryJsRemainderRatio\n : undefined,\n postgresQueryReturnedCount:\n typeof metadata.postgresQueryReturnedCount === \"number\"\n ? metadata.postgresQueryReturnedCount\n : undefined,\n postgresQueryCandidateYieldRatio:\n typeof metadata.postgresQueryCandidateYieldRatio === \"number\"\n ? metadata.postgresQueryCandidateYieldRatio\n : undefined,\n postgresQueryBackfillLimitReached:\n typeof metadata.postgresQueryBackfillLimitReached === \"boolean\"\n ? metadata.postgresQueryBackfillLimitReached\n : undefined,\n postgresQueryMinResultsSatisfied:\n typeof metadata.postgresQueryMinResultsSatisfied === \"boolean\"\n ? metadata.postgresQueryMinResultsSatisfied\n : undefined,\n postgresQueryTopKFillRatio:\n typeof metadata.postgresQueryTopKFillRatio === \"number\"\n ? metadata.postgresQueryTopKFillRatio\n : undefined,\n postgresQueryUnderfilledTopK:\n typeof metadata.postgresQueryUnderfilledTopK === \"boolean\"\n ? metadata.postgresQueryUnderfilledTopK\n : undefined,\n };\n};\nconst DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME =\n \"rag_retrieval_comparison_history\";\nconst DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME =\n \"rag_retrieval_release_decisions\";\nconst DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME = \"rag_retrieval_baselines\";\nconst DEFAULT_RETRIEVAL_RELEASE_INCIDENT_TABLE_NAME =\n \"rag_retrieval_release_incidents\";\ntype BunSQLiteModule = {\n Database: new (path?: string) => Database;\n};\n\ntype ImportMetaWithRequire = ImportMeta & {\n require?: (specifier: string) => unknown;\n};\n\nconst loadBunSQLiteModule = (): BunSQLiteModule => {\n const runtimeRequire = (import.meta as ImportMetaWithRequire).require;\n if (typeof runtimeRequire !== \"function\") {\n throw new Error(\n \"SQLite trace storage requires Bun runtime support for import.meta.require.\",\n );\n }\n\n return runtimeRequire(\"bun:sqlite\") as BunSQLiteModule;\n};\n\nconst normalizeStringArray = (value: unknown) => {\n if (!Array.isArray(value)) {\n return [];\n }\n\n return value\n .filter((candidate) => typeof candidate === \"string\")\n .map((candidate) => candidate.trim())\n .filter((candidate) => candidate.length > 0);\n};\n\nconst normalizeLabelFilter = (value?: string) => {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const normalized = value.trim().toLowerCase();\n return normalized.length > 0 ? normalized : undefined;\n};\n\nconst normalizeRetrievalBaselineRecords = (\n records: RAGRetrievalBaselineRecord[],\n) => [...records].sort((left, right) => right.promotedAt - left.promotedAt);\n\nconst normalizeRetrievalReleaseDecisionRecords = (\n records: RAGRetrievalReleaseDecisionRecord[],\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalLaneHandoffDecisionRecords = (\n records: RAGRetrievalLaneHandoffDecisionRecord[],\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalReleaseIncidentRecords = (\n records: RAGRetrievalReleaseIncidentRecord[],\n) => [...records].sort((left, right) => right.triggeredAt - left.triggeredAt);\n\nconst normalizeRetrievalIncidentRemediationDecisionRecords = (\n records: RAGRetrievalIncidentRemediationDecisionRecord[],\n) => [...records].sort((left, right) => right.decidedAt - left.decidedAt);\n\nconst normalizeRetrievalIncidentRemediationExecutionHistoryRecords = (\n records: RAGRetrievalIncidentRemediationExecutionHistoryRecord[],\n) => [...records].sort((left, right) => right.executedAt - left.executedAt);\n\nconst matchesWinner = (run: RAGRetrievalComparisonRun, winnerId?: string) => {\n if (!winnerId) {\n return true;\n }\n\n return (\n run.comparison.summary.bestByPassingRate === winnerId ||\n run.decisionSummary?.winnerByPassingRate === winnerId\n );\n};\n\nconst findRetrievalComparisonEntry = (\n comparison: RAGRetrievalComparison,\n retrievalId?: string,\n) => {\n if (!retrievalId) {\n return undefined;\n }\n\n return comparison.entries.find((entry) => entry.retrievalId === retrievalId);\n};\n\nconst evaluateRetrievalComparisonGate = ({\n delta,\n policy,\n}: {\n delta?: {\n passingRateDelta: number;\n averageF1Delta: number;\n elapsedMsDelta: number;\n presentationTitleCueCasesDelta?: number;\n presentationBodyCueCasesDelta?: number;\n presentationNotesCueCasesDelta?: number;\n spreadsheetSheetCueCasesDelta?: number;\n spreadsheetTableCueCasesDelta?: number;\n spreadsheetColumnCueCasesDelta?: number;\n multiVectorCollapsedCasesDelta?: number;\n multiVectorLexicalHitCasesDelta?: number;\n multiVectorVectorHitCasesDelta?: number;\n evidenceReconcileCasesDelta?: number;\n runtimeCandidateBudgetExhaustedCasesDelta?: number;\n runtimeUnderfilledTopKCasesDelta?: number;\n };\n policy?: RAGRetrievalBaselineGatePolicy;\n}): RAGRetrievalComparisonGateResult | undefined => {\n if (!delta || !policy) {\n return undefined;\n }\n\n const reasons: string[] = [];\n if (\n typeof policy.minPassingRateDelta === \"number\" &&\n delta.passingRateDelta < policy.minPassingRateDelta\n ) {\n reasons.push(\n `passing rate delta ${delta.passingRateDelta} is below ${policy.minPassingRateDelta}`,\n );\n }\n if (\n typeof policy.minAverageF1Delta === \"number\" &&\n delta.averageF1Delta < policy.minAverageF1Delta\n ) {\n reasons.push(\n `average F1 delta ${delta.averageF1Delta} is below ${policy.minAverageF1Delta}`,\n );\n }\n if (\n typeof policy.maxElapsedMsDelta === \"number\" &&\n delta.elapsedMsDelta > policy.maxElapsedMsDelta\n ) {\n reasons.push(\n `elapsed ms delta ${delta.elapsedMsDelta} exceeds ${policy.maxElapsedMsDelta}`,\n );\n }\n if (\n typeof policy.minPresentationTitleCueCasesDelta === \"number\" &&\n (delta.presentationTitleCueCasesDelta ?? 0) <\n policy.minPresentationTitleCueCasesDelta\n ) {\n reasons.push(\n `presentation title cue delta ${delta.presentationTitleCueCasesDelta ?? 0} is below ${policy.minPresentationTitleCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minPresentationBodyCueCasesDelta === \"number\" &&\n (delta.presentationBodyCueCasesDelta ?? 0) <\n policy.minPresentationBodyCueCasesDelta\n ) {\n reasons.push(\n `presentation body cue delta ${delta.presentationBodyCueCasesDelta ?? 0} is below ${policy.minPresentationBodyCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minPresentationNotesCueCasesDelta === \"number\" &&\n (delta.presentationNotesCueCasesDelta ?? 0) <\n policy.minPresentationNotesCueCasesDelta\n ) {\n reasons.push(\n `presentation notes cue delta ${delta.presentationNotesCueCasesDelta ?? 0} is below ${policy.minPresentationNotesCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minSpreadsheetSheetCueCasesDelta === \"number\" &&\n (delta.spreadsheetSheetCueCasesDelta ?? 0) <\n policy.minSpreadsheetSheetCueCasesDelta\n ) {\n reasons.push(\n `spreadsheet sheet cue delta ${delta.spreadsheetSheetCueCasesDelta ?? 0} is below ${policy.minSpreadsheetSheetCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minSpreadsheetTableCueCasesDelta === \"number\" &&\n (delta.spreadsheetTableCueCasesDelta ?? 0) <\n policy.minSpreadsheetTableCueCasesDelta\n ) {\n reasons.push(\n `spreadsheet table cue delta ${delta.spreadsheetTableCueCasesDelta ?? 0} is below ${policy.minSpreadsheetTableCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minSpreadsheetColumnCueCasesDelta === \"number\" &&\n (delta.spreadsheetColumnCueCasesDelta ?? 0) <\n policy.minSpreadsheetColumnCueCasesDelta\n ) {\n reasons.push(\n `spreadsheet column cue delta ${delta.spreadsheetColumnCueCasesDelta ?? 0} is below ${policy.minSpreadsheetColumnCueCasesDelta}`,\n );\n }\n if (\n typeof policy.minMultiVectorCollapsedCasesDelta === \"number\" &&\n (delta.multiVectorCollapsedCasesDelta ?? 0) <\n policy.minMultiVectorCollapsedCasesDelta\n ) {\n reasons.push(\n `multivector collapsed delta ${delta.multiVectorCollapsedCasesDelta ?? 0} is below ${policy.minMultiVectorCollapsedCasesDelta}`,\n );\n }\n if (\n typeof policy.minMultiVectorLexicalHitCasesDelta === \"number\" &&\n (delta.multiVectorLexicalHitCasesDelta ?? 0) <\n policy.minMultiVectorLexicalHitCasesDelta\n ) {\n reasons.push(\n `multivector lexical-hit delta ${delta.multiVectorLexicalHitCasesDelta ?? 0} is below ${policy.minMultiVectorLexicalHitCasesDelta}`,\n );\n }\n if (\n typeof policy.minMultiVectorVectorHitCasesDelta === \"number\" &&\n (delta.multiVectorVectorHitCasesDelta ?? 0) <\n policy.minMultiVectorVectorHitCasesDelta\n ) {\n reasons.push(\n `multivector vector-hit delta ${delta.multiVectorVectorHitCasesDelta ?? 0} is below ${policy.minMultiVectorVectorHitCasesDelta}`,\n );\n }\n if (\n typeof policy.minEvidenceReconcileCasesDelta === \"number\" &&\n (delta.evidenceReconcileCasesDelta ?? 0) <\n policy.minEvidenceReconcileCasesDelta\n ) {\n reasons.push(\n `evidence reconcile delta ${delta.evidenceReconcileCasesDelta ?? 0} is below ${policy.minEvidenceReconcileCasesDelta}`,\n );\n }\n if (\n typeof policy.maxRuntimeCandidateBudgetExhaustedCasesDelta === \"number\" &&\n (delta.runtimeCandidateBudgetExhaustedCasesDelta ?? 0) >\n policy.maxRuntimeCandidateBudgetExhaustedCasesDelta\n ) {\n reasons.push(\n `runtime candidate-budget-exhausted delta ${delta.runtimeCandidateBudgetExhaustedCasesDelta ?? 0} exceeds ${policy.maxRuntimeCandidateBudgetExhaustedCasesDelta}`,\n );\n }\n if (\n typeof policy.maxRuntimeUnderfilledTopKCasesDelta === \"number\" &&\n (delta.runtimeUnderfilledTopKCasesDelta ?? 0) >\n policy.maxRuntimeUnderfilledTopKCasesDelta\n ) {\n reasons.push(\n `runtime underfilled-topk delta ${delta.runtimeUnderfilledTopKCasesDelta ?? 0} exceeds ${policy.maxRuntimeUnderfilledTopKCasesDelta}`,\n );\n }\n\n if (reasons.length === 0) {\n return {\n policy,\n reasons: [],\n status: \"pass\",\n };\n }\n\n return {\n policy,\n reasons,\n status: policy.severity === \"warn\" ? \"warn\" : \"fail\",\n };\n};\n\nexport const buildRAGRetrievalReleaseVerdict = ({\n groupKey,\n decisionSummary,\n}: {\n groupKey?: string;\n decisionSummary?: RAGRetrievalComparisonDecisionSummary;\n}): RAGRetrievalReleaseVerdict | undefined => {\n if (!decisionSummary) {\n return undefined;\n }\n\n const gate = decisionSummary.gate;\n const delta = decisionSummary.delta;\n const baselineRetrievalId = decisionSummary.baselineRetrievalId;\n const candidateRetrievalId = decisionSummary.candidateRetrievalId;\n\n if (gate) {\n if (gate.status === \"pass\") {\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n delta,\n gate,\n status: \"pass\",\n summary: \"Candidate passed the active baseline gate.\",\n };\n }\n\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n delta,\n gate,\n status: gate.status,\n summary:\n gate.status === \"warn\"\n ? \"Candidate triggered a baseline gate warning.\"\n : \"Candidate failed the active baseline gate.\",\n };\n }\n\n if (delta) {\n const requiresReview =\n delta.passingRateDelta < 0 ||\n delta.averageF1Delta < 0 ||\n (delta.evidenceReconcileCasesDelta ?? 0) < 0 ||\n (delta.presentationTitleCueCasesDelta ?? 0) < 0 ||\n (delta.presentationBodyCueCasesDelta ?? 0) < 0 ||\n (delta.presentationNotesCueCasesDelta ?? 0) < 0 ||\n (delta.spreadsheetSheetCueCasesDelta ?? 0) < 0 ||\n (delta.spreadsheetTableCueCasesDelta ?? 0) < 0 ||\n (delta.spreadsheetColumnCueCasesDelta ?? 0) < 0;\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n delta,\n status: requiresReview ? \"needs_review\" : \"pass\",\n summary: requiresReview\n ? \"Candidate should be reviewed before promotion.\"\n : \"Candidate improved or matched the baseline.\",\n };\n }\n\n return {\n baselineGroupKey: groupKey,\n baselineRetrievalId,\n candidateRetrievalId,\n status: \"needs_review\",\n summary: \"No explicit baseline verdict could be determined.\",\n };\n};\n\nconst isObjectRecord = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\";\n\nconst parseJSONRecord = (value: string | null) => {\n if (value === null) {\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(value);\n\n return isObjectRecord(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst parseJSONArray = <T>(value: string | null, fallback: T[]): T[] => {\n if (value === null) {\n return fallback;\n }\n\n try {\n const parsed = JSON.parse(value);\n\n return Array.isArray(parsed) ? (parsed as T[]) : fallback;\n } catch {\n return fallback;\n }\n};\n\nconst normalizeExpectedIds = (input: string[]) =>\n Array.from(new Set(input.map((item) => item.trim()).filter(Boolean)));\n\nconst hasSourceExtension = (\n value: string | undefined,\n extensions: string[],\n) => {\n if (!value) {\n return false;\n }\n const normalized = value.trim().toLowerCase();\n\n return extensions.some((extension) => normalized.endsWith(extension));\n};\n\nconst hasMetadataNumber = (\n metadata: Record<string, unknown> | undefined,\n key: string,\n) => typeof metadata?.[key] === \"number\";\n\nconst hasMetadataString = (\n metadata: Record<string, unknown> | undefined,\n key: string,\n) => typeof metadata?.[key] === \"string\" && metadata[key] !== \"\";\n\nconst hasMetadataArray = (\n metadata: Record<string, unknown> | undefined,\n key: string,\n) => Array.isArray(metadata?.[key]) && metadata[key].length > 0;\n\nconst detectSectionEvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n sources.some(\n (source) =>\n hasMetadataArray(source.metadata, \"sectionPath\") ||\n hasMetadataString(source.metadata, \"sectionTitle\") ||\n hasMetadataString(source.metadata, \"sectionKind\"),\n );\n\nconst detectSectionGraphEvidence = (\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n sources.some(\n (source) =>\n hasMetadataString(source.metadata, \"sectionChunkId\") ||\n hasMetadataNumber(source.metadata, \"sectionChunkIndex\") ||\n (hasMetadataNumber(source.metadata, \"sectionChunkCount\") &&\n Number(source.metadata?.sectionChunkCount) > 1),\n );\n\nconst detectSectionHierarchyEvidence = (\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n sources.some((source) => {\n const path = Array.isArray(source.metadata?.sectionPath)\n ? source.metadata.sectionPath.filter(\n (entry): entry is string =>\n typeof entry === \"string\" && entry.trim().length > 0,\n )\n : [];\n\n return path.length > 1;\n });\n\nconst detectSpreadsheetEvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n ids.some((id) =>\n hasSourceExtension(id, [\".xlsx\", \".xls\", \".csv\", \".ods\", \".tsv\"]),\n ) ||\n sources.some(\n (source) =>\n hasSourceExtension(source.source, [\n \".xlsx\",\n \".xls\",\n \".csv\",\n \".ods\",\n \".tsv\",\n ]) ||\n hasMetadataString(source.metadata, \"sheetName\") ||\n hasMetadataNumber(source.metadata, \"spreadsheetRowStart\") ||\n hasMetadataNumber(source.metadata, \"spreadsheetTableIndex\"),\n );\n\nconst detectMediaEvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n ids.some((id) =>\n hasSourceExtension(id, [\n \".mp3\",\n \".wav\",\n \".m4a\",\n \".aac\",\n \".ogg\",\n \".flac\",\n \".mp4\",\n \".mov\",\n \".mkv\",\n \".webm\",\n ]),\n ) ||\n sources.some(\n (source) =>\n hasSourceExtension(source.source, [\n \".mp3\",\n \".wav\",\n \".m4a\",\n \".aac\",\n \".ogg\",\n \".flac\",\n \".mp4\",\n \".mov\",\n \".mkv\",\n \".webm\",\n ]) ||\n hasMetadataString(source.metadata, \"mediaKind\") ||\n hasMetadataString(source.metadata, \"speaker\") ||\n hasMetadataNumber(source.metadata, \"startMs\"),\n );\n\nconst detectOCREvidence = (\n ids: string[],\n sources: Array<Pick<RAGSource, \"source\" | \"metadata\">> = [],\n) =>\n ids.some((id) =>\n hasSourceExtension(id, [\".png\", \".jpg\", \".jpeg\", \".webp\"]),\n ) ||\n sources.some(\n (source) =>\n hasSourceExtension(source.source, [\".png\", \".jpg\", \".jpeg\", \".webp\"]) ||\n hasMetadataNumber(source.metadata, \"ocrConfidence\") ||\n hasMetadataNumber(source.metadata, \"ocrRegionConfidence\") ||\n hasMetadataString(source.metadata, \"ocrEngine\") ||\n source.metadata?.pdfTextMode === \"ocr\",\n );\n\nconst getRetrievalTrace = (\n trace: RAGSearchTraceRecord | RAGRetrievalTrace | undefined,\n) => (trace && \"trace\" in trace ? trace.trace : trace);\n\nconst classifyRAGEvaluationFailure = (input: {\n expectedCount: number;\n matchedCount: number;\n missingIds: string[];\n retrievedCount: number;\n retrievedIds: string[];\n retrievedSources?: RAGSource[];\n trace?: RAGSearchTraceRecord | RAGRetrievalTrace;\n}): NonNullable<RAGEvaluationCaseResult[\"failureClasses\"]> => {\n const classes: NonNullable<RAGEvaluationCaseResult[\"failureClasses\"]> = [];\n if (input.expectedCount === 0) {\n classes.push(\"no_expected_targets\");\n }\n if (input.retrievedCount === 0) {\n classes.push(\"no_results\");\n }\n if (input.expectedCount > 0 && input.matchedCount === 0) {\n classes.push(\"no_match\");\n }\n if (\n input.expectedCount > 0 &&\n input.matchedCount > 0 &&\n input.matchedCount < input.expectedCount\n ) {\n classes.push(\"partial_recall\");\n }\n if (input.retrievedIds.length > input.matchedCount) {\n classes.push(\"extra_noise\");\n }\n const sourceSignals = input.retrievedSources ?? [];\n const relevantIds = [...input.missingIds, ...input.retrievedIds];\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectSectionEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"section_evidence_miss\");\n if (detectSectionGraphEvidence(sourceSignals)) {\n classes.push(\"section_graph_miss\");\n }\n if (detectSectionHierarchyEvidence(sourceSignals)) {\n classes.push(\"section_hierarchy_miss\");\n }\n }\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectSpreadsheetEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"spreadsheet_evidence_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectMediaEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"media_evidence_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.matchedCount === 0) &&\n detectOCREvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"ocr_evidence_miss\");\n }\n const retrievalTrace = getRetrievalTrace(input.trace);\n if (\n (input.retrievedCount === 0 || input.matchedCount === 0) &&\n (retrievalTrace?.routingLabel || retrievalTrace?.routingReason)\n ) {\n classes.push(\"routing_miss\");\n }\n\n return classes;\n};\n\nconst classifyRAGGroundingFailure = (input: {\n expectedCount: number;\n matchedCount: number;\n missingIds: string[];\n extraIds: string[];\n citationCount: number;\n unresolvedCitationCount: number;\n availableSources?: RAGSource[];\n}): NonNullable<RAGAnswerGroundingEvaluationCaseResult[\"failureClasses\"]> => {\n const classes: NonNullable<\n RAGAnswerGroundingEvaluationCaseResult[\"failureClasses\"]\n > = [];\n if (input.expectedCount === 0) {\n classes.push(\"no_expected_targets\");\n }\n if (input.citationCount === 0) {\n classes.push(\"no_citations\");\n }\n if (input.unresolvedCitationCount > 0) {\n classes.push(\"unresolved_citations\");\n }\n if (input.missingIds.length > 0 || input.matchedCount < input.expectedCount) {\n classes.push(\"missing_expected_sources\");\n }\n if (input.extraIds.length > 0) {\n classes.push(\"extra_citations\");\n }\n const sourceSignals = input.availableSources ?? [];\n const relevantIds = [...input.missingIds, ...input.extraIds];\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectSectionEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"section_source_miss\");\n if (detectSectionGraphEvidence(sourceSignals)) {\n classes.push(\"section_graph_source_miss\");\n }\n if (detectSectionHierarchyEvidence(sourceSignals)) {\n classes.push(\"section_hierarchy_source_miss\");\n }\n }\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectSpreadsheetEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"spreadsheet_source_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectMediaEvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"media_source_miss\");\n }\n if (\n (input.missingIds.length > 0 || input.citationCount === 0) &&\n detectOCREvidence(relevantIds, sourceSignals)\n ) {\n classes.push(\"ocr_source_miss\");\n }\n\n return classes;\n};\n\nconst normalizeSyntheticText = (value: string) =>\n value\n .replace(/^#+\\s*/gm, \"\")\n .replace(/`+/g, \"\")\n .replace(/\\[(.*?)\\]\\((.*?)\\)/g, \"$1\")\n .replace(/\\s+/g, \" \")\n .trim();\n\nconst buildSyntheticEvaluationQuery = (document: RAGIndexedDocument) => {\n const title = normalizeSyntheticText(document.title);\n const sourceTail = normalizeSyntheticText(\n document.source.split(\"/\").at(-1) ?? document.source,\n );\n const text = normalizeSyntheticText(document.text ?? \"\");\n const firstSentence =\n text\n .split(/(?<=[.!?])\\s+/)\n .map((entry) => entry.trim())\n .find((entry) => entry.length >= 24) ??\n text\n .split(/\\n+/)\n .map((entry) => entry.trim())\n .find((entry) => entry.length >= 24) ??\n title ??\n sourceTail;\n const prefixedSentence =\n title.length > 0 &&\n firstSentence.toLowerCase().startsWith(title.toLowerCase())\n ? firstSentence\n : [title, firstSentence].filter(Boolean).join(\" \");\n const queryTerms = normalizeSyntheticText(prefixedSentence)\n .split(/\\s+/)\n .slice(0, 12)\n .join(\" \");\n\n return queryTerms.length > 0 ? queryTerms : sourceTail;\n};\n\nconst resolveEvaluationMode = (caseInput: {\n expectedChunkIds?: string[];\n expectedSources?: string[];\n expectedDocumentIds?: string[];\n}): \"chunkId\" | \"source\" | \"documentId\" => {\n if (normalizeStringArray(caseInput.expectedChunkIds).length > 0) {\n return \"chunkId\";\n }\n if (normalizeStringArray(caseInput.expectedSources).length > 0) {\n return \"source\";\n }\n\n return \"documentId\";\n};\n\nconst getDocumentId = (source: RAGSource): string => {\n const metadataDocumentId =\n typeof source.metadata?.documentId === \"string\"\n ? source.metadata.documentId\n : undefined;\n if (metadataDocumentId) {\n return metadataDocumentId;\n }\n if (source.source) {\n return source.source;\n }\n\n const [documentId] = source.chunkId.split(\":\");\n\n return documentId ?? source.chunkId;\n};\n\nconst extractExpectedId = (\n source: RAGSource,\n mode: \"chunkId\" | \"source\" | \"documentId\",\n): string =>\n mode === \"chunkId\"\n ? source.chunkId\n : mode === \"source\"\n ? (source.source ?? source.title ?? source.chunkId)\n : getDocumentId(source);\n\nconst buildSources = (\n results: Array<{\n chunkId: string;\n chunkText: string;\n score: number;\n title?: string;\n source?: string;\n metadata?: Record<string, unknown>;\n }>,\n) =>\n results.map((result) => ({\n chunkId: result.chunkId,\n metadata: result.metadata,\n score: Number.isFinite(result.score) ? result.score : 0,\n source: result.source,\n text: result.chunkText,\n title: result.title,\n }));\n\nconst buildAnswerGroundingStatus = ({\n coverage,\n expectedCount,\n matchedCount,\n unresolvedCitationCount,\n resolvedCitationCount,\n}: {\n coverage: RAGAnswerGroundingEvaluationCaseResult[\"coverage\"];\n expectedCount: number;\n matchedCount: number;\n unresolvedCitationCount: number;\n resolvedCitationCount: number;\n}): RAGAnswerGroundingEvaluationCaseResult[\"status\"] => {\n if (expectedCount > 0) {\n if (\n matchedCount === expectedCount &&\n unresolvedCitationCount === 0 &&\n coverage !== \"ungrounded\"\n ) {\n return \"pass\";\n }\n\n if (matchedCount > 0 || resolvedCitationCount > 0) {\n return \"partial\";\n }\n\n return \"fail\";\n }\n\n if (coverage === \"grounded\" && unresolvedCitationCount === 0) {\n return \"pass\";\n }\n\n if (resolvedCitationCount > 0 || coverage === \"partial\") {\n return \"partial\";\n }\n\n return \"fail\";\n};\n\nexport const buildRAGEvaluationLeaderboard = (\n runs: RAGEvaluationSuiteRun[],\n) => {\n const sorted = [...runs].sort((left, right) => {\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n\n return sorted.map<RAGEvaluationLeaderboardEntry>((run, index) => ({\n averageF1: run.response.summary.averageF1,\n averageLatencyMs: run.response.summary.averageLatencyMs,\n label: run.label,\n passingRate: run.response.passingRate,\n rank: index + 1,\n runId: run.id,\n suiteId: run.suiteId,\n totalCases: run.response.totalCases,\n }));\n};\n\nexport const buildRAGAnswerGroundingEvaluationLeaderboard = (\n runs: RAGAnswerGroundingEvaluationRun[],\n) => {\n const sorted = [...runs].sort((left, right) => {\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (\n right.response.summary.averageCitationF1 !==\n left.response.summary.averageCitationF1\n ) {\n return (\n right.response.summary.averageCitationF1 -\n left.response.summary.averageCitationF1\n );\n }\n if (\n right.response.summary.averageResolvedCitationRate !==\n left.response.summary.averageResolvedCitationRate\n ) {\n return (\n right.response.summary.averageResolvedCitationRate -\n left.response.summary.averageResolvedCitationRate\n );\n }\n\n return left.elapsedMs - right.elapsedMs;\n });\n\n return sorted.map<RAGAnswerGroundingEvaluationLeaderboardEntry>(\n (run, index) => ({\n averageCitationF1: run.response.summary.averageCitationF1,\n averageResolvedCitationRate:\n run.response.summary.averageResolvedCitationRate,\n label: run.label,\n passingRate: run.response.passingRate,\n rank: index + 1,\n runId: run.id,\n suiteId: run.suiteId,\n totalCases: run.response.totalCases,\n }),\n );\n};\n\nconst buildTraceStageCounts = (traces: RAGRetrievalTrace[]) => {\n const counts: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n > = {};\n\n for (const trace of traces) {\n for (const step of trace.steps) {\n counts[step.stage] = (counts[step.stage] ?? 0) + 1;\n }\n }\n\n return counts;\n};\n\nconst diffTraceStageCounts = ({\n current,\n previous,\n}: {\n current: Partial<Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>>;\n previous: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n >;\n}) => {\n const next: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n > = {};\n const stages = new Set([\n ...Object.keys(current),\n ...Object.keys(previous),\n ] as RAGRetrievalTrace[\"steps\"][number][\"stage\"][]);\n\n for (const stage of stages) {\n const delta = (current[stage] ?? 0) - (previous[stage] ?? 0);\n if (delta !== 0) {\n next[stage] = delta;\n }\n }\n\n return next;\n};\n\nconst normalizeSummaryList = <T extends string>(values: T[]) =>\n Array.from(new Set(values)).sort();\n\nconst buildSummaryListDelta = <T extends string>(\n current: T[],\n previous: T[],\n) => {\n const currentSet = new Set(current);\n const previousSet = new Set(previous);\n const added = current.filter((value) => !previousSet.has(value));\n const removed = previous.filter((value) => !currentSet.has(value));\n\n return {\n added: normalizeSummaryList(Array.from(new Set(added))),\n current: normalizeSummaryList(current),\n previous: normalizeSummaryList(previous),\n removed: normalizeSummaryList(Array.from(new Set(removed))),\n };\n};\n\nfunction summarizeListTurnover<T extends string>(params: {\n current: T[];\n previous: T[];\n history: T[][];\n}): RAGTraceSummaryListTrend<T> {\n const { current, previous, history } = params;\n const currentSet = new Set(current);\n const previousSet = new Set(previous);\n const frequency: Record<string, number> = {};\n\n for (const entry of history) {\n for (const value of entry) {\n frequency[value] = (frequency[value] ?? 0) + 1;\n }\n }\n\n return {\n appeared: normalizeSummaryList(\n Array.from(new Set(current.filter((value) => !previousSet.has(value)))),\n ),\n current: normalizeSummaryList(current),\n disappeared: normalizeSummaryList(\n Array.from(new Set(previous.filter((value) => !currentSet.has(value)))),\n ),\n frequency,\n previous: normalizeSummaryList(previous),\n stable: normalizeSummaryList(\n Array.from(new Set(current.filter((value) => previousSet.has(value)))),\n ),\n };\n}\n\nconst diffTraceSummaryStageCounts = ({\n current,\n previous,\n}: {\n current: RAGRetrievalTraceComparisonSummary[\"stageCounts\"];\n previous: RAGRetrievalTraceComparisonSummary[\"stageCounts\"];\n}) => {\n const stages = new Set([\n ...Object.keys(current),\n ...Object.keys(previous),\n ]) as Set<RAGRetrievalTraceStep[\"stage\"]>;\n const next: Partial<\n Record<RAGRetrievalTraceStage, RAGTraceSummaryStageCountsDelta>\n > = {};\n\n for (const stage of stages) {\n const currentCount = current[stage] ?? 0;\n const previousCount = previous[stage] ?? 0;\n const delta = currentCount - previousCount;\n if (delta !== 0 || currentCount !== 0 || previousCount !== 0) {\n next[stage] = {\n current: currentCount,\n delta,\n previous: previousCount,\n };\n }\n }\n\n return next;\n};\n\nconst roundTraceAverage = (value: number, total: number) =>\n total > 0 ? Number((value / total).toFixed(2)) : 0;\n\nconst buildTraceSummaryDirection = (\n delta: number,\n): RAGTraceSummaryTrendDirection =>\n delta > 0 ? \"up\" : delta < 0 ? \"down\" : \"flat\";\n\nconst buildTraceSummaryAggregate = ({\n summaries,\n}: {\n summaries: RAGRetrievalTraceComparisonSummary[];\n}): {\n aggregate: RAGTraceSummaryNumericDelta[];\n bestMetric: RAGTraceSummaryNumericDelta | undefined;\n worstMetric: RAGTraceSummaryNumericDelta | undefined;\n} => {\n if (summaries.length === 0) {\n const aggregate: RAGTraceSummaryNumericDelta[] = [\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"totalCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageFinalCount\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageVectorCount\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageLexicalCount\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageCandidateTopK\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"averageLexicalTopK\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"vectorCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"lexicalCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"balancedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"roundRobinCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"transformedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"variantCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorVectorHitCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorLexicalHitCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"multiVectorCollapsedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"runtimeCandidateBudgetExhaustedCases\",\n previous: 0,\n },\n {\n current: 0,\n delta: 0,\n direction: \"flat\",\n metric: \"runtimeUnderfilledTopKCases\",\n previous: 0,\n },\n ];\n\n return {\n aggregate,\n bestMetric: undefined,\n worstMetric: undefined,\n };\n }\n\n const latest = summaries[0]!;\n const previous = summaries[summaries.length - 1]!;\n const aggregate: RAGTraceSummaryNumericDelta[] = [\n {\n current: latest.totalCases,\n delta: latest.totalCases - previous.totalCases,\n direction: buildTraceSummaryDirection(\n latest.totalCases - previous.totalCases,\n ),\n metric: \"totalCases\",\n previous: previous.totalCases,\n },\n {\n current: latest.averageFinalCount,\n delta: latest.averageFinalCount - previous.averageFinalCount,\n direction: buildTraceSummaryDirection(\n latest.averageFinalCount - previous.averageFinalCount,\n ),\n metric: \"averageFinalCount\",\n previous: previous.averageFinalCount,\n },\n {\n current: latest.averageVectorCount,\n delta: latest.averageVectorCount - previous.averageVectorCount,\n direction: buildTraceSummaryDirection(\n latest.averageVectorCount - previous.averageVectorCount,\n ),\n metric: \"averageVectorCount\",\n previous: previous.averageVectorCount,\n },\n {\n current: latest.averageLexicalCount,\n delta: latest.averageLexicalCount - previous.averageLexicalCount,\n direction: buildTraceSummaryDirection(\n latest.averageLexicalCount - previous.averageLexicalCount,\n ),\n metric: \"averageLexicalCount\",\n previous: previous.averageLexicalCount,\n },\n {\n current: latest.averageCandidateTopK,\n delta: latest.averageCandidateTopK - previous.averageCandidateTopK,\n direction: buildTraceSummaryDirection(\n latest.averageCandidateTopK - previous.averageCandidateTopK,\n ),\n metric: \"averageCandidateTopK\",\n previous: previous.averageCandidateTopK,\n },\n {\n current: latest.averageLexicalTopK,\n delta: latest.averageLexicalTopK - previous.averageLexicalTopK,\n direction: buildTraceSummaryDirection(\n latest.averageLexicalTopK - previous.averageLexicalTopK,\n ),\n metric: \"averageLexicalTopK\",\n previous: previous.averageLexicalTopK,\n },\n {\n current: latest.vectorCases,\n delta: latest.vectorCases - previous.vectorCases,\n direction: buildTraceSummaryDirection(\n latest.vectorCases - previous.vectorCases,\n ),\n metric: \"vectorCases\",\n previous: previous.vectorCases,\n },\n {\n current: latest.lexicalCases,\n delta: latest.lexicalCases - previous.lexicalCases,\n direction: buildTraceSummaryDirection(\n latest.lexicalCases - previous.lexicalCases,\n ),\n metric: \"lexicalCases\",\n previous: previous.lexicalCases,\n },\n {\n current: latest.balancedCases,\n delta: latest.balancedCases - previous.balancedCases,\n direction: buildTraceSummaryDirection(\n latest.balancedCases - previous.balancedCases,\n ),\n metric: \"balancedCases\",\n previous: previous.balancedCases,\n },\n {\n current: latest.roundRobinCases,\n delta: latest.roundRobinCases - previous.roundRobinCases,\n direction: buildTraceSummaryDirection(\n latest.roundRobinCases - previous.roundRobinCases,\n ),\n metric: \"roundRobinCases\",\n previous: previous.roundRobinCases,\n },\n {\n current: latest.transformedCases,\n delta: latest.transformedCases - previous.transformedCases,\n direction: buildTraceSummaryDirection(\n latest.transformedCases - previous.transformedCases,\n ),\n metric: \"transformedCases\",\n previous: previous.transformedCases,\n },\n {\n current: latest.variantCases,\n delta: latest.variantCases - previous.variantCases,\n direction: buildTraceSummaryDirection(\n latest.variantCases - previous.variantCases,\n ),\n metric: \"variantCases\",\n previous: previous.variantCases,\n },\n {\n current: latest.multiVectorCases,\n delta: latest.multiVectorCases - previous.multiVectorCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorCases - previous.multiVectorCases,\n ),\n metric: \"multiVectorCases\",\n previous: previous.multiVectorCases,\n },\n {\n current: latest.multiVectorVectorHitCases,\n delta:\n latest.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n ),\n metric: \"multiVectorVectorHitCases\",\n previous: previous.multiVectorVectorHitCases,\n },\n {\n current: latest.multiVectorLexicalHitCases,\n delta:\n latest.multiVectorLexicalHitCases - previous.multiVectorLexicalHitCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorLexicalHitCases - previous.multiVectorLexicalHitCases,\n ),\n metric: \"multiVectorLexicalHitCases\",\n previous: previous.multiVectorLexicalHitCases,\n },\n {\n current: latest.multiVectorCollapsedCases,\n delta:\n latest.multiVectorCollapsedCases - previous.multiVectorCollapsedCases,\n direction: buildTraceSummaryDirection(\n latest.multiVectorCollapsedCases - previous.multiVectorCollapsedCases,\n ),\n metric: \"multiVectorCollapsedCases\",\n previous: previous.multiVectorCollapsedCases,\n },\n {\n current: latest.runtimeCandidateBudgetExhaustedCases,\n delta:\n latest.runtimeCandidateBudgetExhaustedCases -\n previous.runtimeCandidateBudgetExhaustedCases,\n direction: buildTraceSummaryDirection(\n latest.runtimeCandidateBudgetExhaustedCases -\n previous.runtimeCandidateBudgetExhaustedCases,\n ),\n metric: \"runtimeCandidateBudgetExhaustedCases\",\n previous: previous.runtimeCandidateBudgetExhaustedCases,\n },\n {\n current: latest.runtimeUnderfilledTopKCases,\n delta:\n latest.runtimeUnderfilledTopKCases -\n previous.runtimeUnderfilledTopKCases,\n direction: buildTraceSummaryDirection(\n latest.runtimeUnderfilledTopKCases -\n previous.runtimeUnderfilledTopKCases,\n ),\n metric: \"runtimeUnderfilledTopKCases\",\n previous: previous.runtimeUnderfilledTopKCases,\n },\n ];\n const absoluteSorted = [...aggregate].sort(\n (left, right) =>\n Math.abs(right.delta) - Math.abs(left.delta) ||\n left.metric.localeCompare(right.metric),\n );\n\n return {\n aggregate,\n bestMetric: absoluteSorted[0],\n worstMetric: absoluteSorted[absoluteSorted.length - 1],\n };\n};\n\nconst buildRAGRetrievalTraceStageChurn = ({\n windows,\n}: {\n windows: RAGRetrievalTraceHistoryWindow[];\n}): RAGTraceSummaryStageTrend[] => {\n const stages = new Set<RAGRetrievalTraceStep[\"stage\"]>();\n for (const window of windows) {\n for (const stage of Object.keys(window.current.stageCounts) as Array<\n RAGRetrievalTraceStep[\"stage\"]\n >) {\n stages.add(stage);\n }\n for (const stage of Object.keys(window.previous.stageCounts) as Array<\n RAGRetrievalTraceStep[\"stage\"]\n >) {\n stages.add(stage);\n }\n }\n\n return [...stages]\n .map((stage) => {\n let netDelta = 0;\n let totalChanges = 0;\n for (const window of windows) {\n const delta = window.delta?.stageCountsDelta[stage]?.delta ?? 0;\n netDelta += delta;\n totalChanges += Math.abs(delta);\n }\n return {\n latestDelta: windows[0]?.delta?.stageCountsDelta[stage]?.delta ?? 0,\n netDelta,\n stage,\n totalChanges,\n };\n })\n .sort(\n (left, right) =>\n right.totalChanges - left.totalChanges ||\n left.stage.localeCompare(right.stage),\n );\n};\n\nconst summarizeRetrievalTraces = (\n traces: RAGRetrievalTrace[],\n): RAGRetrievalTraceComparisonSummary | undefined => {\n if (traces.length === 0) {\n return undefined;\n }\n\n const totalCases = traces.length;\n const modeSet = new Set<RAGHybridRetrievalMode>();\n const sourceBalanceStrategySet = new Set<RAGSourceBalanceStrategy>();\n let vectorCases = 0;\n let lexicalCases = 0;\n let balancedCases = 0;\n let roundRobinCases = 0;\n let transformedCases = 0;\n let variantCases = 0;\n let multiVectorCases = 0;\n let multiVectorVectorHitCases = 0;\n let multiVectorLexicalHitCases = 0;\n let multiVectorCollapsedCases = 0;\n let officeEvidenceReconcileCases = 0;\n let officeParagraphEvidenceReconcileCases = 0;\n let officeListEvidenceReconcileCases = 0;\n let officeTableEvidenceReconcileCases = 0;\n let pdfEvidenceReconcileCases = 0;\n let runtimeCandidateBudgetExhaustedCases = 0;\n let runtimeUnderfilledTopKCases = 0;\n let finalCountSum = 0;\n let vectorCountSum = 0;\n let lexicalCountSum = 0;\n let candidateTopKSum = 0;\n let lexicalTopKSum = 0;\n\n for (const trace of traces) {\n const vectorSearchMetadata = trace.steps.find(\n (step) => step.stage === \"vector_search\",\n )?.metadata;\n modeSet.add(trace.mode);\n sourceBalanceStrategySet.add(trace.sourceBalanceStrategy ?? \"cap\");\n if (trace.runVector) {\n vectorCases += 1;\n }\n if (trace.runLexical) {\n lexicalCases += 1;\n }\n if (typeof trace.maxResultsPerSource === \"number\") {\n balancedCases += 1;\n if (trace.sourceBalanceStrategy === \"round_robin\") {\n roundRobinCases += 1;\n }\n }\n if (trace.transformedQuery !== trace.query) {\n transformedCases += 1;\n }\n if (trace.variantQueries.length > 0) {\n variantCases += 1;\n }\n if (trace.multiVector?.configured) {\n multiVectorCases += 1;\n }\n if ((trace.multiVector?.vectorVariantHits ?? 0) > 0) {\n multiVectorVectorHitCases += 1;\n }\n if ((trace.multiVector?.lexicalVariantHits ?? 0) > 0) {\n multiVectorLexicalHitCases += 1;\n }\n if ((trace.multiVector?.collapsedParents ?? 0) > 0) {\n multiVectorCollapsedCases += 1;\n }\n const evidenceReconcileMetadata = trace.steps.find(\n (step) => step.stage === \"evidence_reconcile\",\n )?.metadata;\n if (\n typeof evidenceReconcileMetadata?.officeAffectedScopes === \"number\" &&\n evidenceReconcileMetadata.officeAffectedScopes > 0\n ) {\n officeEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.officeParagraphAffectedScopes ===\n \"number\" &&\n evidenceReconcileMetadata.officeParagraphAffectedScopes > 0\n ) {\n officeParagraphEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.officeListAffectedScopes === \"number\" &&\n evidenceReconcileMetadata.officeListAffectedScopes > 0\n ) {\n officeListEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.officeTableAffectedScopes ===\n \"number\" &&\n evidenceReconcileMetadata.officeTableAffectedScopes > 0\n ) {\n officeTableEvidenceReconcileCases += 1;\n }\n if (\n typeof evidenceReconcileMetadata?.pdfAffectedScopes === \"number\" &&\n evidenceReconcileMetadata.pdfAffectedScopes > 0\n ) {\n pdfEvidenceReconcileCases += 1;\n }\n if (vectorSearchMetadata?.sqliteQueryCandidateBudgetExhausted) {\n runtimeCandidateBudgetExhaustedCases += 1;\n }\n if (vectorSearchMetadata?.postgresQueryCandidateBudgetExhausted) {\n runtimeCandidateBudgetExhaustedCases += 1;\n }\n if (vectorSearchMetadata?.sqliteQueryUnderfilledTopK) {\n runtimeUnderfilledTopKCases += 1;\n }\n if (vectorSearchMetadata?.postgresQueryUnderfilledTopK) {\n runtimeUnderfilledTopKCases += 1;\n }\n finalCountSum += trace.resultCounts.final;\n vectorCountSum += trace.resultCounts.vector;\n lexicalCountSum += trace.resultCounts.lexical;\n candidateTopKSum += trace.candidateTopK;\n lexicalTopKSum += trace.lexicalTopK;\n }\n\n return {\n averageCandidateTopK: roundTraceAverage(candidateTopKSum, totalCases),\n averageFinalCount: roundTraceAverage(finalCountSum, totalCases),\n averageLexicalCount: roundTraceAverage(lexicalCountSum, totalCases),\n averageLexicalTopK: roundTraceAverage(lexicalTopKSum, totalCases),\n balancedCases,\n averageVectorCount: roundTraceAverage(vectorCountSum, totalCases),\n lexicalCases,\n modes: Array.from(modeSet),\n roundRobinCases,\n sourceBalanceStrategies: Array.from(sourceBalanceStrategySet),\n stageCounts: buildTraceStageCounts(traces),\n totalCases,\n transformedCases,\n variantCases,\n multiVectorCases,\n multiVectorVectorHitCases,\n multiVectorLexicalHitCases,\n multiVectorCollapsedCases,\n officeEvidenceReconcileCases,\n officeParagraphEvidenceReconcileCases,\n officeListEvidenceReconcileCases,\n officeTableEvidenceReconcileCases,\n pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCases,\n vectorCases,\n };\n};\n\nconst evaluateRAGCollectionCases = async ({\n collection,\n input,\n defaultTopK = DEFAULT_TOP_K,\n rerank,\n includeTrace = false,\n onCaseSettled,\n}: {\n collection: RAGCollection;\n input: RAGEvaluationInput;\n defaultTopK?: number;\n rerank?: RAGRerankerProviderLike;\n includeTrace?: boolean;\n onCaseSettled?: (event: {\n caseIndex: number;\n total: number;\n caseResult: RAGEvaluationCaseResult;\n }) => void;\n}): Promise<\n Array<{\n caseResult: RAGEvaluationCaseResult;\n trace?: RAGRetrievalTrace;\n filter?: Record<string, unknown>;\n retrieval?: RAGCollectionSearchParams[\"retrieval\"];\n topResult?: RAGQueryResult;\n }>\n> => {\n if (input.dryRun) {\n return executeDryRunRAGEvaluation(input, defaultTopK).map(\n (caseResult, caseIndex) => ({\n caseResult,\n filter:\n typeof input.cases?.[caseIndex]?.filter === \"object\"\n ? input.cases[caseIndex]?.filter\n : input.filter,\n retrieval: input.cases?.[caseIndex]?.retrieval ?? input.retrieval,\n topResult: undefined,\n trace: undefined,\n }),\n );\n }\n\n return Promise.all(\n input.cases.map(async (caseInput, caseIndex) => {\n const startedAt = Date.now();\n const mode = resolveEvaluationMode(caseInput);\n const query = caseInput.query.trim();\n const expectedIds = normalizeExpectedIds(\n mode === \"chunkId\"\n ? (caseInput.expectedChunkIds ?? [])\n : mode === \"source\"\n ? (caseInput.expectedSources ?? [])\n : (caseInput.expectedDocumentIds ?? []),\n );\n const topK =\n typeof caseInput.topK === \"number\"\n ? caseInput.topK\n : typeof input.topK === \"number\"\n ? input.topK\n : defaultTopK;\n const searchInput = {\n filter: caseInput.corpusKey\n ? {\n ...((typeof caseInput.filter === \"object\"\n ? caseInput.filter\n : input.filter) ?? {}),\n corpusKey: caseInput.corpusKey,\n }\n : typeof caseInput.filter === \"object\"\n ? caseInput.filter\n : input.filter,\n model: caseInput.model ?? input.model,\n query,\n rerank,\n scoreThreshold:\n typeof caseInput.scoreThreshold === \"number\"\n ? caseInput.scoreThreshold\n : input.scoreThreshold,\n retrieval: caseInput.retrieval ?? input.retrieval,\n topK,\n };\n const searchOutcome = includeTrace\n ? await collection.searchWithTrace(searchInput)\n : {\n results: await collection.search(searchInput),\n trace: undefined,\n };\n const sources = buildSources(searchOutcome.results);\n const elapsedMs = Date.now() - startedAt;\n const retrievedIds = normalizeExpectedIds(\n sources.map((source) => extractExpectedId(source, mode)),\n );\n\n const caseResult = summarizeRAGEvaluationCase({\n caseIndex,\n caseInput: { ...caseInput, topK },\n elapsedMs,\n expectedIds,\n mode,\n query,\n retrievedIds,\n retrievedSources: sources,\n trace: searchOutcome.trace,\n });\n onCaseSettled?.({ caseIndex, caseResult, total: input.cases.length });\n\n return {\n caseResult,\n trace: searchOutcome.trace,\n filter: searchInput.filter,\n retrieval: searchInput.retrieval,\n topResult: searchOutcome.results[0],\n };\n }),\n );\n};\n\nexport const buildRAGAnswerGroundingCaseDifficultyLeaderboard = (\n entries: Array<{\n label: string;\n response: RAGAnswerGroundingEvaluationResponse;\n }>,\n) => {\n const grouped = new Map<\n string,\n {\n caseId: string;\n label?: string;\n query?: string;\n passCount: number;\n partialCount: number;\n failCount: number;\n groundedCount: number;\n totalEvaluations: number;\n totalCitationF1: number;\n totalResolvedCitationRate: number;\n }\n >();\n\n for (const entry of entries) {\n for (const result of entry.response.cases) {\n const current = grouped.get(result.caseId) ?? {\n caseId: result.caseId,\n failCount: 0,\n groundedCount: 0,\n label: result.label,\n passCount: 0,\n partialCount: 0,\n query: result.query,\n totalCitationF1: 0,\n totalEvaluations: 0,\n totalResolvedCitationRate: 0,\n };\n current.label ??= result.label;\n current.query ??= result.query;\n current.totalEvaluations += 1;\n current.totalCitationF1 += result.citationF1;\n current.totalResolvedCitationRate += result.resolvedCitationRate;\n if (result.status === \"pass\") {\n current.passCount += 1;\n } else if (result.status === \"partial\") {\n current.partialCount += 1;\n } else {\n current.failCount += 1;\n }\n if (result.coverage === \"grounded\") {\n current.groundedCount += 1;\n }\n grouped.set(result.caseId, current);\n }\n }\n\n const ranked = Array.from(grouped.values()).sort((left, right) => {\n const leftPassRate = left.passCount / left.totalEvaluations;\n const rightPassRate = right.passCount / right.totalEvaluations;\n if (leftPassRate !== rightPassRate) {\n return leftPassRate - rightPassRate;\n }\n const leftCitationF1 = left.totalCitationF1 / left.totalEvaluations;\n const rightCitationF1 = right.totalCitationF1 / right.totalEvaluations;\n if (leftCitationF1 !== rightCitationF1) {\n return leftCitationF1 - rightCitationF1;\n }\n const leftResolved = left.totalResolvedCitationRate / left.totalEvaluations;\n const rightResolved =\n right.totalResolvedCitationRate / right.totalEvaluations;\n if (leftResolved !== rightResolved) {\n return leftResolved - rightResolved;\n }\n\n return left.caseId.localeCompare(right.caseId);\n });\n\n return ranked.map<RAGAnswerGroundingEvaluationCaseDifficultyEntry>(\n (entry, index) => ({\n averageCitationF1: entry.totalCitationF1 / entry.totalEvaluations,\n averageResolvedCitationRate:\n entry.totalResolvedCitationRate / entry.totalEvaluations,\n caseId: entry.caseId,\n failRate: (entry.failCount / entry.totalEvaluations) * 100,\n groundedRate: (entry.groundedCount / entry.totalEvaluations) * 100,\n label: entry.label,\n passRate: (entry.passCount / entry.totalEvaluations) * 100,\n partialRate: (entry.partialCount / entry.totalEvaluations) * 100,\n query: entry.query,\n rank: index + 1,\n totalEvaluations: entry.totalEvaluations,\n }),\n );\n};\n\nconst buildGroundingDifficultyDiffEntry = (\n current: RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n previous?: RAGAnswerGroundingEvaluationCaseDifficultyEntry,\n): RAGAnswerGroundingCaseDifficultyDiffEntry => ({\n caseId: current.caseId,\n currentAverageCitationF1: current.averageCitationF1,\n currentFailRate: current.failRate,\n currentPassRate: current.passRate,\n currentRank: current.rank,\n label: current.label,\n previousAverageCitationF1: previous?.averageCitationF1,\n previousFailRate: previous?.failRate,\n previousPassRate: previous?.passRate,\n previousRank: previous?.rank,\n query: current.query,\n});\n\nconst buildRAGAnswerGroundingCaseDifficultyTrends = ({\n runs,\n}: {\n runs: RAGAnswerGroundingCaseDifficultyRun[];\n}) => {\n const movementCounts = new Map<\n string,\n {\n label?: string;\n harder: number;\n easier: number;\n unchanged: number;\n }\n >();\n\n for (let index = 0; index < runs.length - 1; index += 1) {\n const current = runs[index];\n const previous = runs[index + 1];\n if (!current || !previous) {\n continue;\n }\n const diff = buildRAGAnswerGroundingCaseDifficultyRunDiff({\n current,\n previous,\n });\n\n for (const entry of diff.harderCases) {\n const currentCounts = movementCounts.get(entry.caseId) ?? {\n easier: 0,\n harder: 0,\n label: entry.label,\n unchanged: 0,\n };\n currentCounts.harder += 1;\n currentCounts.label ??= entry.label;\n movementCounts.set(entry.caseId, currentCounts);\n }\n\n for (const entry of diff.easierCases) {\n const currentCounts = movementCounts.get(entry.caseId) ?? {\n easier: 0,\n harder: 0,\n label: entry.label,\n unchanged: 0,\n };\n currentCounts.easier += 1;\n currentCounts.label ??= entry.label;\n movementCounts.set(entry.caseId, currentCounts);\n }\n\n for (const entry of diff.unchangedCases) {\n const currentCounts = movementCounts.get(entry.caseId) ?? {\n easier: 0,\n harder: 0,\n label: entry.label,\n unchanged: 0,\n };\n currentCounts.unchanged += 1;\n currentCounts.label ??= entry.label;\n movementCounts.set(entry.caseId, currentCounts);\n }\n }\n\n const movementEntries = [...movementCounts.entries()];\n const mostOftenHarderCaseIds = movementEntries\n .filter(([, counts]) => counts.harder > 0)\n .sort((left, right) => {\n if (right[1].harder !== left[1].harder) {\n return right[1].harder - left[1].harder;\n }\n return left[0].localeCompare(right[0]);\n })\n .map(([caseId]) => caseId);\n const mostOftenEasierCaseIds = movementEntries\n .filter(([, counts]) => counts.easier > 0)\n .sort((left, right) => {\n if (right[1].easier !== left[1].easier) {\n return right[1].easier - left[1].easier;\n }\n return left[0].localeCompare(right[0]);\n })\n .map(([caseId]) => caseId);\n\n return {\n easiestCaseIds:\n runs[runs.length - 1]?.entries.map((entry) => entry.caseId).reverse() ??\n [],\n hardestCaseIds: runs[0]?.entries.map((entry) => entry.caseId) ?? [],\n mostOftenEasierCaseIds,\n mostOftenHarderCaseIds,\n movementCounts: Object.fromEntries(\n movementEntries.map(([caseId, counts]) => [\n caseId,\n {\n easier: counts.easier,\n harder: counts.harder,\n unchanged: counts.unchanged,\n },\n ]),\n ),\n };\n};\n\nexport const buildRAGAnswerGroundingCaseDifficultyRunDiff = ({\n current,\n previous,\n}: {\n current: RAGAnswerGroundingCaseDifficultyRun;\n previous?: RAGAnswerGroundingCaseDifficultyRun;\n}): RAGAnswerGroundingCaseDifficultyRunDiff => {\n const previousEntries = new Map(\n (previous?.entries ?? []).map((entry) => [entry.caseId, entry]),\n );\n const diffs = current.entries.map((entry) =>\n buildGroundingDifficultyDiffEntry(entry, previousEntries.get(entry.caseId)),\n );\n\n return {\n currentRunId: current.id,\n easierCases: diffs.filter((entry) => {\n const previousRank = entry.previousRank ?? entry.currentRank;\n return entry.currentRank > previousRank;\n }),\n harderCases: diffs.filter((entry) => {\n const previousRank = entry.previousRank ?? Number.MAX_SAFE_INTEGER;\n return entry.currentRank < previousRank;\n }),\n previousRunId: previous?.id,\n suiteId: current.suiteId,\n unchangedCases: diffs.filter((entry) => {\n const previousRank = entry.previousRank ?? entry.currentRank;\n return entry.currentRank === previousRank;\n }),\n };\n};\n\nconst toHistorySortOrder = (\n left: RAGEvaluationSuiteRun,\n right: RAGEvaluationSuiteRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeHistoryRuns = (runs: RAGEvaluationSuiteRun[]) =>\n [...runs].sort(toHistorySortOrder);\n\nconst normalizeRetrievalComparisonRuns = (runs: RAGRetrievalComparisonRun[]) =>\n [...runs].sort((left, right) => right.finishedAt - left.finishedAt);\n\nconst toTraceSummaryRunSortOrder = (\n left: RAGRetrievalTraceSummaryRun,\n right: RAGRetrievalTraceSummaryRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeTraceSummaryRuns = <TRun extends RAGRetrievalTraceSummaryRun>(\n runs: TRun[],\n) => [...runs].sort(toTraceSummaryRunSortOrder);\n\nconst applyRAGEvaluationHistoryPrunePolicy = <\n TRun extends {\n id: string;\n suiteId: string;\n finishedAt?: number;\n createdAt?: number;\n },\n>({\n input,\n runs,\n sort,\n}: {\n input?: RAGEvaluationHistoryPruneInput;\n runs: TRun[];\n sort: (runs: TRun[]) => TRun[];\n}): {\n next: TRun[];\n removed: TRun[];\n keptCount: number;\n removedCount: number;\n} => {\n const sorted = sort(runs);\n const targeted = sorted.filter(\n (run) => !input?.suiteId || run.suiteId === input.suiteId,\n );\n const untouched = sorted.filter(\n (run) => input?.suiteId && run.suiteId !== input.suiteId,\n );\n const now = input?.now ?? Date.now();\n let kept = [...targeted];\n\n if (typeof input?.maxAgeMs === \"number\" && Number.isFinite(input.maxAgeMs)) {\n const cutoff = now - input.maxAgeMs;\n kept = kept.filter((run) => {\n const timestamp = run.finishedAt ?? run.createdAt ?? 0;\n return timestamp >= cutoff;\n });\n }\n\n if (\n typeof input?.maxRunsPerSuite === \"number\" &&\n Number.isFinite(input.maxRunsPerSuite) &&\n input.maxRunsPerSuite >= 0\n ) {\n const remainingBySuite = new Map<string, number>();\n kept = kept.filter((run) => {\n const current = remainingBySuite.get(run.suiteId) ?? 0;\n if (current >= input.maxRunsPerSuite!) {\n return false;\n }\n remainingBySuite.set(run.suiteId, current + 1);\n return true;\n });\n }\n\n const keptIds = new Set(kept.map((run) => run.id));\n const removed = targeted.filter((run) => !keptIds.has(run.id));\n const next = sort([...untouched, ...kept]);\n\n return {\n keptCount: next.length,\n next,\n removed,\n removedCount: removed.length,\n };\n};\n\nconst applyRAGSearchTracePrunePolicy = ({\n input,\n traces,\n}: {\n input?: RAGSearchTracePruneInput;\n traces: RAGSearchTraceRecord[];\n}) => {\n const sorted = normalizeTraceSummaryRuns(traces);\n const matchesTag = (trace: RAGSearchTraceRecord) =>\n !input?.tag || (trace.tags ?? []).includes(input.tag);\n const targeted = sorted.filter(matchesTag);\n const untouched = sorted.filter((trace) => !matchesTag(trace));\n const now = input?.now ?? Date.now();\n let kept = [...targeted];\n\n if (typeof input?.maxAgeMs === \"number\" && Number.isFinite(input.maxAgeMs)) {\n const cutoff = now - input.maxAgeMs;\n kept = kept.filter((trace) => trace.finishedAt >= cutoff);\n }\n\n if (\n typeof input?.maxRecordsPerQuery === \"number\" &&\n Number.isFinite(input.maxRecordsPerQuery) &&\n input.maxRecordsPerQuery >= 0\n ) {\n const remainingByQuery = new Map<string, number>();\n kept = kept.filter((trace) => {\n const current = remainingByQuery.get(trace.query) ?? 0;\n if (current >= input.maxRecordsPerQuery!) {\n return false;\n }\n remainingByQuery.set(trace.query, current + 1);\n return true;\n });\n }\n\n if (\n typeof input?.maxRecordsPerGroup === \"number\" &&\n Number.isFinite(input.maxRecordsPerGroup) &&\n input.maxRecordsPerGroup >= 0\n ) {\n const remainingByGroup = new Map<string, number>();\n kept = kept.filter((trace) => {\n if (!trace.groupKey) {\n return true;\n }\n\n const current = remainingByGroup.get(trace.groupKey) ?? 0;\n if (current >= input.maxRecordsPerGroup!) {\n return false;\n }\n remainingByGroup.set(trace.groupKey, current + 1);\n return true;\n });\n }\n\n const keptIds = new Set(kept.map((trace) => trace.id));\n const removed = targeted.filter((trace) => !keptIds.has(trace.id));\n const next = normalizeTraceSummaryRuns([...untouched, ...kept]);\n\n return {\n keptCount: next.length,\n next,\n removed,\n removedCount: removed.length,\n };\n};\n\nconst buildRAGSearchTraceStatsFromTraces = (\n traces: RAGSearchTraceRecord[],\n): RAGSearchTraceStats => {\n const queryKeys = new Set<string>();\n const groupKeys = new Set<string>();\n const tagCounts = new Map<string, number>();\n let oldestFinishedAt: number | undefined;\n let newestFinishedAt: number | undefined;\n\n for (const trace of traces) {\n queryKeys.add(trace.query);\n if (trace.groupKey) {\n groupKeys.add(trace.groupKey);\n }\n for (const tag of trace.tags ?? []) {\n tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);\n }\n oldestFinishedAt =\n typeof oldestFinishedAt === \"number\"\n ? Math.min(oldestFinishedAt, trace.finishedAt)\n : trace.finishedAt;\n newestFinishedAt =\n typeof newestFinishedAt === \"number\"\n ? Math.max(newestFinishedAt, trace.finishedAt)\n : trace.finishedAt;\n }\n\n return {\n groupCount: groupKeys.size,\n newestFinishedAt,\n oldestFinishedAt,\n queryCount: queryKeys.size,\n tagCounts: Object.fromEntries(tagCounts.entries()),\n totalTraces: traces.length,\n };\n};\n\nconst normalizeTraceTags = (tags?: string[]) =>\n Array.from(\n new Set((tags ?? []).map((tag) => tag.trim()).filter(Boolean)),\n ).sort((left, right) => left.localeCompare(right));\n\nconst toGroundingHistorySortOrder = (\n left: RAGAnswerGroundingEvaluationRun,\n right: RAGAnswerGroundingEvaluationRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeGroundingHistoryRuns = (\n runs: RAGAnswerGroundingEvaluationRun[],\n) => [...runs].sort(toGroundingHistorySortOrder);\n\nconst toSearchTracePruneRunSortOrder = (\n left: RAGSearchTracePruneRun,\n right: RAGSearchTracePruneRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeSearchTracePruneRuns = (runs: RAGSearchTracePruneRun[]) =>\n [...runs].sort(toSearchTracePruneRunSortOrder);\n\nconst toGroundingDifficultyHistorySortOrder = (\n left: RAGAnswerGroundingCaseDifficultyRun,\n right: RAGAnswerGroundingCaseDifficultyRun,\n) => right.finishedAt - left.finishedAt;\n\nconst normalizeGroundingDifficultyHistoryRuns = (\n runs: RAGAnswerGroundingCaseDifficultyRun[],\n) => [...runs].sort(toGroundingDifficultyHistorySortOrder);\n\nconst buildCaseDiff = (\n currentCase: RAGEvaluationCaseResult,\n previousCase?: RAGEvaluationCaseResult,\n): RAGEvaluationCaseDiff => ({\n caseId: currentCase.caseId,\n currentF1: currentCase.f1,\n currentMatchedIds: currentCase.matchedIds,\n currentMissingIds: currentCase.missingIds,\n currentStatus: currentCase.status,\n label: currentCase.label,\n previousF1: previousCase?.f1,\n previousMatchedIds: previousCase?.matchedIds ?? [],\n previousMissingIds: previousCase?.missingIds ?? [],\n previousStatus: previousCase?.status,\n previousFailureClasses: previousCase?.failureClasses ?? [],\n query: currentCase.query,\n currentFailureClasses: currentCase.failureClasses ?? [],\n});\n\nconst buildGroundingCaseDiff = (\n currentCase: RAGAnswerGroundingEvaluationCaseResult,\n previousCase?: RAGAnswerGroundingEvaluationCaseResult,\n): RAGAnswerGroundingEvaluationCaseDiff => ({\n answerChanged:\n typeof previousCase?.answer === \"string\"\n ? previousCase.answer !== currentCase.answer\n : true,\n caseId: currentCase.caseId,\n currentCitationF1: currentCase.citationF1,\n currentCitedIds: currentCase.citedIds,\n currentCoverage: currentCase.coverage,\n currentExtraIds: currentCase.extraIds,\n currentMatchedIds: currentCase.matchedIds,\n currentMissingIds: currentCase.missingIds,\n currentReferenceCount: currentCase.referenceCount,\n currentResolvedCitationCount: currentCase.resolvedCitationCount,\n currentAnswer: currentCase.answer,\n currentStatus: currentCase.status,\n currentUngroundedReferenceNumbers:\n currentCase.groundedAnswer.ungroundedReferenceNumbers,\n currentUnresolvedCitationCount: currentCase.unresolvedCitationCount,\n label: currentCase.label,\n previousAnswer: previousCase?.answer,\n previousCitationF1: previousCase?.citationF1,\n previousCitedIds: previousCase?.citedIds ?? [],\n previousCoverage: previousCase?.coverage,\n previousExtraIds: previousCase?.extraIds ?? [],\n previousFailureClasses: previousCase?.failureClasses ?? [],\n previousMatchedIds: previousCase?.matchedIds ?? [],\n previousMissingIds: previousCase?.missingIds ?? [],\n previousReferenceCount: previousCase?.referenceCount,\n previousResolvedCitationCount: previousCase?.resolvedCitationCount,\n previousStatus: previousCase?.status,\n previousUngroundedReferenceNumbers:\n previousCase?.groundedAnswer.ungroundedReferenceNumbers ?? [],\n previousUnresolvedCitationCount: previousCase?.unresolvedCitationCount,\n query: currentCase.query,\n currentFailureClasses: currentCase.failureClasses ?? [],\n});\n\nconst buildGroundingCaseSnapshots = ({\n current,\n previous,\n}: {\n current?: RAGAnswerGroundingEvaluationRun;\n previous?: RAGAnswerGroundingEvaluationRun;\n}): RAGAnswerGroundingEvaluationCaseSnapshot[] => {\n if (!current) {\n return [];\n }\n\n const previousCases = new Map(\n (previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]),\n );\n\n return current.response.cases.map((entry) => {\n const previousCase = previousCases.get(entry.caseId);\n return {\n answer: entry.answer,\n answerChange:\n typeof previousCase?.answer === \"string\"\n ? previousCase.answer === entry.answer\n ? \"unchanged\"\n : \"changed\"\n : \"new\",\n caseId: entry.caseId,\n citationCount: entry.citationCount,\n citationF1: entry.citationF1,\n citedIds: entry.citedIds,\n coverage: entry.coverage,\n extraIds: entry.extraIds,\n failureClasses: entry.failureClasses,\n label: entry.label,\n matchedIds: entry.matchedIds,\n missingIds: entry.missingIds,\n previousAnswer: previousCase?.answer,\n query: entry.query,\n referenceCount: entry.referenceCount,\n resolvedCitationCount: entry.resolvedCitationCount,\n resolvedCitationRate: entry.resolvedCitationRate,\n status: entry.status,\n ungroundedReferenceNumbers:\n entry.groundedAnswer.ungroundedReferenceNumbers,\n unresolvedCitationCount: entry.unresolvedCitationCount,\n };\n });\n};\n\nconst areStageCountsEqual = (\n left: Partial<Record<RAGRetrievalTraceStage, number>>,\n right: Partial<Record<RAGRetrievalTraceStage, number>>,\n) => {\n const keys = new Set([\n ...Object.keys(left),\n ...Object.keys(right),\n ]) as Set<RAGRetrievalTraceStage>;\n\n for (const key of keys) {\n if ((left[key] ?? 0) !== (right[key] ?? 0)) {\n return false;\n }\n }\n\n return true;\n};\n\nconst buildEvaluationCaseTraceSnapshot = ({\n caseResult,\n filter,\n retrieval,\n currentTrace,\n previousTrace,\n currentSnapshot,\n topResult,\n}: {\n caseResult: RAGEvaluationCaseResult;\n filter?: Record<string, unknown>;\n retrieval?: RAGCollectionSearchParams[\"retrieval\"];\n currentTrace?: RAGRetrievalTrace;\n previousTrace?: RAGEvaluationCaseTraceSnapshot;\n currentSnapshot?: RAGEvaluationCaseTraceSnapshot;\n topResult?: RAGQueryResult;\n}): RAGEvaluationCaseTraceSnapshot => {\n const stageCounts = currentTrace ? buildTraceStageCounts([currentTrace]) : {};\n const previousStageCounts = previousTrace?.stageCounts ?? {};\n const currentLeadSnapshot =\n topResult || currentSnapshot\n ? buildEvaluationLeadSnapshot({\n metadata: topResult?.metadata,\n source: topResult?.source,\n title: topResult?.title,\n })\n : {};\n const topContextLabel =\n currentLeadSnapshot.topContextLabel ?? currentSnapshot?.topContextLabel;\n const topLocatorLabel =\n currentLeadSnapshot.topLocatorLabel ?? currentSnapshot?.topLocatorLabel;\n const sourceAwareChunkReasonLabel =\n currentLeadSnapshot.sourceAwareChunkReasonLabel ??\n currentSnapshot?.sourceAwareChunkReasonLabel;\n const sourceAwareUnitScopeLabel =\n currentLeadSnapshot.sourceAwareUnitScopeLabel ??\n currentSnapshot?.sourceAwareUnitScopeLabel;\n const currentLeadMediaCueSnapshot = currentTrace\n ? buildEvaluationLeadMediaCueSnapshot(currentTrace)\n : {};\n const currentLeadPresentationCueSnapshot = currentTrace\n ? buildEvaluationLeadPresentationCueSnapshot(currentTrace)\n : {};\n const currentLeadSpreadsheetCueSnapshot = currentTrace\n ? buildEvaluationLeadSpreadsheetCueSnapshot(currentTrace)\n : {};\n const currentSQLiteQueryPlanSnapshot = currentTrace\n ? buildEvaluationSQLiteQueryPlanSnapshot(currentTrace)\n : {};\n const currentPostgresQueryPlanSnapshot = currentTrace\n ? buildEvaluationPostgresQueryPlanSnapshot(currentTrace)\n : {};\n const leadSpeakerCue =\n currentLeadMediaCueSnapshot.leadSpeakerCue ??\n currentSnapshot?.leadSpeakerCue;\n const leadPresentationCue =\n currentLeadPresentationCueSnapshot.leadPresentationCue ??\n currentSnapshot?.leadPresentationCue;\n const leadSpreadsheetCue =\n currentLeadSpreadsheetCueSnapshot.leadSpreadsheetCue ??\n currentSnapshot?.leadSpreadsheetCue;\n const leadSpeakerAttributionCue =\n currentLeadMediaCueSnapshot.leadSpeakerAttributionCue ??\n currentSnapshot?.leadSpeakerAttributionCue;\n const leadChannelCue =\n currentLeadMediaCueSnapshot.leadChannelCue ??\n currentSnapshot?.leadChannelCue;\n const leadChannelAttributionCue =\n currentLeadMediaCueSnapshot.leadChannelAttributionCue ??\n currentSnapshot?.leadChannelAttributionCue;\n const leadContinuityCue =\n currentLeadMediaCueSnapshot.leadContinuityCue ??\n currentSnapshot?.leadContinuityCue;\n const sqliteQueryMode =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMode ??\n currentSnapshot?.sqliteQueryMode;\n const sqliteQueryPushdownMode =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownMode ??\n currentSnapshot?.sqliteQueryPushdownMode;\n const sqliteQueryPushdownApplied =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownApplied ??\n currentSnapshot?.sqliteQueryPushdownApplied;\n const sqliteQueryPushdownClauseCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownClauseCount ??\n currentSnapshot?.sqliteQueryPushdownClauseCount;\n const sqliteQueryTotalFilterClauseCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryTotalFilterClauseCount ??\n currentSnapshot?.sqliteQueryTotalFilterClauseCount;\n const sqliteQueryJsRemainderClauseCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryJsRemainderClauseCount ??\n currentSnapshot?.sqliteQueryJsRemainderClauseCount;\n const sqliteQueryMultiplierUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMultiplierUsed ??\n currentSnapshot?.sqliteQueryMultiplierUsed;\n const sqliteQueryCandidateLimitUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateLimitUsed ??\n currentSnapshot?.sqliteQueryCandidateLimitUsed;\n const sqliteQueryMaxBackfillsUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMaxBackfillsUsed ??\n currentSnapshot?.sqliteQueryMaxBackfillsUsed;\n const sqliteQueryMinResultsUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMinResultsUsed ??\n currentSnapshot?.sqliteQueryMinResultsUsed;\n const sqliteQueryFillPolicyUsed =\n currentSQLiteQueryPlanSnapshot.sqliteQueryFillPolicyUsed ??\n currentSnapshot?.sqliteQueryFillPolicyUsed;\n const sqliteQueryPushdownCoverageRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryPushdownCoverageRatio ??\n currentSnapshot?.sqliteQueryPushdownCoverageRatio;\n const sqliteQueryJsRemainderRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryJsRemainderRatio ??\n currentSnapshot?.sqliteQueryJsRemainderRatio;\n const sqliteQueryFilteredCandidates =\n currentSQLiteQueryPlanSnapshot.sqliteQueryFilteredCandidates ??\n currentSnapshot?.sqliteQueryFilteredCandidates;\n const sqliteQueryInitialSearchK =\n currentSQLiteQueryPlanSnapshot.sqliteQueryInitialSearchK ??\n currentSnapshot?.sqliteQueryInitialSearchK;\n const sqliteQueryFinalSearchK =\n currentSQLiteQueryPlanSnapshot.sqliteQueryFinalSearchK ??\n currentSnapshot?.sqliteQueryFinalSearchK;\n const sqliteQuerySearchExpansionRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQuerySearchExpansionRatio ??\n currentSnapshot?.sqliteQuerySearchExpansionRatio;\n const sqliteQueryBackfillCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryBackfillCount ??\n currentSnapshot?.sqliteQueryBackfillCount;\n const sqliteQueryBackfillLimitReached =\n currentSQLiteQueryPlanSnapshot.sqliteQueryBackfillLimitReached ??\n currentSnapshot?.sqliteQueryBackfillLimitReached;\n const sqliteQueryMinResultsSatisfied =\n currentSQLiteQueryPlanSnapshot.sqliteQueryMinResultsSatisfied ??\n currentSnapshot?.sqliteQueryMinResultsSatisfied;\n const sqliteQueryReturnedCount =\n currentSQLiteQueryPlanSnapshot.sqliteQueryReturnedCount ??\n currentSnapshot?.sqliteQueryReturnedCount;\n const sqliteQueryCandidateYieldRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateYieldRatio ??\n currentSnapshot?.sqliteQueryCandidateYieldRatio;\n const sqliteQueryTopKFillRatio =\n currentSQLiteQueryPlanSnapshot.sqliteQueryTopKFillRatio ??\n currentSnapshot?.sqliteQueryTopKFillRatio;\n const sqliteQueryUnderfilledTopK =\n currentSQLiteQueryPlanSnapshot.sqliteQueryUnderfilledTopK ??\n currentSnapshot?.sqliteQueryUnderfilledTopK;\n const sqliteQueryCandidateBudgetExhausted =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateBudgetExhausted ??\n currentSnapshot?.sqliteQueryCandidateBudgetExhausted;\n const sqliteQueryCandidateCoverage =\n currentSQLiteQueryPlanSnapshot.sqliteQueryCandidateCoverage ??\n currentSnapshot?.sqliteQueryCandidateCoverage;\n const postgresQueryMode =\n currentPostgresQueryPlanSnapshot.postgresQueryMode ??\n currentSnapshot?.postgresQueryMode;\n const postgresQueryPushdownMode =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownMode ??\n currentSnapshot?.postgresQueryPushdownMode;\n const postgresQueryPushdownApplied =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownApplied ??\n currentSnapshot?.postgresQueryPushdownApplied;\n const postgresQueryPushdownClauseCount =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownClauseCount ??\n currentSnapshot?.postgresQueryPushdownClauseCount;\n const postgresQueryTotalFilterClauseCount =\n currentPostgresQueryPlanSnapshot.postgresQueryTotalFilterClauseCount ??\n currentSnapshot?.postgresQueryTotalFilterClauseCount;\n const postgresQueryJsRemainderClauseCount =\n currentPostgresQueryPlanSnapshot.postgresQueryJsRemainderClauseCount ??\n currentSnapshot?.postgresQueryJsRemainderClauseCount;\n const postgresQueryMultiplierUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryMultiplierUsed ??\n currentSnapshot?.postgresQueryMultiplierUsed;\n const postgresQueryCandidateLimitUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateLimitUsed ??\n currentSnapshot?.postgresQueryCandidateLimitUsed;\n const postgresQueryMaxBackfillsUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryMaxBackfillsUsed ??\n currentSnapshot?.postgresQueryMaxBackfillsUsed;\n const postgresQueryMinResultsUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryMinResultsUsed ??\n currentSnapshot?.postgresQueryMinResultsUsed;\n const postgresQueryFillPolicyUsed =\n currentPostgresQueryPlanSnapshot.postgresQueryFillPolicyUsed ??\n currentSnapshot?.postgresQueryFillPolicyUsed;\n const postgresQueryPushdownCoverageRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryPushdownCoverageRatio ??\n currentSnapshot?.postgresQueryPushdownCoverageRatio;\n const postgresQueryJsRemainderRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryJsRemainderRatio ??\n currentSnapshot?.postgresQueryJsRemainderRatio;\n const postgresQueryFilteredCandidates =\n currentPostgresQueryPlanSnapshot.postgresQueryFilteredCandidates ??\n currentSnapshot?.postgresQueryFilteredCandidates;\n const postgresQueryInitialSearchK =\n currentPostgresQueryPlanSnapshot.postgresQueryInitialSearchK ??\n currentSnapshot?.postgresQueryInitialSearchK;\n const postgresQueryFinalSearchK =\n currentPostgresQueryPlanSnapshot.postgresQueryFinalSearchK ??\n currentSnapshot?.postgresQueryFinalSearchK;\n const postgresQuerySearchExpansionRatio =\n currentPostgresQueryPlanSnapshot.postgresQuerySearchExpansionRatio ??\n currentSnapshot?.postgresQuerySearchExpansionRatio;\n const postgresQueryBackfillCount =\n currentPostgresQueryPlanSnapshot.postgresQueryBackfillCount ??\n currentSnapshot?.postgresQueryBackfillCount;\n const postgresQueryBackfillLimitReached =\n currentPostgresQueryPlanSnapshot.postgresQueryBackfillLimitReached ??\n currentSnapshot?.postgresQueryBackfillLimitReached;\n const postgresQueryMinResultsSatisfied =\n currentPostgresQueryPlanSnapshot.postgresQueryMinResultsSatisfied ??\n currentSnapshot?.postgresQueryMinResultsSatisfied;\n const postgresQueryReturnedCount =\n currentPostgresQueryPlanSnapshot.postgresQueryReturnedCount ??\n currentSnapshot?.postgresQueryReturnedCount;\n const postgresQueryCandidateYieldRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateYieldRatio ??\n currentSnapshot?.postgresQueryCandidateYieldRatio;\n const postgresQueryTopKFillRatio =\n currentPostgresQueryPlanSnapshot.postgresQueryTopKFillRatio ??\n currentSnapshot?.postgresQueryTopKFillRatio;\n const postgresQueryUnderfilledTopK =\n currentPostgresQueryPlanSnapshot.postgresQueryUnderfilledTopK ??\n currentSnapshot?.postgresQueryUnderfilledTopK;\n const postgresQueryCandidateBudgetExhausted =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateBudgetExhausted ??\n currentSnapshot?.postgresQueryCandidateBudgetExhausted;\n const postgresQueryCandidateCoverage =\n currentPostgresQueryPlanSnapshot.postgresQueryCandidateCoverage ??\n currentSnapshot?.postgresQueryCandidateCoverage;\n const currentFilterSignature = JSON.stringify(filter ?? undefined);\n const previousFilterSignature = JSON.stringify(\n previousTrace?.inputFilter ?? undefined,\n );\n const currentRetrievalSignature = JSON.stringify(retrieval ?? undefined);\n const previousRetrievalSignature = JSON.stringify(\n previousTrace?.inputRetrieval ?? undefined,\n );\n const traceChange = !previousTrace\n ? currentTrace\n ? \"new\"\n : \"unchanged\"\n : previousTrace.traceMode !== currentTrace?.mode ||\n previousFilterSignature !== currentFilterSignature ||\n previousRetrievalSignature !== currentRetrievalSignature ||\n previousTrace.sourceBalanceStrategy !==\n currentTrace?.sourceBalanceStrategy ||\n previousTrace.transformedQuery !==\n (currentTrace?.transformedQuery || undefined) ||\n previousTrace.variantQueries.join(\"|\") !==\n (currentTrace?.variantQueries ?? []).join(\"|\") ||\n previousTrace.finalCount !== (currentTrace?.resultCounts.final ?? 0) ||\n previousTrace.vectorCount !==\n (currentTrace?.resultCounts.vector ?? 0) ||\n previousTrace.lexicalCount !==\n (currentTrace?.resultCounts.lexical ?? 0) ||\n previousTrace.candidateTopK !== (currentTrace?.candidateTopK ?? 0) ||\n previousTrace.lexicalTopK !== (currentTrace?.lexicalTopK ?? 0) ||\n previousTrace.topContextLabel !== topContextLabel ||\n previousTrace.topLocatorLabel !== topLocatorLabel ||\n previousTrace.sourceAwareChunkReasonLabel !==\n sourceAwareChunkReasonLabel ||\n previousTrace.sourceAwareUnitScopeLabel !== sourceAwareUnitScopeLabel ||\n previousTrace.leadSpeakerCue !== leadSpeakerCue ||\n previousTrace.leadPresentationCue !== leadPresentationCue ||\n previousTrace.leadSpreadsheetCue !== leadSpreadsheetCue ||\n previousTrace.leadSpeakerAttributionCue !== leadSpeakerAttributionCue ||\n previousTrace.leadChannelCue !== leadChannelCue ||\n previousTrace.leadChannelAttributionCue !== leadChannelAttributionCue ||\n previousTrace.leadContinuityCue !== leadContinuityCue ||\n previousTrace.sqliteQueryMode !== sqliteQueryMode ||\n previousTrace.sqliteQueryPushdownMode !== sqliteQueryPushdownMode ||\n previousTrace.sqliteQueryPushdownApplied !==\n sqliteQueryPushdownApplied ||\n previousTrace.sqliteQueryPushdownClauseCount !==\n sqliteQueryPushdownClauseCount ||\n previousTrace.sqliteQueryTotalFilterClauseCount !==\n sqliteQueryTotalFilterClauseCount ||\n previousTrace.sqliteQueryJsRemainderClauseCount !==\n sqliteQueryJsRemainderClauseCount ||\n previousTrace.sqliteQueryMultiplierUsed !== sqliteQueryMultiplierUsed ||\n previousTrace.sqliteQueryCandidateLimitUsed !==\n sqliteQueryCandidateLimitUsed ||\n previousTrace.sqliteQueryMaxBackfillsUsed !==\n sqliteQueryMaxBackfillsUsed ||\n previousTrace.sqliteQueryMinResultsUsed !== sqliteQueryMinResultsUsed ||\n previousTrace.sqliteQueryFillPolicyUsed !== sqliteQueryFillPolicyUsed ||\n previousTrace.sqliteQueryPushdownCoverageRatio !==\n sqliteQueryPushdownCoverageRatio ||\n previousTrace.sqliteQueryJsRemainderRatio !==\n sqliteQueryJsRemainderRatio ||\n previousTrace.sqliteQueryFilteredCandidates !==\n sqliteQueryFilteredCandidates ||\n previousTrace.sqliteQueryInitialSearchK !== sqliteQueryInitialSearchK ||\n previousTrace.sqliteQueryFinalSearchK !== sqliteQueryFinalSearchK ||\n previousTrace.sqliteQuerySearchExpansionRatio !==\n sqliteQuerySearchExpansionRatio ||\n previousTrace.sqliteQueryBackfillCount !== sqliteQueryBackfillCount ||\n previousTrace.sqliteQueryBackfillLimitReached !==\n sqliteQueryBackfillLimitReached ||\n previousTrace.sqliteQueryMinResultsSatisfied !==\n sqliteQueryMinResultsSatisfied ||\n previousTrace.sqliteQueryReturnedCount !== sqliteQueryReturnedCount ||\n previousTrace.sqliteQueryCandidateYieldRatio !==\n sqliteQueryCandidateYieldRatio ||\n previousTrace.sqliteQueryTopKFillRatio !== sqliteQueryTopKFillRatio ||\n previousTrace.sqliteQueryUnderfilledTopK !==\n sqliteQueryUnderfilledTopK ||\n previousTrace.sqliteQueryCandidateBudgetExhausted !==\n sqliteQueryCandidateBudgetExhausted ||\n previousTrace.sqliteQueryCandidateCoverage !==\n sqliteQueryCandidateCoverage ||\n previousTrace.postgresQueryMode !== postgresQueryMode ||\n previousTrace.postgresQueryPushdownMode !== postgresQueryPushdownMode ||\n previousTrace.postgresQueryPushdownApplied !==\n postgresQueryPushdownApplied ||\n previousTrace.postgresQueryPushdownClauseCount !==\n postgresQueryPushdownClauseCount ||\n previousTrace.postgresQueryTotalFilterClauseCount !==\n postgresQueryTotalFilterClauseCount ||\n previousTrace.postgresQueryJsRemainderClauseCount !==\n postgresQueryJsRemainderClauseCount ||\n previousTrace.postgresQueryMultiplierUsed !==\n postgresQueryMultiplierUsed ||\n previousTrace.postgresQueryCandidateLimitUsed !==\n postgresQueryCandidateLimitUsed ||\n previousTrace.postgresQueryMaxBackfillsUsed !==\n postgresQueryMaxBackfillsUsed ||\n previousTrace.postgresQueryMinResultsUsed !==\n postgresQueryMinResultsUsed ||\n previousTrace.postgresQueryFillPolicyUsed !==\n postgresQueryFillPolicyUsed ||\n previousTrace.postgresQueryPushdownCoverageRatio !==\n postgresQueryPushdownCoverageRatio ||\n previousTrace.postgresQueryJsRemainderRatio !==\n postgresQueryJsRemainderRatio ||\n previousTrace.postgresQueryFilteredCandidates !==\n postgresQueryFilteredCandidates ||\n previousTrace.postgresQueryInitialSearchK !==\n postgresQueryInitialSearchK ||\n previousTrace.postgresQueryFinalSearchK !== postgresQueryFinalSearchK ||\n previousTrace.postgresQuerySearchExpansionRatio !==\n postgresQuerySearchExpansionRatio ||\n previousTrace.postgresQueryBackfillCount !==\n postgresQueryBackfillCount ||\n previousTrace.postgresQueryBackfillLimitReached !==\n postgresQueryBackfillLimitReached ||\n previousTrace.postgresQueryMinResultsSatisfied !==\n postgresQueryMinResultsSatisfied ||\n previousTrace.postgresQueryReturnedCount !==\n postgresQueryReturnedCount ||\n previousTrace.postgresQueryCandidateYieldRatio !==\n postgresQueryCandidateYieldRatio ||\n previousTrace.postgresQueryTopKFillRatio !==\n postgresQueryTopKFillRatio ||\n previousTrace.postgresQueryUnderfilledTopK !==\n postgresQueryUnderfilledTopK ||\n previousTrace.postgresQueryCandidateBudgetExhausted !==\n postgresQueryCandidateBudgetExhausted ||\n previousTrace.postgresQueryCandidateCoverage !==\n postgresQueryCandidateCoverage ||\n !areStageCountsEqual(previousStageCounts, stageCounts)\n ? \"changed\"\n : \"unchanged\";\n\n return {\n candidateTopK: currentTrace?.candidateTopK ?? 0,\n caseId: caseResult.caseId,\n corpusKey: caseResult.corpusKey,\n inputFilter: filter,\n finalCount: currentTrace?.resultCounts.final ?? 0,\n label: caseResult.label,\n lexicalCount: currentTrace?.resultCounts.lexical ?? 0,\n lexicalTopK: currentTrace?.lexicalTopK ?? 0,\n inputRetrieval: retrieval,\n previousCandidateTopK: previousTrace?.candidateTopK,\n previousFinalCount: previousTrace?.finalCount,\n previousLexicalCount: previousTrace?.lexicalCount,\n previousLexicalTopK: previousTrace?.lexicalTopK,\n previousInputFilter: previousTrace?.inputFilter,\n previousInputRetrieval: previousTrace?.inputRetrieval,\n previousLeadChannelAttributionCue: previousTrace?.leadChannelAttributionCue,\n previousLeadChannelCue: previousTrace?.leadChannelCue,\n previousLeadContinuityCue: previousTrace?.leadContinuityCue,\n previousLeadPresentationCue: previousTrace?.leadPresentationCue,\n previousLeadSpreadsheetCue: previousTrace?.leadSpreadsheetCue,\n previousLeadSpeakerAttributionCue: previousTrace?.leadSpeakerAttributionCue,\n previousLeadSpeakerCue: previousTrace?.leadSpeakerCue,\n previousSqliteQueryBackfillCount: previousTrace?.sqliteQueryBackfillCount,\n previousSqliteQueryBackfillLimitReached:\n previousTrace?.sqliteQueryBackfillLimitReached,\n previousSqliteQueryMinResultsSatisfied:\n previousTrace?.sqliteQueryMinResultsSatisfied,\n previousSqliteQueryCandidateBudgetExhausted:\n previousTrace?.sqliteQueryCandidateBudgetExhausted,\n previousSqliteQueryCandidateCoverage:\n previousTrace?.sqliteQueryCandidateCoverage,\n previousSqliteQueryFilteredCandidates:\n previousTrace?.sqliteQueryFilteredCandidates,\n previousSqliteQueryFinalSearchK: previousTrace?.sqliteQueryFinalSearchK,\n previousSqliteQueryInitialSearchK: previousTrace?.sqliteQueryInitialSearchK,\n previousSqliteQuerySearchExpansionRatio:\n previousTrace?.sqliteQuerySearchExpansionRatio,\n previousSqliteQueryMode: previousTrace?.sqliteQueryMode,\n previousSqliteQueryPushdownMode: previousTrace?.sqliteQueryPushdownMode,\n previousSqliteQueryPushdownApplied:\n previousTrace?.sqliteQueryPushdownApplied,\n previousSqliteQueryPushdownClauseCount:\n previousTrace?.sqliteQueryPushdownClauseCount,\n previousSqliteQueryTotalFilterClauseCount:\n previousTrace?.sqliteQueryTotalFilterClauseCount,\n previousSqliteQueryJsRemainderClauseCount:\n previousTrace?.sqliteQueryJsRemainderClauseCount,\n previousSqliteQueryMultiplierUsed: previousTrace?.sqliteQueryMultiplierUsed,\n previousSqliteQueryCandidateLimitUsed:\n previousTrace?.sqliteQueryCandidateLimitUsed,\n previousSqliteQueryMaxBackfillsUsed:\n previousTrace?.sqliteQueryMaxBackfillsUsed,\n previousSqliteQueryMinResultsUsed: previousTrace?.sqliteQueryMinResultsUsed,\n previousSqliteQueryFillPolicyUsed: previousTrace?.sqliteQueryFillPolicyUsed,\n previousSqliteQueryPushdownCoverageRatio:\n previousTrace?.sqliteQueryPushdownCoverageRatio,\n previousSqliteQueryJsRemainderRatio:\n previousTrace?.sqliteQueryJsRemainderRatio,\n previousSqliteQueryReturnedCount: previousTrace?.sqliteQueryReturnedCount,\n previousSqliteQueryCandidateYieldRatio:\n previousTrace?.sqliteQueryCandidateYieldRatio,\n previousSqliteQueryTopKFillRatio: previousTrace?.sqliteQueryTopKFillRatio,\n previousSqliteQueryUnderfilledTopK:\n previousTrace?.sqliteQueryUnderfilledTopK,\n previousPostgresQueryBackfillCount:\n previousTrace?.postgresQueryBackfillCount,\n previousPostgresQueryBackfillLimitReached:\n previousTrace?.postgresQueryBackfillLimitReached,\n previousPostgresQueryMinResultsSatisfied:\n previousTrace?.postgresQueryMinResultsSatisfied,\n previousPostgresQueryCandidateBudgetExhausted:\n previousTrace?.postgresQueryCandidateBudgetExhausted,\n previousPostgresQueryCandidateCoverage:\n previousTrace?.postgresQueryCandidateCoverage,\n previousPostgresQueryFilteredCandidates:\n previousTrace?.postgresQueryFilteredCandidates,\n previousPostgresQueryFinalSearchK: previousTrace?.postgresQueryFinalSearchK,\n previousPostgresQueryInitialSearchK:\n previousTrace?.postgresQueryInitialSearchK,\n previousPostgresQuerySearchExpansionRatio:\n previousTrace?.postgresQuerySearchExpansionRatio,\n previousPostgresQueryMode: previousTrace?.postgresQueryMode,\n previousPostgresQueryPushdownMode: previousTrace?.postgresQueryPushdownMode,\n previousPostgresQueryPushdownApplied:\n previousTrace?.postgresQueryPushdownApplied,\n previousPostgresQueryPushdownClauseCount:\n previousTrace?.postgresQueryPushdownClauseCount,\n previousPostgresQueryTotalFilterClauseCount:\n previousTrace?.postgresQueryTotalFilterClauseCount,\n previousPostgresQueryJsRemainderClauseCount:\n previousTrace?.postgresQueryJsRemainderClauseCount,\n previousPostgresQueryMultiplierUsed:\n previousTrace?.postgresQueryMultiplierUsed,\n previousPostgresQueryCandidateLimitUsed:\n previousTrace?.postgresQueryCandidateLimitUsed,\n previousPostgresQueryMaxBackfillsUsed:\n previousTrace?.postgresQueryMaxBackfillsUsed,\n previousPostgresQueryMinResultsUsed:\n previousTrace?.postgresQueryMinResultsUsed,\n previousPostgresQueryFillPolicyUsed:\n previousTrace?.postgresQueryFillPolicyUsed,\n previousPostgresQueryPushdownCoverageRatio:\n previousTrace?.postgresQueryPushdownCoverageRatio,\n previousPostgresQueryJsRemainderRatio:\n previousTrace?.postgresQueryJsRemainderRatio,\n previousPostgresQueryReturnedCount:\n previousTrace?.postgresQueryReturnedCount,\n previousPostgresQueryCandidateYieldRatio:\n previousTrace?.postgresQueryCandidateYieldRatio,\n previousPostgresQueryTopKFillRatio:\n previousTrace?.postgresQueryTopKFillRatio,\n previousPostgresQueryUnderfilledTopK:\n previousTrace?.postgresQueryUnderfilledTopK,\n previousSourceBalanceStrategy: previousTrace?.sourceBalanceStrategy,\n previousSourceAwareChunkReasonLabel:\n previousTrace?.sourceAwareChunkReasonLabel,\n previousStageCounts,\n previousTopContextLabel: previousTrace?.topContextLabel,\n previousTopLocatorLabel: previousTrace?.topLocatorLabel,\n previousTraceMode: previousTrace?.traceMode,\n previousTransformedQuery: previousTrace?.transformedQuery,\n previousSourceAwareUnitScopeLabel: previousTrace?.sourceAwareUnitScopeLabel,\n previousVariantQueries: previousTrace?.variantQueries ?? [],\n previousVectorCount: previousTrace?.vectorCount,\n query: caseResult.query,\n leadChannelAttributionCue,\n leadChannelCue,\n leadContinuityCue,\n leadPresentationCue,\n leadSpreadsheetCue,\n leadSpeakerAttributionCue,\n leadSpeakerCue,\n sqliteQueryBackfillCount,\n sqliteQueryBackfillLimitReached,\n sqliteQueryMinResultsSatisfied,\n sqliteQueryCandidateBudgetExhausted,\n sqliteQueryCandidateCoverage,\n sqliteQueryFilteredCandidates,\n sqliteQueryFinalSearchK,\n sqliteQueryInitialSearchK,\n sqliteQuerySearchExpansionRatio,\n sqliteQueryMode,\n sqliteQueryPushdownMode,\n sqliteQueryPushdownApplied,\n sqliteQueryPushdownClauseCount,\n sqliteQueryTotalFilterClauseCount,\n sqliteQueryJsRemainderClauseCount,\n sqliteQueryMultiplierUsed,\n sqliteQueryCandidateLimitUsed,\n sqliteQueryMaxBackfillsUsed,\n sqliteQueryMinResultsUsed,\n sqliteQueryFillPolicyUsed,\n sqliteQueryPushdownCoverageRatio,\n sqliteQueryJsRemainderRatio,\n sqliteQueryReturnedCount,\n sqliteQueryCandidateYieldRatio,\n sqliteQueryTopKFillRatio,\n sqliteQueryUnderfilledTopK,\n postgresQueryBackfillCount,\n postgresQueryBackfillLimitReached,\n postgresQueryMinResultsSatisfied,\n postgresQueryCandidateBudgetExhausted,\n postgresQueryCandidateCoverage,\n postgresQueryFilteredCandidates,\n postgresQueryFinalSearchK,\n postgresQueryInitialSearchK,\n postgresQuerySearchExpansionRatio,\n postgresQueryMode,\n postgresQueryPushdownMode,\n postgresQueryPushdownApplied,\n postgresQueryPushdownClauseCount,\n postgresQueryTotalFilterClauseCount,\n postgresQueryJsRemainderClauseCount,\n postgresQueryMultiplierUsed,\n postgresQueryCandidateLimitUsed,\n postgresQueryMaxBackfillsUsed,\n postgresQueryMinResultsUsed,\n postgresQueryFillPolicyUsed,\n postgresQueryPushdownCoverageRatio,\n postgresQueryJsRemainderRatio,\n postgresQueryReturnedCount,\n postgresQueryCandidateYieldRatio,\n postgresQueryTopKFillRatio,\n postgresQueryUnderfilledTopK,\n sourceAwareChunkReasonLabel,\n sourceAwareUnitScopeLabel,\n stageCounts,\n status: caseResult.status,\n sourceBalanceStrategy: currentTrace?.sourceBalanceStrategy,\n topContextLabel,\n topLocatorLabel,\n traceChange,\n traceMode: currentTrace?.mode,\n transformedQuery: currentTrace?.transformedQuery || undefined,\n variantQueries: currentTrace?.variantQueries ?? [],\n vectorCount: currentTrace?.resultCounts.vector ?? 0,\n };\n};\n\nconst buildEvaluationCaseTraceSnapshotsFromEvaluated = (\n evaluated: Array<{\n caseResult: RAGEvaluationCaseResult;\n trace?: RAGRetrievalTrace;\n filter?: Record<string, unknown>;\n retrieval?: RAGCollectionSearchParams[\"retrieval\"];\n topResult?: RAGQueryResult;\n }>,\n): RAGEvaluationCaseTraceSnapshot[] =>\n evaluated.map(({ caseResult, filter, retrieval, trace, topResult }) =>\n buildEvaluationCaseTraceSnapshot({\n caseResult,\n filter,\n retrieval,\n currentTrace: trace,\n topResult,\n }),\n );\n\nconst buildEvaluationCaseTraceSnapshots = ({\n current,\n previous,\n}: {\n current?: RAGEvaluationSuiteRun;\n previous?: RAGEvaluationSuiteRun;\n}): RAGEvaluationCaseTraceSnapshot[] => {\n if (!current) {\n return [];\n }\n\n const currentTraces = new Map(\n (current.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry]),\n );\n const previousTraces = new Map(\n (previous?.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry]),\n );\n\n return current.response.cases.map((caseResult) =>\n buildEvaluationCaseTraceSnapshot({\n caseResult,\n currentSnapshot: currentTraces.get(caseResult.caseId),\n currentTrace: (() => {\n const currentSnapshot = currentTraces.get(caseResult.caseId);\n if (!currentSnapshot) {\n return undefined;\n }\n\n return {\n candidateTopK: currentSnapshot.candidateTopK,\n lexicalTopK: currentSnapshot.lexicalTopK,\n mode: currentSnapshot.traceMode ?? \"vector\",\n query: caseResult.query,\n resultCounts: {\n final: currentSnapshot.finalCount,\n fused: currentSnapshot.finalCount,\n lexical: currentSnapshot.lexicalCount,\n reranked: currentSnapshot.finalCount,\n vector: currentSnapshot.vectorCount,\n },\n runLexical: currentSnapshot.lexicalCount > 0,\n runVector: currentSnapshot.vectorCount > 0,\n sourceBalanceStrategy: currentSnapshot.sourceBalanceStrategy ?? \"cap\",\n steps: [],\n topK: caseResult.topK,\n transformedQuery:\n currentSnapshot.transformedQuery ?? caseResult.query,\n variantQueries: currentSnapshot.variantQueries,\n } satisfies RAGRetrievalTrace;\n })(),\n previousTrace: previousTraces.get(caseResult.caseId),\n }),\n );\n};\n\nconst getStatusRank = (status: RAGEvaluationCaseResult[\"status\"]) =>\n status === \"pass\" ? 2 : status === \"partial\" ? 1 : 0;\n\nconst buildCaseTraceLeadLabel = (\n trace?: Pick<\n RAGEvaluationCaseTraceSnapshot,\n | \"topLocatorLabel\"\n | \"topContextLabel\"\n | \"sourceAwareUnitScopeLabel\"\n | \"sourceAwareChunkReasonLabel\"\n >,\n) =>\n trace?.topLocatorLabel ??\n trace?.topContextLabel ??\n trace?.sourceAwareUnitScopeLabel ??\n trace?.sourceAwareChunkReasonLabel;\n\nexport const buildRAGEvaluationRunDiff = ({\n current,\n previous,\n}: {\n current: RAGEvaluationSuiteRun;\n previous?: RAGEvaluationSuiteRun;\n}): RAGEvaluationRunDiff => {\n const previousCases = new Map(\n (previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]),\n );\n const diffs = current.response.cases.map((entry) =>\n buildCaseDiff(entry, previousCases.get(entry.caseId)),\n );\n const regressedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) <\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const improvedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) >\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const unchangedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) ===\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const previousCaseTraces = new Map(\n (previous?.caseTraceSnapshots ?? []).map((entry) => [entry.caseId, entry]),\n );\n const traceLeadChanges = (current.caseTraceSnapshots ?? [])\n .map((entry) => {\n const previousEntry = previousCaseTraces.get(entry.caseId);\n const currentLead = buildCaseTraceLeadLabel(entry);\n const previousLead = buildCaseTraceLeadLabel(previousEntry);\n if (!currentLead || currentLead === previousLead) {\n return undefined;\n }\n\n return {\n caseId: entry.caseId,\n currentLead,\n label: entry.label,\n previousLead,\n };\n })\n .filter(\n (entry): entry is NonNullable<typeof entry> =>\n typeof entry !== \"undefined\",\n );\n\n return {\n currentRunId: current.id,\n improvedCases,\n previousRunId: previous?.id,\n regressedCases,\n suiteId: current.suiteId,\n traceLeadChanges:\n traceLeadChanges.length > 0 ? traceLeadChanges : undefined,\n summaryDelta: {\n averageF1:\n current.response.summary.averageF1 -\n (previous?.response.summary.averageF1 ?? 0),\n averageLatencyMs:\n current.response.summary.averageLatencyMs -\n (previous?.response.summary.averageLatencyMs ?? 0),\n failedCases:\n current.response.summary.failedCases -\n (previous?.response.summary.failedCases ?? 0),\n passedCases:\n current.response.summary.passedCases -\n (previous?.response.summary.passedCases ?? 0),\n passingRate:\n current.response.passingRate - (previous?.response.passingRate ?? 0),\n partialCases:\n current.response.summary.partialCases -\n (previous?.response.summary.partialCases ?? 0),\n },\n traceSummaryDelta:\n current.traceSummary || previous?.traceSummary\n ? {\n averageCandidateTopK:\n (current.traceSummary?.averageCandidateTopK ?? 0) -\n (previous?.traceSummary?.averageCandidateTopK ?? 0),\n averageFinalCount:\n (current.traceSummary?.averageFinalCount ?? 0) -\n (previous?.traceSummary?.averageFinalCount ?? 0),\n averageLexicalCount:\n (current.traceSummary?.averageLexicalCount ?? 0) -\n (previous?.traceSummary?.averageLexicalCount ?? 0),\n averageLexicalTopK:\n (current.traceSummary?.averageLexicalTopK ?? 0) -\n (previous?.traceSummary?.averageLexicalTopK ?? 0),\n averageVectorCount:\n (current.traceSummary?.averageVectorCount ?? 0) -\n (previous?.traceSummary?.averageVectorCount ?? 0),\n balancedCases:\n (current.traceSummary?.balancedCases ?? 0) -\n (previous?.traceSummary?.balancedCases ?? 0),\n officeEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.officeEvidenceReconcileCases ?? 0),\n officeParagraphEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeParagraphEvidenceReconcileCases ??\n 0) -\n (previous?.traceSummary?.officeParagraphEvidenceReconcileCases ??\n 0),\n officeListEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeListEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.officeListEvidenceReconcileCases ?? 0),\n officeTableEvidenceReconcileCasesDelta:\n (current.traceSummary?.officeTableEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.officeTableEvidenceReconcileCases ?? 0),\n pdfEvidenceReconcileCasesDelta:\n (current.traceSummary?.pdfEvidenceReconcileCases ?? 0) -\n (previous?.traceSummary?.pdfEvidenceReconcileCases ?? 0),\n lexicalCases:\n (current.traceSummary?.lexicalCases ?? 0) -\n (previous?.traceSummary?.lexicalCases ?? 0),\n modesChanged:\n (current.traceSummary?.modes ?? []).join(\"|\") !==\n (previous?.traceSummary?.modes ?? []).join(\"|\"),\n roundRobinCases:\n (current.traceSummary?.roundRobinCases ?? 0) -\n (previous?.traceSummary?.roundRobinCases ?? 0),\n stageCounts: diffTraceStageCounts({\n current: current.traceSummary?.stageCounts ?? {},\n previous: previous?.traceSummary?.stageCounts ?? {},\n }),\n sourceBalanceStrategiesChanged:\n (current.traceSummary?.sourceBalanceStrategies ?? []).join(\n \"|\",\n ) !==\n (previous?.traceSummary?.sourceBalanceStrategies ?? []).join(\"|\"),\n transformedCases:\n (current.traceSummary?.transformedCases ?? 0) -\n (previous?.traceSummary?.transformedCases ?? 0),\n variantCases:\n (current.traceSummary?.variantCases ?? 0) -\n (previous?.traceSummary?.variantCases ?? 0),\n vectorCases:\n (current.traceSummary?.vectorCases ?? 0) -\n (previous?.traceSummary?.vectorCases ?? 0),\n }\n : undefined,\n unchangedCases,\n };\n};\n\nexport const buildRAGAnswerGroundingEvaluationRunDiff = ({\n current,\n previous,\n}: {\n current: RAGAnswerGroundingEvaluationRun;\n previous?: RAGAnswerGroundingEvaluationRun;\n}): RAGAnswerGroundingEvaluationRunDiff => {\n const previousCases = new Map(\n (previous?.response.cases ?? []).map((entry) => [entry.caseId, entry]),\n );\n const diffs = current.response.cases.map((entry) =>\n buildGroundingCaseDiff(entry, previousCases.get(entry.caseId)),\n );\n const regressedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) <\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const improvedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) >\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n const unchangedCases = diffs.filter(\n (entry) =>\n getStatusRank(entry.currentStatus) ===\n getStatusRank(entry.previousStatus ?? \"fail\"),\n );\n\n return {\n currentRunId: current.id,\n improvedCases,\n previousRunId: previous?.id,\n regressedCases,\n suiteId: current.suiteId,\n summaryDelta: {\n averageCitationF1:\n current.response.summary.averageCitationF1 -\n (previous?.response.summary.averageCitationF1 ?? 0),\n averageResolvedCitationRate:\n current.response.summary.averageResolvedCitationRate -\n (previous?.response.summary.averageResolvedCitationRate ?? 0),\n failedCases:\n current.response.summary.failedCases -\n (previous?.response.summary.failedCases ?? 0),\n passedCases:\n current.response.summary.passedCases -\n (previous?.response.summary.passedCases ?? 0),\n passingRate:\n current.response.passingRate - (previous?.response.passingRate ?? 0),\n partialCases:\n current.response.summary.partialCases -\n (previous?.response.summary.partialCases ?? 0),\n },\n unchangedCases,\n };\n};\n\nexport const createRAGFileEvaluationHistoryStore = (\n path: string,\n): RAGEvaluationHistoryStore => ({\n listRuns: async ({ limit, suiteId } = {}) => {\n let parsed: RAGEvaluationSuiteRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) => !suiteId || entry.suiteId === suiteId,\n );\n const sorted = normalizeHistoryRuns(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveRun: async (run) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeHistoryRuns([\n run,\n ...existing.filter((entry: RAGEvaluationSuiteRun) => entry.id !== run.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n pruneRuns: async (input) => {\n let existing: RAGEvaluationSuiteRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n existing = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: existing,\n sort: normalizeHistoryRuns,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(pruned.next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n});\n\nconst normalizeEvaluationSuiteSnapshots = (\n snapshots: RAGEvaluationSuiteSnapshot[],\n) =>\n [...snapshots].sort((left, right) => {\n if (right.createdAt !== left.createdAt) {\n return right.createdAt - left.createdAt;\n }\n if (right.version !== left.version) {\n return right.version - left.version;\n }\n return right.id.localeCompare(left.id);\n });\n\nexport const createRAGFileEvaluationSuiteSnapshotHistoryStore = (\n path: string,\n): RAGEvaluationSuiteSnapshotHistoryStore => ({\n listSnapshots: async ({ limit, suiteId } = {}) => {\n let parsed: RAGEvaluationSuiteSnapshot[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) => !suiteId || entry.suiteId === suiteId,\n );\n const sorted = normalizeEvaluationSuiteSnapshots(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveSnapshot: async (snapshot) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeEvaluationSuiteSnapshots([\n snapshot,\n ...existing.filter(\n (entry: RAGEvaluationSuiteSnapshot) => entry.id !== snapshot.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n pruneSnapshots: async (input) => {\n let existing: RAGEvaluationSuiteSnapshot[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n existing = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: existing,\n sort: normalizeEvaluationSuiteSnapshots,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(pruned.next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n});\n\nexport const createRAGFileRetrievalComparisonHistoryStore = (\n path: string,\n): RAGRetrievalComparisonHistoryStore => ({\n listRuns: async ({ groupKey, label, limit, suiteId, tag, winnerId } = {}) => {\n let parsed: RAGRetrievalComparisonRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const normalizedLabel = normalizeLabelFilter(label);\n const filtered = parsed.filter(\n (entry) =>\n (!suiteId || entry.suiteId === suiteId) &&\n (!groupKey || entry.groupKey === groupKey) &&\n (!tag || (entry.tags ?? []).includes(tag)) &&\n (!normalizedLabel ||\n entry.label.toLowerCase().includes(normalizedLabel) ||\n entry.suiteLabel.toLowerCase().includes(normalizedLabel)) &&\n matchesWinner(entry, winnerId),\n );\n const sorted = normalizeRetrievalComparisonRuns(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveRun: async (run) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalComparisonRuns([\n run,\n ...existing.filter(\n (entry: RAGRetrievalComparisonRun) => entry.id !== run.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalBaselineStore = (\n path: string,\n): RAGRetrievalBaselineStore => {\n const listBaselines: RAGRetrievalBaselineStore[\"listBaselines\"] = async ({\n groupKey,\n limit,\n tag,\n status,\n } = {}) => {\n let parsed: RAGRetrievalBaselineRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!tag || (entry.tags ?? []).includes(tag)) &&\n (!status || entry.status === status),\n );\n const sorted = normalizeRetrievalBaselineRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n };\n\n return {\n getBaseline: async (groupKey) => {\n const baselines = await Promise.resolve(\n listBaselines({ groupKey, limit: 1 }),\n );\n return baselines[0] ?? null;\n },\n listBaselines,\n saveBaseline: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const currentVersion =\n existing\n .filter(\n (entry: RAGRetrievalBaselineRecord) =>\n entry.groupKey === record.groupKey,\n )\n .reduce((max, entry) => Math.max(max, entry.version ?? 0), 0) ?? 0;\n const next = normalizeRetrievalBaselineRecords([\n {\n ...record,\n status: \"active\",\n version:\n typeof record.version === \"number\"\n ? record.version\n : currentVersion + 1,\n },\n ...existing.map((entry: RAGRetrievalBaselineRecord) =>\n entry.groupKey === record.groupKey &&\n (entry.rolloutLabel ?? undefined) ===\n (record.rolloutLabel ?? undefined)\n ? { ...entry, status: \"superseded\" as const }\n : entry,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n };\n};\n\nexport const createRAGFileRetrievalReleaseDecisionStore = (\n path: string,\n): RAGRetrievalReleaseDecisionStore => ({\n listDecisions: async ({ groupKey, kind, limit } = {}) => {\n let parsed: RAGRetrievalReleaseDecisionRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!kind || entry.kind === kind),\n );\n const sorted = normalizeRetrievalReleaseDecisionRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveDecision: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalReleaseDecisionRecords([\n record,\n ...existing.filter(\n (entry: RAGRetrievalReleaseDecisionRecord) => entry.id !== record.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffDecisionStore = (\n path: string,\n): RAGRetrievalLaneHandoffDecisionStore => ({\n listDecisions: async ({\n groupKey,\n kind,\n limit,\n sourceRolloutLabel,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalLaneHandoffDecisionRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!kind || entry.kind === kind) &&\n (!sourceRolloutLabel ||\n entry.sourceRolloutLabel === sourceRolloutLabel) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n );\n const sorted = normalizeRetrievalLaneHandoffDecisionRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveDecision: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalLaneHandoffDecisionRecords([\n record,\n ...existing.filter(\n (entry: RAGRetrievalLaneHandoffDecisionRecord) =>\n entry.id !== record.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalReleaseIncidentStore = (\n path: string,\n): RAGRetrievalReleaseIncidentStore => ({\n listIncidents: async ({\n corpusGroupKey,\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalReleaseIncidentRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!corpusGroupKey || entry.corpusGroupKey === corpusGroupKey) &&\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel) &&\n (!severity || entry.severity === severity) &&\n (!status || entry.status === status),\n );\n const sorted = normalizeRetrievalReleaseIncidentRecords(filtered);\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveIncident: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalReleaseIncidentRecords([\n record,\n ...existing.filter(\n (entry: RAGRetrievalReleaseIncidentRecord) => entry.id !== record.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffIncidentStore = (\n path: string,\n): RAGRetrievalLaneHandoffIncidentStore => ({\n listIncidents: async ({\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalLaneHandoffIncidentRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel) &&\n (!severity || entry.severity === severity) &&\n (!status || entry.status === status),\n );\n const sorted = normalizeRetrievalReleaseIncidentRecords(\n filtered as RAGRetrievalReleaseIncidentRecord[],\n ) as RAGRetrievalLaneHandoffIncidentRecord[];\n return typeof limit === \"number\" ? sorted.slice(0, limit) : sorted;\n },\n saveIncident: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalReleaseIncidentRecords([\n record as RAGRetrievalReleaseIncidentRecord,\n ...existing.filter(\n (entry: RAGRetrievalLaneHandoffIncidentRecord) =>\n entry.id !== record.id,\n ),\n ]) as RAGRetrievalLaneHandoffIncidentRecord[];\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffIncidentHistoryStore = (\n path: string,\n): RAGRetrievalLaneHandoffIncidentHistoryStore => ({\n listRecords: async ({\n action,\n groupKey,\n incidentId,\n limit,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalLaneHandoffIncidentHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed\n .filter(\n (entry) =>\n (!action || entry.action === action) &&\n (!groupKey || entry.groupKey === groupKey) &&\n (!incidentId || entry.incidentId === incidentId) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalLaneHandoffIncidentHistoryRecord,\n right: RAGRetrievalLaneHandoffIncidentHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalIncidentRemediationDecisionStore = (\n path: string,\n): RAGRetrievalIncidentRemediationDecisionStore => ({\n listRecords: async ({\n groupKey,\n incidentId,\n limit,\n remediationKind,\n status,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalIncidentRemediationDecisionRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = normalizeRetrievalIncidentRemediationDecisionRecords(\n parsed,\n ).filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!incidentId || entry.incidentId === incidentId) &&\n (!remediationKind || entry.remediationKind === remediationKind) &&\n (!status || entry.status === status) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n );\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalIncidentRemediationDecisionRecords([\n record,\n ...existing,\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalIncidentRemediationExecutionHistoryStore = (\n path: string,\n): RAGRetrievalIncidentRemediationExecutionHistoryStore => ({\n listRecords: async ({\n actionKind,\n blockedByGuardrail,\n code,\n groupKey,\n idempotentReplay,\n incidentId,\n limit,\n targetRolloutLabel,\n } = {}) => {\n let parsed: RAGRetrievalIncidentRemediationExecutionHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered =\n normalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n parsed,\n ).filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!incidentId || entry.incidentId === incidentId) &&\n (!actionKind || entry.action.kind === actionKind) &&\n (!code || entry.code === code) &&\n (typeof blockedByGuardrail !== \"boolean\" ||\n entry.blockedByGuardrail === blockedByGuardrail) &&\n (typeof idempotentReplay !== \"boolean\" ||\n entry.idempotentReplay === idempotentReplay) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n );\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeRetrievalIncidentRemediationExecutionHistoryRecords([\n record,\n ...existing,\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalLaneHandoffAutoCompletePolicyHistoryStore = (\n path: string,\n): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, targetRolloutLabel } = {}) => {\n let parsed: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n right: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalReleaseLanePolicyHistoryStore = (\n path: string,\n): RAGRetrievalReleaseLanePolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, rolloutLabel, scope } = {}) => {\n let parsed: RAGRetrievalReleaseLanePolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!rolloutLabel || entry.rolloutLabel === rolloutLabel) &&\n (!scope || entry.scope === scope),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalReleaseLanePolicyHistoryRecord,\n right: RAGRetrievalReleaseLanePolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalBaselineGatePolicyHistoryStore = (\n path: string,\n): RAGRetrievalBaselineGatePolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, rolloutLabel, scope } = {}) => {\n let parsed: RAGRetrievalBaselineGatePolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!rolloutLabel || entry.rolloutLabel === rolloutLabel) &&\n (!scope || entry.scope === scope),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalBaselineGatePolicyHistoryRecord,\n right: RAGRetrievalBaselineGatePolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileRetrievalReleaseLaneEscalationPolicyHistoryStore = (\n path: string,\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryStore => ({\n listRecords: async ({ groupKey, limit, targetRolloutLabel } = {}) => {\n let parsed: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n const filtered = parsed\n .filter(\n (entry) =>\n (!groupKey || entry.groupKey === groupKey) &&\n (!targetRolloutLabel ||\n entry.targetRolloutLabel === targetRolloutLabel),\n )\n .sort((left, right) => right.recordedAt - left.recordedAt);\n return typeof limit === \"number\" ? filtered.slice(0, limit) : filtered;\n },\n saveRecord: async (record) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = [record, ...existing].sort(\n (\n left: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n right: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord,\n ) => right.recordedAt - left.recordedAt,\n );\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGFileSearchTraceStore = (\n path: string,\n): RAGSearchTraceStore => ({\n async listTraces(input) {\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n traces?: RAGSearchTraceRecord[];\n };\n const traces = Array.isArray(data.traces) ? data.traces : [];\n const filtered = traces.filter((trace) => {\n if (input?.query && trace.query !== input.query) {\n return false;\n }\n if (input?.groupKey && trace.groupKey !== input.groupKey) {\n return false;\n }\n if (input?.tag && !(trace.tags ?? []).includes(input.tag)) {\n return false;\n }\n return true;\n });\n\n return normalizeTraceSummaryRuns(filtered).slice(\n 0,\n input?.limit ?? DEFAULT_HISTORY_LIMIT,\n );\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return [];\n }\n\n throw error;\n }\n },\n async saveTrace(trace) {\n let traces: RAGSearchTraceRecord[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n traces?: RAGSearchTraceRecord[];\n };\n traces = Array.isArray(data.traces) ? data.traces : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const nextTraces = normalizeTraceSummaryRuns([\n trace,\n ...traces.filter((entry) => entry.id !== trace.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n traces: nextTraces,\n },\n null,\n 2,\n ),\n );\n },\n async pruneTraces(input) {\n let traces: RAGSearchTraceRecord[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n traces?: RAGSearchTraceRecord[];\n };\n traces = Array.isArray(data.traces) ? data.traces : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const pruned = applyRAGSearchTracePrunePolicy({\n input,\n traces,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n traces: pruned.next,\n },\n null,\n 2,\n ),\n );\n\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n };\n },\n});\n\nexport const createRAGFileSearchTracePruneHistoryStore = (\n path: string,\n): RAGSearchTracePruneHistoryStore => ({\n listRuns: async (input) => {\n let parsed: RAGSearchTracePruneRun[] = [];\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n parsed = Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n }\n\n const filtered = parsed.filter(\n (entry) => !input?.trigger || entry.trigger === input.trigger,\n );\n const sorted = normalizeSearchTracePruneRuns(filtered);\n return typeof input?.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRun: async (run) => {\n const existing = await (async () => {\n try {\n const content = await readFile(path, \"utf8\");\n const value = JSON.parse(content);\n return Array.isArray(value) ? value : [];\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw error;\n }\n return [];\n }\n })();\n const next = normalizeSearchTracePruneRuns([\n run,\n ...existing.filter(\n (entry: RAGSearchTracePruneRun) => entry.id !== run.id,\n ),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(next, null, \"\\t\") + \"\\n\",\n \"utf8\",\n );\n },\n});\n\nexport const createRAGSQLiteEvaluationHistoryStore = (\n options: SQLiteRAGEvaluationHistoryStoreOptions,\n): RAGEvaluationHistoryStore => {\n const tableName = options.tableName ?? \"rag_evaluation_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`,\n );\n\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tfinished_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRuns(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n const sql =\n `SELECT record_json FROM ${tableName}` +\n `${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params) as Array<{\n record_json: string;\n }>;\n const runs = normalizeHistoryRuns(\n rows.map((row) => JSON.parse(row.record_json) as RAGEvaluationSuiteRun),\n );\n\n return typeof input.limit === \"number\"\n ? runs.slice(0, input.limit)\n : runs;\n },\n saveRun(run) {\n insert.run(run.id, run.suiteId, run.finishedAt, JSON.stringify(run));\n },\n pruneRuns(input) {\n const allRows = db\n .prepare(`SELECT record_json FROM ${tableName}`)\n .all() as Array<{\n record_json: string;\n }>;\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: allRows.map(\n (row) => JSON.parse(row.record_json) as RAGEvaluationSuiteRun,\n ),\n sort: normalizeHistoryRuns,\n });\n for (const run of pruned.removed) {\n db.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(run.id);\n }\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n };\n};\n\nexport const createRAGSQLiteEvaluationSuiteSnapshotHistoryStore = (\n options: SQLiteRAGEvaluationSuiteSnapshotHistoryStoreOptions,\n): RAGEvaluationSuiteSnapshotHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_evaluation_suite_snapshot_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tversion INTEGER NOT NULL,\n\t\t\tcreated_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_created_at_idx ON ${tableName} (suite_id, created_at DESC, version DESC)`,\n );\n\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tversion,\n\t\t\tcreated_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tversion = excluded.version,\n\t\t\tcreated_at = excluded.created_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listSnapshots(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n const sql =\n `SELECT record_json FROM ${tableName}` +\n `${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY created_at DESC, version DESC\";\n const rows = db.prepare(sql).all(...params) as Array<{\n record_json: string;\n }>;\n const snapshots = normalizeEvaluationSuiteSnapshots(\n rows.map(\n (row) => JSON.parse(row.record_json) as RAGEvaluationSuiteSnapshot,\n ),\n );\n\n return typeof input.limit === \"number\"\n ? snapshots.slice(0, input.limit)\n : snapshots;\n },\n saveSnapshot(snapshot) {\n insert.run(\n snapshot.id,\n snapshot.suiteId,\n snapshot.version,\n snapshot.createdAt,\n JSON.stringify(snapshot),\n );\n },\n pruneSnapshots(input) {\n const allRows = db\n .prepare(`SELECT record_json FROM ${tableName}`)\n .all() as Array<{\n record_json: string;\n }>;\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: allRows.map(\n (row) => JSON.parse(row.record_json) as RAGEvaluationSuiteSnapshot,\n ),\n sort: normalizeEvaluationSuiteSnapshots,\n });\n for (const snapshot of pruned.removed) {\n db.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(snapshot.id);\n }\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n };\n};\n\nexport const createRAGSQLiteAnswerGroundingEvaluationHistoryStore = (\n options: SQLiteRAGAnswerGroundingEvaluationHistoryStoreOptions,\n): RAGAnswerGroundingEvaluationHistoryStore => {\n const tableName = options.tableName ?? \"rag_answer_grounding_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`,\n );\n\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tfinished_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRuns(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n const sql =\n `SELECT record_json FROM ${tableName}` +\n `${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params) as Array<{\n record_json: string;\n }>;\n const runs = normalizeGroundingHistoryRuns(\n rows.map(\n (row) =>\n JSON.parse(row.record_json) as RAGAnswerGroundingEvaluationRun,\n ),\n );\n\n return typeof input.limit === \"number\"\n ? runs.slice(0, input.limit)\n : runs;\n },\n saveRun(run) {\n insert.run(run.id, run.suiteId, run.finishedAt, JSON.stringify(run));\n },\n pruneRuns(input) {\n const allRows = db\n .prepare(`SELECT record_json FROM ${tableName}`)\n .all() as Array<{\n record_json: string;\n }>;\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs: allRows.map(\n (row) =>\n JSON.parse(row.record_json) as RAGAnswerGroundingEvaluationRun,\n ),\n sort: normalizeGroundingHistoryRuns,\n });\n for (const run of pruned.removed) {\n db.prepare(`DELETE FROM ${tableName} WHERE id = ?`).run(run.id);\n }\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n };\n};\n\ntype SQLiteSearchTraceRow = {\n id: string;\n query: string;\n label: string;\n group_key: string | null;\n tags_json: string | null;\n started_at: number;\n finished_at: number;\n elapsed_ms: number;\n trace_json: string;\n summary_json: string;\n results_json: string;\n metadata_json: string | null;\n};\n\ntype SQLiteSearchTracePruneHistoryRow = {\n id: string;\n trigger: string;\n started_at: number;\n finished_at: number;\n elapsed_ms: number;\n run_json: string;\n};\n\nconst isSQLiteSearchTraceRow = (\n value: unknown,\n): value is SQLiteSearchTraceRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.query === \"string\" &&\n typeof value.label === \"string\" &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n (typeof value.tags_json === \"string\" || value.tags_json === null) &&\n typeof value.started_at === \"number\" &&\n typeof value.finished_at === \"number\" &&\n typeof value.elapsed_ms === \"number\" &&\n typeof value.trace_json === \"string\" &&\n typeof value.summary_json === \"string\" &&\n typeof value.results_json === \"string\" &&\n (typeof value.metadata_json === \"string\" || value.metadata_json === null);\n\nconst isSQLiteSearchTracePruneHistoryRow = (\n value: unknown,\n): value is SQLiteSearchTracePruneHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.trigger === \"string\" &&\n typeof value.started_at === \"number\" &&\n typeof value.finished_at === \"number\" &&\n typeof value.elapsed_ms === \"number\" &&\n typeof value.run_json === \"string\";\n\ntype SQLiteRetrievalComparisonHistoryRow = {\n id: string;\n suite_id: string;\n suite_label: string;\n label: string;\n corpus_group_key: string | null;\n group_key: string | null;\n tags_json: string | null;\n started_at: number;\n finished_at: number;\n elapsed_ms: number;\n comparison_json: string;\n decision_summary_json: string | null;\n};\n\nconst isSQLiteRetrievalComparisonHistoryRow = (\n value: unknown,\n): value is SQLiteRetrievalComparisonHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.suite_id === \"string\" &&\n typeof value.suite_label === \"string\" &&\n typeof value.label === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n (typeof value.tags_json === \"string\" || value.tags_json === null) &&\n typeof value.started_at === \"number\" &&\n typeof value.finished_at === \"number\" &&\n typeof value.elapsed_ms === \"number\" &&\n typeof value.comparison_json === \"string\" &&\n (typeof value.decision_summary_json === \"string\" ||\n value.decision_summary_json === null);\n\ntype SQLiteRetrievalReleaseDecisionRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n kind: string;\n decided_at: number;\n record_json: string;\n};\n\nconst isSQLiteRetrievalReleaseDecisionRow = (\n value: unknown,\n): value is SQLiteRetrievalReleaseDecisionRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.kind === \"string\" &&\n typeof value.decided_at === \"number\" &&\n typeof value.record_json === \"string\";\n\ntype SQLiteRetrievalBaselineRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n rollout_label: string | null;\n promoted_at: number;\n status: string;\n version: number;\n tags_json: string | null;\n record_json: string;\n};\n\nconst isSQLiteRetrievalBaselineRow = (\n value: unknown,\n): value is SQLiteRetrievalBaselineRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.rollout_label === \"string\" || value.rollout_label === null) &&\n typeof value.promoted_at === \"number\" &&\n typeof value.status === \"string\" &&\n typeof value.version === \"number\" &&\n (typeof value.tags_json === \"string\" || value.tags_json === null) &&\n typeof value.record_json === \"string\";\n\ntype SQLiteRetrievalReleaseIncidentRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string | null;\n severity: string;\n status: string;\n triggered_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffDecisionRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n source_rollout_label: string;\n target_rollout_label: string;\n kind: string;\n decided_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffIncidentRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string | null;\n source_rollout_label: string | null;\n severity: string;\n status: string;\n triggered_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalLaneHandoffIncidentHistoryRow = {\n id: string;\n incident_id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string | null;\n action: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalIncidentRemediationDecisionRow = {\n id: string;\n incident_id: string;\n group_key: string;\n target_rollout_label: string | null;\n remediation_kind: string;\n status: string;\n decided_at: number;\n record_json: string;\n};\n\ntype SQLiteRetrievalIncidentRemediationExecutionHistoryRow = {\n id: string;\n incident_id: string | null;\n group_key: string | null;\n target_rollout_label: string | null;\n action_kind: string;\n code: string;\n blocked_by_guardrail: number;\n idempotent_replay: number;\n executed_at: number;\n record_json: string;\n};\n\ntype SQLiteLaneHandoffAutoCompletePolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteReleaseLanePolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string | null;\n rollout_label: string;\n scope: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteBaselineGatePolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string | null;\n rollout_label: string;\n scope: string;\n recorded_at: number;\n record_json: string;\n};\n\ntype SQLiteReleaseLaneEscalationPolicyHistoryRow = {\n id: string;\n corpus_group_key: string | null;\n group_key: string;\n target_rollout_label: string;\n recorded_at: number;\n record_json: string;\n};\n\nconst isSQLiteRetrievalReleaseIncidentRow = (\n value: unknown,\n): value is SQLiteRetrievalReleaseIncidentRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.severity === \"string\" &&\n typeof value.status === \"string\" &&\n typeof value.triggered_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalLaneHandoffDecisionRow = (\n value: unknown,\n): value is SQLiteRetrievalLaneHandoffDecisionRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.source_rollout_label === \"string\" &&\n typeof value.target_rollout_label === \"string\" &&\n typeof value.kind === \"string\" &&\n typeof value.decided_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalLaneHandoffIncidentRow = (\n value: unknown,\n): value is SQLiteRetrievalLaneHandoffIncidentRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n (typeof value.source_rollout_label === \"string\" ||\n value.source_rollout_label === null) &&\n typeof value.severity === \"string\" &&\n typeof value.status === \"string\" &&\n typeof value.triggered_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalLaneHandoffIncidentHistoryRow = (\n value: unknown,\n): value is SQLiteRetrievalLaneHandoffIncidentHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.incident_id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.action === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalIncidentRemediationDecisionRow = (\n value: unknown,\n): value is SQLiteRetrievalIncidentRemediationDecisionRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n typeof value.incident_id === \"string\" &&\n typeof value.group_key === \"string\" &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.remediation_kind === \"string\" &&\n typeof value.status === \"string\" &&\n typeof value.decided_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteRetrievalIncidentRemediationExecutionHistoryRow = (\n value: unknown,\n): value is SQLiteRetrievalIncidentRemediationExecutionHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.incident_id === \"string\" || value.incident_id === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n (typeof value.target_rollout_label === \"string\" ||\n value.target_rollout_label === null) &&\n typeof value.action_kind === \"string\" &&\n typeof value.code === \"string\" &&\n typeof value.blocked_by_guardrail === \"number\" &&\n typeof value.idempotent_replay === \"number\" &&\n typeof value.executed_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteLaneHandoffAutoCompletePolicyHistoryRow = (\n value: unknown,\n): value is SQLiteLaneHandoffAutoCompletePolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.target_rollout_label === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteReleaseLanePolicyHistoryRow = (\n value: unknown,\n): value is SQLiteReleaseLanePolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n typeof value.rollout_label === \"string\" &&\n typeof value.scope === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteBaselineGatePolicyHistoryRow = (\n value: unknown,\n): value is SQLiteBaselineGatePolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n (typeof value.group_key === \"string\" || value.group_key === null) &&\n typeof value.rollout_label === \"string\" &&\n typeof value.scope === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst isSQLiteReleaseLaneEscalationPolicyHistoryRow = (\n value: unknown,\n): value is SQLiteReleaseLaneEscalationPolicyHistoryRow =>\n isObjectRecord(value) &&\n typeof value.id === \"string\" &&\n (typeof value.corpus_group_key === \"string\" ||\n value.corpus_group_key === null) &&\n typeof value.group_key === \"string\" &&\n typeof value.target_rollout_label === \"string\" &&\n typeof value.recorded_at === \"number\" &&\n typeof value.record_json === \"string\";\n\nconst assertSupportedIdentifier = (name: string) => {\n if (!/^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)) {\n throw new Error(\n `Invalid SQLite search trace table name \"${name}\". Only alphanumeric and underscore names are allowed.`,\n );\n }\n};\n\nconst ensureSQLiteColumns = (\n db: Database,\n tableName: string,\n columns: Array<{ name: string; definition: string }>,\n) => {\n const pragma = db.prepare(`PRAGMA table_info(${tableName})`).all();\n const existing = new Set(\n Array.isArray(pragma)\n ? pragma\n .filter(\n (row): row is { name?: unknown } =>\n isObjectRecord(row) && \"name\" in row,\n )\n .map((row) => (typeof row.name === \"string\" ? row.name : undefined))\n .filter((name): name is string => typeof name === \"string\")\n : [],\n );\n\n for (const column of columns) {\n if (existing.has(column.name)) {\n continue;\n }\n db.exec(\n `ALTER TABLE ${tableName} ADD COLUMN ${column.name} ${column.definition}`,\n );\n }\n};\n\nconst getMissingSQLiteColumns = (\n db: Database,\n tableName: string,\n columns: Array<{ name: string; definition: string }>,\n): RAGSQLiteStoreMigrationIssue[] => {\n const pragma = db.prepare(`PRAGMA table_info(${tableName})`).all();\n const existing = new Set(\n Array.isArray(pragma)\n ? pragma\n .filter(\n (row): row is { name?: unknown } =>\n isObjectRecord(row) && \"name\" in row,\n )\n .map((row) => (typeof row.name === \"string\" ? row.name : undefined))\n .filter((name): name is string => typeof name === \"string\")\n : [],\n );\n\n return columns\n .filter((column) => !existing.has(column.name))\n .map((column) => ({\n columnName: column.name,\n definition: column.definition,\n tableName,\n }));\n};\n\ntype SQLiteStoreMigrationDescriptor = {\n tableName: string;\n columns: Array<{ name: string; definition: string }>;\n};\n\nconst getDefaultSQLiteStoreMigrationDescriptors =\n (): SQLiteStoreMigrationDescriptor[] => [\n {\n tableName: DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME,\n columns: [{ definition: \"TEXT\", name: \"corpus_group_key\" }],\n },\n {\n tableName: DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME,\n columns: [{ definition: \"TEXT\", name: \"corpus_group_key\" }],\n },\n {\n tableName: DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME,\n columns: [\n { definition: \"TEXT\", name: \"group_key\" },\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ],\n },\n ];\n\nconst summarizeSQLiteStoreMigrationIssues = (\n issues: RAGSQLiteStoreMigrationIssue[],\n) =>\n issues.length > 0\n ? `${issues.length} SQLite schema migration issue${issues.length === 1 ? \"\" : \"s\"} detected`\n : undefined;\n\nexport const inspectRAGSQLiteStoreMigrations = (\n options: SQLiteRAGStoreMigrationOptions = {},\n): RAGSQLiteStoreMigrationInspection => {\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n const descriptors =\n options.descriptors ?? getDefaultSQLiteStoreMigrationDescriptors();\n const issues = descriptors.flatMap((descriptor) =>\n getMissingSQLiteColumns(db, descriptor.tableName, descriptor.columns),\n );\n\n return {\n issues,\n summary: summarizeSQLiteStoreMigrationIssues(issues),\n };\n};\n\nexport const applyRAGSQLiteStoreMigrations = (\n options: SQLiteRAGStoreMigrationOptions = {},\n): RAGSQLiteStoreMigrationResult => {\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n const descriptors =\n options.descriptors ?? getDefaultSQLiteStoreMigrationDescriptors();\n const inspection = inspectRAGSQLiteStoreMigrations({\n db,\n descriptors,\n });\n\n for (const descriptor of descriptors) {\n ensureSQLiteColumns(db, descriptor.tableName, descriptor.columns);\n }\n\n return {\n ...inspection,\n applied: inspection.issues,\n };\n};\n\nconst mapSQLiteSearchTraceRow = (\n row: SQLiteSearchTraceRow,\n): RAGSearchTraceRecord => ({\n elapsedMs: row.elapsed_ms,\n finishedAt: row.finished_at,\n groupKey: row.group_key ?? undefined,\n id: row.id,\n label: row.label,\n metadata: parseJSONRecord(row.metadata_json),\n query: row.query,\n results: parseJSONArray(row.results_json, []),\n startedAt: row.started_at,\n summary: JSON.parse(row.summary_json),\n tags: normalizeStringArray(parseJSONArray(row.tags_json, [])),\n trace: JSON.parse(row.trace_json),\n});\n\nconst mapSQLiteSearchTracePruneHistoryRow = (\n row: SQLiteSearchTracePruneHistoryRow,\n): RAGSearchTracePruneRun => JSON.parse(row.run_json);\n\nconst mapSQLiteRetrievalComparisonHistoryRow = (\n row: SQLiteRetrievalComparisonHistoryRow,\n): RAGRetrievalComparisonRun => ({\n comparison: JSON.parse(row.comparison_json),\n corpusGroupKey: row.corpus_group_key ?? undefined,\n decisionSummary: row.decision_summary_json\n ? JSON.parse(row.decision_summary_json)\n : undefined,\n elapsedMs: row.elapsed_ms,\n finishedAt: row.finished_at,\n groupKey: row.group_key ?? undefined,\n id: row.id,\n label: row.label,\n startedAt: row.started_at,\n suiteId: row.suite_id,\n suiteLabel: row.suite_label,\n tags: normalizeStringArray(parseJSONArray(row.tags_json, [])),\n});\n\nconst mapSQLiteRetrievalReleaseDecisionRow = (\n row: SQLiteRetrievalReleaseDecisionRow,\n): RAGRetrievalReleaseDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalBaselineRow = (\n row: SQLiteRetrievalBaselineRow,\n): RAGRetrievalBaselineRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalReleaseIncidentRow = (\n row: SQLiteRetrievalReleaseIncidentRow,\n): RAGRetrievalReleaseIncidentRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffDecisionRow = (\n row: SQLiteRetrievalLaneHandoffDecisionRow,\n): RAGRetrievalLaneHandoffDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffIncidentRow = (\n row: SQLiteRetrievalLaneHandoffIncidentRow,\n): RAGRetrievalLaneHandoffIncidentRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalLaneHandoffIncidentHistoryRow = (\n row: SQLiteRetrievalLaneHandoffIncidentHistoryRow,\n): RAGRetrievalLaneHandoffIncidentHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalIncidentRemediationDecisionRow = (\n row: SQLiteRetrievalIncidentRemediationDecisionRow,\n): RAGRetrievalIncidentRemediationDecisionRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteRetrievalIncidentRemediationExecutionHistoryRow = (\n row: SQLiteRetrievalIncidentRemediationExecutionHistoryRow,\n): RAGRetrievalIncidentRemediationExecutionHistoryRecord =>\n JSON.parse(row.record_json);\n\nconst mapSQLiteLaneHandoffAutoCompletePolicyHistoryRow = (\n row: SQLiteLaneHandoffAutoCompletePolicyHistoryRow,\n): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord =>\n JSON.parse(row.record_json);\n\nconst mapSQLiteReleaseLanePolicyHistoryRow = (\n row: SQLiteReleaseLanePolicyHistoryRow,\n): RAGRetrievalReleaseLanePolicyHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteBaselineGatePolicyHistoryRow = (\n row: SQLiteBaselineGatePolicyHistoryRow,\n): RAGRetrievalBaselineGatePolicyHistoryRecord => JSON.parse(row.record_json);\n\nconst mapSQLiteReleaseLaneEscalationPolicyHistoryRow = (\n row: SQLiteReleaseLaneEscalationPolicyHistoryRow,\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord =>\n JSON.parse(row.record_json);\n\nexport const createRAGSQLiteSearchTraceStore = (\n options: SQLiteRAGSearchTraceStoreOptions,\n): RAGSearchTraceStore => {\n const tableName = options.tableName ?? DEFAULT_SEARCH_TRACE_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tquery TEXT NOT NULL,\n\t\t\tlabel TEXT NOT NULL,\n\t\t\tgroup_key TEXT,\n\t\t\ttags_json TEXT,\n\t\t\tstarted_at INTEGER NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\telapsed_ms INTEGER NOT NULL,\n\t\t\ttrace_json TEXT NOT NULL,\n\t\t\tsummary_json TEXT NOT NULL,\n\t\t\tresults_json TEXT NOT NULL,\n\t\t\tmetadata_json TEXT\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_query_finished_at_idx ON ${tableName} (query, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_finished_at_idx ON ${tableName} (group_key, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tquery,\n\t\t\tlabel,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\ttrace_json,\n\t\t\tsummary_json,\n\t\t\tresults_json,\n\t\t\tmetadata_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tquery,\n\t\t\tlabel,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\ttrace_json,\n\t\t\tsummary_json,\n\t\t\tresults_json,\n\t\t\tmetadata_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tquery = excluded.query,\n\t\t\tlabel = excluded.label,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttags_json = excluded.tags_json,\n\t\t\tstarted_at = excluded.started_at,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\telapsed_ms = excluded.elapsed_ms,\n\t\t\ttrace_json = excluded.trace_json,\n\t\t\tsummary_json = excluded.summary_json,\n\t\t\tresults_json = excluded.results_json,\n\t\t\tmetadata_json = excluded.metadata_json\n\t`);\n const remove = db.prepare(`DELETE FROM ${tableName} WHERE id = ?`);\n\n return {\n listTraces(input) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input?.query) {\n where.push(\"query = ?\");\n params.push(input.query);\n }\n\n if (input?.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const traces = Array.isArray(rows)\n ? rows.filter(isSQLiteSearchTraceRow).map(mapSQLiteSearchTraceRow)\n : [];\n const filtered = input?.tag\n ? traces.filter((trace) =>\n (trace.tags ?? []).includes(input.tag as string),\n )\n : traces;\n\n return normalizeTraceSummaryRuns(filtered).slice(\n 0,\n input?.limit ?? DEFAULT_HISTORY_LIMIT,\n );\n },\n saveTrace(trace) {\n insert.run(\n trace.id,\n trace.query,\n trace.label,\n trace.groupKey ?? null,\n JSON.stringify(trace.tags ?? []),\n trace.startedAt,\n trace.finishedAt,\n trace.elapsedMs,\n JSON.stringify(trace.trace),\n JSON.stringify(trace.summary),\n JSON.stringify(trace.results),\n trace.metadata === undefined ? null : JSON.stringify(trace.metadata),\n );\n },\n pruneTraces(input) {\n const rows = db.prepare(`${listBase} ORDER BY finished_at DESC`).all();\n const traces = Array.isArray(rows)\n ? rows.filter(isSQLiteSearchTraceRow).map(mapSQLiteSearchTraceRow)\n : [];\n const pruned = applyRAGSearchTracePrunePolicy({\n input,\n traces,\n });\n\n for (const trace of pruned.removed) {\n remove.run(trace.id);\n }\n\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n };\n },\n };\n};\n\nexport const createRAGSQLiteSearchTracePruneHistoryStore = (\n options: SQLiteRAGSearchTracePruneHistoryStoreOptions,\n): RAGSearchTracePruneHistoryStore => {\n const tableName = options.tableName ?? \"rag_search_trace_prune_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\ttrigger TEXT NOT NULL,\n\t\t\tstarted_at INTEGER NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\telapsed_ms INTEGER NOT NULL,\n\t\t\trun_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_trigger_finished_at_idx ON ${tableName} (trigger, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\ttrigger,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\trun_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\ttrigger,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\trun_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\ttrigger = excluded.trigger,\n\t\t\tstarted_at = excluded.started_at,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\telapsed_ms = excluded.elapsed_ms,\n\t\t\trun_json = excluded.run_json\n\t`);\n\n return {\n listRuns(input) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input?.trigger) {\n where.push(\"trigger = ?\");\n params.push(input.trigger);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const runs = Array.isArray(rows)\n ? rows\n .filter(isSQLiteSearchTracePruneHistoryRow)\n .map(mapSQLiteSearchTracePruneHistoryRow)\n : [];\n const sorted = normalizeSearchTracePruneRuns(runs);\n return typeof input?.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRun(run) {\n insert.run(\n run.id,\n run.trigger,\n run.startedAt,\n run.finishedAt,\n run.elapsedMs,\n JSON.stringify(run),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalComparisonHistoryStore = (\n options: SQLiteRAGRetrievalComparisonHistoryStoreOptions,\n): RAGRetrievalComparisonHistoryStore => {\n const tableName =\n options.tableName ?? DEFAULT_RETRIEVAL_COMPARISON_HISTORY_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tsuite_id TEXT NOT NULL,\n\t\t\tsuite_label TEXT NOT NULL,\n\t\t\tlabel TEXT NOT NULL,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\ttags_json TEXT,\n\t\t\tstarted_at INTEGER NOT NULL,\n\t\t\tfinished_at INTEGER NOT NULL,\n\t\t\telapsed_ms INTEGER NOT NULL,\n\t\t\tcomparison_json TEXT NOT NULL,\n\t\t\tdecision_summary_json TEXT\n\t\t)\n\t`);\n ensureSQLiteColumns(db, tableName, [\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ]);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_suite_finished_at_idx ON ${tableName} (suite_id, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_finished_at_idx ON ${tableName} (group_key, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_finished_at_idx ON ${tableName} (corpus_group_key, finished_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_finished_at_idx ON ${tableName} (finished_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tsuite_label,\n\t\t\tlabel,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\tcomparison_json,\n\t\t\tdecision_summary_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tsuite_id,\n\t\t\tsuite_label,\n\t\t\tlabel,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttags_json,\n\t\t\tstarted_at,\n\t\t\tfinished_at,\n\t\t\telapsed_ms,\n\t\t\tcomparison_json,\n\t\t\tdecision_summary_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tsuite_id = excluded.suite_id,\n\t\t\tsuite_label = excluded.suite_label,\n\t\t\tlabel = excluded.label,\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttags_json = excluded.tags_json,\n\t\t\tstarted_at = excluded.started_at,\n\t\t\tfinished_at = excluded.finished_at,\n\t\t\telapsed_ms = excluded.elapsed_ms,\n\t\t\tcomparison_json = excluded.comparison_json,\n\t\t\tdecision_summary_json = excluded.decision_summary_json\n\t`);\n\n return {\n listRuns(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.suiteId) {\n where.push(\"suite_id = ?\");\n params.push(input.suiteId);\n }\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY finished_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const runs = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalComparisonHistoryRow)\n .map(mapSQLiteRetrievalComparisonHistoryRow)\n : [];\n const normalizedLabel = normalizeLabelFilter(input.label);\n const filtered = normalizeRetrievalComparisonRuns(\n runs.filter(\n (entry) =>\n (!input.tag || (entry.tags ?? []).includes(input.tag)) &&\n (!normalizedLabel ||\n entry.label.toLowerCase().includes(normalizedLabel) ||\n entry.suiteLabel.toLowerCase().includes(normalizedLabel)) &&\n matchesWinner(entry, input.winnerId),\n ),\n );\n\n return typeof input.limit === \"number\"\n ? filtered.slice(0, input.limit)\n : filtered;\n },\n saveRun(run) {\n insert.run(\n run.id,\n run.suiteId,\n run.suiteLabel,\n run.label,\n run.corpusGroupKey ?? null,\n run.groupKey ?? null,\n JSON.stringify(run.tags ?? []),\n run.startedAt,\n run.finishedAt,\n run.elapsedMs,\n JSON.stringify(run.comparison),\n run.decisionSummary === undefined\n ? null\n : JSON.stringify(run.decisionSummary),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalReleaseDecisionStore = (\n options: SQLiteRAGRetrievalReleaseDecisionStoreOptions,\n): RAGRetrievalReleaseDecisionStore => {\n const tableName =\n options.tableName ?? DEFAULT_RETRIEVAL_RELEASE_DECISION_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\tkind TEXT NOT NULL,\n\t\t\tdecided_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n ensureSQLiteColumns(db, tableName, [\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ]);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_decided_at_idx ON ${tableName} (corpus_group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_kind_decided_at_idx ON ${tableName} (kind, decided_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\tkind = excluded.kind,\n\t\t\tdecided_at = excluded.decided_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listDecisions(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.kind) {\n where.push(\"kind = ?\");\n params.push(input.kind);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY decided_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const decisions = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalReleaseDecisionRow)\n .map(mapSQLiteRetrievalReleaseDecisionRow)\n : [];\n const sorted = normalizeRetrievalReleaseDecisionRecords(decisions);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveDecision(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.kind,\n record.decidedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalBaselineStore = (\n options: SQLiteRAGRetrievalBaselineStoreOptions,\n): RAGRetrievalBaselineStore => {\n const tableName = options.tableName ?? DEFAULT_RETRIEVAL_BASELINE_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\trollout_label TEXT,\n\t\t\tpromoted_at INTEGER NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\tversion INTEGER NOT NULL,\n\t\t\ttags_json TEXT,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n ensureSQLiteColumns(db, tableName, [\n { definition: \"TEXT\", name: \"corpus_group_key\" },\n ]);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_promoted_at_idx ON ${tableName} (group_key, promoted_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_promoted_at_idx ON ${tableName} (corpus_group_key, promoted_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_rollout_status_idx ON ${tableName} (group_key, rollout_label, status)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tpromoted_at,\n\t\t\tstatus,\n\t\t\tversion,\n\t\t\ttags_json,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tpromoted_at,\n\t\t\tstatus,\n\t\t\tversion,\n\t\t\ttags_json,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\trollout_label = excluded.rollout_label,\n\t\t\tpromoted_at = excluded.promoted_at,\n\t\t\tstatus = excluded.status,\n\t\t\tversion = excluded.version,\n\t\t\ttags_json = excluded.tags_json,\n\t\t\trecord_json = excluded.record_json\n\t`);\n const updateExisting = db.prepare(`\n\t\tUPDATE ${tableName}\n\t\tSET\n\t\t\tstatus = ?,\n\t\t\trecord_json = ?\n\t\tWHERE id = ?\n\t`);\n const currentVersion = db.prepare(`\n\t\tSELECT COALESCE(MAX(version), 0) AS max_version\n\t\tFROM ${tableName}\n\t\tWHERE group_key = ?\n\t`);\n const matchingRolloutRows = db.prepare(`\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tpromoted_at,\n\t\t\tstatus,\n\t\t\tversion,\n\t\t\ttags_json,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t\tWHERE group_key = ?\n\t\t\tAND (\n\t\t\t\t(rollout_label IS NULL AND ? IS NULL) OR\n\t\t\t\trollout_label = ?\n\t\t\t)\n\t`);\n\n const listBaselinesSync = (\n input: Parameters<RAGRetrievalBaselineStore[\"listBaselines\"]>[0] = {},\n ): RAGRetrievalBaselineRecord[] => {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY promoted_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const baselines = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalBaselineRow)\n .map(mapSQLiteRetrievalBaselineRow)\n : [];\n const tag = typeof input.tag === \"string\" ? input.tag : undefined;\n const filtered = tag\n ? baselines.filter((entry) => (entry.tags ?? []).includes(tag))\n : baselines;\n const sorted = normalizeRetrievalBaselineRecords(filtered);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n };\n\n return {\n getBaseline(groupKey) {\n const baselines = listBaselinesSync({ groupKey, limit: 1 });\n return Promise.resolve(baselines[0] ?? null);\n },\n listBaselines(input) {\n return Promise.resolve(listBaselinesSync(input));\n },\n saveBaseline(record) {\n const versionRow = currentVersion.get(record.groupKey) as\n | { max_version?: number }\n | undefined;\n const nextVersion =\n typeof record.version === \"number\"\n ? record.version\n : (versionRow?.max_version ?? 0) + 1;\n const nextRecord: RAGRetrievalBaselineRecord = {\n ...record,\n status: \"active\",\n version: nextVersion,\n };\n\n const rows = matchingRolloutRows.all(\n record.groupKey,\n record.rolloutLabel ?? null,\n record.rolloutLabel ?? null,\n );\n const existing = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalBaselineRow)\n .map(mapSQLiteRetrievalBaselineRow)\n : [];\n\n for (const entry of existing) {\n updateExisting.run(\n \"superseded\",\n JSON.stringify({\n ...entry,\n status: \"superseded\",\n }),\n entry.id,\n );\n }\n\n insert.run(\n nextRecord.id,\n nextRecord.corpusGroupKey ?? null,\n nextRecord.groupKey,\n nextRecord.rolloutLabel ?? null,\n nextRecord.promotedAt,\n nextRecord.status,\n nextRecord.version,\n JSON.stringify(nextRecord.tags ?? []),\n JSON.stringify(nextRecord),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalReleaseIncidentStore = (\n options: SQLiteRAGRetrievalReleaseIncidentStoreOptions,\n): RAGRetrievalReleaseIncidentStore => {\n const tableName =\n options.tableName ?? DEFAULT_RETRIEVAL_RELEASE_INCIDENT_TABLE_NAME;\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\tseverity TEXT NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\ttriggered_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_triggered_at_idx ON ${tableName} (group_key, triggered_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_status_idx ON ${tableName} (corpus_group_key, status, triggered_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tseverity = excluded.severity,\n\t\t\tstatus = excluded.status,\n\t\t\ttriggered_at = excluded.triggered_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listIncidents(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n if (input.severity) {\n where.push(\"severity = ?\");\n params.push(input.severity);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY triggered_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const incidents = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalReleaseIncidentRow)\n .map(mapSQLiteRetrievalReleaseIncidentRow)\n : [];\n const sorted = normalizeRetrievalReleaseIncidentRecords(incidents);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveIncident(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.severity,\n record.status,\n record.triggeredAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffDecisionStore = (\n options: SQLiteRAGRetrievalLaneHandoffDecisionStoreOptions,\n): RAGRetrievalLaneHandoffDecisionStore => {\n const tableName = options.tableName ?? \"rag_retrieval_lane_handoff_decisions\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\tsource_rollout_label TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT NOT NULL,\n\t\t\tkind TEXT NOT NULL,\n\t\t\tdecided_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_rollout_idx ON ${tableName} (corpus_group_key, source_rollout_label, target_rollout_label, decided_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tsource_rollout_label,\n\t\t\ttarget_rollout_label,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\tsource_rollout_label,\n\t\t\ttarget_rollout_label,\n\t\t\tkind,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\tsource_rollout_label = excluded.source_rollout_label,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tkind = excluded.kind,\n\t\t\tdecided_at = excluded.decided_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listDecisions(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.kind) {\n where.push(\"kind = ?\");\n params.push(input.kind);\n }\n\n if (input.sourceRolloutLabel) {\n where.push(\"source_rollout_label = ?\");\n params.push(input.sourceRolloutLabel);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY decided_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const decisions = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalLaneHandoffDecisionRow)\n .map(mapSQLiteRetrievalLaneHandoffDecisionRow)\n : [];\n const sorted = normalizeRetrievalLaneHandoffDecisionRecords(decisions);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveDecision(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.sourceRolloutLabel,\n record.targetRolloutLabel,\n record.kind,\n record.decidedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffIncidentStore = (\n options: SQLiteRAGRetrievalLaneHandoffIncidentStoreOptions,\n): RAGRetrievalLaneHandoffIncidentStore => {\n const tableName = options.tableName ?? \"rag_retrieval_lane_handoff_incidents\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\tsource_rollout_label TEXT,\n\t\t\tseverity TEXT NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\ttriggered_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_triggered_at_idx ON ${tableName} (group_key, triggered_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_status_idx ON ${tableName} (corpus_group_key, status, triggered_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tsource_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tsource_rollout_label,\n\t\t\tseverity,\n\t\t\tstatus,\n\t\t\ttriggered_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tsource_rollout_label = excluded.source_rollout_label,\n\t\t\tseverity = excluded.severity,\n\t\t\tstatus = excluded.status,\n\t\t\ttriggered_at = excluded.triggered_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listIncidents(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n if (input.severity) {\n where.push(\"severity = ?\");\n params.push(input.severity);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY triggered_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const incidents = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalLaneHandoffIncidentRow)\n .map(mapSQLiteRetrievalLaneHandoffIncidentRow)\n : [];\n const sorted = normalizeRetrievalReleaseIncidentRecords(\n incidents as RAGRetrievalReleaseIncidentRecord[],\n ) as RAGRetrievalLaneHandoffIncidentRecord[];\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveIncident(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.sourceRolloutLabel ?? null,\n record.severity,\n record.status,\n record.triggeredAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalLaneHandoffIncidentHistoryStore = (\n options: SQLiteRAGRetrievalLaneHandoffIncidentHistoryStoreOptions,\n): RAGRetrievalLaneHandoffIncidentHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_lane_handoff_incident_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tincident_id TEXT NOT NULL,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\taction TEXT NOT NULL,\n\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_incident_recorded_at_idx ON ${tableName} (incident_id, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tincident_id = excluded.incident_id,\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\taction = excluded.action,\n\t\t\trecorded_at = excluded.recorded_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.incidentId) {\n where.push(\"incident_id = ?\");\n params.push(input.incidentId);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n if (input.action) {\n where.push(\"action = ?\");\n params.push(input.action);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalLaneHandoffIncidentHistoryRow)\n .map(mapSQLiteRetrievalLaneHandoffIncidentHistoryRow)\n : [];\n\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.incidentId,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.action,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalIncidentRemediationDecisionStore = (\n options: SQLiteRAGRetrievalIncidentRemediationDecisionStoreOptions,\n): RAGRetrievalIncidentRemediationDecisionStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_incident_remediation_decisions\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tincident_id TEXT NOT NULL,\n\t\t\tgroup_key TEXT NOT NULL,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\tremediation_kind TEXT NOT NULL,\n\t\t\tstatus TEXT NOT NULL,\n\t\t\tdecided_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_decided_at_idx ON ${tableName} (group_key, decided_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_incident_status_idx ON ${tableName} (incident_id, status, decided_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tremediation_kind,\n\t\t\tstatus,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\tremediation_kind,\n\t\t\tstatus,\n\t\t\tdecided_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tincident_id = excluded.incident_id,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\tremediation_kind = excluded.remediation_kind,\n\t\t\tstatus = excluded.status,\n\t\t\tdecided_at = excluded.decided_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.incidentId) {\n where.push(\"incident_id = ?\");\n params.push(input.incidentId);\n }\n\n if (input.remediationKind) {\n where.push(\"remediation_kind = ?\");\n params.push(input.remediationKind);\n }\n\n if (input.status) {\n where.push(\"status = ?\");\n params.push(input.status);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY decided_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalIncidentRemediationDecisionRow)\n .map(mapSQLiteRetrievalIncidentRemediationDecisionRow)\n : [];\n const sorted =\n normalizeRetrievalIncidentRemediationDecisionRecords(records);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.incidentId,\n record.groupKey,\n record.targetRolloutLabel ?? null,\n record.remediationKind,\n record.status,\n record.decidedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalIncidentRemediationExecutionHistoryStore =\n (\n options: SQLiteRAGRetrievalIncidentRemediationExecutionHistoryStoreOptions,\n ): RAGRetrievalIncidentRemediationExecutionHistoryStore => {\n const tableName =\n options.tableName ??\n \"rag_retrieval_incident_remediation_execution_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tincident_id TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\ttarget_rollout_label TEXT,\n\t\t\taction_kind TEXT NOT NULL,\n\t\t\tcode TEXT NOT NULL,\n\t\t\tblocked_by_guardrail INTEGER NOT NULL,\n\t\t\tidempotent_replay INTEGER NOT NULL,\n\t\t\texecuted_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_executed_at_idx ON ${tableName} (group_key, executed_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_incident_code_idx ON ${tableName} (incident_id, code, executed_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction_kind,\n\t\t\tcode,\n\t\t\tblocked_by_guardrail,\n\t\t\tidempotent_replay,\n\t\t\texecuted_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tincident_id,\n\t\t\tgroup_key,\n\t\t\ttarget_rollout_label,\n\t\t\taction_kind,\n\t\t\tcode,\n\t\t\tblocked_by_guardrail,\n\t\t\tidempotent_replay,\n\t\t\texecuted_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tincident_id = excluded.incident_id,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\taction_kind = excluded.action_kind,\n\t\t\tcode = excluded.code,\n\t\t\tblocked_by_guardrail = excluded.blocked_by_guardrail,\n\t\t\tidempotent_replay = excluded.idempotent_replay,\n\t\t\texecuted_at = excluded.executed_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n\n if (input.incidentId) {\n where.push(\"incident_id = ?\");\n params.push(input.incidentId);\n }\n\n if (input.actionKind) {\n where.push(\"action_kind = ?\");\n params.push(input.actionKind);\n }\n\n if (input.code) {\n where.push(\"code = ?\");\n params.push(input.code);\n }\n\n if (typeof input.blockedByGuardrail === \"boolean\") {\n where.push(\"blocked_by_guardrail = ?\");\n params.push(input.blockedByGuardrail ? 1 : 0);\n }\n\n if (typeof input.idempotentReplay === \"boolean\") {\n where.push(\"idempotent_replay = ?\");\n params.push(input.idempotentReplay ? 1 : 0);\n }\n\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY executed_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteRetrievalIncidentRemediationExecutionHistoryRow)\n .map(mapSQLiteRetrievalIncidentRemediationExecutionHistoryRow)\n : [];\n const sorted =\n normalizeRetrievalIncidentRemediationExecutionHistoryRecords(records);\n\n return typeof input.limit === \"number\"\n ? sorted.slice(0, input.limit)\n : sorted;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.incidentId ?? null,\n record.groupKey ?? null,\n record.targetRolloutLabel ?? null,\n record.action.kind,\n record.code,\n record.blockedByGuardrail ? 1 : 0,\n record.idempotentReplay ? 1 : 0,\n record.executedAt,\n JSON.stringify(record),\n );\n },\n };\n };\n\nexport const createRAGSQLiteRetrievalLaneHandoffAutoCompletePolicyHistoryStore =\n (\n options: SQLiteRAGRetrievalLaneHandoffAutoCompletePolicyHistoryStoreOptions,\n ): RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore => {\n const tableName =\n options.tableName ??\n \"rag_retrieval_lane_handoff_auto_complete_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\t\tid TEXT PRIMARY KEY,\n\t\t\t\tcorpus_group_key TEXT,\n\t\t\t\tgroup_key TEXT NOT NULL,\n\t\t\t\ttarget_rollout_label TEXT NOT NULL,\n\t\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\t\trecord_json TEXT NOT NULL\n\t\t\t)\n\t\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_target_idx ON ${tableName} (corpus_group_key, target_rollout_label, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\t\tSELECT\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\tFROM ${tableName}\n\t\t`;\n const insert = db.prepare(`\n\t\t\tINSERT INTO ${tableName} (\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\t\tgroup_key = excluded.group_key,\n\t\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\t\trecorded_at = excluded.recorded_at,\n\t\t\t\trecord_json = excluded.record_json\n\t\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteLaneHandoffAutoCompletePolicyHistoryRow)\n .map(mapSQLiteLaneHandoffAutoCompletePolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n };\n\nexport const createRAGSQLiteRetrievalReleaseLanePolicyHistoryStore = (\n options: SQLiteRAGRetrievalReleaseLanePolicyHistoryStoreOptions,\n): RAGRetrievalReleaseLanePolicyHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_release_lane_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\trollout_label TEXT NOT NULL,\n\t\t\tscope TEXT NOT NULL,\n\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_rollout_recorded_at_idx ON ${tableName} (rollout_label, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_scope_idx ON ${tableName} (group_key, scope, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\trollout_label = excluded.rollout_label,\n\t\t\tscope = excluded.scope,\n\t\t\trecorded_at = excluded.recorded_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.rolloutLabel) {\n where.push(\"rollout_label = ?\");\n params.push(input.rolloutLabel);\n }\n if (input.scope) {\n where.push(\"scope = ?\");\n params.push(input.scope);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteReleaseLanePolicyHistoryRow)\n .map(mapSQLiteReleaseLanePolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey ?? null,\n record.rolloutLabel,\n record.scope,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalBaselineGatePolicyHistoryStore = (\n options: SQLiteRAGRetrievalBaselineGatePolicyHistoryStoreOptions,\n): RAGRetrievalBaselineGatePolicyHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_baseline_gate_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\tid TEXT PRIMARY KEY,\n\t\t\tcorpus_group_key TEXT,\n\t\t\tgroup_key TEXT,\n\t\t\trollout_label TEXT NOT NULL,\n\t\t\tscope TEXT NOT NULL,\n\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\trecord_json TEXT NOT NULL\n\t\t)\n\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_rollout_recorded_at_idx ON ${tableName} (rollout_label, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_scope_idx ON ${tableName} (group_key, scope, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\tSELECT\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\tFROM ${tableName}\n\t`;\n const insert = db.prepare(`\n\t\tINSERT INTO ${tableName} (\n\t\t\tid,\n\t\t\tcorpus_group_key,\n\t\t\tgroup_key,\n\t\t\trollout_label,\n\t\t\tscope,\n\t\t\trecorded_at,\n\t\t\trecord_json\n\t\t) VALUES (?, ?, ?, ?, ?, ?, ?)\n\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\tgroup_key = excluded.group_key,\n\t\t\trollout_label = excluded.rollout_label,\n\t\t\tscope = excluded.scope,\n\t\t\trecorded_at = excluded.recorded_at,\n\t\t\trecord_json = excluded.record_json\n\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.rolloutLabel) {\n where.push(\"rollout_label = ?\");\n params.push(input.rolloutLabel);\n }\n if (input.scope) {\n where.push(\"scope = ?\");\n params.push(input.scope);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteBaselineGatePolicyHistoryRow)\n .map(mapSQLiteBaselineGatePolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey ?? null,\n record.rolloutLabel,\n record.scope,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGSQLiteRetrievalReleaseLaneEscalationPolicyHistoryStore = (\n options: SQLiteRAGRetrievalReleaseLaneEscalationPolicyHistoryStoreOptions,\n): RAGRetrievalReleaseLaneEscalationPolicyHistoryStore => {\n const tableName =\n options.tableName ?? \"rag_retrieval_release_lane_escalation_policy_history\";\n assertSupportedIdentifier(tableName);\n\n const db =\n options.db ??\n new (loadBunSQLiteModule().Database)(options.path ?? \":memory:\");\n\n db.exec(`\n\t\t\tCREATE TABLE IF NOT EXISTS ${tableName} (\n\t\t\t\tid TEXT PRIMARY KEY,\n\t\t\t\tcorpus_group_key TEXT,\n\t\t\t\tgroup_key TEXT NOT NULL,\n\t\t\t\ttarget_rollout_label TEXT NOT NULL,\n\t\t\t\trecorded_at INTEGER NOT NULL,\n\t\t\t\trecord_json TEXT NOT NULL\n\t\t\t)\n\t\t`);\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_group_recorded_at_idx ON ${tableName} (group_key, recorded_at DESC)`,\n );\n db.exec(\n `CREATE INDEX IF NOT EXISTS ${tableName}_corpus_target_idx ON ${tableName} (corpus_group_key, target_rollout_label, recorded_at DESC)`,\n );\n\n const listBase = `\n\t\t\tSELECT\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\tFROM ${tableName}\n\t\t`;\n const insert = db.prepare(`\n\t\t\tINSERT INTO ${tableName} (\n\t\t\t\tid,\n\t\t\t\tcorpus_group_key,\n\t\t\t\tgroup_key,\n\t\t\t\ttarget_rollout_label,\n\t\t\t\trecorded_at,\n\t\t\t\trecord_json\n\t\t\t) VALUES (?, ?, ?, ?, ?, ?)\n\t\t\tON CONFLICT(id) DO UPDATE SET\n\t\t\t\tcorpus_group_key = excluded.corpus_group_key,\n\t\t\t\tgroup_key = excluded.group_key,\n\t\t\t\ttarget_rollout_label = excluded.target_rollout_label,\n\t\t\t\trecorded_at = excluded.recorded_at,\n\t\t\t\trecord_json = excluded.record_json\n\t\t`);\n\n return {\n listRecords(input = {}) {\n const where: string[] = [];\n const params: Array<string | number> = [];\n\n if (input.corpusGroupKey) {\n where.push(\"corpus_group_key = ?\");\n params.push(input.corpusGroupKey);\n }\n if (input.groupKey) {\n where.push(\"group_key = ?\");\n params.push(input.groupKey);\n }\n if (input.targetRolloutLabel) {\n where.push(\"target_rollout_label = ?\");\n params.push(input.targetRolloutLabel);\n }\n\n const sql =\n `${listBase}${where.length > 0 ? ` WHERE ${where.join(\" AND \")}` : \"\"} ` +\n \"ORDER BY recorded_at DESC\";\n const rows = db.prepare(sql).all(...params);\n const records = Array.isArray(rows)\n ? rows\n .filter(isSQLiteReleaseLaneEscalationPolicyHistoryRow)\n .map(mapSQLiteReleaseLaneEscalationPolicyHistoryRow)\n : [];\n return typeof input.limit === \"number\"\n ? records.slice(0, input.limit)\n : records;\n },\n saveRecord(record) {\n insert.run(\n record.id,\n record.corpusGroupKey ?? null,\n record.groupKey,\n record.targetRolloutLabel,\n record.recordedAt,\n JSON.stringify(record),\n );\n },\n };\n};\n\nexport const createRAGFileAnswerGroundingEvaluationHistoryStore = (\n path: string,\n): RAGAnswerGroundingEvaluationHistoryStore => ({\n async listRuns(input) {\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingEvaluationRun[];\n };\n const runs = Array.isArray(data.runs) ? data.runs : [];\n const filtered = input?.suiteId\n ? runs.filter((run) => run.suiteId === input.suiteId)\n : runs;\n\n return filtered\n .sort(toGroundingHistorySortOrder)\n .slice(0, input?.limit ?? DEFAULT_HISTORY_LIMIT);\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return [];\n }\n\n throw error;\n }\n },\n async saveRun(run) {\n let runs: RAGAnswerGroundingEvaluationRun[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingEvaluationRun[];\n };\n runs = Array.isArray(data.runs) ? data.runs : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const nextRuns = normalizeGroundingHistoryRuns([\n run,\n ...runs.filter((entry) => entry.id !== run.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n runs: nextRuns,\n },\n null,\n 2,\n ),\n );\n },\n async pruneRuns(input) {\n let runs: RAGAnswerGroundingEvaluationRun[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingEvaluationRun[];\n };\n runs = Array.isArray(data.runs) ? data.runs : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const pruned = applyRAGEvaluationHistoryPrunePolicy({\n input,\n runs,\n sort: normalizeGroundingHistoryRuns,\n });\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n runs: pruned.next,\n },\n null,\n 2,\n ),\n );\n return {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n } satisfies RAGEvaluationHistoryPruneResult;\n },\n});\n\nexport const createRAGFileAnswerGroundingCaseDifficultyHistoryStore = (\n path: string,\n): RAGAnswerGroundingCaseDifficultyHistoryStore => ({\n async listRuns(input) {\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingCaseDifficultyRun[];\n };\n const runs = Array.isArray(data.runs) ? data.runs : [];\n const filtered = input?.suiteId\n ? runs.filter((run) => run.suiteId === input.suiteId)\n : runs;\n\n return normalizeGroundingDifficultyHistoryRuns(filtered).slice(\n 0,\n input?.limit ?? DEFAULT_HISTORY_LIMIT,\n );\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n ) {\n return [];\n }\n\n throw error;\n }\n },\n async saveRun(run) {\n let runs: RAGAnswerGroundingCaseDifficultyRun[] = [];\n try {\n const raw = await readFile(path, \"utf8\");\n const data = JSON.parse(raw) as {\n runs?: RAGAnswerGroundingCaseDifficultyRun[];\n };\n runs = Array.isArray(data.runs) ? data.runs : [];\n } catch (error) {\n if (\n !error ||\n typeof error !== \"object\" ||\n !(\"code\" in error) ||\n error.code !== \"ENOENT\"\n ) {\n throw error;\n }\n }\n\n const nextRuns = normalizeGroundingDifficultyHistoryRuns([\n run,\n ...runs.filter((entry) => entry.id !== run.id),\n ]);\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(\n path,\n JSON.stringify(\n {\n runs: nextRuns,\n },\n null,\n 2,\n ),\n );\n },\n});\n\nexport const loadRAGEvaluationHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGEvaluationHistoryStore;\n suite: RAGEvaluationSuite;\n limit?: number;\n}): Promise<RAGEvaluationHistory> => {\n const runs = normalizeHistoryRuns(\n await Promise.resolve(store.listRuns({ limit, suiteId: suite.id })),\n );\n const latestRun = runs[0];\n const previousRun = runs[1];\n\n return {\n caseTraceSnapshots: buildEvaluationCaseTraceSnapshots({\n current: latestRun,\n previous: previousRun,\n }),\n retrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n runs,\n }),\n diff:\n latestRun && previousRun\n ? buildRAGEvaluationRunDiff({\n current: latestRun,\n previous: previousRun,\n })\n : undefined,\n latestRun,\n leaderboard: buildRAGEvaluationLeaderboard(runs),\n previousRun,\n runs,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const loadRAGEvaluationSuiteSnapshotHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGEvaluationSuiteSnapshotHistoryStore;\n suite: Pick<RAGEvaluationSuite, \"id\" | \"label\">;\n limit?: number;\n}): Promise<RAGEvaluationSuiteSnapshotHistory> => {\n const snapshots = normalizeEvaluationSuiteSnapshots(\n await Promise.resolve(\n store.listSnapshots({\n limit,\n suiteId: suite.id,\n }),\n ),\n );\n const latestSnapshot = snapshots[0];\n const previousSnapshot = snapshots[1];\n\n return {\n diff:\n latestSnapshot && previousSnapshot\n ? buildRAGEvaluationSuiteSnapshotDiff({\n current: latestSnapshot,\n previous: previousSnapshot,\n })\n : undefined,\n latestSnapshot,\n previousSnapshot,\n snapshots,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const loadRAGSearchTraceHistory = async ({\n store,\n query,\n groupKey,\n tag,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGSearchTraceStore;\n query?: string;\n groupKey?: string;\n tag?: string;\n limit?: number;\n}): Promise<RAGSearchTraceHistory> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ groupKey, limit, query, tag })),\n );\n const latestTrace = traces[0];\n const previousTrace = traces[1];\n\n return {\n diff:\n latestTrace && previousTrace\n ? buildRAGSearchTraceDiff({\n current: latestTrace,\n previous: previousTrace,\n })\n : undefined,\n latestTrace,\n previousTrace,\n groupKey,\n query,\n tag,\n retrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n runs: traces.map((trace) => ({\n finishedAt: trace.finishedAt,\n id: trace.id,\n label: trace.label,\n traceSummary: trace.summary,\n })),\n }),\n traces,\n };\n};\n\nexport const loadRAGSearchTraceGroupHistory = async ({\n store,\n tag,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGSearchTraceStore;\n tag?: string;\n limit?: number;\n}): Promise<RAGSearchTraceGroupHistory> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ limit, tag })),\n );\n const grouped = new Map<string, RAGSearchTraceRecord[]>();\n\n for (const trace of traces) {\n const groupKey = trace.groupKey ?? trace.query;\n const existing = grouped.get(groupKey);\n if (existing) {\n existing.push(trace);\n continue;\n }\n grouped.set(groupKey, [trace]);\n }\n\n const groups = Array.from(grouped.entries())\n .map(([groupKey, entries]): RAGSearchTraceGroupHistoryEntry => {\n const normalizedEntries = normalizeTraceSummaryRuns(entries);\n const latestTrace = normalizedEntries[0];\n const previousTrace = normalizedEntries[1];\n\n return {\n diff:\n latestTrace && previousTrace\n ? buildRAGSearchTraceDiff({\n current: latestTrace,\n previous: previousTrace,\n })\n : undefined,\n groupKey,\n latestTrace,\n previousTrace,\n retrievalTraceTrend: buildRAGRetrievalTraceHistoryTrend({\n runs: normalizedEntries.map((trace) => ({\n finishedAt: trace.finishedAt,\n id: trace.id,\n label: trace.label,\n traceSummary: trace.summary,\n })),\n }),\n traceCount: normalizedEntries.length,\n };\n })\n .sort((left, right) => {\n const leftFinishedAt = left.latestTrace?.finishedAt ?? 0;\n const rightFinishedAt = right.latestTrace?.finishedAt ?? 0;\n return rightFinishedAt - leftFinishedAt;\n });\n\n return {\n groups,\n tag,\n };\n};\n\nexport const summarizeRAGSearchTraceStore = async ({\n store,\n tag,\n}: {\n store: RAGSearchTraceStore;\n tag?: string;\n}): Promise<RAGSearchTraceStats> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ tag })),\n );\n\n return buildRAGSearchTraceStatsFromTraces(traces);\n};\n\nexport const previewRAGSearchTraceStorePrune = async ({\n store,\n input,\n}: {\n store: RAGSearchTraceStore;\n input?: RAGSearchTracePruneInput;\n}): Promise<RAGSearchTracePrunePreview> => {\n const traces = normalizeTraceSummaryRuns(\n await Promise.resolve(store.listTraces({ tag: input?.tag })),\n );\n const pruned = applyRAGSearchTracePrunePolicy({\n input,\n traces,\n });\n\n return {\n input,\n result: {\n keptCount: pruned.keptCount,\n removedCount: pruned.removedCount,\n },\n statsAfter: buildRAGSearchTraceStatsFromTraces(pruned.next),\n statsBefore: buildRAGSearchTraceStatsFromTraces(traces),\n };\n};\n\nexport const loadRAGAnswerGroundingEvaluationHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGAnswerGroundingEvaluationHistoryStore;\n suite: Pick<RAGEvaluationSuite, \"id\" | \"label\">;\n limit?: number;\n}): Promise<RAGAnswerGroundingEvaluationHistory> => {\n const runs = normalizeGroundingHistoryRuns(\n await Promise.resolve(\n store.listRuns({\n limit,\n suiteId: suite.id,\n }),\n ),\n );\n const latestRun = runs[0];\n const previousRun = runs[1];\n\n return {\n caseSnapshots: buildGroundingCaseSnapshots({\n current: latestRun,\n previous: previousRun,\n }),\n diff:\n latestRun && previousRun\n ? buildRAGAnswerGroundingEvaluationRunDiff({\n current: latestRun,\n previous: previousRun,\n })\n : undefined,\n latestRun,\n leaderboard: buildRAGAnswerGroundingEvaluationLeaderboard(runs),\n previousRun,\n runs,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const loadRAGAnswerGroundingCaseDifficultyHistory = async ({\n store,\n suite,\n limit = DEFAULT_HISTORY_LIMIT,\n}: {\n store: RAGAnswerGroundingCaseDifficultyHistoryStore;\n suite: Pick<RAGEvaluationSuite, \"id\" | \"label\">;\n limit?: number;\n}): Promise<RAGAnswerGroundingCaseDifficultyHistory> => {\n const runs = normalizeGroundingDifficultyHistoryRuns(\n await Promise.resolve(\n store.listRuns({\n limit,\n suiteId: suite.id,\n }),\n ),\n );\n const latestRun = runs[0];\n const previousRun = runs[1];\n\n return {\n diff:\n latestRun && previousRun\n ? buildRAGAnswerGroundingCaseDifficultyRunDiff({\n current: latestRun,\n previous: previousRun,\n })\n : undefined,\n latestRun,\n previousRun,\n runs,\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n trends: buildRAGAnswerGroundingCaseDifficultyTrends({ runs }),\n };\n};\n\nexport const persistRAGEvaluationSuiteRun = async ({\n store,\n run,\n}: {\n store: RAGEvaluationHistoryStore;\n run: RAGEvaluationSuiteRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGAnswerGroundingEvaluationRun = async ({\n store,\n run,\n}: {\n store: RAGAnswerGroundingEvaluationHistoryStore;\n run: RAGAnswerGroundingEvaluationRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGAnswerGroundingCaseDifficultyRun = async ({\n store,\n run,\n}: {\n store: RAGAnswerGroundingCaseDifficultyHistoryStore;\n run: RAGAnswerGroundingCaseDifficultyRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGSearchTraceRecord = async ({\n store,\n record,\n}: {\n store: RAGSearchTraceStore;\n record: RAGSearchTraceRecord;\n}) => {\n await Promise.resolve(store.saveTrace(record));\n return record;\n};\n\nexport const pruneRAGSearchTraceStore = async ({\n store,\n input,\n}: {\n store: RAGSearchTraceStore;\n input?: RAGSearchTracePruneInput;\n}): Promise<RAGSearchTracePruneResult> =>\n Promise.resolve(store.pruneTraces(input));\n\nexport const persistRAGSearchTracePruneRun = async ({\n store,\n run,\n}: {\n store: RAGSearchTracePruneHistoryStore;\n run: RAGSearchTracePruneRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const persistRAGRetrievalComparisonRun = async ({\n store,\n run,\n}: {\n store: RAGRetrievalComparisonHistoryStore;\n run: RAGRetrievalComparisonRun;\n}) => {\n await Promise.resolve(store.saveRun(run));\n return run;\n};\n\nexport const buildRAGRetrievalComparisonDecisionSummary = ({\n comparison,\n baselineRetrievalId,\n candidateRetrievalId,\n policy,\n}: {\n comparison: RAGRetrievalComparison;\n baselineRetrievalId?: string;\n candidateRetrievalId?: string;\n policy?: RAGRetrievalBaselineGatePolicy;\n}): RAGRetrievalComparisonDecisionSummary | undefined => {\n const baselineEntry =\n findRetrievalComparisonEntry(comparison, baselineRetrievalId) ??\n comparison.entries[0];\n const candidateEntry =\n findRetrievalComparisonEntry(comparison, candidateRetrievalId) ??\n comparison.entries.find(\n (entry) => entry.retrievalId !== baselineEntry?.retrievalId,\n ) ??\n comparison.entries[1];\n\n if (!baselineEntry && !candidateEntry) {\n return undefined;\n }\n\n const delta =\n baselineEntry && candidateEntry\n ? {\n averageF1Delta:\n candidateEntry.response.summary.averageF1 -\n baselineEntry.response.summary.averageF1,\n elapsedMsDelta:\n candidateEntry.response.elapsedMs -\n baselineEntry.response.elapsedMs,\n passingRateDelta:\n candidateEntry.response.passingRate -\n baselineEntry.response.passingRate,\n ...(countPresentationCueCases(baselineEntry, \"title\") > 0 ||\n countPresentationCueCases(candidateEntry, \"title\") > 0\n ? {\n presentationTitleCueCasesDelta:\n countPresentationCueCases(candidateEntry, \"title\") -\n countPresentationCueCases(baselineEntry, \"title\"),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"body\") > 0 ||\n countPresentationCueCases(candidateEntry, \"body\") > 0\n ? {\n presentationBodyCueCasesDelta:\n countPresentationCueCases(candidateEntry, \"body\") -\n countPresentationCueCases(baselineEntry, \"body\"),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"notes\") > 0 ||\n countPresentationCueCases(candidateEntry, \"notes\") > 0\n ? {\n presentationNotesCueCasesDelta:\n countPresentationCueCases(candidateEntry, \"notes\") -\n countPresentationCueCases(baselineEntry, \"notes\"),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"sheet\") > 0 ||\n countSpreadsheetCueCases(candidateEntry, \"sheet\") > 0\n ? {\n spreadsheetSheetCueCasesDelta:\n countSpreadsheetCueCases(candidateEntry, \"sheet\") -\n countSpreadsheetCueCases(baselineEntry, \"sheet\"),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"table\") > 0 ||\n countSpreadsheetCueCases(candidateEntry, \"table\") > 0\n ? {\n spreadsheetTableCueCasesDelta:\n countSpreadsheetCueCases(candidateEntry, \"table\") -\n countSpreadsheetCueCases(baselineEntry, \"table\"),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"column\") > 0 ||\n countSpreadsheetCueCases(candidateEntry, \"column\") > 0\n ? {\n spreadsheetColumnCueCasesDelta:\n countSpreadsheetCueCases(candidateEntry, \"column\") -\n countSpreadsheetCueCases(baselineEntry, \"column\"),\n }\n : {}),\n multiVectorCollapsedCasesDelta:\n (candidateEntry.traceSummary?.multiVectorCollapsedCases ?? 0) -\n (baselineEntry.traceSummary?.multiVectorCollapsedCases ?? 0),\n multiVectorLexicalHitCasesDelta:\n (candidateEntry.traceSummary?.multiVectorLexicalHitCases ?? 0) -\n (baselineEntry.traceSummary?.multiVectorLexicalHitCases ?? 0),\n multiVectorVectorHitCasesDelta:\n (candidateEntry.traceSummary?.multiVectorVectorHitCases ?? 0) -\n (baselineEntry.traceSummary?.multiVectorVectorHitCases ?? 0),\n evidenceReconcileCasesDelta:\n (candidateEntry.traceSummary?.stageCounts?.evidence_reconcile ??\n 0) -\n (baselineEntry.traceSummary?.stageCounts?.evidence_reconcile ?? 0),\n officeEvidenceReconcileCasesDelta:\n (candidateEntry.traceSummary?.officeEvidenceReconcileCases ?? 0) -\n (baselineEntry.traceSummary?.officeEvidenceReconcileCases ?? 0),\n pdfEvidenceReconcileCasesDelta:\n (candidateEntry.traceSummary?.pdfEvidenceReconcileCases ?? 0) -\n (baselineEntry.traceSummary?.pdfEvidenceReconcileCases ?? 0),\n runtimeCandidateBudgetExhaustedCasesDelta:\n (candidateEntry.traceSummary\n ?.runtimeCandidateBudgetExhaustedCases ?? 0) -\n (baselineEntry.traceSummary?.runtimeCandidateBudgetExhaustedCases ??\n 0),\n runtimeUnderfilledTopKCasesDelta:\n (candidateEntry.traceSummary?.runtimeUnderfilledTopKCases ?? 0) -\n (baselineEntry.traceSummary?.runtimeUnderfilledTopKCases ?? 0),\n }\n : undefined;\n\n return {\n baseline: baselineEntry\n ? {\n averageF1: baselineEntry.response.summary.averageF1,\n elapsedMs: baselineEntry.response.elapsedMs,\n label: baselineEntry.label,\n ...(countPresentationCueCases(baselineEntry, \"title\") > 0\n ? {\n presentationTitleCueCases: countPresentationCueCases(\n baselineEntry,\n \"title\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"body\") > 0\n ? {\n presentationBodyCueCases: countPresentationCueCases(\n baselineEntry,\n \"body\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(baselineEntry, \"notes\") > 0\n ? {\n presentationNotesCueCases: countPresentationCueCases(\n baselineEntry,\n \"notes\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"sheet\") > 0\n ? {\n spreadsheetSheetCueCases: countSpreadsheetCueCases(\n baselineEntry,\n \"sheet\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"table\") > 0\n ? {\n spreadsheetTableCueCases: countSpreadsheetCueCases(\n baselineEntry,\n \"table\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(baselineEntry, \"column\") > 0\n ? {\n spreadsheetColumnCueCases: countSpreadsheetCueCases(\n baselineEntry,\n \"column\",\n ),\n }\n : {}),\n multiVectorCollapsedCases:\n baselineEntry.traceSummary?.multiVectorCollapsedCases,\n multiVectorLexicalHitCases:\n baselineEntry.traceSummary?.multiVectorLexicalHitCases,\n multiVectorVectorHitCases:\n baselineEntry.traceSummary?.multiVectorVectorHitCases,\n evidenceReconcileCases:\n baselineEntry.traceSummary?.stageCounts?.evidence_reconcile,\n officeEvidenceReconcileCases:\n baselineEntry.traceSummary?.officeEvidenceReconcileCases,\n pdfEvidenceReconcileCases:\n baselineEntry.traceSummary?.pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCases:\n baselineEntry.traceSummary?.runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCases:\n baselineEntry.traceSummary?.runtimeUnderfilledTopKCases,\n passingRate: baselineEntry.response.passingRate,\n retrievalId: baselineEntry.retrievalId,\n }\n : undefined,\n baselineRetrievalId: baselineEntry?.retrievalId,\n candidate: candidateEntry\n ? {\n averageF1: candidateEntry.response.summary.averageF1,\n elapsedMs: candidateEntry.response.elapsedMs,\n label: candidateEntry.label,\n ...(countPresentationCueCases(candidateEntry, \"title\") > 0\n ? {\n presentationTitleCueCases: countPresentationCueCases(\n candidateEntry,\n \"title\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(candidateEntry, \"body\") > 0\n ? {\n presentationBodyCueCases: countPresentationCueCases(\n candidateEntry,\n \"body\",\n ),\n }\n : {}),\n ...(countPresentationCueCases(candidateEntry, \"notes\") > 0\n ? {\n presentationNotesCueCases: countPresentationCueCases(\n candidateEntry,\n \"notes\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(candidateEntry, \"sheet\") > 0\n ? {\n spreadsheetSheetCueCases: countSpreadsheetCueCases(\n candidateEntry,\n \"sheet\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(candidateEntry, \"table\") > 0\n ? {\n spreadsheetTableCueCases: countSpreadsheetCueCases(\n candidateEntry,\n \"table\",\n ),\n }\n : {}),\n ...(countSpreadsheetCueCases(candidateEntry, \"column\") > 0\n ? {\n spreadsheetColumnCueCases: countSpreadsheetCueCases(\n candidateEntry,\n \"column\",\n ),\n }\n : {}),\n multiVectorCollapsedCases:\n candidateEntry.traceSummary?.multiVectorCollapsedCases,\n multiVectorLexicalHitCases:\n candidateEntry.traceSummary?.multiVectorLexicalHitCases,\n multiVectorVectorHitCases:\n candidateEntry.traceSummary?.multiVectorVectorHitCases,\n evidenceReconcileCases:\n candidateEntry.traceSummary?.stageCounts?.evidence_reconcile,\n officeEvidenceReconcileCases:\n candidateEntry.traceSummary?.officeEvidenceReconcileCases,\n pdfEvidenceReconcileCases:\n candidateEntry.traceSummary?.pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCases:\n candidateEntry.traceSummary?.runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCases:\n candidateEntry.traceSummary?.runtimeUnderfilledTopKCases,\n passingRate: candidateEntry.response.passingRate,\n retrievalId: candidateEntry.retrievalId,\n }\n : undefined,\n candidateRetrievalId: candidateEntry?.retrievalId,\n delta,\n fastest: comparison.summary.fastest,\n gate: evaluateRetrievalComparisonGate({ delta, policy }),\n winnerByAverageF1: comparison.summary.bestByAverageF1,\n winnerByPassingRate: comparison.summary.bestByPassingRate,\n ...(comparison.summary.bestByPresentationTitleCueCases\n ? {\n winnerByPresentationTitleCueCases:\n comparison.summary.bestByPresentationTitleCueCases,\n }\n : {}),\n ...(comparison.summary.bestByPresentationBodyCueCases\n ? {\n winnerByPresentationBodyCueCases:\n comparison.summary.bestByPresentationBodyCueCases,\n }\n : {}),\n ...(comparison.summary.bestByPresentationNotesCueCases\n ? {\n winnerByPresentationNotesCueCases:\n comparison.summary.bestByPresentationNotesCueCases,\n }\n : {}),\n ...(comparison.summary.bestBySpreadsheetSheetCueCases\n ? {\n winnerBySpreadsheetSheetCueCases:\n comparison.summary.bestBySpreadsheetSheetCueCases,\n }\n : {}),\n ...(comparison.summary.bestBySpreadsheetTableCueCases\n ? {\n winnerBySpreadsheetTableCueCases:\n comparison.summary.bestBySpreadsheetTableCueCases,\n }\n : {}),\n ...(comparison.summary.bestBySpreadsheetColumnCueCases\n ? {\n winnerBySpreadsheetColumnCueCases:\n comparison.summary.bestBySpreadsheetColumnCueCases,\n }\n : {}),\n winnerByMultivectorCollapsedCases:\n comparison.summary.bestByMultivectorCollapsedCases,\n winnerByMultivectorLexicalHitCases:\n comparison.summary.bestByMultivectorLexicalHitCases,\n winnerByMultivectorVectorHitCases:\n comparison.summary.bestByMultivectorVectorHitCases,\n winnerByEvidenceReconcileCases:\n comparison.summary.bestByEvidenceReconcileCases,\n winnerByOfficeEvidenceReconcileCases:\n comparison.summary.bestByOfficeEvidenceReconcileCases,\n winnerByPDFEvidenceReconcileCases:\n comparison.summary.bestByPDFEvidenceReconcileCases,\n winnerByLowestRuntimeCandidateBudgetExhaustedCases:\n comparison.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases,\n winnerByLowestRuntimeUnderfilledTopKCases:\n comparison.summary.bestByLowestRuntimeUnderfilledTopKCases,\n };\n};\n\nexport const loadRAGSearchTracePruneHistory = async ({\n store,\n limit,\n trigger,\n}: {\n store: RAGSearchTracePruneHistoryStore;\n limit?: number;\n trigger?: RAGSearchTracePruneRun[\"trigger\"];\n}) =>\n normalizeSearchTracePruneRuns(\n await Promise.resolve(store.listRuns({ limit, trigger })),\n );\n\nexport const loadRAGRetrievalComparisonHistory = async ({\n store,\n limit,\n suiteId,\n label,\n winnerId,\n corpusGroupKey,\n groupKey,\n tag,\n}: {\n store: RAGRetrievalComparisonHistoryStore;\n limit?: number;\n suiteId?: string;\n label?: string;\n winnerId?: string;\n corpusGroupKey?: string;\n groupKey?: string;\n tag?: string;\n}) =>\n normalizeRetrievalComparisonRuns(\n await Promise.resolve(\n store.listRuns({\n corpusGroupKey,\n groupKey,\n label,\n limit,\n suiteId,\n tag,\n winnerId,\n }),\n ),\n );\n\nexport const loadRAGRetrievalBaselines = async ({\n store,\n corpusGroupKey,\n groupKey,\n tag,\n limit,\n status,\n}: {\n store: RAGRetrievalBaselineStore;\n corpusGroupKey?: string;\n groupKey?: string;\n tag?: string;\n limit?: number;\n status?: RAGRetrievalBaselineRecord[\"status\"];\n}) =>\n normalizeRetrievalBaselineRecords(\n await Promise.resolve(\n store.listBaselines({\n corpusGroupKey,\n groupKey,\n limit,\n status,\n tag,\n }),\n ),\n );\n\nexport const persistRAGRetrievalBaseline = async ({\n store,\n record,\n}: {\n store: RAGRetrievalBaselineStore;\n record: RAGRetrievalBaselineRecord;\n}) => {\n await Promise.resolve(store.saveBaseline(record));\n return record;\n};\n\nexport const loadRAGRetrievalReleaseDecisions = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n kind,\n}: {\n store: RAGRetrievalReleaseDecisionStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n kind?: RAGRetrievalReleaseDecisionRecord[\"kind\"];\n}) =>\n normalizeRetrievalReleaseDecisionRecords(\n await Promise.resolve(\n store.listDecisions({ corpusGroupKey, groupKey, kind, limit }),\n ),\n );\n\nexport const loadRAGRetrievalLaneHandoffDecisions = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n kind,\n sourceRolloutLabel,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalLaneHandoffDecisionStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n kind?: RAGRetrievalLaneHandoffDecisionRecord[\"kind\"];\n sourceRolloutLabel?: RAGRetrievalLaneHandoffDecisionRecord[\"sourceRolloutLabel\"];\n targetRolloutLabel?: RAGRetrievalLaneHandoffDecisionRecord[\"targetRolloutLabel\"];\n}) =>\n normalizeRetrievalLaneHandoffDecisionRecords(\n await Promise.resolve(\n store.listDecisions({\n corpusGroupKey,\n groupKey,\n kind,\n limit,\n sourceRolloutLabel,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalReleaseIncidents = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n status,\n severity,\n}: {\n store: RAGRetrievalReleaseIncidentStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalReleaseIncidentRecord[\"targetRolloutLabel\"];\n status?: RAGRetrievalReleaseIncidentRecord[\"status\"];\n severity?: RAGRetrievalReleaseIncidentRecord[\"severity\"];\n}) =>\n normalizeRetrievalReleaseIncidentRecords(\n await Promise.resolve(\n store.listIncidents({\n corpusGroupKey,\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalLaneHandoffIncidents = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n status,\n severity,\n}: {\n store: RAGRetrievalLaneHandoffIncidentStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalLaneHandoffIncidentRecord[\"targetRolloutLabel\"];\n status?: RAGRetrievalLaneHandoffIncidentRecord[\"status\"];\n severity?: RAGRetrievalLaneHandoffIncidentRecord[\"severity\"];\n}) =>\n normalizeRetrievalReleaseIncidentRecords(\n (await Promise.resolve(\n store.listIncidents({\n corpusGroupKey,\n groupKey,\n limit,\n severity,\n status,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalReleaseIncidentRecord[],\n ) as RAGRetrievalLaneHandoffIncidentRecord[];\n\nexport const loadRAGRetrievalLaneHandoffIncidentHistory = async ({\n store,\n corpusGroupKey,\n action,\n groupKey,\n incidentId,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalLaneHandoffIncidentHistoryStore;\n corpusGroupKey?: string;\n action?: RAGRetrievalLaneHandoffIncidentHistoryRecord[\"action\"];\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalLaneHandoffIncidentRecord[\"targetRolloutLabel\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n action,\n groupKey,\n incidentId,\n limit,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalLaneHandoffIncidentHistoryRecord[];\n\nexport const loadRAGRetrievalIncidentRemediationDecisions = async ({\n store,\n groupKey,\n incidentId,\n limit,\n remediationKind,\n status,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalIncidentRemediationDecisionStore;\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n remediationKind?: RAGRetrievalIncidentRemediationDecisionRecord[\"remediationKind\"];\n status?: RAGRetrievalIncidentRemediationDecisionRecord[\"status\"];\n targetRolloutLabel?: RAGRetrievalIncidentRemediationDecisionRecord[\"targetRolloutLabel\"];\n}) =>\n normalizeRetrievalIncidentRemediationDecisionRecords(\n await Promise.resolve(\n store.listRecords({\n groupKey,\n incidentId,\n limit,\n remediationKind,\n status,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalIncidentRemediationExecutionHistory = async ({\n store,\n actionKind,\n blockedByGuardrail,\n code,\n groupKey,\n idempotentReplay,\n incidentId,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalIncidentRemediationExecutionHistoryStore;\n actionKind?: RAGRemediationAction[\"kind\"];\n blockedByGuardrail?: boolean;\n code?: RAGRetrievalIncidentRemediationExecutionHistoryRecord[\"code\"];\n groupKey?: string;\n idempotentReplay?: boolean;\n incidentId?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalIncidentRemediationExecutionHistoryRecord[\"targetRolloutLabel\"];\n}) =>\n normalizeRetrievalIncidentRemediationExecutionHistoryRecords(\n await Promise.resolve(\n store.listRecords({\n actionKind,\n blockedByGuardrail,\n code,\n groupKey,\n idempotentReplay,\n incidentId,\n limit,\n targetRolloutLabel,\n }),\n ),\n );\n\nexport const loadRAGRetrievalLaneHandoffAutoCompletePolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[\"targetRolloutLabel\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalReleaseLanePolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n}: {\n store: RAGRetrievalReleaseLanePolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n rolloutLabel?: RAGRetrievalReleaseLanePolicyHistoryRecord[\"rolloutLabel\"];\n scope?: RAGRetrievalReleaseLanePolicyHistoryRecord[\"scope\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n }),\n )) as RAGRetrievalReleaseLanePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalBaselineGatePolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n}: {\n store: RAGRetrievalBaselineGatePolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n rolloutLabel?: RAGRetrievalBaselineGatePolicyHistoryRecord[\"rolloutLabel\"];\n scope?: RAGRetrievalBaselineGatePolicyHistoryRecord[\"scope\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n corpusGroupKey,\n groupKey,\n limit,\n rolloutLabel,\n scope,\n }),\n )) as RAGRetrievalBaselineGatePolicyHistoryRecord[];\n\nexport const loadRAGRetrievalReleaseLaneEscalationPolicyHistory = async ({\n store,\n corpusGroupKey,\n groupKey,\n limit,\n targetRolloutLabel,\n}: {\n store: RAGRetrievalReleaseLaneEscalationPolicyHistoryStore;\n corpusGroupKey?: string;\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[\"targetRolloutLabel\"];\n}) =>\n (await Promise.resolve(\n store.listRecords({\n groupKey,\n limit,\n targetRolloutLabel,\n }),\n )) as RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord[];\n\nexport const persistRAGRetrievalReleaseDecision = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseDecisionStore;\n record: RAGRetrievalReleaseDecisionRecord;\n}) => {\n await Promise.resolve(store.saveDecision(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffDecision = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffDecisionStore;\n record: RAGRetrievalLaneHandoffDecisionRecord;\n}) => {\n await Promise.resolve(store.saveDecision(record));\n return record;\n};\n\nexport const persistRAGRetrievalReleaseIncident = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseIncidentStore;\n record: RAGRetrievalReleaseIncidentRecord;\n}) => {\n await Promise.resolve(store.saveIncident(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffIncident = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffIncidentStore;\n record: RAGRetrievalLaneHandoffIncidentRecord;\n}) => {\n await Promise.resolve(store.saveIncident(record));\n return record;\n};\n\nexport const persistRAGRetrievalIncidentRemediationDecision = async ({\n store,\n record,\n}: {\n store: RAGRetrievalIncidentRemediationDecisionStore;\n record: RAGRetrievalIncidentRemediationDecisionRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalIncidentRemediationExecutionHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalIncidentRemediationExecutionHistoryStore;\n record: RAGRetrievalIncidentRemediationExecutionHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffIncidentHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffIncidentHistoryStore;\n record: RAGRetrievalLaneHandoffIncidentHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalLaneHandoffAutoCompletePolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryStore;\n record: RAGRetrievalLaneHandoffAutoCompletePolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalReleaseLanePolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseLanePolicyHistoryStore;\n record: RAGRetrievalReleaseLanePolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalBaselineGatePolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalBaselineGatePolicyHistoryStore;\n record: RAGRetrievalBaselineGatePolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const persistRAGRetrievalReleaseLaneEscalationPolicyHistory = async ({\n store,\n record,\n}: {\n store: RAGRetrievalReleaseLaneEscalationPolicyHistoryStore;\n record: RAGRetrievalReleaseLaneEscalationPolicyHistoryRecord;\n}) => {\n await Promise.resolve(store.saveRecord(record));\n return record;\n};\n\nexport const createRAGSQLiteGovernanceStores = (\n options: SQLiteRAGGovernanceStoreBundleOptions = {},\n): Pick<\n RAGChatPluginConfig,\n | \"searchTraceStore\"\n | \"searchTracePruneHistoryStore\"\n | \"retrievalComparisonHistoryStore\"\n | \"retrievalBaselineStore\"\n | \"retrievalReleaseDecisionStore\"\n | \"retrievalLaneHandoffDecisionStore\"\n | \"retrievalLaneHandoffIncidentStore\"\n | \"retrievalLaneHandoffIncidentHistoryStore\"\n | \"retrievalLaneHandoffAutoCompletePolicyHistoryStore\"\n | \"retrievalReleaseLanePolicyHistoryStore\"\n | \"retrievalBaselineGatePolicyHistoryStore\"\n | \"retrievalReleaseLaneEscalationPolicyHistoryStore\"\n | \"retrievalReleaseIncidentStore\"\n | \"retrievalIncidentRemediationDecisionStore\"\n | \"retrievalIncidentRemediationExecutionHistoryStore\"\n> => {\n const prefix = options.tablePrefix?.trim();\n const table = (suffix: string) =>\n prefix && prefix.length > 0 ? `${prefix}_${suffix}` : suffix;\n\n return {\n searchTraceStore: createRAGSQLiteSearchTraceStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_search_traces\"),\n }),\n searchTracePruneHistoryStore: createRAGSQLiteSearchTracePruneHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_search_trace_prune_history\"),\n }),\n retrievalComparisonHistoryStore:\n createRAGSQLiteRetrievalComparisonHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_comparison_history\"),\n }),\n retrievalBaselineStore: createRAGSQLiteRetrievalBaselineStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_baselines\"),\n }),\n retrievalReleaseDecisionStore: createRAGSQLiteRetrievalReleaseDecisionStore(\n {\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_release_decisions\"),\n },\n ),\n retrievalLaneHandoffDecisionStore:\n createRAGSQLiteRetrievalLaneHandoffDecisionStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_lane_handoff_decisions\"),\n }),\n retrievalLaneHandoffIncidentStore:\n createRAGSQLiteRetrievalLaneHandoffIncidentStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_lane_handoff_incidents\"),\n }),\n retrievalLaneHandoffIncidentHistoryStore:\n createRAGSQLiteRetrievalLaneHandoffIncidentHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_lane_handoff_incident_history\"),\n }),\n retrievalLaneHandoffAutoCompletePolicyHistoryStore:\n createRAGSQLiteRetrievalLaneHandoffAutoCompletePolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\n \"rag_retrieval_lane_handoff_auto_complete_policy_history\",\n ),\n }),\n retrievalReleaseLanePolicyHistoryStore:\n createRAGSQLiteRetrievalReleaseLanePolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_release_lane_policy_history\"),\n }),\n retrievalBaselineGatePolicyHistoryStore:\n createRAGSQLiteRetrievalBaselineGatePolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_baseline_gate_policy_history\"),\n }),\n retrievalReleaseLaneEscalationPolicyHistoryStore:\n createRAGSQLiteRetrievalReleaseLaneEscalationPolicyHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\n \"rag_retrieval_release_lane_escalation_policy_history\",\n ),\n }),\n retrievalReleaseIncidentStore: createRAGSQLiteRetrievalReleaseIncidentStore(\n {\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_release_incidents\"),\n },\n ),\n retrievalIncidentRemediationDecisionStore:\n createRAGSQLiteRetrievalIncidentRemediationDecisionStore({\n db: options.db,\n path: options.path,\n tableName: table(\"rag_retrieval_incident_remediation_decisions\"),\n }),\n retrievalIncidentRemediationExecutionHistoryStore:\n createRAGSQLiteRetrievalIncidentRemediationExecutionHistoryStore({\n db: options.db,\n path: options.path,\n tableName: table(\n \"rag_retrieval_incident_remediation_execution_history\",\n ),\n }),\n };\n};\n\nexport const buildRAGEvaluationResponse = (\n cases: RAGEvaluationCaseResult[],\n): RAGEvaluationResponse => {\n const totalCases = cases.length;\n const corpusKeys = [\n ...new Set(cases.flatMap((entry) => entry.corpusKey ?? [])),\n ];\n const passedCases = cases.filter((entry) => entry.status === \"pass\").length;\n const partialCases = cases.filter(\n (entry) => entry.status === \"partial\",\n ).length;\n const failedCases = cases.filter((entry) => entry.status === \"fail\").length;\n\n return {\n cases,\n ...(corpusKeys.length > 0 ? { corpusKeys } : {}),\n elapsedMs: cases.reduce((sum, result) => sum + result.elapsedMs, 0),\n ok: true,\n passingRate: totalCases > 0 ? (passedCases / totalCases) * 100 : 0,\n summary: {\n averageF1:\n cases.reduce((sum, result) => sum + result.f1, 0) / (totalCases || 1),\n averageLatencyMs:\n cases.reduce((sum, result) => sum + result.elapsedMs, 0) /\n (totalCases || 1),\n averagePrecision:\n cases.reduce((sum, result) => sum + result.precision, 0) /\n (totalCases || 1),\n averageRecall:\n cases.reduce((sum, result) => sum + result.recall, 0) /\n (totalCases || 1),\n failedCases,\n partialCases,\n passedCases,\n totalCases,\n },\n totalCases,\n };\n};\n\nconst incrementFailureCounts = (\n target: Record<string, number>,\n failureClasses: string[] | undefined,\n) => {\n for (const failureClass of failureClasses ?? []) {\n target[failureClass] = (target[failureClass] ?? 0) + 1;\n }\n};\n\nconst sortEntityQualitySummaries = <\n T extends { passingRate: number; totalCases: number; label: string },\n>(\n entries: T[],\n) =>\n entries.sort((left, right) => {\n if (right.passingRate !== left.passingRate) {\n return right.passingRate - left.passingRate;\n }\n if (right.totalCases !== left.totalCases) {\n return right.totalCases - left.totalCases;\n }\n\n return left.label.localeCompare(right.label);\n });\n\nexport const buildRAGEvaluationEntityQualityView = (\n response: RAGEvaluationResponse,\n): RAGEvaluationEntityQualityView => {\n const bySource = new Map<string, RAGEvaluationEntityQualitySummary>();\n const byDocument = new Map<string, RAGEvaluationEntityQualitySummary>();\n for (const entry of response.cases) {\n const targets =\n entry.mode === \"source\"\n ? entry.expectedIds\n : entry.mode === \"documentId\"\n ? entry.expectedIds\n : [];\n const targetMap =\n entry.mode === \"source\"\n ? bySource\n : entry.mode === \"documentId\"\n ? byDocument\n : undefined;\n if (!targetMap) {\n continue;\n }\n for (const target of targets) {\n const current =\n targetMap.get(target) ??\n ({\n averageF1: 0,\n caseIds: [],\n entityType: entry.mode === \"source\" ? \"source\" : \"document\",\n failedCases: 0,\n failureCounts: {},\n key: target,\n label: target,\n passedCases: 0,\n passingRate: 0,\n partialCases: 0,\n totalCases: 0,\n } satisfies RAGEvaluationEntityQualitySummary);\n current.totalCases += 1;\n current.averageF1 += entry.f1;\n current.caseIds.push(entry.caseId);\n if (entry.status === \"pass\") {\n current.passedCases += 1;\n } else if (entry.status === \"partial\") {\n current.partialCases += 1;\n } else {\n current.failedCases += 1;\n }\n incrementFailureCounts(current.failureCounts, entry.failureClasses);\n targetMap.set(target, current);\n }\n }\n\n for (const map of [bySource, byDocument]) {\n for (const entry of map.values()) {\n entry.averageF1 =\n entry.totalCases > 0 ? entry.averageF1 / entry.totalCases : 0;\n entry.passingRate =\n entry.totalCases > 0 ? (entry.passedCases / entry.totalCases) * 100 : 0;\n }\n }\n\n return {\n byDocument: sortEntityQualitySummaries([...byDocument.values()]),\n bySource: sortEntityQualitySummaries([...bySource.values()]),\n };\n};\n\nexport const buildRAGAnswerGroundingEntityQualityView = (\n response: RAGAnswerGroundingEvaluationResponse,\n): RAGAnswerGroundingEntityQualityView => {\n const bySource = new Map<string, RAGAnswerGroundingEntityQualitySummary>();\n const byDocument = new Map<string, RAGAnswerGroundingEntityQualitySummary>();\n for (const entry of response.cases) {\n const targetMap =\n entry.mode === \"source\"\n ? bySource\n : entry.mode === \"documentId\"\n ? byDocument\n : undefined;\n if (!targetMap) {\n continue;\n }\n for (const target of entry.expectedIds) {\n const current =\n targetMap.get(target) ??\n ({\n averageCitationF1: 0,\n averageResolvedCitationRate: 0,\n caseIds: [],\n entityType: entry.mode === \"source\" ? \"source\" : \"document\",\n failedCases: 0,\n failureCounts: {},\n key: target,\n label: target,\n passedCases: 0,\n passingRate: 0,\n partialCases: 0,\n totalCases: 0,\n } satisfies RAGAnswerGroundingEntityQualitySummary);\n current.totalCases += 1;\n current.averageCitationF1 += entry.citationF1;\n current.averageResolvedCitationRate += entry.resolvedCitationRate;\n current.caseIds.push(entry.caseId);\n if (entry.status === \"pass\") {\n current.passedCases += 1;\n } else if (entry.status === \"partial\") {\n current.partialCases += 1;\n } else {\n current.failedCases += 1;\n }\n incrementFailureCounts(current.failureCounts, entry.failureClasses);\n targetMap.set(target, current);\n }\n }\n\n for (const map of [bySource, byDocument]) {\n for (const entry of map.values()) {\n entry.averageCitationF1 =\n entry.totalCases > 0 ? entry.averageCitationF1 / entry.totalCases : 0;\n entry.averageResolvedCitationRate =\n entry.totalCases > 0\n ? entry.averageResolvedCitationRate / entry.totalCases\n : 0;\n entry.passingRate =\n entry.totalCases > 0 ? (entry.passedCases / entry.totalCases) * 100 : 0;\n }\n }\n\n return {\n byDocument: sortEntityQualitySummaries([...byDocument.values()]),\n bySource: sortEntityQualitySummaries([...bySource.values()]),\n };\n};\n\nexport const evaluateRAGAnswerGroundingCase = ({\n caseIndex,\n caseInput,\n}: {\n caseIndex: number;\n caseInput: RAGAnswerGroundingEvaluationCase;\n}): RAGAnswerGroundingEvaluationCaseResult => {\n const mode = resolveEvaluationMode(caseInput);\n const expectedIds = normalizeExpectedIds(\n mode === \"chunkId\"\n ? (caseInput.expectedChunkIds ?? [])\n : mode === \"source\"\n ? (caseInput.expectedSources ?? [])\n : (caseInput.expectedDocumentIds ?? []),\n );\n const groundedAnswer = buildRAGGroundedAnswer(\n caseInput.answer,\n caseInput.sources,\n );\n const citedReferences = groundedAnswer.parts.flatMap((part) =>\n part.type === \"citation\" ? part.references : [],\n );\n const citedIds = normalizeExpectedIds(\n citedReferences.map((reference) => extractExpectedId(reference, mode)),\n );\n const expectedSet = new Set(expectedIds);\n const citedSet = new Set(citedIds);\n const matchedIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => citedSet.has(id)),\n );\n const missingIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => !citedSet.has(id)),\n );\n const extraIds = normalizeExpectedIds(\n [...citedSet].filter((id) => !expectedSet.has(id)),\n );\n const matchedCount = matchedIds.length;\n const expectedCount = expectedIds.length;\n const citedCount = citedIds.length;\n const precision = citedCount > 0 ? matchedCount / citedCount : 0;\n const recall = expectedCount > 0 ? matchedCount / expectedCount : 0;\n const citationF1 =\n precision + recall > 0\n ? (2 * precision * recall) / (precision + recall)\n : 0;\n const citationCount = groundedAnswer.parts.filter(\n (part) => part.type === \"citation\",\n ).length;\n const unresolvedCitationCount = new Set(\n groundedAnswer.ungroundedReferenceNumbers,\n ).size;\n const resolvedCitationCount = citedReferences.length;\n const resolvedCitationRate =\n citationCount > 0 ? Math.min(1, resolvedCitationCount / citationCount) : 0;\n\n return {\n answer: caseInput.answer,\n caseId: caseInput.id ?? `case-${caseIndex + 1}`,\n citationCount,\n citationF1,\n citationPrecision: precision,\n citationRecall: recall,\n citedIds,\n coverage: groundedAnswer.coverage,\n expectedCount,\n expectedIds,\n extraIds,\n groundedAnswer,\n hasCitations: groundedAnswer.hasCitations,\n label: caseInput.label,\n matchedCount,\n matchedIds,\n failureClasses: classifyRAGGroundingFailure({\n availableSources: caseInput.sources,\n citationCount,\n expectedCount,\n extraIds,\n matchedCount,\n missingIds,\n unresolvedCitationCount,\n }),\n metadata: caseInput.metadata,\n missingIds,\n mode,\n query: caseInput.query,\n referenceCount: groundedAnswer.references.length,\n resolvedCitationCount,\n resolvedCitationRate,\n status: buildAnswerGroundingStatus({\n coverage: groundedAnswer.coverage,\n expectedCount,\n matchedCount,\n resolvedCitationCount,\n unresolvedCitationCount,\n }),\n unresolvedCitationCount,\n };\n};\n\nexport const buildRAGAnswerGroundingEvaluationResponse = (\n cases: RAGAnswerGroundingEvaluationCaseResult[],\n): RAGAnswerGroundingEvaluationResponse => {\n const totalCases = cases.length;\n const passedCases = cases.filter((entry) => entry.status === \"pass\").length;\n const partialCases = cases.filter(\n (entry) => entry.status === \"partial\",\n ).length;\n const failedCases = cases.filter((entry) => entry.status === \"fail\").length;\n const groundedCases = cases.filter(\n (entry) => entry.coverage === \"grounded\",\n ).length;\n const partiallyGroundedCases = cases.filter(\n (entry) => entry.coverage === \"partial\",\n ).length;\n const ungroundedCases = cases.filter(\n (entry) => entry.coverage === \"ungrounded\",\n ).length;\n\n return {\n cases,\n ok: true,\n passingRate: totalCases > 0 ? (passedCases / totalCases) * 100 : 0,\n summary: {\n averageCitationF1:\n cases.reduce((sum, result) => sum + result.citationF1, 0) /\n (totalCases || 1),\n averageCitationPrecision:\n cases.reduce((sum, result) => sum + result.citationPrecision, 0) /\n (totalCases || 1),\n averageCitationRecall:\n cases.reduce((sum, result) => sum + result.citationRecall, 0) /\n (totalCases || 1),\n averageResolvedCitationRate:\n cases.reduce((sum, result) => sum + result.resolvedCitationRate, 0) /\n (totalCases || 1),\n failedCases,\n groundedCases,\n partiallyGroundedCases,\n passedCases,\n partialCases,\n totalCases,\n ungroundedCases,\n },\n totalCases,\n };\n};\n\nexport const evaluateRAGAnswerGrounding = (\n input: RAGAnswerGroundingEvaluationInput,\n): RAGAnswerGroundingEvaluationResponse =>\n buildRAGAnswerGroundingEvaluationResponse(\n input.cases.map((caseInput, caseIndex) =>\n evaluateRAGAnswerGroundingCase({ caseIndex, caseInput }),\n ),\n );\nexport const compareRAGRerankers = async ({\n collection,\n suite,\n rerankers,\n defaultTopK = DEFAULT_TOP_K,\n}: {\n collection: RAGCollection;\n suite: RAGEvaluationSuite;\n rerankers: RAGRerankerCandidate[];\n defaultTopK?: number;\n}): Promise<RAGRerankerComparison> => {\n const entries = await Promise.all(\n rerankers.map(async (candidate) => {\n const evaluated = await evaluateRAGCollectionCases({\n collection,\n defaultTopK,\n input: suite.input,\n includeTrace: true,\n rerank: candidate.rerank,\n });\n const response = buildRAGEvaluationResponse(\n evaluated.map((entry) => entry.caseResult),\n );\n\n return {\n caseTraceSnapshots:\n buildEvaluationCaseTraceSnapshotsFromEvaluated(evaluated),\n label: candidate.label ?? candidate.id,\n providerName:\n typeof candidate.rerank === \"function\"\n ? undefined\n : candidate.rerank?.providerName,\n response,\n rerankerId: candidate.id,\n traceSummary: summarizeRetrievalTraces(\n evaluated\n .map((entry) => entry.trace)\n .filter((trace): trace is RAGRetrievalTrace => Boolean(trace)),\n ),\n } satisfies RAGRerankerComparisonEntry;\n }),\n );\n\n const leaderboard = buildRAGEvaluationLeaderboard(\n entries.map((entry) => ({\n elapsedMs: entry.response.elapsedMs,\n finishedAt: 0,\n id: entry.rerankerId,\n label: entry.label,\n response: entry.response,\n startedAt: 0,\n suiteId: suite.id,\n traceSummary: entry.traceSummary,\n })),\n );\n\n return {\n entries,\n leaderboard,\n summary: summarizeRAGRerankerComparison(entries),\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\nconst summarizeEvaluationResponseComparison = <\n TEntry extends {\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n) => {\n if (entries.length === 0) {\n return {};\n }\n\n const byPassingRate = [...entries].sort((left, right) => {\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const byAverageF1 = [...entries].sort(\n (left, right) =>\n right.response.summary.averageF1 - left.response.summary.averageF1,\n );\n const byLatency = [...entries].sort(\n (left, right) =>\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs,\n );\n const getId = (entry: TEntry) =>\n typeof entry[idKey] === \"string\" ? (entry[idKey] as string) : undefined;\n\n return {\n bestByAverageF1: getId(byAverageF1[0] as TEntry),\n bestByPassingRate: getId(byPassingRate[0] as TEntry),\n fastest: getId(byLatency[0] as TEntry),\n };\n};\n\nconst selectComparisonEntryByTraceMetric = <\n TEntry extends {\n traceSummary?: RAGRetrievalTraceComparisonSummary;\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n metric: keyof Pick<\n RAGRetrievalTraceComparisonSummary,\n | \"multiVectorCollapsedCases\"\n | \"multiVectorLexicalHitCases\"\n | \"multiVectorVectorHitCases\"\n | \"officeEvidenceReconcileCases\"\n | \"officeParagraphEvidenceReconcileCases\"\n | \"officeListEvidenceReconcileCases\"\n | \"officeTableEvidenceReconcileCases\"\n | \"pdfEvidenceReconcileCases\"\n >,\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = left.traceSummary?.[metric] ?? 0;\n const rightMetric = right.traceSummary?.[metric] ?? 0;\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n const leftEvidenceScore =\n (left.traceSummary?.multiVectorCollapsedCases ?? 0) +\n (left.traceSummary?.multiVectorLexicalHitCases ?? 0) +\n (left.traceSummary?.multiVectorVectorHitCases ?? 0);\n const rightEvidenceScore =\n (right.traceSummary?.multiVectorCollapsedCases ?? 0) +\n (right.traceSummary?.multiVectorLexicalHitCases ?? 0) +\n (right.traceSummary?.multiVectorVectorHitCases ?? 0);\n if (rightEvidenceScore !== leftEvidenceScore) {\n return rightEvidenceScore - leftEvidenceScore;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || (winner.traceSummary?.[metric] ?? 0) === 0) {\n return undefined;\n }\n\n return typeof winner[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst selectComparisonEntryByLowestTraceMetric = <\n TEntry extends {\n traceSummary?: RAGRetrievalTraceComparisonSummary;\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n metric: keyof Pick<\n RAGRetrievalTraceComparisonSummary,\n \"runtimeCandidateBudgetExhaustedCases\" | \"runtimeUnderfilledTopKCases\"\n >,\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = left.traceSummary?.[metric] ?? 0;\n const rightMetric = right.traceSummary?.[metric] ?? 0;\n if (leftMetric !== rightMetric) {\n return leftMetric - rightMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst selectComparisonEntryByTraceStageCount = <\n TEntry extends {\n traceSummary?: RAGRetrievalTraceComparisonSummary;\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n stage: RAGRetrievalTraceStage,\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = left.traceSummary?.stageCounts?.[stage] ?? 0;\n const rightMetric = right.traceSummary?.stageCounts?.[stage] ?? 0;\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || (winner.traceSummary?.stageCounts?.[stage] ?? 0) === 0) {\n return undefined;\n }\n\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst countPresentationCueCases = <\n TEntry extends { caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[] },\n>(\n entry: TEntry,\n cue: \"body\" | \"notes\" | \"title\",\n) =>\n (entry.caseTraceSnapshots ?? []).filter(\n (snapshot) => snapshot.leadPresentationCue === cue,\n ).length;\n\nconst selectComparisonEntryByPresentationCueCases = <\n TEntry extends {\n caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[];\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n cue: \"body\" | \"notes\" | \"title\",\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = countPresentationCueCases(left, cue);\n const rightMetric = countPresentationCueCases(right, cue);\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || countPresentationCueCases(winner, cue) === 0) {\n return undefined;\n }\n\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst countSpreadsheetCueCases = <\n TEntry extends { caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[] },\n>(\n entry: TEntry,\n cue: \"column\" | \"sheet\" | \"table\",\n) =>\n (entry.caseTraceSnapshots ?? []).filter(\n (snapshot) => snapshot.leadSpreadsheetCue === cue,\n ).length;\n\nconst selectComparisonEntryBySpreadsheetCueCases = <\n TEntry extends {\n caseTraceSnapshots?: RAGEvaluationCaseTraceSnapshot[];\n response: RAGEvaluationResponse;\n [key: string]: unknown;\n },\n>(\n entries: TEntry[],\n idKey: keyof TEntry,\n cue: \"column\" | \"sheet\" | \"table\",\n) => {\n const ranked = [...entries].sort((left, right) => {\n const leftMetric = countSpreadsheetCueCases(left, cue);\n const rightMetric = countSpreadsheetCueCases(right, cue);\n if (rightMetric !== leftMetric) {\n return rightMetric - leftMetric;\n }\n if (right.response.passingRate !== left.response.passingRate) {\n return right.response.passingRate - left.response.passingRate;\n }\n if (right.response.summary.averageF1 !== left.response.summary.averageF1) {\n return right.response.summary.averageF1 - left.response.summary.averageF1;\n }\n\n return (\n left.response.summary.averageLatencyMs -\n right.response.summary.averageLatencyMs\n );\n });\n const winner = ranked[0];\n if (!winner || countSpreadsheetCueCases(winner, cue) === 0) {\n return undefined;\n }\n\n return typeof winner?.[idKey] === \"string\"\n ? (winner[idKey] as string)\n : undefined;\n};\n\nconst resolveRetrievalMode = (\n candidate: RAGRetrievalCandidate,\n): RAGHybridRetrievalMode => {\n if (!candidate.retrieval) {\n return \"vector\";\n }\n\n return typeof candidate.retrieval === \"string\"\n ? candidate.retrieval\n : (candidate.retrieval.mode ?? \"vector\");\n};\nexport const compareRAGRetrievalStrategies = async ({\n collection,\n suite,\n retrievals,\n defaultTopK = DEFAULT_TOP_K,\n}: {\n collection: RAGCollection;\n suite: RAGEvaluationSuite;\n retrievals: RAGRetrievalCandidate[];\n defaultTopK?: number;\n}): Promise<RAGRetrievalComparison> => {\n const entries = await Promise.all(\n retrievals.map(async (candidate) => {\n const tracedCollection = {\n ...collection,\n search: (input) =>\n collection.search({\n ...input,\n queryTransform: candidate.queryTransform ?? input.queryTransform,\n rerank: candidate.rerank ?? input.rerank,\n retrieval: candidate.retrieval ?? input.retrieval,\n }),\n searchWithTrace: (input) =>\n collection.searchWithTrace({\n ...input,\n queryTransform: candidate.queryTransform ?? input.queryTransform,\n rerank: candidate.rerank ?? input.rerank,\n retrieval: candidate.retrieval ?? input.retrieval,\n }),\n } satisfies RAGCollection;\n const evaluated = await evaluateRAGCollectionCases({\n collection: {\n ...tracedCollection,\n },\n defaultTopK,\n input: suite.input,\n includeTrace: true,\n rerank: candidate.rerank,\n });\n const response = buildRAGEvaluationResponse(\n evaluated.map((entry) => entry.caseResult),\n );\n\n return {\n caseTraceSnapshots:\n buildEvaluationCaseTraceSnapshotsFromEvaluated(evaluated),\n label: candidate.label ?? candidate.id,\n response,\n retrievalId: candidate.id,\n retrievalMode: resolveRetrievalMode(candidate),\n traceSummary: summarizeRetrievalTraces(\n evaluated\n .map((entry) => entry.trace)\n .filter((trace): trace is RAGRetrievalTrace => Boolean(trace)),\n ),\n } satisfies RAGRetrievalComparisonEntry;\n }),\n );\n\n const leaderboard = buildRAGEvaluationLeaderboard(\n entries.map((entry) => ({\n elapsedMs: entry.response.elapsedMs,\n finishedAt: 0,\n id: entry.retrievalId,\n label: entry.label,\n response: entry.response,\n startedAt: 0,\n suiteId: suite.id,\n traceSummary: entry.traceSummary,\n })),\n );\n\n return {\n corpusKeys: [\n ...new Set(entries.flatMap((entry) => entry.response.corpusKeys ?? [])),\n ],\n entries,\n leaderboard,\n summary: summarizeRAGRetrievalComparison(entries),\n suiteId: suite.id,\n suiteLabel: suite.label ?? suite.id,\n };\n};\n\nexport const summarizeRAGRetrievalTraces = (\n traces: RAGRetrievalTrace[],\n): RAGRetrievalTraceComparisonSummary | undefined =>\n summarizeRetrievalTraces(traces);\n\nexport const compareRAGRetrievalTraceSummaries = (\n current: RAGRetrievalTraceComparisonSummary,\n previous: RAGRetrievalTraceComparisonSummary,\n): RAGRetrievalTraceComparisonSummaryDiff => ({\n averageCandidateTopKDelta:\n current.averageCandidateTopK - previous.averageCandidateTopK,\n averageFinalCountDelta:\n current.averageFinalCount - previous.averageFinalCount,\n averageLexicalCountDelta:\n current.averageLexicalCount - previous.averageLexicalCount,\n averageLexicalTopKDelta:\n current.averageLexicalTopK - previous.averageLexicalTopK,\n averageVectorCountDelta:\n current.averageVectorCount - previous.averageVectorCount,\n balancedCasesDelta: current.balancedCases - previous.balancedCases,\n current,\n lexicalCasesDelta: current.lexicalCases - previous.lexicalCases,\n modeDelta: buildSummaryListDelta(current.modes, previous.modes),\n previous,\n roundRobinCasesDelta: current.roundRobinCases - previous.roundRobinCases,\n sourceBalanceStrategyDelta: buildSummaryListDelta(\n current.sourceBalanceStrategies,\n previous.sourceBalanceStrategies,\n ),\n stageCountsDelta: diffTraceSummaryStageCounts({\n current: current.stageCounts,\n previous: previous.stageCounts,\n }),\n totalCasesDelta: current.totalCases - previous.totalCases,\n transformedCasesDelta: current.transformedCases - previous.transformedCases,\n vectorCasesDelta: current.vectorCases - previous.vectorCases,\n variantCasesDelta: current.variantCases - previous.variantCases,\n multiVectorCasesDelta: current.multiVectorCases - previous.multiVectorCases,\n multiVectorVectorHitCasesDelta:\n current.multiVectorVectorHitCases - previous.multiVectorVectorHitCases,\n multiVectorLexicalHitCasesDelta:\n current.multiVectorLexicalHitCases - previous.multiVectorLexicalHitCases,\n multiVectorCollapsedCasesDelta:\n current.multiVectorCollapsedCases - previous.multiVectorCollapsedCases,\n officeEvidenceReconcileCasesDelta:\n current.officeEvidenceReconcileCases -\n previous.officeEvidenceReconcileCases,\n officeParagraphEvidenceReconcileCasesDelta:\n (current.officeParagraphEvidenceReconcileCases ?? 0) -\n (previous.officeParagraphEvidenceReconcileCases ?? 0),\n officeListEvidenceReconcileCasesDelta:\n (current.officeListEvidenceReconcileCases ?? 0) -\n (previous.officeListEvidenceReconcileCases ?? 0),\n officeTableEvidenceReconcileCasesDelta:\n (current.officeTableEvidenceReconcileCases ?? 0) -\n (previous.officeTableEvidenceReconcileCases ?? 0),\n pdfEvidenceReconcileCasesDelta:\n current.pdfEvidenceReconcileCases - previous.pdfEvidenceReconcileCases,\n runtimeCandidateBudgetExhaustedCasesDelta:\n current.runtimeCandidateBudgetExhaustedCases -\n previous.runtimeCandidateBudgetExhaustedCases,\n runtimeUnderfilledTopKCasesDelta:\n current.runtimeUnderfilledTopKCases - previous.runtimeUnderfilledTopKCases,\n});\n\nconst buildSearchTraceResultSnapshots = (\n results: Array<{\n chunkId: string;\n corpusKey?: string;\n score: number;\n source?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }>,\n): RAGSearchTraceResultSnapshot[] =>\n results.map((result) => ({\n chunkId: result.chunkId,\n corpusKey:\n result.corpusKey ??\n (typeof result.metadata?.corpusKey === \"string\"\n ? result.metadata.corpusKey\n : undefined),\n documentId:\n typeof result.metadata?.documentId === \"string\"\n ? result.metadata.documentId\n : undefined,\n score: result.score,\n source: result.source,\n title: result.title,\n }));\n\nexport const buildRAGSearchTraceRecord = (input: {\n trace: RAGRetrievalTrace;\n results?: Array<{\n chunkId: string;\n score: number;\n source?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n }>;\n id?: string;\n label?: string;\n groupKey?: string;\n tags?: string[];\n startedAt?: number;\n finishedAt?: number;\n elapsedMs?: number;\n metadata?: Record<string, unknown>;\n}): RAGSearchTraceRecord => {\n const startedAt = input.startedAt ?? Date.now();\n const finishedAt = input.finishedAt ?? startedAt;\n const elapsedMs = input.elapsedMs ?? Math.max(0, finishedAt - startedAt);\n const summary =\n summarizeRetrievalTraces([input.trace]) ??\n summarizeRetrievalTraces([\n {\n ...input.trace,\n steps: [...input.trace.steps],\n },\n ]);\n\n if (!summary) {\n throw new Error(\"Failed to summarize retrieval trace\");\n }\n\n return {\n elapsedMs,\n finishedAt,\n groupKey: input.groupKey,\n id: input.id ?? generateId(),\n label: input.label ?? input.trace.query,\n metadata: input.metadata,\n query: input.trace.query,\n results: buildSearchTraceResultSnapshots(input.results ?? []),\n startedAt,\n summary,\n tags: normalizeTraceTags(input.tags),\n trace: input.trace,\n };\n};\n\nexport const buildRAGSearchTraceDiff = ({\n current,\n previous,\n}: {\n current: RAGSearchTraceRecord;\n previous?: RAGSearchTraceRecord;\n}): RAGSearchTraceDiff => {\n const currentChunkIds = current.results.map((entry) => entry.chunkId);\n const previousChunkIds =\n previous?.results.map((entry) => entry.chunkId) ?? [];\n const previousSet = new Set(previousChunkIds);\n const currentSet = new Set(currentChunkIds);\n\n return {\n addedChunkIds: currentChunkIds.filter(\n (chunkId) => !previousSet.has(chunkId),\n ),\n currentTraceId: current.id,\n previousTraceId: previous?.id,\n removedChunkIds: previousChunkIds.filter(\n (chunkId) => !currentSet.has(chunkId),\n ),\n retainedChunkIds: currentChunkIds.filter((chunkId) =>\n previousSet.has(chunkId),\n ),\n summaryDelta: previous?.summary\n ? compareRAGRetrievalTraceSummaries(current.summary, previous.summary)\n : undefined,\n topResultChanged:\n (current.results[0]?.chunkId ?? undefined) !==\n (previous?.results[0]?.chunkId ?? undefined),\n };\n};\n\nexport const buildRAGRetrievalTraceHistoryTrend = ({\n runs,\n}: {\n runs: RAGRetrievalTraceSummaryRun[];\n}): RAGRetrievalTraceTrend => {\n const sortedRuns = normalizeTraceSummaryRuns(runs);\n const runsWithSummary = sortedRuns.filter(\n (run) => run.traceSummary && run.label,\n );\n const traceSummaries = runsWithSummary\n .map((run) => run.traceSummary)\n .filter((summary): summary is RAGRetrievalTraceComparisonSummary =>\n Boolean(summary),\n );\n const summaryTrendWindows: RAGRetrievalTraceHistoryWindow[] = [];\n\n for (let index = 0; index < runsWithSummary.length - 1; index += 1) {\n const currentRun = runsWithSummary[index]!;\n const previousRun = runsWithSummary[index + 1]!;\n if (!currentRun.traceSummary || !previousRun.traceSummary) {\n continue;\n }\n const current = currentRun.traceSummary;\n const previous = previousRun.traceSummary;\n const delta = compareRAGRetrievalTraceSummaries(current, previous);\n summaryTrendWindows.push({\n current,\n currentRunId: currentRun.id,\n currentRunLabel: currentRun.label,\n delta,\n previous,\n previousRunId: previousRun.id,\n previousRunLabel: previousRun.label,\n });\n }\n\n const latest = runsWithSummary[0]?.traceSummary;\n const previous = runsWithSummary[1]?.traceSummary;\n const latestToPrevious =\n latest && previous\n ? compareRAGRetrievalTraceSummaries(latest, previous)\n : undefined;\n const listHistoryModes = traceSummaries.map((summary) => summary.modes);\n const listHistorySourceStrategies = traceSummaries.map(\n (summary) => summary.sourceBalanceStrategies,\n );\n const modes = summarizeListTurnover<RAGHybridRetrievalMode>({\n current: normalizeSummaryList(latest?.modes ?? []),\n history: listHistoryModes,\n previous: normalizeSummaryList(previous?.modes ?? []),\n });\n const sourceBalanceStrategies =\n summarizeListTurnover<RAGSourceBalanceStrategy>({\n current: normalizeSummaryList(latest?.sourceBalanceStrategies ?? []),\n history: listHistorySourceStrategies,\n previous: normalizeSummaryList(previous?.sourceBalanceStrategies ?? []),\n });\n const { aggregate, bestMetric, worstMetric } = buildTraceSummaryAggregate({\n summaries: traceSummaries,\n });\n const stageChurn = buildRAGRetrievalTraceStageChurn({\n windows: summaryTrendWindows,\n });\n\n return {\n aggregate,\n bestMetric,\n modeTurnover: modes,\n runsWithTraceSummary: traceSummaries.length,\n sourceBalanceStrategyTurnover: sourceBalanceStrategies,\n stageChurn,\n summaryTrendWindows,\n worstMetric,\n worstVolatileStage: stageChurn.find((entry) => entry.totalChanges > 0),\n latestToPrevious,\n };\n};\nexport const createRAGEvaluationSuite = (\n suite: RAGEvaluationSuite,\n): RAGEvaluationSuite => {\n const cases = suite.input.cases.map((entry) => ({\n ...entry,\n ...(entry.goldenSet === true ? { goldenSet: true } : {}),\n ...(entry.expectedChunkIds\n ? { expectedChunkIds: [...entry.expectedChunkIds] }\n : {}),\n ...(entry.expectedSources\n ? { expectedSources: [...entry.expectedSources] }\n : {}),\n ...(entry.expectedDocumentIds\n ? { expectedDocumentIds: [...entry.expectedDocumentIds] }\n : {}),\n ...(entry.hardNegativeChunkIds\n ? {\n hardNegativeChunkIds: normalizeExpectedIds(\n entry.hardNegativeChunkIds,\n ),\n }\n : {}),\n ...(entry.hardNegativeSources\n ? {\n hardNegativeSources: normalizeExpectedIds(entry.hardNegativeSources),\n }\n : {}),\n ...(entry.hardNegativeDocumentIds\n ? {\n hardNegativeDocumentIds: normalizeExpectedIds(\n entry.hardNegativeDocumentIds,\n ),\n }\n : {}),\n ...(entry.filter ? { filter: { ...entry.filter } } : {}),\n ...(entry.metadata ? { metadata: { ...entry.metadata } } : {}),\n ...(entry.retrieval ? { retrieval: entry.retrieval } : {}),\n }));\n const duplicateCaseIds = Array.from(\n new Set(\n cases\n .map((entry) => entry.id)\n .filter(\n (id, index, ids) =>\n typeof id === \"string\" && ids.indexOf(id) !== index,\n ),\n ),\n );\n if (duplicateCaseIds.length > 0) {\n throw new Error(\n `RAG evaluation suite contains duplicate case ids: ${duplicateCaseIds.join(\", \")}`,\n );\n }\n\n return {\n ...suite,\n input: {\n ...suite.input,\n cases,\n ...(suite.input.filter ? { filter: { ...suite.input.filter } } : {}),\n ...(suite.input.retrieval ? { retrieval: suite.input.retrieval } : {}),\n },\n ...(suite.metadata ? { metadata: { ...suite.metadata } } : {}),\n };\n};\n\nexport const addRAGEvaluationSuiteCase = ({\n suite,\n caseInput,\n index,\n}: {\n suite: RAGEvaluationSuite;\n caseInput: RAGEvaluationCase;\n index?: number;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n if (normalizedSuite.input.cases.some((entry) => entry.id === caseInput.id)) {\n throw new Error(\n `RAG evaluation suite already contains case id ${caseInput.id}`,\n );\n }\n\n const nextCases = [...normalizedSuite.input.cases];\n const insertAt =\n typeof index === \"number\" && Number.isFinite(index)\n ? Math.max(0, Math.min(nextCases.length, Math.trunc(index)))\n : nextCases.length;\n nextCases.splice(insertAt, 0, caseInput);\n\n return createRAGEvaluationSuite({\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: nextCases,\n },\n });\n};\n\nexport const updateRAGEvaluationSuiteCase = ({\n suite,\n caseId,\n caseInput,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n caseInput: RAGEvaluationCase;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const targetIndex = normalizedSuite.input.cases.findIndex(\n (entry) => entry.id === caseId,\n );\n if (targetIndex < 0) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n if (\n caseInput.id !== caseId &&\n normalizedSuite.input.cases.some((entry) => entry.id === caseInput.id)\n ) {\n throw new Error(\n `RAG evaluation suite already contains case id ${caseInput.id}`,\n );\n }\n\n const nextCases = [...normalizedSuite.input.cases];\n nextCases[targetIndex] = caseInput;\n\n return createRAGEvaluationSuite({\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: nextCases,\n },\n });\n};\n\nexport const removeRAGEvaluationSuiteCase = ({\n suite,\n caseId,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const nextCases = normalizedSuite.input.cases.filter(\n (entry) => entry.id !== caseId,\n );\n if (nextCases.length === normalizedSuite.input.cases.length) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n return {\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: nextCases,\n },\n };\n};\n\nexport const reorderRAGEvaluationSuiteCases = ({\n suite,\n caseIds,\n}: {\n suite: RAGEvaluationSuite;\n caseIds: string[];\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const caseMap = new Map(\n normalizedSuite.input.cases.map((entry) => [entry.id, entry]),\n );\n if (caseIds.length !== normalizedSuite.input.cases.length) {\n throw new Error(\n \"RAG evaluation suite reorder requires exactly one id per case\",\n );\n }\n const unknownCaseIds = caseIds.filter((id) => !caseMap.has(id));\n if (unknownCaseIds.length > 0) {\n throw new Error(\n `RAG evaluation suite reorder contains unknown case ids: ${unknownCaseIds.join(\", \")}`,\n );\n }\n if (new Set(caseIds).size !== caseIds.length) {\n throw new Error(\"RAG evaluation suite reorder contains duplicate case ids\");\n }\n\n return {\n ...normalizedSuite,\n input: {\n ...normalizedSuite.input,\n cases: caseIds.map((id) => caseMap.get(id)!),\n },\n };\n};\n\nexport const setRAGEvaluationSuiteCaseGoldenSet = ({\n suite,\n caseId,\n goldenSet,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n goldenSet: boolean;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const target = normalizedSuite.input.cases.find(\n (entry) => entry.id === caseId,\n );\n if (!target) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n return updateRAGEvaluationSuiteCase({\n caseId,\n caseInput: {\n ...target,\n ...(goldenSet ? { goldenSet: true } : { goldenSet: undefined }),\n },\n suite: normalizedSuite,\n });\n};\n\nconst resolveHardNegativeCaseField = (\n kind: \"chunkId\" | \"source\" | \"documentId\",\n) =>\n kind === \"chunkId\"\n ? \"hardNegativeChunkIds\"\n : kind === \"source\"\n ? \"hardNegativeSources\"\n : \"hardNegativeDocumentIds\";\n\nexport const addRAGEvaluationSuiteCaseHardNegative = ({\n suite,\n caseId,\n kind,\n value,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n kind: \"chunkId\" | \"source\" | \"documentId\";\n value: string;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const target = normalizedSuite.input.cases.find(\n (entry) => entry.id === caseId,\n );\n if (!target) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n const field = resolveHardNegativeCaseField(kind);\n const nextValues = normalizeExpectedIds([\n ...normalizeStringArray(target[field]),\n value,\n ]);\n\n return updateRAGEvaluationSuiteCase({\n caseId,\n caseInput: {\n ...target,\n [field]: nextValues,\n },\n suite: normalizedSuite,\n });\n};\n\nexport const removeRAGEvaluationSuiteCaseHardNegative = ({\n suite,\n caseId,\n kind,\n value,\n}: {\n suite: RAGEvaluationSuite;\n caseId: string;\n kind: \"chunkId\" | \"source\" | \"documentId\";\n value: string;\n}): RAGEvaluationSuite => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const target = normalizedSuite.input.cases.find(\n (entry) => entry.id === caseId,\n );\n if (!target) {\n throw new Error(`RAG evaluation suite does not contain case id ${caseId}`);\n }\n\n const field = resolveHardNegativeCaseField(kind);\n const nextValues = normalizeStringArray(target[field]).filter(\n (entry) => entry !== value.trim(),\n );\n\n return updateRAGEvaluationSuiteCase({\n caseId,\n caseInput: {\n ...target,\n [field]: nextValues.length > 0 ? nextValues : undefined,\n },\n suite: normalizedSuite,\n });\n};\n\nexport const summarizeRAGEvaluationSuiteDataset = ({\n suite,\n}: {\n suite: RAGEvaluationSuite;\n}): RAGEvaluationSuiteDatasetSummary => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n const cases = normalizedSuite.input.cases;\n\n return {\n caseCount: cases.length,\n goldenSetCount: cases.filter((entry) => entry.goldenSet === true).length,\n hardNegativeCaseCount: cases.filter(\n (entry) =>\n normalizeStringArray(entry.hardNegativeChunkIds).length > 0 ||\n normalizeStringArray(entry.hardNegativeSources).length > 0 ||\n normalizeStringArray(entry.hardNegativeDocumentIds).length > 0,\n ).length,\n hardNegativeChunkIdCount: cases.reduce(\n (sum, entry) =>\n sum + normalizeStringArray(entry.hardNegativeChunkIds).length,\n 0,\n ),\n hardNegativeDocumentIdCount: cases.reduce(\n (sum, entry) =>\n sum + normalizeStringArray(entry.hardNegativeDocumentIds).length,\n 0,\n ),\n hardNegativeSourceCount: cases.reduce(\n (sum, entry) =>\n sum + normalizeStringArray(entry.hardNegativeSources).length,\n 0,\n ),\n suiteId: normalizedSuite.id,\n };\n};\n\nexport const generateRAGEvaluationSuiteFromDocuments = ({\n suiteId,\n documents,\n label,\n description,\n maxCases = 20,\n topK = 5,\n scoreThreshold,\n filter,\n retrieval,\n includeGoldenSet = true,\n hardNegativePerCase = 1,\n metadata,\n}: RAGEvaluationSuiteGenerationOptions): RAGEvaluationSuite => {\n const normalizedDocuments = documents\n .filter(\n (document) =>\n typeof document.id === \"string\" &&\n document.id.trim().length > 0 &&\n typeof document.source === \"string\" &&\n document.source.trim().length > 0 &&\n typeof document.title === \"string\" &&\n document.title.trim().length > 0,\n )\n .sort((left, right) =>\n `${left.source}\\u0000${left.title}\\u0000${left.id}`.localeCompare(\n `${right.source}\\u0000${right.title}\\u0000${right.id}`,\n ),\n )\n .slice(0, Math.max(0, Math.trunc(maxCases)));\n\n const cases = normalizedDocuments.map((document, index) => {\n const negativeCandidates = normalizedDocuments\n .slice(index + 1)\n .concat(normalizedDocuments.slice(0, index))\n .filter((candidate) => candidate.id !== document.id);\n const hardNegativeDocumentIds = negativeCandidates\n .slice(0, Math.max(0, Math.trunc(hardNegativePerCase)))\n .map((candidate) => candidate.id);\n const hardNegativeSources = negativeCandidates\n .slice(0, Math.max(0, Math.trunc(hardNegativePerCase)))\n .map((candidate) => candidate.source);\n\n return {\n corpusKey: document.corpusKey,\n expectedDocumentIds: [document.id],\n expectedSources: [document.source],\n ...(includeGoldenSet ? { goldenSet: true } : {}),\n ...(hardNegativeDocumentIds.length > 0\n ? { hardNegativeDocumentIds }\n : {}),\n ...(hardNegativeSources.length > 0 ? { hardNegativeSources } : {}),\n id: `synthetic-${document.id}`,\n label: document.title,\n query: buildSyntheticEvaluationQuery(document),\n } satisfies RAGEvaluationCase;\n });\n\n return createRAGEvaluationSuite({\n description,\n id: suiteId,\n input: {\n cases,\n ...(filter ? { filter: { ...filter } } : {}),\n ...(typeof scoreThreshold === \"number\" ? { scoreThreshold } : {}),\n ...(typeof topK === \"number\" ? { topK } : {}),\n ...(retrieval ? { retrieval } : {}),\n },\n label,\n metadata,\n });\n};\n\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_SUITE_ID =\n \"rag-native-planner-larger-corpus\";\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_LABEL =\n \"Adaptive Native Planner Benchmark\";\nconst DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_SUITE_ID =\n \"rag-native-backend-larger-corpus\";\nconst DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_LABEL =\n \"Native Backend Comparison Benchmark\";\nconst DEFAULT_PRESENTATION_CUE_BENCHMARK_SUITE_ID =\n \"rag-presentation-cue-parity\";\nconst DEFAULT_PRESENTATION_CUE_BENCHMARK_LABEL = \"Presentation Cue Benchmark\";\nconst DEFAULT_SPREADSHEET_CUE_BENCHMARK_SUITE_ID = \"rag-spreadsheet-cue-parity\";\nconst DEFAULT_SPREADSHEET_CUE_BENCHMARK_LABEL = \"Spreadsheet Cue Benchmark\";\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY =\n \"Which launch checklist phrase is exact wording?\";\nconst DEFAULT_NATIVE_BACKEND_HYBRID_QUERY =\n \"aurora promotion checklist wording\";\nconst DEFAULT_NATIVE_BACKEND_FILTERED_QUERY =\n \"focus lane launch checklist wording\";\nconst DEFAULT_NATIVE_BACKEND_REORDERED_QUERY =\n \"exact aurora focus lane checklist wording\";\nconst DEFAULT_NATIVE_BACKEND_GUIDE_QUERY =\n \"which focus lane guide contains exact aurora promotion wording\";\nconst DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER = {\n lane: \"focus\",\n} satisfies Record<string, unknown>;\nconst DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS = [\n \"focus-distractor-0\",\n \"focus-distractor-1\",\n \"focus-distractor-2\",\n] as const;\n\nexport const createRAGNativeBackendBenchmarkMockEmbedding = async (\n text: string,\n): Promise<number[]> => {\n const normalized = text.toLowerCase();\n if (\n normalized.includes(\n \"launch checklist exact wording for aurora promotion\",\n ) ||\n normalized.includes(\"launch checklist exact wording\")\n ) {\n return [0.995, 0.005];\n }\n\n if (\n normalized.includes(\"aurora\") ||\n normalized.includes(\"checklist\") ||\n normalized.includes(\"focus lane\") ||\n normalized.includes(\"exact wording\") ||\n normalized.includes(\"guide\")\n ) {\n return [1, 0];\n }\n\n return [0, 1];\n};\n\nexport const createRAGNativeBackendBenchmarkCorpus = (input?: {\n backend?: \"generic\" | \"sqlite-native\" | \"postgres\";\n noiseCount?: number;\n}): RAGDocumentChunk[] => {\n const noiseCount = input?.noiseCount ?? 5_001;\n const backend = input?.backend ?? \"generic\";\n const genericChunks = [\n ...Array.from({ length: noiseCount }, (_, index) => ({\n chunkId: `noise:${index}`,\n corpusKey: \"noise\",\n embedding: [0, 1] as number[],\n metadata: {\n corpusKey: \"noise\",\n documentId: `noise-${index}`,\n lane: \"noise\",\n },\n source: `noise/${index}.md`,\n text: `Background operations note ${index}.`,\n })),\n ...Array.from({ length: 3 }, (_, index) => ({\n chunkId: `focus:distractor:${index}`,\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n corpusKey: \"focus\",\n documentId: `focus-distractor-${index}`,\n lane: \"focus\",\n },\n source: `focus/distractor-${index}.md`,\n text:\n index === 0\n ? \"aurora promotion checklist overview\"\n : index === 1\n ? \"launch checklist wording draft\"\n : \"focus lane promotion runbook notes\",\n })),\n {\n chunkId: \"focus:target\",\n corpusKey: \"focus\",\n embedding: [0.995, 0.005] as number[],\n metadata: {\n corpusKey: \"focus\",\n documentId: \"focus-target\",\n lane: \"focus\",\n },\n source: \"guide/planner-depth.md\",\n text: \"launch checklist exact wording for aurora promotion in the focus lane\",\n },\n ] satisfies RAGDocumentChunk[];\n\n const backendSpecificChunks =\n backend === \"sqlite-native\"\n ? [\n {\n chunkId: \"focus:sqlite:phrase-matrix\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"sqlite-native\",\n corpusKey: \"focus\",\n documentId: \"focus-sqlite-phrase-matrix\",\n lane: \"focus\",\n },\n source: \"guide/sqlite-phrase-matrix.md\",\n text: \"exact aurora focus lane checklist wording matrix for sqlite validation\",\n },\n {\n chunkId: \"focus:sqlite:guide-table\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"sqlite-native\",\n corpusKey: \"focus\",\n documentId: \"focus-sqlite-guide-table\",\n lane: \"focus\",\n },\n source: \"guide/sqlite-guide-table.md\",\n text: \"which focus lane guide contains aurora promotion wording draft table for sqlite operators\",\n },\n ]\n : backend === \"postgres\"\n ? [\n {\n chunkId: \"focus:postgres:appendix\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"postgres\",\n corpusKey: \"focus\",\n documentId: \"focus-postgres-appendix\",\n lane: \"focus\",\n },\n source: \"guide/postgres-appendix.md\",\n text: \"which focus lane guide contains exact aurora promotion wording appendix for postgres release review\",\n },\n {\n chunkId: \"focus:postgres:alternatives\",\n corpusKey: \"focus\",\n embedding: [1, 0] as number[],\n metadata: {\n backendFixture: \"postgres\",\n corpusKey: \"focus\",\n documentId: \"focus-postgres-alternatives\",\n lane: \"focus\",\n },\n source: \"guide/postgres-alternatives.md\",\n text: \"aurora promotion checklist wording alternatives and exact focus lane phrasing for postgres audits\",\n },\n ]\n : [];\n\n return [...genericChunks, ...backendSpecificChunks];\n};\n\nexport const createRAGAdaptiveNativePlannerBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Stress-tests larger-corpus native planner selection, candidate-budget pressure, and transformed-query recovery on filtered retrieval.\",\n id: input?.id ?? DEFAULT_NATIVE_PLANNER_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n \"focus-distractor-0\",\n \"focus-distractor-1\",\n \"focus-distractor-2\",\n ],\n id: \"planner-pressure-exact-phrase\",\n label: \"Exact phrase survives larger-corpus native pressure\",\n query: DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY,\n topK: input?.topK ?? 1,\n },\n ],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n retrieval: \"vector\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_NATIVE_PLANNER_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"adaptive_native_planner\",\n benchmarkScope: \"larger_corpus\",\n expectedSignals: [\n \"selected native planner profile\",\n \"candidate-budget exhaustion\",\n \"underfilled topk\",\n ],\n recommendedGroupKey: \"runtime-native-planner\",\n recommendedTags: [\"runtime\", \"native\", \"planner\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGAdaptiveNativePlannerBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite = input?.suite ?? createRAGAdaptiveNativePlannerBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"adaptive_native_planner_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGNativeBackendComparisonBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Captures larger-corpus native backend parity with filtered vector pressure and harder hybrid retrieval cases so sqlite-native and postgres runs can be compared over time.\",\n id: input?.id ?? DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-exact-phrase\",\n label: \"Exact phrase survives larger-corpus native pressure\",\n query: DEFAULT_NATIVE_PLANNER_BENCHMARK_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-hybrid-phrase\",\n label: \"Hybrid retrieval survives filtered lexical pressure\",\n query: DEFAULT_NATIVE_BACKEND_HYBRID_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-filtered-lane-query\",\n label: \"Filtered lane query survives broader corpus noise\",\n query: DEFAULT_NATIVE_BACKEND_FILTERED_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-reordered-phrase\",\n label: \"Reordered phrase survives transform pressure\",\n query: DEFAULT_NATIVE_BACKEND_REORDERED_QUERY,\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"focus-target\"],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n hardNegativeDocumentIds: [\n ...DEFAULT_NATIVE_PLANNER_HARD_NEGATIVE_DOCUMENT_IDS,\n ],\n id: \"planner-pressure-guide-query\",\n label: \"Guide attribution survives filtered corpus pressure\",\n query: DEFAULT_NATIVE_BACKEND_GUIDE_QUERY,\n topK: input?.topK ?? 1,\n },\n ],\n filter: { ...DEFAULT_NATIVE_PLANNER_BENCHMARK_FILTER },\n retrieval: \"vector\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_NATIVE_BACKEND_COMPARISON_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"native_backend_comparison\",\n benchmarkScope: \"larger_corpus\",\n expectedSignals: [\n \"backend-tagged runtime artifacts\",\n \"selected native planner profile\",\n \"hybrid filtered retrieval\",\n \"candidate-budget exhaustion\",\n \"underfilled topk\",\n \"query transform pressure\",\n ],\n recommendedGroupKey: \"runtime-native-backend-parity\",\n recommendedTags: [\"runtime\", \"backend\", \"native\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGNativeBackendComparisonBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite =\n input?.suite ?? createRAGNativeBackendComparisonBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"native_backend_comparison_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGPresentationCueBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Captures repeated-title presentation retrieval parity with explicit title-led, body-led, and notes-led slide cases so presentation cue weighting can be benchmarked over time.\",\n id: input?.id ?? DEFAULT_PRESENTATION_CUE_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"slide-title-doc\"],\n hardNegativeDocumentIds: [\"slide-body-doc\", \"slide-notes-doc\"],\n id: \"presentation-title-led\",\n label: \"Repeated-title deck selects title-led slide evidence\",\n query: \"Which presentation title covers the release handoff summary?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"slide-body-doc\"],\n hardNegativeDocumentIds: [\"slide-title-doc\", \"slide-notes-doc\"],\n id: \"presentation-body-led\",\n label: \"Repeated-title deck selects body-led slide evidence\",\n query: \"Which slide mentions escalation review in the body?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"slide-notes-doc\"],\n hardNegativeDocumentIds: [\"slide-title-doc\", \"slide-body-doc\"],\n id: \"presentation-notes-led\",\n label: \"Repeated-title deck selects notes-led slide evidence\",\n query: \"Which slide notes are the primary handoff evidence?\",\n topK: input?.topK ?? 1,\n },\n ],\n retrieval: \"hybrid\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_PRESENTATION_CUE_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"presentation_cue\",\n benchmarkScope: \"repeated_title_slides\",\n expectedSignals: [\n \"presentation title cue\",\n \"presentation body cue\",\n \"presentation notes cue\",\n ],\n recommendedGroupKey: \"presentation-cue-parity\",\n recommendedTags: [\"presentation\", \"cue\", \"slides\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGPresentationCueBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite = input?.suite ?? createRAGPresentationCueBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"presentation_cue_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGSpreadsheetCueBenchmarkSuite = (input?: {\n id?: string;\n label?: string;\n description?: string;\n topK?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuite =>\n createRAGEvaluationSuite({\n description:\n input?.description ??\n \"Captures repeated spreadsheet-family retrieval parity with explicit sheet-led, table-led, and column-led workbook cases so spreadsheet cue weighting can be benchmarked over time.\",\n id: input?.id ?? DEFAULT_SPREADSHEET_CUE_BENCHMARK_SUITE_ID,\n input: {\n cases: [\n {\n expectedDocumentIds: [\"sheet-led-doc\"],\n hardNegativeDocumentIds: [\"table-led-doc\", \"column-led-doc\"],\n id: \"spreadsheet-sheet-led\",\n label: \"Workbook selects sheet-led spreadsheet evidence\",\n query: \"Which spreadsheet sheet lists owner status and due date?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"table-led-doc\"],\n hardNegativeDocumentIds: [\"sheet-led-doc\", \"column-led-doc\"],\n id: \"spreadsheet-table-led\",\n label: \"Workbook selects table-led spreadsheet evidence\",\n query: \"Which spreadsheet table lists the escalation status rows?\",\n topK: input?.topK ?? 1,\n },\n {\n expectedDocumentIds: [\"column-led-doc\"],\n hardNegativeDocumentIds: [\"sheet-led-doc\", \"table-led-doc\"],\n id: \"spreadsheet-column-led\",\n label: \"Workbook selects column-led spreadsheet evidence\",\n query: \"Which spreadsheet columns cover owner due date?\",\n topK: input?.topK ?? 1,\n },\n ],\n retrieval: \"hybrid\",\n topK: input?.topK ?? 1,\n },\n label: input?.label ?? DEFAULT_SPREADSHEET_CUE_BENCHMARK_LABEL,\n metadata: {\n benchmarkKind: \"spreadsheet_cue\",\n benchmarkScope: \"repeated_sheet_tables\",\n expectedSignals: [\n \"spreadsheet sheet cue\",\n \"spreadsheet table cue\",\n \"spreadsheet column cue\",\n ],\n recommendedGroupKey: \"spreadsheet-cue-parity\",\n recommendedTags: [\"spreadsheet\", \"cue\", \"workbook\"],\n ...input?.metadata,\n },\n });\n\nexport const createRAGSpreadsheetCueBenchmarkSnapshot = (input?: {\n suite?: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const suite = input?.suite ?? createRAGSpreadsheetCueBenchmarkSuite();\n\n return createRAGEvaluationSuiteSnapshot({\n createdAt: input?.createdAt,\n id: input?.id,\n metadata: {\n artifactKind: \"spreadsheet_cue_benchmark\",\n persistForReleaseHistory: true,\n ...input?.metadata,\n },\n suite,\n version: input?.version,\n });\n};\n\nexport const createRAGEvaluationSuiteSnapshot = ({\n suite,\n id,\n version = 1,\n createdAt = Date.now(),\n metadata,\n}: {\n suite: RAGEvaluationSuite;\n id?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n}): RAGEvaluationSuiteSnapshot => {\n const normalizedSuite = createRAGEvaluationSuite(suite);\n return {\n caseCount: normalizedSuite.input.cases.length,\n createdAt,\n id: id ?? `${normalizedSuite.id}:snapshot:${String(version)}`,\n label: normalizedSuite.label,\n description: normalizedSuite.description,\n metadata: metadata ? { ...metadata } : undefined,\n suite: normalizedSuite,\n suiteId: normalizedSuite.id,\n version,\n };\n};\n\nconst stableStringifyEvaluationCase = (entry: RAGEvaluationCase) =>\n JSON.stringify({\n ...entry,\n expectedChunkIds: entry.expectedChunkIds ?? [],\n expectedDocumentIds: entry.expectedDocumentIds ?? [],\n expectedSources: entry.expectedSources ?? [],\n goldenSet: entry.goldenSet === true,\n hardNegativeChunkIds: entry.hardNegativeChunkIds ?? [],\n hardNegativeDocumentIds: entry.hardNegativeDocumentIds ?? [],\n hardNegativeSources: entry.hardNegativeSources ?? [],\n filter: entry.filter ?? {},\n metadata: entry.metadata ?? {},\n retrieval: entry.retrieval ?? null,\n });\n\nexport const buildRAGEvaluationSuiteSnapshotDiff = ({\n current,\n previous,\n}: {\n current: RAGEvaluationSuiteSnapshot;\n previous?: RAGEvaluationSuiteSnapshot;\n}): RAGEvaluationSuiteSnapshotDiff => {\n const currentCases = current.suite.input.cases;\n const previousCases = previous?.suite.input.cases ?? [];\n const currentMap = new Map<string, RAGEvaluationCase>(\n currentCases.map((entry: RAGEvaluationCase) => [entry.id, entry]),\n );\n const previousMap = new Map<string, RAGEvaluationCase>(\n previousCases.map((entry: RAGEvaluationCase) => [entry.id, entry]),\n );\n const currentIds = currentCases.map((entry: RAGEvaluationCase) => entry.id);\n const previousIds = previousCases.map((entry: RAGEvaluationCase) => entry.id);\n\n const addedCaseIds = currentIds.filter((id: string) => !previousMap.has(id));\n const removedCaseIds = previousIds.filter(\n (id: string) => !currentMap.has(id),\n );\n const changedCaseIds = currentIds.filter((id: string) => {\n const currentCase = currentMap.get(id);\n const previousCase = previousMap.get(id);\n if (!currentCase || !previousCase) {\n return false;\n }\n return (\n stableStringifyEvaluationCase(currentCase) !==\n stableStringifyEvaluationCase(previousCase)\n );\n });\n const unchangedCaseIds = currentIds.filter((id: string) => {\n const currentCase = currentMap.get(id);\n const previousCase = previousMap.get(id);\n if (!currentCase || !previousCase) {\n return false;\n }\n return (\n stableStringifyEvaluationCase(currentCase) ===\n stableStringifyEvaluationCase(previousCase)\n );\n });\n const sharedIds = currentIds.filter((id: string) => previousMap.has(id));\n const orderChanged =\n sharedIds.length > 0 &&\n JSON.stringify(sharedIds) !==\n JSON.stringify(previousIds.filter((id: string) => currentMap.has(id)));\n\n return {\n addedCaseIds,\n caseCountDelta: current.caseCount - (previous?.caseCount ?? 0),\n changedCaseIds,\n currentSnapshotId: current.id,\n orderChanged,\n previousSnapshotId: previous?.id,\n removedCaseIds,\n suiteId: current.suiteId,\n unchangedCaseIds,\n };\n};\nexport const evaluateRAGCollection = async ({\n collection,\n input,\n defaultTopK = DEFAULT_TOP_K,\n rerank,\n onCaseSettled,\n}: {\n collection: RAGCollection;\n input: RAGEvaluationInput;\n defaultTopK?: number;\n rerank?: RAGRerankerProviderLike;\n onCaseSettled?: (event: {\n caseIndex: number;\n total: number;\n caseResult: RAGEvaluationCaseResult;\n }) => void;\n}) => {\n const evaluated = await evaluateRAGCollectionCases({\n collection,\n defaultTopK,\n includeTrace: false,\n input,\n onCaseSettled,\n rerank,\n });\n\n return buildRAGEvaluationResponse(evaluated.map((entry) => entry.caseResult));\n};\nexport const executeDryRunRAGEvaluation = (\n input: RAGEvaluationInput,\n defaultTopK = DEFAULT_TOP_K,\n): RAGEvaluationCaseResult[] =>\n input.cases.map((caseInput, caseIndex) => {\n const mode = resolveEvaluationMode(caseInput);\n const expectedIds = normalizeExpectedIds(\n mode === \"chunkId\"\n ? (caseInput.expectedChunkIds ?? [])\n : mode === \"source\"\n ? (caseInput.expectedSources ?? [])\n : (caseInput.expectedDocumentIds ?? []),\n );\n const effectiveTopK =\n typeof caseInput.topK === \"number\"\n ? caseInput.topK\n : typeof input.topK === \"number\"\n ? input.topK\n : defaultTopK;\n\n return {\n caseId: caseInput.id ?? `case-${caseIndex + 1}`,\n elapsedMs: 0,\n expectedCount: expectedIds.length,\n expectedIds,\n failureClasses: classifyRAGEvaluationFailure({\n expectedCount: expectedIds.length,\n matchedCount: 0,\n missingIds: expectedIds,\n retrievedCount: 0,\n retrievedIds: [],\n }),\n f1: 0,\n label: caseInput.label,\n matchedCount: 0,\n matchedIds: [],\n missingIds: expectedIds,\n mode,\n precision: 0,\n query: caseInput.query,\n recall: 0,\n retrievedCount: 0,\n retrievedIds: [],\n status: expectedIds.length === 0 ? \"partial\" : \"fail\",\n topK: effectiveTopK,\n };\n });\nexport const runRAGEvaluationSuite = async ({\n suite,\n evaluate,\n overrides,\n artifacts,\n}: {\n suite: RAGEvaluationSuite;\n evaluate: (input: RAGEvaluationInput) => Promise<RAGEvaluationResponse>;\n overrides?: Partial<RAGEvaluationInput>;\n artifacts?: Pick<\n RAGEvaluationSuiteRun,\n \"traceSummary\" | \"caseTraceSnapshots\"\n >;\n}) => {\n const startedAt = Date.now();\n const response = await evaluate({\n ...suite.input,\n ...overrides,\n cases: overrides?.cases ?? suite.input.cases,\n });\n const finishedAt = Date.now();\n\n return {\n caseTraceSnapshots: artifacts?.caseTraceSnapshots,\n elapsedMs: finishedAt - startedAt,\n finishedAt,\n id: generateId(),\n label: suite.label ?? suite.id,\n metadata: suite.metadata,\n response,\n startedAt,\n suiteId: suite.id,\n traceSummary: artifacts?.traceSummary,\n } satisfies RAGEvaluationSuiteRun;\n};\nexport const summarizeRAGEvaluationCase = ({\n caseIndex,\n caseInput,\n query,\n mode,\n retrievedIds,\n expectedIds,\n elapsedMs,\n retrievedSources,\n trace,\n}: {\n caseIndex: number;\n caseInput: RAGEvaluationCase;\n mode: \"chunkId\" | \"source\" | \"documentId\";\n query: string;\n retrievedIds: string[];\n expectedIds: string[];\n elapsedMs: number;\n retrievedSources?: RAGSource[];\n trace?: RAGSearchTraceRecord | RAGRetrievalTrace;\n}): RAGEvaluationCaseResult => {\n const expectedSet = new Set(expectedIds);\n const retrievedSet = new Set(retrievedIds);\n const matchedIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => retrievedSet.has(id)),\n );\n const missingIds = normalizeExpectedIds(\n [...expectedSet].filter((id) => !retrievedSet.has(id)),\n );\n const matchedCount = matchedIds.length;\n const retrievedCount = retrievedIds.length;\n const expectedCount = expectedIds.length;\n const precision = retrievedCount > 0 ? matchedCount / retrievedCount : 0;\n const recall = expectedCount > 0 ? matchedCount / expectedCount : 0;\n const f1 =\n precision + recall > 0\n ? (2 * precision * recall) / (precision + recall)\n : 0;\n const status: RAGEvaluationCaseResult[\"status\"] =\n expectedCount === 0\n ? \"partial\"\n : matchedCount === expectedCount\n ? \"pass\"\n : matchedCount > 0\n ? \"partial\"\n : \"fail\";\n\n return {\n caseId: caseInput.id ?? `case-${caseIndex + 1}`,\n corpusKey: caseInput.corpusKey,\n elapsedMs,\n expectedCount,\n expectedIds,\n failureClasses: classifyRAGEvaluationFailure({\n expectedCount,\n matchedCount,\n missingIds,\n retrievedCount,\n retrievedIds,\n retrievedSources,\n trace,\n }),\n f1,\n label: caseInput.label,\n matchedCount,\n matchedIds,\n metadata: caseInput.metadata,\n missingIds,\n mode,\n precision,\n query,\n recall,\n retrievedCount,\n retrievedIds,\n status,\n topK: typeof caseInput.topK === \"number\" ? caseInput.topK : DEFAULT_TOP_K,\n };\n};\nexport const summarizeRAGRerankerComparison = (\n entries: RAGRerankerComparisonEntry[],\n): RAGRerankerComparisonSummary => {\n return summarizeEvaluationResponseComparison(\n entries,\n \"rerankerId\",\n ) satisfies RAGRerankerComparisonSummary;\n};\nexport const summarizeRAGRetrievalComparison = (\n entries: RAGRetrievalComparisonEntry[],\n): RAGRetrievalComparisonSummary => ({\n ...summarizeEvaluationResponseComparison(entries, \"retrievalId\"),\n bestByPresentationTitleCueCases: selectComparisonEntryByPresentationCueCases(\n entries,\n \"retrievalId\",\n \"title\",\n ),\n bestByPresentationBodyCueCases: selectComparisonEntryByPresentationCueCases(\n entries,\n \"retrievalId\",\n \"body\",\n ),\n bestByPresentationNotesCueCases: selectComparisonEntryByPresentationCueCases(\n entries,\n \"retrievalId\",\n \"notes\",\n ),\n bestBySpreadsheetSheetCueCases: selectComparisonEntryBySpreadsheetCueCases(\n entries,\n \"retrievalId\",\n \"sheet\",\n ),\n bestBySpreadsheetTableCueCases: selectComparisonEntryBySpreadsheetCueCases(\n entries,\n \"retrievalId\",\n \"table\",\n ),\n bestBySpreadsheetColumnCueCases: selectComparisonEntryBySpreadsheetCueCases(\n entries,\n \"retrievalId\",\n \"column\",\n ),\n bestByMultivectorCollapsedCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"multiVectorCollapsedCases\",\n ),\n bestByMultivectorLexicalHitCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"multiVectorLexicalHitCases\",\n ),\n bestByMultivectorVectorHitCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"multiVectorVectorHitCases\",\n ),\n bestByEvidenceReconcileCases: selectComparisonEntryByTraceStageCount(\n entries,\n \"retrievalId\",\n \"evidence_reconcile\",\n ),\n bestByOfficeEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeEvidenceReconcileCases\",\n ),\n bestByOfficeParagraphEvidenceReconcileCases:\n selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeParagraphEvidenceReconcileCases\",\n ),\n bestByOfficeListEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeListEvidenceReconcileCases\",\n ),\n bestByOfficeTableEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"officeTableEvidenceReconcileCases\",\n ),\n bestByPDFEvidenceReconcileCases: selectComparisonEntryByTraceMetric(\n entries,\n \"retrievalId\",\n \"pdfEvidenceReconcileCases\",\n ),\n bestByLowestRuntimeCandidateBudgetExhaustedCases:\n selectComparisonEntryByLowestTraceMetric(\n entries,\n \"retrievalId\",\n \"runtimeCandidateBudgetExhaustedCases\",\n ),\n bestByLowestRuntimeUnderfilledTopKCases:\n selectComparisonEntryByLowestTraceMetric(\n entries,\n \"retrievalId\",\n \"runtimeUnderfilledTopKCases\",\n ),\n});\n",
@@ -24,9 +25,10 @@
24
25
  "import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type {\n RAGBackendCapabilities,\n RAGVectorStoreStatus,\n} from \"../../types/engine\";\nimport { createRAGClient } from \"../client/ragClient\";\n\nexport const useRAGStatus = (path: string, autoLoad = true) => {\n const client = useMemo(() => createRAGClient({ path }), [path]);\n const [status, setStatus] = useState<RAGVectorStoreStatus | undefined>();\n const [capabilities, setCapabilities] = useState<\n RAGBackendCapabilities | undefined\n >();\n const [error, setError] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(autoLoad);\n\n const refresh = useCallback(async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const response = await client.status();\n setStatus(response.status);\n setCapabilities(response.capabilities);\n\n return response;\n } catch (caught) {\n const message = caught instanceof Error ? caught.message : String(caught);\n setError(message);\n throw caught;\n } finally {\n setIsLoading(false);\n }\n }, [client]);\n\n const reset = useCallback(() => {\n setCapabilities(undefined);\n setError(null);\n setIsLoading(false);\n setStatus(undefined);\n }, []);\n\n useEffect(() => {\n if (!autoLoad) {\n setIsLoading(false);\n\n return;\n }\n\n void refresh();\n }, [autoLoad, refresh]);\n\n return {\n capabilities,\n error,\n isLoading,\n refresh,\n reset,\n status,\n };\n};\n\nexport type UseRAGStatusResult = ReturnType<typeof useRAGStatus>;\n",
25
26
  "import { useMemo } from \"react\";\nimport { useRAGStream } from \"./useRAGStream\";\n\nexport const useRAGWorkflow = (path?: string, conversationId?: string) => {\n const stream = useRAGStream(path, conversationId);\n\n return useMemo(\n () => ({\n ...stream,\n state: stream.workflow,\n }),\n [stream],\n );\n};\n\nexport type UseRAGWorkflowResult = ReturnType<typeof useRAGWorkflow>;\n",
26
27
  "import { useCallback, useMemo } from \"react\";\nimport type { AIAttachment } from \"@absolutejs/ai\";\nimport { buildRAGAnswerWorkflowState } from \"../presentation/workflowState\";\nimport { useAIStream } from \"@absolutejs/ai/react\";\n\nexport const useRAGStream = (path?: string, conversationId?: string) => {\n const stream = useAIStream(path, conversationId);\n\n const workflow = useMemo(\n () =>\n buildRAGAnswerWorkflowState({\n error: stream.error,\n isStreaming: stream.isStreaming,\n messages: stream.messages,\n }),\n [stream.error, stream.isStreaming, stream.messages],\n );\n const progress = useMemo(\n () => ({\n conversationId: workflow.latestAssistantMessage?.conversationId,\n hasContent:\n typeof workflow.latestAssistantMessage?.content === \"string\" &&\n workflow.latestAssistantMessage.content.length > 0,\n hasRetrieved: workflow.hasRetrieved,\n hasSources: workflow.hasSources,\n hasThinking:\n typeof workflow.latestAssistantMessage?.thinking === \"string\" &&\n workflow.latestAssistantMessage.thinking.length > 0,\n hasToolCalls:\n (workflow.latestAssistantMessage?.toolCalls?.length ?? 0) > 0,\n isComplete: workflow.isComplete,\n isError: workflow.isError,\n isIdle: workflow.isIdle,\n isRetrieved: workflow.isRetrieved,\n isRetrieving: workflow.isRetrieving,\n isStreaming: workflow.isAnswerStreaming,\n isSubmitting: workflow.isSubmitting,\n latestMessage: workflow.latestAssistantMessage,\n messageId: workflow.latestAssistantMessage?.id,\n retrievalDurationMs: workflow.retrievalDurationMs,\n retrievalStartedAt: workflow.retrievalStartedAt,\n retrievedAt: workflow.retrievedAt,\n sourceCount: workflow.sources.length,\n stage: workflow.stage,\n }),\n [workflow],\n );\n\n const query = useCallback(\n (content: string, attachments?: AIAttachment[]) => {\n stream.send(content, attachments);\n },\n [stream],\n );\n\n return {\n ...stream,\n citationReferenceMap: workflow.citationReferenceMap,\n citations: workflow.citations,\n coverage: workflow.coverage,\n groundedAnswer: workflow.groundedAnswer,\n groundingReferences: workflow.groundingReferences,\n hasGrounding: workflow.hasGrounding,\n hasRetrieved: workflow.hasRetrieved,\n hasSources: workflow.hasSources,\n isAnswerStreaming: workflow.isAnswerStreaming,\n isComplete: workflow.isComplete,\n isError: workflow.isError,\n isRetrieved: workflow.isRetrieved,\n isRetrieving: workflow.isRetrieving,\n isRunning: workflow.isRunning,\n latestAssistantMessage: workflow.latestAssistantMessage,\n progress,\n query,\n retrieval: workflow.retrieval,\n sourceGroups: workflow.sourceGroups,\n sourceSummaries: workflow.sourceSummaries,\n sources: workflow.sources,\n stage: workflow.stage,\n ungroundedReferenceNumbers: workflow.ungroundedReferenceNumbers,\n workflow,\n };\n};\n\nexport type UseRAGStreamResult = ReturnType<typeof useRAGStream>;\n",
27
- "import { useMemo } from \"react\";\nimport type { AIMessage } from \"@absolutejs/ai\";\nimport {\n buildRAGStreamProgress,\n type RAGStreamProgress,\n} from \"../presentation/workflowState\";\n\nexport const useRAGStreamProgress = (params: {\n error: string | null;\n isStreaming: boolean;\n messages: AIMessage[];\n}) =>\n useMemo(\n () =>\n buildRAGStreamProgress({\n error: params.error,\n isStreaming: params.isStreaming,\n messages: params.messages,\n }),\n [params.error, params.isStreaming, params.messages],\n );\n\nexport type UseRAGStreamProgressResult = ReturnType<\n typeof useRAGStreamProgress\n>;\nexport type { RAGStreamProgress };\n"
28
+ "import { useMemo } from \"react\";\nimport type { AIMessage } from \"@absolutejs/ai\";\nimport {\n buildRAGStreamProgress,\n type RAGStreamProgress,\n} from \"../presentation/workflowState\";\n\nexport const useRAGStreamProgress = (params: {\n error: string | null;\n isStreaming: boolean;\n messages: AIMessage[];\n}) =>\n useMemo(\n () =>\n buildRAGStreamProgress({\n error: params.error,\n isStreaming: params.isStreaming,\n messages: params.messages,\n }),\n [params.error, params.isStreaming, params.messages],\n );\n\nexport type UseRAGStreamProgressResult = ReturnType<\n typeof useRAGStreamProgress\n>;\nexport type { RAGStreamProgress };\n",
29
+ "import { useEffect, useMemo, useSyncExternalStore } from \"react\";\nimport { createResearchClient } from \"../client/research\";\nexport const useResearch = (path = \"/research\") => {\n const client = useMemo(() => createResearchClient({ path }), [path]);\n const state = useSyncExternalStore(\n client.subscribe,\n client.getSnapshot,\n client.getSnapshot,\n );\n useEffect(() => () => client.cancel(), [client]);\n return { ...client, state };\n};\n"
28
30
  ],
29
- "mappings": "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",
30
- "debugId": "58A3E0E0D2F57F7B64756E2164756E21",
31
+ "mappings": "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",
32
+ "debugId": "7FD1ED9FF1C8AD0364756E2164756E21",
31
33
  "names": []
32
34
  }