@carlonicora/nestjs-neo4jsonapi 1.105.0 → 1.107.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/agents/graph.creator/services/graph.creator.service.d.ts +1 -1
  2. package/dist/agents/graph.creator/services/graph.creator.service.d.ts.map +1 -1
  3. package/dist/agents/graph.creator/services/graph.creator.service.js +14 -0
  4. package/dist/agents/graph.creator/services/graph.creator.service.js.map +1 -1
  5. package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
  6. package/dist/bootstrap/app.module.factory.js +1 -0
  7. package/dist/bootstrap/app.module.factory.js.map +1 -1
  8. package/dist/bootstrap/bootstrap.options.d.ts +3 -0
  9. package/dist/bootstrap/bootstrap.options.d.ts.map +1 -1
  10. package/dist/common/guards/custom-throttler.guard.d.ts +13 -0
  11. package/dist/common/guards/custom-throttler.guard.d.ts.map +1 -1
  12. package/dist/common/guards/custom-throttler.guard.js +14 -0
  13. package/dist/common/guards/custom-throttler.guard.js.map +1 -1
  14. package/dist/common/interfaces/agents/graph.creator.interface.d.ts +4 -0
  15. package/dist/common/interfaces/agents/graph.creator.interface.d.ts.map +1 -1
  16. package/dist/common/repositories/ai-source-query.provider.d.ts +19 -0
  17. package/dist/common/repositories/ai-source-query.provider.d.ts.map +1 -0
  18. package/dist/common/repositories/ai-source-query.provider.js +5 -0
  19. package/dist/common/repositories/ai-source-query.provider.js.map +1 -0
  20. package/dist/common/repositories/default.ai-source-query.provider.d.ts +19 -0
  21. package/dist/common/repositories/default.ai-source-query.provider.d.ts.map +1 -0
  22. package/dist/common/repositories/default.ai-source-query.provider.js +36 -0
  23. package/dist/common/repositories/default.ai-source-query.provider.js.map +1 -0
  24. package/dist/common/repositories/index.d.ts +2 -0
  25. package/dist/common/repositories/index.d.ts.map +1 -1
  26. package/dist/common/repositories/index.js +2 -0
  27. package/dist/common/repositories/index.js.map +1 -1
  28. package/dist/common/types/data.limits.d.ts +2 -2
  29. package/dist/common/types/data.limits.d.ts.map +1 -1
  30. package/dist/config/interfaces/base.config.interface.d.ts +2 -0
  31. package/dist/config/interfaces/base.config.interface.d.ts.map +1 -1
  32. package/dist/config/interfaces/config.embedding.context.interface.d.ts +18 -0
  33. package/dist/config/interfaces/config.embedding.context.interface.d.ts.map +1 -0
  34. package/dist/config/interfaces/config.embedding.context.interface.js +3 -0
  35. package/dist/config/interfaces/config.embedding.context.interface.js.map +1 -0
  36. package/dist/config/interfaces/index.d.ts +1 -0
  37. package/dist/config/interfaces/index.d.ts.map +1 -1
  38. package/dist/config/interfaces/index.js +1 -0
  39. package/dist/config/interfaces/index.js.map +1 -1
  40. package/dist/core/core.module.d.ts +4 -0
  41. package/dist/core/core.module.d.ts.map +1 -1
  42. package/dist/core/core.module.js +7 -2
  43. package/dist/core/core.module.js.map +1 -1
  44. package/dist/foundations/atomicfact/repositories/atomicfact.repository.d.ts +3 -8
  45. package/dist/foundations/atomicfact/repositories/atomicfact.repository.d.ts.map +1 -1
  46. package/dist/foundations/atomicfact/repositories/atomicfact.repository.js +19 -46
  47. package/dist/foundations/atomicfact/repositories/atomicfact.repository.js.map +1 -1
  48. package/dist/foundations/chunk/chunk.module.d.ts +6 -3
  49. package/dist/foundations/chunk/chunk.module.d.ts.map +1 -1
  50. package/dist/foundations/chunk/chunk.module.js +25 -5
  51. package/dist/foundations/chunk/chunk.module.js.map +1 -1
  52. package/dist/foundations/chunk/controllers/chunk.controller.d.ts +19 -1
  53. package/dist/foundations/chunk/controllers/chunk.controller.d.ts.map +1 -1
  54. package/dist/foundations/chunk/controllers/chunk.controller.js +59 -2
  55. package/dist/foundations/chunk/controllers/chunk.controller.js.map +1 -1
  56. package/dist/foundations/chunk/entities/chunk.entity.d.ts +8 -0
  57. package/dist/foundations/chunk/entities/chunk.entity.d.ts.map +1 -1
  58. package/dist/foundations/chunk/entities/chunk.entity.js +20 -0
  59. package/dist/foundations/chunk/entities/chunk.entity.js.map +1 -1
  60. package/dist/foundations/chunk/processors/chunk.embedding.processor.d.ts +21 -0
  61. package/dist/foundations/chunk/processors/chunk.embedding.processor.d.ts.map +1 -0
  62. package/dist/foundations/chunk/processors/chunk.embedding.processor.js +98 -0
  63. package/dist/foundations/chunk/processors/chunk.embedding.processor.js.map +1 -0
  64. package/dist/foundations/chunk/repositories/chunk.repository.d.ts +36 -8
  65. package/dist/foundations/chunk/repositories/chunk.repository.d.ts.map +1 -1
  66. package/dist/foundations/chunk/repositories/chunk.repository.js +184 -50
  67. package/dist/foundations/chunk/repositories/chunk.repository.js.map +1 -1
  68. package/dist/foundations/chunk/services/chunk.service.d.ts +9 -0
  69. package/dist/foundations/chunk/services/chunk.service.d.ts.map +1 -1
  70. package/dist/foundations/chunk/services/chunk.service.js +87 -0
  71. package/dist/foundations/chunk/services/chunk.service.js.map +1 -1
  72. package/dist/foundations/chunk/services/embedding-context.d.ts +19 -0
  73. package/dist/foundations/chunk/services/embedding-context.d.ts.map +1 -0
  74. package/dist/foundations/chunk/services/embedding-context.js +27 -0
  75. package/dist/foundations/chunk/services/embedding-context.js.map +1 -0
  76. package/dist/foundations/chunk/services/reciprocal-rank-fusion.d.ts +2 -0
  77. package/dist/foundations/chunk/services/reciprocal-rank-fusion.d.ts.map +1 -0
  78. package/dist/foundations/chunk/services/reciprocal-rank-fusion.js +13 -0
  79. package/dist/foundations/chunk/services/reciprocal-rank-fusion.js.map +1 -0
  80. package/dist/foundations/keyconcept/controllers/keyconcept.controller.d.ts +15 -0
  81. package/dist/foundations/keyconcept/controllers/keyconcept.controller.d.ts.map +1 -0
  82. package/dist/foundations/keyconcept/controllers/keyconcept.controller.js +56 -0
  83. package/dist/foundations/keyconcept/controllers/keyconcept.controller.js.map +1 -0
  84. package/dist/foundations/keyconcept/index.d.ts +2 -0
  85. package/dist/foundations/keyconcept/index.d.ts.map +1 -1
  86. package/dist/foundations/keyconcept/index.js +5 -1
  87. package/dist/foundations/keyconcept/index.js.map +1 -1
  88. package/dist/foundations/keyconcept/keyconcept.module.d.ts.map +1 -1
  89. package/dist/foundations/keyconcept/keyconcept.module.js +7 -2
  90. package/dist/foundations/keyconcept/keyconcept.module.js.map +1 -1
  91. package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.d.ts +22 -0
  92. package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.d.ts.map +1 -0
  93. package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.js +98 -0
  94. package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.js.map +1 -0
  95. package/dist/foundations/keyconcept/repositories/keyconcept.repository.d.ts +9 -15
  96. package/dist/foundations/keyconcept/repositories/keyconcept.repository.d.ts.map +1 -1
  97. package/dist/foundations/keyconcept/repositories/keyconcept.repository.js +65 -99
  98. package/dist/foundations/keyconcept/repositories/keyconcept.repository.js.map +1 -1
  99. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  import { OnModuleInit } from "@nestjs/common";
