@carlonicora/nestjs-neo4jsonapi 1.105.0 → 1.106.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/graph.creator/services/graph.creator.service.d.ts +1 -1
- package/dist/agents/graph.creator/services/graph.creator.service.d.ts.map +1 -1
- package/dist/agents/graph.creator/services/graph.creator.service.js +14 -0
- package/dist/agents/graph.creator/services/graph.creator.service.js.map +1 -1
- package/dist/bootstrap/app.module.factory.d.ts.map +1 -1
- package/dist/bootstrap/app.module.factory.js +1 -0
- package/dist/bootstrap/app.module.factory.js.map +1 -1
- package/dist/bootstrap/bootstrap.options.d.ts +3 -0
- package/dist/bootstrap/bootstrap.options.d.ts.map +1 -1
- package/dist/common/interfaces/agents/graph.creator.interface.d.ts +4 -0
- package/dist/common/interfaces/agents/graph.creator.interface.d.ts.map +1 -1
- package/dist/common/repositories/ai-source-query.provider.d.ts +19 -0
- package/dist/common/repositories/ai-source-query.provider.d.ts.map +1 -0
- package/dist/common/repositories/ai-source-query.provider.js +5 -0
- package/dist/common/repositories/ai-source-query.provider.js.map +1 -0
- package/dist/common/repositories/default.ai-source-query.provider.d.ts +19 -0
- package/dist/common/repositories/default.ai-source-query.provider.d.ts.map +1 -0
- package/dist/common/repositories/default.ai-source-query.provider.js +36 -0
- package/dist/common/repositories/default.ai-source-query.provider.js.map +1 -0
- package/dist/common/repositories/index.d.ts +2 -0
- package/dist/common/repositories/index.d.ts.map +1 -1
- package/dist/common/repositories/index.js +2 -0
- package/dist/common/repositories/index.js.map +1 -1
- package/dist/common/types/data.limits.d.ts +2 -2
- package/dist/common/types/data.limits.d.ts.map +1 -1
- package/dist/config/interfaces/base.config.interface.d.ts +2 -0
- package/dist/config/interfaces/base.config.interface.d.ts.map +1 -1
- package/dist/config/interfaces/config.embedding.context.interface.d.ts +18 -0
- package/dist/config/interfaces/config.embedding.context.interface.d.ts.map +1 -0
- package/dist/config/interfaces/config.embedding.context.interface.js +3 -0
- package/dist/config/interfaces/config.embedding.context.interface.js.map +1 -0
- package/dist/config/interfaces/index.d.ts +1 -0
- package/dist/config/interfaces/index.d.ts.map +1 -1
- package/dist/config/interfaces/index.js +1 -0
- package/dist/config/interfaces/index.js.map +1 -1
- package/dist/core/core.module.d.ts +4 -0
- package/dist/core/core.module.d.ts.map +1 -1
- package/dist/core/core.module.js +7 -2
- package/dist/core/core.module.js.map +1 -1
- package/dist/foundations/atomicfact/repositories/atomicfact.repository.d.ts +3 -8
- package/dist/foundations/atomicfact/repositories/atomicfact.repository.d.ts.map +1 -1
- package/dist/foundations/atomicfact/repositories/atomicfact.repository.js +19 -46
- package/dist/foundations/atomicfact/repositories/atomicfact.repository.js.map +1 -1
- package/dist/foundations/chunk/chunk.module.d.ts +6 -3
- package/dist/foundations/chunk/chunk.module.d.ts.map +1 -1
- package/dist/foundations/chunk/chunk.module.js +25 -5
- package/dist/foundations/chunk/chunk.module.js.map +1 -1
- package/dist/foundations/chunk/controllers/chunk.controller.d.ts +19 -1
- package/dist/foundations/chunk/controllers/chunk.controller.d.ts.map +1 -1
- package/dist/foundations/chunk/controllers/chunk.controller.js +59 -2
- package/dist/foundations/chunk/controllers/chunk.controller.js.map +1 -1
- package/dist/foundations/chunk/entities/chunk.entity.d.ts +8 -0
- package/dist/foundations/chunk/entities/chunk.entity.d.ts.map +1 -1
- package/dist/foundations/chunk/entities/chunk.entity.js +20 -0
- package/dist/foundations/chunk/entities/chunk.entity.js.map +1 -1
- package/dist/foundations/chunk/processors/chunk.embedding.processor.d.ts +21 -0
- package/dist/foundations/chunk/processors/chunk.embedding.processor.d.ts.map +1 -0
- package/dist/foundations/chunk/processors/chunk.embedding.processor.js +98 -0
- package/dist/foundations/chunk/processors/chunk.embedding.processor.js.map +1 -0
- package/dist/foundations/chunk/repositories/chunk.repository.d.ts +36 -8
- package/dist/foundations/chunk/repositories/chunk.repository.d.ts.map +1 -1
- package/dist/foundations/chunk/repositories/chunk.repository.js +184 -50
- package/dist/foundations/chunk/repositories/chunk.repository.js.map +1 -1
- package/dist/foundations/chunk/services/chunk.service.d.ts +9 -0
- package/dist/foundations/chunk/services/chunk.service.d.ts.map +1 -1
- package/dist/foundations/chunk/services/chunk.service.js +87 -0
- package/dist/foundations/chunk/services/chunk.service.js.map +1 -1
- package/dist/foundations/chunk/services/embedding-context.d.ts +19 -0
- package/dist/foundations/chunk/services/embedding-context.d.ts.map +1 -0
- package/dist/foundations/chunk/services/embedding-context.js +27 -0
- package/dist/foundations/chunk/services/embedding-context.js.map +1 -0
- package/dist/foundations/chunk/services/reciprocal-rank-fusion.d.ts +2 -0
- package/dist/foundations/chunk/services/reciprocal-rank-fusion.d.ts.map +1 -0
- package/dist/foundations/chunk/services/reciprocal-rank-fusion.js +13 -0
- package/dist/foundations/chunk/services/reciprocal-rank-fusion.js.map +1 -0
- package/dist/foundations/keyconcept/controllers/keyconcept.controller.d.ts +15 -0
- package/dist/foundations/keyconcept/controllers/keyconcept.controller.d.ts.map +1 -0
- package/dist/foundations/keyconcept/controllers/keyconcept.controller.js +56 -0
- package/dist/foundations/keyconcept/controllers/keyconcept.controller.js.map +1 -0
- package/dist/foundations/keyconcept/index.d.ts +2 -0
- package/dist/foundations/keyconcept/index.d.ts.map +1 -1
- package/dist/foundations/keyconcept/index.js +5 -1
- package/dist/foundations/keyconcept/index.js.map +1 -1
- package/dist/foundations/keyconcept/keyconcept.module.d.ts.map +1 -1
- package/dist/foundations/keyconcept/keyconcept.module.js +7 -2
- package/dist/foundations/keyconcept/keyconcept.module.js.map +1 -1
- package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.d.ts +22 -0
- package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.d.ts.map +1 -0
- package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.js +98 -0
- package/dist/foundations/keyconcept/processors/keyconcept.embedding.processor.js.map +1 -0
- package/dist/foundations/keyconcept/repositories/keyconcept.repository.d.ts +9 -15
- package/dist/foundations/keyconcept/repositories/keyconcept.repository.d.ts.map +1 -1
- package/dist/foundations/keyconcept/repositories/keyconcept.repository.js +65 -99
- package/dist/foundations/keyconcept/repositories/keyconcept.repository.js.map +1 -1
- 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
|
-
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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,
|
|
1
|
+
{"version":3,"file":"chunk.repository.d.ts","sourceRoot":"","sources":["../../../../src/foundations/chunk/repositories/chunk.repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAmB,qBAAqB,EAAE,MAAM,uDAAuD,CAAC;AAC/G,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;AAI3E,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;IACP,OAAO,CAAC,QAAQ,CAAC,aAAa;gBALtC,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EACP,aAAa,EAAE,qBAAqB;IAG1E,YAAY;IAuBZ,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBpC,aAAa,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAUjC,eAAe,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAahF,mBAAmB,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;YA8DnF,sBAAsB;IAoB9B,cAAc,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAYrF,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,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDX,YAAY,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvE,WAAW,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBtE,0BAA0B,CAC9B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,GAC9E,OAAO,CAAC,IAAI,CAAC;IAiCV,mBAAmB,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5E,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,kBAAkB,CAAC,MAAM,EAAE;QAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAuB/D,2BAA2B,CAAC,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;CAe1F"}
|
|
@@ -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
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
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
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
79
|
-
|
|
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
|
-
|
|
89
|
-
...(params.dataLimits.limitToHowToId ? { limitToHowToId: params.dataLimits.limitToHowToId } : {}),
|
|
145
|
+
ids,
|
|
90
146
|
};
|
|
91
|
-
|
|
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
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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;
|
|
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
|