@indexnetwork/protocol 4.14.2-rc.356.1 → 4.16.0-rc.358.1
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 +2 -0
- package/dist/index.d.ts +13 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/opportunity/discriminator/discriminator.env.d.ts +15 -0
- package/dist/opportunity/discriminator/discriminator.env.d.ts.map +1 -1
- package/dist/opportunity/discriminator/discriminator.env.js +15 -0
- package/dist/opportunity/discriminator/discriminator.env.js.map +1 -1
- package/dist/opportunity/discriminator/discriminator.push.d.ts +16 -0
- package/dist/opportunity/discriminator/discriminator.push.d.ts.map +1 -0
- package/dist/opportunity/discriminator/discriminator.push.js +26 -0
- package/dist/opportunity/discriminator/discriminator.push.js.map +1 -0
- package/dist/opportunity/opportunity.graph.d.ts +13 -0
- package/dist/opportunity/opportunity.graph.d.ts.map +1 -1
- package/dist/opportunity/opportunity.graph.js +5 -1
- package/dist/opportunity/opportunity.graph.js.map +1 -1
- package/dist/opportunity/opportunity.state.d.ts +3 -0
- package/dist/opportunity/opportunity.state.d.ts.map +1 -1
- package/dist/opportunity/opportunity.state.js.map +1 -1
- package/dist/shared/agent/model.config.d.ts +5 -0
- package/dist/shared/agent/model.config.d.ts.map +1 -1
- package/dist/shared/agent/model.config.js +1 -0
- package/dist/shared/agent/model.config.js.map +1 -1
- package/dist/shared/hyde/hyde.documents.d.ts +10 -0
- package/dist/shared/hyde/hyde.documents.d.ts.map +1 -0
- package/dist/shared/hyde/hyde.documents.js +50 -0
- package/dist/shared/hyde/hyde.documents.js.map +1 -0
- package/dist/shared/hyde/hyde.env.d.ts +9 -0
- package/dist/shared/hyde/hyde.env.d.ts.map +1 -0
- package/dist/shared/hyde/hyde.env.js +10 -0
- package/dist/shared/hyde/hyde.env.js.map +1 -0
- package/dist/shared/hyde/hyde.frame.d.ts +151 -0
- package/dist/shared/hyde/hyde.frame.d.ts.map +1 -0
- package/dist/shared/hyde/hyde.frame.js +108 -0
- package/dist/shared/hyde/hyde.frame.js.map +1 -0
- package/dist/shared/hyde/hyde.generator.d.ts +23 -11
- package/dist/shared/hyde/hyde.generator.d.ts.map +1 -1
- package/dist/shared/hyde/hyde.generator.js +50 -21
- package/dist/shared/hyde/hyde.generator.js.map +1 -1
- package/dist/shared/hyde/hyde.graph.d.ts +58 -17
- package/dist/shared/hyde/hyde.graph.d.ts.map +1 -1
- package/dist/shared/hyde/hyde.graph.js +333 -89
- package/dist/shared/hyde/hyde.graph.js.map +1 -1
- package/dist/shared/hyde/hyde.state.d.ts +19 -2
- package/dist/shared/hyde/hyde.state.d.ts.map +1 -1
- package/dist/shared/hyde/hyde.state.js +23 -3
- package/dist/shared/hyde/hyde.state.js.map +1 -1
- package/dist/shared/hyde/hyde.validator.d.ts +79 -0
- package/dist/shared/hyde/hyde.validator.d.ts.map +1 -0
- package/dist/shared/hyde/hyde.validator.js +49 -0
- package/dist/shared/hyde/hyde.validator.js.map +1 -0
- package/dist/shared/hyde/lens.inferrer.d.ts +190 -12
- package/dist/shared/hyde/lens.inferrer.d.ts.map +1 -1
- package/dist/shared/hyde/lens.inferrer.js +93 -38
- package/dist/shared/hyde/lens.inferrer.js.map +1 -1
- package/dist/shared/schemas/question.schema.d.ts +283 -2
- package/dist/shared/schemas/question.schema.d.ts.map +1 -1
- package/dist/shared/schemas/question.schema.js +87 -0
- package/dist/shared/schemas/question.schema.js.map +1 -1
- package/package.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hyde.graph.js","sourceRoot":"/","sources":["shared/hyde/hyde.graph.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * HyDE Graph: cache-aware hypothetical document generation with lens inference.\n *\n * Flow: infer_lenses → check_cache → (generate_missing if needed) → embed → cache_results.\n * Constructor injects Database, Embedder, Cache, LensInferrer, HydeGenerator.\n */\n\nimport { StateGraph, START, END } from '@langchain/langgraph';\nimport { createHash } from 'crypto';\n\nimport { getAbortSignalConfig } from '../agent/model-signal.js';\nimport { HydeGraphState, type HydeDocumentState } from './hyde.state.js';\nimport { LensInferrer } from './lens.inferrer.js';\nimport { HydeGenerator } from './hyde.generator.js';\nimport type { HydeGraphDatabase } from '../interfaces/database.interface.js';\nimport type { EmbeddingGenerator } from '../interfaces/embedder.interface.js';\nimport type { HydeCache } from '../interfaces/cache.interface.js';\nimport { HYDE_DEFAULT_CACHE_TTL } from './hyde.strategies.js';\nimport { protocolLogger } from '../observability/protocol.logger.js';\nimport { timed } from '../observability/performance.js';\nimport { requestContext } from \"../observability/request-context.js\";\nimport type { DebugMetaAgent } from '../../chat/chat-streaming.types.js';\n\nconst logger = protocolLogger(\"HyDEGraphFactory\");\n\n/** Hash a lens label (+ optional corpus) to a short key for cache/DB indexing. */\nfunction lensHash(label: string, corpus?: string): string {\n const input = corpus\n ? `${label.toLowerCase().trim()}:${corpus}`\n : label.toLowerCase().trim();\n return createHash('sha256').update(input).digest('hex').slice(0, 16);\n}\n\n/** Build cache key for a specific lens. */\nfunction cacheKey(\n sourceType: string,\n sourceId: string | undefined,\n sourceText: string,\n lens: string,\n corpus?: string,\n): string {\n const entityKey =\n sourceId ?? `q:${createHash('sha256').update(sourceText).digest('hex').slice(0, 16)}`;\n return `hyde:${sourceType}:${entityKey}:${lensHash(lens, corpus)}`;\n}\n\n/**\n * Factory for the HyDE generation graph.\n * Injects Database, Embedder, Cache, LensInferrer, and HydeGenerator.\n */\nexport class HydeGraphFactory {\n constructor(\n private database: HydeGraphDatabase,\n private embedder: EmbeddingGenerator,\n private cache: HydeCache,\n private inferrer: LensInferrer,\n private generator: HydeGenerator,\n ) {}\n\n createGraph() {\n const self = this;\n\n /** Node 1: Infer lenses from source text + optional profile context. */\n const inferLensesNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.inferLenses\", async () => {\n const { sourceText, profileContext, maxLenses } = state;\n\n logger.verbose('Inferring lenses', { sourceTextLength: sourceText.length, hasProfileContext: !!profileContext });\n\n const agentTimingsAccum: DebugMetaAgent[] = [];\n\n try {\n const _traceEmitterLens = requestContext.getStore()?.traceEmitter;\n const inferrerStart = Date.now();\n _traceEmitterLens?.({ type: \"agent_start\", name: \"lens-inferrer\" });\n const result = await self.inferrer.infer({\n sourceText,\n profileContext,\n maxLenses,\n });\n const _inferrerDuration = Date.now() - inferrerStart;\n agentTimingsAccum.push({ name: 'lens.inferrer', durationMs: _inferrerDuration });\n _traceEmitterLens?.({ type: \"agent_end\", name: \"lens-inferrer\", durationMs: _inferrerDuration, summary: result.lenses.length > 0 ? `Inferred ${result.lenses.length} lens(es)` : \"lens-inferrer completed\" });\n\n logger.verbose('Lenses inferred', {\n count: result.lenses.length,\n lenses: result.lenses.map(l => ({ label: l.label, corpus: l.corpus })),\n });\n\n return { lenses: result.lenses, agentTimings: agentTimingsAccum };\n } catch (error) {\n logger.error('Lens inference failed in graph node', { error });\n return { lenses: [], agentTimings: agentTimingsAccum };\n }\n });\n };\n\n /** Node 2: Check cache/DB for existing HyDE docs matching inferred lenses. */\n const checkCacheNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.checkCache\", async () => {\n const { sourceType, sourceId, sourceText, lenses, forceRegenerate } = state;\n\n if (forceRegenerate) {\n logger.verbose('Force regenerate - skipping cache');\n return { hydeDocuments: {} };\n }\n\n const cached: Record<string, HydeDocumentState> = {};\n\n for (const lens of lenses) {\n const key = cacheKey(sourceType, sourceId ?? undefined, sourceText, lens.label, lens.corpus);\n\n const fromCache = await self.cache.get<HydeDocumentState>(key);\n if (fromCache?.hydeText && fromCache.hydeEmbedding?.length) {\n logger.verbose('Cache hit', { lens: lens.label });\n cached[lens.label] = fromCache;\n continue;\n }\n\n // For entity sources, check DB for persisted docs\n if (sourceId) {\n const fromDb = await self.database.getHydeDocument(\n sourceType,\n sourceId,\n lensHash(lens.label, lens.corpus),\n );\n if (fromDb) {\n logger.verbose('DB hit', { lens: lens.label });\n cached[lens.label] = {\n lens: lens.label,\n targetCorpus: fromDb.targetCorpus as 'profiles' | 'intents',\n hydeText: fromDb.hydeText,\n hydeEmbedding: fromDb.hydeEmbedding,\n };\n }\n }\n }\n\n logger.verbose('Check cache done', {\n found: Object.keys(cached).length,\n requested: lenses.length,\n });\n return { hydeDocuments: cached };\n });\n };\n\n /** Conditional: decide whether to generate or skip to embed. */\n const shouldGenerate = (state: typeof HydeGraphState.State): string => {\n const { lenses, hydeDocuments } = state;\n const missing = lenses.filter((l) => !hydeDocuments[l.label]);\n if (missing.length > 0) {\n logger.verbose('Need to generate', { missing: missing.map(l => l.label) });\n return 'generate';\n }\n logger.verbose('All lenses cached, skipping generation');\n return 'skip';\n };\n\n /** Node 3: Generate HyDE documents for lenses not in cache. */\n const generateMissingNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.generateMissing\", async () => {\n const { sourceText, lenses, hydeDocuments } = state;\n const missing = lenses.filter((l) => !hydeDocuments[l.label]);\n\n logger.verbose('Generating HyDE documents', {\n count: missing.length,\n lenses: missing.map(l => l.label),\n });\n\n const agentTimingsAccum: DebugMetaAgent[] = [];\n const generated: Record<string, HydeDocumentState> = {};\n\n await Promise.all(\n missing.map(async (lens) => {\n const _traceEmitterHyde = requestContext.getStore()?.traceEmitter;\n const generatorStart = Date.now();\n _traceEmitterHyde?.({ type: \"agent_start\", name: \"hyde-generator\" });\n const out = await self.generator.generate({\n sourceText,\n lens: lens.label,\n corpus: lens.corpus,\n });\n const _hydeDuration = Date.now() - generatorStart;\n agentTimingsAccum.push({ name: 'hyde.generator', durationMs: _hydeDuration });\n _traceEmitterHyde?.({ type: \"agent_end\", name: \"hyde-generator\", durationMs: _hydeDuration, summary: `Generated: ${lens.label}` });\n generated[lens.label] = {\n lens: lens.label,\n targetCorpus: lens.corpus,\n hydeText: out.text,\n hydeEmbedding: [],\n };\n })\n );\n\n return { hydeDocuments: { ...state.hydeDocuments, ...generated }, agentTimings: agentTimingsAccum };\n });\n };\n\n /** Node 4: Embed all HyDE documents that don't have embeddings yet. */\n const embedNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.embed\", async () => {\n const { hydeDocuments } = state;\n const lensLabels = Object.keys(hydeDocuments);\n const toEmbed: { label: string; doc: HydeDocumentState }[] = [];\n const updated: Record<string, HydeDocumentState> = {};\n const hydeEmbeddings: Record<string, number[]> = {};\n\n for (const label of lensLabels) {\n const doc = hydeDocuments[label];\n if (!doc) continue;\n if (doc.hydeEmbedding?.length) {\n updated[label] = doc;\n hydeEmbeddings[label] = doc.hydeEmbedding;\n } else {\n toEmbed.push({ label, doc });\n }\n }\n\n if (toEmbed.length > 0) {\n logger.verbose('Embedding documents', { count: toEmbed.length });\n const texts = toEmbed.map((t) => t.doc.hydeText);\n const embeddings = await self.embedder.generate(texts, undefined, getAbortSignalConfig());\n const embeddingArray = Array.isArray(embeddings[0])\n ? (embeddings as number[][])\n : [embeddings as number[]];\n\n for (let i = 0; i < toEmbed.length; i++) {\n const { label, doc } = toEmbed[i];\n const embedding = embeddingArray[i] ?? [];\n updated[label] = { ...doc, hydeEmbedding: embedding };\n hydeEmbeddings[label] = embedding;\n }\n }\n\n return { hydeDocuments: updated, hydeEmbeddings };\n });\n };\n\n /** Node 5: Cache results in Redis; persist to DB for entity sources. */\n const cacheResultsNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.cacheResults\", async () => {\n const { sourceType, sourceId, sourceText, hydeDocuments } = state;\n\n for (const label of Object.keys(hydeDocuments)) {\n const doc = hydeDocuments[label];\n if (!doc) continue;\n\n const key = cacheKey(sourceType, sourceId ?? undefined, sourceText, label, doc.targetCorpus);\n await self.cache.set(key, doc, { ttl: HYDE_DEFAULT_CACHE_TTL });\n\n // Persist to DB for entity sources (intent/profile)\n if (sourceId) {\n await self.database.saveHydeDocument({\n sourceType,\n sourceId,\n strategy: lensHash(label, doc.targetCorpus),\n targetCorpus: doc.targetCorpus,\n hydeText: doc.hydeText,\n hydeEmbedding: doc.hydeEmbedding,\n });\n }\n }\n\n logger.verbose('Cached results', {\n count: Object.keys(hydeDocuments).length,\n });\n return {};\n });\n };\n\n const workflow = new StateGraph(HydeGraphState)\n .addNode('infer_lenses', inferLensesNode)\n .addNode('check_cache', checkCacheNode)\n .addNode('generate_missing', generateMissingNode)\n .addNode('embed', embedNode)\n .addNode('cache_results', cacheResultsNode)\n .addEdge(START, 'infer_lenses')\n .addEdge('infer_lenses', 'check_cache')\n .addConditionalEdges('check_cache', shouldGenerate, {\n generate: 'generate_missing',\n skip: 'embed',\n })\n .addEdge('generate_missing', 'embed')\n .addEdge('embed', 'cache_results')\n .addEdge('cache_results', END);\n\n return workflow.compile();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"hyde.graph.js","sourceRoot":"/","sources":["shared/hyde/hyde.graph.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * HyDE Graph: cache-aware hypothetical document generation with lens inference.\n *\n * Legacy flow: infer_lenses → check_cache → generate_missing? → embed → cache_results.\n * Frame-v1 flow adds one batch validate_generated node before embed.\n */\nimport { createHash } from 'crypto';\nimport { END, START, StateGraph } from '@langchain/langgraph';\n\nimport type { DebugMetaAgent } from '../../chat/chat-streaming.types.js';\nimport { getAbortSignalConfig } from '../agent/model-signal.js';\nimport type { HydeCache } from '../interfaces/cache.interface.js';\nimport type { HydeGraphDatabase } from '../interfaces/database.interface.js';\nimport type { EmbeddingGenerator } from '../interfaces/embedder.interface.js';\nimport { protocolLogger } from '../observability/protocol.logger.js';\nimport { timed } from '../observability/performance.js';\nimport { requestContext } from \"../observability/request-context.js\";\nimport { computeHydeSourceTextHash } from './hyde.documents.js';\nimport { getHydeGenerationMode, HYDE_FRAME_GENERATION_VERSION, type HydeGenerationMode } from './hyde.env.js';\nimport { sanitizeHydeSourceFrame, type HydeSourceFrame } from './hyde.frame.js';\nimport type { HydeGenerateInput, HydeGeneratorOutput } from './hyde.generator.js';\nimport { HydeGraphState, type HydeDocumentState } from './hyde.state.js';\nimport type { LensInferenceInput, LensInferenceOutput } from './lens.inferrer.js';\nimport { HYDE_DEFAULT_CACHE_TTL } from './hyde.strategies.js';\nimport { HydeValidator, type HydeValidationInput, type HydeValidationOutput, type HydeValidationVerdict } from './hyde.validator.js';\n\nconst logger = protocolLogger(\"HyDEGraphFactory\");\nlet lastGenerationTimestamp = 0;\n\nfunction nextGenerationMarker(): string {\n lastGenerationTimestamp = Math.max(Date.now(), lastGenerationTimestamp + 1);\n return new Date(lastGenerationTimestamp).toISOString();\n}\n\n/** Narrow lens inferrer contract accepted by the graph. */\nexport interface HydeLensInferrerLike {\n infer(input: LensInferenceInput): Promise<LensInferenceOutput>;\n}\n\n/** Narrow document generator contract accepted by the graph. */\nexport interface HydeGeneratorLike {\n generate(input: HydeGenerateInput): Promise<HydeGeneratorOutput>;\n}\n\n/** Narrow batch validator contract accepted by the graph. */\nexport interface HydeValidatorLike {\n validate(input: HydeValidationInput): Promise<HydeValidationOutput>;\n}\n\nexport interface HydeGraphOptions {\n /** Test override. Production derives the mode from HYDE_FRAME_CONSTRAINTS_ENABLED. */\n mode?: HydeGenerationMode;\n validator?: HydeValidatorLike;\n}\n\n/** Hash a lens label (+ optional corpus) to a short key for cache/DB indexing. */\nfunction lensHash(label: string, corpus?: string): string {\n const input = corpus\n ? `${label.toLowerCase().trim()}:${corpus}`\n : label.toLowerCase().trim();\n return createHash('sha256').update(input).digest('hex').slice(0, 16);\n}\n\nfunction entityCacheKey(sourceId: string | undefined, sourceText: string): string {\n return sourceId ?? `q:${createHash('sha256').update(sourceText).digest('hex').slice(0, 16)}`;\n}\n\nfunction sortedFrame(frame: HydeSourceFrame): HydeSourceFrame {\n const sort = <T>(items: T[]): T[] => [...items].sort((left, right) => {\n const leftJson = JSON.stringify(left);\n const rightJson = JSON.stringify(right);\n return leftJson < rightJson ? -1 : leftJson > rightJson ? 1 : 0;\n });\n return {\n sourceRoles: sort(frame.sourceRoles),\n counterpartRoles: sort(frame.counterpartRoles),\n hardConstraints: sort(frame.hardConstraints),\n namedEntities: sort(frame.namedEntities),\n domainVocabulary: sort(frame.domainVocabulary),\n };\n}\n\n/** Deterministic identity for the source content and sanitized frame. */\nfunction computeHydeFrameFingerprint(sourceText: string, sourceFrame: HydeSourceFrame): string {\n return createHash('sha256')\n .update(sourceText)\n .update('\\0')\n .update(JSON.stringify(sortedFrame(sourceFrame)))\n .digest('hex');\n}\n\nfunction requireFrameFingerprint(frameFingerprint: string | undefined): string {\n if (!frameFingerprint) throw new Error('frame-v1 HyDE requires a frame fingerprint');\n return frameFingerprint;\n}\n\n/** Preserve the exact legacy Redis key and isolate frame-v1 data by namespace. */\nfunction cacheKey(\n mode: HydeGenerationMode,\n sourceType: string,\n sourceId: string | undefined,\n sourceText: string,\n lens: string,\n corpus?: string,\n frameFingerprint?: string,\n): string {\n const entityKey = entityCacheKey(sourceId, sourceText);\n if (mode === 'legacy') return `hyde:${sourceType}:${entityKey}:${lensHash(lens, corpus)}`;\n return `hyde:${HYDE_FRAME_GENERATION_VERSION}:${sourceType}:${entityKey}:${requireFrameFingerprint(frameFingerprint)}:${lensHash(lens, corpus)}`;\n}\n\n/** Preserve legacy identity and use a stable frame-v1 identity per lens/corpus. */\nfunction dbStrategy(mode: HydeGenerationMode, label: string, corpus?: string): string {\n const hash = lensHash(label, corpus);\n return mode === 'legacy' ? hash : `${HYDE_FRAME_GENERATION_VERSION}:${hash}`;\n}\n\nfunction isValidGenerationMarker(value: unknown): value is string {\n return typeof value === 'string' && Number.isFinite(Date.parse(value));\n}\n\nfunction isFrameCacheDocument(\n doc: HydeDocumentState,\n lensLabel: string,\n frameFingerprint: string,\n sourceTextHash: string,\n): boolean {\n return doc.hydeGenerationVersion === HYDE_FRAME_GENERATION_VERSION\n && doc.validationStatus === 'valid'\n && doc.lens === lensLabel\n && doc.frameFingerprint === frameFingerprint\n && doc.sourceTextHash === sourceTextHash\n && isValidGenerationMarker(doc.generatedAt);\n}\n\ninterface FrameDbContext extends Record<string, unknown> {\n hydeGenerationVersion: typeof HYDE_FRAME_GENERATION_VERSION;\n lensLabel: string;\n validationStatus: 'valid';\n frameFingerprint: string;\n sourceTextHash: string;\n generatedAt: string;\n}\n\nfunction isFrameDbContext(\n context: Record<string, unknown> | null,\n lensLabel: string,\n frameFingerprint: string,\n sourceTextHash: string,\n): context is FrameDbContext {\n return context?.hydeGenerationVersion === HYDE_FRAME_GENERATION_VERSION\n && context.lensLabel === lensLabel\n && context.validationStatus === 'valid'\n && context.frameFingerprint === frameFingerprint\n && context.sourceTextHash === sourceTextHash\n && isValidGenerationMarker(context.generatedAt);\n}\n\nfunction emptyFrame(): HydeSourceFrame {\n return {\n sourceRoles: [],\n counterpartRoles: [],\n hardConstraints: [],\n namedEntities: [],\n domainVocabulary: [],\n };\n}\n\nfunction opaqueDocumentKey(doc: HydeDocumentState): string {\n return `d-${createHash('sha256')\n .update(`${doc.lens}\\0${doc.targetCorpus}\\0${doc.hydeText}`)\n .digest('hex')\n .slice(0, 16)}`;\n}\n\nfunction isRuntimeVerdict(value: unknown): value is HydeValidationVerdict {\n if (!value || typeof value !== 'object') return false;\n const verdict = value as Partial<HydeValidationVerdict>;\n return typeof verdict.key === 'string'\n && typeof verdict.valid === 'boolean'\n && Array.isArray(verdict.unsupportedNamedEntities)\n && verdict.unsupportedNamedEntities.every((item) => typeof item === 'string')\n && Array.isArray(verdict.unsupportedHardConstraints)\n && verdict.unsupportedHardConstraints.every((item) => typeof item === 'string')\n && typeof verdict.reasoning === 'string';\n}\n\n/** Factory for the HyDE generation graph. Existing five-argument calls remain valid. */\nexport class HydeGraphFactory {\n constructor(\n private database: HydeGraphDatabase,\n private embedder: EmbeddingGenerator,\n private cache: HydeCache,\n private inferrer: HydeLensInferrerLike,\n private generator: HydeGeneratorLike,\n private options: HydeGraphOptions = {},\n ) {}\n\n createGraph() {\n const self = this;\n const mode = this.options.mode ?? getHydeGenerationMode();\n const validator = mode === HYDE_FRAME_GENERATION_VERSION\n ? (this.options.validator ?? new HydeValidator())\n : undefined;\n\n /** Node 1: Infer lenses from source text + optional profile context. */\n const inferLensesNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.inferLenses\", async () => {\n const { sourceText, profileContext, maxLenses } = state;\n const agentTimingsAccum: DebugMetaAgent[] = [];\n\n try {\n const traceEmitter = requestContext.getStore()?.traceEmitter;\n const inferrerStart = Date.now();\n traceEmitter?.({ type: \"agent_start\", name: \"lens-inferrer\" });\n const result = await self.inferrer.infer({\n sourceText,\n profileContext,\n maxLenses,\n ...(mode === HYDE_FRAME_GENERATION_VERSION ? { frameConstrained: true } : {}),\n });\n const durationMs = Date.now() - inferrerStart;\n agentTimingsAccum.push({ name: 'lens.inferrer', durationMs });\n traceEmitter?.({ type: \"agent_end\", name: \"lens-inferrer\", durationMs, summary: result.lenses.length > 0 ? `Inferred ${result.lenses.length} lens(es)` : \"lens-inferrer completed\" });\n\n if (mode === HYDE_FRAME_GENERATION_VERSION) {\n const sourceFrame = sanitizeHydeSourceFrame(sourceText, result.sourceFrame ?? emptyFrame());\n return {\n lenses: result.lenses,\n sourceFrame,\n frameFingerprint: computeHydeFrameFingerprint(sourceText, sourceFrame),\n sourceTextHash: computeHydeSourceTextHash(sourceText),\n generatedAt: nextGenerationMarker(),\n agentTimings: agentTimingsAccum,\n };\n }\n\n return { lenses: result.lenses, agentTimings: agentTimingsAccum };\n } catch (error) {\n logger.error('Lens inference failed in graph node', { error });\n if (mode === HYDE_FRAME_GENERATION_VERSION) {\n const sourceFrame = emptyFrame();\n return {\n lenses: [],\n sourceFrame,\n frameFingerprint: computeHydeFrameFingerprint(sourceText, sourceFrame),\n sourceTextHash: computeHydeSourceTextHash(sourceText),\n generatedAt: nextGenerationMarker(),\n agentTimings: agentTimingsAccum,\n };\n }\n return { lenses: [], agentTimings: agentTimingsAccum };\n }\n });\n };\n\n /** Node 2: Check the mode-isolated cache/DB for matching documents. */\n const checkCacheNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.checkCache\", async () => {\n const { sourceType, sourceId, sourceText, lenses, forceRegenerate } = state;\n\n if (forceRegenerate) return { hydeDocuments: {} };\n\n const frameFingerprint = mode === HYDE_FRAME_GENERATION_VERSION\n ? requireFrameFingerprint(state.frameFingerprint)\n : undefined;\n const sourceTextHash = mode === HYDE_FRAME_GENERATION_VERSION\n ? state.sourceTextHash ?? computeHydeSourceTextHash(sourceText)\n : undefined;\n const cached: Record<string, HydeDocumentState> = {};\n for (const lens of lenses) {\n const key = cacheKey(\n mode,\n sourceType,\n sourceId ?? undefined,\n sourceText,\n lens.label,\n lens.corpus,\n frameFingerprint,\n );\n const fromCache = await self.cache.get<HydeDocumentState>(key);\n const cacheAccepted = fromCache?.hydeText\n && fromCache.hydeEmbedding?.length\n && (mode === 'legacy' || isFrameCacheDocument(fromCache, lens.label, frameFingerprint!, sourceTextHash!));\n if (cacheAccepted && fromCache) {\n cached[lens.label] = {\n ...fromCache,\n ...(mode === HYDE_FRAME_GENERATION_VERSION ? { origin: 'cache' as const } : {}),\n };\n continue;\n }\n\n if (sourceId) {\n const fromDb = await self.database.getHydeDocument(\n sourceType,\n sourceId,\n dbStrategy(mode, lens.label, lens.corpus),\n );\n const frameDbContext = mode === HYDE_FRAME_GENERATION_VERSION && fromDb\n ? fromDb.context\n : null;\n if (fromDb && (mode === 'legacy' || isFrameDbContext(frameDbContext, lens.label, frameFingerprint!, sourceTextHash!))) {\n cached[lens.label] = {\n lens: lens.label,\n targetCorpus: fromDb.targetCorpus as HydeDocumentState['targetCorpus'],\n hydeText: fromDb.hydeText,\n hydeEmbedding: fromDb.hydeEmbedding,\n ...(mode === HYDE_FRAME_GENERATION_VERSION\n ? {\n origin: 'db' as const,\n validationStatus: 'valid' as const,\n hydeGenerationVersion: HYDE_FRAME_GENERATION_VERSION,\n frameFingerprint,\n sourceTextHash,\n generatedAt: (frameDbContext as FrameDbContext).generatedAt,\n }\n : {}),\n };\n }\n }\n }\n\n if (mode === HYDE_FRAME_GENERATION_VERSION) {\n const newestTimestamp = Math.max(\n ...Object.values(cached).map((doc) => Date.parse(doc.generatedAt ?? '')),\n );\n if (Number.isFinite(newestTimestamp)) {\n return {\n hydeDocuments: Object.fromEntries(Object.entries(cached).filter(([, doc]) =>\n Date.parse(doc.generatedAt ?? '') === newestTimestamp)),\n };\n }\n }\n\n return { hydeDocuments: cached };\n });\n };\n\n const shouldGenerate = (state: typeof HydeGraphState.State): string =>\n state.lenses.some((lens) => !state.hydeDocuments[lens.label]) ? 'generate' : 'skip';\n\n /** Node 3: Generate all missing documents and return a complete snapshot. */\n const generateMissingNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.generateMissing\", async () => {\n const { sourceText, sourceFrame, lenses, hydeDocuments } = state;\n const missing = lenses.filter((lens) => !hydeDocuments[lens.label]);\n const agentTimingsAccum: DebugMetaAgent[] = [];\n const generated: Record<string, HydeDocumentState> = {};\n const sourceTextHash = mode === HYDE_FRAME_GENERATION_VERSION\n ? state.sourceTextHash ?? computeHydeSourceTextHash(sourceText)\n : undefined;\n const generatedAt = mode === HYDE_FRAME_GENERATION_VERSION\n ? state.generatedAt ?? nextGenerationMarker()\n : undefined;\n\n await Promise.all(missing.map(async (lens) => {\n const traceEmitter = requestContext.getStore()?.traceEmitter;\n const generatorStart = Date.now();\n traceEmitter?.({ type: \"agent_start\", name: \"hyde-generator\" });\n const out = await self.generator.generate({\n sourceText,\n lens: lens.label,\n corpus: lens.corpus,\n ...(mode === HYDE_FRAME_GENERATION_VERSION && sourceFrame ? { sourceFrame } : {}),\n });\n const durationMs = Date.now() - generatorStart;\n agentTimingsAccum.push({ name: 'hyde.generator', durationMs });\n traceEmitter?.({ type: \"agent_end\", name: \"hyde-generator\", durationMs, summary: `Generated: ${lens.label}` });\n generated[lens.label] = {\n lens: lens.label,\n targetCorpus: lens.corpus,\n hydeText: out.text,\n hydeEmbedding: [],\n ...(mode === HYDE_FRAME_GENERATION_VERSION\n ? {\n origin: 'generated' as const,\n frameFingerprint: requireFrameFingerprint(state.frameFingerprint),\n sourceTextHash,\n generatedAt,\n }\n : {}),\n };\n }));\n\n const retained = mode === HYDE_FRAME_GENERATION_VERSION\n ? Object.fromEntries(Object.entries(hydeDocuments).map(([label, doc]) => [\n label,\n {\n ...doc,\n frameFingerprint: requireFrameFingerprint(state.frameFingerprint),\n sourceTextHash,\n generatedAt,\n },\n ]))\n : hydeDocuments;\n\n return { hydeDocuments: { ...retained, ...generated }, agentTimings: agentTimingsAccum };\n });\n };\n\n /** Frame-v1 only: validate newly generated docs in one batch. */\n const validateGeneratedNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.validateGenerated\", async () => {\n const generated = Object.values(state.hydeDocuments).filter((doc) => doc.origin === 'generated');\n if (generated.length === 0 || !validator) return { hydeDocuments: state.hydeDocuments };\n\n const frame = sanitizeHydeSourceFrame(state.sourceText, state.sourceFrame ?? emptyFrame());\n const documents: HydeValidationInput['documents'] = {};\n const lensByDocumentKey = new Map<string, string>();\n for (const doc of generated) {\n const key = opaqueDocumentKey(doc);\n documents[key] = { corpus: doc.targetCorpus, text: doc.hydeText };\n lensByDocumentKey.set(key, doc.lens);\n }\n\n const updated = { ...state.hydeDocuments };\n const agentTimingsAccum: DebugMetaAgent[] = [];\n const traceEmitter = requestContext.getStore()?.traceEmitter;\n const validatorStart = Date.now();\n let validCount = 0;\n let rejectedCount = 0;\n let failedOpenCount = 0;\n traceEmitter?.({ type: 'agent_start', name: 'hyde-validator' });\n\n try {\n const output = await validator.validate({\n sourceText: state.sourceText,\n sourceFrame: frame,\n documents,\n });\n const rawVerdicts: unknown[] = Array.isArray((output as { verdicts?: unknown }).verdicts)\n ? (output as { verdicts: unknown[] }).verdicts\n : [];\n\n for (const key of Object.keys(documents)) {\n const lensLabel = lensByDocumentKey.get(key);\n if (!lensLabel) continue;\n const matching = rawVerdicts.filter((value) =>\n !!value && typeof value === 'object' && (value as { key?: unknown }).key === key);\n const doc = updated[lensLabel];\n if (!doc) continue;\n\n if (matching.length !== 1 || !isRuntimeVerdict(matching[0])) {\n failedOpenCount += 1;\n updated[lensLabel] = { ...doc, validationStatus: 'failed_open', hydeGenerationVersion: HYDE_FRAME_GENERATION_VERSION };\n continue;\n }\n\n const verdict = matching[0];\n const hasUnsupportedGrounding = verdict.unsupportedNamedEntities.length > 0\n || verdict.unsupportedHardConstraints.length > 0;\n const contradictory = verdict.valid === hasUnsupportedGrounding;\n if (contradictory) {\n failedOpenCount += 1;\n updated[lensLabel] = { ...doc, validationStatus: 'failed_open', hydeGenerationVersion: HYDE_FRAME_GENERATION_VERSION };\n } else if (!verdict.valid) {\n rejectedCount += 1;\n delete updated[lensLabel];\n } else {\n validCount += 1;\n updated[lensLabel] = { ...doc, validationStatus: 'valid', hydeGenerationVersion: HYDE_FRAME_GENERATION_VERSION };\n }\n }\n } catch (error) {\n logger.error('HyDE validation failed open', { error });\n validCount = 0;\n rejectedCount = 0;\n failedOpenCount = generated.length;\n for (const doc of generated) {\n updated[doc.lens] = { ...doc, validationStatus: 'failed_open', hydeGenerationVersion: HYDE_FRAME_GENERATION_VERSION };\n }\n } finally {\n const durationMs = Date.now() - validatorStart;\n agentTimingsAccum.push({ name: 'hyde.validator', durationMs });\n traceEmitter?.({\n type: 'agent_end',\n name: 'hyde-validator',\n durationMs,\n summary: `${validCount} valid, ${rejectedCount} rejected, ${failedOpenCount} failed open`,\n });\n }\n\n return { hydeDocuments: updated, agentTimings: agentTimingsAccum };\n });\n };\n\n /** Embed all accepted/cached documents that do not have embeddings. */\n const embedNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.embed\", async () => {\n const toEmbed: { label: string; doc: HydeDocumentState }[] = [];\n const updated: Record<string, HydeDocumentState> = {};\n const hydeEmbeddings: Record<string, number[]> = {};\n\n for (const [label, doc] of Object.entries(state.hydeDocuments)) {\n if (doc.hydeEmbedding?.length) {\n updated[label] = doc;\n hydeEmbeddings[label] = doc.hydeEmbedding;\n } else {\n toEmbed.push({ label, doc });\n }\n }\n\n if (toEmbed.length > 0) {\n const embeddings = await self.embedder.generate(\n toEmbed.map((item) => item.doc.hydeText),\n undefined,\n getAbortSignalConfig(),\n );\n const embeddingArray = Array.isArray(embeddings[0]) ? embeddings as number[][] : [embeddings as number[]];\n for (let i = 0; i < toEmbed.length; i++) {\n const { label, doc } = toEmbed[i];\n const embedding = embeddingArray[i] ?? [];\n updated[label] = { ...doc, hydeEmbedding: embedding };\n hydeEmbeddings[label] = embedding;\n }\n }\n\n return { hydeDocuments: updated, hydeEmbeddings };\n });\n };\n\n /** Cache/persist only legacy docs or successfully validated frame-v1 docs. */\n const cacheResultsNode = async (state: typeof HydeGraphState.State) => {\n return timed(\"HydeGraph.cacheResults\", async () => {\n const { sourceType, sourceId, sourceText, hydeDocuments } = state;\n const frameFingerprint = mode === HYDE_FRAME_GENERATION_VERSION\n ? requireFrameFingerprint(state.frameFingerprint)\n : undefined;\n const sourceTextHash = mode === HYDE_FRAME_GENERATION_VERSION\n ? state.sourceTextHash ?? computeHydeSourceTextHash(sourceText)\n : undefined;\n for (const [label, doc] of Object.entries(hydeDocuments)) {\n if (mode === HYDE_FRAME_GENERATION_VERSION\n && !isFrameCacheDocument(doc, label, frameFingerprint!, sourceTextHash!)) continue;\n\n const key = cacheKey(\n mode,\n sourceType,\n sourceId ?? undefined,\n sourceText,\n label,\n doc.targetCorpus,\n frameFingerprint,\n );\n await self.cache.set(key, doc, { ttl: HYDE_DEFAULT_CACHE_TTL });\n\n if (sourceId) {\n await self.database.saveHydeDocument({\n sourceType,\n sourceId,\n strategy: dbStrategy(mode, label, doc.targetCorpus),\n targetCorpus: doc.targetCorpus,\n hydeText: doc.hydeText,\n hydeEmbedding: doc.hydeEmbedding,\n ...(mode === HYDE_FRAME_GENERATION_VERSION ? {\n context: {\n hydeGenerationVersion: HYDE_FRAME_GENERATION_VERSION,\n lensLabel: label,\n validationStatus: 'valid',\n frameFingerprint: doc.frameFingerprint,\n sourceTextHash: doc.sourceTextHash,\n generatedAt: doc.generatedAt,\n },\n } : {}),\n });\n }\n }\n return {};\n });\n };\n\n const workflow = new StateGraph(HydeGraphState)\n .addNode('infer_lenses', inferLensesNode)\n .addNode('check_cache', checkCacheNode)\n .addNode('generate_missing', generateMissingNode)\n .addNode('embed', embedNode)\n .addNode('cache_results', cacheResultsNode)\n .addEdge(START, 'infer_lenses')\n .addEdge('infer_lenses', 'check_cache')\n .addConditionalEdges('check_cache', shouldGenerate, {\n generate: 'generate_missing',\n skip: 'embed',\n });\n\n if (mode === HYDE_FRAME_GENERATION_VERSION) {\n workflow\n .addNode('validate_generated', validateGeneratedNode)\n .addEdge('generate_missing', 'validate_generated')\n .addEdge('validate_generated', 'embed');\n } else {\n workflow.addEdge('generate_missing', 'embed');\n }\n\n workflow\n .addEdge('embed', 'cache_results')\n .addEdge('cache_results', END);\n\n return workflow.compile();\n }\n}\n"]}
|
|
@@ -4,13 +4,22 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { Id } from '../interfaces/database.interface.js';
|
|
6
6
|
import type { Lens, HydeTargetCorpus } from './lens.inferrer.js';
|
|
7
|
+
import type { HydeSourceFrame } from './hyde.frame.js';
|
|
7
8
|
import type { DebugMetaAgent } from '../../chat/chat-streaming.types.js';
|
|
9
|
+
export type HydeDocumentOrigin = 'cache' | 'db' | 'generated';
|
|
10
|
+
export type HydeValidationStatus = 'valid' | 'invalid' | 'failed_open';
|
|
8
11
|
/** Single HyDE document (text + embedding) for one lens. */
|
|
9
12
|
export interface HydeDocumentState {
|
|
10
13
|
lens: string;
|
|
11
14
|
targetCorpus: HydeTargetCorpus;
|
|
12
15
|
hydeText: string;
|
|
13
16
|
hydeEmbedding: number[];
|
|
17
|
+
origin?: HydeDocumentOrigin;
|
|
18
|
+
validationStatus?: HydeValidationStatus;
|
|
19
|
+
hydeGenerationVersion?: 'frame-v1';
|
|
20
|
+
frameFingerprint?: string;
|
|
21
|
+
sourceTextHash?: string;
|
|
22
|
+
generatedAt?: string;
|
|
14
23
|
}
|
|
15
24
|
/** State for the HyDE generation graph. */
|
|
16
25
|
export declare const HydeGraphState: import("@langchain/langgraph").AnnotationRoot<{
|
|
@@ -36,9 +45,17 @@ export declare const HydeGraphState: import("@langchain/langgraph").AnnotationRo
|
|
|
36
45
|
forceRegenerate: import("@langchain/langgraph").BaseChannel<boolean, boolean | import("@langchain/langgraph").OverwriteValue<boolean>, unknown>;
|
|
37
46
|
/** Inferred lenses from the LensInferrer agent. */
|
|
38
47
|
lenses: import("@langchain/langgraph").BaseChannel<Lens[], Lens[] | import("@langchain/langgraph").OverwriteValue<Lens[]>, unknown>;
|
|
48
|
+
/** Sanitized source-grounded frame produced by frame-v1 inference. */
|
|
49
|
+
sourceFrame: import("@langchain/langgraph").BaseChannel<HydeSourceFrame | undefined, HydeSourceFrame | import("@langchain/langgraph").OverwriteValue<HydeSourceFrame | undefined> | undefined, unknown>;
|
|
50
|
+
/** Exact sourceText + sanitized sourceFrame identity for frame-v1 reuse. */
|
|
51
|
+
frameFingerprint: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
|
|
52
|
+
/** Hash of the exact source text for persisted frame-v1 freshness checks. */
|
|
53
|
+
sourceTextHash: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
|
|
54
|
+
/** Shared cohort marker assigned when this run generates any missing document. */
|
|
55
|
+
generatedAt: import("@langchain/langgraph").BaseChannel<string | undefined, string | import("@langchain/langgraph").OverwriteValue<string | undefined> | undefined, unknown>;
|
|
39
56
|
/**
|
|
40
|
-
* HyDE
|
|
41
|
-
*
|
|
57
|
+
* Complete HyDE document snapshot keyed by lens label. Writers replace the
|
|
58
|
+
* snapshot so rejected documents can be removed before embedding.
|
|
42
59
|
*/
|
|
43
60
|
hydeDocuments: import("@langchain/langgraph").BaseChannel<Record<string, HydeDocumentState>, Record<string, HydeDocumentState> | import("@langchain/langgraph").OverwriteValue<Record<string, HydeDocumentState>>, unknown>;
|
|
44
61
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hyde.state.d.ts","sourceRoot":"/","sources":["shared/hyde/hyde.state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"hyde.state.d.ts","sourceRoot":"/","sources":["shared/hyde/hyde.state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC;AAC9D,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAEvE,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,gBAAgB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,qBAAqB,CAAC,EAAE,UAAU,CAAC;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,2CAA2C;AAC3C,eAAO,MAAM,cAAc;IAGzB,mEAAmE;;;;;;IAGnE,4EAA4E;;IAM5E,qFAAqF;;;;;;IAGrF,4EAA4E;;IAM5E,qDAAqD;;IAMrD,0DAA0D;;IAQ1D,mDAAmD;;IAMnD,sEAAsE;;IAMtE,4EAA4E;;IAM5E,6EAA6E;;IAM7E,kFAAkF;;IAMlF;;;OAGG;;IAMH;;;OAGG;;IAMH,+BAA+B;;IAM/B,sEAAsE;;EAKtE,CAAC"}
|
|
@@ -36,12 +36,32 @@ export const HydeGraphState = Annotation.Root({
|
|
|
36
36
|
reducer: (curr, next) => next ?? curr,
|
|
37
37
|
default: () => [],
|
|
38
38
|
}),
|
|
39
|
+
/** Sanitized source-grounded frame produced by frame-v1 inference. */
|
|
40
|
+
sourceFrame: Annotation({
|
|
41
|
+
reducer: (curr, next) => next ?? curr,
|
|
42
|
+
default: () => undefined,
|
|
43
|
+
}),
|
|
44
|
+
/** Exact sourceText + sanitized sourceFrame identity for frame-v1 reuse. */
|
|
45
|
+
frameFingerprint: Annotation({
|
|
46
|
+
reducer: (curr, next) => next ?? curr,
|
|
47
|
+
default: () => undefined,
|
|
48
|
+
}),
|
|
49
|
+
/** Hash of the exact source text for persisted frame-v1 freshness checks. */
|
|
50
|
+
sourceTextHash: Annotation({
|
|
51
|
+
reducer: (curr, next) => next ?? curr,
|
|
52
|
+
default: () => undefined,
|
|
53
|
+
}),
|
|
54
|
+
/** Shared cohort marker assigned when this run generates any missing document. */
|
|
55
|
+
generatedAt: Annotation({
|
|
56
|
+
reducer: (curr, next) => next ?? curr,
|
|
57
|
+
default: () => undefined,
|
|
58
|
+
}),
|
|
39
59
|
/**
|
|
40
|
-
* HyDE
|
|
41
|
-
*
|
|
60
|
+
* Complete HyDE document snapshot keyed by lens label. Writers replace the
|
|
61
|
+
* snapshot so rejected documents can be removed before embedding.
|
|
42
62
|
*/
|
|
43
63
|
hydeDocuments: Annotation({
|
|
44
|
-
reducer: (curr, next) =>
|
|
64
|
+
reducer: (curr, next) => next ?? curr,
|
|
45
65
|
default: () => ({}),
|
|
46
66
|
}),
|
|
47
67
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hyde.state.js","sourceRoot":"/","sources":["shared/hyde/hyde.state.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"hyde.state.js","sourceRoot":"/","sources":["shared/hyde/hyde.state.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * HyDE Graph state: cache-aware hypothetical document generation.\n * Used by the HyDE graph for infer_lenses → check_cache → generate_missing → embed → cache_results.\n */\n\nimport { Annotation } from '@langchain/langgraph';\nimport type { Id } from '../interfaces/database.interface.js';\nimport type { Lens, HydeTargetCorpus } from './lens.inferrer.js';\nimport type { HydeSourceFrame } from './hyde.frame.js';\nimport type { DebugMetaAgent } from '../../chat/chat-streaming.types.js';\n\nexport type HydeDocumentOrigin = 'cache' | 'db' | 'generated';\nexport type HydeValidationStatus = 'valid' | 'invalid' | 'failed_open';\n\n/** Single HyDE document (text + embedding) for one lens. */\nexport interface HydeDocumentState {\n lens: string;\n targetCorpus: HydeTargetCorpus;\n hydeText: string;\n hydeEmbedding: number[];\n origin?: HydeDocumentOrigin;\n validationStatus?: HydeValidationStatus;\n hydeGenerationVersion?: 'frame-v1';\n frameFingerprint?: string;\n sourceTextHash?: string;\n generatedAt?: string;\n}\n\n/** State for the HyDE generation graph. */\nexport const HydeGraphState = Annotation.Root({\n // ─── Inputs ─────────────────────────────────────────────────────────────\n\n /** Source type: intent, profile, user context, or ad-hoc query. */\n sourceType: Annotation<'intent' | 'query' | 'context'>,\n\n /** Source entity ID (e.g. intent ID, user ID). Omitted for ad-hoc query. */\n sourceId: Annotation<Id<'intents'> | Id<'users'> | undefined>({\n reducer: (curr, next) => next ?? curr,\n default: () => undefined,\n }),\n\n /** Source text to generate HyDE from (intent payload, profile summary, or query). */\n sourceText: Annotation<string>,\n\n /** Optional profile context for lens inference (user's profile summary). */\n profileContext: Annotation<string | undefined>({\n reducer: (curr, next) => next ?? curr,\n default: () => undefined,\n }),\n\n /** Maximum number of lenses to infer (default 3). */\n maxLenses: Annotation<number>({\n reducer: (curr, next) => next ?? curr,\n default: () => 3,\n }),\n\n /** When true, skip cache/DB and regenerate all lenses. */\n forceRegenerate: Annotation<boolean>({\n reducer: (curr, next) => next ?? curr,\n default: () => false,\n }),\n\n // ─── Intermediate / output ─────────────────────────────────────────────\n\n /** Inferred lenses from the LensInferrer agent. */\n lenses: Annotation<Lens[]>({\n reducer: (curr, next) => next ?? curr,\n default: () => [],\n }),\n\n /** Sanitized source-grounded frame produced by frame-v1 inference. */\n sourceFrame: Annotation<HydeSourceFrame | undefined>({\n reducer: (curr, next) => next ?? curr,\n default: () => undefined,\n }),\n\n /** Exact sourceText + sanitized sourceFrame identity for frame-v1 reuse. */\n frameFingerprint: Annotation<string | undefined>({\n reducer: (curr, next) => next ?? curr,\n default: () => undefined,\n }),\n\n /** Hash of the exact source text for persisted frame-v1 freshness checks. */\n sourceTextHash: Annotation<string | undefined>({\n reducer: (curr, next) => next ?? curr,\n default: () => undefined,\n }),\n\n /** Shared cohort marker assigned when this run generates any missing document. */\n generatedAt: Annotation<string | undefined>({\n reducer: (curr, next) => next ?? curr,\n default: () => undefined,\n }),\n\n /**\n * Complete HyDE document snapshot keyed by lens label. Writers replace the\n * snapshot so rejected documents can be removed before embedding.\n */\n hydeDocuments: Annotation<Record<string, HydeDocumentState>>({\n reducer: (curr, next) => next ?? curr,\n default: () => ({}),\n }),\n\n /**\n * Final embeddings per lens (convenience output for search).\n * Populated by embed node; used by opportunity graph.\n */\n hydeEmbeddings: Annotation<Record<string, number[]>>({\n reducer: (curr, next) => (next ? { ...curr, ...next } : curr),\n default: () => ({}),\n }),\n\n /** Non-fatal error message. */\n error: Annotation<string | undefined>({\n reducer: (curr, next) => next ?? curr,\n default: () => undefined,\n }),\n\n /** Timing records for each agent invocation within this graph run. */\n agentTimings: Annotation<DebugMetaAgent[]>({\n reducer: (acc, val) => [...acc, ...val],\n default: () => [],\n }),\n});\n"]}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { BaseLanguageModelInput } from '@langchain/core/language_models/base';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import type { HydeSourceFrame } from './hyde.frame.js';
|
|
4
|
+
import type { HydeTargetCorpus } from './lens.inferrer.js';
|
|
5
|
+
export interface HydeValidationDocument {
|
|
6
|
+
corpus: HydeTargetCorpus;
|
|
7
|
+
text: string;
|
|
8
|
+
}
|
|
9
|
+
export interface HydeValidationInput {
|
|
10
|
+
sourceText: string;
|
|
11
|
+
sourceFrame: HydeSourceFrame;
|
|
12
|
+
/** Generated documents keyed by opaque caller-supplied identifiers. */
|
|
13
|
+
documents: Record<string, HydeValidationDocument>;
|
|
14
|
+
}
|
|
15
|
+
export interface HydeValidationVerdict {
|
|
16
|
+
key: string;
|
|
17
|
+
valid: boolean;
|
|
18
|
+
unsupportedNamedEntities: string[];
|
|
19
|
+
unsupportedHardConstraints: string[];
|
|
20
|
+
reasoning: string;
|
|
21
|
+
}
|
|
22
|
+
export interface HydeValidationOutput {
|
|
23
|
+
verdicts: HydeValidationVerdict[];
|
|
24
|
+
}
|
|
25
|
+
/** Structured-output schema for a single batch validation response. */
|
|
26
|
+
export declare const HydeValidationResponseSchema: z.ZodObject<{
|
|
27
|
+
verdicts: z.ZodArray<z.ZodObject<{
|
|
28
|
+
key: z.ZodString;
|
|
29
|
+
valid: z.ZodBoolean;
|
|
30
|
+
unsupportedNamedEntities: z.ZodArray<z.ZodString, "many">;
|
|
31
|
+
unsupportedHardConstraints: z.ZodArray<z.ZodString, "many">;
|
|
32
|
+
reasoning: z.ZodString;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
valid: boolean;
|
|
35
|
+
reasoning: string;
|
|
36
|
+
key: string;
|
|
37
|
+
unsupportedNamedEntities: string[];
|
|
38
|
+
unsupportedHardConstraints: string[];
|
|
39
|
+
}, {
|
|
40
|
+
valid: boolean;
|
|
41
|
+
reasoning: string;
|
|
42
|
+
key: string;
|
|
43
|
+
unsupportedNamedEntities: string[];
|
|
44
|
+
unsupportedHardConstraints: string[];
|
|
45
|
+
}>, "many">;
|
|
46
|
+
}, "strip", z.ZodTypeAny, {
|
|
47
|
+
verdicts: {
|
|
48
|
+
valid: boolean;
|
|
49
|
+
reasoning: string;
|
|
50
|
+
key: string;
|
|
51
|
+
unsupportedNamedEntities: string[];
|
|
52
|
+
unsupportedHardConstraints: string[];
|
|
53
|
+
}[];
|
|
54
|
+
}, {
|
|
55
|
+
verdicts: {
|
|
56
|
+
valid: boolean;
|
|
57
|
+
reasoning: string;
|
|
58
|
+
key: string;
|
|
59
|
+
unsupportedNamedEntities: string[];
|
|
60
|
+
unsupportedHardConstraints: string[];
|
|
61
|
+
}[];
|
|
62
|
+
}>;
|
|
63
|
+
/** Build a profile-free batch validation prompt. */
|
|
64
|
+
export declare function buildHydeValidationPrompt(input: HydeValidationInput): string;
|
|
65
|
+
/** Minimal structured model contract used for deterministic injection in tests. */
|
|
66
|
+
export interface HydeValidatorStructuredModel {
|
|
67
|
+
invoke(input: BaseLanguageModelInput, config?: {
|
|
68
|
+
signal?: AbortSignal;
|
|
69
|
+
}): Promise<unknown>;
|
|
70
|
+
}
|
|
71
|
+
/** Production structured-model batch validator for frame-v1 HyDE documents. */
|
|
72
|
+
export declare class HydeValidator {
|
|
73
|
+
private model?;
|
|
74
|
+
constructor(model?: HydeValidatorStructuredModel);
|
|
75
|
+
private getModel;
|
|
76
|
+
/** Validate all generated documents in one structured-model call. */
|
|
77
|
+
validate(input: HydeValidationInput): Promise<HydeValidationOutput>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=hyde.validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyde.validator.d.ts","sourceRoot":"/","sources":["shared/hyde/hyde.validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAEnF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,gBAAgB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,eAAe,CAAC;IAC7B,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,0BAA0B,EAAE,MAAM,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,qBAAqB,EAAE,CAAC;CACnC;AAED,uEAAuE;AACvE,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQvC,CAAC;AAaH,oDAAoD;AACpD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAE5E;AAED,mFAAmF;AACnF,MAAM,WAAW,4BAA4B;IAC3C,MAAM,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5F;AAED,+EAA+E;AAC/E,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAC,CAA+B;gBAEjC,KAAK,CAAC,EAAE,4BAA4B;IAIhD,OAAO,CAAC,QAAQ;IAOhB,qEAAqE;IAC/D,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAO1E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { HumanMessage, SystemMessage } from '@langchain/core/messages';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { createStructuredModel } from '../agent/model.config.js';
|
|
4
|
+
import { invokeWithAbortSignal } from '../agent/model-signal.js';
|
|
5
|
+
/** Structured-output schema for a single batch validation response. */
|
|
6
|
+
export const HydeValidationResponseSchema = z.object({
|
|
7
|
+
verdicts: z.array(z.object({
|
|
8
|
+
key: z.string().min(1),
|
|
9
|
+
valid: z.boolean(),
|
|
10
|
+
unsupportedNamedEntities: z.array(z.string()),
|
|
11
|
+
unsupportedHardConstraints: z.array(z.string()),
|
|
12
|
+
reasoning: z.string().min(1).describe('Concise explanation of the verdict'),
|
|
13
|
+
})),
|
|
14
|
+
});
|
|
15
|
+
const VALIDATOR_SYSTEM_PROMPT = `You validate hypothetical retrieval documents against a sanitized source-grounded frame.
|
|
16
|
+
|
|
17
|
+
A document is invalid only when it invents unsupported proper nouns/named entities or unsupported HARD constraints (location, time, numeric, credential, organization, or exclusivity constraints).
|
|
18
|
+
|
|
19
|
+
Explicitly allowed and not grounds for rejection:
|
|
20
|
+
- first-person target voice;
|
|
21
|
+
- generic role or domain elaboration;
|
|
22
|
+
- reciprocal or complementary inversion of source and target roles.
|
|
23
|
+
|
|
24
|
+
Return exactly one verdict for each opaque key. Copy each key exactly. Mark valid=false when either unsupported list is non-empty. Keep reasoning concise.`;
|
|
25
|
+
/** Build a profile-free batch validation prompt. */
|
|
26
|
+
export function buildHydeValidationPrompt(input) {
|
|
27
|
+
return `Source text:\n${input.sourceText}\n\nSanitized source frame:\n${JSON.stringify(input.sourceFrame)}\n\nGenerated documents:\n${JSON.stringify(input.documents)}`;
|
|
28
|
+
}
|
|
29
|
+
/** Production structured-model batch validator for frame-v1 HyDE documents. */
|
|
30
|
+
export class HydeValidator {
|
|
31
|
+
constructor(model) {
|
|
32
|
+
this.model = model;
|
|
33
|
+
}
|
|
34
|
+
getModel() {
|
|
35
|
+
this.model ?? (this.model = createStructuredModel('hydeValidator', HydeValidationResponseSchema, {
|
|
36
|
+
name: 'hyde_validator',
|
|
37
|
+
}));
|
|
38
|
+
return this.model;
|
|
39
|
+
}
|
|
40
|
+
/** Validate all generated documents in one structured-model call. */
|
|
41
|
+
async validate(input) {
|
|
42
|
+
const result = await invokeWithAbortSignal(this.getModel(), [
|
|
43
|
+
new SystemMessage(VALIDATOR_SYSTEM_PROMPT),
|
|
44
|
+
new HumanMessage(buildHydeValidationPrompt(input)),
|
|
45
|
+
]);
|
|
46
|
+
return HydeValidationResponseSchema.parse(result);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=hyde.validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyde.validator.js","sourceRoot":"/","sources":["shared/hyde/hyde.validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AA4BjE,uEAAuE;AACvE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACzB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACtB,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE;QAClB,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7C,0BAA0B,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KAC5E,CAAC,CAAC;CACJ,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG;;;;;;;;;2JAS2H,CAAC;AAE5J,oDAAoD;AACpD,MAAM,UAAU,yBAAyB,CAAC,KAA0B;IAClE,OAAO,iBAAiB,KAAK,CAAC,UAAU,gCAAgC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;AAC1K,CAAC;AAOD,+EAA+E;AAC/E,MAAM,OAAO,aAAa;IAGxB,YAAY,KAAoC;QAC9C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,KAAK,KAAV,IAAI,CAAC,KAAK,GAAK,qBAAqB,CAAC,eAAe,EAAE,4BAA4B,EAAE;YAClF,IAAI,EAAE,gBAAgB;SACvB,CAAC,EAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,QAAQ,CAAC,KAA0B;QACvC,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;YAC1D,IAAI,aAAa,CAAC,uBAAuB,CAAC;YAC1C,IAAI,YAAY,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;SACnD,CAAC,CAAC;QACH,OAAO,4BAA4B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACpD,CAAC;CACF","sourcesContent":["import type { BaseLanguageModelInput } from '@langchain/core/language_models/base';\nimport { HumanMessage, SystemMessage } from '@langchain/core/messages';\nimport { z } from 'zod';\n\nimport { createStructuredModel } from '../agent/model.config.js';\nimport { invokeWithAbortSignal } from '../agent/model-signal.js';\nimport type { HydeSourceFrame } from './hyde.frame.js';\nimport type { HydeTargetCorpus } from './lens.inferrer.js';\n\nexport interface HydeValidationDocument {\n corpus: HydeTargetCorpus;\n text: string;\n}\n\nexport interface HydeValidationInput {\n sourceText: string;\n sourceFrame: HydeSourceFrame;\n /** Generated documents keyed by opaque caller-supplied identifiers. */\n documents: Record<string, HydeValidationDocument>;\n}\n\nexport interface HydeValidationVerdict {\n key: string;\n valid: boolean;\n unsupportedNamedEntities: string[];\n unsupportedHardConstraints: string[];\n reasoning: string;\n}\n\nexport interface HydeValidationOutput {\n verdicts: HydeValidationVerdict[];\n}\n\n/** Structured-output schema for a single batch validation response. */\nexport const HydeValidationResponseSchema = z.object({\n verdicts: z.array(z.object({\n key: z.string().min(1),\n valid: z.boolean(),\n unsupportedNamedEntities: z.array(z.string()),\n unsupportedHardConstraints: z.array(z.string()),\n reasoning: z.string().min(1).describe('Concise explanation of the verdict'),\n })),\n});\n\nconst VALIDATOR_SYSTEM_PROMPT = `You validate hypothetical retrieval documents against a sanitized source-grounded frame.\n\nA document is invalid only when it invents unsupported proper nouns/named entities or unsupported HARD constraints (location, time, numeric, credential, organization, or exclusivity constraints).\n\nExplicitly allowed and not grounds for rejection:\n- first-person target voice;\n- generic role or domain elaboration;\n- reciprocal or complementary inversion of source and target roles.\n\nReturn exactly one verdict for each opaque key. Copy each key exactly. Mark valid=false when either unsupported list is non-empty. Keep reasoning concise.`;\n\n/** Build a profile-free batch validation prompt. */\nexport function buildHydeValidationPrompt(input: HydeValidationInput): string {\n return `Source text:\\n${input.sourceText}\\n\\nSanitized source frame:\\n${JSON.stringify(input.sourceFrame)}\\n\\nGenerated documents:\\n${JSON.stringify(input.documents)}`;\n}\n\n/** Minimal structured model contract used for deterministic injection in tests. */\nexport interface HydeValidatorStructuredModel {\n invoke(input: BaseLanguageModelInput, config?: { signal?: AbortSignal }): Promise<unknown>;\n}\n\n/** Production structured-model batch validator for frame-v1 HyDE documents. */\nexport class HydeValidator {\n private model?: HydeValidatorStructuredModel;\n\n constructor(model?: HydeValidatorStructuredModel) {\n this.model = model;\n }\n\n private getModel(): HydeValidatorStructuredModel {\n this.model ??= createStructuredModel('hydeValidator', HydeValidationResponseSchema, {\n name: 'hyde_validator',\n });\n return this.model;\n }\n\n /** Validate all generated documents in one structured-model call. */\n async validate(input: HydeValidationInput): Promise<HydeValidationOutput> {\n const result = await invokeWithAbortSignal(this.getModel(), [\n new SystemMessage(VALIDATOR_SYSTEM_PROMPT),\n new HumanMessage(buildHydeValidationPrompt(input)),\n ]);\n return HydeValidationResponseSchema.parse(result);\n }\n}\n"]}
|