@anvia/neo4j 1.1.5 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/graph-8BTZ0V9h.js +1145 -0
- package/dist/graph-8BTZ0V9h.js.map +1 -0
- package/dist/index.d.ts +240 -254
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -106
- package/dist/src-CxFXzoZ7.js +646 -0
- package/dist/src-CxFXzoZ7.js.map +1 -0
- package/package.json +9 -9
- package/dist/chunk-IVKNAFKG.js +0 -1607
- package/dist/chunk-IVKNAFKG.js.map +0 -1
- package/dist/chunk-QTIUFXDY.js +0 -527
- package/dist/chunk-QTIUFXDY.js.map +0 -1
- package/dist/chunk-V33PR5HS.js +0 -214
- package/dist/chunk-V33PR5HS.js.map +0 -1
- package/dist/explore-PNLRCONH.js +0 -8
- package/dist/explore-PNLRCONH.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/retrieve-A6UD55NM.js +0 -8
- package/dist/retrieve-A6UD55NM.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src-CxFXzoZ7.js","names":["createDriver","traversalPattern","managedPathAndPredicate","stringValue","applicationProperties","managedScope","extractGraphFacts","extractSharedGraphFacts"],"sources":["../src/client.ts","../src/explore.ts","../src/extract.ts","../src/retrieve.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { auth, driver as createDriver, type Driver } from \"neo4j-driver\";\nimport {\n ManagedNeo4jKnowledgeGraph,\n neo4jTenantScope,\n Neo4jKnowledgeGraph,\n type Neo4jTenantScope,\n} from \"./graph.js\";\nimport type {\n ManagedNeo4jKnowledgeGraphOptions,\n Neo4jClientOptions,\n Neo4jGraphSchema,\n Neo4jKnowledgeGraphOptions,\n} from \"./types.js\";\n\nexport class Neo4jClient {\n private readonly driver: Driver;\n private readonly ownsDriver: boolean;\n private closed = false;\n readonly database: string | undefined;\n\n constructor(options: Neo4jClientOptions) {\n this.database = options.database;\n if (\"driver\" in options) {\n this.driver = options.driver;\n this.ownsDriver = false;\n } else {\n if (typeof options.uri !== \"string\" || options.uri.length === 0) {\n throw new TypeError(\"Neo4jClient uri must be a non-empty string.\");\n }\n if (\n typeof options.auth.username !== \"string\" ||\n options.auth.username.length === 0 ||\n typeof options.auth.password !== \"string\"\n ) {\n throw new TypeError(\"Neo4jClient requires explicit username and password credentials.\");\n }\n this.driver = createDriver(\n options.uri,\n auth.basic(options.auth.username, options.auth.password),\n );\n this.ownsDriver = true;\n }\n }\n\n managedKnowledgeGraph<Schema extends Neo4jGraphSchema>(\n options: ManagedNeo4jKnowledgeGraphOptions<Schema>,\n ): ManagedNeo4jKnowledgeGraph<Schema> {\n this.assertOpen();\n return new ManagedNeo4jKnowledgeGraph(this, options);\n }\n\n tenant(tenantId: string): Neo4jTenant {\n this.assertOpen();\n return new Neo4jTenant(this, neo4jTenantScope(tenantNamespace(tenantId)));\n }\n\n knowledgeGraph<Schema extends Neo4jGraphSchema>(\n options: Neo4jKnowledgeGraphOptions<Schema>,\n ): Neo4jKnowledgeGraph<Schema> {\n this.assertOpen();\n return new Neo4jKnowledgeGraph(this, options);\n }\n\n nativeDriver(): Driver {\n this.assertOpen();\n return this.driver;\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n if (this.ownsDriver) await this.driver.close();\n }\n\n [Symbol.asyncDispose](): Promise<void> {\n return this.close();\n }\n\n private assertOpen(): void {\n if (this.closed) throw new Error(\"Neo4jClient is closed.\");\n }\n}\n\nexport class Neo4jTenant {\n constructor(\n private readonly owner: Neo4jClient,\n private readonly scope: Neo4jTenantScope,\n ) {}\n\n get namespace(): string {\n return this.scope.namespace;\n }\n\n managedKnowledgeGraph<Schema extends Neo4jGraphSchema>(\n options: ManagedNeo4jKnowledgeGraphOptions<Schema>,\n ): ManagedNeo4jKnowledgeGraph<Schema> {\n this.owner.nativeDriver();\n return new ManagedNeo4jKnowledgeGraph(this.owner, options, this.scope);\n }\n}\n\nfunction tenantNamespace(tenantId: string): string {\n if (typeof tenantId !== \"string\" || tenantId.trim().length === 0)\n throw new TypeError(\"Neo4j tenant id must be a non-empty string.\");\n return createHash(\"sha256\").update(tenantId).digest(\"hex\");\n}\n","import {\n resolveGraphExploreOptions,\n type GraphExploreNode,\n type GraphExploreOptions,\n type GraphExploreRelationship,\n type GraphExploreResult,\n type ResolvedGraphExploreExpandOptions,\n} from \"@anvia/graph\";\nimport { int, type Record as Neo4jRecord } from \"neo4j-driver\";\nimport { ManagedNeo4jKnowledgeGraph, Neo4jKnowledgeGraphBase } from \"./graph.js\";\nimport { quoteIdentifier } from \"./helpers.js\";\nimport {\n managedPathPredicate,\n managedScopeParameters,\n managedScopePredicate,\n type Neo4jManagedScope,\n} from \"./managed-scope.js\";\nimport { parseNeo4jProperties } from \"./schema.js\";\nimport type { Neo4jGraphSchema, Neo4jNodeIdentity } from \"./types.js\";\n\nexport async function exploreGraph<Schema extends Neo4jGraphSchema>(\n graph: Neo4jKnowledgeGraphBase<Schema>,\n options: GraphExploreOptions<Schema>,\n): Promise<GraphExploreResult> {\n if (!(graph instanceof Neo4jKnowledgeGraphBase)) {\n throw new TypeError(\"exploreGraph requires a Neo4j knowledge graph registration.\");\n }\n const resolved = resolveGraphExploreOptions(graph.schema, options);\n const records =\n resolved.mode === \"overview\"\n ? await overviewNodes(graph, resolved)\n : await expandedNodes(graph, resolved);\n const nodes = uniqueNodes(\n records.map((record) => nodeFromRecord(record, graph.schema, resolved.includeProvenance)),\n );\n const visibleNodes = nodes.slice(0, resolved.maxNodes);\n const relationships = await relationshipsBetween(\n graph,\n visibleNodes.map((node) => node.id),\n resolved.relationships,\n resolved.maxRelationships,\n resolved.includeProvenance,\n resolved.abortSignal,\n );\n return {\n nodes: visibleNodes,\n relationships: relationships.slice(0, resolved.maxRelationships),\n truncated: {\n nodes: records.length > resolved.maxNodes || nodes.length > resolved.maxNodes,\n relationships: relationships.length > resolved.maxRelationships,\n },\n };\n}\n\nasync function overviewNodes(\n graph: Neo4jKnowledgeGraphBase,\n options: ReturnType<typeof resolveGraphExploreOptions> & { mode: \"overview\" },\n): Promise<readonly Neo4jRecord[]> {\n const result = await graph.query(\n `MATCH (node${managedEntityLabel(graph)})\nWHERE any(type IN labels(node) WHERE type IN $nodeTypes)${managedAndPredicate(graph, \"node\")}\nRETURN elementId(node) AS id, labels(node) AS labels, properties(node) AS properties\nORDER BY elementId(node)\nLIMIT $nodeLimit`,\n managedParameters(graph, {\n nodeTypes: options.nodeTypes,\n nodeLimit: int(options.maxNodes + 1),\n }),\n options.abortSignal,\n );\n return result.records;\n}\n\nasync function expandedNodes(\n graph: Neo4jKnowledgeGraphBase,\n options: ResolvedGraphExploreExpandOptions,\n): Promise<readonly Neo4jRecord[]> {\n const roots = await graph.query(\n `MATCH (node${managedEntityLabel(graph)})\nWHERE elementId(node) IN $nodeIds\n AND any(type IN labels(node) WHERE type IN $nodeTypes)${managedAndPredicate(graph, \"node\")}\nRETURN elementId(node) AS id, labels(node) AS labels, properties(node) AS properties`,\n managedParameters(graph, { nodeIds: options.nodeIds, nodeTypes: options.nodeTypes }),\n options.abortSignal,\n );\n if (options.relationships.length === 0) return roots.records;\n const remainingNodeLimit = options.maxNodes + 1 - roots.records.length;\n if (remainingNodeLimit <= 0) return roots.records;\n const pattern = traversalPattern(options.direction, options.maxDepth);\n const neighbors = await graph.query(\n `MATCH (root${managedEntityLabel(graph)}) WHERE elementId(root) IN $nodeIds${managedAndPredicate(graph, \"root\")}\nMATCH path = ${pattern}\nWHERE all(rel IN relationships(path) WHERE type(rel) IN $relationshipTypes)\n AND any(type IN labels(node) WHERE type IN $nodeTypes)${managedAndPredicate(graph, \"node\")}${managedPathAndPredicate(graph)}\nRETURN elementId(node) AS id, labels(node) AS labels, properties(node) AS properties\nLIMIT $nodeLimit`,\n managedParameters(graph, {\n nodeIds: options.nodeIds,\n nodeTypes: options.nodeTypes,\n relationshipTypes: options.relationships,\n nodeLimit: int(remainingNodeLimit),\n }),\n options.abortSignal,\n );\n return [...roots.records, ...neighbors.records];\n}\n\nasync function relationshipsBetween(\n graph: Neo4jKnowledgeGraphBase,\n nodeIds: readonly string[],\n relationshipTypes: readonly string[],\n maxRelationships: number,\n includeProvenance: boolean,\n abortSignal?: AbortSignal,\n): Promise<GraphExploreRelationship[]> {\n if (nodeIds.length === 0 || relationshipTypes.length === 0) return [];\n const result = await graph.query(\n `MATCH (from)-[relationship]->(to)\nWHERE elementId(from) IN $nodeIds\n AND elementId(to) IN $nodeIds\n AND type(relationship) IN $relationshipTypes${managedAndPredicate(graph, \"from\")}${managedAndPredicate(graph, \"to\")}${managedAndPredicate(graph, \"relationship\")}\nRETURN elementId(relationship) AS id,\n type(relationship) AS type,\n elementId(from) AS source,\n elementId(to) AS target,\n properties(relationship) AS properties\nORDER BY elementId(relationship)\nLIMIT $relationshipLimit`,\n managedParameters(graph, {\n nodeIds,\n relationshipTypes,\n relationshipLimit: int(maxRelationships + 1),\n }),\n abortSignal,\n );\n return result.records.map((record) => relationshipFromRecord(record, includeProvenance));\n}\n\nfunction nodeFromRecord(\n record: Neo4jRecord,\n schema: Neo4jGraphSchema,\n includeProvenance: boolean,\n): GraphExploreNode {\n const id = stringValue(record.get(\"id\"), \"Neo4j explorer node id\");\n const labels = stringArray(record.get(\"labels\"), \"Neo4j explorer node labels\");\n const raw = objectValue(record.get(\"properties\"), \"Neo4j explorer node properties\");\n const type = labels.find((label) => label in schema.nodes);\n if (type === undefined) throw new TypeError(\"Neo4j explorer node has no registered type.\");\n const properties = applicationProperties(raw, \"Neo4j explorer node properties\");\n const node: {\n id: string;\n key?: string | undefined;\n type: string;\n identity: Neo4jNodeIdentity;\n properties: typeof properties;\n provenance?: { documentIds: string[]; chunkIds: string[] } | undefined;\n } = {\n id,\n type,\n identity: identityProperties(schema, type, properties),\n properties,\n };\n const key = raw.__anvia_key;\n if (typeof key === \"string\") node.key = key;\n if (includeProvenance) node.provenance = provenanceProperties(raw);\n return node;\n}\n\nfunction relationshipFromRecord(\n record: Neo4jRecord,\n includeProvenance: boolean,\n): GraphExploreRelationship {\n const raw = objectValue(record.get(\"properties\"), \"Neo4j explorer relationship properties\");\n const relationship: {\n id: string;\n key?: string | undefined;\n type: string;\n from: string;\n to: string;\n properties: ReturnType<typeof applicationProperties>;\n provenance?: { documentIds: string[]; chunkIds: string[] } | undefined;\n } = {\n id: stringValue(record.get(\"id\"), \"Neo4j explorer relationship id\"),\n type: stringValue(record.get(\"type\"), \"Neo4j explorer relationship type\"),\n from: stringValue(record.get(\"source\"), \"Neo4j explorer relationship source\"),\n to: stringValue(record.get(\"target\"), \"Neo4j explorer relationship target\"),\n properties: applicationProperties(raw, \"Neo4j explorer relationship properties\"),\n };\n const key = raw.__anvia_key;\n if (typeof key === \"string\") relationship.key = key;\n if (includeProvenance) relationship.provenance = provenanceProperties(raw);\n return relationship;\n}\n\nfunction provenanceProperties(value: Record<string, unknown>) {\n return {\n documentIds: optionalStringArray(value.__anvia_source_document_ids),\n chunkIds: optionalStringArray(value.__anvia_source_chunk_ids),\n };\n}\n\nfunction optionalStringArray(value: unknown): string[] {\n if (value === undefined) return [];\n return stringArray(value, \"Neo4j explorer provenance\");\n}\n\nfunction identityProperties(\n schema: Neo4jGraphSchema,\n type: string,\n properties: ReturnType<typeof applicationProperties>,\n): Neo4jNodeIdentity {\n const identity: Record<string, string | number | boolean> = {};\n const definition = schema.nodes[type];\n if (definition === undefined) return identity;\n for (const property of definition.identity) {\n const value = properties[property];\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n identity[property] = value;\n }\n }\n return identity;\n}\n\nfunction applicationProperties(value: Record<string, unknown>, label: string) {\n return parseNeo4jProperties(\n Object.fromEntries(Object.entries(value).filter(([key]) => !key.startsWith(\"__anvia_\"))),\n label,\n );\n}\n\nfunction uniqueNodes(nodes: readonly GraphExploreNode[]): GraphExploreNode[] {\n return [...new Map(nodes.map((node) => [node.id, node])).values()];\n}\n\nfunction traversalPattern(direction: \"outgoing\" | \"incoming\" | \"both\", maxDepth: number): string {\n if (direction === \"outgoing\") return `(root)-[*1..${maxDepth}]->(node)`;\n if (direction === \"incoming\") return `(root)<-[*1..${maxDepth}]-(node)`;\n return `(root)-[*1..${maxDepth}]-(node)`;\n}\n\nfunction managedEntityLabel(graph: Neo4jKnowledgeGraphBase): string {\n return graph instanceof ManagedNeo4jKnowledgeGraph\n ? `:${quoteIdentifier(graph.resources.labels.entity)}`\n : \"\";\n}\n\nfunction managedParameters(\n graph: Neo4jKnowledgeGraphBase,\n parameters: Record<string, unknown>,\n): Record<string, unknown> {\n return managedScopeParameters(managedScope(graph), parameters);\n}\n\nfunction managedAndPredicate(graph: Neo4jKnowledgeGraphBase, variable: string): string {\n return managedScopePredicate(managedScope(graph), variable, \" AND\");\n}\n\nfunction managedPathAndPredicate(graph: Neo4jKnowledgeGraphBase): string {\n return managedPathPredicate(managedScope(graph), true);\n}\n\nfunction managedScope(graph: Neo4jKnowledgeGraphBase): Neo4jManagedScope | undefined {\n return graph instanceof ManagedNeo4jKnowledgeGraph\n ? { graph: graph.name, namespace: graph.namespace }\n : undefined;\n}\n\nfunction stringValue(value: unknown, label: string): string {\n if (typeof value !== \"string\") throw new TypeError(`${label} must be a string.`);\n return value;\n}\n\nfunction stringArray(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || !value.every((item) => typeof item === \"string\")) {\n throw new TypeError(`${label} must be a string array.`);\n }\n return value;\n}\n\nfunction objectValue(value: unknown, label: string): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${label} must be an object.`);\n }\n return value as Record<string, unknown>;\n}\n","import { extractGraphFacts as extractSharedGraphFacts, GraphFactConflictError } from \"@anvia/graph\";\nimport type {\n ExtractGraphFactsOptions,\n ExtractGraphFactsResult,\n Neo4jGraphSchema,\n} from \"./types.js\";\n\nexport { GraphFactConflictError };\n\nexport async function extractGraphFacts<\n Schema extends Neo4jGraphSchema,\n Model extends import(\"@anvia/core\").CompletionModel,\n>(options: ExtractGraphFactsOptions<Schema, Model>): Promise<ExtractGraphFactsResult<Schema>> {\n return extractSharedGraphFacts(options) as Promise<ExtractGraphFactsResult<Schema>>;\n}\n","import { embedText } from \"@anvia/core/embeddings\";\nimport { int, isInt, type Record as Neo4jRecord } from \"neo4j-driver\";\nimport { ManagedNeo4jKnowledgeGraph, Neo4jKnowledgeGraphBase } from \"./graph.js\";\nimport {\n finiteScore,\n positiveInteger,\n quoteIdentifier,\n strictProperties,\n throwIfAborted,\n} from \"./helpers.js\";\nimport {\n managedPathPredicate,\n managedScopeParameters,\n managedScopePredicate,\n tenantScopePredicate,\n type Neo4jManagedScope,\n} from \"./managed-scope.js\";\nimport type {\n Neo4jGraphContext,\n Neo4jGraphContextNode,\n Neo4jGraphContextRelationship,\n Neo4jGraphContextSeed,\n Neo4jGraphEvidence,\n Neo4jGraphEvidenceOptions,\n Neo4jGraphSchema,\n RetrieveGraphContextOptions,\n} from \"./types.js\";\n\ntype SearchHit = {\n elementId: string;\n labels: string[];\n properties: Record<string, unknown>;\n score: number;\n entryRelationshipType?: string | undefined;\n};\n\nexport async function retrieveGraphContext<Schema extends Neo4jGraphSchema>(\n options: RetrieveGraphContextOptions<Schema>,\n): Promise<Neo4jGraphContext> {\n if (!(options.graph instanceof Neo4jKnowledgeGraphBase)) {\n throw new TypeError(\"retrieveGraphContext requires a Neo4j knowledge graph registration.\");\n }\n if (typeof options.query !== \"string\" || options.query.trim().length === 0) {\n throw new TypeError(\"Graph retrieval query must be a non-empty string.\");\n }\n validateSearch(options.search);\n validateTraversal(options.graph.schema, options.traversal);\n validateEvidence(options.graph.evidenceCapability, options.evidence);\n throwIfAborted(options.abortSignal);\n const graph = options.graph as Neo4jKnowledgeGraphBase<Schema>;\n const selectedSeeds = options.search.seeds.map((name) => ({ name, seed: graph.seed(name) }));\n const expectedDimensions = selectedSeeds[0]?.seed.vectorIndex.dimensions;\n if (\n expectedDimensions === undefined ||\n selectedSeeds.some((item) => item.seed.vectorIndex.dimensions !== expectedDimensions)\n ) {\n throw new TypeError(\"Selected Neo4j graph seeds must use the same vector dimensions.\");\n }\n if (options.model.dimensions !== undefined && options.model.dimensions !== expectedDimensions) {\n throw new TypeError(\n `Embedding model dimensions ${options.model.dimensions} do not match Neo4j graph dimensions ${expectedDimensions}.`,\n );\n }\n if (options.search.type === \"hybrid\") {\n for (const { name, seed } of selectedSeeds) {\n if (seed.fulltextIndex === undefined) {\n throw new TypeError(`Neo4j graph seed ${name} does not declare a full-text index.`);\n }\n }\n }\n const { embedding } = await embedText({\n model: options.model,\n text: options.query,\n retries: options.retries,\n abortSignal: options.abortSignal,\n });\n if (embedding.vector.length !== expectedDimensions) {\n throw new TypeError(\n `Query embedding dimensions ${embedding.vector.length} do not match Neo4j graph dimensions ${expectedDimensions}.`,\n );\n }\n\n const resultLists: SearchHit[][] = [];\n for (const { seed } of selectedSeeds) {\n const limit =\n options.search.type === \"hybrid\" ? options.search.candidatesPerSeed : options.search.topK;\n resultLists.push(\n await vectorSearch(\n graph,\n seed.labels,\n seed.vectorIndex.name,\n embedding.vector,\n limit,\n seed.entryRelationshipType,\n options.abortSignal,\n ),\n );\n if (options.search.type === \"hybrid\") {\n const fulltextIndex = seed.fulltextIndex;\n if (fulltextIndex === undefined) {\n throw new TypeError(\"Hybrid Neo4j graph retrieval requires a full-text index.\");\n }\n resultLists.push(\n await fulltextSearch(\n graph,\n fulltextIndex.name,\n options.query,\n limit,\n seed.entryRelationshipType,\n options.abortSignal,\n ),\n );\n }\n }\n\n const hits =\n options.search.type === \"hybrid\"\n ? fuseResults(resultLists, options.search.topK, options.search.rrfK)\n : vectorResults(resultLists[0] ?? [], options.search.topK, options.search.minScore);\n throwIfAborted(options.abortSignal);\n const seeds = hits.map((hit) => seedFromHit(hit, options.graph.schema));\n const traversed =\n hits.length === 0\n ? { nodes: [], relationships: [] }\n : await traverse(graph, hits, options.traversal, options.abortSignal);\n const context = { seeds, ...traversed };\n const evidence = await hydrateEvidence(graph, context, options.evidence, options.abortSignal);\n return { ...context, evidence };\n}\n\nasync function vectorSearch(\n graph: Neo4jKnowledgeGraphBase,\n labels: readonly string[],\n indexName: string,\n vector: readonly number[],\n limit: number,\n entryRelationshipType?: string,\n abortSignal?: AbortSignal,\n): Promise<SearchHit[]> {\n const labelExpression = labels.map(quoteIdentifier).join(\"|\");\n const vectorFilter =\n graph instanceof ManagedNeo4jKnowledgeGraph && graph.namespace !== undefined\n ? ` WHERE seed.${quoteIdentifier(\"__anvia_namespace\")} = $namespace`\n : \"\";\n const postFilter = managedSearchPredicate(\n graph,\n \"seed\",\n entryRelationshipType === \"ANVIA_MENTIONS\",\n );\n const result = await graph.query(\n `CYPHER 25\nMATCH (seed:${labelExpression})\nSEARCH seed IN (VECTOR INDEX ${quoteIdentifier(indexName)} FOR $vector${vectorFilter} LIMIT $limit) SCORE AS score\n${postFilter}\nRETURN elementId(seed) AS elementId, labels(seed) AS labels, properties(seed) AS properties, score`,\n managedQueryParameters(graph, { vector, limit: int(limit) }),\n abortSignal,\n );\n return result.records.map((record) => ({ ...parseSearchHit(record), entryRelationshipType }));\n}\n\nasync function fulltextSearch(\n graph: Neo4jKnowledgeGraphBase,\n indexName: string,\n query: string,\n limit: number,\n entryRelationshipType?: string,\n abortSignal?: AbortSignal,\n): Promise<SearchHit[]> {\n const result = await graph.query(\n `CALL db.index.fulltext.queryNodes($indexName, $query, {limit: $limit}) YIELD node AS seed, score\n${managedSearchPredicate(graph, \"seed\", entryRelationshipType === \"ANVIA_MENTIONS\")}\nRETURN elementId(seed) AS elementId, labels(seed) AS labels, properties(seed) AS properties, score`,\n managedQueryParameters(graph, {\n indexName,\n query: scopedFulltextQuery(graph, query),\n limit: int(limit),\n }),\n abortSignal,\n );\n return result.records.map((record) => ({ ...parseSearchHit(record), entryRelationshipType }));\n}\n\nfunction parseSearchHit(record: Neo4jRecord): SearchHit {\n const elementId = record.get(\"elementId\");\n const labels = record.get(\"labels\");\n const properties = record.get(\"properties\");\n const score = record.get(\"score\");\n if (\n typeof elementId !== \"string\" ||\n !Array.isArray(labels) ||\n !labels.every((label) => typeof label === \"string\") ||\n typeof properties !== \"object\" ||\n properties === null ||\n typeof score !== \"number\" ||\n !Number.isFinite(score)\n ) {\n throw new TypeError(\"Neo4j search returned a malformed result.\");\n }\n return { elementId, labels, properties: properties as Record<string, unknown>, score };\n}\n\nfunction seedFromHit(hit: SearchHit, schema: Neo4jGraphSchema): Neo4jGraphContextSeed {\n const application = applicationProperties(hit.properties, \"Neo4j search seed\");\n const key =\n stringProperty(hit.properties, \"__anvia_key\") ??\n stringProperty(hit.properties, \"__anvia_id\") ??\n hit.elementId;\n const type = hit.labels.find((label) => label in schema.nodes) ?? hit.labels[0] ?? \"Node\";\n return {\n key,\n type,\n score: hit.score,\n properties: application,\n sourceChunkIds:\n hit.entryRelationshipType === \"ANVIA_MENTIONS\"\n ? [key]\n : stringArrayProperty(hit.properties, \"__anvia_source_chunk_ids\"),\n };\n}\n\nasync function hydrateEvidence(\n graph: Neo4jKnowledgeGraphBase,\n context: Pick<Neo4jGraphContext, \"seeds\" | \"nodes\" | \"relationships\">,\n options: Neo4jGraphEvidenceOptions,\n abortSignal?: AbortSignal,\n): Promise<Neo4jGraphEvidence[]> {\n if (options.type === \"none\") return [];\n if (!(graph instanceof ManagedNeo4jKnowledgeGraph)) {\n throw new TypeError(\"Chunk evidence requires a managed Neo4j knowledge graph.\");\n }\n const chunkIds: string[] = [];\n const seen = new Set<string>();\n for (const sourceChunkIds of [\n ...context.seeds.map((seed) => seed.sourceChunkIds),\n ...context.nodes.map((node) => node.sourceChunkIds),\n ...context.relationships.map((relationship) => relationship.sourceChunkIds),\n ]) {\n for (const chunkId of sourceChunkIds) {\n if (seen.has(chunkId)) continue;\n seen.add(chunkId);\n chunkIds.push(chunkId);\n if (chunkIds.length === options.maxChunks) break;\n }\n if (chunkIds.length === options.maxChunks) break;\n }\n if (chunkIds.length === 0) return [];\n throwIfAborted(abortSignal);\n const result = await graph.query(\n `MATCH (d:${quoteIdentifier(graph.resources.labels.document)})-[:${quoteIdentifier(\"ANVIA_HAS_CHUNK\")}]->(c:${quoteIdentifier(graph.resources.labels.chunk)})\nWHERE c.${quoteIdentifier(\"__anvia_id\")} IN $chunkIds\n ${tenantNodeAndPredicate(graph, \"d\")}${tenantNodeAndPredicate(graph, \"c\")}\nRETURN c.${quoteIdentifier(\"__anvia_id\")} AS chunkId,\n d.${quoteIdentifier(\"__anvia_id\")} AS documentId,\n c.${quoteIdentifier(\"__anvia_index\")} AS index,\n c.${quoteIdentifier(\"__anvia_text\")} AS text,\n properties(c) AS properties`,\n managedQueryParameters(graph, { chunkIds }),\n abortSignal,\n );\n const byId = new Map<string, Neo4jGraphEvidence>();\n for (const record of result.records) {\n const evidence = evidenceFromRecord(record);\n if (byId.has(evidence.chunkId)) {\n throw new TypeError(`Neo4j evidence returned duplicate chunk ${evidence.chunkId}.`);\n }\n byId.set(evidence.chunkId, evidence);\n }\n return chunkIds.map((chunkId) => {\n const evidence = byId.get(chunkId);\n if (evidence === undefined) {\n throw new Error(`Neo4j graph evidence references missing chunk ${chunkId}.`);\n }\n return evidence;\n });\n}\n\nfunction evidenceFromRecord(record: Neo4jRecord): Neo4jGraphEvidence {\n const chunkId = stringValue(record.get(\"chunkId\"), \"Neo4j evidence chunk id\");\n const documentId = stringValue(record.get(\"documentId\"), \"Neo4j evidence document id\");\n const index = safeIntegerValue(record.get(\"index\"), \"Neo4j evidence chunk index\");\n const text = stringValue(record.get(\"text\"), \"Neo4j evidence text\");\n const raw = record.get(\"properties\");\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"Neo4j evidence properties must be an object.\");\n }\n return {\n chunkId,\n documentId,\n index,\n text,\n metadata: applicationProperties(raw as Record<string, unknown>, \"Neo4j evidence metadata\"),\n };\n}\n\nfunction safeIntegerValue(value: unknown, label: string): number {\n let number = value;\n if (isInt(value)) {\n number = undefined;\n if (value.inSafeRange()) {\n number = value.toNumber();\n }\n }\n if (typeof number !== \"number\" || !Number.isSafeInteger(number)) {\n throw new TypeError(`${label} must be a safe integer.`);\n }\n return number;\n}\n\nfunction vectorResults(\n results: SearchHit[],\n topK: number,\n minScore: number | undefined,\n): SearchHit[] {\n return results.filter((item) => minScore === undefined || item.score >= minScore).slice(0, topK);\n}\n\nasync function traverse<Schema extends Neo4jGraphSchema>(\n graph: Neo4jKnowledgeGraphBase<Schema>,\n seeds: readonly SearchHit[],\n options: RetrieveGraphContextOptions<Schema>[\"traversal\"],\n abortSignal?: AbortSignal,\n): Promise<{ nodes: Neo4jGraphContextNode[]; relationships: Neo4jGraphContextRelationship[] }> {\n const traversalSeedIds = new Set(\n seeds.filter((seed) => seed.entryRelationshipType === undefined).map((seed) => seed.elementId),\n );\n const entryGroups = groupBy(\n seeds.filter(\n (seed): seed is SearchHit & { entryRelationshipType: string } =>\n seed.entryRelationshipType !== undefined,\n ),\n (seed) => seed.entryRelationshipType,\n );\n for (const [relationshipType, group] of entryGroups) {\n const entries = await graph.query(\n `MATCH (seed) WHERE elementId(seed) IN $seedIds\n ${tenantNodePredicate(graph, \"seed\", \"AND\")}\nMATCH (seed)-[entryRelationship:${quoteIdentifier(relationshipType)}]->(entry)\nWHERE true${managedNodeAndPredicate(graph, \"entry\")}${tenantNodeAndPredicate(graph, \"entryRelationship\")}\nRETURN DISTINCT elementId(entry) AS elementId`,\n managedQueryParameters(graph, { seedIds: group.map((seed) => seed.elementId) }),\n abortSignal,\n );\n for (const record of entries.records) {\n traversalSeedIds.add(stringValue(record.get(\"elementId\"), \"Neo4j entry elementId\"));\n }\n }\n if (traversalSeedIds.size === 0) return { nodes: [], relationships: [] };\n const limitedSeedIds = [...traversalSeedIds].slice(0, options.maxNodes);\n const pattern = traversalPattern(options.direction, options.maxDepth);\n const pathLimit = Math.max(options.maxNodes, options.maxRelationships);\n const seedNodes = await graph.query(\n `MATCH (node) WHERE elementId(node) IN $seedIds\n ${managedNodePredicate(graph, \"node\", \"AND\")}\nRETURN {elementId: elementId(node), labels: labels(node), properties: properties(node)} AS node`,\n managedQueryParameters(graph, { seedIds: limitedSeedIds }),\n abortSignal,\n );\n const result = await graph.query(\n `MATCH (seed) WHERE elementId(seed) IN $seedIds\n ${managedNodePredicate(graph, \"seed\", \"AND\")}\nMATCH path = ${pattern}\nWHERE all(rel IN relationships(path) WHERE type(rel) IN $relationshipTypes${managedRelationshipAndPredicate(graph, \"rel\")})${managedPathAndPredicate(graph)}\nRETURN [item IN nodes(path) | {elementId: elementId(item), labels: labels(item), properties: properties(item)}] AS nodes,\n [item IN relationships(path) | {elementId: elementId(item), type: type(item), properties: properties(item), from: elementId(startNode(item)), to: elementId(endNode(item))}] AS relationships\nLIMIT $pathLimit`,\n managedQueryParameters(graph, {\n seedIds: limitedSeedIds,\n relationshipTypes: options.relationships,\n pathLimit: int(pathLimit),\n }),\n abortSignal,\n );\n const nodes = new Map<string, Neo4jGraphContextNode>();\n const nodeKeysByElementId = new Map<string, string>();\n const relationships = new Map<string, Neo4jGraphContextRelationship>();\n const seedNodesByElementId = new Map<string, Record<string, unknown>>();\n for (const record of seedNodes.records) {\n const value = record.get(\"node\");\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(\"Neo4j traversal returned a malformed seed node.\");\n }\n const map = value as Record<string, unknown>;\n seedNodesByElementId.set(stringValue(map.elementId, \"Neo4j seed node elementId\"), map);\n }\n const addNode = (value: Record<string, unknown>) => {\n const parsed = contextNode(value, graph.schema);\n const existing = nodes.get(parsed.node.key);\n if (existing === undefined && nodes.size >= options.maxNodes) return;\n if (existing === undefined) nodes.set(parsed.node.key, parsed.node);\n nodeKeysByElementId.set(parsed.elementId, parsed.node.key);\n };\n for (const elementId of limitedSeedIds) {\n const value = seedNodesByElementId.get(elementId);\n if (value !== undefined) addNode(value);\n }\n for (const record of result.records) {\n for (const value of listOfMaps(record.get(\"nodes\"), \"Neo4j traversal nodes\")) {\n addNode(value);\n }\n }\n for (const record of result.records) {\n for (const value of listOfMaps(record.get(\"relationships\"), \"Neo4j traversal relationships\")) {\n const relationship = contextRelationship(value, nodeKeysByElementId);\n if (\n relationship !== undefined &&\n !relationships.has(relationship.key) &&\n relationships.size < options.maxRelationships\n ) {\n relationships.set(relationship.key, relationship);\n }\n }\n }\n return { nodes: [...nodes.values()], relationships: [...relationships.values()] };\n}\n\nfunction traversalPattern(direction: \"outgoing\" | \"incoming\" | \"both\", maxDepth: number): string {\n if (direction === \"outgoing\") {\n return `(seed)-[*1..${maxDepth}]->(node)`;\n }\n if (direction === \"incoming\") {\n return `(seed)<-[*1..${maxDepth}]-(node)`;\n }\n return `(seed)-[*1..${maxDepth}]-(node)`;\n}\n\nfunction managedQueryParameters(\n graph: Neo4jKnowledgeGraphBase,\n parameters: Record<string, unknown>,\n): Record<string, unknown> {\n return managedScopeParameters(managedScope(graph), parameters);\n}\n\nfunction managedNodePredicate(\n graph: Neo4jKnowledgeGraphBase,\n variable: string,\n prefix: \"WHERE\" | \"AND\",\n): string {\n return managedScopePredicate(managedScope(graph), variable, prefix);\n}\n\nfunction managedSearchPredicate(\n graph: Neo4jKnowledgeGraphBase,\n variable: string,\n chunkSeed: boolean,\n): string {\n return chunkSeed && graph.namespace === undefined\n ? \"\"\n : managedNodePredicate(graph, variable, \"WHERE\");\n}\n\nfunction managedNodeAndPredicate(graph: Neo4jKnowledgeGraphBase, variable: string): string {\n return managedScopePredicate(managedScope(graph), variable, \" AND\");\n}\n\nfunction managedRelationshipAndPredicate(graph: Neo4jKnowledgeGraphBase, variable: string): string {\n return managedNodeAndPredicate(graph, variable);\n}\n\nfunction tenantNodePredicate(\n graph: Neo4jKnowledgeGraphBase,\n variable: string,\n prefix: \"WHERE\" | \"AND\",\n): string {\n const scope = managedScope(graph);\n return scope === undefined ? \"\" : tenantScopePredicate(scope, variable, prefix);\n}\n\nfunction tenantNodeAndPredicate(graph: Neo4jKnowledgeGraphBase, variable: string): string {\n const predicate = tenantNodePredicate(graph, variable, \"AND\");\n return predicate.length === 0 ? \"\" : ` ${predicate}`;\n}\n\nfunction managedPathAndPredicate(graph: Neo4jKnowledgeGraphBase): string {\n return managedPathPredicate(managedScope(graph), false);\n}\n\nfunction managedScope(graph: Neo4jKnowledgeGraphBase): Neo4jManagedScope | undefined {\n return graph instanceof ManagedNeo4jKnowledgeGraph\n ? { graph: graph.name, namespace: graph.namespace }\n : undefined;\n}\n\nfunction contextNode(\n value: Record<string, unknown>,\n schema: Neo4jGraphSchema,\n): { elementId: string; node: Neo4jGraphContextNode } {\n const labels = value.labels;\n const raw = value.properties;\n if (!Array.isArray(labels) || !labels.every((label) => typeof label === \"string\")) {\n throw new TypeError(\"Neo4j traversal returned malformed node labels.\");\n }\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"Neo4j traversal returned malformed node properties.\");\n }\n const properties = applicationProperties(raw as Record<string, unknown>, \"Neo4j graph node\");\n const type = labels.find((label) => label in schema.nodes) ?? labels[0] ?? \"Node\";\n const definition = schema.nodes[type];\n const identity: Record<string, string | number | boolean> = {};\n if (definition !== undefined) {\n for (const property of definition.identity) {\n const item = properties[property];\n if (typeof item === \"string\" || typeof item === \"number\" || typeof item === \"boolean\") {\n identity[property] = item;\n }\n }\n }\n const elementId = stringValue(value.elementId, \"Neo4j node elementId\");\n return {\n elementId,\n node: {\n key: stringProperty(raw as Record<string, unknown>, \"__anvia_key\") ?? elementId,\n type,\n identity,\n properties,\n sourceChunkIds: stringArrayProperty(\n raw as Record<string, unknown>,\n \"__anvia_source_chunk_ids\",\n ),\n },\n };\n}\n\nfunction contextRelationship(\n value: Record<string, unknown>,\n nodeKeysByElementId: ReadonlyMap<string, string>,\n): Neo4jGraphContextRelationship | undefined {\n const raw = value.properties;\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new TypeError(\"Neo4j traversal returned malformed relationship properties.\");\n }\n const elementId = stringValue(value.elementId, \"Neo4j relationship elementId\");\n const fromElementId = stringValue(value.from, \"Neo4j relationship source\");\n const toElementId = stringValue(value.to, \"Neo4j relationship target\");\n const from = nodeKeysByElementId.get(fromElementId);\n const to = nodeKeysByElementId.get(toElementId);\n if (from === undefined || to === undefined) return undefined;\n return {\n key: stringProperty(raw as Record<string, unknown>, \"__anvia_key\") ?? elementId,\n type: stringValue(value.type, \"Neo4j relationship type\"),\n from,\n to,\n properties: applicationProperties(raw as Record<string, unknown>, \"Neo4j graph relationship\"),\n sourceChunkIds: stringArrayProperty(raw as Record<string, unknown>, \"__anvia_source_chunk_ids\"),\n };\n}\n\nfunction fuseResults(lists: readonly SearchHit[][], topK: number, rrfK: number): SearchHit[] {\n const fused = new Map<string, SearchHit>();\n for (const list of lists) {\n list.forEach((item, index) => {\n const score = 1 / (rrfK + index + 1);\n const current = fused.get(item.elementId);\n fused.set(item.elementId, { ...item, score: (current?.score ?? 0) + score });\n });\n }\n return [...fused.values()].sort((left, right) => right.score - left.score).slice(0, topK);\n}\n\nfunction validateSearch(search: RetrieveGraphContextOptions<Neo4jGraphSchema>[\"search\"]): void {\n positiveInteger(search.topK, \"Neo4j graph search topK\");\n if (search.seeds.length === 0 || new Set(search.seeds).size !== search.seeds.length) {\n throw new TypeError(\"Neo4j graph search requires unique seed names.\");\n }\n if (search.type === \"vector\") {\n if (search.seeds.length !== 1)\n throw new TypeError(\n \"Vector graph search accepts exactly one seed; use hybrid search to fuse multiple seeds.\",\n );\n finiteScore(search.minScore, \"Neo4j graph search minScore\");\n } else {\n positiveInteger(search.candidatesPerSeed, \"Neo4j hybrid candidatesPerSeed\");\n positiveInteger(search.rrfK, \"Neo4j hybrid rrfK\");\n }\n}\n\nfunction validateEvidence(\n capability: \"none\" | \"chunks\",\n evidence: Neo4jGraphEvidenceOptions,\n): void {\n if (typeof evidence !== \"object\" || evidence === null) {\n throw new TypeError(\"Neo4j graph retrieval requires an explicit evidence mode.\");\n }\n if (evidence.type === \"none\") return;\n if (evidence.type !== \"chunks\") {\n throw new TypeError(\"Unknown Neo4j graph evidence mode.\");\n }\n positiveInteger(evidence.maxChunks, \"Neo4j graph evidence maxChunks\");\n if (capability !== \"chunks\") {\n throw new TypeError(\"Chunk evidence requires a managed Neo4j knowledge graph.\");\n }\n}\n\nfunction validateTraversal(\n schema: Neo4jGraphSchema,\n traversal: RetrieveGraphContextOptions<Neo4jGraphSchema>[\"traversal\"],\n): void {\n if (\n traversal.direction !== \"outgoing\" &&\n traversal.direction !== \"incoming\" &&\n traversal.direction !== \"both\"\n ) {\n throw new TypeError(\"Neo4j traversal direction must be outgoing, incoming, or both.\");\n }\n positiveInteger(traversal.maxDepth, \"Neo4j traversal maxDepth\", 8);\n positiveInteger(traversal.maxNodes, \"Neo4j traversal maxNodes\");\n positiveInteger(traversal.maxRelationships, \"Neo4j traversal maxRelationships\");\n if (\n traversal.relationships.length === 0 ||\n new Set(traversal.relationships).size !== traversal.relationships.length\n ) {\n throw new TypeError(\"Neo4j traversal requires unique relationship types.\");\n }\n for (const type of traversal.relationships) {\n if (!(type in schema.relationships))\n throw new TypeError(`Neo4j traversal references unknown relationship type ${type}.`);\n }\n}\n\nfunction applicationProperties(value: Record<string, unknown>, label: string) {\n return strictProperties(\n Object.fromEntries(Object.entries(value).filter(([key]) => !key.startsWith(\"__anvia_\"))),\n label,\n );\n}\n\nfunction stringProperty(value: Record<string, unknown>, property: string): string | undefined {\n const item = value[property];\n if (item === undefined) return undefined;\n return stringValue(item, `Neo4j property ${property}`);\n}\n\nfunction stringArrayProperty(value: Record<string, unknown>, property: string): string[] {\n const item = value[property];\n if (item === undefined) return [];\n if (!Array.isArray(item) || !item.every((entry) => typeof entry === \"string\")) {\n throw new TypeError(`Neo4j property ${property} must be a string array.`);\n }\n return [...item];\n}\n\nfunction stringValue(value: unknown, label: string): string {\n if (typeof value !== \"string\") throw new TypeError(`${label} must be a string.`);\n return value;\n}\n\nfunction listOfMaps(value: unknown, label: string): Record<string, unknown>[] {\n if (\n !Array.isArray(value) ||\n !value.every((item) => typeof item === \"object\" && item !== null && !Array.isArray(item))\n ) {\n throw new TypeError(`${label} must be an array of objects.`);\n }\n return value as Record<string, unknown>[];\n}\n\nfunction escapeLucene(value: string): string {\n const specialCharacters = new Set('+-&|!(){}[]^\"~*?:\\\\/');\n let escaped = \"\";\n for (const character of value) {\n escaped += specialCharacters.has(character) ? `\\\\${character}` : character;\n }\n return escaped;\n}\n\nfunction scopedFulltextQuery(graph: Neo4jKnowledgeGraphBase, value: string): string {\n const query = escapeLucene(value);\n return graph instanceof ManagedNeo4jKnowledgeGraph && graph.namespace !== undefined\n ? `(${query}) AND __anvia_namespace:${escapeLucene(graph.namespace)}`\n : query;\n}\n\nfunction groupBy<Value, Key>(\n values: readonly Value[],\n keyFor: (value: Value) => Key,\n): Map<Key, Value[]> {\n const groups = new Map<Key, Value[]>();\n for (const value of values) {\n const key = keyFor(value);\n const group = groups.get(key);\n if (group === undefined) groups.set(key, [value]);\n else group.push(value);\n }\n return groups;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvia/neo4j",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.7",
|
|
4
4
|
"description": "Schema-first Neo4j GraphRAG integration for Anvia.",
|
|
5
5
|
"author": "anvia",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,23 +25,23 @@
|
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"neo4j-driver": "^6.
|
|
29
|
-
"@anvia/graph": "1.1.
|
|
28
|
+
"neo4j-driver": "^6.3.0",
|
|
29
|
+
"@anvia/graph": "1.1.6"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^24.9.1",
|
|
33
|
-
"
|
|
33
|
+
"tsdown": "^0.23.4",
|
|
34
34
|
"typescript": "^5.9.3",
|
|
35
35
|
"vitest": "^4.1.11",
|
|
36
|
-
"zod": "^4.6.
|
|
37
|
-
"@anvia/core": "1.
|
|
36
|
+
"zod": "^4.6.7",
|
|
37
|
+
"@anvia/core": "1.18.0"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"zod": "^4.6.
|
|
41
|
-
"@anvia/core": "^1.
|
|
40
|
+
"zod": "^4.6.7",
|
|
41
|
+
"@anvia/core": "^1.18.0"
|
|
42
42
|
},
|
|
43
43
|
"scripts": {
|
|
44
|
-
"build": "
|
|
44
|
+
"build": "tsdown src/index.ts --format esm --dts --sourcemap --clean --no-fixed-extension",
|
|
45
45
|
"test": "vitest run",
|
|
46
46
|
"typecheck": "tsc --noEmit"
|
|
47
47
|
}
|