2
2
  import { ClsService } from "nestjs-cls";
3
3
  import { AiStatus } from "../../../common/enums/ai.status";
4
+ import { AiSourceQueryProvider } from "../../../common/repositories/ai-source-query.provider";
4
5
  import { DataLimits } from "../../../common/types/data.limits";
5
6
  import { EmbedderService } from "../../../core";
6
7
  import { ModelService } from "../../../core/llm/services/model.service";
@@ -13,19 +14,24 @@ export declare class ChunkRepository implements OnModuleInit {
13
14
  private readonly embedderService;
14
15
  private readonly clsService;
15
16
  private readonly securityService;
16
- constructor(neo4j: Neo4jService, modelService: ModelService, embedderService: EmbedderService, clsService: ClsService, securityService: SecurityService);
17
+ private readonly aiSourceQuery;
18
+ constructor(neo4j: Neo4jService, modelService: ModelService, embedderService: EmbedderService, clsService: ClsService, securityService: SecurityService, aiSourceQuery: AiSourceQueryProvider);
17
19
  onModuleInit(): Promise<void>;
20
+ recreateVectorIndex(): Promise<void>;
21
+ findAllChunks(): Promise<Chunk[]>;
22
+ updateEmbedding(params: {
23
+ chunkId: string;
24
+ embedding: number[];
25
+ }): Promise<void>;
18
26
  findPotentialChunks(params: {
19
27
  question: string;
20
28
  dataLimits: DataLimits;
21
29
  }): Promise<Chunk[]>;
22
- /**
23
- * Help-content retrieval. Intentionally bypasses company filtering — `(data:HowTo)`
24
- * nodes are global and have no `BELONGS_TO Company` edge. Only callable from inside
25
- * this repository; `findPotentialChunks` dispatches here based on
26
- * `dataLimits.howToMode` / `dataLimits.limitToHowToId`.
27
- */
28
- private findPotentialChunksFromHowTos;
30
+ private findChunksByIdsOrdered;
31
+ findParentName(params: {
32
+ id: string;
33
+ nodeType: string;
34
+ }): Promise<string | undefined>;
29
35
  findSubsequentChunkId(params: {
30
36
  chunkId: string;
31
37
  }): Promise<Chunk>;
@@ -45,6 +51,7 @@ export declare class ChunkRepository implements OnModuleInit {
45
51
  nodeType: string;
46
52
  previousChunkId?: string;
47
53
  content: string;
54
+ heading?: string;
48
55
  imagePath?: string;
49
56
  position: number;
50
57
  }): Promise<void>;
