@absolutejs/rag 0.17.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.
- package/CHANGELOG.md +6 -0
- package/README.md +4 -0
- package/RESEARCH.md +269 -0
- package/changelog.json +245 -235
- package/dist/angular/index.js +174 -2
- package/dist/angular/index.js.map +6 -4
- package/dist/client/index.js +149 -1
- package/dist/client/index.js.map +5 -4
- package/dist/client/research.js +223 -0
- package/dist/client/research.js.map +10 -0
- package/dist/manifest.js +3722 -269
- package/dist/manifest.js.map +29 -3
- package/dist/react/index.js +158 -2
- package/dist/react/index.js.map +6 -4
- package/dist/research/index.js +125277 -0
- package/dist/research/index.js.map +368 -0
- package/dist/src/angular/index.d.ts +1 -0
- package/dist/src/angular/research.service.d.ts +12 -0
- package/dist/src/client/index.d.ts +1 -0
- package/dist/src/client/research.d.ts +30 -0
- package/dist/src/react/index.d.ts +1 -0
- package/dist/src/react/useResearch.d.ts +9 -0
- package/dist/src/research/budget.d.ts +26 -0
- package/dist/src/research/evaluation.d.ts +42 -0
- package/dist/src/research/evidence.d.ts +21 -0
- package/dist/src/research/index.d.ts +9 -0
- package/dist/src/research/manifest.d.ts +18 -0
- package/dist/src/research/plugin.d.ts +230 -0
- package/dist/src/research/runtime.d.ts +2 -0
- package/dist/src/research/store.d.ts +29 -0
- package/dist/src/research/types.d.ts +95 -0
- package/dist/src/research/workflows.d.ts +96 -0
- package/dist/src/svelte/createResearch.d.ts +9 -0
- package/dist/src/svelte/index.d.ts +1 -0
- package/dist/src/vue/index.d.ts +1 -0
- package/dist/src/vue/useResearch.d.ts +9 -0
- package/dist/svelte/index.js +164 -2
- package/dist/svelte/index.js.map +6 -4
- package/dist/vue/index.js +164 -2
- package/dist/vue/index.js.map +6 -4
- package/package.json +21 -5
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/angular/ai-rag-workflow.service.ts", "../src/angular/ai-rag-stream.service.ts", "../src/retrieval/grounding.ts", "../src/quality/quality.ts", "../src/internal/atomicWrite.ts", "node:path", "../src/presentation/presentation.ts", "../src/angular/rag-client.service.ts", "../src/client/ragClient.ts"],
|
|
3
|
+
"sources": ["../src/client/research.ts", "../src/angular/ai-rag-workflow.service.ts", "../src/angular/ai-rag-stream.service.ts", "../src/retrieval/grounding.ts", "../src/quality/quality.ts", "../src/internal/atomicWrite.ts", "node:path", "../src/presentation/presentation.ts", "../src/angular/rag-client.service.ts", "../src/client/ragClient.ts", "../src/angular/research.service.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 { computed, Injectable } from \"@angular/core\";\nimport { RAGStreamService } from \"./ai-rag-stream.service\";\n\n@Injectable({ providedIn: \"root\" })\nexport class RAGWorkflowService extends RAGStreamService {\n connect(path: string, conversationId?: string) {\n const stream = super.connect(path, conversationId);\n\n return {\n ...stream,\n state: computed(() => stream.workflow()),\n };\n }\n}\n",
|
|
6
7
|
"import { computed, Injectable } from \"@angular/core\";\nimport {\n buildRAGAnswerWorkflowState,\n buildRAGStreamProgress,\n} from \"../presentation/workflowState\";\nimport { AIStreamService } from \"@absolutejs/ai/angular\";\n\n@Injectable({ providedIn: \"root\" })\nexport class RAGStreamService extends AIStreamService {\n connect(path: string, conversationId?: string) {\n const stream = super.connect(path, conversationId);\n\n const workflow = computed(() =>\n buildRAGAnswerWorkflowState({\n error: stream.error(),\n isStreaming: stream.isStreaming(),\n messages: stream.messages(),\n }),\n );\n const progress = computed(() =>\n buildRAGStreamProgress({\n error: stream.error(),\n isStreaming: stream.isStreaming(),\n messages: stream.messages(),\n }),\n );\n const latestAssistantMessage = computed(\n () => workflow().latestAssistantMessage,\n );\n const sources = computed(() => workflow().sources);\n const sourceGroups = computed(() => workflow().sourceGroups);\n const citations = computed(() => workflow().citations);\n const sourceSummaries = computed(() => workflow().sourceSummaries);\n const citationReferenceMap = computed(\n () => workflow().citationReferenceMap,\n );\n const retrieval = computed(() => workflow().retrieval);\n const groundedAnswer = computed(() => workflow().groundedAnswer);\n const groundingReferences = computed(() => workflow().groundingReferences);\n const hasRetrieved = computed(() => workflow().hasRetrieved);\n const hasSources = computed(() => workflow().hasSources);\n const isRetrieving = computed(() => workflow().isRetrieving);\n const isRetrieved = computed(() => workflow().isRetrieved);\n const isAnswerStreaming = computed(() => workflow().isAnswerStreaming);\n const isComplete = computed(() => workflow().isComplete);\n const isError = computed(() => workflow().isError);\n const isRunning = computed(() => workflow().isRunning);\n const stage = computed(() => workflow().stage);\n\n return {\n ...stream,\n citations,\n citationReferenceMap,\n groundedAnswer,\n groundingReferences,\n hasRetrieved,\n hasSources,\n isAnswerStreaming,\n isComplete,\n isError,\n isRetrieved,\n isRetrieving,\n isRunning,\n latestAssistantMessage,\n progress,\n query: stream.send,\n retrieval,\n sourceGroups,\n sourceSummaries,\n sources,\n stage,\n workflow,\n };\n }\n}\n",
|
|
7
8
|
"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",
|
|
@@ -10,9 +11,10 @@
|
|
|
10
11
|
"function assertPath(path){if(typeof path!==\"string\")throw TypeError(\"Path must be a string. Received \"+JSON.stringify(path))}function normalizeStringPosix(path,allowAboveRoot){var res=\"\",lastSegmentLength=0,lastSlash=-1,dots=0,code;for(var i=0;i<=path.length;++i){if(i<path.length)code=path.charCodeAt(i);else if(code===47)break;else code=47;if(code===47){if(lastSlash===i-1||dots===1);else if(lastSlash!==i-1&&dots===2){if(res.length<2||lastSegmentLength!==2||res.charCodeAt(res.length-1)!==46||res.charCodeAt(res.length-2)!==46){if(res.length>2){var lastSlashIndex=res.lastIndexOf(\"/\");if(lastSlashIndex!==res.length-1){if(lastSlashIndex===-1)res=\"\",lastSegmentLength=0;else res=res.slice(0,lastSlashIndex),lastSegmentLength=res.length-1-res.lastIndexOf(\"/\");lastSlash=i,dots=0;continue}}else if(res.length===2||res.length===1){res=\"\",lastSegmentLength=0,lastSlash=i,dots=0;continue}}if(allowAboveRoot){if(res.length>0)res+=\"/..\";else res=\"..\";lastSegmentLength=2}}else{if(res.length>0)res+=\"/\"+path.slice(lastSlash+1,i);else res=path.slice(lastSlash+1,i);lastSegmentLength=i-lastSlash-1}lastSlash=i,dots=0}else if(code===46&&dots!==-1)++dots;else dots=-1}return res}function _format(sep,pathObject){var dir=pathObject.dir||pathObject.root,base=pathObject.base||(pathObject.name||\"\")+(pathObject.ext||\"\");if(!dir)return base;if(dir===pathObject.root)return dir+base;return dir+sep+base}function resolve(){var resolvedPath=\"\",resolvedAbsolute=!1,cwd;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path;if(i>=0)path=arguments[i];else{if(cwd===void 0)cwd=process.cwd();path=cwd}if(assertPath(path),path.length===0)continue;resolvedPath=path+\"/\"+resolvedPath,resolvedAbsolute=path.charCodeAt(0)===47}if(resolvedPath=normalizeStringPosix(resolvedPath,!resolvedAbsolute),resolvedAbsolute)if(resolvedPath.length>0)return\"/\"+resolvedPath;else return\"/\";else if(resolvedPath.length>0)return resolvedPath;else return\".\"}function normalize(path){if(assertPath(path),path.length===0)return\".\";var isAbsolute=path.charCodeAt(0)===47,trailingSeparator=path.charCodeAt(path.length-1)===47;if(path=normalizeStringPosix(path,!isAbsolute),path.length===0&&!isAbsolute)path=\".\";if(path.length>0&&trailingSeparator)path+=\"/\";if(isAbsolute)return\"/\"+path;return path}function isAbsolute(path){return assertPath(path),path.length>0&&path.charCodeAt(0)===47}function join(){if(arguments.length===0)return\".\";var joined;for(var i=0;i<arguments.length;++i){var arg=arguments[i];if(assertPath(arg),arg.length>0)if(joined===void 0)joined=arg;else joined+=\"/\"+arg}if(joined===void 0)return\".\";return normalize(joined)}function relative(from,to){if(assertPath(from),assertPath(to),from===to)return\"\";if(from=resolve(from),to=resolve(to),from===to)return\"\";var fromStart=1;for(;fromStart<from.length;++fromStart)if(from.charCodeAt(fromStart)!==47)break;var fromEnd=from.length,fromLen=fromEnd-fromStart,toStart=1;for(;toStart<to.length;++toStart)if(to.charCodeAt(toStart)!==47)break;var toEnd=to.length,toLen=toEnd-toStart,length=fromLen<toLen?fromLen:toLen,lastCommonSep=-1,i=0;for(;i<=length;++i){if(i===length){if(toLen>length){if(to.charCodeAt(toStart+i)===47)return to.slice(toStart+i+1);else if(i===0)return to.slice(toStart+i)}else if(fromLen>length){if(from.charCodeAt(fromStart+i)===47)lastCommonSep=i;else if(i===0)lastCommonSep=0}break}var fromCode=from.charCodeAt(fromStart+i),toCode=to.charCodeAt(toStart+i);if(fromCode!==toCode)break;else if(fromCode===47)lastCommonSep=i}var out=\"\";for(i=fromStart+lastCommonSep+1;i<=fromEnd;++i)if(i===fromEnd||from.charCodeAt(i)===47)if(out.length===0)out+=\"..\";else out+=\"/..\";if(out.length>0)return out+to.slice(toStart+lastCommonSep);else{if(toStart+=lastCommonSep,to.charCodeAt(toStart)===47)++toStart;return to.slice(toStart)}}function _makeLong(path){return path}function dirname(path){if(assertPath(path),path.length===0)return\".\";var code=path.charCodeAt(0),hasRoot=code===47,end=-1,matchedSlash=!0;for(var i=path.length-1;i>=1;--i)if(code=path.charCodeAt(i),code===47){if(!matchedSlash){end=i;break}}else matchedSlash=!1;if(end===-1)return hasRoot?\"/\":\".\";if(hasRoot&&end===1)return\"//\";return path.slice(0,end)}function basename(path,ext){if(ext!==void 0&&typeof ext!==\"string\")throw TypeError('\"ext\" argument must be a string');assertPath(path);var start=0,end=-1,matchedSlash=!0,i;if(ext!==void 0&&ext.length>0&&ext.length<=path.length){if(ext.length===path.length&&ext===path)return\"\";var extIdx=ext.length-1,firstNonSlashEnd=-1;for(i=path.length-1;i>=0;--i){var code=path.charCodeAt(i);if(code===47){if(!matchedSlash){start=i+1;break}}else{if(firstNonSlashEnd===-1)matchedSlash=!1,firstNonSlashEnd=i+1;if(extIdx>=0)if(code===ext.charCodeAt(extIdx)){if(--extIdx===-1)end=i}else extIdx=-1,end=firstNonSlashEnd}}if(start===end)end=firstNonSlashEnd;else if(end===-1)end=path.length;return path.slice(start,end)}else{for(i=path.length-1;i>=0;--i)if(path.charCodeAt(i)===47){if(!matchedSlash){start=i+1;break}}else if(end===-1)matchedSlash=!1,end=i+1;if(end===-1)return\"\";return path.slice(start,end)}}function extname(path){assertPath(path);var startDot=-1,startPart=0,end=-1,matchedSlash=!0,preDotState=0;for(var i=path.length-1;i>=0;--i){var code=path.charCodeAt(i);if(code===47){if(!matchedSlash){startPart=i+1;break}continue}if(end===-1)matchedSlash=!1,end=i+1;if(code===46){if(startDot===-1)startDot=i;else if(preDotState!==1)preDotState=1}else if(startDot!==-1)preDotState=-1}if(startDot===-1||end===-1||preDotState===0||preDotState===1&&startDot===end-1&&startDot===startPart+1)return\"\";return path.slice(startDot,end)}function format(pathObject){if(pathObject===null||typeof pathObject!==\"object\")throw TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof pathObject);return _format(\"/\",pathObject)}function parse(path){assertPath(path);var ret={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(path.length===0)return ret;var code=path.charCodeAt(0),isAbsolute2=code===47,start;if(isAbsolute2)ret.root=\"/\",start=1;else start=0;var startDot=-1,startPart=0,end=-1,matchedSlash=!0,i=path.length-1,preDotState=0;for(;i>=start;--i){if(code=path.charCodeAt(i),code===47){if(!matchedSlash){startPart=i+1;break}continue}if(end===-1)matchedSlash=!1,end=i+1;if(code===46){if(startDot===-1)startDot=i;else if(preDotState!==1)preDotState=1}else if(startDot!==-1)preDotState=-1}if(startDot===-1||end===-1||preDotState===0||preDotState===1&&startDot===end-1&&startDot===startPart+1){if(end!==-1)if(startPart===0&&isAbsolute2)ret.base=ret.name=path.slice(1,end);else ret.base=ret.name=path.slice(startPart,end)}else{if(startPart===0&&isAbsolute2)ret.name=path.slice(1,startDot),ret.base=path.slice(1,end);else ret.name=path.slice(startPart,startDot),ret.base=path.slice(startPart,end);ret.ext=path.slice(startDot,end)}if(startPart>0)ret.dir=path.slice(0,startPart-1);else if(isAbsolute2)ret.dir=\"/\";return ret}var sep=\"/\",delimiter=\":\",posix=((p)=>(p.posix=p,p))({resolve,normalize,isAbsolute,join,relative,_makeLong,dirname,basename,extname,format,parse,sep,delimiter,win32:null,posix:null});var path_default=posix;export{sep,resolve,relative,posix,parse,normalize,join,isAbsolute,format,extname,dirname,delimiter,path_default as default,basename,_makeLong};",
|
|
11
12
|
"import type {\n AIMessage,\n RAGChunkStructure,\n RAGRetrievalTraceStep,\n RAGRetrievalTrace,\n RAGHybridRetrievalMode,\n RAGSourceBalanceStrategy,\n RAGSource,\n RAGSourceLabels,\n} from \"@absolutejs/ai\";\nimport type {\n RAGAdminActionPresentation,\n RAGAdminActionRecord,\n RAGAdminJobPresentation,\n RAGAdminJobRecord,\n RAGAnswerGroundingCaseSnapshotPresentation,\n RAGAnswerGroundingEvaluationCaseDiff,\n RAGAnswerGroundingEvaluationHistory,\n RAGAnswerGroundingEntityQualitySummary,\n RAGAnswerGroundingEntityQualityView,\n RAGAnswerGroundingEvaluationResponse,\n RAGCorpusHealth,\n RAGCorpusHealthPresentation,\n RAGExtractorReadiness,\n RAGReadinessPresentation,\n RAGGroundingOverviewPresentation,\n RAGGroundingProviderCaseComparisonPresentation,\n RAGGroundingProviderOverviewPresentation,\n RAGGroundingProviderPresentation,\n RAGComparisonOverviewPresentation,\n RAGComparisonPresentation,\n RAGChunkGraph,\n RAGChunkExcerpts,\n RAGExcerptModeCounts,\n RAGExcerptPromotionReason,\n RAGExcerptSelection,\n RAGChunkGraphEdge,\n RAGChunkGraphNavigation,\n RAGChunkGraphNode,\n RAGChunkGraphSectionGroup,\n RAGDocumentChunkPreview,\n RAGLabelValueRow,\n RAGRerankerComparisonEntry,\n RAGRetrievalComparison,\n RAGRetrievalComparisonEntry,\n RAGRetrievalComparisonRun,\n RAGRetrievalReleaseGroupHistoryPresentation,\n RAGRetrievalReleaseHistoryRunPresentation,\n RAGRetrievalReleaseTimelineSummary,\n RAGRetrievalTraceHistoryWindow,\n RAGQualityOverviewPresentation,\n RAGSectionRetrievalDiagnostic,\n RAGEvaluationCaseDiff,\n RAGEvaluationCaseTracePresentation,\n RAGEvaluationEntityQualitySummary,\n RAGEvaluationEntityQualityView,\n RAGEvaluationHistory,\n RAGAnswerGroundingHistoryPresentation,\n RAGEvaluationResponse,\n RAGEvaluationHistoryPresentation,\n RAGEvaluationHistoryStore,\n RAGEvaluationSuiteSnapshotHistory,\n RAGEvaluationSuiteSnapshotHistoryPresentation,\n RAGEvaluationSuiteSnapshotPresentation,\n RAGEntityQualityPresentation,\n RAGEntityQualityViewPresentation,\n RAGRerankerComparison,\n RAGAnswerWorkflowState,\n RAGRetrievalTracePresentation,\n RAGSourceGroup,\n RAGSourceSummary,\n RAGSyncOverviewPresentation,\n RAGSyncSourcePresentation,\n RAGSyncSourceRecord,\n RAGSyncSourceRunPresentation,\n} from \"../../types/engine\";\nimport type { RAGStreamProgress } from \"../../types/presentation\";\n// Re-exported so workflowState (and `@absolutejs/rag/client/ui`) keep this type.\nexport type { RAGStreamProgress } from \"../../types/presentation\";\nimport {\n buildRAGCitationReferenceMap,\n buildRAGCitations,\n buildRAGGroundedAnswer,\n buildRAGGroundedAnswerSectionSummaries,\n buildRAGGroundingReferences,\n} from \"../retrieval/grounding\";\nimport {\n buildRAGAnswerGroundingEntityQualityView,\n buildRAGEvaluationEntityQualityView,\n} from \"../quality/quality\";\n\nexport {\n buildRAGCitationReferenceMap,\n buildRAGCitations,\n buildRAGGroundedAnswer,\n buildRAGGroundedAnswerSectionSummaries,\n buildRAGGroundingReferences,\n};\n\nconst buildSourceGroupKey = (source: RAGSource) =>\n source.source ?? source.title ?? source.chunkId;\n\nconst buildSourceLabel = (source: RAGSource) =>\n source.source ?? source.title ?? source.chunkId;\n\nconst getContextNumber = (value: unknown) =>\n typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n\nconst getContextString = (value: unknown) =>\n typeof value === \"string\" && value.trim().length > 0\n ? value.trim()\n : undefined;\n\nconst isRAGRetrievalTrace = (value: unknown): value is RAGRetrievalTrace => {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n const candidate = value as Record<string, unknown>;\n\n return (\n typeof candidate.query === \"string\" &&\n typeof candidate.transformedQuery === \"string\" &&\n Array.isArray(candidate.variantQueries) &&\n Array.isArray(candidate.steps)\n );\n};\n\nconst formatTimestampLabel = (value: unknown) => {\n const timestamp =\n typeof value === \"number\" && Number.isFinite(value)\n ? value\n : typeof value === \"string\"\n ? Date.parse(value)\n : Number.NaN;\n if (!Number.isFinite(timestamp)) {\n return undefined;\n }\n\n return new Date(timestamp).toLocaleString(\"en-US\", {\n dateStyle: \"medium\",\n timeStyle: \"short\",\n });\n};\n\nconst formatRAGTraceValue = (value: unknown): string => {\n if (typeof value === \"string\") return value;\n if (typeof value === \"number\" || typeof value === \"boolean\") {\n return String(value);\n }\n if (Array.isArray(value)) {\n return value.join(\", \");\n }\n if (value && typeof value === \"object\") {\n return JSON.stringify(value);\n }\n return \"n/a\";\n};\n\nconst formatLeadContinuityCue = (value: unknown) => {\n const cue = getContextString(value);\n switch (cue) {\n case \"immediate_follow_up\":\n return \"Immediate follow-up\";\n case \"near_follow_up\":\n return \"Near follow-up\";\n case \"close_follow_up\":\n return \"Close follow-up\";\n case \"delayed_follow_up\":\n return \"Delayed follow-up\";\n case \"immediate_prior\":\n return \"Immediate prior segment\";\n case \"near_prior\":\n return \"Near prior segment\";\n case \"close_prior\":\n return \"Close prior segment\";\n case \"delayed_prior\":\n return \"Delayed prior segment\";\n default:\n return undefined;\n }\n};\n\nconst formatLeadSpeakerAttributionCue = (value: unknown) => {\n const cue = getContextString(value);\n switch (cue) {\n case \"quoted_match\":\n return \"Quoted speaker match\";\n default:\n return undefined;\n }\n};\n\nconst formatLeadChannelAttributionCue = (value: unknown) => {\n const cue = getContextString(value);\n switch (cue) {\n case \"quoted_match\":\n return \"Quoted channel match\";\n default:\n return undefined;\n }\n};\n\nconst formatLeadMediaCueSummary = (input?: {\n leadSpeakerCue?: string;\n leadSpeakerAttributionCue?: string;\n leadChannelCue?: string;\n leadChannelAttributionCue?: string;\n leadContinuityCue?: string;\n}) => {\n const parts = [\n input?.leadSpeakerCue ? `speaker ${input.leadSpeakerCue}` : undefined,\n input?.leadSpeakerAttributionCue === \"quoted_match\"\n ? \"quoted speaker match\"\n : undefined,\n input?.leadChannelCue ? `channel ${input.leadChannelCue}` : undefined,\n input?.leadChannelAttributionCue === \"quoted_match\"\n ? \"quoted channel match\"\n : undefined,\n formatLeadContinuityCue(input?.leadContinuityCue),\n ].filter(\n (value): value is string => typeof value === \"string\" && value.length > 0,\n );\n\n return parts.length > 0 ? parts.join(\" · \") : \"none\";\n};\n\nconst formatRAGTraceMetadataRow = (\n key: string,\n value: unknown,\n): RAGLabelValueRow => ({\n label:\n key === \"sqliteQueryMode\"\n ? \"SQLite query mode\"\n : key === \"postgresQueryMode\"\n ? \"Postgres query mode\"\n : key === \"sqliteQueryPushdownMode\"\n ? \"SQLite pushdown mode\"\n : key === \"postgresQueryPushdownMode\"\n ? \"Postgres pushdown mode\"\n : key === \"sqliteQueryPushdownApplied\"\n ? \"SQLite pushdown applied\"\n : key === \"postgresQueryPushdownApplied\"\n ? \"Postgres pushdown applied\"\n : key === \"sqliteQueryPushdownClauseCount\"\n ? \"SQLite pushdown clauses\"\n : key === \"postgresQueryPushdownClauseCount\"\n ? \"Postgres pushdown clauses\"\n : key === \"sqliteQueryPushdownCoverageRatio\"\n ? \"SQLite pushdown coverage\"\n : key === \"postgresQueryPushdownCoverageRatio\"\n ? \"Postgres pushdown coverage\"\n : key === \"sqliteQueryTotalFilterClauseCount\"\n ? \"SQLite total filter clauses\"\n : key === \"postgresQueryTotalFilterClauseCount\"\n ? \"Postgres total filter clauses\"\n : key === \"sqliteQueryJsRemainderClauseCount\"\n ? \"SQLite JS remainder clauses\"\n : key === \"sqliteQueryMultiplierUsed\"\n ? \"SQLite query multiplier\"\n : key === \"sqliteQueryPlannerProfileUsed\"\n ? \"SQLite query profile\"\n : key === \"sqliteQueryCandidateLimitUsed\"\n ? \"SQLite candidate limit\"\n : key === \"sqliteQueryMaxBackfillsUsed\"\n ? \"SQLite max backfills\"\n : key === \"sqliteQueryMinResultsUsed\"\n ? \"SQLite min results\"\n : key === \"sqliteQueryFillPolicyUsed\"\n ? \"SQLite fill policy\"\n : key ===\n \"postgresQueryJsRemainderClauseCount\"\n ? \"Postgres JS remainder clauses\"\n : key ===\n \"postgresQueryMultiplierUsed\"\n ? \"Postgres query multiplier\"\n : key ===\n \"postgresQueryPlannerProfileUsed\"\n ? \"Postgres query profile\"\n : key ===\n \"postgresQueryCandidateLimitUsed\"\n ? \"Postgres candidate limit\"\n : key ===\n \"postgresQueryMaxBackfillsUsed\"\n ? \"Postgres max backfills\"\n : key ===\n \"postgresQueryMinResultsUsed\"\n ? \"Postgres min results\"\n : key ===\n \"postgresQueryFillPolicyUsed\"\n ? \"Postgres fill policy\"\n : key ===\n \"sqliteQueryJsRemainderRatio\"\n ? \"SQLite JS remainder share\"\n : key ===\n \"postgresQueryJsRemainderRatio\"\n ? \"Postgres JS remainder share\"\n : key ===\n \"sqliteQueryFilteredCandidates\"\n ? \"SQLite filtered candidates\"\n : key ===\n \"postgresQueryFilteredCandidates\"\n ? \"Postgres filtered candidates\"\n : key ===\n \"sqliteQueryInitialSearchK\"\n ? \"SQLite initial searchK\"\n : key ===\n \"postgresQueryInitialSearchK\"\n ? \"Postgres initial searchK\"\n : key ===\n \"sqliteQueryFinalSearchK\"\n ? \"SQLite final searchK\"\n : key ===\n \"postgresQueryFinalSearchK\"\n ? \"Postgres final searchK\"\n : key ===\n \"sqliteQuerySearchExpansionRatio\"\n ? \"SQLite search expansion\"\n : key ===\n \"postgresQuerySearchExpansionRatio\"\n ? \"Postgres search expansion\"\n : key ===\n \"sqliteQueryBackfillCount\"\n ? \"SQLite backfill count\"\n : key ===\n \"sqliteQueryBackfillLimitReached\"\n ? \"SQLite backfill limit reached\"\n : key ===\n \"sqliteQueryMinResultsSatisfied\"\n ? \"SQLite min results satisfied\"\n : key ===\n \"postgresQueryBackfillCount\"\n ? \"Postgres backfill count\"\n : key ===\n \"postgresQueryBackfillLimitReached\"\n ? \"Postgres backfill limit reached\"\n : key ===\n \"postgresQueryMinResultsSatisfied\"\n ? \"Postgres min results satisfied\"\n : key ===\n \"sqliteQueryReturnedCount\"\n ? \"SQLite returned hits\"\n : key ===\n \"postgresQueryReturnedCount\"\n ? \"Postgres returned hits\"\n : key ===\n \"sqliteQueryCandidateYieldRatio\"\n ? \"SQLite candidate yield\"\n : key ===\n \"postgresQueryCandidateYieldRatio\"\n ? \"Postgres candidate yield\"\n : key ===\n \"sqliteQueryTopKFillRatio\"\n ? \"SQLite topK fill rate\"\n : key ===\n \"postgresQueryTopKFillRatio\"\n ? \"Postgres topK fill rate\"\n : key ===\n \"sqliteQueryUnderfilledTopK\"\n ? \"SQLite underfilled topK\"\n : key ===\n \"postgresQueryUnderfilledTopK\"\n ? \"Postgres underfilled topK\"\n : key ===\n \"sqliteQueryCandidateBudgetExhausted\"\n ? \"SQLite candidate budget exhausted\"\n : key ===\n \"postgresQueryCandidateBudgetExhausted\"\n ? \"Postgres candidate budget exhausted\"\n : key ===\n \"sqliteQueryCandidateCoverage\"\n ? \"SQLite candidate coverage\"\n : key ===\n \"postgresQueryCandidateCoverage\"\n ? \"Postgres candidate coverage\"\n : key ===\n \"postgresIndexType\"\n ? \"Postgres index type\"\n : key ===\n \"postgresIndexName\"\n ? \"Postgres index name\"\n : key ===\n \"postgresIndexPresent\"\n ? \"Postgres index present\"\n : key ===\n \"postgresEstimatedRowCount\"\n ? \"Postgres estimated rows\"\n : key ===\n \"postgresTableBytes\"\n ? \"Postgres table bytes\"\n : key ===\n \"postgresIndexBytes\"\n ? \"Postgres index bytes\"\n : key ===\n \"postgresTotalBytes\"\n ? \"Postgres total bytes\"\n : key ===\n \"postgresIndexStorageRatio\"\n ? \"Postgres index storage ratio\"\n : key ===\n \"leadSpeakerCue\"\n ? \"Lead speaker cue\"\n : key ===\n \"leadSpeakerAttributionCue\"\n ? \"Lead speaker attribution\"\n : key ===\n \"leadChannelAttributionCue\"\n ? \"Lead channel attribution\"\n : key ===\n \"leadChannelCue\"\n ? \"Lead channel cue\"\n : key ===\n \"leadContinuityCue\"\n ? \"Lead continuity cue\"\n : key,\n value:\n key === \"sourceAwareChunkReason\"\n ? (formatSourceAwareChunkReason(value) ?? formatRAGTraceValue(value))\n : key === \"leadSpeakerAttributionCue\"\n ? (formatLeadSpeakerAttributionCue(value) ?? formatRAGTraceValue(value))\n : key === \"leadChannelAttributionCue\"\n ? (formatLeadChannelAttributionCue(value) ??\n formatRAGTraceValue(value))\n : key === \"leadContinuityCue\"\n ? (formatLeadContinuityCue(value) ?? formatRAGTraceValue(value))\n : formatRAGTraceValue(value),\n});\n\nexport const buildRAGRetrievalTracePresentation = (\n trace?: RAGRetrievalTrace,\n): RAGRetrievalTracePresentation => {\n if (!trace) {\n return {\n details: [],\n stats: [],\n steps: [],\n };\n }\n\n const stats: RAGLabelValueRow[] = [\n { label: \"Mode\", value: trace.mode },\n { label: \"Final Results\", value: String(trace.resultCounts.final) },\n {\n label: \"Vector Candidates\",\n value: String(trace.resultCounts.vector),\n },\n {\n label: \"Lexical Candidates\",\n value: String(trace.resultCounts.lexical),\n },\n ];\n const details: RAGLabelValueRow[] = [\n { label: \"Transformed query\", value: trace.transformedQuery },\n ...(trace.queryTransformLabel || trace.queryTransformProvider\n ? [\n {\n label: \"Query transform\",\n value:\n trace.queryTransformLabel ??\n trace.queryTransformProvider ??\n \"configured\",\n },\n ...(trace.queryTransformReason\n ? [\n {\n label: \"Query transform reason\",\n value: trace.queryTransformReason,\n },\n ]\n : []),\n ]\n : []),\n {\n label: \"Variant queries\",\n value:\n trace.variantQueries.length > 0\n ? trace.variantQueries.join(\" · \")\n : \"none\",\n },\n ...(trace.requestedMode && trace.requestedMode !== trace.mode\n ? [{ label: \"Requested mode\", value: trace.requestedMode }]\n : []),\n ...(trace.routingLabel || trace.routingProvider\n ? [\n {\n label: \"Routing decision\",\n value: trace.routingLabel ?? trace.routingProvider ?? \"configured\",\n },\n ...(trace.routingReason\n ? [\n {\n label: \"Routing reason\",\n value: trace.routingReason,\n },\n ]\n : []),\n ]\n : []),\n { label: \"Candidate topK\", value: String(trace.candidateTopK) },\n { label: \"Lexical topK\", value: String(trace.lexicalTopK) },\n ];\n const steps = trace.steps.map((step) => {\n const sqlitePlannerCues = formatSQLitePlannerCueSummary(step.metadata);\n const postgresPlannerCues = formatPostgresPlannerCueSummary(step.metadata);\n\n return {\n count: step.count,\n label: step.label,\n rows: [\n { label: \"stage\", value: step.stage },\n ...(typeof step.count === \"number\"\n ? [{ label: \"count\", value: String(step.count) }]\n : []),\n ...(typeof step.durationMs === \"number\"\n ? [{ label: \"durationMs\", value: String(step.durationMs) }]\n : []),\n ...(sqlitePlannerCues !== \"none\"\n ? [\n {\n label: \"SQLite planner cues\",\n value: sqlitePlannerCues,\n },\n ]\n : []),\n ...(postgresPlannerCues !== \"none\"\n ? [\n {\n label: \"Postgres planner cues\",\n value: postgresPlannerCues,\n },\n ]\n : []),\n ...Object.entries(step.metadata ?? {}).map(([key, value]) =>\n formatRAGTraceMetadataRow(key, value),\n ),\n ],\n stage: step.stage,\n };\n });\n\n return {\n details,\n stats,\n steps,\n };\n};\n\nconst formatCompactList = (values?: string[]) =>\n values && values.length > 0 ? values.join(\", \") : \"none\";\n\nconst formatCoverageMap = (entries?: Record<string, number>) => {\n if (!entries) {\n return \"none\";\n }\n\n const values = Object.entries(entries);\n return values.length > 0\n ? values.map(([key, value]) => `${key} ${value}`).join(\" · \")\n : \"none\";\n};\n\nconst formatByteSizeLabel = (value?: number) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return \"n/a\";\n }\n\n if (value < 1024) {\n return `${Math.round(value)} B`;\n }\n\n if (value < 1024 * 1024) {\n return `${(value / 1024).toFixed(value >= 10 * 1024 ? 0 : 1)} KiB`;\n }\n\n if (value < 1024 * 1024 * 1024) {\n return `${(value / (1024 * 1024)).toFixed(\n value >= 10 * 1024 * 1024 ? 0 : 1,\n )} MiB`;\n }\n\n return `${(value / (1024 * 1024 * 1024)).toFixed(\n value >= 10 * 1024 * 1024 * 1024 ? 0 : 1,\n )} GiB`;\n};\n\nconst formatDurationLabel = (value?: number) => {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return \"n/a\";\n }\n\n if (value < 1000) {\n return `${value}ms`;\n }\n\n if (value < 60000) {\n return `${(value / 1000).toFixed(value >= 10000 ? 0 : 1)}s`;\n }\n\n if (value < 3600000) {\n return `${(value / 60000).toFixed(value >= 600000 ? 0 : 1)}m`;\n }\n\n return `${(value / 3600000).toFixed(value >= 36000000 ? 0 : 1)}h`;\n};\n\nconst formatDateLabel = (value?: number) =>\n typeof value === \"number\" && Number.isFinite(value)\n ? new Date(value).toLocaleString(\"en-US\")\n : \"n/a\";\n\nconst formatAgeLabel = (value?: number) => {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return \"n/a\";\n }\n\n if (value < 1000) {\n return `${Math.round(value)}ms`;\n }\n\n if (value < 60000) {\n return `${(value / 1000).toFixed(value >= 10000 ? 0 : 1)}s`;\n }\n\n if (value < 3600000) {\n return `${(value / 60000).toFixed(value >= 600000 ? 0 : 1)}m`;\n }\n\n if (value < 86400000) {\n return `${(value / 3600000).toFixed(value >= 36000000 ? 0 : 1)}h`;\n }\n\n return `${(value / 86400000).toFixed(value >= 864000000 ? 0 : 1)}d`;\n};\n\nconst formatSourceAwareChunkReason = (value: unknown) => {\n const reason = getContextString(value);\n if (reason === \"section_boundary\") {\n return \"Chunk boundary section\";\n }\n if (reason === \"size_limit\") {\n return \"Chunk boundary size limit\";\n }\n if (reason === \"source_native_unit\") {\n return \"Chunk boundary source-native unit\";\n }\n return undefined;\n};\n\nconst buildSourceAwareUnitScopeLabel = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const sectionKind = getContextString(metadata.sectionKind);\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const pdfSemanticRole = getContextString(metadata.pdfSemanticRole);\n const pdfTextKind = getContextString(metadata.pdfTextKind);\n const officeBlockKindValue = getContextString(metadata.officeBlockKind);\n const officeBlockKind =\n officeBlockKindValue === \"table\" ||\n officeBlockKindValue === \"list\" ||\n officeBlockKindValue === \"paragraph\"\n ? officeBlockKindValue\n : undefined;\n const sheetName = getContextString(metadata.sheetName);\n const spreadsheetTableLabel = formatSpreadsheetTableLabel(\n getContextNumber(metadata.spreadsheetTableIndex),\n getContextNumber(metadata.spreadsheetTableCount),\n );\n const slideTitle = getContextString(metadata.slideTitle);\n const slideNumber =\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n\n if (\n sectionPath.length > 0 &&\n (sectionKind === \"markdown_heading\" ||\n sectionKind === \"html_heading\" ||\n sectionKind === \"office_heading\" ||\n sectionKind === undefined)\n ) {\n return `Source-aware section ${sectionPath.join(\" > \")}`;\n }\n\n if (sectionKind === \"pdf_block\") {\n if (pdfSemanticRole === \"figure_caption\" && sectionTitle) {\n return `Source-aware PDF figure caption ${sectionTitle}`;\n }\n if (pdfSemanticRole === \"figure_body\" && sectionTitle) {\n return `Source-aware PDF figure body ${sectionTitle}`;\n }\n if (pdfTextKind === \"table_like\" && sectionTitle) {\n return `Source-aware PDF table block ${sectionTitle}`;\n }\n if (sectionTitle) {\n return `Source-aware PDF block ${sectionTitle}`;\n }\n return \"Source-aware PDF block\";\n }\n\n if (sectionKind === \"office_block\") {\n const officeSectionLabel =\n sectionPath.length > 0 ? sectionPath.join(\" > \") : sectionTitle;\n if (officeBlockKind && officeSectionLabel) {\n return `Source-aware office ${officeBlockKind} block ${officeSectionLabel}`;\n }\n if (officeSectionLabel) {\n return `Source-aware office block ${officeSectionLabel}`;\n }\n return \"Source-aware office block\";\n }\n\n if (\n sectionKind === \"spreadsheet_rows\" ||\n (sectionKind === undefined &&\n (sheetName ||\n spreadsheetTableLabel ||\n getContextNumber(metadata.spreadsheetRowStart) !== undefined ||\n getContextNumber(metadata.spreadsheetRowEnd) !== undefined))\n ) {\n if (sheetName && spreadsheetTableLabel) {\n return `Source-aware spreadsheet ${sheetName} ${spreadsheetTableLabel}`;\n }\n if (sheetName) {\n return `Source-aware spreadsheet ${sheetName}`;\n }\n return \"Source-aware spreadsheet\";\n }\n\n if (sectionKind === \"presentation_slide\") {\n if (slideNumber && slideTitle) {\n return `Source-aware slide ${slideNumber} ${slideTitle}`;\n }\n if (slideTitle) {\n return `Source-aware slide ${slideTitle}`;\n }\n if (slideNumber) {\n return `Source-aware slide ${slideNumber}`;\n }\n return \"Source-aware slide\";\n }\n\n return undefined;\n};\n\nconst buildSyncOverviewLatestRow = (sources: RAGSyncSourceRecord[]) => {\n const latest = [...sources]\n .filter(\n (record) =>\n typeof record.lastSuccessfulSyncAt === \"number\" ||\n typeof record.lastSyncedAt === \"number\",\n )\n .sort(\n (left, right) =>\n (right.lastSuccessfulSyncAt ?? right.lastSyncedAt ?? 0) -\n (left.lastSuccessfulSyncAt ?? left.lastSyncedAt ?? 0),\n )[0];\n\n if (!latest) {\n return {\n label: \"Latest sync\",\n value: \"No completed run yet\",\n };\n }\n\n return {\n label: \"Latest sync\",\n value: [\n latest.label,\n typeof latest.documentCount === \"number\"\n ? `${latest.documentCount} docs`\n : \"\",\n typeof latest.chunkCount === \"number\"\n ? `${latest.chunkCount} chunks`\n : \"\",\n typeof latest.lastSyncDurationMs === \"number\"\n ? formatDurationLabel(latest.lastSyncDurationMs)\n : \"\",\n typeof latest.lastSuccessfulSyncAt === \"number\"\n ? formatDateLabel(latest.lastSuccessfulSyncAt)\n : typeof latest.lastSyncedAt === \"number\"\n ? formatDateLabel(latest.lastSyncedAt)\n : \"\",\n ]\n .filter(Boolean)\n .join(\" · \"),\n };\n};\n\nconst formatAdminActionLabel = (\n value: RAGAdminActionRecord[\"action\"] | RAGAdminJobRecord[\"action\"],\n) => value.replaceAll(\"_\", \" \");\n\nconst buildAdminTimingLabel = (input: {\n elapsedMs?: number;\n startedAt: number;\n}) =>\n typeof input.elapsedMs === \"number\"\n ? formatDurationLabel(input.elapsedMs)\n : formatDateLabel(input.startedAt);\n\nexport const buildRAGAdminJobPresentation = (\n job: RAGAdminJobRecord,\n): RAGAdminJobPresentation => ({\n id: job.id,\n action: job.action,\n status: job.status,\n summary: [\n job.status.toUpperCase(),\n formatAdminActionLabel(job.action),\n job.target,\n buildAdminTimingLabel(job),\n ]\n .filter(Boolean)\n .join(\" · \"),\n rows: [\n { label: \"Action\", value: formatAdminActionLabel(job.action) },\n { label: \"Status\", value: job.status },\n ...(job.target ? [{ label: \"Target\", value: job.target }] : []),\n { label: \"Timing\", value: buildAdminTimingLabel(job) },\n ...(job.error ? [{ label: \"Error\", value: job.error }] : []),\n ],\n});\n\nexport const buildRAGAdminJobPresentations = (\n jobs?: RAGAdminJobRecord[],\n): RAGAdminJobPresentation[] =>\n (jobs ?? []).slice(0, 3).map(buildRAGAdminJobPresentation);\n\nexport const buildRAGAdminActionPresentation = (\n action: RAGAdminActionRecord,\n): RAGAdminActionPresentation => ({\n id: action.id,\n action: action.action,\n status: action.status,\n summary: [\n action.status.toUpperCase(),\n formatAdminActionLabel(action.action),\n action.documentId ?? action.target,\n buildAdminTimingLabel(action),\n ]\n .filter(Boolean)\n .join(\" · \"),\n rows: [\n { label: \"Action\", value: formatAdminActionLabel(action.action) },\n { label: \"Status\", value: action.status },\n ...(action.documentId\n ? [{ label: \"Document\", value: action.documentId }]\n : action.target\n ? [{ label: \"Target\", value: action.target }]\n : []),\n { label: \"Timing\", value: buildAdminTimingLabel(action) },\n ...(action.error ? [{ label: \"Error\", value: action.error }] : []),\n ],\n});\n\nexport const buildRAGAdminActionPresentations = (\n actions?: RAGAdminActionRecord[],\n): RAGAdminActionPresentation[] =>\n (actions ?? []).slice(0, 3).map(buildRAGAdminActionPresentation);\n\nconst buildRAGSyncSourceRunPresentations = (\n source: RAGSyncSourceRecord,\n): RAGSyncSourceRunPresentation[] => {\n if (!Array.isArray(source.metadata?.recentRuns)) {\n return [];\n }\n\n return (source.metadata.recentRuns as Array<Record<string, unknown>>)\n .slice(0, 3)\n .map((entry, index) => {\n const trigger =\n typeof entry.trigger === \"string\" ? entry.trigger : \"sync\";\n const status =\n typeof entry.status === \"string\" ? entry.status : \"unknown\";\n const finishedAt =\n typeof entry.finishedAt === \"number\"\n ? formatDateLabel(entry.finishedAt)\n : \"n/a\";\n const duration =\n typeof entry.durationMs === \"number\"\n ? formatDurationLabel(entry.durationMs)\n : \"n/a\";\n const docs =\n typeof entry.documentCount === \"number\"\n ? `${entry.documentCount} docs`\n : \"n/a\";\n const chunks =\n typeof entry.chunkCount === \"number\"\n ? `${entry.chunkCount} chunks`\n : \"n/a\";\n const error =\n typeof entry.error === \"string\" && entry.error.length > 0\n ? entry.error\n : undefined;\n\n return {\n label: `Run ${index + 1}`,\n status,\n summary: `${trigger} · ${status} · ${docs} · ${chunks} · ${duration} · ${finishedAt}`,\n rows: [\n { label: \"Trigger\", value: trigger },\n { label: \"Status\", value: status },\n { label: \"Output\", value: `${docs} · ${chunks}` },\n { label: \"Duration\", value: duration },\n { label: \"Finished\", value: finishedAt },\n ...(error ? [{ label: \"Error\", value: error }] : []),\n ],\n };\n });\n};\n\nexport const buildRAGSyncSourcePresentation = (\n source: RAGSyncSourceRecord,\n): RAGSyncSourcePresentation => {\n const provider =\n typeof source.metadata?.provider === \"string\"\n ? source.metadata.provider\n : undefined;\n const accountMode =\n typeof source.metadata?.accountMode === \"string\"\n ? source.metadata.accountMode\n : undefined;\n const schedule =\n typeof source.metadata?.schedule === \"string\"\n ? source.metadata.schedule\n : undefined;\n const lastTrigger =\n typeof source.metadata?.lastTrigger === \"string\"\n ? source.metadata.lastTrigger\n : undefined;\n const liveReady =\n typeof source.metadata?.liveReady === \"string\"\n ? source.metadata.liveReady\n : undefined;\n const diagnosticSummary = source.diagnostics?.summary;\n const diagnosticTags =\n source.diagnostics?.entries.map((entry) =>\n entry.code\n .replace(/_/g, \" \")\n .replace(/\\b\\w/g, (letter) => letter.toUpperCase()),\n ) ?? [];\n const retryGuidance = source.diagnostics?.retryGuidance;\n\n return {\n id: source.id,\n label: source.label,\n kind: source.kind,\n status: source.status,\n summary: [\n source.kind,\n source.status,\n typeof source.documentCount === \"number\"\n ? `${source.documentCount} docs`\n : \"\",\n typeof source.chunkCount === \"number\"\n ? `${source.chunkCount} chunks`\n : \"\",\n typeof source.lastSyncDurationMs === \"number\"\n ? formatDurationLabel(source.lastSyncDurationMs)\n : \"\",\n typeof source.lastSuccessfulSyncAt === \"number\"\n ? `last success ${formatDateLabel(source.lastSuccessfulSyncAt)}`\n : typeof source.lastSyncedAt === \"number\"\n ? `last sync ${formatDateLabel(source.lastSyncedAt)}`\n : \"\",\n ]\n .filter(Boolean)\n .join(\" · \"),\n rows: [\n ...(source.target ? [{ label: \"Target\", value: source.target }] : []),\n ...(provider ? [{ label: \"Provider\", value: provider }] : []),\n ...(accountMode ? [{ label: \"Account mode\", value: accountMode }] : []),\n ...(schedule ? [{ label: \"Schedule\", value: schedule }] : []),\n ...(lastTrigger ? [{ label: \"Last trigger\", value: lastTrigger }] : []),\n ...(typeof source.lastSuccessfulSyncAt === \"number\"\n ? [\n {\n label: \"Last success\",\n value: formatDateLabel(source.lastSuccessfulSyncAt),\n },\n ]\n : []),\n ...(typeof source.nextRetryAt === \"number\"\n ? [\n {\n label: \"Next retry\",\n value: formatDateLabel(source.nextRetryAt),\n },\n ]\n : []),\n ...(source.lastError\n ? [{ label: \"Last error\", value: source.lastError }]\n : []),\n ...(diagnosticSummary\n ? [{ label: \"Diagnostics\", value: diagnosticSummary }]\n : []),\n ...(retryGuidance\n ? [{ label: \"Retry guidance\", value: retryGuidance.reason }]\n : []),\n ],\n tags: [\n provider,\n accountMode ? `mode ${accountMode}` : undefined,\n liveReady,\n ...diagnosticTags,\n ].filter((value): value is string => Boolean(value)),\n extendedSummary: diagnosticSummary ?? source.description ?? liveReady,\n runs: buildRAGSyncSourceRunPresentations(source),\n };\n};\n\nexport const buildRAGSyncSourcePresentations = (\n sources?: RAGSyncSourceRecord[],\n): RAGSyncSourcePresentation[] =>\n (sources ?? []).map(buildRAGSyncSourcePresentation);\n\nexport const buildRAGReadinessPresentation = (\n readiness?: RAGExtractorReadiness,\n): RAGReadinessPresentation => {\n if (!readiness) {\n return {\n sections: [\n {\n label: \"Provider\",\n title: \"Unavailable\",\n summary: \"Readiness data is not available yet.\",\n },\n ],\n };\n }\n\n return {\n sections: [\n {\n label: \"Provider\",\n title: readiness.providerConfigured\n ? (readiness.providerName ?? \"Runtime provider routing\")\n : \"Not configured\",\n summary: readiness.providerConfigured\n ? readiness.model\n ? `Requests route through ${readiness.providerName ?? \"the runtime provider registry\"} with default model ${readiness.model}.`\n : `Requests route through ${readiness.providerName ?? \"the runtime provider registry\"}.`\n : \"Provider-backed retrieval is not configured yet.\",\n },\n {\n label: \"Embeddings\",\n title: readiness.embeddingConfigured\n ? readiness.embeddingModel === \"collection-managed embeddings\"\n ? \"Collection-managed\"\n : \"Configured\"\n : \"Missing\",\n summary: readiness.embeddingConfigured\n ? readiness.embeddingModel === \"collection-managed embeddings\"\n ? \"Embeddings come from the collection and vector store layer, so retrieval stays vector-backed without a separate top-level embedding provider.\"\n : (readiness.embeddingModel ?? \"Embedding model configured.\")\n : \"Embeddings are not configured yet.\",\n },\n {\n label: \"Retrieval Stack\",\n title: readiness.rerankerConfigured ? \"Reranker ready\" : \"Vector only\",\n summary: readiness.indexManagerConfigured\n ? \"Index manager configured.\"\n : \"Index manager not configured.\",\n },\n {\n label: \"Extractors\",\n title: readiness.extractorsConfigured\n ? `${readiness.extractorNames.length} configured`\n : \"None configured\",\n summary: readiness.extractorsConfigured\n ? `Configured extractors: ${formatCompactList(readiness.extractorNames)}`\n : \"No extractors configured.\",\n tags:\n readiness.extractorNames.length > 0\n ? readiness.extractorNames\n : [\"No extractors configured\"],\n },\n ],\n };\n};\n\nexport const buildRAGCorpusHealthPresentation = (\n health?: RAGCorpusHealth,\n): RAGCorpusHealthPresentation => {\n if (!health) {\n return {\n sections: [\n {\n label: \"Corpus health\",\n title: \"Unavailable\",\n summary: \"Corpus health is not available yet.\",\n },\n ],\n };\n }\n\n return {\n sections: [\n {\n label: \"Corpus coverage\",\n title: `Formats: ${formatCoverageMap(health.coverageByFormat)}`,\n summary: `Kinds: ${formatCoverageMap(health.coverageByKind)}`,\n rows: [\n {\n label: \"Average chunks per document\",\n value: health.averageChunksPerDocument.toFixed(2),\n },\n ],\n },\n {\n label: \"Chunk quality\",\n title: `${health.averageChunksPerDocument.toFixed(2)} avg chunks/doc`,\n summary: `Empty docs ${health.emptyDocuments} · empty chunks ${health.emptyChunks} · low signal ${health.lowSignalChunks}`,\n rows: [\n {\n label: \"Missing source\",\n value: String(health.documentsMissingSource),\n },\n {\n label: \"Missing title\",\n value: String(health.documentsMissingTitle),\n },\n {\n label: \"Missing metadata\",\n value: String(health.documentsMissingMetadata),\n },\n ],\n },\n {\n label: \"Freshness\",\n title: `${health.staleDocuments.length} stale docs`,\n summary: `Stale threshold ${formatAgeLabel(health.staleAfterMs)}`,\n rows: [\n {\n label: \"Oldest age\",\n value: formatAgeLabel(health.oldestDocumentAgeMs),\n },\n {\n label: \"Newest age\",\n value: formatAgeLabel(health.newestDocumentAgeMs),\n },\n ],\n },\n {\n label: \"Failures\",\n title: `${health.failedIngestJobs} ingest · ${health.failedAdminJobs} admin`,\n summary: `Duplicate sources ${health.duplicateSourceGroups.length} · duplicate ids ${health.duplicateDocumentIdGroups.length}`,\n rows: [\n {\n label: \"Failures by input\",\n value: formatCoverageMap(health.failuresByInputKind),\n },\n {\n label: \"Failures by extractor\",\n value: formatCoverageMap(health.failuresByExtractor),\n },\n {\n label: \"Failures by admin action\",\n value: formatCoverageMap(health.failuresByAdminAction),\n },\n ],\n },\n ],\n };\n};\n\nexport const buildRAGSyncOverviewPresentation = (\n sources?: RAGSyncSourceRecord[],\n): RAGSyncOverviewPresentation => {\n const records = sources ?? [];\n if (records.length === 0) {\n return {\n rows: [\n { label: \"Configured sync sources\", value: \"0\" },\n {\n label: \"Latest sync\",\n value: \"No sync sources configured yet.\",\n },\n ],\n sections: [\n {\n label: \"Sync overview\",\n title: \"No sync sources configured\",\n summary:\n \"Add sync sources to monitor directories, URLs, storage, or mailboxes.\",\n },\n ],\n };\n }\n\n const countByStatus = (status: RAGSyncSourceRecord[\"status\"]) =>\n records.filter((record) => record.status === status).length;\n\n return {\n rows: [\n { label: \"Configured sync sources\", value: String(records.length) },\n { label: \"Completed\", value: String(countByStatus(\"completed\")) },\n { label: \"Running\", value: String(countByStatus(\"running\")) },\n {\n label: \"Failed\",\n value: String(countByStatus(\"failed\")),\n },\n buildSyncOverviewLatestRow(records),\n ],\n sections: [\n {\n label: \"Sync overview\",\n title: `${records.length} configured`,\n summary: `${countByStatus(\"completed\")} completed · ${countByStatus(\"running\")} running · ${countByStatus(\"failed\")} failed`,\n },\n {\n label: \"Latest sync\",\n title: buildSyncOverviewLatestRow(records).value,\n summary: \"Most recent completed or last-known sync activity.\",\n },\n ],\n };\n};\n\nconst formatMediaTimestamp = (value: unknown) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n\n const totalSeconds = Math.floor(value / 1000);\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = totalSeconds % 60;\n const milliseconds = Math.floor(value % 1000);\n\n return `${String(minutes).padStart(2, \"0\")}:${String(seconds).padStart(\n 2,\n \"0\",\n )}.${String(milliseconds).padStart(3, \"0\")}`;\n};\n\nconst getAttachmentName = (source?: string, title?: string) => {\n const sourceAttachment = source?.split(\"/\").at(-1);\n if (sourceAttachment && sourceAttachment.includes(\".\")) {\n return sourceAttachment;\n }\n\n const titleAttachment = title?.split(\" · \").at(-1);\n if (titleAttachment && titleAttachment.includes(\".\")) {\n return titleAttachment;\n }\n\n return undefined;\n};\n\nconst getSpreadsheetHeaders = (metadata?: Record<string, unknown>) =>\n Array.isArray(metadata?.spreadsheetHeaders)\n ? metadata.spreadsheetHeaders\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n\nconst formatSpreadsheetColumnRange = (\n columnStart?: string,\n columnEnd?: string,\n) => {\n if (typeof columnStart !== \"string\" || columnStart.length === 0) {\n return undefined;\n }\n if (typeof columnEnd !== \"string\" || columnEnd.length === 0) {\n return `Columns ${columnStart}`;\n }\n if (columnStart === columnEnd) {\n return `Columns ${columnStart}`;\n }\n\n return `Columns ${columnStart}-${columnEnd}`;\n};\n\nconst formatSpreadsheetRowRange = (rowStart?: number, rowEnd?: number) => {\n if (typeof rowStart !== \"number\" || !Number.isFinite(rowStart)) {\n return undefined;\n }\n if (\n typeof rowEnd !== \"number\" &&\n typeof rowStart === \"number\" &&\n Number.isFinite(rowStart)\n ) {\n return `Rows ${rowStart}`;\n }\n if (rowStart === rowEnd) {\n return `Rows ${rowStart}`;\n }\n\n return `Rows ${rowStart}-${rowEnd}`;\n};\n\nconst formatSpreadsheetTableLabel = (\n tableIndex?: number,\n tableCount?: number,\n) => {\n if (\n typeof tableIndex !== \"number\" ||\n !Number.isFinite(tableIndex) ||\n tableIndex < 1\n ) {\n return undefined;\n }\n\n if (\n typeof tableCount === \"number\" &&\n Number.isFinite(tableCount) &&\n tableCount >= tableIndex\n ) {\n return `Table ${tableIndex} of ${tableCount}`;\n }\n\n return `Table ${tableIndex}`;\n};\n\nconst formatOfficeListLevelsLabel = (value: unknown) => {\n if (!Array.isArray(value) || value.length === 0) {\n return undefined;\n }\n\n const levels = value\n .map((entry) => getContextNumber(entry))\n .filter((entry): entry is number => typeof entry === \"number\")\n .sort((left, right) => left - right);\n\n if (levels.length === 0) {\n return undefined;\n }\n\n const minLevel = levels[0];\n const maxLevel = levels[levels.length - 1];\n\n return minLevel === maxLevel\n ? `Office list level ${minLevel}`\n : `Office list levels ${minLevel}-${maxLevel}`;\n};\n\nconst formatMediaDurationLabel = (value: unknown) => {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n return undefined;\n }\n\n return formatMediaTimestamp(value);\n};\n\nconst buildContextLabel = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const pdfTextKind = getContextString(metadata.pdfTextKind);\n const pdfSemanticRole = getContextString(metadata.pdfSemanticRole);\n const pdfTableBodyRowStart = getContextNumber(metadata.pdfTableBodyRowStart);\n const pdfTableBodyRowEnd = getContextNumber(metadata.pdfTableBodyRowEnd);\n const officeBlockKindValue = getContextString(metadata.officeBlockKind);\n const officeBlockKind =\n officeBlockKindValue === \"table\" ||\n officeBlockKindValue === \"list\" ||\n officeBlockKindValue === \"paragraph\"\n ? officeBlockKindValue\n : undefined;\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n if (pdfSemanticRole === \"figure_caption\" && sectionTitle) {\n return `PDF figure caption ${sectionTitle}`;\n }\n if (pdfSemanticRole === \"figure_body\" && sectionTitle) {\n return `PDF figure body ${sectionTitle}`;\n }\n if (pdfTextKind === \"table_like\" && sectionTitle) {\n return `PDF table block ${sectionTitle}`;\n }\n if (pdfTextKind === \"paragraph\" && sectionTitle) {\n return `PDF text block ${sectionTitle}`;\n }\n if (officeBlockKind === \"table\" && sectionTitle) {\n return `Office table block ${sectionPath.join(\" > \") || sectionTitle}`;\n }\n if (officeBlockKind === \"list\" && sectionTitle) {\n return `Office list block ${sectionPath.join(\" > \") || sectionTitle}`;\n }\n if (officeBlockKind === \"paragraph\" && sectionTitle) {\n return `Office paragraph block ${sectionPath.join(\" > \") || sectionTitle}`;\n }\n\n const emailKind = getContextString(metadata.emailKind);\n if (emailKind === \"attachment\") {\n const attachmentName = getContextString(metadata.attachmentName);\n const threadTopic = getContextString(metadata.threadTopic);\n return attachmentName\n ? threadTopic\n ? `Attachment evidence ${attachmentName} in ${threadTopic}`\n : `Attachment evidence ${attachmentName}`\n : \"Attachment evidence\";\n }\n\n if (emailKind === \"message\") {\n const threadTopic = getContextString(metadata.threadTopic);\n const from = getContextString(metadata.from);\n if (threadTopic) {\n return from\n ? `Message in ${threadTopic} from ${from}`\n : `Message in ${threadTopic}`;\n }\n return from ? `Message from ${from}` : \"Message evidence\";\n }\n\n const page =\n getContextNumber(metadata.page) ??\n getContextNumber(metadata.pageNumber) ??\n (typeof metadata.pageIndex === \"number\"\n ? metadata.pageIndex + 1\n : undefined);\n const region =\n getContextNumber(metadata.regionNumber) ??\n (typeof metadata.regionIndex === \"number\"\n ? metadata.regionIndex + 1\n : undefined);\n const hasOCRTrace =\n typeof metadata.ocrRegionConfidence === \"number\" ||\n typeof metadata.ocrConfidence === \"number\" ||\n getContextString(metadata.pdfTextMode) === \"ocr\" ||\n typeof metadata.ocrRegionCount === \"number\";\n const ocrPageStart = getContextNumber(metadata.ocrPageStart);\n const ocrPageEnd = getContextNumber(metadata.ocrPageEnd);\n if (page && region) {\n if (hasOCRTrace) {\n return `OCR page ${page} region ${region}`;\n }\n return `Page ${page} region ${region}`;\n }\n if (page) {\n if (hasOCRTrace) {\n return `OCR page ${page}`;\n }\n return `Page ${page}`;\n }\n if (\n hasOCRTrace &&\n typeof ocrPageStart === \"number\" &&\n typeof ocrPageEnd === \"number\"\n ) {\n return ocrPageStart === ocrPageEnd\n ? `OCR page ${ocrPageStart}`\n : `OCR pages ${ocrPageStart}-${ocrPageEnd}`;\n }\n\n const sheet =\n getContextString(metadata.sheetName) ??\n (Array.isArray(metadata.sheetNames)\n ? getContextString(metadata.sheetNames[0])\n : undefined);\n if (sheet) {\n const tableLabel = formatSpreadsheetTableLabel(\n getContextNumber(metadata.spreadsheetTableIndex),\n getContextNumber(metadata.spreadsheetTableCount),\n );\n const columnRange = formatSpreadsheetColumnRange(\n getContextString(metadata.spreadsheetColumnStart),\n getContextString(metadata.spreadsheetColumnEnd),\n );\n const rowRange = formatSpreadsheetRowRange(\n getContextNumber(metadata.spreadsheetRowStart),\n getContextNumber(metadata.spreadsheetRowEnd),\n );\n const headers = getSpreadsheetHeaders(metadata);\n if (tableLabel && rowRange && columnRange) {\n return `Sheet ${sheet} ${tableLabel} ${rowRange} ${columnRange}`;\n }\n if (tableLabel && rowRange) {\n return `Sheet ${sheet} ${tableLabel} ${rowRange}`;\n }\n if (tableLabel && columnRange) {\n return `Sheet ${sheet} ${tableLabel} ${columnRange}`;\n }\n if (tableLabel) {\n return `Sheet ${sheet} ${tableLabel}`;\n }\n if (rowRange && columnRange) {\n return `Sheet ${sheet} ${rowRange} ${columnRange}`;\n }\n if (rowRange) {\n return `Sheet ${sheet} ${rowRange}`;\n }\n if (columnRange) {\n return `Sheet ${sheet} ${columnRange}`;\n }\n if (headers.length > 0) {\n return `Sheet ${sheet} by ${headers.slice(0, 2).join(\", \")}`;\n }\n return `Sheet ${sheet}`;\n }\n\n const slide =\n getContextNumber(metadata.slide) ??\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n const slideTitle = getContextString(metadata.slideTitle);\n if (slide) {\n if (slideTitle) {\n return `Slide ${slide} ${slideTitle}`;\n }\n return `Slide ${slide}`;\n }\n\n const archiveEntry =\n getContextString(metadata.archiveFullPath) ??\n getContextString(metadata.archivePath) ??\n getContextString(metadata.archiveEntryPath) ??\n getContextString(metadata.entryPath);\n if (archiveEntry) {\n return `Archive entry ${archiveEntry}`;\n }\n\n const threadTopic = getContextString(metadata.threadTopic);\n if (threadTopic) {\n return `Thread ${threadTopic}`;\n }\n\n const speaker = getContextString(metadata.speaker);\n if (speaker) {\n return `Speaker ${speaker}`;\n }\n if (sectionTitle) {\n return `Section ${sectionTitle}`;\n }\n\n return undefined;\n};\n\nconst buildLocatorLabel = (\n metadata?: Record<string, unknown>,\n source?: string,\n title?: string,\n) => {\n if (!metadata) {\n return undefined;\n }\n\n const pdfTextKind = getContextString(metadata.pdfTextKind);\n const pdfSemanticRole = getContextString(metadata.pdfSemanticRole);\n const officeBlockKind = getContextString(metadata.officeBlockKind);\n const pdfBlockNumber = getContextNumber(metadata.pdfBlockNumber);\n const pdfTableBodyRowStart = getContextNumber(metadata.pdfTableBodyRowStart);\n const pdfTableBodyRowEnd = getContextNumber(metadata.pdfTableBodyRowEnd);\n const officeBlockNumber = getContextNumber(metadata.officeBlockNumber);\n const officeTableBodyRowStart = getContextNumber(\n metadata.officeTableBodyRowStart,\n );\n const officeTableBodyRowEnd = getContextNumber(\n metadata.officeTableBodyRowEnd,\n );\n const spreadsheetRowStart = getContextNumber(metadata.spreadsheetRowStart);\n const spreadsheetRowEnd = getContextNumber(metadata.spreadsheetRowEnd);\n const slideTitle = getContextString(metadata.slideTitle);\n\n const page =\n getContextNumber(metadata.page) ??\n getContextNumber(metadata.pageNumber) ??\n (typeof metadata.pageIndex === \"number\"\n ? metadata.pageIndex + 1\n : undefined);\n const region =\n getContextNumber(metadata.regionNumber) ??\n (typeof metadata.regionIndex === \"number\"\n ? metadata.regionIndex + 1\n : undefined);\n const ocrPageStart = getContextNumber(metadata.ocrPageStart);\n const ocrPageEnd = getContextNumber(metadata.ocrPageEnd);\n if (page && region) {\n return `Page ${page} · Region ${region}`;\n }\n if (page && pdfBlockNumber && pdfSemanticRole === \"figure_caption\") {\n return `Page ${page} · Figure Caption ${pdfBlockNumber}`;\n }\n if (page && pdfBlockNumber && pdfSemanticRole === \"figure_body\") {\n return `Page ${page} · Figure Body ${pdfBlockNumber}`;\n }\n if (page && pdfBlockNumber && pdfTextKind === \"table_like\") {\n if (\n typeof pdfTableBodyRowStart === \"number\" &&\n typeof pdfTableBodyRowEnd === \"number\"\n ) {\n return pdfTableBodyRowStart === pdfTableBodyRowEnd\n ? `Page ${page} · Table Block ${pdfBlockNumber} · Row ${pdfTableBodyRowStart}`\n : `Page ${page} · Table Block ${pdfBlockNumber} · Rows ${pdfTableBodyRowStart}-${pdfTableBodyRowEnd}`;\n }\n return `Page ${page} · Table Block ${pdfBlockNumber}`;\n }\n if (page && pdfBlockNumber) {\n return `Page ${page} · Text Block ${pdfBlockNumber}`;\n }\n if (page) {\n return `Page ${page}`;\n }\n if (typeof ocrPageStart === \"number\" && typeof ocrPageEnd === \"number\") {\n return ocrPageStart === ocrPageEnd\n ? `Page ${ocrPageStart}`\n : `Pages ${ocrPageStart}-${ocrPageEnd}`;\n }\n\n const sheet =\n getContextString(metadata.sheetName) ??\n (Array.isArray(metadata.sheetNames)\n ? getContextString(metadata.sheetNames[0])\n : undefined);\n if (sheet) {\n const tableLabel = formatSpreadsheetTableLabel(\n getContextNumber(metadata.spreadsheetTableIndex),\n getContextNumber(metadata.spreadsheetTableCount),\n );\n const columnRange = formatSpreadsheetColumnRange(\n getContextString(metadata.spreadsheetColumnStart),\n getContextString(metadata.spreadsheetColumnEnd),\n );\n const rowRange = formatSpreadsheetRowRange(\n spreadsheetRowStart,\n spreadsheetRowEnd,\n );\n if (tableLabel && rowRange && columnRange) {\n return `Sheet ${sheet} · ${tableLabel} · ${rowRange} · ${columnRange}`;\n }\n if (tableLabel && rowRange) {\n return `Sheet ${sheet} · ${tableLabel} · ${rowRange}`;\n }\n if (tableLabel && columnRange) {\n return `Sheet ${sheet} · ${tableLabel} · ${columnRange}`;\n }\n if (tableLabel) {\n return `Sheet ${sheet} · ${tableLabel}`;\n }\n if (rowRange && columnRange) {\n return `Sheet ${sheet} · ${rowRange} · ${columnRange}`;\n }\n if (rowRange) {\n return `Sheet ${sheet} · ${rowRange}`;\n }\n return columnRange ? `Sheet ${sheet} · ${columnRange}` : `Sheet ${sheet}`;\n }\n\n const slide =\n getContextNumber(metadata.slide) ??\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\"\n ? metadata.slideIndex + 1\n : undefined);\n if (slide) {\n return slideTitle ? `Slide ${slide} · ${slideTitle}` : `Slide ${slide}`;\n }\n\n const archiveEntry =\n getContextString(metadata.archiveFullPath) ??\n getContextString(metadata.archivePath) ??\n getContextString(metadata.archiveEntryPath) ??\n getContextString(metadata.entryPath);\n if (archiveEntry) {\n return `Archive entry ${archiveEntry}`;\n }\n\n const emailKind = getContextString(metadata.emailKind);\n if (emailKind === \"attachment\") {\n const attachmentName =\n getContextString(metadata.attachmentName) ??\n getAttachmentName(source, title);\n const replyDepth = getContextNumber(metadata.replyDepth);\n if (attachmentName && replyDepth && replyDepth > 0) {\n return `Attachment ${attachmentName} · Reply depth ${replyDepth}`;\n }\n return attachmentName ? `Attachment ${attachmentName}` : \"Attachment\";\n }\n\n const mediaStart = formatMediaTimestamp(metadata.startMs);\n const mediaEnd = formatMediaTimestamp(metadata.endMs);\n if (mediaStart && mediaEnd) {\n return `Timestamp ${mediaStart} - ${mediaEnd}`;\n }\n\n if (mediaStart) {\n return `Timestamp ${mediaStart}`;\n }\n\n if (officeBlockNumber && officeBlockKind === \"table\") {\n if (\n typeof officeTableBodyRowStart === \"number\" &&\n typeof officeTableBodyRowEnd === \"number\"\n ) {\n return officeTableBodyRowStart === officeTableBodyRowEnd\n ? `Office table block ${officeBlockNumber} · Row ${officeTableBodyRowStart}`\n : `Office table block ${officeBlockNumber} · Rows ${officeTableBodyRowStart}-${officeTableBodyRowEnd}`;\n }\n return `Office table block ${officeBlockNumber}`;\n }\n if (officeBlockNumber && officeBlockKind === \"list\") {\n return `Office list block ${officeBlockNumber}`;\n }\n if (officeBlockNumber && officeBlockKind === \"paragraph\") {\n return `Office paragraph block ${officeBlockNumber}`;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n if (sectionPath.length > 0) {\n return `Section ${sectionPath.join(\" > \")}`;\n }\n\n return undefined;\n};\n\nconst buildProvenanceLabel = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const threadTopic = getContextString(metadata.threadTopic);\n const replyDepth = getContextNumber(metadata.replyDepth);\n const threadMessageCount = getContextNumber(metadata.threadMessageCount);\n const threadRootMessageId = getContextString(metadata.threadRootMessageId);\n const from = getContextString(metadata.from);\n const sentAt =\n formatTimestampLabel(metadata.sentAt) ??\n formatTimestampLabel(metadata.receivedAt);\n const speaker = getContextString(metadata.speaker);\n const mediaKind = getContextString(metadata.mediaKind);\n const transcriptSource = getContextString(metadata.transcriptSource);\n const mediaSpeakerCount = getContextNumber(metadata.mediaSpeakerCount);\n const mediaSegmentCount = getContextNumber(metadata.mediaSegmentCount);\n const mediaSegmentGroupSize = getContextNumber(\n metadata.mediaSegmentGroupSize,\n );\n const mediaSegmentGroupIndex = getContextNumber(\n metadata.mediaSegmentGroupIndex,\n );\n const mediaChannel = getContextString(metadata.mediaChannel);\n const mediaDurationLabel = formatMediaDurationLabel(metadata.mediaDurationMs);\n const mediaSegmentWindowDurationLabel = formatMediaDurationLabel(\n metadata.mediaSegmentGroupDurationMs,\n );\n const mediaSegmentGapLabel = formatMediaDurationLabel(\n metadata.mediaSegmentGapFromPreviousMs,\n );\n const spreadsheetHeaders = getSpreadsheetHeaders(metadata);\n const pdfTableHeaders = Array.isArray(metadata.pdfTableHeaders)\n ? metadata.pdfTableHeaders\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const pdfTableColumnCount = getContextNumber(metadata.pdfTableColumnCount);\n const pdfTableBodyRowCount = getContextNumber(metadata.pdfTableBodyRowCount);\n const spreadsheetColumnRange = formatSpreadsheetColumnRange(\n getContextString(metadata.spreadsheetColumnStart),\n getContextString(metadata.spreadsheetColumnEnd),\n );\n const slideNotesText = getContextString(metadata.slideNotesText);\n const pdfTextMode = getContextString(metadata.pdfTextMode);\n const pdfEvidenceMode = getContextString(metadata.pdfEvidenceMode);\n const pdfEvidenceOrigin = getContextString(metadata.pdfEvidenceOrigin);\n const pdfEvidenceSupplement = getContextString(\n metadata.pdfEvidenceSupplement,\n );\n const pdfTextKind = getContextString(metadata.pdfTextKind);\n const pdfSemanticRole = getContextString(metadata.pdfSemanticRole);\n const officeBlockKind = getContextString(metadata.officeBlockKind);\n const officeListContextText = getContextString(\n metadata.officeListContextText,\n );\n const officeListGroupItemCount = getContextNumber(\n metadata.officeListGroupItemCount,\n );\n const officeListLevelsLabel = formatOfficeListLevelsLabel(\n metadata.officeListLevels,\n );\n const officeTableHeaders = Array.isArray(metadata.officeTableHeaders)\n ? metadata.officeTableHeaders\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const officeTableColumnCount = getContextNumber(\n metadata.officeTableColumnCount,\n );\n const officeTableBodyRowCount = getContextNumber(\n metadata.officeTableBodyRowCount,\n );\n const officeTableBodyRowStart = getContextNumber(\n metadata.officeTableBodyRowStart,\n );\n const officeTableBodyRowEnd = getContextNumber(\n metadata.officeTableBodyRowEnd,\n );\n const officeTableContextText = getContextString(\n metadata.officeTableContextText,\n );\n const officeTableFollowUpText = getContextString(\n metadata.officeTableFollowUpText,\n );\n const ocrEngine = getContextString(metadata.ocrEngine);\n const extractorRegistryMatch = getContextString(\n metadata.extractorRegistryMatch,\n );\n const chunkingProfile = getContextString(metadata.chunkingProfile);\n const archiveDepth = getContextNumber(metadata.archiveDepth);\n const archiveNestedDepth = getContextNumber(metadata.archiveNestedDepth);\n const archiveContainerPath = getContextString(metadata.archiveContainerPath);\n const archiveRootName = getContextString(metadata.archiveRootName);\n const sourceAwareChunkReason = formatSourceAwareChunkReason(\n metadata.sourceAwareChunkReason,\n );\n const sourceAwareUnitScope = buildSourceAwareUnitScopeLabel(metadata);\n const spreadsheetTableLabel = formatSpreadsheetTableLabel(\n getContextNumber(metadata.spreadsheetTableIndex),\n getContextNumber(metadata.spreadsheetTableCount),\n );\n const ocrConfidence =\n getContextNumber(metadata.ocrRegionConfidence) ??\n getContextNumber(metadata.ocrConfidence);\n const ocrAverageConfidence =\n getContextNumber(metadata.ocrPageAverageConfidence) ??\n getContextNumber(metadata.ocrAverageConfidence);\n const ocrMinConfidence =\n getContextNumber(metadata.ocrPageMinConfidence) ??\n getContextNumber(metadata.ocrMinConfidence);\n const ocrMaxConfidence =\n getContextNumber(metadata.ocrPageMaxConfidence) ??\n getContextNumber(metadata.ocrMaxConfidence);\n const ocrRegionCount = getContextNumber(metadata.ocrRegionCount);\n const pdfTableBodyRowStart = getContextNumber(metadata.pdfTableBodyRowStart);\n const pdfTableBodyRowEnd = getContextNumber(metadata.pdfTableBodyRowEnd);\n\n const labels = [\n pdfTextMode ? `PDF ${pdfTextMode}` : \"\",\n pdfEvidenceMode ? `PDF evidence ${pdfEvidenceMode}` : \"\",\n pdfEvidenceOrigin ? `PDF origin ${pdfEvidenceOrigin}` : \"\",\n pdfEvidenceSupplement ? `PDF supplement ${pdfEvidenceSupplement}` : \"\",\n pdfSemanticRole === \"figure_caption\" ? \"PDF figure caption\" : \"\",\n pdfSemanticRole === \"figure_body\" ? \"PDF figure body\" : \"\",\n pdfSemanticRole === \"figure_caption\"\n ? \"\"\n : pdfSemanticRole === \"figure_body\"\n ? \"\"\n : pdfTextKind === \"table_like\"\n ? \"PDF table block\"\n : pdfTextKind === \"paragraph\"\n ? \"PDF text block\"\n : \"\",\n officeBlockKind ? `Office ${officeBlockKind}` : \"\",\n typeof officeListGroupItemCount === \"number\"\n ? `Office list ${officeListGroupItemCount} items`\n : \"\",\n officeListLevelsLabel ?? \"\",\n ocrEngine ? `OCR ${ocrEngine}` : \"\",\n extractorRegistryMatch ? `Extractor ${extractorRegistryMatch}` : \"\",\n chunkingProfile ? `Chunking ${chunkingProfile}` : \"\",\n sourceAwareChunkReason ?? \"\",\n sourceAwareUnitScope ?? \"\",\n typeof ocrConfidence === \"number\"\n ? `Confidence ${ocrConfidence.toFixed(2)}`\n : \"\",\n typeof ocrAverageConfidence === \"number\" &&\n ocrAverageConfidence !== ocrConfidence\n ? `Average ${ocrAverageConfidence.toFixed(2)}`\n : \"\",\n typeof ocrMinConfidence === \"number\" &&\n typeof ocrMaxConfidence === \"number\" &&\n ocrMinConfidence !== ocrMaxConfidence\n ? `Range ${ocrMinConfidence.toFixed(2)}-${ocrMaxConfidence.toFixed(2)}`\n : \"\",\n typeof ocrRegionCount === \"number\" ? `${ocrRegionCount} regions` : \"\",\n pdfTableHeaders.length > 0 ? `PDF table ${pdfTableHeaders.join(\", \")}` : \"\",\n typeof pdfTableColumnCount === \"number\"\n ? `PDF table ${pdfTableColumnCount} cols`\n : \"\",\n typeof pdfTableBodyRowCount === \"number\"\n ? `PDF table ${pdfTableBodyRowCount} body rows`\n : \"\",\n typeof pdfTableBodyRowStart === \"number\" &&\n typeof pdfTableBodyRowEnd === \"number\"\n ? pdfTableBodyRowStart === pdfTableBodyRowEnd\n ? `PDF table row ${pdfTableBodyRowStart}`\n : `PDF table rows ${pdfTableBodyRowStart}-${pdfTableBodyRowEnd}`\n : \"\",\n officeListContextText ? `Office list context ${officeListContextText}` : \"\",\n officeTableHeaders.length > 0\n ? `Office table ${officeTableHeaders.join(\", \")}`\n : \"\",\n typeof officeTableColumnCount === \"number\"\n ? `Office table ${officeTableColumnCount} cols`\n : \"\",\n typeof officeTableBodyRowCount === \"number\"\n ? `Office table ${officeTableBodyRowCount} body rows`\n : \"\",\n typeof officeTableBodyRowStart === \"number\" &&\n typeof officeTableBodyRowEnd === \"number\"\n ? officeTableBodyRowStart === officeTableBodyRowEnd\n ? `Office table row ${officeTableBodyRowStart}`\n : `Office table rows ${officeTableBodyRowStart}-${officeTableBodyRowEnd}`\n : \"\",\n officeTableContextText\n ? `Office table context ${officeTableContextText}`\n : \"\",\n officeTableFollowUpText\n ? `Office table follow-up ${officeTableFollowUpText}`\n : \"\",\n spreadsheetHeaders.length > 0\n ? `Spreadsheet ${spreadsheetHeaders.join(\", \")}`\n : \"\",\n spreadsheetColumnRange ? `Spreadsheet ${spreadsheetColumnRange}` : \"\",\n spreadsheetTableLabel ? `Spreadsheet ${spreadsheetTableLabel}` : \"\",\n mediaKind ? `Media ${mediaKind}` : \"\",\n mediaSegmentCount ? `${mediaSegmentCount} segments` : \"\",\n mediaSegmentGroupSize ? `${mediaSegmentGroupSize} grouped segments` : \"\",\n mediaSegmentGroupIndex !== undefined\n ? `Segment group ${mediaSegmentGroupIndex + 1}`\n : \"\",\n mediaChannel ? `Channel ${mediaChannel}` : \"\",\n mediaSpeakerCount ? `${mediaSpeakerCount} speakers` : \"\",\n mediaDurationLabel ? `Duration ${mediaDurationLabel}` : \"\",\n mediaSegmentWindowDurationLabel\n ? `Segment window ${mediaSegmentWindowDurationLabel}`\n : \"\",\n mediaSegmentGapLabel\n ? `Gap ${mediaSegmentGapLabel} from previous window`\n : \"\",\n transcriptSource ? `Transcript ${transcriptSource}` : \"\",\n threadTopic ? `Thread ${threadTopic}` : \"\",\n threadRootMessageId ? `Thread root ${threadRootMessageId}` : \"\",\n threadMessageCount ? `${threadMessageCount} thread messages` : \"\",\n replyDepth ? `Reply depth ${replyDepth}` : \"\",\n slideNotesText ? \"Speaker notes\" : \"\",\n archiveDepth ? `Archive depth ${archiveDepth}` : \"\",\n archiveNestedDepth ? `Archive nested depth ${archiveNestedDepth}` : \"\",\n archiveContainerPath ? `Archive container ${archiveContainerPath}` : \"\",\n archiveRootName ? `Archive root ${archiveRootName}` : \"\",\n speaker ? `Speaker ${speaker}` : \"\",\n from ? `Sender ${from}` : \"\",\n sentAt ? `Sent ${sentAt}` : \"\",\n ].filter((value) => value.length > 0);\n\n return labels.length > 0 ? labels.join(\" · \") : undefined;\n};\n\nexport const buildRAGSourceLabels = ({\n metadata,\n source,\n title,\n}: {\n metadata?: Record<string, unknown>;\n source?: string;\n title?: string;\n}): RAGSourceLabels | undefined => {\n const contextLabel = buildContextLabel(metadata);\n const locatorLabel = buildLocatorLabel(metadata, source, title);\n const provenanceLabel = buildProvenanceLabel(metadata);\n\n if (!contextLabel && !locatorLabel && !provenanceLabel) {\n return undefined;\n }\n\n return {\n contextLabel,\n locatorLabel,\n provenanceLabel,\n };\n};\n\nexport const buildRAGChunkStructure = (\n metadata?: Record<string, unknown>,\n): RAGChunkStructure | undefined => {\n if (!metadata) {\n return undefined;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath.filter(\n (value): value is string =>\n typeof value === \"string\" && value.trim().length > 0,\n )\n : undefined;\n const sectionKind =\n metadata.sectionKind === \"markdown_heading\" ||\n metadata.sectionKind === \"html_heading\" ||\n metadata.sectionKind === \"office_heading\" ||\n metadata.sectionKind === \"office_block\" ||\n metadata.sectionKind === \"pdf_block\" ||\n metadata.sectionKind === \"spreadsheet_rows\" ||\n metadata.sectionKind === \"presentation_slide\"\n ? metadata.sectionKind\n : undefined;\n const section: NonNullable<RAGChunkStructure[\"section\"]> = {\n depth: getContextNumber(metadata.sectionDepth),\n kind: sectionKind,\n path: sectionPath && sectionPath.length > 0 ? sectionPath : undefined,\n title: getContextString(metadata.sectionTitle),\n };\n const sequence: NonNullable<RAGChunkStructure[\"sequence\"]> = {\n nextChunkId: getContextString(metadata.nextChunkId),\n previousChunkId: getContextString(metadata.previousChunkId),\n sectionChunkCount: getContextNumber(metadata.sectionChunkCount),\n sectionChunkId: getContextString(metadata.sectionChunkId),\n sectionChunkIndex: getContextNumber(metadata.sectionChunkIndex),\n };\n\n if (\n !section.title &&\n (!section.path || section.path.length === 0) &&\n typeof section.depth !== \"number\" &&\n !section.kind &&\n !sequence.nextChunkId &&\n !sequence.previousChunkId &&\n typeof sequence.sectionChunkCount !== \"number\" &&\n !sequence.sectionChunkId &&\n typeof sequence.sectionChunkIndex !== \"number\"\n ) {\n return undefined;\n }\n\n return {\n section:\n section.title ||\n (section.path && section.path.length > 0) ||\n typeof section.depth === \"number\" ||\n section.kind\n ? section\n : undefined,\n sequence:\n sequence.nextChunkId ||\n sequence.previousChunkId ||\n typeof sequence.sectionChunkCount === \"number\" ||\n sequence.sectionChunkId ||\n typeof sequence.sectionChunkIndex === \"number\"\n ? sequence\n : undefined,\n };\n};\n\nconst buildExcerpt = (text: string, maxLength = 160) => {\n const normalized = text.replaceAll(/\\s+/g, \" \").trim();\n if (normalized.length <= maxLength) {\n return normalized;\n }\n\n return `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;\n};\n\ntype ExcerptChunkInput = Pick<\n RAGSource,\n \"chunkId\" | \"metadata\" | \"structure\" | \"text\"\n>;\n\nexport const buildRAGChunkExcerpts = (\n chunks: ExcerptChunkInput[],\n activeChunkId?: string,\n): RAGChunkExcerpts | undefined => {\n if (chunks.length === 0) {\n return undefined;\n }\n\n const graph = buildRAGChunkGraph(\n chunks.map((chunk) => ({\n chunkId: chunk.chunkId,\n metadata: chunk.metadata,\n structure: chunk.structure,\n })),\n );\n const navigation = buildRAGChunkGraphNavigation(graph, activeChunkId);\n const activeChunk =\n chunks.find((chunk) => chunk.chunkId === navigation.activeChunkId) ??\n chunks[0];\n if (!activeChunk) {\n return undefined;\n }\n\n const chunkMap = new Map(chunks.map((chunk) => [chunk.chunkId, chunk]));\n const orderedSectionIds =\n navigation.sectionNodes.length > 0\n ? navigation.sectionNodes.map((node) => node.chunkId)\n : [activeChunk.chunkId];\n const orderedWindowIds =\n navigation.sectionNodes.length > 0\n ? (() => {\n const activeIndex = navigation.sectionNodes.findIndex(\n (node) => node.chunkId === activeChunk.chunkId,\n );\n const startIndex = Math.max(0, activeIndex - 2);\n const endIndex = Math.min(\n navigation.sectionNodes.length,\n activeIndex + 3,\n );\n return navigation.sectionNodes\n .slice(startIndex, endIndex)\n .map((node) => node.chunkId);\n })()\n : [\n navigation.previousNode?.chunkId,\n activeChunk.chunkId,\n navigation.nextNode?.chunkId,\n ].filter(\n (chunkId, index, ids): chunkId is string =>\n Boolean(chunkId) && ids.indexOf(chunkId) === index,\n );\n\n const collectText = (chunkIds: string[]) =>\n chunkIds\n .map((chunkId) => chunkMap.get(chunkId)?.text)\n .filter((text): text is string => typeof text === \"string\")\n .join(\"\\n\\n\");\n\n return {\n chunkExcerpt: buildExcerpt(activeChunk.text, 160),\n sectionExcerpt: buildExcerpt(collectText(orderedSectionIds), 320),\n windowExcerpt: buildExcerpt(collectText(orderedWindowIds), 240),\n };\n};\n\nexport const buildRAGPreferredExcerpt = (\n excerpts?: RAGChunkExcerpts,\n structure?: RAGChunkStructure,\n) => {\n const selection = buildRAGExcerptSelection(excerpts, structure);\n return selection.excerpt;\n};\n\nexport const buildRAGExcerptSelection = (\n excerpts?: RAGChunkExcerpts,\n structure?: RAGChunkStructure,\n): RAGExcerptSelection & { excerpt: string } => {\n if (!excerpts) {\n return {\n excerpt: \"\",\n mode: \"chunk\",\n reason: \"single_chunk\",\n };\n }\n\n const chunkLength = excerpts.chunkExcerpt.trim().length;\n const sectionChunkCount = structure?.sequence?.sectionChunkCount ?? 1;\n if (sectionChunkCount > 1 && chunkLength > 0 && chunkLength < 72) {\n if (sectionChunkCount <= 3 && excerpts.sectionExcerpt.trim().length > 0) {\n return {\n excerpt: excerpts.sectionExcerpt,\n mode: \"section\",\n reason: \"section_small_enough\",\n };\n }\n if (excerpts.windowExcerpt.trim().length > 0) {\n return {\n excerpt: excerpts.windowExcerpt,\n mode: \"window\",\n reason: \"section_too_large_use_window\",\n };\n }\n\n return {\n excerpt: excerpts.chunkExcerpt,\n mode: \"chunk\",\n reason: \"chunk_too_narrow\",\n };\n }\n\n return {\n excerpt: excerpts.chunkExcerpt,\n mode: \"chunk\",\n reason: sectionChunkCount > 1 ? \"chunk_too_narrow\" : \"single_chunk\",\n };\n};\n\nexport const buildRAGExcerptModeCounts = (\n selections: Array<RAGExcerptSelection | undefined>,\n): RAGExcerptModeCounts =>\n selections.reduce<RAGExcerptModeCounts>(\n (counts, selection) => {\n if (selection) {\n counts[selection.mode] += 1;\n }\n return counts;\n },\n { chunk: 0, section: 0, window: 0 },\n );\n\ntype GraphChunkInput = Pick<\n RAGSource,\n \"chunkId\" | \"metadata\" | \"source\" | \"title\" | \"labels\" | \"structure\"\n> &\n Partial<Pick<RAGSource, \"score\">>;\n\nexport const buildRAGChunkGraph = (\n chunks: GraphChunkInput[],\n): RAGChunkGraph => {\n const nodes: RAGChunkGraphNode[] = [];\n const edges: RAGChunkGraphEdge[] = [];\n const edgeKeys = new Set<string>();\n const sections = new Map<string, RAGChunkGraphSectionGroup>();\n\n for (const chunk of chunks) {\n const labels =\n chunk.labels ??\n buildRAGSourceLabels({\n metadata: chunk.metadata,\n source: chunk.source,\n title: chunk.title,\n });\n const structure = chunk.structure ?? buildRAGChunkStructure(chunk.metadata);\n\n nodes.push({\n chunkId: chunk.chunkId,\n contextLabel: labels?.contextLabel,\n label: chunk.source ?? chunk.title ?? chunk.chunkId,\n locatorLabel: labels?.locatorLabel,\n provenanceLabel: labels?.provenanceLabel,\n score: chunk.score,\n source: chunk.source,\n structure,\n title: chunk.title,\n });\n\n const previousChunkId = structure?.sequence?.previousChunkId;\n if (previousChunkId) {\n const key = `previous:${previousChunkId}:${chunk.chunkId}`;\n if (!edgeKeys.has(key)) {\n edgeKeys.add(key);\n edges.push({\n fromChunkId: previousChunkId,\n relation: \"previous\",\n toChunkId: chunk.chunkId,\n });\n }\n }\n\n const nextChunkId = structure?.sequence?.nextChunkId;\n if (nextChunkId) {\n const key = `next:${chunk.chunkId}:${nextChunkId}`;\n if (!edgeKeys.has(key)) {\n edgeKeys.add(key);\n edges.push({\n fromChunkId: chunk.chunkId,\n relation: \"next\",\n toChunkId: nextChunkId,\n });\n }\n }\n\n const sectionId = structure?.sequence?.sectionChunkId;\n if (sectionId) {\n const existing = sections.get(sectionId);\n if (!existing) {\n sections.set(sectionId, {\n childSectionIds: [],\n chunkCount: structure.sequence?.sectionChunkCount ?? 1,\n chunkIds: [chunk.chunkId],\n depth: structure.section?.depth,\n id: sectionId,\n kind: structure.section?.kind,\n leadChunkId: chunk.chunkId,\n path: structure.section?.path,\n title: structure.section?.title,\n });\n continue;\n }\n\n if (!existing.chunkIds.includes(chunk.chunkId)) {\n existing.chunkIds.push(chunk.chunkId);\n }\n existing.chunkCount = Math.max(\n existing.chunkCount,\n structure.sequence?.sectionChunkCount ?? existing.chunkCount,\n );\n }\n }\n\n for (const section of sections.values()) {\n section.chunkIds.sort((left, right) => {\n const leftNode = nodes.find((node) => node.chunkId === left);\n const rightNode = nodes.find((node) => node.chunkId === right);\n const leftIndex =\n leftNode?.structure?.sequence?.sectionChunkIndex ??\n Number.MAX_SAFE_INTEGER;\n const rightIndex =\n rightNode?.structure?.sequence?.sectionChunkIndex ??\n Number.MAX_SAFE_INTEGER;\n if (leftIndex !== rightIndex) {\n return leftIndex - rightIndex;\n }\n\n return left.localeCompare(right);\n });\n section.leadChunkId = section.chunkIds[0];\n }\n\n const sectionPathIndex = new Map<string, RAGChunkGraphSectionGroup>();\n for (const section of sections.values()) {\n const path =\n section.path && section.path.length > 0\n ? section.path\n : section.title\n ? [section.title]\n : undefined;\n if (path && path.length > 0) {\n sectionPathIndex.set(path.join(\"\\u0000\"), section);\n }\n }\n\n for (const section of sections.values()) {\n const path =\n section.path && section.path.length > 0\n ? section.path\n : section.title\n ? [section.title]\n : undefined;\n if (!path || path.length < 2) {\n continue;\n }\n\n const parent = sectionPathIndex.get(path.slice(0, -1).join(\"\\u0000\"));\n if (!parent || parent.id === section.id) {\n continue;\n }\n\n section.parentSectionId = parent.id;\n if (!parent.childSectionIds.includes(section.id)) {\n parent.childSectionIds.push(section.id);\n }\n\n if (parent.leadChunkId && section.leadChunkId) {\n const parentKey = `section_parent:${section.leadChunkId}:${parent.leadChunkId}`;\n if (!edgeKeys.has(parentKey)) {\n edgeKeys.add(parentKey);\n edges.push({\n fromChunkId: section.leadChunkId,\n relation: \"section_parent\",\n toChunkId: parent.leadChunkId,\n });\n }\n\n const childKey = `section_child:${parent.leadChunkId}:${section.leadChunkId}`;\n if (!edgeKeys.has(childKey)) {\n edgeKeys.add(childKey);\n edges.push({\n fromChunkId: parent.leadChunkId,\n relation: \"section_child\",\n toChunkId: section.leadChunkId,\n });\n }\n }\n }\n\n nodes.sort((left, right) => {\n const leftSection =\n left.structure?.sequence?.sectionChunkIndex ?? Number.MAX_SAFE_INTEGER;\n const rightSection =\n right.structure?.sequence?.sectionChunkIndex ?? Number.MAX_SAFE_INTEGER;\n if (leftSection !== rightSection) {\n return leftSection - rightSection;\n }\n\n const leftScore = left.score ?? Number.NEGATIVE_INFINITY;\n const rightScore = right.score ?? Number.NEGATIVE_INFINITY;\n if (leftScore !== rightScore) {\n return rightScore - leftScore;\n }\n\n return left.label.localeCompare(right.label);\n });\n\n return {\n edges,\n nodes,\n sections: [...sections.values()].sort((left, right) =>\n (left.title ?? left.id).localeCompare(right.title ?? right.id),\n ),\n };\n};\n\nexport const buildRAGChunkPreviewGraph = (\n preview: Pick<RAGDocumentChunkPreview, \"chunks\" | \"document\">,\n): RAGChunkGraph =>\n buildRAGChunkGraph(\n preview.chunks.map((chunk) => ({\n chunkId: chunk.chunkId,\n labels: chunk.labels,\n metadata: chunk.metadata,\n source: chunk.source ?? preview.document.source,\n structure: chunk.structure,\n title: chunk.title ?? preview.document.title,\n })),\n );\n\nexport const buildRAGChunkPreviewNavigation = (\n preview: Pick<RAGDocumentChunkPreview, \"chunks\" | \"document\">,\n activeChunkId?: string,\n): RAGChunkGraphNavigation =>\n buildRAGChunkGraphNavigation(\n buildRAGChunkPreviewGraph(preview),\n activeChunkId,\n );\n\nexport const buildRAGChunkGraphNavigation = (\n graph: RAGChunkGraph,\n activeChunkId?: string,\n): RAGChunkGraphNavigation => {\n if (graph.nodes.length === 0) {\n return {\n activeChunkId,\n childSections: [],\n siblingSections: [],\n sectionNodes: [],\n };\n }\n\n const activeNode =\n (activeChunkId\n ? graph.nodes.find((node) => node.chunkId === activeChunkId)\n : undefined) ?? graph.nodes[0];\n const resolvedActiveChunkId = activeNode?.chunkId;\n const previousNode = activeNode?.structure?.sequence?.previousChunkId\n ? graph.nodes.find(\n (node) =>\n node.chunkId === activeNode.structure?.sequence?.previousChunkId,\n )\n : undefined;\n const nextNode = activeNode?.structure?.sequence?.nextChunkId\n ? graph.nodes.find(\n (node) => node.chunkId === activeNode.structure?.sequence?.nextChunkId,\n )\n : undefined;\n const section = activeNode?.structure?.sequence?.sectionChunkId\n ? graph.sections.find(\n (entry) => entry.id === activeNode.structure?.sequence?.sectionChunkId,\n )\n : undefined;\n const parentSection = section?.parentSectionId\n ? graph.sections.find((entry) => entry.id === section.parentSectionId)\n : undefined;\n const childSections = section\n ? section.childSectionIds\n .map((sectionId) =>\n graph.sections.find((entry) => entry.id === sectionId),\n )\n .filter((entry): entry is RAGChunkGraphSectionGroup => Boolean(entry))\n : [];\n const siblingSections = section?.parentSectionId\n ? graph.sections.filter(\n (entry) =>\n entry.parentSectionId === section.parentSectionId &&\n entry.id !== section.id,\n )\n : [];\n const sectionNodes = section\n ? section.chunkIds\n .map((chunkId) => graph.nodes.find((node) => node.chunkId === chunkId))\n .filter((node): node is RAGChunkGraphNode => Boolean(node))\n : activeNode\n ? [activeNode]\n : [];\n\n return {\n activeChunkId: resolvedActiveChunkId,\n activeNode,\n childSections,\n nextNode,\n parentSection,\n previousNode,\n section,\n siblingSections,\n sectionNodes,\n };\n};\nexport const buildRAGRetrievedState = (messages: AIMessage[]) => {\n const message = getLatestRetrievedMessage(messages);\n\n if (!message) {\n return null;\n }\n\n const sources = message.sources ?? [];\n const citations = buildRAGCitations(sources);\n const sectionDiagnostics = buildRAGSectionRetrievalDiagnostics(\n sources,\n isRAGRetrievalTrace(message.retrievalTrace)\n ? message.retrievalTrace\n : undefined,\n );\n const sourceSummaries = buildRAGSourceSummaries(sources);\n const groundedAnswer = buildRAGGroundedAnswer(message.content, sources);\n\n return {\n citationReferenceMap: buildRAGCitationReferenceMap(citations),\n citations,\n conversationId: message.conversationId,\n excerptModeCounts: buildRAGExcerptModeCounts([\n ...citations.map((citation) => citation.excerptSelection),\n ...sourceSummaries.map((summary) => summary.excerptSelection),\n ]),\n groundedAnswer,\n messageId: message.id,\n retrievalDurationMs: message.retrievalDurationMs,\n retrievalStartedAt: message.retrievalStartedAt,\n retrievedAt: message.retrievedAt,\n trace: isRAGRetrievalTrace(message.retrievalTrace)\n ? message.retrievalTrace\n : undefined,\n sectionDiagnostics,\n sourceGroups: buildRAGSourceGroups(sources),\n sourceSummaries,\n sources,\n };\n};\nexport const buildRAGSourceSummaries = (sources: RAGSource[]) => {\n const sourceGroups = buildRAGSourceGroups(sources);\n const citations = buildRAGCitations(sources);\n const citationReferenceMap = buildRAGCitationReferenceMap(citations);\n\n return sourceGroups.map<RAGSourceSummary>((group) => {\n const groupCitations = citations.filter((citation) =>\n group.chunks.some((chunk) => chunk.chunkId === citation.chunkId),\n );\n const leadChunk = getPreferredSourceLeadChunk(group.chunks);\n const excerpts = leadChunk\n ? buildRAGChunkExcerpts(group.chunks, leadChunk.chunkId)\n : undefined;\n const structure =\n leadChunk?.structure ?? buildRAGChunkStructure(leadChunk?.metadata);\n const excerptSelection = buildRAGExcerptSelection(excerpts, structure);\n\n return {\n bestScore: group.bestScore,\n citationNumbers: groupCitations.map(\n (citation) => citationReferenceMap[citation.chunkId] ?? 0,\n ),\n citations: groupCitations,\n chunkIds: group.chunks.map((chunk) => chunk.chunkId),\n contextLabel:\n leadChunk?.labels?.contextLabel ??\n buildContextLabel(leadChunk?.metadata),\n count: group.count,\n excerpt: excerptSelection.excerpt || buildExcerpt(leadChunk?.text ?? \"\"),\n excerpts,\n excerptSelection,\n key: group.key,\n label: group.label,\n locatorLabel:\n leadChunk?.labels?.locatorLabel ??\n buildLocatorLabel(\n leadChunk?.metadata,\n leadChunk?.source,\n leadChunk?.title,\n ),\n provenanceLabel:\n leadChunk?.labels?.provenanceLabel ??\n buildProvenanceLabel(leadChunk?.metadata),\n structure,\n source: group.source,\n title: group.title,\n };\n });\n};\n\nconst getSectionPathFromSource = (source: RAGSource) => {\n const path =\n source.structure?.section?.path ??\n (Array.isArray(source.metadata?.sectionPath)\n ? source.metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : []);\n\n return path.length > 0 ? path : undefined;\n};\n\nconst isBlockAwareContextLabel = (value?: string) =>\n typeof value === \"string\" &&\n (value.startsWith(\"PDF \") ||\n value.startsWith(\"Office \") ||\n value.startsWith(\"Slide \"));\n\nconst getStructuredSectionScoreWeight = (\n metadata?: Record<string, unknown>,\n) => {\n if (!metadata) {\n return 1;\n }\n\n const pdfTextKind = getContextString(metadata.pdfTextKind);\n const officeBlockKind = getContextString(metadata.officeBlockKind);\n const sectionKind = getContextString(metadata.sectionKind);\n const slideTitle = getContextString(metadata.slideTitle);\n const slideNotesText = getContextString(metadata.slideNotesText);\n\n if (pdfTextKind === \"table_like\") {\n return 1.28;\n }\n if (officeBlockKind === \"table\" || officeBlockKind === \"list\") {\n return 1.24;\n }\n if (\n sectionKind === \"pdf_block\" ||\n sectionKind === \"office_block\" ||\n officeBlockKind === \"paragraph\" ||\n pdfTextKind === \"paragraph\"\n ) {\n return 1.12;\n }\n if (sectionKind === \"presentation_slide\" && slideNotesText) {\n return 1.2;\n }\n if (sectionKind === \"presentation_slide\" && slideTitle) {\n return 1.14;\n }\n\n return 1;\n};\n\nconst getStructuredSourceLeadScore = (source: RAGSource) =>\n source.score * getStructuredSectionScoreWeight(source.metadata);\n\nconst getPDFLeadEvidencePreference = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return 0;\n }\n\n const pdfEvidenceMode = getContextString(metadata.pdfEvidenceMode);\n const pdfEvidenceOrigin = getContextString(metadata.pdfEvidenceOrigin);\n const pdfEvidenceSupplement = getContextString(\n metadata.pdfEvidenceSupplement,\n );\n\n if (\n pdfEvidenceMode === \"hybrid\" &&\n pdfEvidenceOrigin === \"native\" &&\n pdfEvidenceSupplement === \"ocr\"\n ) {\n return 3;\n }\n if (pdfEvidenceMode === \"native\" && pdfEvidenceOrigin === \"native\") {\n return 2;\n }\n if (pdfEvidenceMode === \"ocr\" && pdfEvidenceOrigin === \"ocr\") {\n return 1;\n }\n\n return 0;\n};\n\nconst getPDFLeadScope = (metadata?: Record<string, unknown>) => {\n if (!metadata) {\n return undefined;\n }\n\n const pageNumber =\n getContextNumber(metadata.pageNumber) ??\n getContextNumber(metadata.page) ??\n (typeof metadata.pageIndex === \"number\"\n ? metadata.pageIndex + 1\n : undefined);\n const sectionTitle = getContextString(metadata.sectionTitle);\n const sourceNativeKind = getContextString(metadata.sourceNativeKind);\n\n if (typeof pageNumber !== \"number\" && !sectionTitle && !sourceNativeKind) {\n return undefined;\n }\n\n return {\n pageNumber,\n sectionTitle,\n sourceNativeKind,\n };\n};\n\ntype OfficeLeadScope = {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n};\n\ntype GenericStructuredLeadScope = {\n familyPath: string[];\n kind: \"presentation_slide\" | \"spreadsheet_rows\";\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n};\n\nconst getOfficeLeadScope = (\n metadata?: Record<string, unknown>,\n): OfficeLeadScope | undefined => {\n if (!metadata) {\n return undefined;\n }\n\n const officeBlockKindValue = getContextString(metadata.officeBlockKind);\n const officeBlockKind =\n officeBlockKindValue === \"table\" ||\n officeBlockKindValue === \"list\" ||\n officeBlockKindValue === \"paragraph\"\n ? officeBlockKindValue\n : undefined;\n if (\n officeBlockKind !== \"table\" &&\n officeBlockKind !== \"list\" &&\n officeBlockKind !== \"paragraph\"\n ) {\n return undefined;\n }\n\n const sectionPath = Array.isArray(metadata.sectionPath)\n ? metadata.sectionPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const sectionTitle =\n getContextString(metadata.sectionTitle) ?? sectionPath.at(-1);\n const officeContextText =\n officeBlockKind === \"table\"\n ? getContextString(metadata.officeTableContextText)\n : officeBlockKind === \"list\"\n ? getContextString(metadata.officeListContextText)\n : undefined;\n\n if (!sectionTitle) {\n return undefined;\n }\n\n return {\n blockKind: officeBlockKind,\n familyPath: (() => {\n const explicitGenericFamilyPath = Array.isArray(\n metadata.sectionFamilyPath,\n )\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitGenericOrdinalPath = Array.isArray(\n metadata.sectionOrdinalPath,\n )\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n if (\n explicitGenericFamilyPath.length > 0 &&\n explicitGenericFamilyPath.length === explicitGenericOrdinalPath.length\n ) {\n return explicitGenericFamilyPath;\n }\n\n const explicitOfficeFamilyPath = Array.isArray(metadata.officeFamilyPath)\n ? metadata.officeFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n return explicitOfficeFamilyPath.length > 0\n ? explicitOfficeFamilyPath\n : sectionPath.map((value) => value.replace(/\\s+\\((\\d+)\\)$/, \"\").trim());\n })(),\n pathDepth: sectionPath.length,\n ordinalPath: (() => {\n const explicitGenericFamilyPath = Array.isArray(\n metadata.sectionFamilyPath,\n )\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitGenericOrdinalPath = Array.isArray(\n metadata.sectionOrdinalPath,\n )\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n if (\n explicitGenericFamilyPath.length > 0 &&\n explicitGenericFamilyPath.length === explicitGenericOrdinalPath.length\n ) {\n return explicitGenericOrdinalPath;\n }\n\n const explicitOfficeOrdinalPath = Array.isArray(\n metadata.officeOrdinalPath,\n )\n ? metadata.officeOrdinalPath\n .map((value) =>\n typeof value === \"number\" && Number.isFinite(value)\n ? value\n : undefined,\n )\n .filter((value): value is number => typeof value === \"number\")\n : [];\n return explicitOfficeOrdinalPath.length > 0\n ? explicitOfficeOrdinalPath\n : sectionPath.map((value) => {\n const match = value.match(/\\((\\d+)\\)$/);\n return match ? Number.parseInt(match[1] ?? \"1\", 10) : 1;\n });\n })(),\n sectionFamilyKey:\n getContextString(metadata.sectionSiblingFamilyKey) ??\n getContextString(metadata.officeSiblingFamilyKey) ??\n sectionPath\n .at(-1)\n ?.replace(/\\s+\\((\\d+)\\)$/, \"\")\n .trim() ??\n sectionTitle,\n sectionOrdinal:\n getContextNumber(metadata.sectionSiblingOrdinal) ??\n getContextNumber(metadata.officeSiblingOrdinal) ??\n (() => {\n const match = sectionTitle.match(/\\((\\d+)\\)$/);\n return match ? Number.parseInt(match[1] ?? \"1\", 10) : 1;\n })(),\n sectionTitle,\n hasContext: typeof officeContextText === \"string\",\n };\n};\n\nconst areOfficeLeadScopesComparable = (\n left:\n | {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n }\n | undefined,\n right:\n | {\n blockKind: \"list\" | \"paragraph\" | \"table\";\n familyPath: string[];\n hasContext: boolean;\n ordinalPath: number[];\n pathDepth: number;\n sectionFamilyKey: string;\n sectionOrdinal: number;\n sectionTitle: string;\n }\n | undefined,\n) => {\n if (!left || !right) {\n return false;\n }\n if (\n left.blockKind !== right.blockKind ||\n left.sectionFamilyKey !== right.sectionFamilyKey ||\n left.sectionOrdinal !== right.sectionOrdinal\n ) {\n return false;\n }\n const leftAncestorFamilyPath = left.familyPath.slice(0, -1);\n const rightAncestorFamilyPath = right.familyPath.slice(0, -1);\n const leftAncestorOrdinalPath = left.ordinalPath.slice(0, -1);\n const rightAncestorOrdinalPath = right.ordinalPath.slice(0, -1);\n const sharedDepth = Math.min(\n leftAncestorFamilyPath.length,\n rightAncestorFamilyPath.length,\n );\n for (let index = 0; index < sharedDepth; index += 1) {\n if (\n leftAncestorFamilyPath[index] !== rightAncestorFamilyPath[index] ||\n leftAncestorOrdinalPath[index] !== rightAncestorOrdinalPath[index]\n ) {\n return false;\n }\n }\n return true;\n};\n\nconst getGenericStructuredLeadScope = (\n metadata?: Record<string, unknown>,\n): GenericStructuredLeadScope | undefined => {\n if (!metadata || metadata.officeBlockKind || metadata.pageNumber) {\n return undefined;\n }\n\n const kind =\n metadata.sectionKind === \"spreadsheet_rows\" ||\n metadata.sectionKind === \"presentation_slide\"\n ? metadata.sectionKind\n : undefined;\n if (!kind) {\n return undefined;\n }\n\n const explicitFamilyPath = Array.isArray(metadata.sectionFamilyPath)\n ? metadata.sectionFamilyPath\n .map((value) => getContextString(value))\n .filter((value): value is string => typeof value === \"string\")\n : [];\n const explicitOrdinalPath = Array.isArray(metadata.sectionOrdinalPath)\n ? metadata.sectionOrdinalPath\n .map((value) => getContextNumber(value))\n .filter((value): value is number => typeof value === \"number\")\n : [];\n let familyPath =\n explicitFamilyPath.length > 0 &&\n explicitFamilyPath.length === explicitOrdinalPath.length\n ? explicitFamilyPath\n : [];\n let ordinalPath =\n explicitFamilyPath.length > 0 &&\n explicitFamilyPath.length === explicitOrdinalPath.length\n ? explicitOrdinalPath\n : [];\n\n if (familyPath.length === 0) {\n if (kind === \"spreadsheet_rows\") {\n const sheetName = getContextString(metadata.sheetName) ?? \"Sheet\";\n const tableIndex = getContextNumber(metadata.spreadsheetTableIndex) ?? 1;\n familyPath = [sheetName, \"Spreadsheet Table\"];\n ordinalPath = [1, tableIndex];\n } else {\n const slideFamily = getContextString(metadata.slideTitle) ?? \"Slide\";\n const slideOrdinal =\n getContextNumber(metadata.slideNumber) ??\n (typeof metadata.slideIndex === \"number\" ? metadata.slideIndex + 1 : 1);\n familyPath = [slideFamily];\n ordinalPath = [slideOrdinal];\n }\n }\n\n const sectionFamilyKey =\n getContextString(metadata.sectionSiblingFamilyKey) ?? familyPath.at(-1);\n const sectionOrdinal =\n getContextNumber(metadata.sectionSiblingOrdinal) ?? ordinalPath.at(-1);\n if (!sectionFamilyKey || typeof sectionOrdinal !== \"number\") {\n return undefined;\n }\n\n return {\n familyPath,\n kind,\n ordinalPath,\n pathDepth: familyPath.length,\n sectionFamilyKey,\n sectionOrdinal,\n };\n};\n\nconst areGenericStructuredLeadScopesComparable = (\n left: GenericStructuredLeadScope | undefined,\n right: GenericStructuredLeadScope | undefined,\n) => {\n if (!left || !right) {\n return false;\n }\n if (\n left.kind !== right.kind ||\n left.sectionFamilyKey !== right.sectionFamilyKey ||\n left.sectionOrdinal !== right.sectionOrdinal\n ) {\n return false;\n }\n const leftAncestorFamilyPath = left.familyPath.slice(0, -1);\n const rightAncestorFamilyPath = right.familyPath.slice(0, -1);\n const leftAncestorOrdinalPath = left.ordinalPath.slice(0, -1);\n const rightAncestorOrdinalPath = right.ordinalPath.slice(0, -1);\n const sharedDepth = Math.min(\n leftAncestorFamilyPath.length,\n rightAncestorFamilyPath.length,\n );\n for (let index = 0; index < sharedDepth; index += 1) {\n if (\n leftAncestorFamilyPath[index] !== rightAncestorFamilyPath[index] ||\n leftAncestorOrdinalPath[index] !== rightAncestorOrdinalPath[index]\n ) {\n return false;\n }\n }\n return true;\n};\n\nconst getOfficeLeadEvidencePreference = (\n metadata?: Record<string, unknown>,\n) => {\n const scope = getOfficeLeadScope(metadata);\n if (!scope) {\n return 0;\n }\n\n return (\n scope.pathDepth * 10 +\n (scope.hasContext ? 1 : 0) +\n (scope.blockKind === \"list\" &&\n typeof metadata?.officeListGroupItemCount === \"number\" &&\n metadata.officeListGroupItemCount > 1\n ? 1\n : 0)\n );\n};\n\nconst getGenericStructuredLeadPreference = (\n metadata?: Record<string, unknown>,\n) => {\n const scope = getGenericStructuredLeadScope(metadata);\n if (!scope) {\n return 0;\n }\n\n return (\n scope.pathDepth * 10 +\n (scope.kind === \"spreadsheet_rows\" &&\n typeof metadata?.spreadsheetTableIndex === \"number\"\n ? 2\n : 0) +\n (Array.isArray(metadata?.spreadsheetHeaders) &&\n metadata.spreadsheetHeaders.length > 0\n ? 1\n : 0) +\n (typeof metadata?.slideNotesText === \"string\" &&\n metadata.slideNotesText.trim().length > 0\n ? 1\n : 0)\n );\n};\n\nconst getPreferredSourceLeadChunk = (chunks: RAGSource[]) =>\n chunks.slice().sort((left, right) => {\n const leftOfficeScope = getOfficeLeadScope(left.metadata);\n const rightOfficeScope = getOfficeLeadScope(right.metadata);\n if (\n left.source === right.source &&\n areOfficeLeadScopesComparable(leftOfficeScope, rightOfficeScope)\n ) {\n const leftOfficePreference = getOfficeLeadEvidencePreference(\n left.metadata,\n );\n const rightOfficePreference = getOfficeLeadEvidencePreference(\n right.metadata,\n );\n if (rightOfficePreference !== leftOfficePreference) {\n return rightOfficePreference - leftOfficePreference;\n }\n }\n const leftGenericScope = getGenericStructuredLeadScope(left.metadata);\n const rightGenericScope = getGenericStructuredLeadScope(right.metadata);\n if (\n left.source === right.source &&\n areGenericStructuredLeadScopesComparable(\n leftGenericScope,\n rightGenericScope,\n )\n ) {\n const leftGenericPreference = getGenericStructuredLeadPreference(\n left.metadata,\n );\n const rightGenericPreference = getGenericStructuredLeadPreference(\n right.metadata,\n );\n if (rightGenericPreference !== leftGenericPreference) {\n return rightGenericPreference - leftGenericPreference;\n }\n }\n const leftWeightedScore = getStructuredSourceLeadScore(left);\n const rightWeightedScore = getStructuredSourceLeadScore(right);\n if (rightWeightedScore !== leftWeightedScore) {\n return rightWeightedScore - leftWeightedScore;\n }\n const leftScope = getPDFLeadScope(left.metadata);\n const rightScope = getPDFLeadScope(right.metadata);\n if (\n left.source === right.source &&\n leftScope &&\n rightScope &&\n ((leftScope.sectionTitle &&\n rightScope.sectionTitle &&\n leftScope.sectionTitle === rightScope.sectionTitle) ||\n (typeof leftScope.pageNumber === \"number\" &&\n typeof rightScope.pageNumber === \"number\" &&\n leftScope.pageNumber === rightScope.pageNumber))\n ) {\n const leftEvidencePreference = getPDFLeadEvidencePreference(\n left.metadata,\n );\n const rightEvidencePreference = getPDFLeadEvidencePreference(\n right.metadata,\n );\n if (rightEvidencePreference !== leftEvidencePreference) {\n return rightEvidencePreference - leftEvidencePreference;\n }\n }\n if (right.score !== left.score) {\n return right.score - left.score;\n }\n\n return left.chunkId.localeCompare(right.chunkId);\n })[0];\n\nexport const buildRAGSectionRetrievalDiagnostics = (\n sources: RAGSource[],\n trace?: RAGRetrievalTrace,\n): RAGSectionRetrievalDiagnostic[] => {\n const totalScore = sources.reduce(\n (sum, source) =>\n sum + source.score * getStructuredSectionScoreWeight(source.metadata),\n 0,\n );\n if (sources.length === 0 || totalScore <= 0) {\n return [];\n }\n\n const sections = new Map<\n string,\n {\n key: string;\n label: string;\n path?: string[];\n parentLabel?: string;\n count: number;\n bestScore: number;\n totalScore: number;\n topChunkId?: string;\n topSource?: string;\n vectorHits: number;\n lexicalHits: number;\n hybridHits: number;\n primaryHits: number;\n transformedHits: number;\n variantHits: number;\n sourceSet: Set<string>;\n }\n >();\n\n for (const source of sources) {\n const structuredScore =\n source.score * getStructuredSectionScoreWeight(source.metadata);\n const path = getSectionPathFromSource(source);\n if (!path) {\n continue;\n }\n\n const key = path.join(\" > \");\n const label = path.at(-1) ?? key;\n const parentLabel =\n path.length > 1 ? path.slice(0, -1).join(\" > \") : undefined;\n const existing = sections.get(key);\n const channels = Array.isArray(source.metadata?.retrievalChannels)\n ? source.metadata.retrievalChannels.filter(\n (value): value is \"vector\" | \"lexical\" =>\n value === \"vector\" || value === \"lexical\",\n )\n : [];\n const isHybrid =\n channels.includes(\"vector\") && channels.includes(\"lexical\");\n const vectorHits = channels.includes(\"vector\") ? 1 : 0;\n const lexicalHits = channels.includes(\"lexical\") ? 1 : 0;\n const hybridHits = isHybrid ? 1 : 0;\n const queryOrigins = Array.isArray(source.metadata?.retrievalQueryOrigins)\n ? source.metadata.retrievalQueryOrigins.filter(\n (value): value is \"primary\" | \"transformed\" | \"variant\" =>\n value === \"primary\" ||\n value === \"transformed\" ||\n value === \"variant\",\n )\n : source.metadata?.retrievalQueryOrigin === \"primary\" ||\n source.metadata?.retrievalQueryOrigin === \"transformed\" ||\n source.metadata?.retrievalQueryOrigin === \"variant\"\n ? [source.metadata.retrievalQueryOrigin]\n : [];\n const primaryHits = queryOrigins.includes(\"primary\") ? 1 : 0;\n const transformedHits = queryOrigins.includes(\"transformed\") ? 1 : 0;\n const variantHits = queryOrigins.includes(\"variant\") ? 1 : 0;\n if (!existing) {\n sections.set(key, {\n bestScore: source.score,\n count: 1,\n hybridHits,\n key,\n label,\n lexicalHits,\n parentLabel,\n path,\n primaryHits,\n sourceSet: new Set(source.source ? [source.source] : []),\n topChunkId: source.chunkId,\n topSource: source.source,\n totalScore: structuredScore,\n transformedHits,\n variantHits,\n vectorHits,\n });\n continue;\n }\n\n existing.count += 1;\n existing.totalScore += structuredScore;\n if (source.source) {\n existing.sourceSet.add(source.source);\n }\n existing.vectorHits += vectorHits;\n existing.lexicalHits += lexicalHits;\n existing.hybridHits += hybridHits;\n existing.primaryHits += primaryHits;\n existing.transformedHits += transformedHits;\n existing.variantHits += variantHits;\n if (source.score > existing.bestScore) {\n existing.bestScore = source.score;\n existing.topChunkId = source.chunkId;\n existing.topSource = source.source;\n }\n }\n\n const diagnostics = [...sections.values()];\n const strongestBestHit = diagnostics.reduce(\n (highest, section) => Math.max(highest, section.bestScore),\n 0,\n );\n const parentLabelByKey = new Map(\n diagnostics.map((section) => [section.key, section.parentLabel] as const),\n );\n const stageSectionCounts = new Map(\n (trace?.steps ?? [])\n .filter(\n (step) =>\n Array.isArray(step.sectionCounts) && step.sectionCounts.length > 0,\n )\n .map((step) => [step.stage, step.sectionCounts ?? []] as const),\n );\n const stageSectionScores = new Map(\n (trace?.steps ?? [])\n .filter(\n (step) =>\n Array.isArray(step.sectionScores) && step.sectionScores.length > 0,\n )\n .map((step) => [step.stage, step.sectionScores ?? []] as const),\n );\n\n return diagnostics\n .map<RAGSectionRetrievalDiagnostic>((section) => {\n const siblingPool = diagnostics.filter(\n (entry) => entry.parentLabel === section.parentLabel,\n );\n const siblings = siblingPool.filter((entry) => entry.key !== section.key);\n const strongestSibling = siblings\n .slice()\n .sort((left, right) => right.totalScore - left.totalScore)[0];\n const parentTotal = siblingPool.reduce(\n (sum, entry) => sum + entry.totalScore,\n 0,\n );\n const scoreShare = section.totalScore / totalScore;\n const parentShare =\n parentTotal > 0 ? section.totalScore / parentTotal : undefined;\n const topChunk = sources.find(\n (source) => source.chunkId === section.topChunkId,\n );\n const topContextLabel =\n topChunk?.labels?.contextLabel ?? buildContextLabel(topChunk?.metadata);\n const topLocatorLabel =\n topChunk?.labels?.locatorLabel ??\n buildLocatorLabel(\n topChunk?.metadata,\n topChunk?.source,\n topChunk?.title,\n );\n const sourceAwareChunkReason = formatSourceAwareChunkReason(\n topChunk?.metadata?.sourceAwareChunkReason,\n );\n const sourceAwareUnitScopeLabel = buildSourceAwareUnitScopeLabel(\n topChunk?.metadata,\n );\n const parentDistribution =\n parentTotal > 0\n ? siblingPool\n .map((entry) => ({\n count: entry.count,\n isActive: entry.key === section.key,\n key: entry.key,\n label: entry.label,\n parentShare: entry.totalScore / parentTotal,\n totalScore: entry.totalScore,\n }))\n .sort((left, right) => right.totalScore - left.totalScore)\n : [];\n const reasons: RAGSectionRetrievalDiagnostic[\"reasons\"] = [];\n const stageCounts =\n trace?.steps\n .map((step) => ({\n count:\n step.sectionCounts?.find((entry) => entry.key === section.key)\n ?.count ?? 0,\n stage: step.stage,\n }))\n .filter((entry) => entry.count > 0) ?? [];\n const stageWeights = stageCounts.map((entry) => {\n const previousStageEntry =\n stageCounts[\n stageCounts.findIndex(\n (candidate) => candidate.stage === entry.stage,\n ) - 1\n ];\n const stageEntries =\n stageSectionCounts\n .get(entry.stage)\n ?.filter((candidate) => candidate.count > 0) ?? [];\n const stageScoreEntries =\n stageSectionScores\n .get(entry.stage)\n ?.filter((candidate) => candidate.totalScore > 0) ?? [];\n const stageTotal = stageEntries.reduce(\n (sum, candidate) => sum + candidate.count,\n 0,\n );\n const stageScoreTotal = stageScoreEntries.reduce(\n (sum, candidate) => sum + candidate.totalScore,\n 0,\n );\n const siblingStageEntries = stageEntries.filter(\n (candidate) =>\n candidate.key !== section.key &&\n parentLabelByKey.get(candidate.key) === section.parentLabel,\n );\n const parentStageEntries = stageEntries.filter(\n (candidate) =>\n parentLabelByKey.get(candidate.key) === section.parentLabel,\n );\n const siblingStageScoreEntries = stageScoreEntries.filter(\n (candidate) =>\n candidate.key !== section.key &&\n parentLabelByKey.get(candidate.key) === section.parentLabel,\n );\n const parentStageScoreEntries = stageScoreEntries.filter(\n (candidate) =>\n parentLabelByKey.get(candidate.key) === section.parentLabel,\n );\n const strongestStageSibling = siblingStageEntries\n .slice()\n .sort((left, right) => right.count - left.count)[0];\n const parentStageTotal = parentStageEntries.reduce(\n (sum, candidate) => sum + candidate.count,\n 0,\n );\n const activeStageScore = stageScoreEntries.find(\n (candidate) => candidate.key === section.key,\n )?.totalScore;\n const strongestStageScoreSibling = siblingStageScoreEntries\n .slice()\n .sort((left, right) => right.totalScore - left.totalScore)[0];\n const parentStageScoreTotal = parentStageScoreEntries.reduce(\n (sum, candidate) => sum + candidate.totalScore,\n 0,\n );\n const stageShare = stageTotal > 0 ? entry.count / stageTotal : 0;\n const retentionRate =\n typeof previousStageEntry?.count === \"number\" &&\n previousStageEntry.count > 0\n ? entry.count / previousStageEntry.count\n : undefined;\n const countDelta =\n typeof previousStageEntry?.count === \"number\"\n ? entry.count - previousStageEntry.count\n : undefined;\n const parentStageShare =\n parentStageTotal > 0 ? entry.count / parentStageTotal : undefined;\n const stageScoreShare =\n typeof activeStageScore === \"number\" && stageScoreTotal > 0\n ? activeStageScore / stageScoreTotal\n : undefined;\n const parentStageScoreShare =\n typeof activeStageScore === \"number\" && parentStageScoreTotal > 0\n ? activeStageScore / parentStageScoreTotal\n : undefined;\n const stageShareGap =\n stageTotal > 0 && strongestStageSibling\n ? entry.count / stageTotal -\n strongestStageSibling.count / stageTotal\n : undefined;\n const parentStageShareGap =\n parentStageTotal > 0 && strongestStageSibling\n ? entry.count / parentStageTotal -\n strongestStageSibling.count / parentStageTotal\n : undefined;\n const stageScoreShareGap =\n typeof activeStageScore === \"number\" &&\n stageScoreTotal > 0 &&\n strongestStageScoreSibling\n ? activeStageScore / stageScoreTotal -\n strongestStageScoreSibling.totalScore / stageScoreTotal\n : undefined;\n const parentStageScoreShareGap =\n typeof activeStageScore === \"number\" &&\n parentStageScoreTotal > 0 &&\n strongestStageScoreSibling\n ? activeStageScore / parentStageScoreTotal -\n strongestStageScoreSibling.totalScore / parentStageScoreTotal\n : undefined;\n const reasons: RAGSectionRetrievalDiagnostic[\"stageWeights\"][number][\"reasons\"] =\n [];\n if (\n entry.stage === \"rerank\" &&\n stageShare > 0.5 &&\n (typeof stageShareGap !== \"number\" || stageShareGap > 0)\n ) {\n reasons.push(\"rerank_preserved_lead\");\n }\n if (entry.stage === \"finalize\" && stageShare >= 0.5) {\n reasons.push(\"final_stage_concentration\");\n }\n if (\n entry.stage === \"finalize\" &&\n typeof parentStageShare === \"number\" &&\n parentStageShare >= 0.6 &&\n (typeof parentStageShareGap !== \"number\" || parentStageShareGap > 0)\n ) {\n reasons.push(\"final_stage_dominant_within_parent\");\n }\n if (\n strongestStageSibling &&\n ((typeof stageShareGap === \"number\" && stageShareGap <= 0.1) ||\n (typeof parentStageShareGap === \"number\" &&\n parentStageShareGap <= 0.1))\n ) {\n reasons.push(\"stage_runner_up_pressure\");\n }\n if (typeof countDelta === \"number\") {\n if (countDelta > 0) {\n reasons.push(\"stage_expanded\");\n } else if (countDelta < 0) {\n reasons.push(\"stage_narrowed\");\n } else {\n reasons.push(\"stage_held\");\n }\n }\n\n return {\n count: entry.count,\n countDelta,\n parentStageScoreShare,\n parentStageShare,\n parentStageShareGap,\n previousCount: previousStageEntry?.count,\n previousStage: previousStageEntry?.stage,\n reasons,\n retentionRate,\n stage: entry.stage,\n stageScoreShare,\n stageScoreShareGap,\n stageShare,\n stageShareGap,\n totalScore: activeStageScore,\n strongestSiblingCount: strongestStageSibling?.count,\n strongestSiblingLabel: strongestStageSibling\n ? (diagnostics.find(\n (candidate) => candidate.key === strongestStageSibling.key,\n )?.label ?? strongestStageSibling.key)\n : undefined,\n };\n });\n const firstSeenStage = stageCounts[0]?.stage;\n const lastSeenStage = stageCounts.at(-1)?.stage;\n const peakStageEntry = stageCounts.reduce<\n (typeof stageCounts)[number] | undefined\n >(\n (highest, entry) =>\n !highest || entry.count > highest.count ? entry : highest,\n undefined,\n );\n const finalStageEntry = stageCounts.at(-1);\n const peakCount = peakStageEntry?.count ?? section.count;\n const finalCount = finalStageEntry?.count;\n const finalRetentionRate =\n typeof finalCount === \"number\" && peakCount > 0\n ? finalCount / peakCount\n : undefined;\n const dropFromPeak =\n typeof finalCount === \"number\" ? peakCount - finalCount : undefined;\n const queryAttributionReasons: RAGSectionRetrievalDiagnostic[\"queryAttribution\"][\"reasons\"] =\n [];\n const queryAttributionMode =\n section.primaryHits > 0 &&\n section.transformedHits === 0 &&\n section.variantHits === 0\n ? \"primary\"\n : section.transformedHits > 0 &&\n section.primaryHits === 0 &&\n section.variantHits === 0\n ? \"transformed\"\n : section.variantHits > 0 &&\n section.primaryHits === 0 &&\n section.transformedHits === 0\n ? \"variant\"\n : \"mixed\";\n if (queryAttributionMode === \"primary\") {\n queryAttributionReasons.push(\"base_query_only\");\n }\n if (queryAttributionMode === \"transformed\") {\n queryAttributionReasons.push(\"transformed_query_only\");\n queryAttributionReasons.push(\"transform_introduced\");\n }\n if (queryAttributionMode === \"variant\") {\n queryAttributionReasons.push(\"variant_only\");\n queryAttributionReasons.push(\"variant_supported\");\n }\n if (queryAttributionMode === \"mixed\") {\n queryAttributionReasons.push(\"mixed_query_sources\");\n if (section.variantHits > 0) {\n queryAttributionReasons.push(\"variant_supported\");\n }\n if (section.transformedHits > 0 && section.primaryHits === 0) {\n queryAttributionReasons.push(\"transform_introduced\");\n }\n }\n\n if (section.bestScore >= strongestBestHit) {\n reasons.push(\"best_hit\");\n }\n if (section.count > 1) {\n reasons.push(\"multi_hit_section\");\n }\n if (siblings.length === 0) {\n reasons.push(\"only_section_in_parent\");\n } else if (\n !strongestSibling ||\n section.totalScore >= strongestSibling.totalScore\n ) {\n reasons.push(\"dominant_within_parent\");\n }\n if (scoreShare >= 0.5 || (parentShare ?? 0) >= 0.6) {\n reasons.push(\"concentrated_evidence\");\n }\n\n const summaryParts = [\n isBlockAwareContextLabel(topContextLabel) ? topContextLabel : \"\",\n `${section.count} hit${section.count === 1 ? \"\" : \"s\"}`,\n `${(scoreShare * 100).toFixed(0)}% score share`,\n `vector ${section.vectorHits} · lexical ${section.lexicalHits} · hybrid ${section.hybridHits}`,\n typeof parentShare === \"number\"\n ? `${(parentShare * 100).toFixed(0)}% of parent section set`\n : \"\",\n sourceAwareChunkReason ? `boundary ${sourceAwareChunkReason}` : \"\",\n sourceAwareUnitScopeLabel ? `scope ${sourceAwareUnitScopeLabel}` : \"\",\n strongestSibling\n ? `ahead of ${strongestSibling.label} by ${(section.totalScore - strongestSibling.totalScore).toFixed(2)}`\n : \"no sibling competition\",\n ].filter(Boolean);\n\n return {\n averageScore: section.totalScore / section.count,\n bestScore: section.bestScore,\n count: section.count,\n key: section.key,\n label: section.label,\n parentLabel: section.parentLabel,\n parentDistribution,\n parentShare,\n parentShareGap:\n typeof parentShare === \"number\" && strongestSibling && parentTotal > 0\n ? parentShare - strongestSibling.totalScore / parentTotal\n : undefined,\n path: section.path,\n firstSeenStage,\n finalCount,\n finalRetentionRate,\n lastSeenStage,\n dropFromPeak,\n peakCount,\n peakStage: peakStageEntry?.stage,\n queryAttribution: {\n mode: queryAttributionMode,\n primaryHits: section.primaryHits,\n reasons: queryAttributionReasons,\n transformedHits: section.transformedHits,\n variantHits: section.variantHits,\n },\n requestedMode: trace?.requestedMode,\n retrievalMode: trace?.mode,\n routingLabel: trace?.routingLabel,\n routingProvider: trace?.routingProvider,\n routingReason: trace?.routingReason,\n queryTransformLabel: trace?.queryTransformLabel,\n queryTransformProvider: trace?.queryTransformProvider,\n queryTransformReason: trace?.queryTransformReason,\n reasons,\n evidenceReconcileApplied: trace?.steps.some(\n (step) => step.stage === \"evidence_reconcile\",\n ),\n rerankApplied: trace?.steps.some(\n (step) => step.stage === \"rerank\" && step.metadata?.applied === true,\n ),\n scoreShare,\n scoreThresholdApplied: trace?.steps.some(\n (step) => step.stage === \"score_filter\",\n ),\n stageCounts,\n stageWeights,\n siblingCount: siblings.length,\n siblingScoreGap: strongestSibling\n ? section.totalScore - strongestSibling.totalScore\n : undefined,\n sourceCount: section.sourceSet.size,\n sourceAwareChunkReasonLabel: sourceAwareChunkReason,\n sourceAwareUnitScopeLabel,\n topContextLabel,\n topLocatorLabel,\n sourceBalanceApplied: trace?.steps.some(\n (step) => step.stage === \"source_balance\",\n ),\n strongestSiblingLabel: strongestSibling?.label,\n strongestSiblingScore: strongestSibling?.totalScore,\n summary: summaryParts.join(\" · \"),\n topChunkId: section.topChunkId,\n topSource: section.topSource,\n totalScore: section.totalScore,\n hybridHits: section.hybridHits,\n lexicalHits: section.lexicalHits,\n vectorHits: section.vectorHits,\n };\n })\n .sort((left, right) => {\n if (right.totalScore !== left.totalScore) {\n return right.totalScore - left.totalScore;\n }\n if (right.bestScore !== left.bestScore) {\n return right.bestScore - left.bestScore;\n }\n return left.label.localeCompare(right.label);\n });\n};\n\nconst buildStreamProgressState = (messages: AIMessage[]) => {\n const latestMessage = getLatestAssistantMessage(messages);\n const retrieved = latestMessage\n ? buildRAGRetrievedState(messages)\n : undefined;\n\n return {\n conversationId: latestMessage?.conversationId,\n latestMessage,\n messageId: latestMessage?.id,\n retrieved,\n sourceCount:\n retrieved?.sources.length ?? latestMessage?.sources?.length ?? 0,\n };\n};\n\nexport const buildRAGStreamProgress = ({\n error,\n isStreaming,\n messages,\n}: {\n error: string | null;\n isStreaming: boolean;\n messages: AIMessage[];\n}): RAGStreamProgress => {\n const stage = resolveRAGStreamStage({\n error,\n isStreaming,\n messages,\n });\n const state = buildStreamProgressState(messages);\n const hasSources = state.sourceCount > 0;\n const hasRetrieved =\n stage === \"retrieved\" ||\n state.retrieved !== undefined ||\n state.latestMessage?.retrievedAt !== undefined;\n const hasThinking =\n typeof state.latestMessage?.thinking === \"string\" &&\n state.latestMessage.thinking.length > 0;\n const hasToolCalls = (state.latestMessage?.toolCalls?.length ?? 0) > 0;\n\n return {\n conversationId: state.conversationId,\n hasContent:\n typeof state.latestMessage?.content === \"string\" &&\n state.latestMessage.content.length > 0,\n hasRetrieved,\n hasSources,\n hasThinking,\n hasToolCalls,\n isComplete: stage === \"complete\",\n isError: stage === \"error\",\n isIdle: stage === \"idle\",\n isRetrieved: stage === \"retrieved\",\n isRetrieving: stage === \"submitting\" || stage === \"retrieving\",\n isStreaming: stage === \"streaming\",\n isSubmitting: stage === \"submitting\",\n latestMessage: state.latestMessage,\n messageId: state.messageId,\n retrievalDurationMs: state.retrieved?.retrievalDurationMs,\n retrievalStartedAt: state.retrieved?.retrievalStartedAt,\n retrievedAt: state.retrieved?.retrievedAt,\n sourceCount: state.sourceCount,\n stage,\n };\n};\n\nexport type RAGStreamProgressState = ReturnType<typeof buildRAGStreamProgress>;\nexport const buildRAGAnswerWorkflowState = ({\n error,\n isStreaming,\n messages,\n}: {\n error: string | null;\n isStreaming: boolean;\n messages: AIMessage[];\n}): RAGAnswerWorkflowState => {\n const latestAssistantMessage = getLatestAssistantMessage(messages);\n const sources = getLatestRAGSources(messages);\n const sourceGroups = buildRAGSourceGroups(sources);\n const citations = buildRAGCitations(sources);\n const citationReferenceMap = buildRAGCitationReferenceMap(citations);\n const sourceSummaries = buildRAGSourceSummaries(sources);\n const groundingReferences = buildRAGGroundingReferences(sources);\n const groundedAnswer = buildRAGGroundedAnswer(\n latestAssistantMessage?.content ?? \"\",\n sources,\n );\n const retrieval = buildRAGRetrievedState(messages);\n const sectionDiagnostics = buildRAGSectionRetrievalDiagnostics(\n sources,\n retrieval?.trace,\n );\n const progress = buildRAGStreamProgress({\n error,\n isStreaming,\n messages,\n });\n\n return {\n excerptModeCounts: buildRAGExcerptModeCounts([\n ...citations.map((citation) => citation.excerptSelection),\n ...sourceSummaries.map((summary) => summary.excerptSelection),\n ...groundingReferences.map((reference) => reference.excerptSelection),\n ...groundedAnswer.sectionSummaries.map(\n (summary) => summary.excerptSelection,\n ),\n ]),\n citationReferenceMap,\n citations,\n coverage: groundedAnswer.coverage,\n error,\n groundedAnswer,\n groundingReferences,\n hasCitations: groundedAnswer.hasCitations,\n hasGrounding: groundingReferences.length > 0,\n hasRetrieved: progress.hasRetrieved,\n hasSources: sources.length > 0,\n isAnswerStreaming: progress.isStreaming,\n isComplete: progress.isComplete,\n isError: progress.isError,\n isIdle: progress.isIdle,\n isRetrieved: progress.isRetrieved,\n isRetrieving: progress.isRetrieving,\n isRunning:\n progress.isSubmitting || progress.isRetrieving || progress.isStreaming,\n isSubmitting: progress.isSubmitting,\n latestAssistantMessage,\n messages,\n retrieval,\n retrievalDurationMs: retrieval?.retrievalDurationMs,\n retrievalStartedAt: retrieval?.retrievalStartedAt,\n retrievedAt: retrieval?.retrievedAt,\n sectionDiagnostics,\n sourceGroups,\n sourceSummaries,\n sources,\n stage: progress.stage,\n ungroundedReferenceNumbers: groundedAnswer.ungroundedReferenceNumbers,\n };\n};\n\nexport const buildRAGSourceGroups = (sources: RAGSource[]) => {\n const groups = new Map<string, RAGSourceGroup>();\n\n for (const source of sources) {\n updateSourceGroup(groups, source);\n }\n\n return [...groups.values()].sort((left, right) => {\n if (right.bestScore !== left.bestScore) {\n return right.bestScore - left.bestScore;\n }\n\n return left.label.localeCompare(right.label);\n });\n};\n\nconst buildSourceGroup = (source: RAGSource, key: string): RAGSourceGroup => ({\n bestScore: source.score,\n chunks: [source],\n count: 1,\n key,\n label: buildSourceLabel(source),\n labels:\n source.labels ??\n buildRAGSourceLabels({\n metadata: source.metadata,\n source: source.source,\n title: source.title,\n }),\n structure: source.structure ?? buildRAGChunkStructure(source.metadata),\n source: source.source,\n title: source.title,\n});\n\nconst updateSourceGroup = (\n groups: Map<string, RAGSourceGroup>,\n source: RAGSource,\n) => {\n const key = buildSourceGroupKey(source);\n const existing = groups.get(key);\n if (!existing) {\n groups.set(key, buildSourceGroup(source, key));\n\n return;\n }\n\n existing.bestScore = Math.max(existing.bestScore, source.score);\n existing.count += 1;\n existing.chunks.push(source);\n const leadChunk = getPreferredSourceLeadChunk(existing.chunks);\n if (leadChunk) {\n existing.label = buildSourceLabel(leadChunk);\n existing.labels =\n leadChunk.labels ??\n buildRAGSourceLabels({\n metadata: leadChunk.metadata,\n source: leadChunk.source,\n title: leadChunk.title,\n });\n existing.structure =\n leadChunk.structure ?? buildRAGChunkStructure(leadChunk.metadata);\n existing.source = leadChunk.source;\n existing.title = leadChunk.title;\n }\n};\nexport const getLatestAssistantMessage = (messages: AIMessage[]) => {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message?.role === \"assistant\") {\n return message;\n }\n }\n\n return undefined;\n};\nexport const getLatestRAGSources = (messages: AIMessage[]) =>\n getLatestAssistantMessage(messages)?.sources ?? [];\nexport const getLatestRetrievedMessage = (messages: AIMessage[]) => {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (\n message?.role === \"assistant\" &&\n (typeof message.retrievedAt === \"number\" ||\n (message.sources?.length ?? 0) > 0)\n ) {\n return message;\n }\n }\n\n return undefined;\n};\nexport const resolveRAGStreamStage = ({\n error,\n isStreaming,\n messages,\n}: {\n error: string | null;\n isStreaming: boolean;\n messages: AIMessage[];\n}) => {\n if (error) {\n return \"error\";\n }\n\n const assistantMessage = getLatestAssistantMessage(messages);\n if (!assistantMessage) {\n return isStreaming ? \"submitting\" : \"idle\";\n }\n\n const isRetrieving =\n typeof assistantMessage.retrievalStartedAt === \"number\" &&\n typeof assistantMessage.retrievedAt !== \"number\";\n\n if (isRetrieving) {\n return \"retrieving\";\n }\n\n if (!isStreaming) {\n return \"complete\";\n }\n\n const hasRetrieved = typeof assistantMessage.retrievedAt === \"number\";\n const hasContent =\n assistantMessage.content.trim().length > 0 ||\n assistantMessage.thinking?.trim().length ||\n (assistantMessage.toolCalls?.length ?? 0) > 0 ||\n (assistantMessage.images?.length ?? 0) > 0;\n\n if (hasRetrieved && !hasContent) {\n return \"retrieved\";\n }\n\n return \"streaming\";\n};\n\nconst formatSignedDelta = (value: number, decimals = 0, suffix = \"\") =>\n `${value >= 0 ? \"+\" : \"\"}${value.toFixed(decimals)}${suffix}`;\n\nconst formatEvaluationPassingRate = (value: number) => `${value.toFixed(1)}%`;\n\nconst formatEvaluationSummary = (response: RAGEvaluationResponse) =>\n `${response.summary.totalCases} total · f1 ${response.summary.averageF1.toFixed(\n 3,\n )} · latency ${response.summary.averageLatencyMs.toFixed(1)}ms`;\n\nconst formatGroundingHistorySummaryValue = (response: {\n summary: {\n passedCases: number;\n totalCases: number;\n groundedCases: number;\n partialCases: number;\n ungroundedCases: number;\n averageResolvedCitationRate: number;\n averageCitationF1: number;\n };\n}) =>\n `${response.summary.passedCases}/${response.summary.totalCases} pass · grounded ${response.summary.groundedCases} · partial ${response.summary.partialCases} · ungrounded ${response.summary.ungroundedCases} · resolved citations ${(response.summary.averageResolvedCitationRate * 100).toFixed(1)}% · citation f1 ${response.summary.averageCitationF1.toFixed(3)}`;\n\nconst formatHistoryCaseLabels = (cases: RAGEvaluationCaseDiff[]) =>\n cases.length > 0\n ? cases.map((entry) => entry.label ?? entry.caseId).join(\", \")\n : \"none\";\n\nconst buildComparisonCaseLeadLabel = (snapshot?: {\n topLocatorLabel?: string;\n topContextLabel?: string;\n sourceAwareUnitScopeLabel?: string;\n sourceAwareChunkReasonLabel?: string;\n}) =>\n snapshot?.topLocatorLabel ??\n snapshot?.topContextLabel ??\n snapshot?.sourceAwareUnitScopeLabel ??\n snapshot?.sourceAwareChunkReasonLabel;\n\nconst formatComparisonLeadCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const labels = Array.from(\n new Set(\n (entry.caseTraceSnapshots ?? [])\n .map((snapshot) => buildComparisonCaseLeadLabel(snapshot))\n .filter((value): value is string => typeof value === \"string\"),\n ),\n ).slice(0, 3);\n\n return labels.length > 0 ? labels.join(\" · \") : \"none\";\n};\n\nconst formatComparisonLeadMediaCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const labels = Array.from(\n new Set(\n (entry.caseTraceSnapshots ?? [])\n .map((snapshot) =>\n formatLeadMediaCueSummary({\n leadSpeakerCue: snapshot.leadSpeakerCue,\n leadSpeakerAttributionCue: snapshot.leadSpeakerAttributionCue,\n leadChannelCue: snapshot.leadChannelCue,\n leadChannelAttributionCue: snapshot.leadChannelAttributionCue,\n leadContinuityCue: snapshot.leadContinuityCue,\n }),\n )\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value !== \"none\",\n ),\n ),\n ).slice(0, 3);\n\n return labels.length > 0 ? labels.join(\" · \") : \"none\";\n};\n\nconst formatComparisonPresentationCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const labels = Array.from(\n new Set(\n (entry.caseTraceSnapshots ?? [])\n .map((snapshot) => snapshot.leadPresentationCue)\n .filter(\n (value): value is \"body\" | \"notes\" | \"title\" =>\n value === \"body\" || value === \"notes\" || value === \"title\",\n ),\n ),\n ).map((value) =>\n value === \"notes\" ? \"notes\" : value === \"title\" ? \"title\" : \"body\",\n );\n\n return labels.length > 0 ? labels.join(\" / \") : \"none\";\n};\n\nconst formatLeadPresentationCue = (\n cue?: \"body\" | \"notes\" | \"title\",\n): string => {\n if (cue === \"notes\" || cue === \"title\" || cue === \"body\") {\n return cue;\n }\n\n return \"none\";\n};\n\nconst formatSQLitePlannerCueSummary = (input?: {\n sqliteQueryMode?: string;\n sqliteQueryPushdownMode?: string;\n sqliteQueryPushdownApplied?: boolean;\n sqliteQueryPushdownClauseCount?: number;\n sqliteQueryPushdownCoverageRatio?: number;\n sqliteQueryTotalFilterClauseCount?: number;\n sqliteQueryJsRemainderClauseCount?: number;\n sqliteQueryPlannerProfileUsed?: string;\n sqliteQueryMultiplierUsed?: number;\n sqliteQueryCandidateLimitUsed?: number;\n sqliteQueryMaxBackfillsUsed?: number;\n sqliteQueryMinResultsUsed?: number;\n sqliteQueryFillPolicyUsed?: string;\n sqliteQueryJsRemainderRatio?: number;\n sqliteQueryFilteredCandidates?: number;\n sqliteQueryInitialSearchK?: number;\n sqliteQueryFinalSearchK?: number;\n sqliteQuerySearchExpansionRatio?: number;\n sqliteQueryBackfillCount?: number;\n sqliteQueryBackfillLimitReached?: boolean;\n sqliteQueryMinResultsSatisfied?: boolean;\n sqliteQueryReturnedCount?: number;\n sqliteQueryCandidateYieldRatio?: number;\n sqliteQueryTopKFillRatio?: number;\n sqliteQueryUnderfilledTopK?: boolean;\n sqliteQueryCandidateBudgetExhausted?: boolean;\n sqliteQueryCandidateCoverage?: string;\n}) => {\n const plannerJudgment =\n typeof input?.sqliteQuerySearchExpansionRatio === \"number\" &&\n typeof input?.sqliteQueryCandidateYieldRatio === \"number\" &&\n input.sqliteQuerySearchExpansionRatio >= 2 &&\n input.sqliteQueryCandidateYieldRatio < 0.25\n ? \"expensive backfill\"\n : typeof input?.sqliteQueryTopKFillRatio === \"number\" &&\n typeof input?.sqliteQueryCandidateYieldRatio === \"number\" &&\n input.sqliteQueryTopKFillRatio >= 1 &&\n input.sqliteQueryCandidateYieldRatio >= 0.5\n ? \"efficient fill\"\n : input?.sqliteQueryPushdownMode === \"full\" &&\n typeof input?.sqliteQueryPushdownCoverageRatio === \"number\" &&\n input.sqliteQueryPushdownCoverageRatio >= 1\n ? \"full pushdown\"\n : input?.sqliteQueryPushdownMode === \"partial\" &&\n typeof input?.sqliteQueryJsRemainderRatio === \"number\" &&\n input.sqliteQueryJsRemainderRatio >= 0.5\n ? \"heavy js remainder\"\n : undefined;\n\n const parts = [\n input?.sqliteQueryMode ? `mode ${input.sqliteQueryMode}` : undefined,\n input?.sqliteQueryPushdownMode\n ? `pushdown ${input.sqliteQueryPushdownMode}`\n : undefined,\n typeof input?.sqliteQueryPushdownApplied === \"boolean\"\n ? input.sqliteQueryPushdownApplied\n ? \"pushdown applied\"\n : \"pushdown skipped\"\n : undefined,\n typeof input?.sqliteQueryPushdownClauseCount === \"number\"\n ? `clauses ${input.sqliteQueryPushdownClauseCount}`\n : undefined,\n typeof input?.sqliteQueryPushdownCoverageRatio === \"number\"\n ? `pushdown ${(input.sqliteQueryPushdownCoverageRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.sqliteQueryJsRemainderClauseCount === \"number\"\n ? `js remainder ${input.sqliteQueryJsRemainderClauseCount}`\n : undefined,\n input?.sqliteQueryPlannerProfileUsed\n ? `profile ${input.sqliteQueryPlannerProfileUsed}`\n : undefined,\n typeof input?.sqliteQueryMultiplierUsed === \"number\"\n ? `x${input.sqliteQueryMultiplierUsed}`\n : undefined,\n typeof input?.sqliteQueryCandidateLimitUsed === \"number\"\n ? `cap ${input.sqliteQueryCandidateLimitUsed}`\n : undefined,\n typeof input?.sqliteQueryMaxBackfillsUsed === \"number\"\n ? `backfills ${input.sqliteQueryMaxBackfillsUsed}`\n : undefined,\n typeof input?.sqliteQueryMinResultsUsed === \"number\"\n ? `min ${input.sqliteQueryMinResultsUsed}`\n : undefined,\n input?.sqliteQueryFillPolicyUsed\n ? `fill ${input.sqliteQueryFillPolicyUsed}`\n : undefined,\n typeof input?.sqliteQueryJsRemainderRatio === \"number\"\n ? `js ${(input.sqliteQueryJsRemainderRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.sqliteQueryTotalFilterClauseCount === \"number\"\n ? `total clauses ${input.sqliteQueryTotalFilterClauseCount}`\n : undefined,\n typeof input?.sqliteQueryFilteredCandidates === \"number\"\n ? `filtered ${input.sqliteQueryFilteredCandidates}`\n : undefined,\n typeof input?.sqliteQueryInitialSearchK === \"number\" &&\n typeof input?.sqliteQueryFinalSearchK === \"number\"\n ? `searchK ${input.sqliteQueryInitialSearchK}->${input.sqliteQueryFinalSearchK}`\n : typeof input?.sqliteQueryFinalSearchK === \"number\"\n ? `searchK ${input.sqliteQueryFinalSearchK}`\n : undefined,\n typeof input?.sqliteQuerySearchExpansionRatio === \"number\"\n ? `expand ${(input.sqliteQuerySearchExpansionRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.sqliteQueryBackfillCount === \"number\"\n ? `backfill ${input.sqliteQueryBackfillCount}`\n : undefined,\n typeof input?.sqliteQueryBackfillLimitReached === \"boolean\" &&\n input.sqliteQueryBackfillLimitReached\n ? \"backfill limit reached\"\n : undefined,\n typeof input?.sqliteQueryMinResultsSatisfied === \"boolean\" &&\n input.sqliteQueryMinResultsSatisfied\n ? \"min satisfied\"\n : undefined,\n typeof input?.sqliteQueryReturnedCount === \"number\"\n ? `returned ${input.sqliteQueryReturnedCount}`\n : undefined,\n typeof input?.sqliteQueryCandidateYieldRatio === \"number\"\n ? `yield ${(input.sqliteQueryCandidateYieldRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.sqliteQueryTopKFillRatio === \"number\"\n ? `fill ${(input.sqliteQueryTopKFillRatio * 100).toFixed(0)}%`\n : undefined,\n input?.sqliteQueryCandidateCoverage\n ? `coverage ${input.sqliteQueryCandidateCoverage}`\n : undefined,\n typeof input?.sqliteQueryUnderfilledTopK === \"boolean\" &&\n input.sqliteQueryUnderfilledTopK\n ? \"underfilled topK\"\n : undefined,\n typeof input?.sqliteQueryCandidateBudgetExhausted === \"boolean\" &&\n input.sqliteQueryCandidateBudgetExhausted\n ? \"budget exhausted\"\n : undefined,\n plannerJudgment,\n ].filter((value): value is string => typeof value === \"string\");\n\n return parts.length > 0 ? parts.join(\" · \") : \"none\";\n};\n\nconst formatPostgresPlannerCueSummary = (input?: {\n postgresQueryMode?: string;\n postgresQueryPushdownMode?: string;\n postgresQueryPushdownApplied?: boolean;\n postgresQueryPushdownClauseCount?: number;\n postgresQueryPushdownCoverageRatio?: number;\n postgresQueryTotalFilterClauseCount?: number;\n postgresQueryJsRemainderClauseCount?: number;\n postgresQueryPlannerProfileUsed?: string;\n postgresQueryMultiplierUsed?: number;\n postgresQueryCandidateLimitUsed?: number;\n postgresQueryMaxBackfillsUsed?: number;\n postgresQueryMinResultsUsed?: number;\n postgresQueryFillPolicyUsed?: string;\n postgresQueryJsRemainderRatio?: number;\n postgresQueryFilteredCandidates?: number;\n postgresQueryInitialSearchK?: number;\n postgresQueryFinalSearchK?: number;\n postgresQuerySearchExpansionRatio?: number;\n postgresQueryBackfillCount?: number;\n postgresQueryBackfillLimitReached?: boolean;\n postgresQueryMinResultsSatisfied?: boolean;\n postgresQueryReturnedCount?: number;\n postgresQueryCandidateYieldRatio?: number;\n postgresQueryTopKFillRatio?: number;\n postgresQueryUnderfilledTopK?: boolean;\n postgresQueryCandidateBudgetExhausted?: boolean;\n postgresQueryCandidateCoverage?: string;\n postgresIndexType?: string;\n postgresIndexName?: string;\n postgresIndexPresent?: boolean;\n postgresEstimatedRowCount?: number;\n postgresTableBytes?: number;\n postgresIndexBytes?: number;\n postgresTotalBytes?: number;\n postgresIndexStorageRatio?: number;\n}) => {\n const plannerJudgment =\n typeof input?.postgresQuerySearchExpansionRatio === \"number\" &&\n typeof input?.postgresQueryCandidateYieldRatio === \"number\" &&\n input.postgresQuerySearchExpansionRatio >= 2 &&\n input.postgresQueryCandidateYieldRatio < 0.25\n ? \"expensive backfill\"\n : typeof input?.postgresQueryTopKFillRatio === \"number\" &&\n typeof input?.postgresQueryCandidateYieldRatio === \"number\" &&\n input.postgresQueryTopKFillRatio >= 1 &&\n input.postgresQueryCandidateYieldRatio >= 0.5\n ? \"efficient fill\"\n : input?.postgresQueryPushdownMode === \"full\" &&\n typeof input?.postgresQueryPushdownCoverageRatio === \"number\" &&\n input.postgresQueryPushdownCoverageRatio >= 1\n ? \"full pushdown\"\n : input?.postgresQueryPushdownMode === \"partial\" &&\n typeof input?.postgresQueryJsRemainderRatio === \"number\" &&\n input.postgresQueryJsRemainderRatio >= 0.5\n ? \"heavy js remainder\"\n : undefined;\n const healthJudgment =\n input?.postgresIndexPresent === false\n ? \"index missing\"\n : typeof input?.postgresIndexStorageRatio === \"number\" &&\n input.postgresIndexStorageRatio >= 0.7\n ? \"index-heavy storage\"\n : typeof input?.postgresEstimatedRowCount === \"number\" &&\n input.postgresEstimatedRowCount >= 1000 &&\n input.postgresIndexPresent === true\n ? \"indexed larger corpus\"\n : undefined;\n\n const parts = [\n input?.postgresQueryMode ? `mode ${input.postgresQueryMode}` : undefined,\n input?.postgresIndexType ? `index ${input.postgresIndexType}` : undefined,\n typeof input?.postgresIndexPresent === \"boolean\"\n ? input.postgresIndexPresent\n ? \"index present\"\n : \"index missing\"\n : undefined,\n typeof input?.postgresEstimatedRowCount === \"number\"\n ? `rows ${input.postgresEstimatedRowCount}`\n : undefined,\n typeof input?.postgresTableBytes === \"number\"\n ? `table ${formatByteSizeLabel(input.postgresTableBytes)}`\n : undefined,\n typeof input?.postgresIndexBytes === \"number\"\n ? `index ${formatByteSizeLabel(input.postgresIndexBytes)}`\n : undefined,\n typeof input?.postgresIndexStorageRatio === \"number\"\n ? `index share ${(input.postgresIndexStorageRatio * 100).toFixed(0)}%`\n : undefined,\n input?.postgresQueryPushdownMode\n ? `pushdown ${input.postgresQueryPushdownMode}`\n : undefined,\n typeof input?.postgresQueryPushdownApplied === \"boolean\"\n ? input.postgresQueryPushdownApplied\n ? \"pushdown on\"\n : \"pushdown off\"\n : undefined,\n typeof input?.postgresQueryPushdownClauseCount === \"number\"\n ? `clauses ${input.postgresQueryPushdownClauseCount}`\n : undefined,\n typeof input?.postgresQueryPushdownCoverageRatio === \"number\"\n ? `pushdown ${(input.postgresQueryPushdownCoverageRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.postgresQueryJsRemainderClauseCount === \"number\"\n ? `js remainder ${input.postgresQueryJsRemainderClauseCount}`\n : undefined,\n input?.postgresQueryPlannerProfileUsed\n ? `profile ${input.postgresQueryPlannerProfileUsed}`\n : undefined,\n typeof input?.postgresQueryMultiplierUsed === \"number\"\n ? `x${input.postgresQueryMultiplierUsed}`\n : undefined,\n typeof input?.postgresQueryCandidateLimitUsed === \"number\"\n ? `cap ${input.postgresQueryCandidateLimitUsed}`\n : undefined,\n typeof input?.postgresQueryMaxBackfillsUsed === \"number\"\n ? `backfills ${input.postgresQueryMaxBackfillsUsed}`\n : undefined,\n typeof input?.postgresQueryMinResultsUsed === \"number\"\n ? `min ${input.postgresQueryMinResultsUsed}`\n : undefined,\n input?.postgresQueryFillPolicyUsed\n ? `fill ${input.postgresQueryFillPolicyUsed}`\n : undefined,\n typeof input?.postgresQueryJsRemainderRatio === \"number\"\n ? `js ${(input.postgresQueryJsRemainderRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.postgresQueryTotalFilterClauseCount === \"number\"\n ? `total clauses ${input.postgresQueryTotalFilterClauseCount}`\n : undefined,\n typeof input?.postgresQueryFilteredCandidates === \"number\"\n ? `filtered ${input.postgresQueryFilteredCandidates}`\n : undefined,\n typeof input?.postgresQueryInitialSearchK === \"number\" &&\n typeof input?.postgresQueryFinalSearchK === \"number\"\n ? `searchK ${input.postgresQueryInitialSearchK}->${input.postgresQueryFinalSearchK}`\n : typeof input?.postgresQueryFinalSearchK === \"number\"\n ? `searchK ${input.postgresQueryFinalSearchK}`\n : undefined,\n typeof input?.postgresQuerySearchExpansionRatio === \"number\"\n ? `expand ${(input.postgresQuerySearchExpansionRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.postgresQueryBackfillCount === \"number\"\n ? `backfill ${input.postgresQueryBackfillCount}`\n : undefined,\n typeof input?.postgresQueryBackfillLimitReached === \"boolean\" &&\n input.postgresQueryBackfillLimitReached\n ? \"backfill limit reached\"\n : undefined,\n typeof input?.postgresQueryMinResultsSatisfied === \"boolean\" &&\n input.postgresQueryMinResultsSatisfied\n ? \"min satisfied\"\n : undefined,\n typeof input?.postgresQueryReturnedCount === \"number\"\n ? `returned ${input.postgresQueryReturnedCount}`\n : undefined,\n typeof input?.postgresQueryCandidateYieldRatio === \"number\"\n ? `yield ${(input.postgresQueryCandidateYieldRatio * 100).toFixed(0)}%`\n : undefined,\n typeof input?.postgresQueryTopKFillRatio === \"number\"\n ? `fill ${(input.postgresQueryTopKFillRatio * 100).toFixed(0)}%`\n : undefined,\n input?.postgresQueryCandidateCoverage\n ? `coverage ${input.postgresQueryCandidateCoverage}`\n : undefined,\n typeof input?.postgresQueryUnderfilledTopK === \"boolean\" &&\n input.postgresQueryUnderfilledTopK\n ? \"underfilled topK\"\n : undefined,\n typeof input?.postgresQueryCandidateBudgetExhausted === \"boolean\" &&\n input.postgresQueryCandidateBudgetExhausted\n ? \"budget exhausted\"\n : undefined,\n plannerJudgment,\n healthJudgment,\n ].filter((value): value is string => typeof value === \"string\");\n\n return parts.length > 0 ? parts.join(\" · \") : \"none\";\n};\n\nconst formatComparisonSQLitePlannerCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const labels = Array.from(\n new Set(\n (entry.caseTraceSnapshots ?? [])\n .map((snapshot) =>\n formatSQLitePlannerCueSummary({\n sqliteQueryBackfillCount: snapshot.sqliteQueryBackfillCount,\n sqliteQueryCandidateBudgetExhausted:\n snapshot.sqliteQueryCandidateBudgetExhausted,\n sqliteQueryCandidateCoverage: snapshot.sqliteQueryCandidateCoverage,\n sqliteQueryFilteredCandidates:\n snapshot.sqliteQueryFilteredCandidates,\n sqliteQueryFinalSearchK: snapshot.sqliteQueryFinalSearchK,\n sqliteQueryInitialSearchK: snapshot.sqliteQueryInitialSearchK,\n sqliteQuerySearchExpansionRatio:\n snapshot.sqliteQuerySearchExpansionRatio,\n sqliteQueryJsRemainderClauseCount:\n snapshot.sqliteQueryJsRemainderClauseCount,\n sqliteQueryCandidateLimitUsed:\n snapshot.sqliteQueryCandidateLimitUsed,\n sqliteQueryMaxBackfillsUsed: snapshot.sqliteQueryMaxBackfillsUsed,\n sqliteQueryMinResultsUsed: snapshot.sqliteQueryMinResultsUsed,\n sqliteQueryFillPolicyUsed: snapshot.sqliteQueryFillPolicyUsed,\n sqliteQueryMode: snapshot.sqliteQueryMode,\n sqliteQueryPushdownApplied: snapshot.sqliteQueryPushdownApplied,\n sqliteQueryPushdownClauseCount:\n snapshot.sqliteQueryPushdownClauseCount,\n sqliteQueryPushdownCoverageRatio:\n snapshot.sqliteQueryPushdownCoverageRatio,\n sqliteQueryPushdownMode: snapshot.sqliteQueryPushdownMode,\n sqliteQueryTotalFilterClauseCount:\n snapshot.sqliteQueryTotalFilterClauseCount,\n sqliteQueryReturnedCount: snapshot.sqliteQueryReturnedCount,\n sqliteQueryBackfillLimitReached:\n snapshot.sqliteQueryBackfillLimitReached,\n sqliteQueryMinResultsSatisfied:\n snapshot.sqliteQueryMinResultsSatisfied,\n sqliteQueryCandidateYieldRatio:\n snapshot.sqliteQueryCandidateYieldRatio,\n sqliteQueryTopKFillRatio: snapshot.sqliteQueryTopKFillRatio,\n sqliteQueryJsRemainderRatio: snapshot.sqliteQueryJsRemainderRatio,\n sqliteQueryUnderfilledTopK: snapshot.sqliteQueryUnderfilledTopK,\n }),\n )\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value !== \"none\",\n ),\n ),\n ).slice(0, 3);\n\n return labels.length > 0 ? labels.join(\" · \") : \"none\";\n};\n\nconst formatComparisonPostgresPlannerCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const labels = Array.from(\n new Set(\n (entry.caseTraceSnapshots ?? [])\n .map((snapshot) =>\n formatPostgresPlannerCueSummary({\n postgresQueryBackfillCount: snapshot.postgresQueryBackfillCount,\n postgresQueryCandidateBudgetExhausted:\n snapshot.postgresQueryCandidateBudgetExhausted,\n postgresQueryCandidateCoverage:\n snapshot.postgresQueryCandidateCoverage,\n postgresQueryFilteredCandidates:\n snapshot.postgresQueryFilteredCandidates,\n postgresQueryFinalSearchK: snapshot.postgresQueryFinalSearchK,\n postgresQueryInitialSearchK: snapshot.postgresQueryInitialSearchK,\n postgresQuerySearchExpansionRatio:\n snapshot.postgresQuerySearchExpansionRatio,\n postgresQueryJsRemainderClauseCount:\n snapshot.postgresQueryJsRemainderClauseCount,\n postgresQueryCandidateLimitUsed:\n snapshot.postgresQueryCandidateLimitUsed,\n postgresQueryMaxBackfillsUsed:\n snapshot.postgresQueryMaxBackfillsUsed,\n postgresQueryMinResultsUsed: snapshot.postgresQueryMinResultsUsed,\n postgresQueryFillPolicyUsed: snapshot.postgresQueryFillPolicyUsed,\n postgresQueryMultiplierUsed: snapshot.postgresQueryMultiplierUsed,\n postgresQueryMode: snapshot.postgresQueryMode,\n postgresQueryPushdownApplied: snapshot.postgresQueryPushdownApplied,\n postgresQueryPushdownClauseCount:\n snapshot.postgresQueryPushdownClauseCount,\n postgresQueryPushdownCoverageRatio:\n snapshot.postgresQueryPushdownCoverageRatio,\n postgresQueryPushdownMode: snapshot.postgresQueryPushdownMode,\n postgresQueryTotalFilterClauseCount:\n snapshot.postgresQueryTotalFilterClauseCount,\n postgresQueryReturnedCount: snapshot.postgresQueryReturnedCount,\n postgresQueryBackfillLimitReached:\n snapshot.postgresQueryBackfillLimitReached,\n postgresQueryMinResultsSatisfied:\n snapshot.postgresQueryMinResultsSatisfied,\n postgresQueryCandidateYieldRatio:\n snapshot.postgresQueryCandidateYieldRatio,\n postgresQueryTopKFillRatio: snapshot.postgresQueryTopKFillRatio,\n postgresQueryJsRemainderRatio:\n snapshot.postgresQueryJsRemainderRatio,\n postgresEstimatedRowCount: snapshot.postgresEstimatedRowCount,\n postgresIndexBytes: snapshot.postgresIndexBytes,\n postgresIndexName: snapshot.postgresIndexName,\n postgresIndexPresent: snapshot.postgresIndexPresent,\n postgresIndexStorageRatio: snapshot.postgresIndexStorageRatio,\n postgresIndexType: snapshot.postgresIndexType,\n postgresTableBytes: snapshot.postgresTableBytes,\n postgresTotalBytes: snapshot.postgresTotalBytes,\n postgresQueryUnderfilledTopK: snapshot.postgresQueryUnderfilledTopK,\n }),\n )\n .filter(\n (value): value is string =>\n typeof value === \"string\" && value !== \"none\",\n ),\n ),\n ).slice(0, 3);\n\n return labels.length > 0 ? labels.join(\" · \") : \"none\";\n};\n\nconst formatComparisonLeadDrift = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n if (\n !leader?.caseTraceSnapshots?.length ||\n !entry.caseTraceSnapshots?.length\n ) {\n return \"none\";\n }\n\n const leaderCases = new Map(\n leader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot]),\n );\n\n const drift = entry.caseTraceSnapshots\n .map((snapshot) => {\n const leaderSnapshot = leaderCases.get(snapshot.caseId);\n const currentLead = buildComparisonCaseLeadLabel(snapshot);\n const leaderLead = buildComparisonCaseLeadLabel(leaderSnapshot);\n if (!currentLead || !leaderLead || currentLead === leaderLead) {\n return undefined;\n }\n\n return `${snapshot.label ?? snapshot.caseId} ${leaderLead}→${currentLead}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return drift.length > 0 ? drift.join(\" · \") : \"none\";\n};\n\nconst formatComparisonLeadMediaDrift = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n if (\n !leader?.caseTraceSnapshots?.length ||\n !entry.caseTraceSnapshots?.length\n ) {\n return \"none\";\n }\n\n const leaderCases = new Map(\n leader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot]),\n );\n\n const drift = entry.caseTraceSnapshots\n .map((snapshot) => {\n const leaderSnapshot = leaderCases.get(snapshot.caseId);\n const currentMediaCues = formatLeadMediaCueSummary({\n leadSpeakerCue: snapshot.leadSpeakerCue,\n leadSpeakerAttributionCue: snapshot.leadSpeakerAttributionCue,\n leadChannelCue: snapshot.leadChannelCue,\n leadChannelAttributionCue: snapshot.leadChannelAttributionCue,\n leadContinuityCue: snapshot.leadContinuityCue,\n });\n const leaderMediaCues = formatLeadMediaCueSummary({\n leadSpeakerCue: leaderSnapshot?.leadSpeakerCue,\n leadSpeakerAttributionCue: leaderSnapshot?.leadSpeakerAttributionCue,\n leadChannelCue: leaderSnapshot?.leadChannelCue,\n leadChannelAttributionCue: leaderSnapshot?.leadChannelAttributionCue,\n leadContinuityCue: leaderSnapshot?.leadContinuityCue,\n });\n if (\n currentMediaCues === \"none\" ||\n leaderMediaCues === \"none\" ||\n currentMediaCues === leaderMediaCues\n ) {\n return undefined;\n }\n\n return `${snapshot.label ?? snapshot.caseId} ${leaderMediaCues}→${currentMediaCues}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return drift.length > 0 ? drift.join(\" · \") : \"none\";\n};\n\nconst formatComparisonSQLitePlannerDrift = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n if (\n !leader?.caseTraceSnapshots?.length ||\n !entry.caseTraceSnapshots?.length\n ) {\n return \"none\";\n }\n\n const leaderCases = new Map(\n leader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot]),\n );\n\n const drift = entry.caseTraceSnapshots\n .map((snapshot) => {\n const leaderSnapshot = leaderCases.get(snapshot.caseId);\n const currentPlanner = formatSQLitePlannerCueSummary(snapshot);\n const leaderPlanner = formatSQLitePlannerCueSummary(leaderSnapshot);\n if (\n currentPlanner === \"none\" ||\n leaderPlanner === \"none\" ||\n currentPlanner === leaderPlanner\n ) {\n return undefined;\n }\n\n return `${snapshot.label ?? snapshot.caseId} ${leaderPlanner}→${currentPlanner}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return drift.length > 0 ? drift.join(\" · \") : \"none\";\n};\n\nconst formatComparisonPostgresPlannerDrift = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n if (\n !leader?.caseTraceSnapshots?.length ||\n !entry.caseTraceSnapshots?.length\n ) {\n return \"none\";\n }\n\n const leaderCases = new Map(\n leader.caseTraceSnapshots.map((snapshot) => [snapshot.caseId, snapshot]),\n );\n\n const drift = entry.caseTraceSnapshots\n .map((snapshot) => {\n const leaderSnapshot = leaderCases.get(snapshot.caseId);\n const currentPlanner = formatPostgresPlannerCueSummary(snapshot);\n const leaderPlanner = formatPostgresPlannerCueSummary(leaderSnapshot);\n if (\n currentPlanner === \"none\" ||\n leaderPlanner === \"none\" ||\n currentPlanner === leaderPlanner\n ) {\n return undefined;\n }\n\n return `${snapshot.label ?? snapshot.caseId} ${leaderPlanner}→${currentPlanner}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return drift.length > 0 ? drift.join(\" · \") : \"none\";\n};\n\nconst formatComparisonRoutingCueSummary = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const trace = entry.traceSummary;\n if (!trace) {\n return \"none\";\n }\n\n const parts = [\n `modes ${formatTraceModes(trace.modes)}`,\n `balance ${formatSourceBalanceStrategies(trace.sourceBalanceStrategies)}`,\n `rewrites ${formatTraceRatio(trace.transformedCases, trace.totalCases)}`,\n `variants ${formatTraceRatio(trace.variantCases, trace.totalCases)}`,\n ].filter((value) => !value.endsWith(\"n/a\"));\n\n return parts.length > 0 ? parts.join(\" · \") : \"none\";\n};\n\nconst formatComparisonRoutingDrift = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n) => {\n const trace = entry.traceSummary;\n const leaderTrace = leader?.traceSummary;\n if (!trace || !leaderTrace || entry === leader) {\n return \"none\";\n }\n\n const deltas: string[] = [];\n const currentModes = formatTraceModes(trace.modes);\n const previousModes = formatTraceModes(leaderTrace.modes);\n if (currentModes !== previousModes) {\n deltas.push(`modes ${previousModes}→${currentModes}`);\n }\n\n const currentBalance = formatSourceBalanceStrategies(\n trace.sourceBalanceStrategies,\n );\n const previousBalance = formatSourceBalanceStrategies(\n leaderTrace.sourceBalanceStrategies,\n );\n if (currentBalance !== previousBalance) {\n deltas.push(`balance ${previousBalance}→${currentBalance}`);\n }\n\n const transformedDelta =\n trace.transformedCases - leaderTrace.transformedCases;\n if (transformedDelta !== 0) {\n deltas.push(`rewrites ${formatTraceCountDelta(transformedDelta)}`);\n }\n\n const variantDelta = trace.variantCases - leaderTrace.variantCases;\n if (variantDelta !== 0) {\n deltas.push(`variants ${formatTraceCountDelta(variantDelta)}`);\n }\n\n return deltas.length > 0 ? deltas.slice(0, 3).join(\" · \") : \"none\";\n};\n\nconst formatHistoryRoutingShift = (history?: RAGEvaluationHistory) => {\n const delta = history?.diff?.traceSummaryDelta;\n if (!delta) {\n return \"none\";\n }\n\n const shifts: string[] = [];\n if (delta.modesChanged) {\n shifts.push(\"modes changed\");\n }\n if (delta.sourceBalanceStrategiesChanged) {\n shifts.push(\"balance changed\");\n }\n if (delta.transformedCases !== 0) {\n shifts.push(`rewrites ${formatTraceCountDelta(delta.transformedCases)}`);\n }\n if (delta.variantCases !== 0) {\n shifts.push(`variants ${formatTraceCountDelta(delta.variantCases)}`);\n }\n\n return shifts.length > 0 ? shifts.join(\" · \") : \"none\";\n};\n\nconst formatHistorySQLitePlannerShift = (history?: RAGEvaluationHistory) => {\n if (!history?.caseTraceSnapshots.length) {\n return \"none\";\n }\n\n const shifts = history.caseTraceSnapshots\n .map((entry) => {\n const previousPlanner = formatSQLitePlannerCueSummary({\n sqliteQueryBackfillCount: entry.previousSqliteQueryBackfillCount,\n sqliteQueryCandidateBudgetExhausted:\n entry.previousSqliteQueryCandidateBudgetExhausted,\n sqliteQueryCandidateCoverage:\n entry.previousSqliteQueryCandidateCoverage,\n sqliteQueryFilteredCandidates:\n entry.previousSqliteQueryFilteredCandidates,\n sqliteQueryFinalSearchK: entry.previousSqliteQueryFinalSearchK,\n sqliteQueryInitialSearchK: entry.previousSqliteQueryInitialSearchK,\n sqliteQuerySearchExpansionRatio:\n entry.previousSqliteQuerySearchExpansionRatio,\n sqliteQueryJsRemainderClauseCount:\n entry.previousSqliteQueryJsRemainderClauseCount,\n sqliteQueryCandidateLimitUsed:\n entry.previousSqliteQueryCandidateLimitUsed,\n sqliteQueryMaxBackfillsUsed: entry.previousSqliteQueryMaxBackfillsUsed,\n sqliteQueryMinResultsUsed: entry.previousSqliteQueryMinResultsUsed,\n sqliteQueryFillPolicyUsed: entry.previousSqliteQueryFillPolicyUsed,\n sqliteQueryMode: entry.previousSqliteQueryMode,\n sqliteQueryPushdownApplied: entry.previousSqliteQueryPushdownApplied,\n sqliteQueryPushdownClauseCount:\n entry.previousSqliteQueryPushdownClauseCount,\n sqliteQueryPushdownCoverageRatio:\n entry.previousSqliteQueryPushdownCoverageRatio,\n sqliteQueryPushdownMode: entry.previousSqliteQueryPushdownMode,\n sqliteQueryTotalFilterClauseCount:\n entry.previousSqliteQueryTotalFilterClauseCount,\n sqliteQueryJsRemainderRatio: entry.previousSqliteQueryJsRemainderRatio,\n sqliteQueryReturnedCount: entry.previousSqliteQueryReturnedCount,\n sqliteQueryBackfillLimitReached:\n entry.previousSqliteQueryBackfillLimitReached,\n sqliteQueryMinResultsSatisfied:\n entry.previousSqliteQueryMinResultsSatisfied,\n sqliteQueryCandidateYieldRatio:\n entry.previousSqliteQueryCandidateYieldRatio,\n sqliteQueryTopKFillRatio: entry.previousSqliteQueryTopKFillRatio,\n sqliteQueryUnderfilledTopK: entry.previousSqliteQueryUnderfilledTopK,\n });\n const currentPlanner = formatSQLitePlannerCueSummary(entry);\n\n if (\n previousPlanner === \"none\" ||\n currentPlanner === \"none\" ||\n previousPlanner === currentPlanner\n ) {\n return undefined;\n }\n\n return `${entry.label ?? entry.caseId} ${previousPlanner}→${currentPlanner}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return shifts.length > 0 ? shifts.join(\" · \") : \"none\";\n};\n\nconst formatHistoryPostgresPlannerShift = (history?: RAGEvaluationHistory) => {\n if (!history?.caseTraceSnapshots.length) {\n return \"none\";\n }\n\n const shifts = history.caseTraceSnapshots\n .map((entry) => {\n const previousPlanner = formatPostgresPlannerCueSummary({\n postgresQueryBackfillCount: entry.previousPostgresQueryBackfillCount,\n postgresQueryCandidateBudgetExhausted:\n entry.previousPostgresQueryCandidateBudgetExhausted,\n postgresQueryCandidateCoverage:\n entry.previousPostgresQueryCandidateCoverage,\n postgresQueryFilteredCandidates:\n entry.previousPostgresQueryFilteredCandidates,\n postgresQueryFinalSearchK: entry.previousPostgresQueryFinalSearchK,\n postgresQueryInitialSearchK: entry.previousPostgresQueryInitialSearchK,\n postgresQuerySearchExpansionRatio:\n entry.previousPostgresQuerySearchExpansionRatio,\n postgresQueryJsRemainderClauseCount:\n entry.previousPostgresQueryJsRemainderClauseCount,\n postgresQueryCandidateLimitUsed:\n entry.previousPostgresQueryCandidateLimitUsed,\n postgresQueryMaxBackfillsUsed:\n entry.previousPostgresQueryMaxBackfillsUsed,\n postgresQueryMinResultsUsed: entry.previousPostgresQueryMinResultsUsed,\n postgresQueryFillPolicyUsed: entry.previousPostgresQueryFillPolicyUsed,\n postgresQueryMultiplierUsed: entry.previousPostgresQueryMultiplierUsed,\n postgresQueryMode: entry.previousPostgresQueryMode,\n postgresQueryPushdownApplied:\n entry.previousPostgresQueryPushdownApplied,\n postgresQueryPushdownClauseCount:\n entry.previousPostgresQueryPushdownClauseCount,\n postgresQueryPushdownCoverageRatio:\n entry.previousPostgresQueryPushdownCoverageRatio,\n postgresQueryPushdownMode: entry.previousPostgresQueryPushdownMode,\n postgresQueryTotalFilterClauseCount:\n entry.previousPostgresQueryTotalFilterClauseCount,\n postgresQueryJsRemainderRatio:\n entry.previousPostgresQueryJsRemainderRatio,\n postgresQueryReturnedCount: entry.previousPostgresQueryReturnedCount,\n postgresQueryBackfillLimitReached:\n entry.previousPostgresQueryBackfillLimitReached,\n postgresQueryMinResultsSatisfied:\n entry.previousPostgresQueryMinResultsSatisfied,\n postgresQueryCandidateYieldRatio:\n entry.previousPostgresQueryCandidateYieldRatio,\n postgresQueryTopKFillRatio: entry.previousPostgresQueryTopKFillRatio,\n postgresQueryUnderfilledTopK:\n entry.previousPostgresQueryUnderfilledTopK,\n });\n const currentPlanner = formatPostgresPlannerCueSummary(entry);\n if (\n previousPlanner === \"none\" ||\n currentPlanner === \"none\" ||\n previousPlanner === currentPlanner\n ) {\n return undefined;\n }\n\n return `${entry.label ?? entry.caseId} ${previousPlanner}→${currentPlanner}`;\n })\n .filter((value): value is string => typeof value === \"string\")\n .slice(0, 3);\n\n return shifts.length > 0 ? shifts.join(\" · \") : \"none\";\n};\n\nconst formatTraceLeadChanges = (\n changes?: Array<{\n caseId: string;\n label?: string;\n previousLead?: string;\n currentLead: string;\n }>,\n) =>\n changes && changes.length > 0\n ? changes\n .slice(0, 3)\n .map((entry) => {\n const label = entry.label ?? entry.caseId;\n const previousLead = entry.previousLead ?? \"n/a\";\n return `${label} ${previousLead}→${entry.currentLead}`;\n })\n .join(\" · \")\n : \"none\";\n\nconst formatGroundingHistoryCaseLabels = (\n cases: RAGAnswerGroundingEvaluationCaseDiff[],\n) =>\n cases.length > 0\n ? cases.map((entry) => entry.label ?? entry.caseId).join(\", \")\n : \"none\";\n\nconst formatRerankerComparisonHeadline = (entry: RAGRerankerComparisonEntry) =>\n [\n entry.label,\n `passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n `f1 ${entry.response.summary.averageF1.toFixed(3)}`,\n `latency ${entry.response.summary.averageLatencyMs.toFixed(1)}ms`,\n ].join(\" · \");\n\nconst formatRetrievalComparisonHeadline = (\n entry: RAGRetrievalComparisonEntry,\n) =>\n [\n entry.label,\n `mode ${entry.retrievalMode}`,\n `passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n `f1 ${entry.response.summary.averageF1.toFixed(3)}`,\n `latency ${entry.response.summary.averageLatencyMs.toFixed(1)}ms`,\n ].join(\" · \");\n\nconst formatTraceModes = (modes: RAGHybridRetrievalMode[]) =>\n modes.length > 0 ? modes.join(\" / \") : \"n/a\";\n\nconst formatSourceBalanceStrategies = (\n strategies: RAGSourceBalanceStrategy[],\n) => (strategies.length > 0 ? strategies.join(\" / \") : \"n/a\");\n\nconst formatTraceStageSummary = (\n stageCounts: Partial<\n Record<RAGRetrievalTrace[\"steps\"][number][\"stage\"], number>\n >,\n) => {\n const topStages = Object.entries(stageCounts)\n .sort((left, right) => right[1] - left[1])\n .slice(0, 3);\n\n return topStages.length > 0\n ? topStages.map(([stage, count]) => `${stage} ${count}`).join(\" · \")\n : \"n/a\";\n};\n\nconst formatTraceRatio = (count: number, total: number) => `${count}/${total}`;\n\nconst formatTraceCountDelta = (value: number) =>\n `${value >= 0 ? \"+\" : \"\"}${value}`;\n\nconst buildComparisonOverviewPresentation = <\n TEntry extends {\n label: string;\n response: {\n passingRate: number;\n summary: {\n averageF1: number;\n averageLatencyMs: number;\n };\n };\n },\n>(input: {\n entries: TEntry[];\n summary: {\n bestByPassingRate?: string;\n bestByAverageF1?: string;\n fastest?: string;\n bestByPresentationTitleCueCases?: string;\n bestByPresentationBodyCueCases?: string;\n bestByPresentationNotesCueCases?: string;\n bestBySpreadsheetSheetCueCases?: string;\n bestBySpreadsheetTableCueCases?: string;\n bestBySpreadsheetColumnCueCases?: string;\n bestByMultivectorCollapsedCases?: string;\n bestByMultivectorLexicalHitCases?: string;\n bestByMultivectorVectorHitCases?: string;\n bestByEvidenceReconcileCases?: string;\n bestByOfficeEvidenceReconcileCases?: string;\n bestByOfficeParagraphEvidenceReconcileCases?: string;\n bestByOfficeListEvidenceReconcileCases?: string;\n bestByOfficeTableEvidenceReconcileCases?: string;\n bestByPDFEvidenceReconcileCases?: string;\n bestByLowestRuntimeCandidateBudgetExhaustedCases?: string;\n bestByLowestRuntimeUnderfilledTopKCases?: string;\n };\n resolveLabel: (id?: string) => string;\n resolveEntry: (id?: string) => TEntry | undefined;\n}): RAGComparisonOverviewPresentation => {\n const winnerLabel = input.resolveLabel(input.summary.bestByPassingRate);\n const winnerEntry = input.resolveEntry(input.summary.bestByPassingRate);\n const rows: RAGLabelValueRow[] = [\n {\n label: \"Best passing rate\",\n value: input.resolveLabel(input.summary.bestByPassingRate),\n },\n {\n label: \"Best average F1\",\n value: input.resolveLabel(input.summary.bestByAverageF1),\n },\n {\n label: \"Fastest\",\n value: input.resolveLabel(input.summary.fastest),\n },\n ];\n\n if (input.summary.bestByMultivectorCollapsedCases) {\n rows.push({\n label: \"Best multivector collapse\",\n value: input.resolveLabel(input.summary.bestByMultivectorCollapsedCases),\n });\n }\n if (input.summary.bestByMultivectorLexicalHitCases) {\n rows.push({\n label: \"Best multivector lexical hits\",\n value: input.resolveLabel(input.summary.bestByMultivectorLexicalHitCases),\n });\n }\n if (input.summary.bestByMultivectorVectorHitCases) {\n rows.push({\n label: \"Best multivector vector hits\",\n value: input.resolveLabel(input.summary.bestByMultivectorVectorHitCases),\n });\n }\n if (input.summary.bestByEvidenceReconcileCases) {\n rows.push({\n label: \"Best evidence reconcile\",\n value: input.resolveLabel(input.summary.bestByEvidenceReconcileCases),\n });\n }\n if (input.summary.bestByPresentationTitleCueCases) {\n rows.push({\n label: \"Best presentation title cue\",\n value: input.resolveLabel(input.summary.bestByPresentationTitleCueCases),\n });\n }\n if (input.summary.bestByPresentationBodyCueCases) {\n rows.push({\n label: \"Best presentation body cue\",\n value: input.resolveLabel(input.summary.bestByPresentationBodyCueCases),\n });\n }\n if (input.summary.bestByPresentationNotesCueCases) {\n rows.push({\n label: \"Best presentation notes cue\",\n value: input.resolveLabel(input.summary.bestByPresentationNotesCueCases),\n });\n }\n if (input.summary.bestBySpreadsheetSheetCueCases) {\n rows.push({\n label: \"Best spreadsheet sheet cue\",\n value: input.resolveLabel(input.summary.bestBySpreadsheetSheetCueCases),\n });\n }\n if (input.summary.bestBySpreadsheetTableCueCases) {\n rows.push({\n label: \"Best spreadsheet table cue\",\n value: input.resolveLabel(input.summary.bestBySpreadsheetTableCueCases),\n });\n }\n if (input.summary.bestBySpreadsheetColumnCueCases) {\n rows.push({\n label: \"Best spreadsheet column cue\",\n value: input.resolveLabel(input.summary.bestBySpreadsheetColumnCueCases),\n });\n }\n if (input.summary.bestByOfficeEvidenceReconcileCases) {\n rows.push({\n label: \"Best office structure reconcile (docx/xlsx/pptx)\",\n value: input.resolveLabel(\n input.summary.bestByOfficeEvidenceReconcileCases,\n ),\n });\n }\n if (input.summary.bestByOfficeParagraphEvidenceReconcileCases) {\n rows.push({\n label: \"Best office narrative reconcile\",\n value: input.resolveLabel(\n input.summary.bestByOfficeParagraphEvidenceReconcileCases,\n ),\n });\n }\n if (input.summary.bestByOfficeListEvidenceReconcileCases) {\n rows.push({\n label: \"Best office checklist reconcile\",\n value: input.resolveLabel(\n input.summary.bestByOfficeListEvidenceReconcileCases,\n ),\n });\n }\n if (input.summary.bestByOfficeTableEvidenceReconcileCases) {\n rows.push({\n label: \"Best office table reconcile\",\n value: input.resolveLabel(\n input.summary.bestByOfficeTableEvidenceReconcileCases,\n ),\n });\n }\n if (input.summary.bestByPDFEvidenceReconcileCases) {\n rows.push({\n label: \"Best PDF native evidence\",\n value: input.resolveLabel(input.summary.bestByPDFEvidenceReconcileCases),\n });\n }\n if (input.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases) {\n rows.push({\n label: \"Lowest runtime budget exhaustion\",\n value: input.resolveLabel(\n input.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases,\n ),\n });\n }\n if (input.summary.bestByLowestRuntimeUnderfilledTopKCases) {\n rows.push({\n label: \"Lowest runtime underfilled TopK\",\n value: input.resolveLabel(\n input.summary.bestByLowestRuntimeUnderfilledTopKCases,\n ),\n });\n }\n\n return {\n rows,\n winnerLabel,\n summary: winnerEntry\n ? `passing ${formatEvaluationPassingRate(winnerEntry.response.passingRate)} · f1 ${winnerEntry.response.summary.averageF1.toFixed(3)} · latency ${winnerEntry.response.summary.averageLatencyMs.toFixed(1)}ms`\n : \"Stored benchmark comparison\",\n };\n};\n\nexport const buildRAGComparisonTraceSummaryRows = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n): RAGLabelValueRow[] => {\n const trace = entry.traceSummary;\n const rows: RAGLabelValueRow[] = [\n {\n label: \"Lead cues\",\n value: formatComparisonLeadCueSummary(entry),\n },\n {\n label: \"Lead media cues\",\n value: formatComparisonLeadMediaCueSummary(entry),\n },\n {\n label: \"Presentation cues\",\n value: formatComparisonPresentationCueSummary(entry),\n },\n {\n label: \"SQLite planner cues\",\n value: formatComparisonSQLitePlannerCueSummary(entry),\n },\n {\n label: \"Postgres planner cues\",\n value: formatComparisonPostgresPlannerCueSummary(entry),\n },\n {\n label: \"Routing cues\",\n value: formatComparisonRoutingCueSummary(entry),\n },\n ];\n\n if (!trace) {\n rows.unshift({ label: \"Trace\", value: \"Unavailable\" });\n return rows;\n }\n\n rows.push(\n { label: \"Modes\", value: formatTraceModes(trace.modes) },\n {\n label: \"Balance\",\n value: formatSourceBalanceStrategies(trace.sourceBalanceStrategies),\n },\n { label: \"Avg final\", value: trace.averageFinalCount.toFixed(1) },\n { label: \"Avg vector\", value: trace.averageVectorCount.toFixed(1) },\n { label: \"Avg lexical\", value: trace.averageLexicalCount.toFixed(1) },\n {\n label: \"Balanced\",\n value: formatTraceRatio(trace.balancedCases, trace.totalCases),\n },\n {\n label: \"Round robin\",\n value: formatTraceRatio(trace.roundRobinCases, trace.totalCases),\n },\n {\n label: \"Transforms\",\n value: formatTraceRatio(trace.transformedCases, trace.totalCases),\n },\n {\n label: \"Variants\",\n value: formatTraceRatio(trace.variantCases, trace.totalCases),\n },\n {\n label: \"Multivector\",\n value: `${formatTraceRatio(\n trace.multiVectorCases,\n trace.totalCases,\n )} · collapse ${formatTraceRatio(\n trace.multiVectorCollapsedCases,\n trace.totalCases,\n )} · lexical ${formatTraceRatio(\n trace.multiVectorLexicalHitCases,\n trace.totalCases,\n )} · vector ${formatTraceRatio(\n trace.multiVectorVectorHitCases,\n trace.totalCases,\n )}`,\n },\n {\n label: \"Runtime\",\n value: `budget ${formatTraceRatio(\n trace.runtimeCandidateBudgetExhaustedCases,\n trace.totalCases,\n )} · underfilled ${formatTraceRatio(\n trace.runtimeUnderfilledTopKCases,\n trace.totalCases,\n )}`,\n },\n {\n label: \"Evidence reconcile (office/pdf)\",\n value: `all ${formatTraceRatio(\n trace.stageCounts.evidence_reconcile ?? 0,\n trace.totalCases,\n )} · office structure ${formatTraceRatio(\n trace.officeEvidenceReconcileCases,\n trace.totalCases,\n )} · narrative ${formatTraceRatio(\n trace.officeParagraphEvidenceReconcileCases ?? 0,\n trace.totalCases,\n )} · checklist ${formatTraceRatio(\n trace.officeListEvidenceReconcileCases ?? 0,\n trace.totalCases,\n )} · table ${formatTraceRatio(\n trace.officeTableEvidenceReconcileCases ?? 0,\n trace.totalCases,\n )} · pdf native ${formatTraceRatio(\n trace.pdfEvidenceReconcileCases,\n trace.totalCases,\n )}`,\n },\n {\n label: \"TopK\",\n value: `${trace.averageCandidateTopK.toFixed(\n 1,\n )} / ${trace.averageLexicalTopK.toFixed(1)}`,\n },\n {\n label: \"Stages\",\n value: formatTraceStageSummary(trace.stageCounts),\n },\n );\n\n return rows;\n};\n\nexport const buildRAGComparisonTraceDiffRows = (\n entry: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n leader?: RAGRerankerComparisonEntry | RAGRetrievalComparisonEntry,\n): RAGLabelValueRow[] => {\n const trace = entry.traceSummary;\n const leadDriftRow = {\n label: \"Lead drift vs leader\",\n value: formatComparisonLeadDrift(entry, leader),\n } satisfies RAGLabelValueRow;\n const leadMediaDriftRow = {\n label: \"Lead media shift vs leader\",\n value: formatComparisonLeadMediaDrift(entry, leader),\n } satisfies RAGLabelValueRow;\n const sqlitePlannerDriftRow = {\n label: \"SQLite planner shift vs leader\",\n value: formatComparisonSQLitePlannerDrift(entry, leader),\n } satisfies RAGLabelValueRow;\n const postgresPlannerDriftRow = {\n label: \"Postgres planner shift vs leader\",\n value: formatComparisonPostgresPlannerDrift(entry, leader),\n } satisfies RAGLabelValueRow;\n const routingDriftRow = {\n label: \"Routing shift vs leader\",\n value: formatComparisonRoutingDrift(entry, leader),\n } satisfies RAGLabelValueRow;\n\n if (!trace) {\n return [\n { label: \"Trace\", value: \"Unavailable for comparison\" },\n leadDriftRow,\n leadMediaDriftRow,\n sqlitePlannerDriftRow,\n postgresPlannerDriftRow,\n routingDriftRow,\n ];\n }\n\n const leaderTrace = leader?.traceSummary;\n if (!leaderTrace) {\n return [\n { label: \"Baseline\", value: \"Leader trace unavailable\" },\n leadDriftRow,\n leadMediaDriftRow,\n sqlitePlannerDriftRow,\n postgresPlannerDriftRow,\n routingDriftRow,\n ];\n }\n\n if (entry === leader) {\n return [\n { label: \"Baseline\", value: \"Leader strategy\" },\n leadDriftRow,\n leadMediaDriftRow,\n sqlitePlannerDriftRow,\n postgresPlannerDriftRow,\n routingDriftRow,\n ];\n }\n\n const stageDelta = Object.keys({\n ...leaderTrace.stageCounts,\n ...trace.stageCounts,\n })\n .map((stage) => {\n const typedStage = stage as RAGRetrievalTraceStep[\"stage\"];\n const delta =\n (trace.stageCounts[typedStage] ?? 0) -\n (leaderTrace.stageCounts[typedStage] ?? 0);\n return delta === 0\n ? null\n : `${typedStage} ${formatTraceCountDelta(delta)}`;\n })\n .filter((value): value is string => Boolean(value))\n .slice(0, 3)\n .join(\" · \");\n\n const rows: RAGLabelValueRow[] = [{ label: \"Baseline\", value: leader.label }];\n\n if (formatTraceModes(trace.modes) !== formatTraceModes(leaderTrace.modes)) {\n rows.push({\n label: \"Modes vs leader\",\n value: `${formatTraceModes(trace.modes)} vs ${formatTraceModes(\n leaderTrace.modes,\n )}`,\n });\n }\n\n if (\n formatSourceBalanceStrategies(trace.sourceBalanceStrategies) !==\n formatSourceBalanceStrategies(leaderTrace.sourceBalanceStrategies)\n ) {\n rows.push({\n label: \"Balance vs leader\",\n value: `${formatSourceBalanceStrategies(\n trace.sourceBalanceStrategies,\n )} vs ${formatSourceBalanceStrategies(\n leaderTrace.sourceBalanceStrategies,\n )}`,\n });\n }\n\n rows.push(\n leadDriftRow,\n leadMediaDriftRow,\n sqlitePlannerDriftRow,\n postgresPlannerDriftRow,\n routingDriftRow,\n );\n\n rows.push(\n {\n label: \"Final delta\",\n value: formatSignedDelta(\n trace.averageFinalCount - leaderTrace.averageFinalCount,\n 1,\n ),\n },\n {\n label: \"Vector delta\",\n value: formatSignedDelta(\n trace.averageVectorCount - leaderTrace.averageVectorCount,\n 1,\n ),\n },\n {\n label: \"Lexical delta\",\n value: formatSignedDelta(\n trace.averageLexicalCount - leaderTrace.averageLexicalCount,\n 1,\n ),\n },\n {\n label: \"Transform delta\",\n value: formatTraceCountDelta(\n trace.transformedCases - leaderTrace.transformedCases,\n ),\n },\n {\n label: \"Balanced delta\",\n value: formatTraceCountDelta(\n trace.balancedCases - leaderTrace.balancedCases,\n ),\n },\n {\n label: \"Round robin delta\",\n value: formatTraceCountDelta(\n trace.roundRobinCases - leaderTrace.roundRobinCases,\n ),\n },\n {\n label: \"Runtime budget delta\",\n value: formatTraceCountDelta(\n trace.runtimeCandidateBudgetExhaustedCases -\n leaderTrace.runtimeCandidateBudgetExhaustedCases,\n ),\n },\n {\n label: \"Runtime underfilled delta\",\n value: formatTraceCountDelta(\n trace.runtimeUnderfilledTopKCases -\n leaderTrace.runtimeUnderfilledTopKCases,\n ),\n },\n );\n\n if (stageDelta) {\n rows.push({ label: \"Stage delta\", value: stageDelta });\n }\n\n return rows;\n};\n\nexport const buildRAGRetrievalComparisonPresentations = (\n comparison: RAGRetrievalComparison,\n): RAGComparisonPresentation[] => {\n const leader = comparison.entries[0];\n return comparison.entries.map((entry) => ({\n diffLabel: leader?.label ?? \"Leader\",\n diffRows: buildRAGComparisonTraceDiffRows(entry, leader),\n summary: formatRetrievalComparisonHeadline(entry),\n id: entry.retrievalId,\n label: entry.label,\n traceSummaryRows: buildRAGComparisonTraceSummaryRows(entry),\n }));\n};\n\nexport const buildRAGRetrievalComparisonOverviewPresentation = (\n comparison: RAGRetrievalComparison,\n): RAGComparisonOverviewPresentation =>\n buildComparisonOverviewPresentation({\n entries: comparison.entries,\n resolveEntry: (id?: string) =>\n comparison.entries.find((entry) => entry.retrievalId === id),\n resolveLabel: (id?: string) =>\n comparison.entries.find((entry) => entry.retrievalId === id)?.label ??\n id ??\n \"n/a\",\n summary: comparison.summary,\n });\n\nexport const buildRAGRerankerComparisonPresentations = (\n comparison: RAGRerankerComparison,\n): RAGComparisonPresentation[] => {\n const leader = comparison.entries[0];\n return comparison.entries.map((entry) => ({\n diffLabel: leader?.label ?? \"Leader\",\n diffRows: buildRAGComparisonTraceDiffRows(entry, leader),\n summary: formatRerankerComparisonHeadline(entry),\n id: entry.rerankerId,\n label: entry.label,\n traceSummaryRows: buildRAGComparisonTraceSummaryRows(entry),\n }));\n};\n\nexport const buildRAGRerankerComparisonOverviewPresentation = (\n comparison: RAGRerankerComparison,\n): RAGComparisonOverviewPresentation =>\n buildComparisonOverviewPresentation({\n entries: comparison.entries,\n resolveEntry: (id?: string) =>\n comparison.entries.find((entry) => entry.rerankerId === id),\n resolveLabel: (id?: string) =>\n comparison.entries.find((entry) => entry.rerankerId === id)?.label ??\n id ??\n \"n/a\",\n summary: comparison.summary,\n });\n\nexport const buildRAGGroundingProviderPresentations = (\n entries: Array<{\n providerKey: string;\n label: string;\n elapsedMs: number;\n response: RAGAnswerGroundingEvaluationResponse;\n }>,\n): RAGGroundingProviderPresentation[] =>\n entries.map((entry) => ({\n summary: [\n entry.label,\n `passing ${formatEvaluationPassingRate(entry.response.passingRate)}`,\n `citation f1 ${entry.response.summary.averageCitationF1.toFixed(3)}`,\n `resolved ${formatEvaluationPassingRate(\n entry.response.summary.averageResolvedCitationRate,\n )}`,\n `latency ${entry.elapsedMs.toFixed(1)}ms`,\n ].join(\" · \"),\n id: entry.providerKey,\n label: entry.label,\n }));\n\nexport const buildRAGGroundingProviderOverviewPresentation = (input: {\n entries: Array<{\n providerKey: string;\n label: string;\n elapsedMs: number;\n response: RAGAnswerGroundingEvaluationResponse;\n }>;\n summary: {\n bestByPassingRate?: string;\n bestByAverageCitationF1?: string;\n bestByResolvedCitationRate?: string;\n fastest?: string;\n };\n}): RAGGroundingProviderOverviewPresentation => {\n const resolveLabel = (key?: string) =>\n input.entries.find((entry) => entry.providerKey === key)?.label ??\n key ??\n \"n/a\";\n const winnerLabel = resolveLabel(input.summary.bestByPassingRate);\n const winnerEntry = input.entries.find(\n (entry) => entry.providerKey === input.summary.bestByPassingRate,\n );\n\n return {\n rows: [\n {\n label: \"Best passing rate\",\n value: resolveLabel(input.summary.bestByPassingRate),\n },\n {\n label: \"Best citation F1\",\n value: resolveLabel(input.summary.bestByAverageCitationF1),\n },\n {\n label: \"Best resolved citations\",\n value: resolveLabel(input.summary.bestByResolvedCitationRate),\n },\n {\n label: \"Fastest\",\n value: resolveLabel(input.summary.fastest),\n },\n ],\n winnerLabel,\n summary: winnerEntry\n ? `passing ${formatEvaluationPassingRate(winnerEntry.response.passingRate)} · citation f1 ${winnerEntry.response.summary.averageCitationF1.toFixed(3)} · resolved ${formatEvaluationPassingRate(winnerEntry.response.summary.averageResolvedCitationRate)}`\n : \"Stored workflow evaluation\",\n };\n};\n\nexport const buildRAGRetrievalOverviewPresentation = (\n comparison: RAGRetrievalComparison,\n): RAGQualityOverviewPresentation => ({\n rows: buildRAGRetrievalComparisonOverviewPresentation(comparison).rows,\n});\n\nexport const buildRAGRerankerOverviewPresentation = (\n comparison: RAGRerankerComparison,\n): RAGQualityOverviewPresentation => ({\n rows: buildRAGRerankerComparisonOverviewPresentation(comparison).rows,\n});\n\nexport const buildRAGGroundingOverviewPresentation = (input: {\n groundingEvaluation: RAGAnswerGroundingEvaluationResponse;\n groundingProviderOverview?: RAGGroundingProviderOverviewPresentation | null;\n}): RAGGroundingOverviewPresentation => ({\n rows: [\n {\n label: \"Grounding\",\n value: formatGroundingHistorySummaryValue(input.groundingEvaluation),\n },\n ...(input.groundingProviderOverview?.rows ?? [\n {\n label: \"Grounding providers\",\n value: \"Configure an AI provider to compare grounded answers.\",\n },\n ]),\n ],\n});\n\nexport const buildRAGQualityOverviewPresentation = (input: {\n retrievalComparison: RAGRetrievalComparison;\n rerankerComparison: RAGRerankerComparison;\n groundingEvaluation: RAGAnswerGroundingEvaluationResponse;\n groundingProviderOverview?: RAGGroundingProviderOverviewPresentation | null;\n}): RAGQualityOverviewPresentation => ({\n rows: [\n ...buildRAGRetrievalOverviewPresentation(input.retrievalComparison).rows,\n ...buildRAGRerankerOverviewPresentation(input.rerankerComparison).rows,\n ...buildRAGGroundingOverviewPresentation({\n groundingEvaluation: input.groundingEvaluation,\n groundingProviderOverview: input.groundingProviderOverview,\n }).rows,\n ],\n});\n\nexport const buildRAGGroundingProviderCaseComparisonPresentations = (\n comparisons: Array<{\n caseId: string;\n label: string;\n entries: Array<{\n providerKey: string;\n label: string;\n status: string;\n coverage: string;\n citationF1: number;\n resolvedCitationRate: number;\n matchedIds: string[];\n missingIds: string[];\n extraIds: string[];\n answerExcerpt: string;\n }>;\n summary: {\n bestByStatus?: string;\n bestByCitationF1?: string;\n bestByResolvedCitationRate?: string;\n };\n }>,\n): RAGGroundingProviderCaseComparisonPresentation[] =>\n comparisons.map((comparison) => {\n const resolveLabel = (key?: string) =>\n comparison.entries.find((entry) => entry.providerKey === key)?.label ??\n key ??\n \"n/a\";\n\n return {\n caseId: comparison.caseId,\n label: comparison.label,\n rows: [\n {\n label: \"Best grounded\",\n value: resolveLabel(comparison.summary.bestByStatus),\n },\n {\n label: \"Best citation F1\",\n value: resolveLabel(comparison.summary.bestByCitationF1),\n },\n {\n label: \"Best resolved citations\",\n value: resolveLabel(comparison.summary.bestByResolvedCitationRate),\n },\n ...comparison.entries.map((entry) => ({\n label: entry.label,\n value: [\n entry.status.toUpperCase(),\n `coverage ${entry.coverage}`,\n `f1 ${entry.citationF1.toFixed(3)}`,\n `resolved ${formatEvaluationPassingRate(\n entry.resolvedCitationRate,\n )}`,\n `matched ${entry.matchedIds.join(\", \") || \"none\"}`,\n `missing ${entry.missingIds.join(\", \") || \"none\"}`,\n `extra ${entry.extraIds.join(\", \") || \"none\"}`,\n `answer ${entry.answerExcerpt || \"n/a\"}`,\n ].join(\" · \"),\n })),\n ],\n summary: [\n `Best grounded: ${resolveLabel(comparison.summary.bestByStatus)}`,\n `Best citation F1: ${resolveLabel(\n comparison.summary.bestByCitationF1,\n )}`,\n `Best resolved citations: ${resolveLabel(\n comparison.summary.bestByResolvedCitationRate,\n )}`,\n ].join(\" · \"),\n };\n });\n\nexport const buildRAGEvaluationHistoryRows = (\n history?: RAGEvaluationHistory,\n): RAGLabelValueRow[] => {\n if (!history?.latestRun) {\n return [{ label: \"History\", value: \"No persisted benchmark runs yet.\" }];\n }\n\n const rows: RAGLabelValueRow[] = [\n { label: \"Runs recorded\", value: String(history.runs.length) },\n {\n label: \"Latest\",\n value: `${history.latestRun.label} · ${formatEvaluationSummary(\n history.latestRun.response,\n )}`,\n },\n ];\n\n if (history.latestRun.traceSummary) {\n rows.push({\n label: \"Latest trace\",\n value: `${formatTraceModes(\n history.latestRun.traceSummary.modes,\n )} · balance ${formatSourceBalanceStrategies(\n history.latestRun.traceSummary.sourceBalanceStrategies,\n )} · final ${history.latestRun.traceSummary.averageFinalCount.toFixed(\n 1,\n )} · vector ${history.latestRun.traceSummary.averageVectorCount.toFixed(\n 1,\n )} · lexical ${history.latestRun.traceSummary.averageLexicalCount.toFixed(\n 1,\n )}`,\n });\n }\n\n if (history.previousRun) {\n rows.push({\n label: \"Previous\",\n value: `${history.previousRun.label} · ${formatEvaluationSummary(\n history.previousRun.response,\n )}`,\n });\n }\n\n if (!history.diff) {\n rows.push({\n label: \"History diff\",\n value: \"Run the benchmark again to diff regressions over time.\",\n });\n return rows;\n }\n\n rows.push(\n {\n label: \"Passing delta\",\n value: formatSignedDelta(history.diff.summaryDelta.passingRate, 1, \"%\"),\n },\n {\n label: \"Average F1 delta\",\n value: formatSignedDelta(history.diff.summaryDelta.averageF1, 3),\n },\n {\n label: \"Latency delta\",\n value: formatSignedDelta(\n history.diff.summaryDelta.averageLatencyMs,\n 1,\n \"ms\",\n ),\n },\n {\n label: \"Improved\",\n value: formatHistoryCaseLabels(history.diff.improvedCases),\n },\n {\n label: \"Regressed\",\n value: formatHistoryCaseLabels(history.diff.regressedCases),\n },\n {\n label: \"Lead drift\",\n value: formatTraceLeadChanges(history.diff.traceLeadChanges),\n },\n {\n label: \"SQLite planner shift\",\n value: formatHistorySQLitePlannerShift(history),\n },\n {\n label: \"Postgres planner shift\",\n value: formatHistoryPostgresPlannerShift(history),\n },\n {\n label: \"Trace routing shift\",\n value: formatHistoryRoutingShift(history),\n },\n );\n\n if (history.previousRun) {\n const currentEntityView = buildRAGEvaluationEntityQualityView(\n history.latestRun.response,\n );\n const previousEntityView = buildRAGEvaluationEntityQualityView(\n history.previousRun.response,\n );\n rows.push(\n {\n label: \"Source regression hotspots\",\n value: formatEntityRegressionHotspots(\n currentEntityView.bySource,\n previousEntityView.bySource,\n (entry) => entry.averageF1,\n \"f1\",\n ),\n },\n {\n label: \"Document regression hotspots\",\n value: formatEntityRegressionHotspots(\n currentEntityView.byDocument,\n previousEntityView.byDocument,\n (entry) => entry.averageF1,\n \"f1\",\n ),\n },\n );\n }\n\n if (history.diff.traceSummaryDelta) {\n rows.push(\n {\n label: \"Trace mode shift\",\n value: history.diff.traceSummaryDelta.modesChanged\n ? \"changed\"\n : \"stable\",\n },\n {\n label: \"Trace balance shift\",\n value: history.diff.traceSummaryDelta.sourceBalanceStrategiesChanged\n ? \"changed\"\n : \"stable\",\n },\n {\n label: \"Trace final delta\",\n value: formatSignedDelta(\n history.diff.traceSummaryDelta.averageFinalCount,\n 1,\n ),\n },\n {\n label: \"Trace vector delta\",\n value: formatSignedDelta(\n history.diff.traceSummaryDelta.averageVectorCount,\n 1,\n ),\n },\n {\n label: \"Trace lexical delta\",\n value: formatSignedDelta(\n history.diff.traceSummaryDelta.averageLexicalCount,\n 1,\n ),\n },\n {\n label: \"Trace balanced delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.balancedCases,\n ),\n },\n {\n label: \"Trace round robin delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.roundRobinCases,\n ),\n },\n {\n label: \"Trace transform delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.transformedCases,\n ),\n },\n {\n label: \"Trace variant delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.variantCases,\n ),\n },\n );\n\n const evidenceReconcileDelta =\n history.diff.traceSummaryDelta.stageCounts?.evidence_reconcile;\n if (typeof evidenceReconcileDelta === \"number\") {\n rows.push({\n label: \"Trace evidence reconcile delta (all)\",\n value: formatTraceCountDelta(evidenceReconcileDelta),\n });\n }\n if (\n typeof history.diff.traceSummaryDelta\n .officeEvidenceReconcileCasesDelta === \"number\"\n ) {\n rows.push({\n label: \"Trace office structure evidence reconcile delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.officeEvidenceReconcileCasesDelta,\n ),\n });\n }\n if (\n typeof history.diff.traceSummaryDelta\n .officeParagraphEvidenceReconcileCasesDelta === \"number\"\n ) {\n rows.push({\n label: \"Trace office narrative evidence reconcile delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta\n .officeParagraphEvidenceReconcileCasesDelta,\n ),\n });\n }\n if (\n typeof history.diff.traceSummaryDelta\n .officeListEvidenceReconcileCasesDelta === \"number\"\n ) {\n rows.push({\n label: \"Trace office checklist evidence reconcile delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.officeListEvidenceReconcileCasesDelta,\n ),\n });\n }\n if (\n typeof history.diff.traceSummaryDelta\n .officeTableEvidenceReconcileCasesDelta === \"number\"\n ) {\n rows.push({\n label: \"Trace office table evidence reconcile delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.officeTableEvidenceReconcileCasesDelta,\n ),\n });\n }\n const officeReconcileDeltas = [\n typeof history.diff.traceSummaryDelta\n .officeParagraphEvidenceReconcileCasesDelta === \"number\"\n ? `narrative=${formatTraceCountDelta(\n history.diff.traceSummaryDelta\n .officeParagraphEvidenceReconcileCasesDelta,\n )}`\n : null,\n typeof history.diff.traceSummaryDelta\n .officeListEvidenceReconcileCasesDelta === \"number\"\n ? `checklist=${formatTraceCountDelta(\n history.diff.traceSummaryDelta\n .officeListEvidenceReconcileCasesDelta,\n )}`\n : null,\n typeof history.diff.traceSummaryDelta\n .officeTableEvidenceReconcileCasesDelta === \"number\"\n ? `table=${formatTraceCountDelta(\n history.diff.traceSummaryDelta\n .officeTableEvidenceReconcileCasesDelta,\n )}`\n : null,\n ].filter((value): value is string => Boolean(value));\n if (officeReconcileDeltas.length > 0) {\n rows.push({\n label: \"Trace office reconcile deltas\",\n value: officeReconcileDeltas.join(\", \"),\n });\n }\n if (\n typeof history.diff.traceSummaryDelta.pdfEvidenceReconcileCasesDelta ===\n \"number\"\n ) {\n rows.push({\n label: \"Trace PDF native evidence reconcile delta\",\n value: formatTraceCountDelta(\n history.diff.traceSummaryDelta.pdfEvidenceReconcileCasesDelta,\n ),\n });\n }\n\n const stageDelta = Object.entries(\n history.diff.traceSummaryDelta.stageCounts ?? {},\n )\n .map(([stage, count]) => `${stage} ${formatTraceCountDelta(count)}`)\n .join(\", \");\n\n if (stageDelta) {\n rows.push({ label: \"Trace stage delta\", value: stageDelta });\n }\n }\n\n if (history.caseTraceSnapshots.length > 0) {\n const changedCases = history.caseTraceSnapshots.filter(\n (entry) => entry.traceChange === \"changed\",\n );\n rows.push({\n label: \"Trace drift cases\",\n value:\n changedCases.length > 0\n ? changedCases\n .map((entry) => entry.label ?? entry.caseId)\n .slice(0, 4)\n .join(\", \")\n : \"none\",\n });\n rows.push({\n label: \"Lead media cues\",\n value:\n Array.from(\n new Set(\n history.caseTraceSnapshots\n .map((entry) =>\n formatLeadMediaCueSummary({\n leadChannelAttributionCue: entry.leadChannelAttributionCue,\n leadChannelCue: entry.leadChannelCue,\n leadContinuityCue: entry.leadContinuityCue,\n leadSpeakerAttributionCue: entry.leadSpeakerAttributionCue,\n leadSpeakerCue: entry.leadSpeakerCue,\n }),\n )\n .filter((value) => value !== \"none\"),\n ),\n )\n .slice(0, 3)\n .join(\" · \") || \"none\",\n });\n rows.push({\n label: \"Presentation cues\",\n value:\n Array.from(\n new Set(\n history.caseTraceSnapshots\n .map((entry) =>\n formatLeadPresentationCue(entry.leadPresentationCue),\n )\n .filter((value) => value !== \"none\"),\n ),\n )\n .slice(0, 3)\n .join(\" / \") || \"none\",\n });\n }\n\n return rows;\n};\n\nexport const buildRAGEvaluationCaseTracePresentations = (\n history?: RAGEvaluationHistory,\n): RAGEvaluationCaseTracePresentation[] => {\n if (!history?.caseTraceSnapshots.length) {\n return [];\n }\n\n return history.caseTraceSnapshots.map((entry) => {\n const label = entry.label ?? entry.caseId;\n const currentMode = entry.traceMode ?? \"no-trace\";\n const previousMode = entry.previousTraceMode ?? \"n/a\";\n const currentBalance = entry.sourceBalanceStrategy ?? \"cap\";\n const previousBalance = entry.previousSourceBalanceStrategy ?? \"n/a\";\n const currentVariants =\n entry.variantQueries.length > 0\n ? entry.variantQueries.join(\", \")\n : \"none\";\n const previousVariants =\n entry.previousVariantQueries.length > 0\n ? entry.previousVariantQueries.join(\", \")\n : \"none\";\n const currentStages =\n Object.keys(entry.stageCounts).length > 0\n ? Object.entries(entry.stageCounts)\n .map(([stage, count]) => `${stage} ${count}`)\n .join(\", \")\n : \"none\";\n const previousStages =\n Object.keys(entry.previousStageCounts).length > 0\n ? Object.entries(entry.previousStageCounts)\n .map(([stage, count]) => `${stage} ${count}`)\n .join(\", \")\n : \"none\";\n const currentLeadContext = entry.topContextLabel ?? \"n/a\";\n const previousLeadContext = entry.previousTopContextLabel ?? \"n/a\";\n const currentLeadLocation = entry.topLocatorLabel ?? \"n/a\";\n const previousLeadLocation = entry.previousTopLocatorLabel ?? \"n/a\";\n const currentBoundary = entry.sourceAwareChunkReasonLabel ?? \"n/a\";\n const previousBoundary = entry.previousSourceAwareChunkReasonLabel ?? \"n/a\";\n const currentScope = entry.sourceAwareUnitScopeLabel ?? \"n/a\";\n const previousScope = entry.previousSourceAwareUnitScopeLabel ?? \"n/a\";\n const currentMediaCues = formatLeadMediaCueSummary({\n leadChannelAttributionCue: entry.leadChannelAttributionCue,\n leadChannelCue: entry.leadChannelCue,\n leadContinuityCue: entry.leadContinuityCue,\n leadSpeakerAttributionCue: entry.leadSpeakerAttributionCue,\n leadSpeakerCue: entry.leadSpeakerCue,\n });\n const previousMediaCues = formatLeadMediaCueSummary({\n leadChannelAttributionCue: entry.previousLeadChannelAttributionCue,\n leadChannelCue: entry.previousLeadChannelCue,\n leadContinuityCue: entry.previousLeadContinuityCue,\n leadSpeakerAttributionCue: entry.previousLeadSpeakerAttributionCue,\n leadSpeakerCue: entry.previousLeadSpeakerCue,\n });\n const currentPresentationCue = formatLeadPresentationCue(\n entry.leadPresentationCue,\n );\n const previousPresentationCue = formatLeadPresentationCue(\n entry.previousLeadPresentationCue,\n );\n const leadSummary =\n entry.topLocatorLabel ??\n entry.topContextLabel ??\n entry.sourceAwareUnitScopeLabel ??\n \"n/a\";\n const previousLeadSummary =\n entry.previousTopLocatorLabel ??\n entry.previousTopContextLabel ??\n entry.previousSourceAwareUnitScopeLabel ??\n \"n/a\";\n\n return {\n caseId: entry.caseId,\n label,\n summary: `${entry.traceChange} · ${previousMode}→${currentMode} · ${previousBalance}→${currentBalance} · lead ${previousLeadSummary}→${leadSummary} · final ${\n entry.previousFinalCount ?? 0\n }→${entry.finalCount}`,\n traceChange: entry.traceChange,\n rows: [\n { label: \"Query\", value: entry.query },\n { label: \"Trace change\", value: entry.traceChange },\n { label: \"Mode\", value: `${previousMode}→${currentMode}` },\n {\n label: \"Balance\",\n value: `${previousBalance}→${currentBalance}`,\n },\n {\n label: \"Transformed query\",\n value: `${\n entry.previousTransformedQuery?.trim() || \"n/a\"\n }→${entry.transformedQuery?.trim() || \"n/a\"}`,\n },\n {\n label: \"Final\",\n value: `${entry.previousFinalCount ?? 0}→${entry.finalCount}`,\n },\n {\n label: \"Vector\",\n value: `${entry.previousVectorCount ?? 0}→${entry.vectorCount}`,\n },\n {\n label: \"Lexical\",\n value: `${entry.previousLexicalCount ?? 0}→${entry.lexicalCount}`,\n },\n {\n label: \"Candidate topK\",\n value: `${entry.previousCandidateTopK ?? 0}→${entry.candidateTopK}`,\n },\n {\n label: \"Lexical topK\",\n value: `${entry.previousLexicalTopK ?? 0}→${entry.lexicalTopK}`,\n },\n {\n label: \"Variants\",\n value: `${previousVariants}→${currentVariants}`,\n },\n {\n label: \"Lead context\",\n value: `${previousLeadContext}→${currentLeadContext}`,\n },\n {\n label: \"Lead location\",\n value: `${previousLeadLocation}→${currentLeadLocation}`,\n },\n {\n label: \"Chunk boundary\",\n value: `${previousBoundary}→${currentBoundary}`,\n },\n {\n label: \"Source-aware scope\",\n value: `${previousScope}→${currentScope}`,\n },\n {\n label: \"Lead media cues\",\n value: `${previousMediaCues}→${currentMediaCues}`,\n },\n {\n label: \"Lead presentation cues\",\n value: `${previousPresentationCue}→${currentPresentationCue}`,\n },\n {\n label: \"Stages\",\n value: `${previousStages}→${currentStages}`,\n },\n { label: \"Status\", value: entry.status },\n ],\n };\n });\n};\n\nexport const buildRAGEvaluationHistoryPresentation = (\n history?: RAGEvaluationHistory,\n): RAGEvaluationHistoryPresentation => ({\n caseTraces: buildRAGEvaluationCaseTracePresentations(history),\n rows: buildRAGEvaluationHistoryRows(history),\n summary: history?.latestRun\n ? history.latestRun.label\n : \"No persisted benchmark runs yet.\",\n});\n\nexport const buildRAGEvaluationSuiteSnapshotRows = (\n history?: RAGEvaluationSuiteSnapshotHistory,\n): RAGLabelValueRow[] => {\n if (!history?.latestSnapshot) {\n return [\n { label: \"Suite snapshots\", value: \"No saved suite snapshots yet.\" },\n ];\n }\n\n const rows: RAGLabelValueRow[] = [\n {\n label: \"Snapshots recorded\",\n value: String(history.snapshots.length),\n },\n {\n label: \"Latest snapshot\",\n value: `v${history.latestSnapshot.version} · ${history.latestSnapshot.caseCount} cases`,\n },\n ];\n\n if (history.previousSnapshot) {\n rows.push({\n label: \"Previous snapshot\",\n value: `v${history.previousSnapshot.version} · ${history.previousSnapshot.caseCount} cases`,\n });\n }\n\n if (!history.diff) {\n rows.push({\n label: \"Snapshot diff\",\n value: \"Save another suite snapshot to compare dataset changes.\",\n });\n return rows;\n }\n\n rows.push(\n {\n label: \"Case count change\",\n value: formatSignedDelta(history.diff.caseCountDelta),\n },\n {\n label: \"Added cases\",\n value:\n history.diff.addedCaseIds.length > 0\n ? history.diff.addedCaseIds.join(\", \")\n : \"none\",\n },\n {\n label: \"Removed cases\",\n value:\n history.diff.removedCaseIds.length > 0\n ? history.diff.removedCaseIds.join(\", \")\n : \"none\",\n },\n {\n label: \"Changed cases\",\n value:\n history.diff.changedCaseIds.length > 0\n ? history.diff.changedCaseIds.join(\", \")\n : \"none\",\n },\n {\n label: \"Order changed\",\n value: history.diff.orderChanged ? \"changed\" : \"stable\",\n },\n );\n\n return rows;\n};\n\nexport const buildRAGEvaluationSuiteSnapshotPresentations = (\n history?: RAGEvaluationSuiteSnapshotHistory,\n): RAGEvaluationSuiteSnapshotPresentation[] =>\n (history?.snapshots ?? []).map((snapshot) => ({\n id: snapshot.id,\n label: snapshot.label ?? snapshot.suiteId,\n rows: [\n { label: \"Version\", value: `v${snapshot.version}` },\n { label: \"Created\", value: formatDateLabel(snapshot.createdAt) },\n { label: \"Cases\", value: String(snapshot.caseCount) },\n {\n label: \"Case ids\",\n value:\n snapshot.suite.input.cases.map((entry) => entry.id).join(\", \") ||\n \"none\",\n },\n ],\n summary: `v${snapshot.version} · ${snapshot.caseCount} cases`,\n version: snapshot.version,\n }));\n\nexport const buildRAGEvaluationSuiteSnapshotHistoryPresentation = (\n history?: RAGEvaluationSuiteSnapshotHistory,\n): RAGEvaluationSuiteSnapshotHistoryPresentation => ({\n rows: buildRAGEvaluationSuiteSnapshotRows(history),\n snapshots: buildRAGEvaluationSuiteSnapshotPresentations(history),\n summary: history?.latestSnapshot\n ? `v${history.latestSnapshot.version}`\n : \"No saved suite snapshots yet.\",\n});\n\nconst isRuntimeGateReason = (reason: string) =>\n /runtime|candidate-budget|underfilled/i.test(reason);\n\nconst getFixtureVariantsFromRunTags = (tags?: string[]): string[] =>\n (tags ?? [])\n .filter((tag) => tag.startsWith(\"fixture:\"))\n .map((tag) => tag.slice(\"fixture:\".length))\n .filter((tag, index, all) => tag.length > 0 && all.indexOf(tag) === index);\n\nconst buildRAGRetrievalReleaseHistoryRunPresentation = (\n run: RAGRetrievalComparisonRun,\n): RAGRetrievalReleaseHistoryRunPresentation => {\n const runtimeGateReasons = (\n run.decisionSummary?.gate?.reasons ??\n run.releaseVerdict?.gate?.reasons ??\n []\n ).filter(isRuntimeGateReason);\n const rows: RAGLabelValueRow[] = [\n { label: \"Finished\", value: formatDateLabel(run.finishedAt) },\n {\n label: \"Passing-rate winner\",\n value: run.comparison.summary.bestByPassingRate ?? \"n/a\",\n },\n {\n label: \"Average F1 winner\",\n value: run.comparison.summary.bestByAverageF1 ?? \"n/a\",\n },\n ];\n const fixtureVariants = getFixtureVariantsFromRunTags(run.tags);\n\n if (fixtureVariants.length > 0) {\n rows.push({\n label: \"Fixture variant\",\n value: fixtureVariants.join(\", \"),\n });\n }\n const officeWinnerSummaries = [\n run.comparison.summary.bestByOfficeParagraphEvidenceReconcileCases\n ? `narrative=${run.comparison.summary.bestByOfficeParagraphEvidenceReconcileCases}`\n : null,\n run.comparison.summary.bestByOfficeListEvidenceReconcileCases\n ? `checklist=${run.comparison.summary.bestByOfficeListEvidenceReconcileCases}`\n : null,\n run.comparison.summary.bestByOfficeTableEvidenceReconcileCases\n ? `table=${run.comparison.summary.bestByOfficeTableEvidenceReconcileCases}`\n : null,\n ].filter((value): value is string => Boolean(value));\n if (officeWinnerSummaries.length > 0) {\n rows.push({\n label: \"Office reconcile winners (docx/xlsx/pptx)\",\n value: officeWinnerSummaries.join(\", \"),\n });\n }\n const presentationCueWinners = [\n run.comparison.summary.bestByPresentationTitleCueCases\n ? `title=${run.comparison.summary.bestByPresentationTitleCueCases}`\n : null,\n run.comparison.summary.bestByPresentationBodyCueCases\n ? `body=${run.comparison.summary.bestByPresentationBodyCueCases}`\n : null,\n run.comparison.summary.bestByPresentationNotesCueCases\n ? `notes=${run.comparison.summary.bestByPresentationNotesCueCases}`\n : null,\n ].filter((value): value is string => Boolean(value));\n if (presentationCueWinners.length > 0) {\n rows.push({\n label: \"Presentation cue winners\",\n value: presentationCueWinners.join(\", \"),\n });\n }\n const spreadsheetCueWinners = [\n run.comparison.summary.bestBySpreadsheetSheetCueCases\n ? `sheet=${run.comparison.summary.bestBySpreadsheetSheetCueCases}`\n : null,\n run.comparison.summary.bestBySpreadsheetTableCueCases\n ? `table=${run.comparison.summary.bestBySpreadsheetTableCueCases}`\n : null,\n run.comparison.summary.bestBySpreadsheetColumnCueCases\n ? `column=${run.comparison.summary.bestBySpreadsheetColumnCueCases}`\n : null,\n ].filter((value): value is string => Boolean(value));\n if (spreadsheetCueWinners.length > 0) {\n rows.push({\n label: \"Spreadsheet cue winners\",\n value: spreadsheetCueWinners.join(\", \"),\n });\n }\n if (run.comparison.summary.bestByPresentationTitleCueCases) {\n rows.push({\n label: \"Best presentation title cue\",\n value: run.comparison.summary.bestByPresentationTitleCueCases,\n });\n }\n if (run.comparison.summary.bestByPresentationBodyCueCases) {\n rows.push({\n label: \"Best presentation body cue\",\n value: run.comparison.summary.bestByPresentationBodyCueCases,\n });\n }\n if (run.comparison.summary.bestByPresentationNotesCueCases) {\n rows.push({\n label: \"Best presentation notes cue\",\n value: run.comparison.summary.bestByPresentationNotesCueCases,\n });\n }\n if (run.comparison.summary.bestBySpreadsheetSheetCueCases) {\n rows.push({\n label: \"Best spreadsheet sheet cue\",\n value: run.comparison.summary.bestBySpreadsheetSheetCueCases,\n });\n }\n if (run.comparison.summary.bestBySpreadsheetTableCueCases) {\n rows.push({\n label: \"Best spreadsheet table cue\",\n value: run.comparison.summary.bestBySpreadsheetTableCueCases,\n });\n }\n if (run.comparison.summary.bestBySpreadsheetColumnCueCases) {\n rows.push({\n label: \"Best spreadsheet column cue\",\n value: run.comparison.summary.bestBySpreadsheetColumnCueCases,\n });\n }\n if (run.comparison.summary.bestByOfficeParagraphEvidenceReconcileCases) {\n rows.push({\n label: \"Best office narrative reconcile\",\n value: run.comparison.summary.bestByOfficeParagraphEvidenceReconcileCases,\n });\n }\n if (run.comparison.summary.bestByOfficeListEvidenceReconcileCases) {\n rows.push({\n label: \"Best office checklist reconcile\",\n value: run.comparison.summary.bestByOfficeListEvidenceReconcileCases,\n });\n }\n if (run.comparison.summary.bestByOfficeTableEvidenceReconcileCases) {\n rows.push({\n label: \"Best office table reconcile\",\n value: run.comparison.summary.bestByOfficeTableEvidenceReconcileCases,\n });\n }\n\n if (run.comparison.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases) {\n rows.push({\n label: \"Lowest runtime budget exhaustion\",\n value:\n run.comparison.summary.bestByLowestRuntimeCandidateBudgetExhaustedCases,\n });\n }\n\n if (run.comparison.summary.bestByLowestRuntimeUnderfilledTopKCases) {\n rows.push({\n label: \"Lowest runtime underfilled TopK\",\n value: run.comparison.summary.bestByLowestRuntimeUnderfilledTopKCases,\n });\n }\n\n rows.push(\n {\n label: \"Gate status\",\n value:\n run.decisionSummary?.gate?.status ??\n run.releaseVerdict?.gate?.status ??\n \"n/a\",\n },\n {\n label: \"Runtime gate failures\",\n value:\n runtimeGateReasons.length > 0 ? runtimeGateReasons.join(\"; \") : \"none\",\n },\n );\n\n return {\n label: run.label,\n rows,\n runId: run.id,\n summary:\n runtimeGateReasons.length > 0\n ? `${run.label} · runtime gate blocked`\n : `${run.label} · ${run.comparison.summary.bestByPassingRate ?? \"n/a\"} leads passing rate`,\n };\n};\n\nexport const buildRAGRetrievalReleaseGroupHistoryPresentation = (input: {\n timeline?: RAGRetrievalReleaseTimelineSummary;\n runs?: RAGRetrievalComparisonRun[];\n}): RAGRetrievalReleaseGroupHistoryPresentation => {\n const recentRuns = (input.runs ?? []).map(\n buildRAGRetrievalReleaseHistoryRunPresentation,\n );\n const fixtureVariants = (input.runs ?? [])\n .flatMap((run) => getFixtureVariantsFromRunTags(run.tags))\n .filter((tag, index, all) => all.indexOf(tag) === index);\n const runtimeBlockedRuns = recentRuns.filter((entry) =>\n entry.rows.some(\n (row) => row.label === \"Runtime gate failures\" && row.value !== \"none\",\n ),\n ).length;\n const rows: RAGLabelValueRow[] = [\n {\n label: \"Latest decision\",\n value: input.timeline?.latestDecisionKind ?? \"none\",\n },\n {\n label: \"Latest decision at\",\n value: formatDateLabel(input.timeline?.latestDecisionAt),\n },\n {\n label: \"Last promoted\",\n value: formatDateLabel(input.timeline?.lastPromotedAt),\n },\n {\n label: \"Last reverted\",\n value: formatDateLabel(input.timeline?.lastRevertedAt),\n },\n {\n label: \"Recent runtime-blocked runs\",\n value: String(runtimeBlockedRuns),\n },\n ];\n\n if (fixtureVariants.length > 0) {\n rows.push({\n label: \"Fixture variants\",\n value: fixtureVariants.join(\", \"),\n });\n }\n\n return {\n recentRuns,\n rows,\n summary: input.timeline?.latestDecisionKind\n ? `${input.timeline.latestDecisionKind} · ${recentRuns.length} recent runs`\n : recentRuns.length > 0\n ? `${recentRuns.length} recent runs`\n : \"No release history yet.\",\n };\n};\n\nexport const buildRAGAnswerGroundingCaseSnapshotPresentations = (\n history?: RAGAnswerGroundingEvaluationHistory,\n): RAGAnswerGroundingCaseSnapshotPresentation[] => {\n if (!history?.caseSnapshots.length) {\n return [];\n }\n\n return history.caseSnapshots.map((entry) => {\n const label = entry.label ?? entry.caseId;\n return {\n answerChange: entry.answerChange,\n caseId: entry.caseId,\n label,\n rows: [\n {\n label: \"Query\",\n value: entry.query?.trim().length ? entry.query : \"n/a\",\n },\n { label: \"Answer change\", value: entry.answerChange },\n { label: \"Coverage\", value: entry.coverage },\n {\n label: \"Resolved citations\",\n value: `${entry.resolvedCitationCount}/${entry.citationCount}`,\n },\n {\n label: \"Resolved citation rate\",\n value: entry.resolvedCitationRate.toFixed(3),\n },\n { label: \"Citation F1\", value: entry.citationF1.toFixed(3) },\n {\n label: \"Reference count\",\n value: String(entry.referenceCount),\n },\n {\n label: \"Cited IDs\",\n value: entry.citedIds.length > 0 ? entry.citedIds.join(\", \") : \"none\",\n },\n {\n label: \"Matched IDs\",\n value:\n entry.matchedIds.length > 0 ? entry.matchedIds.join(\", \") : \"none\",\n },\n {\n label: \"Missing IDs\",\n value:\n entry.missingIds.length > 0 ? entry.missingIds.join(\", \") : \"none\",\n },\n {\n label: \"Extra IDs\",\n value: entry.extraIds.length > 0 ? entry.extraIds.join(\", \") : \"none\",\n },\n {\n label: \"Unresolved refs\",\n value:\n entry.ungroundedReferenceNumbers.length > 0\n ? entry.ungroundedReferenceNumbers.join(\", \")\n : \"none\",\n },\n {\n label: \"Answer\",\n value: entry.answer.trim().length > 0 ? entry.answer : \"n/a\",\n },\n {\n label: \"Previous answer\",\n value:\n entry.previousAnswer && entry.previousAnswer.trim().length > 0\n ? entry.previousAnswer\n : \"n/a\",\n },\n ],\n summary: `${entry.answerChange} · ${entry.coverage} · resolved ${entry.resolvedCitationCount}/${entry.citationCount} · refs ${entry.referenceCount}`,\n };\n });\n};\n\nexport const buildRAGAnswerGroundingHistoryRows = (\n history?: RAGAnswerGroundingEvaluationHistory,\n): RAGLabelValueRow[] => {\n if (!history?.latestRun) {\n return [{ label: \"History\", value: \"No persisted provider runs yet.\" }];\n }\n\n const rows: RAGLabelValueRow[] = [\n { label: \"Runs recorded\", value: String(history.runs.length) },\n {\n label: \"Latest\",\n value: `${history.latestRun.label} · ${formatGroundingHistorySummaryValue(\n history.latestRun.response,\n )}`,\n },\n ];\n\n if (history.previousRun) {\n rows.push({\n label: \"Previous\",\n value: `${history.previousRun.label} · ${formatGroundingHistorySummaryValue(\n history.previousRun.response,\n )}`,\n });\n }\n\n if (history.leaderboard[0]) {\n rows.push({\n label: \"Best recorded\",\n value: `#${history.leaderboard[0].rank} · ${history.leaderboard[0].label} · passing ${formatEvaluationPassingRate(\n history.leaderboard[0].passingRate,\n )} · citation f1 ${history.leaderboard[0].averageCitationF1.toFixed(\n 3,\n )} · resolved ${formatEvaluationPassingRate(\n history.leaderboard[0].averageResolvedCitationRate,\n )}`,\n });\n }\n\n if (history.caseSnapshots.length > 0) {\n const changedAnswers = history.caseSnapshots.filter(\n (entry) => entry.answerChange === \"changed\",\n ).length;\n rows.push({\n label: \"Answer drift\",\n value: `${changedAnswers}/${history.caseSnapshots.length} changed`,\n });\n }\n\n if (!history.diff) {\n rows.push({\n label: \"History diff\",\n value:\n \"Run the provider comparison again to diff grounding regressions over time.\",\n });\n return rows;\n }\n\n rows.push(\n {\n label: \"Passing delta\",\n value: formatSignedDelta(history.diff.summaryDelta.passingRate, 1, \"%\"),\n },\n {\n label: \"Citation F1 delta\",\n value: formatSignedDelta(history.diff.summaryDelta.averageCitationF1, 3),\n },\n {\n label: \"Resolved citation delta\",\n value: formatSignedDelta(\n history.diff.summaryDelta.averageResolvedCitationRate * 100,\n 1,\n \"%\",\n ),\n },\n {\n label: \"Improved\",\n value: formatGroundingHistoryCaseLabels(history.diff.improvedCases),\n },\n {\n label: \"Regressed\",\n value: formatGroundingHistoryCaseLabels(history.diff.regressedCases),\n },\n );\n\n if (history.previousRun) {\n const currentEntityView = buildRAGAnswerGroundingEntityQualityView(\n history.latestRun.response,\n );\n const previousEntityView = buildRAGAnswerGroundingEntityQualityView(\n history.previousRun.response,\n );\n rows.push(\n {\n label: \"Source regression hotspots\",\n value: formatEntityRegressionHotspots(\n currentEntityView.bySource,\n previousEntityView.bySource,\n (entry) => entry.averageCitationF1,\n \"citation f1\",\n ),\n },\n {\n label: \"Document regression hotspots\",\n value: formatEntityRegressionHotspots(\n currentEntityView.byDocument,\n previousEntityView.byDocument,\n (entry) => entry.averageCitationF1,\n \"citation f1\",\n ),\n },\n );\n }\n\n return rows;\n};\n\nexport const buildRAGAnswerGroundingHistoryPresentation = (\n history?: RAGAnswerGroundingEvaluationHistory,\n): RAGAnswerGroundingHistoryPresentation => ({\n caseSnapshots: buildRAGAnswerGroundingCaseSnapshotPresentations(history),\n rows: buildRAGAnswerGroundingHistoryRows(history),\n summary: history?.latestRun\n ? history.latestRun.label\n : \"No persisted provider runs yet.\",\n});\n\nconst formatFailureCounts = (failureCounts: Record<string, number>) => {\n const entries = Object.entries(failureCounts).sort((left, right) => {\n if (right[1] !== left[1]) {\n return right[1] - left[1];\n }\n\n return left[0].localeCompare(right[0]);\n });\n\n return entries.length > 0\n ? entries.map(([key, count]) => `${key} ${count}`).join(\" · \")\n : \"none\";\n};\n\nconst formatFailureCountDelta = (\n current: Record<string, number>,\n previous: Record<string, number>,\n) => {\n const deltas = Object.keys({ ...current, ...previous })\n .map((key) => ({\n delta: (current[key] ?? 0) - (previous[key] ?? 0),\n key,\n }))\n .filter((entry) => entry.delta > 0)\n .sort((left, right) => {\n if (right.delta !== left.delta) {\n return right.delta - left.delta;\n }\n\n return left.key.localeCompare(right.key);\n });\n\n return deltas.length > 0\n ? deltas\n .slice(0, 3)\n .map((entry) => `${entry.key} +${entry.delta}`)\n .join(\" · \")\n : \"stable\";\n};\n\nconst formatEntityRegressionHotspots = <\n T extends {\n key: string;\n label: string;\n passingRate: number;\n failureCounts: Record<string, number>;\n },\n>(\n currentEntries: T[],\n previousEntries: T[],\n metricSelector: (entry: T) => number,\n metricLabel: string,\n) => {\n const previousMap = new Map(\n previousEntries.map((entry) => [entry.key, entry]),\n );\n const regressions = currentEntries\n .map((entry) => {\n const previous = previousMap.get(entry.key);\n const passDelta = entry.passingRate - (previous?.passingRate ?? 0);\n const metricDelta =\n metricSelector(entry) - (previous ? metricSelector(previous) : 0);\n const failureDelta = formatFailureCountDelta(\n entry.failureCounts,\n previous?.failureCounts ?? {},\n );\n\n return {\n entry,\n failureDelta,\n metricDelta,\n passDelta,\n };\n })\n .filter(\n (entry) =>\n entry.passDelta < 0 ||\n entry.metricDelta < 0 ||\n entry.failureDelta !== \"stable\",\n )\n .sort((left, right) => {\n if (left.passDelta !== right.passDelta) {\n return left.passDelta - right.passDelta;\n }\n if (left.metricDelta !== right.metricDelta) {\n return left.metricDelta - right.metricDelta;\n }\n\n return left.entry.label.localeCompare(right.entry.label);\n });\n\n return regressions.length > 0\n ? regressions\n .slice(0, 3)\n .map(\n ({ entry, failureDelta, metricDelta, passDelta }) =>\n `${entry.label} pass ${formatSignedDelta(\n passDelta,\n 1,\n \"%\",\n )} · ${metricLabel} ${formatSignedDelta(\n metricDelta,\n 3,\n )} · ${failureDelta}`,\n )\n .join(\" | \")\n : \"none\";\n};\n\nconst buildEvaluationEntityPresentation = (\n entry: RAGEvaluationEntityQualitySummary,\n): RAGEntityQualityPresentation => ({\n key: entry.key,\n label: entry.label,\n rows: [\n { label: \"Entity type\", value: entry.entityType },\n { label: \"Cases\", value: String(entry.totalCases) },\n {\n label: \"Status mix\",\n value: `${entry.passedCases} pass · ${entry.partialCases} partial · ${entry.failedCases} fail`,\n },\n {\n label: \"Passing rate\",\n value: formatEvaluationPassingRate(entry.passingRate),\n },\n { label: \"Average F1\", value: entry.averageF1.toFixed(3) },\n {\n label: \"Failure classes\",\n value: formatFailureCounts(entry.failureCounts),\n },\n {\n label: \"Cases\",\n value: entry.caseIds.length > 0 ? entry.caseIds.join(\", \") : \"none\",\n },\n ],\n summary: `${entry.entityType} · passing ${formatEvaluationPassingRate(\n entry.passingRate,\n )} · f1 ${entry.averageF1.toFixed(3)} · failures ${formatFailureCounts(\n entry.failureCounts,\n )}`,\n});\n\nconst buildGroundingEntityPresentation = (\n entry: RAGAnswerGroundingEntityQualitySummary,\n): RAGEntityQualityPresentation => ({\n key: entry.key,\n label: entry.label,\n rows: [\n { label: \"Entity type\", value: entry.entityType },\n { label: \"Cases\", value: String(entry.totalCases) },\n {\n label: \"Status mix\",\n value: `${entry.passedCases} pass · ${entry.partialCases} partial · ${entry.failedCases} fail`,\n },\n {\n label: \"Passing rate\",\n value: formatEvaluationPassingRate(entry.passingRate),\n },\n {\n label: \"Average citation F1\",\n value: entry.averageCitationF1.toFixed(3),\n },\n {\n label: \"Average resolved citation rate\",\n value: formatEvaluationPassingRate(\n entry.averageResolvedCitationRate * 100,\n ),\n },\n {\n label: \"Failure classes\",\n value: formatFailureCounts(entry.failureCounts),\n },\n {\n label: \"Cases\",\n value: entry.caseIds.length > 0 ? entry.caseIds.join(\", \") : \"none\",\n },\n ],\n summary: `${entry.entityType} · passing ${formatEvaluationPassingRate(\n entry.passingRate,\n )} · citation f1 ${entry.averageCitationF1.toFixed(\n 3,\n )} · failures ${formatFailureCounts(entry.failureCounts)}`,\n});\n\nexport const buildRAGEvaluationEntityQualityPresentation = (\n view: RAGEvaluationEntityQualityView,\n entityType: \"source\" | \"document\",\n): RAGEntityQualityViewPresentation => {\n const entities =\n entityType === \"source\"\n ? view.bySource.map(buildEvaluationEntityPresentation)\n : view.byDocument.map(buildEvaluationEntityPresentation);\n\n return {\n entities,\n rows: [\n { label: \"Entity type\", value: entityType },\n { label: \"Entities tracked\", value: String(entities.length) },\n {\n label: \"Best coverage\",\n value: entities[0]?.summary ?? \"No entity quality data yet.\",\n },\n ],\n summary:\n entities[0]?.label ??\n `No ${entityType === \"source\" ? \"source\" : \"document\"} quality data yet.`,\n };\n};\n\nexport const buildRAGAnswerGroundingEntityQualityPresentation = (\n view: RAGAnswerGroundingEntityQualityView,\n entityType: \"source\" | \"document\",\n): RAGEntityQualityViewPresentation => {\n const entities =\n entityType === \"source\"\n ? view.bySource.map(buildGroundingEntityPresentation)\n : view.byDocument.map(buildGroundingEntityPresentation);\n\n return {\n entities,\n rows: [\n { label: \"Entity type\", value: entityType },\n { label: \"Entities tracked\", value: String(entities.length) },\n {\n label: \"Best coverage\",\n value: entities[0]?.summary ?? \"No entity quality data yet.\",\n },\n ],\n summary:\n entities[0]?.label ??\n `No ${entityType === \"source\" ? \"source\" : \"document\"} quality data yet.`,\n };\n};\n",
|
|
12
13
|
"import { Injectable } from \"@angular/core\";\nimport type {\n RAGEvaluationInput,\n RAGRetrievalBaselineResponse,\n RAGRetrievalLaneHandoffDecisionRequest,\n RAGRetrievalBaselinePromotionFromRunRequest,\n RAGRetrievalBaselinePromotionRequest,\n RAGRetrievalBaselineRevertRequest,\n RAGRetrievalReleaseDecisionActionRequest,\n RAGRetrievalComparisonRequest,\n RAGDocumentChunk,\n RAGDocumentIngestInput,\n RAGDocumentUploadIngestInput,\n RAGDocumentUrlIngestInput,\n RAGRetrievalIncidentRemediationDecisionRequest,\n RAGRetrievalIncidentRemediationBulkExecutionRequest,\n RAGRetrievalIncidentRemediationExecutionRequest,\n RAGSearchRequest,\n RAGSyncRunOptions,\n} from \"../../types/engine\";\nimport { createRAGClient } from \"../client/ragClient\";\n\n@Injectable({ providedIn: \"root\" })\nexport class RAGClientService {\n private clients = new Map<string, ReturnType<typeof createRAGClient>>();\n\n private client(path: string) {\n const existing = this.clients.get(path);\n if (existing) {\n return existing;\n }\n\n const created = createRAGClient({ path });\n this.clients.set(path, created);\n\n return created;\n }\n\n ingest(path: string, chunks: RAGDocumentChunk[]) {\n return this.client(path).ingest(chunks);\n }\n\n ingestDocuments(path: string, input: RAGDocumentIngestInput) {\n return this.client(path).ingestDocuments(input);\n }\n\n ingestUrls(path: string, input: RAGDocumentUrlIngestInput) {\n return this.client(path).ingestUrls(input);\n }\n\n ingestUploads(path: string, input: RAGDocumentUploadIngestInput) {\n return this.client(path).ingestUploads(input);\n }\n\n search(path: string, input: RAGSearchRequest) {\n return this.client(path).search(input);\n }\n\n searchWithTrace(path: string, input: RAGSearchRequest) {\n return this.client(path).searchWithTrace(input);\n }\n\n evaluate(path: string, input: RAGEvaluationInput) {\n return this.client(path).evaluate(input);\n }\n\n compareRetrievals(path: string, input: RAGRetrievalComparisonRequest) {\n return this.client(path).compareRetrievals(input);\n }\n\n retrievalComparisonHistory(\n path: string,\n input?: {\n limit?: number;\n suiteId?: string;\n label?: string;\n winnerId?: string;\n groupKey?: string;\n tag?: string;\n },\n ) {\n return this.client(path).retrievalComparisonHistory(input);\n }\n\n retrievalBaselines(\n path: string,\n input?: {\n groupKey?: string;\n tag?: string;\n limit?: number;\n status?: \"active\" | \"superseded\";\n },\n ) {\n return this.client(path).retrievalBaselines(input);\n }\n\n promoteRetrievalBaseline(\n path: string,\n input: RAGRetrievalBaselinePromotionRequest,\n ) {\n return this.client(path).promoteRetrievalBaseline(input);\n }\n\n promoteRetrievalBaselineDetailed(\n path: string,\n input: RAGRetrievalBaselinePromotionRequest,\n ): Promise<RAGRetrievalBaselineResponse> {\n return this.client(path).promoteRetrievalBaselineDetailed(input);\n }\n\n promoteRetrievalBaselineToLane(\n path: string,\n input: RAGRetrievalBaselinePromotionRequest & {\n rolloutLabel: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).promoteRetrievalBaselineToLane(input);\n }\n\n promoteRetrievalBaselineToLaneDetailed(\n path: string,\n input: RAGRetrievalBaselinePromotionRequest & {\n rolloutLabel: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ): Promise<RAGRetrievalBaselineResponse> {\n return this.client(path).promoteRetrievalBaselineToLaneDetailed(input);\n }\n\n promoteRetrievalBaselineFromRun(\n path: string,\n input: RAGRetrievalBaselinePromotionFromRunRequest,\n ) {\n return this.client(path).promoteRetrievalBaselineFromRun(input);\n }\n\n promoteRetrievalBaselineFromRunDetailed(\n path: string,\n input: RAGRetrievalBaselinePromotionFromRunRequest,\n ): Promise<RAGRetrievalBaselineResponse> {\n return this.client(path).promoteRetrievalBaselineFromRunDetailed(input);\n }\n\n revertRetrievalBaseline(\n path: string,\n input: RAGRetrievalBaselineRevertRequest,\n ) {\n return this.client(path).revertRetrievalBaseline(input);\n }\n\n retrievalBaselineDecisions(\n path: string,\n input?: {\n groupKey?: string;\n limit?: number;\n kind?: \"approve\" | \"promote\" | \"reject\" | \"revert\";\n freshnessStatus?: \"fresh\" | \"expired\" | \"not_applicable\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).retrievalBaselineDecisions(input);\n }\n\n retrievalReleaseGroupHistory(\n path: string,\n input: {\n groupKey: string;\n decisionLimit?: number;\n baselineLimit?: number;\n runLimit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).retrievalReleaseGroupHistory(input);\n }\n\n retrievalLaneHandoffs(\n path: string,\n input?: {\n groupKey?: string;\n sourceRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n limit?: number;\n },\n ) {\n return this.client(path).retrievalLaneHandoffs(input);\n }\n\n retrievalLaneHandoffDecisions(\n path: string,\n input?: {\n groupKey?: string;\n sourceRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n kind?: \"approve\" | \"reject\" | \"complete\";\n limit?: number;\n },\n ) {\n return this.client(path).retrievalLaneHandoffDecisions(input);\n }\n\n retrievalLaneHandoffIncidents(\n path: string,\n input?: {\n groupKey?: string;\n limit?: number;\n status?: \"open\" | \"resolved\";\n severity?: \"warning\" | \"critical\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).retrievalLaneHandoffIncidents(input);\n }\n\n retrievalLaneHandoffIncidentHistory(\n path: string,\n input?: {\n action?: \"opened\" | \"acknowledged\" | \"unacknowledged\" | \"resolved\";\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).retrievalLaneHandoffIncidentHistory(input);\n }\n\n retrievalLaneHandoffAutoCompletePolicyHistory(\n path: string,\n input?: {\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).retrievalLaneHandoffAutoCompletePolicyHistory(\n input,\n );\n }\n\n retrievalReleaseLanePolicyHistory(\n path: string,\n input?: {\n groupKey?: string;\n limit?: number;\n rolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n scope?: \"rollout_label\" | \"group_rollout_label\";\n },\n ) {\n return this.client(path).retrievalReleaseLanePolicyHistory(input);\n }\n\n retrievalBaselineGatePolicyHistory(\n path: string,\n input?: {\n groupKey?: string;\n limit?: number;\n rolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n scope?: \"rollout_label\" | \"group_rollout_label\";\n },\n ) {\n return this.client(path).retrievalBaselineGatePolicyHistory(input);\n }\n\n retrievalReleaseLaneEscalationPolicyHistory(\n path: string,\n input?: {\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).retrievalReleaseLaneEscalationPolicyHistory(input);\n }\n\n retrievalReleaseIncidentPolicyHistory(\n path: string,\n input?: {\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).retrievalReleaseIncidentPolicyHistory(input);\n }\n\n decideRetrievalLaneHandoff(\n path: string,\n input: RAGRetrievalLaneHandoffDecisionRequest,\n ) {\n return this.client(path).decideRetrievalLaneHandoff(input);\n }\n\n decideRetrievalLaneHandoffDetailed(\n path: string,\n input: RAGRetrievalLaneHandoffDecisionRequest,\n ) {\n return this.client(path).decideRetrievalLaneHandoffDetailed(input);\n }\n\n retrievalReleaseIncidents(\n path: string,\n input?: {\n groupKey?: string;\n limit?: number;\n status?: \"open\" | \"resolved\";\n severity?: \"warning\" | \"critical\";\n kind?:\n | \"approval_expired\"\n | \"baseline_regression\"\n | \"gate_failure\"\n | \"handoff_stale\";\n acknowledged?: boolean;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).retrievalReleaseIncidents(input);\n }\n\n retrievalIncidentRemediationDecisions(\n path: string,\n input?: {\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n remediationKind?:\n | \"renew_approval\"\n | \"record_approval\"\n | \"inspect_gate\"\n | \"rerun_comparison\"\n | \"restore_source_lane\"\n | \"review_readiness\"\n | \"monitor_lane\";\n status?: \"planned\" | \"applied\" | \"dismissed\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).retrievalIncidentRemediationDecisions(input);\n }\n\n retrievalIncidentRemediationExecutions(\n path: string,\n input?: {\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n actionKind?: RAGRetrievalIncidentRemediationExecutionRequest[\"action\"][\"kind\"];\n code?:\n | \"approval_recorded\"\n | \"incident_acknowledged\"\n | \"incident_resolved\"\n | \"release_status_loaded\"\n | \"release_drift_loaded\"\n | \"handoff_status_loaded\"\n | \"guardrail_blocked\"\n | \"idempotent_replay\";\n blockedByGuardrail?: boolean;\n idempotentReplay?: boolean;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n return this.client(path).retrievalIncidentRemediationExecutions(input);\n }\n\n recordRetrievalIncidentRemediationDecision(\n path: string,\n input: RAGRetrievalIncidentRemediationDecisionRequest,\n ) {\n return this.client(path).recordRetrievalIncidentRemediationDecision(input);\n }\n\n executeRetrievalIncidentRemediation(\n path: string,\n input: RAGRetrievalIncidentRemediationExecutionRequest,\n ) {\n return this.client(path).executeRetrievalIncidentRemediation(input);\n }\n\n bulkExecuteRetrievalIncidentRemediations(\n path: string,\n input: RAGRetrievalIncidentRemediationBulkExecutionRequest,\n ) {\n return this.client(path).bulkExecuteRetrievalIncidentRemediations(input);\n }\n\n retrievalReleaseStatus(path: string) {\n return this.client(path).retrievalReleaseStatus();\n }\n\n retrievalReleaseIncidentStatus(path: string) {\n return this.client(path).retrievalReleaseIncidentStatus();\n }\n\n retrievalIncidentRemediationStatus(path: string) {\n return this.client(path).retrievalIncidentRemediationStatus();\n }\n\n retrievalReleaseDriftStatus(path: string) {\n return this.client(path).retrievalReleaseDriftStatus();\n }\n\n retrievalLaneHandoffStatus(path: string) {\n return this.client(path).retrievalLaneHandoffStatus();\n }\n\n retrievalLaneHandoffIncidentStatus(path: string) {\n return this.client(path).retrievalLaneHandoffIncidentStatus();\n }\n\n acknowledgeRetrievalLaneHandoffIncident(\n path: string,\n input: {\n incidentId: string;\n acknowledgedAt?: number;\n acknowledgedBy?: string;\n acknowledgementNotes?: string;\n },\n ) {\n return this.client(path).acknowledgeRetrievalLaneHandoffIncident(input);\n }\n\n unacknowledgeRetrievalLaneHandoffIncident(\n path: string,\n input: {\n incidentId: string;\n },\n ) {\n return this.client(path).unacknowledgeRetrievalLaneHandoffIncident(input);\n }\n\n resolveRetrievalLaneHandoffIncident(\n path: string,\n input: {\n incidentId: string;\n resolvedAt?: number;\n resolvedBy?: string;\n resolutionNotes?: string;\n },\n ) {\n return this.client(path).resolveRetrievalLaneHandoffIncident(input);\n }\n\n acknowledgeRetrievalReleaseIncident(\n path: string,\n input: {\n incidentId: string;\n acknowledgedAt?: number;\n acknowledgedBy?: string;\n acknowledgementNotes?: string;\n },\n ) {\n return this.client(path).acknowledgeRetrievalReleaseIncident(input);\n }\n\n unacknowledgeRetrievalReleaseIncident(\n path: string,\n input: {\n incidentId: string;\n },\n ) {\n return this.client(path).unacknowledgeRetrievalReleaseIncident(input);\n }\n\n resolveRetrievalReleaseIncident(\n path: string,\n input: {\n incidentId: string;\n resolvedAt?: number;\n resolvedBy?: string;\n resolutionNotes?: string;\n },\n ) {\n return this.client(path).resolveRetrievalReleaseIncident(input);\n }\n\n retrievalPromotionCandidates(\n path: string,\n input?: {\n groupKey?: string;\n limit?: number;\n tag?: string;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n approved?: boolean;\n ready?: boolean;\n blocked?: boolean;\n reviewStatus?: \"approved\" | \"blocked\" | \"needs_review\" | \"ready\";\n freshnessStatus?: \"fresh\" | \"expired\" | \"not_applicable\";\n sortBy?: \"approvalFreshness\" | \"finishedAt\" | \"gateSeverity\" | \"priority\";\n sortDirection?: \"asc\" | \"desc\";\n },\n ) {\n return this.client(path).retrievalPromotionCandidates(input);\n }\n\n approveRetrievalCandidate(\n path: string,\n input: RAGRetrievalReleaseDecisionActionRequest,\n ) {\n return this.client(path).approveRetrievalCandidate(input);\n }\n\n rejectRetrievalCandidate(\n path: string,\n input: RAGRetrievalReleaseDecisionActionRequest,\n ) {\n return this.client(path).rejectRetrievalCandidate(input);\n }\n\n status(path: string) {\n return this.client(path).status();\n }\n\n ops(path: string) {\n return this.client(path).ops();\n }\n\n searchTraceHistory(\n path: string,\n input?: {\n query?: string;\n groupKey?: string;\n tag?: string;\n limit?: number;\n },\n ) {\n return this.client(path).searchTraceHistory(input);\n }\n\n searchTraceGroups(\n path: string,\n input?: {\n tag?: string;\n limit?: number;\n },\n ) {\n return this.client(path).searchTraceGroups(input);\n }\n\n searchTraceStats(path: string, input?: { tag?: string }) {\n return this.client(path).searchTraceStats(input);\n }\n\n previewSearchTracePrune(\n path: string,\n input?: {\n maxAgeMs?: number;\n maxRecordsPerQuery?: number;\n maxRecordsPerGroup?: number;\n now?: number;\n tag?: string;\n },\n ) {\n return this.client(path).previewSearchTracePrune(input);\n }\n\n pruneSearchTraces(\n path: string,\n input?: {\n maxAgeMs?: number;\n maxRecordsPerQuery?: number;\n maxRecordsPerGroup?: number;\n now?: number;\n tag?: string;\n },\n ) {\n return this.client(path).pruneSearchTraces(input);\n }\n\n searchTracePruneHistory(\n path: string,\n input?: {\n limit?: number;\n trigger?: \"manual\" | \"write\" | \"schedule\";\n },\n ) {\n return this.client(path).searchTracePruneHistory(input);\n }\n\n syncSources(path: string) {\n return this.client(path).syncSources();\n }\n\n syncAllSources(path: string, options?: RAGSyncRunOptions) {\n return this.client(path).syncAllSources(options);\n }\n\n syncSource(path: string, id: string, options?: RAGSyncRunOptions) {\n return this.client(path).syncSource(id, options);\n }\n\n documents(path: string, kind?: string) {\n return this.client(path).documents(kind);\n }\n\n documentChunks(path: string, id: string) {\n return this.client(path).documentChunks(id);\n }\n\n createDocument(\n path: string,\n input: RAGDocumentIngestInput[\"documents\"][number],\n ) {\n return this.client(path).createDocument(input);\n }\n\n deleteDocument(path: string, id: string) {\n return this.client(path).deleteDocument(id);\n }\n\n reseed(path: string) {\n return this.client(path).reseed();\n }\n\n reset(path: string) {\n return this.client(path).reset();\n }\n\n reindexDocument(path: string, id: string) {\n return this.client(path).reindexDocument(id);\n }\n\n reindexSource(path: string, source: string) {\n return this.client(path).reindexSource(source);\n }\n\n backends(path: string) {\n return this.client(path).backends();\n }\n\n clearIndex(path: string) {\n return this.client(path).clearIndex();\n }\n}\n",
|
|
13
|
-
"import type {\n RAGSource,\n} from \"@absolutejs/ai\";\nimport type {\n RAGAdminCapabilities,\n RAGBackendsResponse,\n RAGBackendMaintenanceRecommendation,\n RAGBackendMaintenanceSummary,\n RAGDocumentChunksResponse,\n RAGEvaluationCaseResult,\n RAGEvaluationInput,\n RAGEvaluationResponse,\n RAGRetrievalBaselineListResponse,\n RAGRetrievalBaselinePromotionFromRunRequest,\n RAGRetrievalBaselinePromotionRequest,\n RAGRetrievalBaselineRevertRequest,\n RAGRetrievalReleaseIncidentAcknowledgeRequest,\n RAGRetrievalReleaseDecisionActionRequest,\n RAGRetrievalBaselineResponse,\n RAGRetrievalPromotionCandidateListResponse,\n RAGRetrievalReleaseDecisionListResponse,\n RAGRetrievalLaneHandoffDecisionListResponse,\n RAGRetrievalLaneHandoffDecisionRequest,\n RAGRetrievalLaneHandoffDecisionResponse,\n RAGRetrievalLaneHandoffAutoCompletePolicyHistoryResponse,\n RAGRetrievalReleaseLanePolicyHistoryResponse,\n RAGRetrievalBaselineGatePolicyHistoryResponse,\n RAGRetrievalReleaseLaneEscalationPolicyHistoryResponse,\n RAGRetrievalLaneHandoffIncidentHistoryResponse,\n RAGRetrievalLaneHandoffIncidentListResponse,\n RAGRetrievalLaneHandoffIncidentStatusResponse,\n RAGRetrievalLaneHandoffListResponse,\n RAGRetrievalLaneHandoffStatusResponse,\n RAGRetrievalIncidentRemediationDecisionListResponse,\n RAGRetrievalIncidentRemediationDecisionRequest,\n RAGRetrievalIncidentRemediationExecutionHistoryResponse,\n RAGRetrievalIncidentRemediationBulkExecutionRequest,\n RAGRetrievalIncidentRemediationBulkExecutionResponse,\n RAGRetrievalIncidentRemediationExecutionRequest,\n RAGRetrievalIncidentRemediationExecutionResponse,\n RAGRetrievalIncidentRemediationStatusResponse,\n RAGRetrievalReleaseGroupHistoryResponse,\n RAGRetrievalReleaseIncidentListResponse,\n RAGRetrievalReleaseIncidentStatusResponse,\n RAGRetrievalReleaseDriftStatusResponse,\n RAGRetrievalReleaseStatusResponse,\n RAGRetrievalComparisonHistoryResponse,\n RAGRetrievalComparisonRequest,\n RAGRetrievalComparisonResponse,\n RAGAdaptiveNativePlannerBenchmarkResponse,\n RAGAdaptiveNativePlannerBenchmarkSnapshotResponse,\n RAGNativeBackendComparisonBenchmarkResponse,\n RAGNativeBackendComparisonBenchmarkSnapshotResponse,\n RAGDocumentIngestInput,\n RAGDocumentChunk,\n RAGDocumentsResponse,\n RAGDocumentUrlIngestInput,\n RAGDocumentUploadIngestInput,\n RAGIngestResponse,\n RAGMutationResponse,\n RAGOperationsResponse,\n RAGSearchRequest,\n RAGSearchResponse,\n RAGSearchTracePrunePreviewResponse,\n RAGSearchTracePruneHistoryResponse,\n RAGSearchTracePruneResponse,\n RAGSearchTraceGroupHistoryResponse,\n RAGSearchTraceHistoryResponse,\n RAGSearchTraceStatsResponse,\n RAGStatusResponse,\n RAGSyncRunOptions,\n RAGSyncResponse,\n} from \"../../types/engine\";\nimport type {\n RAGClientOptions,\n RAGDetailedSearchResponse,\n RAGMaintenanceActionDescriptor,\n RAGMaintenanceOverview,\n RAGMaintenancePayload,\n} from \"../../types/client\";\nconst UNFOUND_INDEX = -1;\n\ntype FetchLike = typeof fetch;\n\nconst jsonHeaders: { \"Content-Type\": string } = {\n \"Content-Type\": \"application/json\",\n};\n\nconst normalizeBasePath = (path: string) =>\n path.endsWith(\"/\") ? path.slice(0, UNFOUND_INDEX) : path;\n\nconst parseJson = async <T>(response: Response) => {\n const payload: T = JSON.parse(await response.text());\n\n return payload;\n};\n\nconst isErrorPayload = (value: unknown): value is { error?: string } => {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n return !(\"error\" in value) || typeof value.error === \"string\";\n};\n\nconst toErrorMessage = async (response: Response) => {\n try {\n const payload = JSON.parse(await response.text());\n if (\n isErrorPayload(payload) &&\n typeof payload.error === \"string\" &&\n payload.error\n ) {\n return payload.error;\n }\n } catch {\n // fall through\n }\n\n return `Request failed with status ${response.status}`;\n};\n\nconst getMaintenanceSummary = (\n payload: RAGMaintenancePayload,\n): RAGBackendMaintenanceSummary | undefined => payload?.maintenance;\n\nconst getMaintenanceAdmin = (\n payload: RAGMaintenancePayload,\n): RAGAdminCapabilities | undefined => payload?.admin;\n\nexport const buildRAGMaintenanceOverview = (\n payload: RAGMaintenancePayload,\n): RAGMaintenanceOverview => {\n const summary = getMaintenanceSummary(payload);\n const admin = getMaintenanceAdmin(payload);\n const recommendations = summary?.recommendations ?? [];\n const blockingRecommendations = recommendations.filter(\n (entry) => entry.severity === \"error\",\n );\n const recommendedNow = recommendations.filter(\n (entry) => entry.severity !== \"info\",\n );\n const recommendedActions = new Set(\n recommendations.flatMap((entry) => (entry.action ? [entry.action] : [])),\n );\n const actionReason = (kind: \"analyze_backend\" | \"rebuild_native_index\") =>\n recommendations.find((entry) => entry.action === kind)?.message;\n\n const actions: RAGMaintenanceActionDescriptor[] = [\n {\n available: admin?.canAnalyzeBackend ?? false,\n kind: \"analyze_backend\",\n label: \"Analyze backend\",\n reason: actionReason(\"analyze_backend\"),\n recommended: recommendedActions.has(\"analyze_backend\"),\n },\n {\n available: admin?.canRebuildNativeIndex ?? false,\n kind: \"rebuild_native_index\",\n label: \"Rebuild native index\",\n reason: actionReason(\"rebuild_native_index\"),\n recommended: recommendedActions.has(\"rebuild_native_index\"),\n },\n ];\n\n return {\n activeJobCount: summary?.activeJobs.length ?? 0,\n actions,\n availableActions: actions.filter((action) => action.available),\n backend: summary?.backend,\n blockingRecommendations,\n criticalCount: blockingRecommendations.length,\n hasBlockingIssue: blockingRecommendations.length > 0,\n infoCount: recommendations.filter((entry) => entry.severity === \"info\")\n .length,\n primaryRecommendation: [...recommendations].sort((left, right) => {\n const severityRank = { error: 0, warning: 1, info: 2 } as const;\n return severityRank[left.severity] - severityRank[right.severity];\n })[0],\n recentlyCompletedActions: (summary?.recentActions ?? []).filter(\n (action) => action.status === \"completed\",\n ),\n recommendationCount: recommendations.length,\n recommendations,\n recommendedNow,\n warningCount: recommendations.filter(\n (entry) => entry.severity === \"warning\",\n ).length,\n };\n};\n\nexport const createRAGClient = (options: RAGClientOptions) => {\n const basePath = normalizeBasePath(options.path);\n const fetchImpl = options.fetch ?? fetch;\n\n const search = async <IncludeTrace extends boolean | undefined = undefined>(\n input: RAGSearchRequest & { includeTrace?: IncludeTrace },\n ): Promise<\n IncludeTrace extends true ? RAGDetailedSearchResponse : RAGSource[]\n > => {\n const response = await fetchImpl(`${basePath}/search`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGSearchResponse>(response);\n\n if (!payload.ok) {\n throw new Error(payload.error ?? \"RAG search failed\");\n }\n\n if (input.includeTrace === true) {\n return {\n results: payload.results ?? [],\n trace: payload.trace,\n } as IncludeTrace extends true ? RAGDetailedSearchResponse : RAGSource[];\n }\n\n return (payload.results ?? []) as IncludeTrace extends true\n ? RAGDetailedSearchResponse\n : RAGSource[];\n };\n\n return {\n async backends() {\n const response = await fetchImpl(`${basePath}/backends`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGBackendsResponse>(response);\n },\n async clearIndex() {\n const response = await fetchImpl(`${basePath}/index`, {\n method: \"DELETE\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<{ ok: boolean }>(response);\n },\n async createDocument(input: RAGDocumentIngestInput[\"documents\"][number]) {\n const response = await fetchImpl(`${basePath}/documents`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async deleteDocument(id: string) {\n const response = await fetchImpl(\n `${basePath}/documents/${encodeURIComponent(id)}`,\n {\n method: \"DELETE\",\n },\n );\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async documentChunks(id: string) {\n const response = await fetchImpl(\n `${basePath}/documents/${encodeURIComponent(id)}/chunks`,\n );\n\n if (!response.ok) {\n const error = await toErrorMessage(response);\n\n const errorResponse: RAGDocumentChunksResponse = {\n error,\n ok: false,\n };\n\n return errorResponse;\n }\n\n return parseJson<RAGDocumentChunksResponse>(response);\n },\n async documents(kind?: string) {\n const query = kind ? `?kind=${encodeURIComponent(kind)}` : \"\";\n const response = await fetchImpl(`${basePath}/documents${query}`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGDocumentsResponse>(response);\n },\n async evaluate(input: RAGEvaluationInput) {\n const response = await fetchImpl(`${basePath}/evaluate`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGEvaluationResponse>(response);\n },\n async evaluateStream(\n input: RAGEvaluationInput,\n options?: {\n onStart?: (event: { total: number }) => void;\n onCase?: (event: {\n caseIndex: number;\n total: number;\n caseResult: RAGEvaluationCaseResult;\n }) => void;\n signal?: AbortSignal;\n },\n ): Promise<RAGEvaluationResponse> {\n const response = await fetchImpl(`${basePath}/evaluate/stream`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n signal: options?.signal,\n });\n\n if (!response.ok || !response.body) {\n throw new Error(await toErrorMessage(response));\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let result: RAGEvaluationResponse | null = null;\n let streamError: string | null = null;\n\n const handleEvent = (rawEvent: string) => {\n let eventName = \"message\";\n const dataLines: string[] = [];\n for (const line of rawEvent.split(\"\\n\")) {\n if (line.startsWith(\"event:\")) {\n eventName = line.slice(\"event:\".length).trim();\n } else if (line.startsWith(\"data:\")) {\n dataLines.push(line.slice(\"data:\".length).trim());\n }\n }\n if (dataLines.length === 0) {\n return;\n }\n const payload = JSON.parse(dataLines.join(\"\\n\")) as unknown;\n if (eventName === \"start\") {\n options?.onStart?.(payload as { total: number });\n } else if (eventName === \"case\") {\n options?.onCase?.(\n payload as {\n caseIndex: number;\n total: number;\n caseResult: RAGEvaluationCaseResult;\n },\n );\n } else if (eventName === \"result\") {\n result = payload as RAGEvaluationResponse;\n } else if (eventName === \"error\") {\n streamError =\n (payload as { error?: string }).error ??\n \"RAG evaluation stream failed\";\n }\n };\n\n for (;;) {\n // eslint-disable-next-line no-await-in-loop\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n buffer += decoder.decode(value, { stream: true });\n let separator = buffer.indexOf(\"\\n\\n\");\n while (separator !== -1) {\n const rawEvent = buffer.slice(0, separator);\n buffer = buffer.slice(separator + 2);\n if (rawEvent.trim().length > 0) {\n handleEvent(rawEvent);\n }\n separator = buffer.indexOf(\"\\n\\n\");\n }\n }\n if (buffer.trim().length > 0) {\n handleEvent(buffer);\n }\n\n if (streamError) {\n throw new Error(streamError);\n }\n if (!result) {\n throw new Error(\"RAG evaluation stream ended without a result\");\n }\n\n return result;\n },\n async compareRetrievals(input: RAGRetrievalComparisonRequest) {\n const response = await fetchImpl(`${basePath}/compare/retrieval`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGRetrievalComparisonResponse>(response);\n if (!payload.ok || !payload.comparison) {\n throw new Error(payload.error ?? \"RAG retrieval comparison failed\");\n }\n\n return payload.comparison;\n },\n async retrievalComparisonHistory(input?: {\n limit?: number;\n suiteId?: string;\n label?: string;\n winnerId?: string;\n groupKey?: string;\n tag?: string;\n }) {\n const searchParams = new URLSearchParams();\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.suiteId) {\n searchParams.set(\"suiteId\", input.suiteId);\n }\n if (input?.label) {\n searchParams.set(\"label\", input.label);\n }\n if (input?.winnerId) {\n searchParams.set(\"winnerId\", input.winnerId);\n }\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalComparisonHistoryResponse>(response);\n if (!payload.ok || !payload.runs) {\n throw new Error(\n payload.error ?? \"RAG retrieval comparison history failed\",\n );\n }\n\n return payload.runs;\n },\n async retrievalBaselines(input?: {\n groupKey?: string;\n tag?: string;\n limit?: number;\n status?: \"active\" | \"superseded\";\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.status) {\n searchParams.set(\"status\", input.status);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalBaselineListResponse>(response);\n if (!payload.ok || !payload.baselines) {\n throw new Error(payload.error ?? \"RAG retrieval baseline list failed\");\n }\n\n return payload.baselines;\n },\n async promoteRetrievalBaseline(\n input: RAGRetrievalBaselinePromotionRequest,\n ) {\n const payload = await this.promoteRetrievalBaselineDetailed(input);\n return payload.baseline!;\n },\n async promoteRetrievalBaselineDetailed(\n input: RAGRetrievalBaselinePromotionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/promote`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGRetrievalBaselineResponse>(response);\n if (!payload.ok || !payload.baseline) {\n throw new Error(\n payload.error ?? \"RAG retrieval baseline promotion failed\",\n );\n }\n\n return payload;\n },\n async promoteRetrievalBaselineToLane(\n input: RAGRetrievalBaselinePromotionRequest & {\n rolloutLabel: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n const payload = await this.promoteRetrievalBaselineToLaneDetailed(input);\n return payload.baseline!;\n },\n async promoteRetrievalBaselineToLaneDetailed(\n input: RAGRetrievalBaselinePromotionRequest & {\n rolloutLabel: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/promote-lane`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGRetrievalBaselineResponse>(response);\n if (!payload.ok || !payload.baseline) {\n throw new Error(\n payload.error ?? \"RAG retrieval rollout-lane promotion failed\",\n );\n }\n\n return payload;\n },\n async promoteRetrievalBaselineFromRun(\n input: RAGRetrievalBaselinePromotionFromRunRequest,\n ) {\n const payload = await this.promoteRetrievalBaselineFromRunDetailed(input);\n return payload.baseline!;\n },\n async promoteRetrievalBaselineFromRunDetailed(\n input: RAGRetrievalBaselinePromotionFromRunRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/promote-run`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGRetrievalBaselineResponse>(response);\n if (!payload.ok || !payload.baseline) {\n throw new Error(\n payload.error ?? \"RAG retrieval baseline promotion from run failed\",\n );\n }\n\n return payload;\n },\n async revertRetrievalBaseline(input: RAGRetrievalBaselineRevertRequest) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/revert`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGRetrievalBaselineResponse>(response);\n if (!payload.ok || !payload.baseline) {\n throw new Error(\n payload.error ?? \"RAG retrieval baseline revert failed\",\n );\n }\n\n return payload.baseline;\n },\n async retrievalBaselineDecisions(input?: {\n groupKey?: string;\n limit?: number;\n kind?: \"approve\" | \"promote\" | \"reject\" | \"revert\";\n freshnessStatus?: \"fresh\" | \"expired\" | \"not_applicable\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.kind) {\n searchParams.set(\"kind\", input.kind);\n }\n if (input?.freshnessStatus) {\n searchParams.set(\"freshnessStatus\", input.freshnessStatus);\n }\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/decisions${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseDecisionListResponse>(response);\n if (!payload.ok || !payload.decisions) {\n throw new Error(\n payload.error ?? \"RAG retrieval release decision list failed\",\n );\n }\n\n return payload.decisions;\n },\n async retrievalReleaseGroupHistory(input: {\n groupKey: string;\n decisionLimit?: number;\n baselineLimit?: number;\n benchmarkLimit?: number;\n runLimit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const searchParams = new URLSearchParams();\n searchParams.set(\"groupKey\", input.groupKey);\n if (typeof input.decisionLimit === \"number\") {\n searchParams.set(\"decisionLimit\", String(input.decisionLimit));\n }\n if (typeof input.baselineLimit === \"number\") {\n searchParams.set(\"baselineLimit\", String(input.baselineLimit));\n }\n if (typeof input.runLimit === \"number\") {\n searchParams.set(\"runLimit\", String(input.runLimit));\n }\n if (typeof input.benchmarkLimit === \"number\") {\n searchParams.set(\"benchmarkLimit\", String(input.benchmarkLimit));\n }\n if (input.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/release-history?${searchParams}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseGroupHistoryResponse>(response);\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"RAG retrieval release group history failed\",\n );\n }\n\n return payload;\n },\n async adaptiveNativePlannerBenchmark(input?: {\n limit?: number;\n runLimit?: number;\n label?: string;\n description?: string;\n groupKey?: string;\n corpusGroupKey?: string;\n }) {\n const searchParams = new URLSearchParams();\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (typeof input?.runLimit === \"number\") {\n searchParams.set(\"runLimit\", String(input.runLimit));\n }\n if (input?.label) {\n searchParams.set(\"label\", input.label);\n }\n if (input?.description) {\n searchParams.set(\"description\", input.description);\n }\n if (input?.groupKey) {\n searchParams.set(\"benchmarkGroupKey\", input.groupKey);\n }\n if (input?.corpusGroupKey) {\n searchParams.set(\"benchmarkCorpusGroupKey\", input.corpusGroupKey);\n }\n const suffix = searchParams.size ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/adaptive-native-planner${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGAdaptiveNativePlannerBenchmarkResponse>(response);\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"Adaptive native planner benchmark history failed\",\n );\n }\n\n return payload;\n },\n async runAdaptiveNativePlannerBenchmark(input?: {\n limit?: number;\n runLimit?: number;\n topK?: number;\n label?: string;\n description?: string;\n groupKey?: string;\n corpusGroupKey?: string;\n persistRun?: boolean;\n baselineRetrievalId?: string;\n candidateRetrievalId?: string;\n retrievals?: Array<{\n id: string;\n label?: string;\n retrieval?: Record<string, unknown> | string;\n }>;\n tags?: string[];\n metadata?: Record<string, unknown>;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/adaptive-native-planner/run`,\n {\n body: JSON.stringify({\n baselineRetrievalId: input?.baselineRetrievalId,\n candidateRetrievalId: input?.candidateRetrievalId,\n corpusGroupKey: input?.corpusGroupKey,\n description: input?.description,\n groupKey: input?.groupKey,\n label: input?.label,\n limit: input?.limit,\n metadata: input?.metadata,\n persistRun: input?.persistRun,\n retrievals: input?.retrievals,\n runLimit: input?.runLimit,\n tags: input?.tags,\n topK: input?.topK,\n }),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGAdaptiveNativePlannerBenchmarkResponse>(response);\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"Adaptive native planner benchmark run failed\",\n );\n }\n\n return payload;\n },\n async saveAdaptiveNativePlannerBenchmarkSnapshot(input?: {\n limit?: number;\n label?: string;\n description?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n snapshotMetadata?: Record<string, unknown>;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/adaptive-native-planner/snapshots`,\n {\n body: JSON.stringify({\n createdAt: input?.createdAt,\n description: input?.description,\n label: input?.label,\n limit: input?.limit,\n metadata: input?.metadata,\n snapshotMetadata: input?.snapshotMetadata,\n version: input?.version,\n }),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGAdaptiveNativePlannerBenchmarkSnapshotResponse>(\n response,\n );\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"Adaptive native planner benchmark snapshot failed\",\n );\n }\n\n return payload;\n },\n async nativeBackendComparisonBenchmark(input?: {\n limit?: number;\n runLimit?: number;\n label?: string;\n description?: string;\n groupKey?: string;\n corpusGroupKey?: string;\n }) {\n const searchParams = new URLSearchParams();\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (typeof input?.runLimit === \"number\") {\n searchParams.set(\"runLimit\", String(input.runLimit));\n }\n if (input?.label) {\n searchParams.set(\"label\", input.label);\n }\n if (input?.description) {\n searchParams.set(\"description\", input.description);\n }\n if (input?.groupKey) {\n searchParams.set(\"benchmarkGroupKey\", input.groupKey);\n }\n if (input?.corpusGroupKey) {\n searchParams.set(\"benchmarkCorpusGroupKey\", input.corpusGroupKey);\n }\n const suffix = searchParams.size ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/native-backend-comparison${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGNativeBackendComparisonBenchmarkResponse>(response);\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"Native backend comparison benchmark history failed\",\n );\n }\n\n return payload;\n },\n async runNativeBackendComparisonBenchmark(input?: {\n limit?: number;\n runLimit?: number;\n topK?: number;\n label?: string;\n description?: string;\n groupKey?: string;\n corpusGroupKey?: string;\n persistRun?: boolean;\n baselineRetrievalId?: string;\n candidateRetrievalId?: string;\n retrievals?: Array<{\n id: string;\n label?: string;\n retrieval?: Record<string, unknown> | string;\n }>;\n tags?: string[];\n metadata?: Record<string, unknown>;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/native-backend-comparison/run`,\n {\n body: JSON.stringify({\n baselineRetrievalId: input?.baselineRetrievalId,\n candidateRetrievalId: input?.candidateRetrievalId,\n corpusGroupKey: input?.corpusGroupKey,\n description: input?.description,\n groupKey: input?.groupKey,\n label: input?.label,\n limit: input?.limit,\n metadata: input?.metadata,\n persistRun: input?.persistRun,\n retrievals: input?.retrievals,\n runLimit: input?.runLimit,\n tags: input?.tags,\n topK: input?.topK,\n }),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGNativeBackendComparisonBenchmarkResponse>(response);\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"Native backend comparison benchmark run failed\",\n );\n }\n\n return payload;\n },\n async saveNativeBackendComparisonBenchmarkSnapshot(input?: {\n limit?: number;\n label?: string;\n description?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n snapshotMetadata?: Record<string, unknown>;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/native-backend-comparison/snapshots`,\n {\n body: JSON.stringify({\n createdAt: input?.createdAt,\n description: input?.description,\n label: input?.label,\n limit: input?.limit,\n metadata: input?.metadata,\n snapshotMetadata: input?.snapshotMetadata,\n version: input?.version,\n }),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGNativeBackendComparisonBenchmarkSnapshotResponse>(\n response,\n );\n if (!payload.ok) {\n throw new Error(\n payload.error ??\n \"Native backend comparison benchmark snapshot failed\",\n );\n }\n\n return payload;\n },\n async retrievalLaneHandoffs(input?: {\n groupKey?: string;\n sourceRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n limit?: number;\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (input?.sourceRolloutLabel) {\n searchParams.set(\"sourceRolloutLabel\", input.sourceRolloutLabel);\n }\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffListResponse>(response);\n if (!payload.ok || !payload.handoffs) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff list failed\",\n );\n }\n\n return payload.handoffs;\n },\n async retrievalLaneHandoffDecisions(input?: {\n groupKey?: string;\n sourceRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n kind?: \"approve\" | \"reject\" | \"complete\";\n limit?: number;\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (input?.sourceRolloutLabel) {\n searchParams.set(\"sourceRolloutLabel\", input.sourceRolloutLabel);\n }\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n if (input?.kind) {\n searchParams.set(\"kind\", input.kind);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/decisions${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffDecisionListResponse>(response);\n if (!payload.ok || !payload.decisions) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff decision list failed\",\n );\n }\n\n return payload.decisions;\n },\n async retrievalLaneHandoffIncidents(input?: {\n groupKey?: string;\n limit?: number;\n status?: \"open\" | \"resolved\";\n severity?: \"warning\" | \"critical\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) searchParams.set(\"groupKey\", input.groupKey);\n if (typeof input?.limit === \"number\")\n searchParams.set(\"limit\", String(input.limit));\n if (input?.status) searchParams.set(\"status\", input.status);\n if (input?.severity) searchParams.set(\"severity\", input.severity);\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/incidents${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff incident list failed\",\n );\n }\n\n return payload.incidents;\n },\n async retrievalLaneHandoffIncidentHistory(input?: {\n action?: \"opened\" | \"acknowledged\" | \"unacknowledged\" | \"resolved\";\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/incidents/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffIncidentHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff incident history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalLaneHandoffAutoCompletePolicyHistory(input?: {\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/policies/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffAutoCompletePolicyHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval lane handoff auto-complete policy history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalReleaseLanePolicyHistory(input?: {\n groupKey?: string;\n limit?: number;\n rolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n scope?: \"rollout_label\" | \"group_rollout_label\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/release-policies/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseLanePolicyHistoryResponse>(response);\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ?? \"RAG retrieval release lane policy history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalBaselineGatePolicyHistory(input?: {\n groupKey?: string;\n limit?: number;\n rolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n scope?: \"rollout_label\" | \"group_rollout_label\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/gate-policies/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalBaselineGatePolicyHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ?? \"RAG retrieval baseline gate policy history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalReleaseLaneEscalationPolicyHistory(input?: {\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/escalation-policies/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseLaneEscalationPolicyHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval release lane escalation policy history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalReleaseIncidentPolicyHistory(input?: {\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incident-policies/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseLaneEscalationPolicyHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval release incident policy history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalReleaseIncidentStatus() {\n const response = await fetchImpl(`${basePath}/status/release/incidents`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalReleaseIncidentStatusResponse>(response);\n },\n async retrievalIncidentRemediationStatus() {\n const response = await fetchImpl(\n `${basePath}/status/release/remediations`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalIncidentRemediationStatusResponse>(response);\n },\n async retrievalLaneHandoffIncidentStatus() {\n const response = await fetchImpl(`${basePath}/status/handoffs/incidents`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalLaneHandoffIncidentStatusResponse>(response);\n },\n async acknowledgeRetrievalLaneHandoffIncident(\n input: RAGRetrievalReleaseIncidentAcknowledgeRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/incidents/acknowledge`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ??\n \"RAG retrieval lane handoff incident acknowledgement failed\",\n );\n }\n\n return payload.incidents;\n },\n async unacknowledgeRetrievalLaneHandoffIncident(input: {\n incidentId: string;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/incidents/unacknowledge`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ??\n \"RAG retrieval lane handoff incident unacknowledge failed\",\n );\n }\n\n return payload.incidents;\n },\n async resolveRetrievalLaneHandoffIncident(input: {\n incidentId: string;\n resolvedAt?: number;\n resolvedBy?: string;\n resolutionNotes?: string;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/incidents/resolve`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff incident resolve failed\",\n );\n }\n\n return payload.incidents;\n },\n async decideRetrievalLaneHandoff(\n input: RAGRetrievalLaneHandoffDecisionRequest,\n ) {\n const payload = await this.decideRetrievalLaneHandoffDetailed(input);\n if (!payload.decision) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff decision failed\",\n );\n }\n return payload.decision;\n },\n async decideRetrievalLaneHandoffDetailed(\n input: RAGRetrievalLaneHandoffDecisionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/decide`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalLaneHandoffDecisionResponse>(response);\n },\n async retrievalReleaseIncidents(input?: {\n groupKey?: string;\n limit?: number;\n status?: \"open\" | \"resolved\";\n severity?: \"warning\" | \"critical\";\n kind?:\n | \"approval_expired\"\n | \"baseline_regression\"\n | \"gate_failure\"\n | \"handoff_stale\";\n acknowledged?: boolean;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.status) {\n searchParams.set(\"status\", input.status);\n }\n if (input?.severity) {\n searchParams.set(\"severity\", input.severity);\n }\n if (input?.kind) {\n searchParams.set(\"kind\", input.kind);\n }\n if (typeof input?.acknowledged === \"boolean\") {\n searchParams.set(\"acknowledged\", String(input.acknowledged));\n }\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ?? \"RAG retrieval release incident list failed\",\n );\n }\n\n return payload.incidents;\n },\n async retrievalIncidentRemediationDecisions(input?: {\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n remediationKind?: RAGRetrievalIncidentRemediationDecisionRequest[\"remediationKind\"];\n status?: \"planned\" | \"applied\" | \"dismissed\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/remediations${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalIncidentRemediationDecisionListResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval incident remediation decision list failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalIncidentRemediationExecutions(input?: {\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n actionKind?: RAGRetrievalIncidentRemediationExecutionRequest[\"action\"][\"kind\"];\n code?: NonNullable<\n RAGRetrievalIncidentRemediationExecutionResponse[\"execution\"]\n >[\"code\"];\n blockedByGuardrail?: boolean;\n idempotentReplay?: boolean;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/remediations/executions${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalIncidentRemediationExecutionHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval incident remediation execution history failed\",\n );\n }\n\n return payload.records;\n },\n async recordRetrievalIncidentRemediationDecision(\n input: RAGRetrievalIncidentRemediationDecisionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/remediations`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalIncidentRemediationDecisionListResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval incident remediation decision record failed\",\n );\n }\n\n return payload.records;\n },\n async executeRetrievalIncidentRemediation(\n input: RAGRetrievalIncidentRemediationExecutionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/remediations/execute`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalIncidentRemediationExecutionResponse>(\n response,\n );\n if (!payload.ok || !payload.execution) {\n throw new Error(\n payload.error ??\n \"RAG retrieval incident remediation execution failed\",\n );\n }\n\n return payload;\n },\n async bulkExecuteRetrievalIncidentRemediations(\n input: RAGRetrievalIncidentRemediationBulkExecutionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/remediations/execute/bulk`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalIncidentRemediationBulkExecutionResponse>(\n response,\n );\n if (!payload.ok || !payload.results) {\n throw new Error(\n payload.error ??\n \"Bulk RAG retrieval incident remediation execution failed\",\n );\n }\n\n return payload.results;\n },\n async acknowledgeRetrievalReleaseIncident(\n input: RAGRetrievalReleaseIncidentAcknowledgeRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/acknowledge`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ??\n \"RAG retrieval release incident acknowledgement failed\",\n );\n }\n\n return payload.incidents;\n },\n async unacknowledgeRetrievalReleaseIncident(input: { incidentId: string }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/unacknowledge`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ??\n \"RAG retrieval release incident unacknowledge failed\",\n );\n }\n\n return payload.incidents;\n },\n async resolveRetrievalReleaseIncident(input: {\n incidentId: string;\n resolvedAt?: number;\n resolvedBy?: string;\n resolutionNotes?: string;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/resolve`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ?? \"RAG retrieval release incident resolve failed\",\n );\n }\n\n return payload.incidents;\n },\n async retrievalPromotionCandidates(input?: {\n groupKey?: string;\n limit?: number;\n tag?: string;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n approved?: boolean;\n ready?: boolean;\n blocked?: boolean;\n reviewStatus?: \"approved\" | \"blocked\" | \"needs_review\" | \"ready\";\n freshnessStatus?: \"fresh\" | \"expired\" | \"not_applicable\";\n sortBy?: \"approvalFreshness\" | \"finishedAt\" | \"gateSeverity\" | \"priority\";\n sortDirection?: \"asc\" | \"desc\";\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n if (typeof input?.approved === \"boolean\") {\n searchParams.set(\"approved\", String(input.approved));\n }\n if (typeof input?.ready === \"boolean\") {\n searchParams.set(\"ready\", String(input.ready));\n }\n if (typeof input?.blocked === \"boolean\") {\n searchParams.set(\"blocked\", String(input.blocked));\n }\n if (input?.reviewStatus) {\n searchParams.set(\"reviewStatus\", input.reviewStatus);\n }\n if (input?.freshnessStatus) {\n searchParams.set(\"freshnessStatus\", input.freshnessStatus);\n }\n if (input?.sortBy) {\n searchParams.set(\"sortBy\", input.sortBy);\n }\n if (input?.sortDirection) {\n searchParams.set(\"sortDirection\", input.sortDirection);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/candidates${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalPromotionCandidateListResponse>(response);\n if (!payload.ok || !payload.candidates) {\n throw new Error(\n payload.error ?? \"RAG retrieval promotion candidate list failed\",\n );\n }\n\n return payload.candidates;\n },\n async approveRetrievalCandidate(\n input: RAGRetrievalReleaseDecisionActionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/approve`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseDecisionListResponse>(response);\n if (!payload.ok || !payload.decisions) {\n throw new Error(payload.error ?? \"RAG retrieval approval failed\");\n }\n\n return payload.decisions;\n },\n async rejectRetrievalCandidate(\n input: RAGRetrievalReleaseDecisionActionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/reject`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseDecisionListResponse>(response);\n if (!payload.ok || !payload.decisions) {\n throw new Error(payload.error ?? \"RAG retrieval rejection failed\");\n }\n\n return payload.decisions;\n },\n async ingest(chunks: RAGDocumentChunk[]) {\n const response = await fetchImpl(`${basePath}/ingest`, {\n body: JSON.stringify({ chunks }),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGIngestResponse>(response);\n },\n async ingestDocuments(input: RAGDocumentIngestInput) {\n const response = await fetchImpl(`${basePath}/ingest`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGIngestResponse>(response);\n },\n async ingestUploads(input: RAGDocumentUploadIngestInput) {\n const response = await fetchImpl(`${basePath}/ingest`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGIngestResponse>(response);\n },\n async ingestUrls(input: RAGDocumentUrlIngestInput) {\n const response = await fetchImpl(`${basePath}/ingest`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGIngestResponse>(response);\n },\n async analyzeBackend() {\n const response = await fetchImpl(`${basePath}/backend/analyze`, {\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async ops() {\n const response = await fetchImpl(`${basePath}/ops`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGOperationsResponse>(response);\n },\n async searchTraceHistory(input?: {\n query?: string;\n groupKey?: string;\n tag?: string;\n limit?: number;\n }) {\n const searchParams = new URLSearchParams();\n if (input?.query) {\n searchParams.set(\"query\", input.query);\n }\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(`${basePath}/traces${suffix}`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGSearchTraceHistoryResponse>(response);\n if (!payload.ok || !payload.history) {\n throw new Error(payload.error ?? \"RAG search trace history failed\");\n }\n\n return payload.history;\n },\n async searchTraceGroups(input?: { tag?: string; limit?: number }) {\n const searchParams = new URLSearchParams();\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(`${basePath}/traces/groups${suffix}`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGSearchTraceGroupHistoryResponse>(response);\n if (!payload.ok || !payload.history) {\n throw new Error(\n payload.error ?? \"RAG search trace group history failed\",\n );\n }\n\n return payload.history;\n },\n async searchTraceStats(input?: { tag?: string }) {\n const searchParams = new URLSearchParams();\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(`${basePath}/traces/stats${suffix}`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGSearchTraceStatsResponse>(response);\n if (!payload.ok || !payload.stats) {\n throw new Error(payload.error ?? \"RAG search trace stats failed\");\n }\n\n return payload.stats;\n },\n async previewSearchTracePrune(input?: {\n maxAgeMs?: number;\n maxRecordsPerQuery?: number;\n maxRecordsPerGroup?: number;\n now?: number;\n tag?: string;\n }) {\n const response = await fetchImpl(`${basePath}/traces/prune/preview`, {\n body: JSON.stringify(input ?? {}),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGSearchTracePrunePreviewResponse>(response);\n if (!payload.ok || !payload.preview) {\n throw new Error(\n payload.error ?? \"RAG search trace prune preview failed\",\n );\n }\n\n return payload.preview;\n },\n async pruneSearchTraces(input?: {\n maxAgeMs?: number;\n maxRecordsPerQuery?: number;\n maxRecordsPerGroup?: number;\n now?: number;\n tag?: string;\n }) {\n const response = await fetchImpl(`${basePath}/traces/prune`, {\n body: JSON.stringify(input ?? {}),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGSearchTracePruneResponse>(response);\n if (!payload.ok || !payload.result) {\n throw new Error(payload.error ?? \"RAG search trace prune failed\");\n }\n\n return payload;\n },\n async searchTracePruneHistory(input?: {\n limit?: number;\n trigger?: \"manual\" | \"write\" | \"schedule\";\n }) {\n const searchParams = new URLSearchParams();\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.trigger) {\n searchParams.set(\"trigger\", input.trigger);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/traces/prune/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGSearchTracePruneHistoryResponse>(response);\n if (!payload.ok || !payload.runs) {\n throw new Error(\n payload.error ?? \"RAG search trace prune history failed\",\n );\n }\n\n return payload.runs;\n },\n async syncSources() {\n const response = await fetchImpl(`${basePath}/sync`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGSyncResponse>(response);\n },\n async syncAllSources(options?: RAGSyncRunOptions) {\n const response = await fetchImpl(`${basePath}/sync`, {\n body:\n options?.background === true\n ? JSON.stringify({ background: true })\n : undefined,\n headers: options?.background === true ? jsonHeaders : undefined,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n } satisfies RAGSyncResponse;\n }\n\n return parseJson<RAGSyncResponse>(response);\n },\n async syncSource(id: string, options?: RAGSyncRunOptions) {\n const response = await fetchImpl(\n `${basePath}/sync/${encodeURIComponent(id)}`,\n {\n body:\n options?.background === true\n ? JSON.stringify({ background: true })\n : undefined,\n headers: options?.background === true ? jsonHeaders : undefined,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n } satisfies RAGSyncResponse;\n }\n\n return parseJson<RAGSyncResponse>(response);\n },\n async reindexDocument(id: string) {\n const response = await fetchImpl(\n `${basePath}/reindex/documents/${encodeURIComponent(id)}`,\n {\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async reindexSource(source: string) {\n const response = await fetchImpl(`${basePath}/reindex/source`, {\n body: JSON.stringify({ source }),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async reseed() {\n const response = await fetchImpl(`${basePath}/reseed`, {\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async reset() {\n const response = await fetchImpl(`${basePath}/reset`, {\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async rebuildNativeIndex() {\n const response = await fetchImpl(`${basePath}/backend/reindex-native`, {\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n search,\n async searchWithTrace(input: RAGSearchRequest) {\n return search({ ...input, includeTrace: true });\n },\n /**\n * @deprecated Use `searchWithTrace` for trace-aware search responses.\n */\n async searchDetailed(input: RAGSearchRequest) {\n return search({ ...input, includeTrace: true });\n },\n async status() {\n const response = await fetchImpl(`${basePath}/status`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGStatusResponse>(response);\n },\n async statusMaintenance() {\n const response = await fetchImpl(`${basePath}/status/maintenance`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGStatusResponse>(response);\n },\n async retrievalReleaseStatus() {\n const response = await fetchImpl(`${basePath}/status/release`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseStatusResponse>(response);\n return payload.retrievalComparisons;\n },\n async retrievalReleaseDriftStatus() {\n const response = await fetchImpl(`${basePath}/status/release/drift`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalReleaseDriftStatusResponse>(response);\n },\n async retrievalLaneHandoffStatus() {\n const response = await fetchImpl(`${basePath}/status/handoffs`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalLaneHandoffStatusResponse>(response);\n },\n };\n};\n\nexport type RAGClient = ReturnType<typeof createRAGClient>;\n"
|
|
14
|
+
"import type {\n RAGSource,\n} from \"@absolutejs/ai\";\nimport type {\n RAGAdminCapabilities,\n RAGBackendsResponse,\n RAGBackendMaintenanceRecommendation,\n RAGBackendMaintenanceSummary,\n RAGDocumentChunksResponse,\n RAGEvaluationCaseResult,\n RAGEvaluationInput,\n RAGEvaluationResponse,\n RAGRetrievalBaselineListResponse,\n RAGRetrievalBaselinePromotionFromRunRequest,\n RAGRetrievalBaselinePromotionRequest,\n RAGRetrievalBaselineRevertRequest,\n RAGRetrievalReleaseIncidentAcknowledgeRequest,\n RAGRetrievalReleaseDecisionActionRequest,\n RAGRetrievalBaselineResponse,\n RAGRetrievalPromotionCandidateListResponse,\n RAGRetrievalReleaseDecisionListResponse,\n RAGRetrievalLaneHandoffDecisionListResponse,\n RAGRetrievalLaneHandoffDecisionRequest,\n RAGRetrievalLaneHandoffDecisionResponse,\n RAGRetrievalLaneHandoffAutoCompletePolicyHistoryResponse,\n RAGRetrievalReleaseLanePolicyHistoryResponse,\n RAGRetrievalBaselineGatePolicyHistoryResponse,\n RAGRetrievalReleaseLaneEscalationPolicyHistoryResponse,\n RAGRetrievalLaneHandoffIncidentHistoryResponse,\n RAGRetrievalLaneHandoffIncidentListResponse,\n RAGRetrievalLaneHandoffIncidentStatusResponse,\n RAGRetrievalLaneHandoffListResponse,\n RAGRetrievalLaneHandoffStatusResponse,\n RAGRetrievalIncidentRemediationDecisionListResponse,\n RAGRetrievalIncidentRemediationDecisionRequest,\n RAGRetrievalIncidentRemediationExecutionHistoryResponse,\n RAGRetrievalIncidentRemediationBulkExecutionRequest,\n RAGRetrievalIncidentRemediationBulkExecutionResponse,\n RAGRetrievalIncidentRemediationExecutionRequest,\n RAGRetrievalIncidentRemediationExecutionResponse,\n RAGRetrievalIncidentRemediationStatusResponse,\n RAGRetrievalReleaseGroupHistoryResponse,\n RAGRetrievalReleaseIncidentListResponse,\n RAGRetrievalReleaseIncidentStatusResponse,\n RAGRetrievalReleaseDriftStatusResponse,\n RAGRetrievalReleaseStatusResponse,\n RAGRetrievalComparisonHistoryResponse,\n RAGRetrievalComparisonRequest,\n RAGRetrievalComparisonResponse,\n RAGAdaptiveNativePlannerBenchmarkResponse,\n RAGAdaptiveNativePlannerBenchmarkSnapshotResponse,\n RAGNativeBackendComparisonBenchmarkResponse,\n RAGNativeBackendComparisonBenchmarkSnapshotResponse,\n RAGDocumentIngestInput,\n RAGDocumentChunk,\n RAGDocumentsResponse,\n RAGDocumentUrlIngestInput,\n RAGDocumentUploadIngestInput,\n RAGIngestResponse,\n RAGMutationResponse,\n RAGOperationsResponse,\n RAGSearchRequest,\n RAGSearchResponse,\n RAGSearchTracePrunePreviewResponse,\n RAGSearchTracePruneHistoryResponse,\n RAGSearchTracePruneResponse,\n RAGSearchTraceGroupHistoryResponse,\n RAGSearchTraceHistoryResponse,\n RAGSearchTraceStatsResponse,\n RAGStatusResponse,\n RAGSyncRunOptions,\n RAGSyncResponse,\n} from \"../../types/engine\";\nimport type {\n RAGClientOptions,\n RAGDetailedSearchResponse,\n RAGMaintenanceActionDescriptor,\n RAGMaintenanceOverview,\n RAGMaintenancePayload,\n} from \"../../types/client\";\nconst UNFOUND_INDEX = -1;\n\ntype FetchLike = typeof fetch;\n\nconst jsonHeaders: { \"Content-Type\": string } = {\n \"Content-Type\": \"application/json\",\n};\n\nconst normalizeBasePath = (path: string) =>\n path.endsWith(\"/\") ? path.slice(0, UNFOUND_INDEX) : path;\n\nconst parseJson = async <T>(response: Response) => {\n const payload: T = JSON.parse(await response.text());\n\n return payload;\n};\n\nconst isErrorPayload = (value: unknown): value is { error?: string } => {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n\n return !(\"error\" in value) || typeof value.error === \"string\";\n};\n\nconst toErrorMessage = async (response: Response) => {\n try {\n const payload = JSON.parse(await response.text());\n if (\n isErrorPayload(payload) &&\n typeof payload.error === \"string\" &&\n payload.error\n ) {\n return payload.error;\n }\n } catch {\n // fall through\n }\n\n return `Request failed with status ${response.status}`;\n};\n\nconst getMaintenanceSummary = (\n payload: RAGMaintenancePayload,\n): RAGBackendMaintenanceSummary | undefined => payload?.maintenance;\n\nconst getMaintenanceAdmin = (\n payload: RAGMaintenancePayload,\n): RAGAdminCapabilities | undefined => payload?.admin;\n\nexport const buildRAGMaintenanceOverview = (\n payload: RAGMaintenancePayload,\n): RAGMaintenanceOverview => {\n const summary = getMaintenanceSummary(payload);\n const admin = getMaintenanceAdmin(payload);\n const recommendations = summary?.recommendations ?? [];\n const blockingRecommendations = recommendations.filter(\n (entry) => entry.severity === \"error\",\n );\n const recommendedNow = recommendations.filter(\n (entry) => entry.severity !== \"info\",\n );\n const recommendedActions = new Set(\n recommendations.flatMap((entry) => (entry.action ? [entry.action] : [])),\n );\n const actionReason = (kind: \"analyze_backend\" | \"rebuild_native_index\") =>\n recommendations.find((entry) => entry.action === kind)?.message;\n\n const actions: RAGMaintenanceActionDescriptor[] = [\n {\n available: admin?.canAnalyzeBackend ?? false,\n kind: \"analyze_backend\",\n label: \"Analyze backend\",\n reason: actionReason(\"analyze_backend\"),\n recommended: recommendedActions.has(\"analyze_backend\"),\n },\n {\n available: admin?.canRebuildNativeIndex ?? false,\n kind: \"rebuild_native_index\",\n label: \"Rebuild native index\",\n reason: actionReason(\"rebuild_native_index\"),\n recommended: recommendedActions.has(\"rebuild_native_index\"),\n },\n ];\n\n return {\n activeJobCount: summary?.activeJobs.length ?? 0,\n actions,\n availableActions: actions.filter((action) => action.available),\n backend: summary?.backend,\n blockingRecommendations,\n criticalCount: blockingRecommendations.length,\n hasBlockingIssue: blockingRecommendations.length > 0,\n infoCount: recommendations.filter((entry) => entry.severity === \"info\")\n .length,\n primaryRecommendation: [...recommendations].sort((left, right) => {\n const severityRank = { error: 0, warning: 1, info: 2 } as const;\n return severityRank[left.severity] - severityRank[right.severity];\n })[0],\n recentlyCompletedActions: (summary?.recentActions ?? []).filter(\n (action) => action.status === \"completed\",\n ),\n recommendationCount: recommendations.length,\n recommendations,\n recommendedNow,\n warningCount: recommendations.filter(\n (entry) => entry.severity === \"warning\",\n ).length,\n };\n};\n\nexport const createRAGClient = (options: RAGClientOptions) => {\n const basePath = normalizeBasePath(options.path);\n const fetchImpl = options.fetch ?? fetch;\n\n const search = async <IncludeTrace extends boolean | undefined = undefined>(\n input: RAGSearchRequest & { includeTrace?: IncludeTrace },\n ): Promise<\n IncludeTrace extends true ? RAGDetailedSearchResponse : RAGSource[]\n > => {\n const response = await fetchImpl(`${basePath}/search`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGSearchResponse>(response);\n\n if (!payload.ok) {\n throw new Error(payload.error ?? \"RAG search failed\");\n }\n\n if (input.includeTrace === true) {\n return {\n results: payload.results ?? [],\n trace: payload.trace,\n } as IncludeTrace extends true ? RAGDetailedSearchResponse : RAGSource[];\n }\n\n return (payload.results ?? []) as IncludeTrace extends true\n ? RAGDetailedSearchResponse\n : RAGSource[];\n };\n\n return {\n async backends() {\n const response = await fetchImpl(`${basePath}/backends`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGBackendsResponse>(response);\n },\n async clearIndex() {\n const response = await fetchImpl(`${basePath}/index`, {\n method: \"DELETE\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<{ ok: boolean }>(response);\n },\n async createDocument(input: RAGDocumentIngestInput[\"documents\"][number]) {\n const response = await fetchImpl(`${basePath}/documents`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async deleteDocument(id: string) {\n const response = await fetchImpl(\n `${basePath}/documents/${encodeURIComponent(id)}`,\n {\n method: \"DELETE\",\n },\n );\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async documentChunks(id: string) {\n const response = await fetchImpl(\n `${basePath}/documents/${encodeURIComponent(id)}/chunks`,\n );\n\n if (!response.ok) {\n const error = await toErrorMessage(response);\n\n const errorResponse: RAGDocumentChunksResponse = {\n error,\n ok: false,\n };\n\n return errorResponse;\n }\n\n return parseJson<RAGDocumentChunksResponse>(response);\n },\n async documents(kind?: string) {\n const query = kind ? `?kind=${encodeURIComponent(kind)}` : \"\";\n const response = await fetchImpl(`${basePath}/documents${query}`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGDocumentsResponse>(response);\n },\n async evaluate(input: RAGEvaluationInput) {\n const response = await fetchImpl(`${basePath}/evaluate`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGEvaluationResponse>(response);\n },\n async evaluateStream(\n input: RAGEvaluationInput,\n options?: {\n onStart?: (event: { total: number }) => void;\n onCase?: (event: {\n caseIndex: number;\n total: number;\n caseResult: RAGEvaluationCaseResult;\n }) => void;\n signal?: AbortSignal;\n },\n ): Promise<RAGEvaluationResponse> {\n const response = await fetchImpl(`${basePath}/evaluate/stream`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n signal: options?.signal,\n });\n\n if (!response.ok || !response.body) {\n throw new Error(await toErrorMessage(response));\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let result: RAGEvaluationResponse | null = null;\n let streamError: string | null = null;\n\n const handleEvent = (rawEvent: string) => {\n let eventName = \"message\";\n const dataLines: string[] = [];\n for (const line of rawEvent.split(\"\\n\")) {\n if (line.startsWith(\"event:\")) {\n eventName = line.slice(\"event:\".length).trim();\n } else if (line.startsWith(\"data:\")) {\n dataLines.push(line.slice(\"data:\".length).trim());\n }\n }\n if (dataLines.length === 0) {\n return;\n }\n const payload = JSON.parse(dataLines.join(\"\\n\")) as unknown;\n if (eventName === \"start\") {\n options?.onStart?.(payload as { total: number });\n } else if (eventName === \"case\") {\n options?.onCase?.(\n payload as {\n caseIndex: number;\n total: number;\n caseResult: RAGEvaluationCaseResult;\n },\n );\n } else if (eventName === \"result\") {\n result = payload as RAGEvaluationResponse;\n } else if (eventName === \"error\") {\n streamError =\n (payload as { error?: string }).error ??\n \"RAG evaluation stream failed\";\n }\n };\n\n for (;;) {\n // eslint-disable-next-line no-await-in-loop\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n buffer += decoder.decode(value, { stream: true });\n let separator = buffer.indexOf(\"\\n\\n\");\n while (separator !== -1) {\n const rawEvent = buffer.slice(0, separator);\n buffer = buffer.slice(separator + 2);\n if (rawEvent.trim().length > 0) {\n handleEvent(rawEvent);\n }\n separator = buffer.indexOf(\"\\n\\n\");\n }\n }\n if (buffer.trim().length > 0) {\n handleEvent(buffer);\n }\n\n if (streamError) {\n throw new Error(streamError);\n }\n if (!result) {\n throw new Error(\"RAG evaluation stream ended without a result\");\n }\n\n return result;\n },\n async compareRetrievals(input: RAGRetrievalComparisonRequest) {\n const response = await fetchImpl(`${basePath}/compare/retrieval`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGRetrievalComparisonResponse>(response);\n if (!payload.ok || !payload.comparison) {\n throw new Error(payload.error ?? \"RAG retrieval comparison failed\");\n }\n\n return payload.comparison;\n },\n async retrievalComparisonHistory(input?: {\n limit?: number;\n suiteId?: string;\n label?: string;\n winnerId?: string;\n groupKey?: string;\n tag?: string;\n }) {\n const searchParams = new URLSearchParams();\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.suiteId) {\n searchParams.set(\"suiteId\", input.suiteId);\n }\n if (input?.label) {\n searchParams.set(\"label\", input.label);\n }\n if (input?.winnerId) {\n searchParams.set(\"winnerId\", input.winnerId);\n }\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalComparisonHistoryResponse>(response);\n if (!payload.ok || !payload.runs) {\n throw new Error(\n payload.error ?? \"RAG retrieval comparison history failed\",\n );\n }\n\n return payload.runs;\n },\n async retrievalBaselines(input?: {\n groupKey?: string;\n tag?: string;\n limit?: number;\n status?: \"active\" | \"superseded\";\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.status) {\n searchParams.set(\"status\", input.status);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalBaselineListResponse>(response);\n if (!payload.ok || !payload.baselines) {\n throw new Error(payload.error ?? \"RAG retrieval baseline list failed\");\n }\n\n return payload.baselines;\n },\n async promoteRetrievalBaseline(\n input: RAGRetrievalBaselinePromotionRequest,\n ) {\n const payload = await this.promoteRetrievalBaselineDetailed(input);\n return payload.baseline!;\n },\n async promoteRetrievalBaselineDetailed(\n input: RAGRetrievalBaselinePromotionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/promote`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGRetrievalBaselineResponse>(response);\n if (!payload.ok || !payload.baseline) {\n throw new Error(\n payload.error ?? \"RAG retrieval baseline promotion failed\",\n );\n }\n\n return payload;\n },\n async promoteRetrievalBaselineToLane(\n input: RAGRetrievalBaselinePromotionRequest & {\n rolloutLabel: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n const payload = await this.promoteRetrievalBaselineToLaneDetailed(input);\n return payload.baseline!;\n },\n async promoteRetrievalBaselineToLaneDetailed(\n input: RAGRetrievalBaselinePromotionRequest & {\n rolloutLabel: \"canary\" | \"stable\" | \"rollback_target\";\n },\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/promote-lane`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGRetrievalBaselineResponse>(response);\n if (!payload.ok || !payload.baseline) {\n throw new Error(\n payload.error ?? \"RAG retrieval rollout-lane promotion failed\",\n );\n }\n\n return payload;\n },\n async promoteRetrievalBaselineFromRun(\n input: RAGRetrievalBaselinePromotionFromRunRequest,\n ) {\n const payload = await this.promoteRetrievalBaselineFromRunDetailed(input);\n return payload.baseline!;\n },\n async promoteRetrievalBaselineFromRunDetailed(\n input: RAGRetrievalBaselinePromotionFromRunRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/promote-run`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGRetrievalBaselineResponse>(response);\n if (!payload.ok || !payload.baseline) {\n throw new Error(\n payload.error ?? \"RAG retrieval baseline promotion from run failed\",\n );\n }\n\n return payload;\n },\n async revertRetrievalBaseline(input: RAGRetrievalBaselineRevertRequest) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/revert`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGRetrievalBaselineResponse>(response);\n if (!payload.ok || !payload.baseline) {\n throw new Error(\n payload.error ?? \"RAG retrieval baseline revert failed\",\n );\n }\n\n return payload.baseline;\n },\n async retrievalBaselineDecisions(input?: {\n groupKey?: string;\n limit?: number;\n kind?: \"approve\" | \"promote\" | \"reject\" | \"revert\";\n freshnessStatus?: \"fresh\" | \"expired\" | \"not_applicable\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.kind) {\n searchParams.set(\"kind\", input.kind);\n }\n if (input?.freshnessStatus) {\n searchParams.set(\"freshnessStatus\", input.freshnessStatus);\n }\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/decisions${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseDecisionListResponse>(response);\n if (!payload.ok || !payload.decisions) {\n throw new Error(\n payload.error ?? \"RAG retrieval release decision list failed\",\n );\n }\n\n return payload.decisions;\n },\n async retrievalReleaseGroupHistory(input: {\n groupKey: string;\n decisionLimit?: number;\n baselineLimit?: number;\n benchmarkLimit?: number;\n runLimit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const searchParams = new URLSearchParams();\n searchParams.set(\"groupKey\", input.groupKey);\n if (typeof input.decisionLimit === \"number\") {\n searchParams.set(\"decisionLimit\", String(input.decisionLimit));\n }\n if (typeof input.baselineLimit === \"number\") {\n searchParams.set(\"baselineLimit\", String(input.baselineLimit));\n }\n if (typeof input.runLimit === \"number\") {\n searchParams.set(\"runLimit\", String(input.runLimit));\n }\n if (typeof input.benchmarkLimit === \"number\") {\n searchParams.set(\"benchmarkLimit\", String(input.benchmarkLimit));\n }\n if (input.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/release-history?${searchParams}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseGroupHistoryResponse>(response);\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"RAG retrieval release group history failed\",\n );\n }\n\n return payload;\n },\n async adaptiveNativePlannerBenchmark(input?: {\n limit?: number;\n runLimit?: number;\n label?: string;\n description?: string;\n groupKey?: string;\n corpusGroupKey?: string;\n }) {\n const searchParams = new URLSearchParams();\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (typeof input?.runLimit === \"number\") {\n searchParams.set(\"runLimit\", String(input.runLimit));\n }\n if (input?.label) {\n searchParams.set(\"label\", input.label);\n }\n if (input?.description) {\n searchParams.set(\"description\", input.description);\n }\n if (input?.groupKey) {\n searchParams.set(\"benchmarkGroupKey\", input.groupKey);\n }\n if (input?.corpusGroupKey) {\n searchParams.set(\"benchmarkCorpusGroupKey\", input.corpusGroupKey);\n }\n const suffix = searchParams.size ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/adaptive-native-planner${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGAdaptiveNativePlannerBenchmarkResponse>(response);\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"Adaptive native planner benchmark history failed\",\n );\n }\n\n return payload;\n },\n async runAdaptiveNativePlannerBenchmark(input?: {\n limit?: number;\n runLimit?: number;\n topK?: number;\n label?: string;\n description?: string;\n groupKey?: string;\n corpusGroupKey?: string;\n persistRun?: boolean;\n baselineRetrievalId?: string;\n candidateRetrievalId?: string;\n retrievals?: Array<{\n id: string;\n label?: string;\n retrieval?: Record<string, unknown> | string;\n }>;\n tags?: string[];\n metadata?: Record<string, unknown>;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/adaptive-native-planner/run`,\n {\n body: JSON.stringify({\n baselineRetrievalId: input?.baselineRetrievalId,\n candidateRetrievalId: input?.candidateRetrievalId,\n corpusGroupKey: input?.corpusGroupKey,\n description: input?.description,\n groupKey: input?.groupKey,\n label: input?.label,\n limit: input?.limit,\n metadata: input?.metadata,\n persistRun: input?.persistRun,\n retrievals: input?.retrievals,\n runLimit: input?.runLimit,\n tags: input?.tags,\n topK: input?.topK,\n }),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGAdaptiveNativePlannerBenchmarkResponse>(response);\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"Adaptive native planner benchmark run failed\",\n );\n }\n\n return payload;\n },\n async saveAdaptiveNativePlannerBenchmarkSnapshot(input?: {\n limit?: number;\n label?: string;\n description?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n snapshotMetadata?: Record<string, unknown>;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/adaptive-native-planner/snapshots`,\n {\n body: JSON.stringify({\n createdAt: input?.createdAt,\n description: input?.description,\n label: input?.label,\n limit: input?.limit,\n metadata: input?.metadata,\n snapshotMetadata: input?.snapshotMetadata,\n version: input?.version,\n }),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGAdaptiveNativePlannerBenchmarkSnapshotResponse>(\n response,\n );\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"Adaptive native planner benchmark snapshot failed\",\n );\n }\n\n return payload;\n },\n async nativeBackendComparisonBenchmark(input?: {\n limit?: number;\n runLimit?: number;\n label?: string;\n description?: string;\n groupKey?: string;\n corpusGroupKey?: string;\n }) {\n const searchParams = new URLSearchParams();\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (typeof input?.runLimit === \"number\") {\n searchParams.set(\"runLimit\", String(input.runLimit));\n }\n if (input?.label) {\n searchParams.set(\"label\", input.label);\n }\n if (input?.description) {\n searchParams.set(\"description\", input.description);\n }\n if (input?.groupKey) {\n searchParams.set(\"benchmarkGroupKey\", input.groupKey);\n }\n if (input?.corpusGroupKey) {\n searchParams.set(\"benchmarkCorpusGroupKey\", input.corpusGroupKey);\n }\n const suffix = searchParams.size ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/native-backend-comparison${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGNativeBackendComparisonBenchmarkResponse>(response);\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"Native backend comparison benchmark history failed\",\n );\n }\n\n return payload;\n },\n async runNativeBackendComparisonBenchmark(input?: {\n limit?: number;\n runLimit?: number;\n topK?: number;\n label?: string;\n description?: string;\n groupKey?: string;\n corpusGroupKey?: string;\n persistRun?: boolean;\n baselineRetrievalId?: string;\n candidateRetrievalId?: string;\n retrievals?: Array<{\n id: string;\n label?: string;\n retrieval?: Record<string, unknown> | string;\n }>;\n tags?: string[];\n metadata?: Record<string, unknown>;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/native-backend-comparison/run`,\n {\n body: JSON.stringify({\n baselineRetrievalId: input?.baselineRetrievalId,\n candidateRetrievalId: input?.candidateRetrievalId,\n corpusGroupKey: input?.corpusGroupKey,\n description: input?.description,\n groupKey: input?.groupKey,\n label: input?.label,\n limit: input?.limit,\n metadata: input?.metadata,\n persistRun: input?.persistRun,\n retrievals: input?.retrievals,\n runLimit: input?.runLimit,\n tags: input?.tags,\n topK: input?.topK,\n }),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGNativeBackendComparisonBenchmarkResponse>(response);\n if (!payload.ok) {\n throw new Error(\n payload.error ?? \"Native backend comparison benchmark run failed\",\n );\n }\n\n return payload;\n },\n async saveNativeBackendComparisonBenchmarkSnapshot(input?: {\n limit?: number;\n label?: string;\n description?: string;\n version?: number;\n createdAt?: number;\n metadata?: Record<string, unknown>;\n snapshotMetadata?: Record<string, unknown>;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/benchmarks/native-backend-comparison/snapshots`,\n {\n body: JSON.stringify({\n createdAt: input?.createdAt,\n description: input?.description,\n label: input?.label,\n limit: input?.limit,\n metadata: input?.metadata,\n snapshotMetadata: input?.snapshotMetadata,\n version: input?.version,\n }),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGNativeBackendComparisonBenchmarkSnapshotResponse>(\n response,\n );\n if (!payload.ok) {\n throw new Error(\n payload.error ??\n \"Native backend comparison benchmark snapshot failed\",\n );\n }\n\n return payload;\n },\n async retrievalLaneHandoffs(input?: {\n groupKey?: string;\n sourceRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n limit?: number;\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (input?.sourceRolloutLabel) {\n searchParams.set(\"sourceRolloutLabel\", input.sourceRolloutLabel);\n }\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffListResponse>(response);\n if (!payload.ok || !payload.handoffs) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff list failed\",\n );\n }\n\n return payload.handoffs;\n },\n async retrievalLaneHandoffDecisions(input?: {\n groupKey?: string;\n sourceRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n kind?: \"approve\" | \"reject\" | \"complete\";\n limit?: number;\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (input?.sourceRolloutLabel) {\n searchParams.set(\"sourceRolloutLabel\", input.sourceRolloutLabel);\n }\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n if (input?.kind) {\n searchParams.set(\"kind\", input.kind);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/decisions${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffDecisionListResponse>(response);\n if (!payload.ok || !payload.decisions) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff decision list failed\",\n );\n }\n\n return payload.decisions;\n },\n async retrievalLaneHandoffIncidents(input?: {\n groupKey?: string;\n limit?: number;\n status?: \"open\" | \"resolved\";\n severity?: \"warning\" | \"critical\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) searchParams.set(\"groupKey\", input.groupKey);\n if (typeof input?.limit === \"number\")\n searchParams.set(\"limit\", String(input.limit));\n if (input?.status) searchParams.set(\"status\", input.status);\n if (input?.severity) searchParams.set(\"severity\", input.severity);\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/incidents${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff incident list failed\",\n );\n }\n\n return payload.incidents;\n },\n async retrievalLaneHandoffIncidentHistory(input?: {\n action?: \"opened\" | \"acknowledged\" | \"unacknowledged\" | \"resolved\";\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/incidents/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffIncidentHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff incident history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalLaneHandoffAutoCompletePolicyHistory(input?: {\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/policies/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffAutoCompletePolicyHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval lane handoff auto-complete policy history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalReleaseLanePolicyHistory(input?: {\n groupKey?: string;\n limit?: number;\n rolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n scope?: \"rollout_label\" | \"group_rollout_label\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/release-policies/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseLanePolicyHistoryResponse>(response);\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ?? \"RAG retrieval release lane policy history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalBaselineGatePolicyHistory(input?: {\n groupKey?: string;\n limit?: number;\n rolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n scope?: \"rollout_label\" | \"group_rollout_label\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/gate-policies/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalBaselineGatePolicyHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ?? \"RAG retrieval baseline gate policy history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalReleaseLaneEscalationPolicyHistory(input?: {\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/escalation-policies/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseLaneEscalationPolicyHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval release lane escalation policy history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalReleaseIncidentPolicyHistory(input?: {\n groupKey?: string;\n limit?: number;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incident-policies/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseLaneEscalationPolicyHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval release incident policy history failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalReleaseIncidentStatus() {\n const response = await fetchImpl(`${basePath}/status/release/incidents`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalReleaseIncidentStatusResponse>(response);\n },\n async retrievalIncidentRemediationStatus() {\n const response = await fetchImpl(\n `${basePath}/status/release/remediations`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalIncidentRemediationStatusResponse>(response);\n },\n async retrievalLaneHandoffIncidentStatus() {\n const response = await fetchImpl(`${basePath}/status/handoffs/incidents`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalLaneHandoffIncidentStatusResponse>(response);\n },\n async acknowledgeRetrievalLaneHandoffIncident(\n input: RAGRetrievalReleaseIncidentAcknowledgeRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/incidents/acknowledge`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ??\n \"RAG retrieval lane handoff incident acknowledgement failed\",\n );\n }\n\n return payload.incidents;\n },\n async unacknowledgeRetrievalLaneHandoffIncident(input: {\n incidentId: string;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/incidents/unacknowledge`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ??\n \"RAG retrieval lane handoff incident unacknowledge failed\",\n );\n }\n\n return payload.incidents;\n },\n async resolveRetrievalLaneHandoffIncident(input: {\n incidentId: string;\n resolvedAt?: number;\n resolvedBy?: string;\n resolutionNotes?: string;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/incidents/resolve`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalLaneHandoffIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff incident resolve failed\",\n );\n }\n\n return payload.incidents;\n },\n async decideRetrievalLaneHandoff(\n input: RAGRetrievalLaneHandoffDecisionRequest,\n ) {\n const payload = await this.decideRetrievalLaneHandoffDetailed(input);\n if (!payload.decision) {\n throw new Error(\n payload.error ?? \"RAG retrieval lane handoff decision failed\",\n );\n }\n return payload.decision;\n },\n async decideRetrievalLaneHandoffDetailed(\n input: RAGRetrievalLaneHandoffDecisionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/handoffs/decide`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalLaneHandoffDecisionResponse>(response);\n },\n async retrievalReleaseIncidents(input?: {\n groupKey?: string;\n limit?: number;\n status?: \"open\" | \"resolved\";\n severity?: \"warning\" | \"critical\";\n kind?:\n | \"approval_expired\"\n | \"baseline_regression\"\n | \"gate_failure\"\n | \"handoff_stale\";\n acknowledged?: boolean;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.status) {\n searchParams.set(\"status\", input.status);\n }\n if (input?.severity) {\n searchParams.set(\"severity\", input.severity);\n }\n if (input?.kind) {\n searchParams.set(\"kind\", input.kind);\n }\n if (typeof input?.acknowledged === \"boolean\") {\n searchParams.set(\"acknowledged\", String(input.acknowledged));\n }\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ?? \"RAG retrieval release incident list failed\",\n );\n }\n\n return payload.incidents;\n },\n async retrievalIncidentRemediationDecisions(input?: {\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n remediationKind?: RAGRetrievalIncidentRemediationDecisionRequest[\"remediationKind\"];\n status?: \"planned\" | \"applied\" | \"dismissed\";\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/remediations${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalIncidentRemediationDecisionListResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval incident remediation decision list failed\",\n );\n }\n\n return payload.records;\n },\n async retrievalIncidentRemediationExecutions(input?: {\n groupKey?: string;\n incidentId?: string;\n limit?: number;\n actionKind?: RAGRetrievalIncidentRemediationExecutionRequest[\"action\"][\"kind\"];\n code?: NonNullable<\n RAGRetrievalIncidentRemediationExecutionResponse[\"execution\"]\n >[\"code\"];\n blockedByGuardrail?: boolean;\n idempotentReplay?: boolean;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n }) {\n const suffix = input\n ? `?${new URLSearchParams(\n Object.entries(input)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => [key, String(value)]),\n ).toString()}`\n : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/remediations/executions${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalIncidentRemediationExecutionHistoryResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval incident remediation execution history failed\",\n );\n }\n\n return payload.records;\n },\n async recordRetrievalIncidentRemediationDecision(\n input: RAGRetrievalIncidentRemediationDecisionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/remediations`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalIncidentRemediationDecisionListResponse>(\n response,\n );\n if (!payload.ok || !payload.records) {\n throw new Error(\n payload.error ??\n \"RAG retrieval incident remediation decision record failed\",\n );\n }\n\n return payload.records;\n },\n async executeRetrievalIncidentRemediation(\n input: RAGRetrievalIncidentRemediationExecutionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/remediations/execute`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalIncidentRemediationExecutionResponse>(\n response,\n );\n if (!payload.ok || !payload.execution) {\n throw new Error(\n payload.error ??\n \"RAG retrieval incident remediation execution failed\",\n );\n }\n\n return payload;\n },\n async bulkExecuteRetrievalIncidentRemediations(\n input: RAGRetrievalIncidentRemediationBulkExecutionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/remediations/execute/bulk`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalIncidentRemediationBulkExecutionResponse>(\n response,\n );\n if (!payload.ok || !payload.results) {\n throw new Error(\n payload.error ??\n \"Bulk RAG retrieval incident remediation execution failed\",\n );\n }\n\n return payload.results;\n },\n async acknowledgeRetrievalReleaseIncident(\n input: RAGRetrievalReleaseIncidentAcknowledgeRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/acknowledge`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ??\n \"RAG retrieval release incident acknowledgement failed\",\n );\n }\n\n return payload.incidents;\n },\n async unacknowledgeRetrievalReleaseIncident(input: { incidentId: string }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/unacknowledge`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ??\n \"RAG retrieval release incident unacknowledge failed\",\n );\n }\n\n return payload.incidents;\n },\n async resolveRetrievalReleaseIncident(input: {\n incidentId: string;\n resolvedAt?: number;\n resolvedBy?: string;\n resolutionNotes?: string;\n }) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/incidents/resolve`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseIncidentListResponse>(response);\n if (!payload.ok || !payload.incidents) {\n throw new Error(\n payload.error ?? \"RAG retrieval release incident resolve failed\",\n );\n }\n\n return payload.incidents;\n },\n async retrievalPromotionCandidates(input?: {\n groupKey?: string;\n limit?: number;\n tag?: string;\n targetRolloutLabel?: \"canary\" | \"stable\" | \"rollback_target\";\n approved?: boolean;\n ready?: boolean;\n blocked?: boolean;\n reviewStatus?: \"approved\" | \"blocked\" | \"needs_review\" | \"ready\";\n freshnessStatus?: \"fresh\" | \"expired\" | \"not_applicable\";\n sortBy?: \"approvalFreshness\" | \"finishedAt\" | \"gateSeverity\" | \"priority\";\n sortDirection?: \"asc\" | \"desc\";\n }) {\n const searchParams = new URLSearchParams();\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n if (input?.targetRolloutLabel) {\n searchParams.set(\"targetRolloutLabel\", input.targetRolloutLabel);\n }\n if (typeof input?.approved === \"boolean\") {\n searchParams.set(\"approved\", String(input.approved));\n }\n if (typeof input?.ready === \"boolean\") {\n searchParams.set(\"ready\", String(input.ready));\n }\n if (typeof input?.blocked === \"boolean\") {\n searchParams.set(\"blocked\", String(input.blocked));\n }\n if (input?.reviewStatus) {\n searchParams.set(\"reviewStatus\", input.reviewStatus);\n }\n if (input?.freshnessStatus) {\n searchParams.set(\"freshnessStatus\", input.freshnessStatus);\n }\n if (input?.sortBy) {\n searchParams.set(\"sortBy\", input.sortBy);\n }\n if (input?.sortDirection) {\n searchParams.set(\"sortDirection\", input.sortDirection);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/candidates${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalPromotionCandidateListResponse>(response);\n if (!payload.ok || !payload.candidates) {\n throw new Error(\n payload.error ?? \"RAG retrieval promotion candidate list failed\",\n );\n }\n\n return payload.candidates;\n },\n async approveRetrievalCandidate(\n input: RAGRetrievalReleaseDecisionActionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/approve`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseDecisionListResponse>(response);\n if (!payload.ok || !payload.decisions) {\n throw new Error(payload.error ?? \"RAG retrieval approval failed\");\n }\n\n return payload.decisions;\n },\n async rejectRetrievalCandidate(\n input: RAGRetrievalReleaseDecisionActionRequest,\n ) {\n const response = await fetchImpl(\n `${basePath}/compare/retrieval/baselines/reject`,\n {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseDecisionListResponse>(response);\n if (!payload.ok || !payload.decisions) {\n throw new Error(payload.error ?? \"RAG retrieval rejection failed\");\n }\n\n return payload.decisions;\n },\n async ingest(chunks: RAGDocumentChunk[]) {\n const response = await fetchImpl(`${basePath}/ingest`, {\n body: JSON.stringify({ chunks }),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGIngestResponse>(response);\n },\n async ingestDocuments(input: RAGDocumentIngestInput) {\n const response = await fetchImpl(`${basePath}/ingest`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGIngestResponse>(response);\n },\n async ingestUploads(input: RAGDocumentUploadIngestInput) {\n const response = await fetchImpl(`${basePath}/ingest`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGIngestResponse>(response);\n },\n async ingestUrls(input: RAGDocumentUrlIngestInput) {\n const response = await fetchImpl(`${basePath}/ingest`, {\n body: JSON.stringify(input),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGIngestResponse>(response);\n },\n async analyzeBackend() {\n const response = await fetchImpl(`${basePath}/backend/analyze`, {\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async ops() {\n const response = await fetchImpl(`${basePath}/ops`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGOperationsResponse>(response);\n },\n async searchTraceHistory(input?: {\n query?: string;\n groupKey?: string;\n tag?: string;\n limit?: number;\n }) {\n const searchParams = new URLSearchParams();\n if (input?.query) {\n searchParams.set(\"query\", input.query);\n }\n if (input?.groupKey) {\n searchParams.set(\"groupKey\", input.groupKey);\n }\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(`${basePath}/traces${suffix}`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGSearchTraceHistoryResponse>(response);\n if (!payload.ok || !payload.history) {\n throw new Error(payload.error ?? \"RAG search trace history failed\");\n }\n\n return payload.history;\n },\n async searchTraceGroups(input?: { tag?: string; limit?: number }) {\n const searchParams = new URLSearchParams();\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(`${basePath}/traces/groups${suffix}`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGSearchTraceGroupHistoryResponse>(response);\n if (!payload.ok || !payload.history) {\n throw new Error(\n payload.error ?? \"RAG search trace group history failed\",\n );\n }\n\n return payload.history;\n },\n async searchTraceStats(input?: { tag?: string }) {\n const searchParams = new URLSearchParams();\n if (input?.tag) {\n searchParams.set(\"tag\", input.tag);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(`${basePath}/traces/stats${suffix}`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGSearchTraceStatsResponse>(response);\n if (!payload.ok || !payload.stats) {\n throw new Error(payload.error ?? \"RAG search trace stats failed\");\n }\n\n return payload.stats;\n },\n async previewSearchTracePrune(input?: {\n maxAgeMs?: number;\n maxRecordsPerQuery?: number;\n maxRecordsPerGroup?: number;\n now?: number;\n tag?: string;\n }) {\n const response = await fetchImpl(`${basePath}/traces/prune/preview`, {\n body: JSON.stringify(input ?? {}),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGSearchTracePrunePreviewResponse>(response);\n if (!payload.ok || !payload.preview) {\n throw new Error(\n payload.error ?? \"RAG search trace prune preview failed\",\n );\n }\n\n return payload.preview;\n },\n async pruneSearchTraces(input?: {\n maxAgeMs?: number;\n maxRecordsPerQuery?: number;\n maxRecordsPerGroup?: number;\n now?: number;\n tag?: string;\n }) {\n const response = await fetchImpl(`${basePath}/traces/prune`, {\n body: JSON.stringify(input ?? {}),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload = await parseJson<RAGSearchTracePruneResponse>(response);\n if (!payload.ok || !payload.result) {\n throw new Error(payload.error ?? \"RAG search trace prune failed\");\n }\n\n return payload;\n },\n async searchTracePruneHistory(input?: {\n limit?: number;\n trigger?: \"manual\" | \"write\" | \"schedule\";\n }) {\n const searchParams = new URLSearchParams();\n if (typeof input?.limit === \"number\") {\n searchParams.set(\"limit\", String(input.limit));\n }\n if (input?.trigger) {\n searchParams.set(\"trigger\", input.trigger);\n }\n const suffix = searchParams.size > 0 ? `?${searchParams}` : \"\";\n const response = await fetchImpl(\n `${basePath}/traces/prune/history${suffix}`,\n );\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGSearchTracePruneHistoryResponse>(response);\n if (!payload.ok || !payload.runs) {\n throw new Error(\n payload.error ?? \"RAG search trace prune history failed\",\n );\n }\n\n return payload.runs;\n },\n async syncSources() {\n const response = await fetchImpl(`${basePath}/sync`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGSyncResponse>(response);\n },\n async syncAllSources(options?: RAGSyncRunOptions) {\n const response = await fetchImpl(`${basePath}/sync`, {\n body:\n options?.background === true\n ? JSON.stringify({ background: true })\n : undefined,\n headers: options?.background === true ? jsonHeaders : undefined,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n } satisfies RAGSyncResponse;\n }\n\n return parseJson<RAGSyncResponse>(response);\n },\n async syncSource(id: string, options?: RAGSyncRunOptions) {\n const response = await fetchImpl(\n `${basePath}/sync/${encodeURIComponent(id)}`,\n {\n body:\n options?.background === true\n ? JSON.stringify({ background: true })\n : undefined,\n headers: options?.background === true ? jsonHeaders : undefined,\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n } satisfies RAGSyncResponse;\n }\n\n return parseJson<RAGSyncResponse>(response);\n },\n async reindexDocument(id: string) {\n const response = await fetchImpl(\n `${basePath}/reindex/documents/${encodeURIComponent(id)}`,\n {\n method: \"POST\",\n },\n );\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async reindexSource(source: string) {\n const response = await fetchImpl(`${basePath}/reindex/source`, {\n body: JSON.stringify({ source }),\n headers: jsonHeaders,\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async reseed() {\n const response = await fetchImpl(`${basePath}/reseed`, {\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async reset() {\n const response = await fetchImpl(`${basePath}/reset`, {\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n async rebuildNativeIndex() {\n const response = await fetchImpl(`${basePath}/backend/reindex-native`, {\n method: \"POST\",\n });\n\n if (!response.ok) {\n return {\n error: await toErrorMessage(response),\n ok: false,\n };\n }\n\n return parseJson<RAGMutationResponse>(response);\n },\n search,\n async searchWithTrace(input: RAGSearchRequest) {\n return search({ ...input, includeTrace: true });\n },\n /**\n * @deprecated Use `searchWithTrace` for trace-aware search responses.\n */\n async searchDetailed(input: RAGSearchRequest) {\n return search({ ...input, includeTrace: true });\n },\n async status() {\n const response = await fetchImpl(`${basePath}/status`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGStatusResponse>(response);\n },\n async statusMaintenance() {\n const response = await fetchImpl(`${basePath}/status/maintenance`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGStatusResponse>(response);\n },\n async retrievalReleaseStatus() {\n const response = await fetchImpl(`${basePath}/status/release`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n const payload =\n await parseJson<RAGRetrievalReleaseStatusResponse>(response);\n return payload.retrievalComparisons;\n },\n async retrievalReleaseDriftStatus() {\n const response = await fetchImpl(`${basePath}/status/release/drift`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalReleaseDriftStatusResponse>(response);\n },\n async retrievalLaneHandoffStatus() {\n const response = await fetchImpl(`${basePath}/status/handoffs`);\n\n if (!response.ok) {\n throw new Error(await toErrorMessage(response));\n }\n\n return parseJson<RAGRetrievalLaneHandoffStatusResponse>(response);\n },\n };\n};\n\nexport type RAGClient = ReturnType<typeof createRAGClient>;\n",
|
|
15
|
+
"import { Injectable, signal, type DestroyRef } from \"@angular/core\";\nimport { createResearchClient } from \"../client/research\";\n@Injectable({ providedIn: \"root\" })\nexport class ResearchService {\n connect(path = \"/research\", destroyRef?: DestroyRef) {\n const client = createResearchClient({ path });\n const state = signal(client.getSnapshot());\n const unsubscribe = client.subscribe(() => state.set(client.getSnapshot()));\n const dispose = () => {\n unsubscribe();\n client.dispose();\n };\n destroyRef?.onDestroy(dispose);\n return { ...client, state: state.asReadonly(), dispose };\n }\n}\n"
|
|
14
16
|
],
|
|
15
|
-
"mappings": "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",
|
|
16
|
-
"debugId": "
|
|
17
|
+
"mappings": "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",
|
|
18
|
+
"debugId": "920870B1BD340B7F64756E2164756E21",
|
|
17
19
|
"names": []
|
|
18
20
|
}
|