@@ -52,6 +59,19 @@ export declare class ChunkRepository implements OnModuleInit {
52
59
  id: string;
53
60
  aiStatus: AiStatus;
54
61
  }): Promise<void>;
62
+ updateDates(params: {
63
+ chunkId: string;
64
+ dates: string;
65
+ }): Promise<void>;
66
+ enrichContentAndEmbedBatch(items: {
67
+ chunkId: string;
68
+ enrichedContent: string;
69
+ propagatedDates?: string;
70
+ }[]): Promise<void>;
71
+ markChunksCompleted(params: {
72
+ id: string;
73
+ nodeType: string;
74
+ }): Promise<void>;
55
75
  getChunksInProgress(params: {
56
76
  id: string;
57
77
  nodeType: string;
@@ -68,6 +88,14 @@ export declare class ChunkRepository implements OnModuleInit {
68
88
  id: string;
69
89
  nodeType: string;
70
90
  }): Promise<void>;
91
+ findChunkNeighbors(params: {
92
+ chunkIds: string[];
93
+ window: number;
94
+ }): Promise<{
95
+ chunkId: string;
96
+ before: string[];
97
+ after: string[];
98
+ }[]>;
71
99
  findChunkByContentIdAndType(params: {
72
100
  id: string;
73
101
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/chunk/repositories/chunk.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AACnF,OAAO,EAAE,KAAK,EAAmB,MAAM,mCAAmC,CAAC;AAE3E,qBACa,eAAgB,YAAW,YAAY;IAEhD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAJf,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe;IAG7C,YAAY;IAmBZ,mBAAmB,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAkCjG;;;;;OAKG;YACW,6BAA6B;IA+BrC,qBAAqB,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAgBlE,mBAAmB,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAgBhE,aAAa,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAgB1D,UAAU,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAiBtE,WAAW,CAAC,MAAM,EAAE;QACxB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDX,YAAY,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvE,mBAAmB,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAkB/E,sBAAsB,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvF,YAAY,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3D,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;IAYzC,sBAAsB,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/E,2BAA2B,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAe1F"}
1
+ {"version":3,"file":"chunk.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/chunk/repositories/chunk.repository.ts"],"names":[],"mappings":"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"}
@@ -8,24 +8,30 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.ChunkRepository = void 0;
13
16
  const common_1 = require("@nestjs/common");
14
17
  const nestjs_cls_1 = require("nestjs-cls");
15
18
  const ai_status_1 = require("../../../common/enums/ai.status");
16
- const ai_source_query_1 = require("../../../common/repositories/ai.source.query");
19
+ const ai_source_query_provider_1 = require("../../../common/repositories/ai-source-query.provider");
17
20
  const core_1 = require("../../../core");
18
21
  const model_service_1 = require("../../../core/llm/services/model.service");
19
22
  const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
20
23
  const security_service_1 = require("../../../core/security/services/security.service");
21
24
  const chunk_entity_1 = require("../../chunk/entities/chunk.entity");
25
+ const chunk_meta_1 = require("../entities/chunk.meta");
26
+ const reciprocal_rank_fusion_1 = require("../services/reciprocal-rank-fusion");
22
27
  let ChunkRepository = class ChunkRepository {
23
- constructor(neo4j, modelService, embedderService, clsService, securityService) {
28
+ constructor(neo4j, modelService, embedderService, clsService, securityService, aiSourceQuery) {
24
29
  this.neo4j = neo4j;
25
30
  this.modelService = modelService;
26
31
  this.embedderService = embedderService;
27
32
  this.clsService = clsService;
28
33
  this.securityService = securityService;
34
+ this.aiSourceQuery = aiSourceQuery;
29
35
  }
30
36
  async onModuleInit() {
31
37
  await this.neo4j.writeOne({
@@ -43,68 +49,120 @@ let ChunkRepository = class ChunkRepository {
43
49
  }};
44
50
  `,
45
51
  });
52
+ await this.neo4j.writeOne({
53
+ query: `CREATE FULLTEXT INDEX chunk_content_search IF NOT EXISTS FOR (chunk:Chunk) ON EACH [chunk.content]`,
54
+ });
55
+ }
56
+ async recreateVectorIndex() {
57
+ await this.neo4j.writeOne({
58
+ query: `DROP INDEX chunks IF EXISTS`,
59
+ });
60
+ const dimensions = this.modelService.getEmbedderDimensions();
61
+ await this.neo4j.writeOne({
62
+ query: `
63
+ CREATE VECTOR INDEX chunks IF NOT EXISTS
64
+ FOR (chunk:Chunk)
65
+ ON chunk.embedding
66
+ OPTIONS { indexConfig: {
67
+ \`vector.dimensions\`: ${dimensions},
68
+ \`vector.similarity_function\`: 'cosine'
69
+ }};
70
+ `,
71
+ });
72
+ }
73
+ async findAllChunks() {
74
+ const query = this.neo4j.initQuery({ serialiser: chunk_entity_1.ChunkDescriptor.model, fetchAll: true });
75
+ query.query = `
76
+ MATCH (${chunk_meta_1.chunkMeta.nodeName}:${chunk_meta_1.chunkMeta.labelName})
77
+ RETURN ${chunk_meta_1.chunkMeta.nodeName}
78
+ `;
79
+ return this.neo4j.readMany(query);
80
+ }
81
+ async updateEmbedding(params) {
82
+ await this.neo4j.writeOne({
83
+ query: `
84
+ MATCH (chunk:Chunk {id: $chunkId})
85
+ SET chunk.embedding = $embedding, chunk.updatedAt = datetime()
86
+ `,
87
+ queryParams: {
88
+ chunkId: params.chunkId,
89
+ embedding: params.embedding,
90
+ },
91
+ });
46
92
  }
47
93
  async findPotentialChunks(params) {
48
- // SECURITY: HowTo retrieval intentionally bypasses company filtering.
49
- // Dispatch to the private method so the bypass is visible and quarantined here.
50
- if (params.dataLimits.howToMode || params.dataLimits.limitToHowToId) {
51
- return this.findPotentialChunksFromHowTos(params);
52
- }
53
- const query = this.neo4j.initQuery({ serialiser: chunk_entity_1.ChunkDescriptor.model });
54
94
  const queryEmbedding = await this.embedderService.vectoriseText({ text: params.question });
55
- query.queryParams = { ...query.queryParams, queryEmbedding };
56
- query.query = `
57
- MATCH (data)-[:BELONGS_TO]->(company)
58
- ${(0, ai_source_query_1.aiSourceQuery)({
95
+ // Lucene special-character escape so user questions can't break the fulltext query.
96
+ const term = params.question.replace(/([+\-!(){}\[\]^"~*?:\\\/]|&&|\|\|)/g, "\\$1");
97
+ // The access-scoped id-set both retrieval branches are filtered to.
98
+ const scope = this.aiSourceQuery.build({
99
+ dataLimits: params.dataLimits,
59
100
  currentUserId: this.clsService.get("userId"),
60
101
  securityService: this.securityService,
61
- dataLimits: params.dataLimits,
62
102
  returnsData: true,
63
- })}
103
+ });
104
+ const scopeQuery = this.neo4j.initQuery();
105
+ scopeQuery.queryParams = { ...scopeQuery.queryParams, ...scope.params };
106
+ scopeQuery.query += `
107
+ ${scope.cypher}
64
108
  MATCH (chunk:Chunk)<-[:HAS_CHUNK]-(data)
65
- WITH COLLECT(DISTINCT chunk.id) AS chunkIds
66
-
109
+ RETURN COLLECT(DISTINCT chunk.id) AS chunkIds
110
+ `;
111
+ const scopeResult = await this.neo4j.read(scopeQuery.query, scopeQuery.queryParams);
112
+ const chunkIds = scopeResult.records[0]?.get("chunkIds") ?? [];
113
+ if (chunkIds.length === 0)
114
+ return [];
115
+ const vectorResult = await this.neo4j.read(`
67
116
  CALL db.index.vector.queryNodes('chunks', 1000, $queryEmbedding)
68
117
  YIELD node AS candidateChunk, score
69
- WHERE candidateChunk.id IN chunkIds
70
-
71
- RETURN candidateChunk AS chunk, score
118
+ WHERE candidateChunk.id IN $chunkIds
119
+ RETURN candidateChunk.id AS id
72
120
  ORDER BY score DESC
73
- LIMIT 20
74
- `;
75
- return this.neo4j.readMany(query);
121
+ LIMIT 50
122
+ `, { queryEmbedding, chunkIds });
123
+ const vectorIds = vectorResult.records.map((record) => record.get("id"));
124
+ let lexicalIds = [];
125
+ if (term.trim()) {
126
+ const lexicalResult = await this.neo4j.read(`
127
+ CALL db.index.fulltext.queryNodes('chunk_content_search', $term)
128
+ YIELD node, score
129
+ WHERE node.id IN $chunkIds
130
+ RETURN node.id AS id
131
+ ORDER BY score DESC
132
+ LIMIT 50
133
+ `, { term, chunkIds });
134
+ lexicalIds = lexicalResult.records.map((record) => record.get("id"));
135
+ }
136
+ const fusedIds = (0, reciprocal_rank_fusion_1.reciprocalRankFusion)([vectorIds, lexicalIds]).slice(0, 20);
137
+ return this.findChunksByIdsOrdered(fusedIds);
76
138
  }
77
- /**
78
- * Help-content retrieval. Intentionally bypasses company filtering — `(data:HowTo)`
79
- * nodes are global and have no `BELONGS_TO Company` edge. Only callable from inside
80
- * this repository; `findPotentialChunks` dispatches here based on
81
- * `dataLimits.howToMode` / `dataLimits.limitToHowToId`.
82
- */
83
- async findPotentialChunksFromHowTos(params) {
139
+ async findChunksByIdsOrdered(ids) {
140
+ if (ids.length === 0)
141
+ return [];
84
142
  const query = this.neo4j.initQuery({ serialiser: chunk_entity_1.ChunkDescriptor.model });
85
- const queryEmbedding = await this.embedderService.vectoriseText({ text: params.question });
86
143
  query.queryParams = {
87
144
  ...query.queryParams,
88
- queryEmbedding,
89
- ...(params.dataLimits.limitToHowToId ? { limitToHowToId: params.dataLimits.limitToHowToId } : {}),
145
+ ids,
90
146
  };
91
- const limitClause = params.dataLimits.limitToHowToId ? `WHERE data.id = $limitToHowToId` : "";
147
+ query.query += `
148
+ MATCH (chunk:Chunk)
149
+ WHERE chunk.id IN $ids
150
+ RETURN chunk
151
+ `;
152
+ const chunks = await this.neo4j.readMany(query);
153
+ const byId = new Map(chunks.map((chunk) => [chunk.id, chunk]));
154
+ return ids.map((id) => byId.get(id)).filter((chunk) => chunk !== undefined);
155
+ }
156
+ async findParentName(params) {
157
+ const query = this.neo4j.initQuery();
158
+ query.queryParams = { ...query.queryParams, id: params.id };
92
159
  query.query = `
93
- MATCH (data:HowTo)
94
- ${limitClause}
95
- WITH data
96
- MATCH (chunk:Chunk)<-[:HAS_CHUNK]-(data)
97
- WITH COLLECT(DISTINCT chunk.id) AS chunkIds
98
-
99
- CALL db.index.vector.queryNodes('chunks', 1000, $queryEmbedding)
100
- YIELD node AS candidateChunk, score
101
- WHERE candidateChunk.id IN chunkIds
102
-
103
- RETURN candidateChunk AS chunk, score
104
- ORDER BY score DESC
105
- LIMIT 20
106
- `;
107
- return this.neo4j.readMany(query);
160
+ MATCH (n:${params.nodeType} {id: $id})
161
+ RETURN coalesce(n.name, n.title, n.subject, n.number) AS name
162
+ `;
163
+ const result = await this.neo4j.read(query.query, query.queryParams);
164
+ const name = result.records[0]?.get("name");
165
+ return typeof name === "string" && name.trim() ? name : undefined;
108
166
  }
109
167
  async findSubsequentChunkId(params) {
110
168
  const query = this.neo4j.initQuery({ serialiser: chunk_entity_1.ChunkDescriptor.model });
@@ -162,6 +220,7 @@ let ChunkRepository = class ChunkRepository {
162
220
  ...query.queryParams,
163
221
  id: params.id,
164
222
  content: params.content,
223
+ heading: params.heading ?? null,
165
224
  position: params.position,
166
225
  vector: vector,
167
226
  imagePath: params.imagePath,
@@ -175,7 +234,8 @@ let ChunkRepository = class ChunkRepository {
175
234
  OPTIONAL MATCH (nodeType)-[:BELONGS_TO]->(company)
176
235
  CREATE (chunk:Chunk {
177
236
  id: $id,
178
- content: $content,
237
+ content: $content,
238
+ heading: $heading,
179
239
  ${params.imagePath ? "imagePath: $imagePath," : ""}
180
240
  embedding: $vector,
181
241
  position: $position,
@@ -210,6 +270,56 @@ let ChunkRepository = class ChunkRepository {
210
270
  `;
211
271
  await this.neo4j.writeOne(query);
212
272
  }
273
+ async updateDates(params) {
274
+ const query = this.neo4j.initQuery();
275
+ query.queryParams = {
276
+ ...query.queryParams,
277
+ chunkId: params.chunkId,
278
+ dates: params.dates,
279
+ };
280
+ query.query = `
281
+ MATCH (chunk:Chunk {id: $chunkId})
282
+ SET chunk.dates = $dates, chunk.updatedAt = datetime()
283
+ `;
284
+ await this.neo4j.writeOne(query);
285
+ }
286
+ async enrichContentAndEmbedBatch(items) {
287
+ if (items.length === 0)
288
+ return;
289
+ // One Azure round-trip for the whole set — per-call latency dominates batch size, so
290
+ // embedding chunks individually (vectoriseText per chunk) is far slower than batching.
291
+ // RateLimitedEmbedder.embedDocuments splits internally if the batch exceeds maxBatchTokens.
292
+ const vectors = await this.embedderService.vectoriseTextBatch(items.map((item) => item.enrichedContent));
293
+ const rows = items.map((item, index) => ({
294
+ chunkId: item.chunkId,
295
+ enrichedContent: item.enrichedContent,
296
+ vector: vectors[index],
297
+ propagatedDates: item.propagatedDates ?? null,
298
+ }));
299
+ const query = this.neo4j.initQuery();
300
+ query.queryParams = {
301
+ ...query.queryParams,
302
+ rows,
303
+ };
304
+ query.query = `
305
+ UNWIND $rows AS row
306
+ MATCH (chunk:Chunk {id: row.chunkId})
307
+ SET chunk.content = row.enrichedContent,
308
+ chunk.embedding = row.vector,
309
+ chunk.updatedAt = datetime(),
310
+ chunk.propagatedDates = row.propagatedDates
311
+ `;
312
+ await this.neo4j.writeOne(query);
313
+ }
314
+ async markChunksCompleted(params) {
315
+ const query = this.neo4j.initQuery();
316
+ query.queryParams = { ...query.queryParams, id: params.id, aiStatus: ai_status_1.AiStatus.Completed };
317
+ query.query += `
318
+ MATCH (nodeType:${params.nodeType} {id: $id})-[:HAS_CHUNK]->(chunk:Chunk)
319
+ SET chunk.aiStatus = $aiStatus, chunk.updatedAt = datetime()
320
+ `;
321
+ await this.neo4j.writeOne(query);
322
+ }
213
323
  async getChunksInProgress(params) {
214
324
  const query = this.neo4j.initQuery({ serialiser: chunk_entity_1.ChunkDescriptor.model });
215
325
  query.queryParams = {
@@ -268,6 +378,29 @@ let ChunkRepository = class ChunkRepository {
268
378
  `;
269
379
  await this.neo4j.writeOne(query);
270
380
  }
381
+ async findChunkNeighbors(params) {
382
+ if (params.chunkIds.length === 0)
383
+ return [];
384
+ const query = this.neo4j.initQuery();
385
+ query.queryParams = { ...query.queryParams, chunkIds: params.chunkIds, window: params.window };
386
+ query.query = `
387
+ UNWIND $chunkIds AS cid
388
+ MATCH (c:Chunk {id: cid})
389
+ OPTIONAL MATCH pBefore = (b:Chunk)-[:NEXT*1..]->(c)
390
+ WITH cid, c, b, length(pBefore) AS beforeDist ORDER BY beforeDist ASC
391
+ WITH cid, c, [x IN collect(b) WHERE x IS NOT NULL][0..$window] AS befores
392
+ OPTIONAL MATCH pAfter = (c)-[:NEXT*1..]->(a:Chunk)
393
+ WITH cid, befores, a, length(pAfter) AS afterDist ORDER BY afterDist ASC
394
+ WITH cid, befores, [x IN collect(a) WHERE x IS NOT NULL][0..$window] AS afters
395
+ RETURN cid AS chunkId, [x IN befores | x.content] AS before, [x IN afters | x.content] AS after
396
+ `;
397
+ const result = await this.neo4j.read(query.query, query.queryParams);
398
+ return result.records.map((r) => ({
399
+ chunkId: r.get("chunkId"),
400
+ before: r.get("before") ?? [],
401
+ after: r.get("after") ?? [],
402
+ }));
403
+ }
271
404
  async findChunkByContentIdAndType(params) {
272
405
  const query = this.neo4j.initQuery({ fetchAll: true, serialiser: chunk_entity_1.ChunkDescriptor.model });
273
406
  query.queryParams = {
@@ -284,10 +417,11 @@ let ChunkRepository = class ChunkRepository {
284
417
  exports.ChunkRepository = ChunkRepository;
285
418
  exports.ChunkRepository = ChunkRepository = __decorate([
286
419
  (0, common_1.Injectable)(),
420
+ __param(5, (0, common_1.Inject)(ai_source_query_provider_1.AI_SOURCE_QUERY)),
287
421
  __metadata("design:paramtypes", [neo4j_service_1.Neo4jService,
288
422
  model_service_1.ModelService,
289
423
  core_1.EmbedderService,
290
424
  nestjs_cls_1.ClsService,
291
- security_service_1.SecurityService])
425
+ security_service_1.SecurityService, Object])
292
426
  ], ChunkRepository);
293
427
  //# sourceMappingURL=chunk.repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.repository.js","sourceRoot":"","sources":["../../../../src/foundations/chunk/repositories/chunk.repository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chunk.repository.js","sourceRoot":"","sources":["../../../../src/foundations/chunk/repositories/chunk.repository.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ export declare class ChunkService {
25
25
  private readonly keyConceptRepository;
26
26
  private readonly moduleRef;
27
27
  private readonly jobNames;
28
+ private readonly embeddingContext;
28
29
  constructor(logger: AppLoggingService, tracer: TracingService, clsService: ClsService, builder: JsonApiService, chunkRepository: ChunkRepository, atomicFactService: AtomicFactService, keyConceptService: KeyConceptService, graphGeneratorService: GraphCreatorService, keyConceptRepository: KeyConceptRepository, moduleRef: ModuleRef, configService: ConfigService<BaseConfigInterface>);
29
30
  private isDeadlockError;
30
31
  private createEmptyChunkAnalysis;
@@ -49,6 +50,14 @@ export declare class ChunkService {
49
50
  id: string;
50
51
  type: string;
51
52
  }): Promise<void>;
53
+ propagateAndEmbedDates(params: {
54
+ id: string;
55
+ nodeType: string;
56
+ }): Promise<void>;
57
+ /**
58
+ * Convert ISO date (YYYY-MM-DD) to display format (DD/MM/YYYY) for Italian context
59
+ */
60
+ private _formatDateForDisplay;
52
61
  /**
53
62
  * Dynamically selects the queue based on content type.
54
63
  * Uses convention: labelName.toLowerCase() = queue ID
@@ -1 +1 @@
1
- {"version":3,"file":"chunk.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/chunk/services/chunk.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAGrD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,8DAA8D,CAAC;AAGnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAEvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yDAAyD,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gDAAgD,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AACjF,OAAO,EAAE,KAAK,EAAmB,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAEjF,qBACa,YAAY;IAIrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAZ5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0B;gBAGhC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,cAAc,EACvB,eAAe,EAAE,eAAe,EAChC,iBAAiB,EAAE,iBAAiB,EACpC,iBAAiB,EAAE,iBAAiB,EACpC,qBAAqB,EAAE,mBAAmB,EAC1C,oBAAoB,EAAE,oBAAoB,EAC1C,SAAS,EAAE,SAAS,EACrC,aAAa,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAKnD,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,wBAAwB;YASlB,2BAA2B;YAqC3B,gCAAgC;IAkCxC,QAAQ,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAQpE,YAAY,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,QAAQ,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAyB1F,YAAY,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrE,aAAa,CAAC,MAAM,EAAE;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,IAAI,CAAC;IAqIjB;;;;OAIG;IACH,OAAO,CAAC,WAAW;CAepB"}
1
+ {"version":3,"file":"chunk.service.d.ts","sourceRoot":"","sources":["../../../../src/foundations/chunk/services/chunk.service.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ const tracing_service_1 = require("../../../core/tracing/services/tracing.servic
24
24
  const atomicfact_service_1 = require("../../atomicfact/services/atomicfact.service");
25
25
  const chunk_entity_1 = require("../../chunk/entities/chunk.entity");
26
26
  const chunk_repository_1 = require("../../chunk/repositories/chunk.repository");
27
+ const embedding_context_1 = require("../../chunk/services/embedding-context");
27
28
  const keyconcept_repository_1 = require("../../keyconcept/repositories/keyconcept.repository");
28
29
  const keyconcept_service_1 = require("../../keyconcept/services/keyconcept.service");
29
30
  let ChunkService = class ChunkService {
@@ -39,6 +40,7 @@ let ChunkService = class ChunkService {
39
40
  this.keyConceptRepository = keyConceptRepository;
40
41
  this.moduleRef = moduleRef;
41
42
  this.jobNames = configService.get("jobNames", { infer: true }) ?? { process: {}, notifications: {} };
43
+ this.embeddingContext = configService.get("embeddingContext", { infer: true }) ?? {};
42
44
  }
43
45
  isDeadlockError(error) {
44
46
  const errorMessage = error?.message || error?.toString() || "";
@@ -52,6 +54,7 @@ let ChunkService = class ChunkService {
52
54
  atomicFacts: [],
53
55
  keyConceptsRelationships: [],
54
56
  keyConceptDescriptions: [],
57
+ dates: [],
55
58
  tokens: { input: 0, output: 0 },
56
59
  };
57
60
  }
@@ -214,6 +217,11 @@ let ChunkService = class ChunkService {
214
217
  });
215
218
  this.tracer.addSpanEvent("Write Key Concept Relationships in Database");
216
219
  }, 3, 1000, `graph creation for chunk ${params.chunkId}`);
220
+ // Store extracted dates on the chunk
221
+ await this.chunkRepository.updateDates({
222
+ chunkId: params.chunkId,
223
+ dates: JSON.stringify(chunkAnalysis.dates || []),
224
+ });
217
225
  }
218
226
  else {
219
227
  this.logger.warn("Chunk analysis returned null - content was rejected by graph creator", "ChunkService", {
@@ -222,6 +230,12 @@ let ChunkService = class ChunkService {
222
230
  contentPreview: chunk.content?.substring(0, 200) || "",
223
231
  message: "Check GraphCreatorService logs for rejection reason",
224
232
  });
233
+ // Store empty dates for rejected chunks so propagation can distinguish
234
+ // "no dates found" from "never analyzed"
235
+ await this.chunkRepository.updateDates({
236
+ chunkId: params.chunkId,
237
+ dates: JSON.stringify([]),
238
+ });
225
239
  }
226
240
  this.tracer.addSpanEvent("Graph Generated");
227
241
  await this.chunkRepository.updateStatus({
@@ -247,6 +261,79 @@ let ChunkService = class ChunkService {
247
261
  userId: params.userId,
248
262
  });
249
263
  }
264
+ async propagateAndEmbedDates(params) {
265
+ const temporalContextLabel = this.embeddingContext.temporalContextLabel ?? embedding_context_1.DEFAULT_TEMPORAL_CONTEXT_LABEL;
266
+ const temporalReferencesLabel = this.embeddingContext.temporalReferencesLabel ?? embedding_context_1.DEFAULT_TEMPORAL_REFERENCES_LABEL;
267
+ const chunks = await this.chunkRepository.findChunks({
268
+ id: params.id,
269
+ nodeType: params.nodeType,
270
+ });
271
+ const parentName = await this.chunkRepository.findParentName({ id: params.id, nodeType: params.nodeType });
272
+ let activeDates = [];
273
+ const items = [];
274
+ for (const chunk of chunks) {
275
+ // `chunk.dates` is persisted as a JSON-string blob but exposed parsed by the
276
+ // ChunkDescriptor `computed` field, so it is already a structured array here.
277
+ const chunkDates = chunk.dates || [];
278
+ let dateContext;
279
+ let propagatedDates;
280
+ if (chunkDates.length > 0) {
281
+ // Merge new dates into active context (avoid duplicates by date value)
282
+ const existingDateValues = new Set(activeDates.map((d) => d.date));
283
+ const newDates = chunkDates.filter((d) => !existingDateValues.has(d.date));
284
+ activeDates = [...activeDates, ...newDates];
285
+ // Show inherited context + chunk-specific dates
286
+ const contextDates = activeDates.filter((d) => !chunkDates.some((cd) => cd.date === d.date));
287
+ let prefix = "";
288
+ if (contextDates.length > 0) {
289
+ const contextEntries = contextDates
290
+ .map((d) => `${this._formatDateForDisplay(d.date)} - ${d.description}`)
291
+ .join("; ");
292
+ prefix += `[${temporalContextLabel}: ${contextEntries}]\n`;
293
+ }
294
+ const chunkEntries = chunkDates
295
+ .map((d) => `${this._formatDateForDisplay(d.date)} - ${d.description}`)
296
+ .join("; ");
297
+ prefix += `[${temporalReferencesLabel}: ${chunkEntries}]`;
298
+ dateContext = prefix;
299
+ }
300
+ else if (activeDates.length > 0) {
301
+ // No dates in this chunk — inherit from context
302
+ propagatedDates = JSON.stringify(activeDates);
303
+ const dateEntries = activeDates
304
+ .map((d) => `${this._formatDateForDisplay(d.date)} - ${d.description}`)
305
+ .join("; ");
306
+ dateContext = `[${temporalContextLabel}: ${dateEntries}]`;
307
+ }
308
+ else {
309
+ // No dates anywhere yet — no temporal prefix
310
+ dateContext = undefined;
311
+ }
312
+ const enrichedContent = (0, embedding_context_1.buildEmbeddingContext)({
313
+ typeLabel: params.nodeType,
314
+ parentName,
315
+ heading: chunk.heading,
316
+ dateContext,
317
+ content: chunk.content,
318
+ });
319
+ if (enrichedContent?.trim()) {
320
+ items.push({ chunkId: chunk.id, enrichedContent, propagatedDates });
321
+ }
322
+ }
323
+ // Single batched embed for the whole document — per-call Azure latency dominates batch
324
+ // size, so one round-trip for all chunks is far cheaper than one call per chunk.
325
+ await this.chunkRepository.enrichContentAndEmbedBatch(items);
326
+ }
327
+ /**
328
+ * Convert ISO date (YYYY-MM-DD) to display format (DD/MM/YYYY) for Italian context
329
+ */
330
+ _formatDateForDisplay(isoDate) {
331
+ const parts = isoDate.split("-");
332
+ if (parts.length === 3) {
333
+ return `${parts[2]}/${parts[1]}/${parts[0]}`;
334
+ }
335
+ return isoDate;
336
+ }
250
337
  /**
251
338
  * Dynamically selects the queue based on content type.
252
339
  * Uses convention: labelName.toLowerCase() = queue ID