@carlonicora/nestjs-neo4jsonapi 1.62.7 → 1.64.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/agents.modules.d.ts.map +1 -1
- package/dist/agents/agents.modules.js +3 -0
- package/dist/agents/agents.modules.js.map +1 -1
- package/dist/agents/chatbot/chatbot.module.d.ts +3 -0
- package/dist/agents/chatbot/chatbot.module.d.ts.map +1 -0
- package/dist/agents/chatbot/chatbot.module.js +65 -0
- package/dist/agents/chatbot/chatbot.module.js.map +1 -0
- package/dist/agents/chatbot/interfaces/chatbot.response.interface.d.ts +25 -0
- package/dist/agents/chatbot/interfaces/chatbot.response.interface.d.ts.map +1 -0
- package/dist/agents/chatbot/interfaces/chatbot.response.interface.js +3 -0
- package/dist/agents/chatbot/interfaces/chatbot.response.interface.js.map +1 -0
- package/dist/agents/chatbot/interfaces/graph.catalog.interface.d.ts +50 -0
- package/dist/agents/chatbot/interfaces/graph.catalog.interface.d.ts.map +1 -0
- package/dist/agents/chatbot/interfaces/graph.catalog.interface.js +3 -0
- package/dist/agents/chatbot/interfaces/graph.catalog.interface.js.map +1 -0
- package/dist/agents/chatbot/prompts/chatbot.system.prompt.d.ts +3 -0
- package/dist/agents/chatbot/prompts/chatbot.system.prompt.d.ts.map +1 -0
- package/dist/agents/chatbot/prompts/chatbot.system.prompt.js +60 -0
- package/dist/agents/chatbot/prompts/chatbot.system.prompt.js.map +1 -0
- package/dist/agents/chatbot/repositories/user-modules.repository.d.ts +28 -0
- package/dist/agents/chatbot/repositories/user-modules.repository.d.ts.map +1 -0
- package/dist/agents/chatbot/repositories/user-modules.repository.js +76 -0
- package/dist/agents/chatbot/repositories/user-modules.repository.js.map +1 -0
- package/dist/agents/chatbot/services/chatbot.index.manager.d.ts +17 -0
- package/dist/agents/chatbot/services/chatbot.index.manager.d.ts.map +1 -0
- package/dist/agents/chatbot/services/chatbot.index.manager.js +84 -0
- package/dist/agents/chatbot/services/chatbot.index.manager.js.map +1 -0
- package/dist/agents/chatbot/services/chatbot.search.service.d.ts +46 -0
- package/dist/agents/chatbot/services/chatbot.search.service.d.ts.map +1 -0
- package/dist/agents/chatbot/services/chatbot.search.service.js +148 -0
- package/dist/agents/chatbot/services/chatbot.search.service.js.map +1 -0
- package/dist/agents/chatbot/services/chatbot.service.d.ts +36 -0
- package/dist/agents/chatbot/services/chatbot.service.d.ts.map +1 -0
- package/dist/agents/chatbot/services/chatbot.service.js +220 -0
- package/dist/agents/chatbot/services/chatbot.service.js.map +1 -0
- package/dist/agents/chatbot/services/descriptor.source.d.ts +18 -0
- package/dist/agents/chatbot/services/descriptor.source.d.ts.map +1 -0
- package/dist/agents/chatbot/services/descriptor.source.js +41 -0
- package/dist/agents/chatbot/services/descriptor.source.js.map +1 -0
- package/dist/agents/chatbot/services/field-formatting.d.ts +18 -0
- package/dist/agents/chatbot/services/field-formatting.d.ts.map +1 -0
- package/dist/agents/chatbot/services/field-formatting.js +43 -0
- package/dist/agents/chatbot/services/field-formatting.js.map +1 -0
- package/dist/agents/chatbot/services/graph.catalog.service.d.ts +60 -0
- package/dist/agents/chatbot/services/graph.catalog.service.d.ts.map +1 -0
- package/dist/agents/chatbot/services/graph.catalog.service.js +217 -0
- package/dist/agents/chatbot/services/graph.catalog.service.js.map +1 -0
- package/dist/agents/chatbot/services/humanize-tool.d.ts +9 -0
- package/dist/agents/chatbot/services/humanize-tool.d.ts.map +1 -0
- package/dist/agents/chatbot/services/humanize-tool.js +35 -0
- package/dist/agents/chatbot/services/humanize-tool.js.map +1 -0
- package/dist/agents/chatbot/tools/describe-entity.tool.d.ts +14 -0
- package/dist/agents/chatbot/tools/describe-entity.tool.d.ts.map +1 -0
- package/dist/agents/chatbot/tools/describe-entity.tool.js +63 -0
- package/dist/agents/chatbot/tools/describe-entity.tool.js.map +1 -0
- package/dist/agents/chatbot/tools/read-entity.tool.d.ts +16 -0
- package/dist/agents/chatbot/tools/read-entity.tool.d.ts.map +1 -0
- package/dist/agents/chatbot/tools/read-entity.tool.js +102 -0
- package/dist/agents/chatbot/tools/read-entity.tool.js.map +1 -0
- package/dist/agents/chatbot/tools/resolve-entity.tool.d.ts +16 -0
- package/dist/agents/chatbot/tools/resolve-entity.tool.d.ts.map +1 -0
- package/dist/agents/chatbot/tools/resolve-entity.tool.js +48 -0
- package/dist/agents/chatbot/tools/resolve-entity.tool.js.map +1 -0
- package/dist/agents/chatbot/tools/search-entities.tool.d.ts +20 -0
- package/dist/agents/chatbot/tools/search-entities.tool.d.ts.map +1 -0
- package/dist/agents/chatbot/tools/search-entities.tool.js +122 -0
- package/dist/agents/chatbot/tools/search-entities.tool.js.map +1 -0
- package/dist/agents/chatbot/tools/tool.factory.d.ts +29 -0
- package/dist/agents/chatbot/tools/tool.factory.d.ts.map +1 -0
- package/dist/agents/chatbot/tools/tool.factory.js +72 -0
- package/dist/agents/chatbot/tools/tool.factory.js.map +1 -0
- package/dist/agents/chatbot/tools/traverse.tool.d.ts +58 -0
- package/dist/agents/chatbot/tools/traverse.tool.d.ts.map +1 -0
- package/dist/agents/chatbot/tools/traverse.tool.js +212 -0
- package/dist/agents/chatbot/tools/traverse.tool.js.map +1 -0
- package/dist/agents/index.d.ts +9 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +17 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/bootstrap/bootstrap.options.d.ts +7 -0
- package/dist/bootstrap/bootstrap.options.d.ts.map +1 -1
- package/dist/common/helpers/define-entity.d.ts.map +1 -1
- package/dist/common/helpers/define-entity.js +5 -1
- package/dist/common/helpers/define-entity.js.map +1 -1
- package/dist/common/interfaces/datamodel.interface.d.ts +10 -0
- package/dist/common/interfaces/datamodel.interface.d.ts.map +1 -1
- package/dist/common/interfaces/datamodel.interface.js.map +1 -1
- package/dist/common/interfaces/entity.descriptor.interface.d.ts +1 -1
- package/dist/common/interfaces/entity.descriptor.interface.d.ts.map +1 -1
- package/dist/common/interfaces/entity.descriptor.interface.js.map +1 -1
- package/dist/common/interfaces/entity.schema.interface.d.ts +48 -0
- package/dist/common/interfaces/entity.schema.interface.d.ts.map +1 -1
- package/dist/common/registries/entity.service.registry.d.ts +13 -0
- package/dist/common/registries/entity.service.registry.d.ts.map +1 -0
- package/dist/common/registries/entity.service.registry.js +52 -0
- package/dist/common/registries/entity.service.registry.js.map +1 -0
- package/dist/common/registries/index.d.ts +1 -0
- package/dist/common/registries/index.d.ts.map +1 -1
- package/dist/common/registries/index.js +1 -0
- package/dist/common/registries/index.js.map +1 -1
- package/dist/core/core.module.d.ts.map +1 -1
- package/dist/core/core.module.js +6 -2
- package/dist/core/core.module.js.map +1 -1
- package/dist/core/llm/services/llm.service.d.ts.map +1 -1
- package/dist/core/llm/services/llm.service.js +8 -0
- package/dist/core/llm/services/llm.service.js.map +1 -1
- package/dist/core/neo4j/abstracts/abstract.repository.d.ts +48 -1
- package/dist/core/neo4j/abstracts/abstract.repository.d.ts.map +1 -1
- package/dist/core/neo4j/abstracts/abstract.repository.js +147 -9
- package/dist/core/neo4j/abstracts/abstract.repository.js.map +1 -1
- package/dist/core/neo4j/abstracts/abstract.service.d.ts +47 -0
- package/dist/core/neo4j/abstracts/abstract.service.d.ts.map +1 -1
- package/dist/core/neo4j/abstracts/abstract.service.js +57 -0
- package/dist/core/neo4j/abstracts/abstract.service.js.map +1 -1
- package/dist/core/neo4j/factories/entity.factory.d.ts.map +1 -1
- package/dist/core/neo4j/factories/entity.factory.js +27 -6
- package/dist/core/neo4j/factories/entity.factory.js.map +1 -1
- package/dist/core/neo4j/helpers/build-filter-clauses.d.ts +11 -0
- package/dist/core/neo4j/helpers/build-filter-clauses.d.ts.map +1 -0
- package/dist/core/neo4j/helpers/build-filter-clauses.js +69 -0
- package/dist/core/neo4j/helpers/build-filter-clauses.js.map +1 -0
- package/dist/core/neo4j/helpers/build-order-by.d.ts +6 -0
- package/dist/core/neo4j/helpers/build-order-by.d.ts.map +1 -0
- package/dist/core/neo4j/helpers/build-order-by.js +20 -0
- package/dist/core/neo4j/helpers/build-order-by.js.map +1 -0
- package/dist/core/neo4j/index.d.ts +1 -0
- package/dist/core/neo4j/index.d.ts.map +1 -1
- package/dist/core/neo4j/index.js +2 -0
- package/dist/core/neo4j/index.js.map +1 -1
- package/dist/core/neo4j/types/filter.criterion.d.ts +20 -0
- package/dist/core/neo4j/types/filter.criterion.d.ts.map +1 -0
- package/dist/core/neo4j/types/filter.criterion.js +3 -0
- package/dist/core/neo4j/types/filter.criterion.js.map +1 -0
- package/dist/core/neo4j/types/index.d.ts +2 -0
- package/dist/core/neo4j/types/index.d.ts.map +1 -0
- package/dist/core/neo4j/types/index.js +3 -0
- package/dist/core/neo4j/types/index.js.map +1 -0
- package/dist/foundations/assistant/assistant.module.d.ts +5 -0
- package/dist/foundations/assistant/assistant.module.d.ts.map +1 -0
- package/dist/foundations/assistant/assistant.module.js +32 -0
- package/dist/foundations/assistant/assistant.module.js.map +1 -0
- package/dist/foundations/assistant/controllers/assistant.controller.d.ts +67 -0
- package/dist/foundations/assistant/controllers/assistant.controller.d.ts.map +1 -0
- package/dist/foundations/assistant/controllers/assistant.controller.js +226 -0
- package/dist/foundations/assistant/controllers/assistant.controller.js.map +1 -0
- package/dist/foundations/assistant/dtos/assistant-append.dto.d.ts +11 -0
- package/dist/foundations/assistant/dtos/assistant-append.dto.d.ts.map +1 -0
- package/dist/foundations/assistant/dtos/assistant-append.dto.js +44 -0
- package/dist/foundations/assistant/dtos/assistant-append.dto.js.map +1 -0
- package/dist/foundations/assistant/dtos/assistant-patch.dto.d.ts +12 -0
- package/dist/foundations/assistant/dtos/assistant-patch.dto.d.ts.map +1 -0
- package/dist/foundations/assistant/dtos/assistant-patch.dto.js +52 -0
- package/dist/foundations/assistant/dtos/assistant-patch.dto.js.map +1 -0
- package/dist/foundations/assistant/dtos/assistant-post.dto.d.ts +12 -0
- package/dist/foundations/assistant/dtos/assistant-post.dto.d.ts.map +1 -0
- package/dist/foundations/assistant/dtos/assistant-post.dto.js +51 -0
- package/dist/foundations/assistant/dtos/assistant-post.dto.js.map +1 -0
- package/dist/foundations/assistant/entities/assistant.d.ts +48 -0
- package/dist/foundations/assistant/entities/assistant.d.ts.map +1 -0
- package/dist/foundations/assistant/entities/assistant.js +44 -0
- package/dist/foundations/assistant/entities/assistant.js.map +1 -0
- package/dist/foundations/assistant/entities/assistant.meta.d.ts +3 -0
- package/dist/foundations/assistant/entities/assistant.meta.d.ts.map +1 -0
- package/dist/foundations/assistant/entities/assistant.meta.js +10 -0
- package/dist/foundations/assistant/entities/assistant.meta.js.map +1 -0
- package/dist/foundations/assistant/index.d.ts +7 -0
- package/dist/foundations/assistant/index.d.ts.map +1 -0
- package/dist/foundations/assistant/index.js +12 -0
- package/dist/foundations/assistant/index.js.map +1 -0
- package/dist/foundations/assistant/repositories/assistant.repository.d.ts +50 -0
- package/dist/foundations/assistant/repositories/assistant.repository.d.ts.map +1 -0
- package/dist/foundations/assistant/repositories/assistant.repository.js +65 -0
- package/dist/foundations/assistant/repositories/assistant.repository.js.map +1 -0
- package/dist/foundations/assistant/services/assistant.service.d.ts +113 -0
- package/dist/foundations/assistant/services/assistant.service.d.ts.map +1 -0
- package/dist/foundations/assistant/services/assistant.service.js +395 -0
- package/dist/foundations/assistant/services/assistant.service.js.map +1 -0
- package/dist/foundations/assistant-message/assistant-message.module.d.ts +6 -0
- package/dist/foundations/assistant-message/assistant-message.module.d.ts.map +1 -0
- package/dist/foundations/assistant-message/assistant-message.module.js +36 -0
- package/dist/foundations/assistant-message/assistant-message.module.js.map +1 -0
- package/dist/foundations/assistant-message/controllers/assistant-message.controller.d.ts +16 -0
- package/dist/foundations/assistant-message/controllers/assistant-message.controller.d.ts.map +1 -0
- package/dist/foundations/assistant-message/controllers/assistant-message.controller.js +84 -0
- package/dist/foundations/assistant-message/controllers/assistant-message.controller.js.map +1 -0
- package/dist/foundations/assistant-message/dtos/assistant-message.dto.d.ts +11 -0
- package/dist/foundations/assistant-message/dtos/assistant-message.dto.d.ts.map +1 -0
- package/dist/foundations/assistant-message/dtos/assistant-message.dto.js +45 -0
- package/dist/foundations/assistant-message/dtos/assistant-message.dto.js.map +1 -0
- package/dist/foundations/assistant-message/entities/assistant-message.d.ts +49 -0
- package/dist/foundations/assistant-message/entities/assistant-message.d.ts.map +1 -0
- package/dist/foundations/assistant-message/entities/assistant-message.js +52 -0
- package/dist/foundations/assistant-message/entities/assistant-message.js.map +1 -0
- package/dist/foundations/assistant-message/entities/assistant-message.meta.d.ts +3 -0
- package/dist/foundations/assistant-message/entities/assistant-message.meta.d.ts.map +1 -0
- package/dist/foundations/assistant-message/entities/assistant-message.meta.js +10 -0
- package/dist/foundations/assistant-message/entities/assistant-message.meta.js.map +1 -0
- package/dist/foundations/assistant-message/index.d.ts +8 -0
- package/dist/foundations/assistant-message/index.d.ts.map +1 -0
- package/dist/foundations/assistant-message/index.js +24 -0
- package/dist/foundations/assistant-message/index.js.map +1 -0
- package/dist/foundations/assistant-message/repositories/assistant-message.repository.d.ts +70 -0
- package/dist/foundations/assistant-message/repositories/assistant-message.repository.d.ts.map +1 -0
- package/dist/foundations/assistant-message/repositories/assistant-message.repository.js +119 -0
- package/dist/foundations/assistant-message/repositories/assistant-message.repository.js.map +1 -0
- package/dist/foundations/assistant-message/services/assistant-message.service.d.ts +31 -0
- package/dist/foundations/assistant-message/services/assistant-message.service.d.ts.map +1 -0
- package/dist/foundations/assistant-message/services/assistant-message.service.js +32 -0
- package/dist/foundations/assistant-message/services/assistant-message.service.js.map +1 -0
- package/dist/foundations/foundations.modules.d.ts.map +1 -1
- package/dist/foundations/foundations.modules.js +2 -0
- package/dist/foundations/foundations.modules.js.map +1 -1
- package/dist/foundations/index.d.ts +2 -0
- package/dist/foundations/index.d.ts.map +1 -1
- package/dist/foundations/index.js +2 -0
- package/dist/foundations/index.js.map +1 -1
- package/dist/foundations/rbac/controllers/rbac-dev.controller.d.ts +50 -0
- package/dist/foundations/rbac/controllers/rbac-dev.controller.d.ts.map +1 -0
- package/dist/foundations/rbac/controllers/rbac-dev.controller.js +172 -0
- package/dist/foundations/rbac/controllers/rbac-dev.controller.js.map +1 -0
- package/dist/foundations/rbac/dsl/define-rbac.d.ts +15 -0
- package/dist/foundations/rbac/dsl/define-rbac.d.ts.map +1 -0
- package/dist/foundations/rbac/dsl/define-rbac.js +19 -0
- package/dist/foundations/rbac/dsl/define-rbac.js.map +1 -0
- package/dist/foundations/rbac/dsl/index.d.ts +6 -0
- package/dist/foundations/rbac/dsl/index.d.ts.map +1 -0
- package/dist/foundations/rbac/dsl/index.js +30 -0
- package/dist/foundations/rbac/dsl/index.js.map +1 -0
- package/dist/foundations/rbac/dsl/perm.d.ts +15 -0
- package/dist/foundations/rbac/dsl/perm.d.ts.map +1 -0
- package/dist/foundations/rbac/dsl/perm.js +24 -0
- package/dist/foundations/rbac/dsl/perm.js.map +1 -0
- package/dist/foundations/rbac/dsl/resolver.d.ts +24 -0
- package/dist/foundations/rbac/dsl/resolver.d.ts.map +1 -0
- package/dist/foundations/rbac/dsl/resolver.js +55 -0
- package/dist/foundations/rbac/dsl/resolver.js.map +1 -0
- package/dist/foundations/rbac/dsl/to-permissions-json.d.ts +13 -0
- package/dist/foundations/rbac/dsl/to-permissions-json.d.ts.map +1 -0
- package/dist/foundations/rbac/dsl/to-permissions-json.js +43 -0
- package/dist/foundations/rbac/dsl/to-permissions-json.js.map +1 -0
- package/dist/foundations/rbac/dsl/types.d.ts +55 -0
- package/dist/foundations/rbac/dsl/types.d.ts.map +1 -0
- package/dist/foundations/rbac/dsl/types.js +6 -0
- package/dist/foundations/rbac/dsl/types.js.map +1 -0
- package/dist/foundations/rbac/dump.d.ts +116 -0
- package/dist/foundations/rbac/dump.d.ts.map +1 -0
- package/dist/foundations/rbac/dump.js +154 -0
- package/dist/foundations/rbac/dump.js.map +1 -0
- package/dist/foundations/rbac/index.d.ts +6 -0
- package/dist/foundations/rbac/index.d.ts.map +1 -1
- package/dist/foundations/rbac/index.js +23 -1
- package/dist/foundations/rbac/index.js.map +1 -1
- package/dist/foundations/rbac/rbac.module.d.ts +4 -1
- package/dist/foundations/rbac/rbac.module.d.ts.map +1 -1
- package/dist/foundations/rbac/rbac.module.js +25 -11
- package/dist/foundations/rbac/rbac.module.js.map +1 -1
- package/dist/foundations/rbac/rbac.tokens.d.ts +11 -0
- package/dist/foundations/rbac/rbac.tokens.d.ts.map +1 -0
- package/dist/foundations/rbac/rbac.tokens.js +14 -0
- package/dist/foundations/rbac/rbac.tokens.js.map +1 -0
- package/dist/foundations/rbac/serializer/matrix-to-ts.d.ts +13 -0
- package/dist/foundations/rbac/serializer/matrix-to-ts.d.ts.map +1 -0
- package/dist/foundations/rbac/serializer/matrix-to-ts.js +74 -0
- package/dist/foundations/rbac/serializer/matrix-to-ts.js.map +1 -0
- package/dist/foundations/rbac/services/rbac-reconciler.service.d.ts +30 -0
- package/dist/foundations/rbac/services/rbac-reconciler.service.d.ts.map +1 -0
- package/dist/foundations/rbac/services/rbac-reconciler.service.js +192 -0
- package/dist/foundations/rbac/services/rbac-reconciler.service.js.map +1 -0
- package/dist/foundations/stripe/__tests__/mocks/stripe.mock.d.ts +62 -62
- package/dist/tools/generate-rbac-paths/index.js +24 -19
- package/package.json +1 -1
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var ChatbotSearchService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ChatbotSearchService = exports.CHATBOT_SEMANTIC_MIN_SCORE = exports.CHATBOT_RESOLVE_MAX_RESULTS = exports.CHATBOT_SEMANTIC_MAX_RESULTS = exports.CHATBOT_FUZZY_MAX_RESULTS = exports.CHATBOT_EXACT_MAX_RESULTS = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const embedder_service_1 = require("../../../core/llm/services/embedder.service");
|
|
16
|
+
const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
|
|
17
|
+
const chatbot_index_manager_1 = require("./chatbot.index.manager");
|
|
18
|
+
const graph_catalog_service_1 = require("./graph.catalog.service");
|
|
19
|
+
exports.CHATBOT_EXACT_MAX_RESULTS = 10;
|
|
20
|
+
exports.CHATBOT_FUZZY_MAX_RESULTS = 10;
|
|
21
|
+
exports.CHATBOT_SEMANTIC_MAX_RESULTS = 5;
|
|
22
|
+
exports.CHATBOT_RESOLVE_MAX_RESULTS = 10;
|
|
23
|
+
exports.CHATBOT_SEMANTIC_MIN_SCORE = 0.6;
|
|
24
|
+
const CHATBOT_VECTOR_OVERFETCH = 50;
|
|
25
|
+
const LUCENE_RESERVED_RE = /[+\-&|!(){}[\]^"~*?:\\/]/g;
|
|
26
|
+
let ChatbotSearchService = ChatbotSearchService_1 = class ChatbotSearchService {
|
|
27
|
+
constructor(neo4j, embedder, indexNames, catalog) {
|
|
28
|
+
this.neo4j = neo4j;
|
|
29
|
+
this.embedder = embedder;
|
|
30
|
+
this.indexNames = indexNames;
|
|
31
|
+
this.catalog = catalog;
|
|
32
|
+
this.logger = new common_1.Logger(ChatbotSearchService_1.name);
|
|
33
|
+
}
|
|
34
|
+
async resolveEntity(params) {
|
|
35
|
+
const entities = this.catalog.getAllChatEnabledEntities().filter((e) => params.userModuleIds.includes(e.moduleId));
|
|
36
|
+
if (!entities.length) {
|
|
37
|
+
return { matchMode: "none", items: [] };
|
|
38
|
+
}
|
|
39
|
+
const tiers = [
|
|
40
|
+
["substring", "exact"],
|
|
41
|
+
["fuzzy", "fuzzy"],
|
|
42
|
+
["semantic", "semantic"],
|
|
43
|
+
];
|
|
44
|
+
for (const [tier, label] of tiers) {
|
|
45
|
+
const buckets = await Promise.all(entities.map((e) => this.runTierForEntitySafe(e, params, tier)));
|
|
46
|
+
const merged = buckets.flat();
|
|
47
|
+
if (merged.length) {
|
|
48
|
+
merged.sort((a, b) => b.score - a.score);
|
|
49
|
+
return { matchMode: label, items: merged.slice(0, exports.CHATBOT_RESOLVE_MAX_RESULTS) };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return { matchMode: "none", items: [] };
|
|
53
|
+
}
|
|
54
|
+
async runTierForEntitySafe(entity, params, tier) {
|
|
55
|
+
try {
|
|
56
|
+
const runParams = {
|
|
57
|
+
entity,
|
|
58
|
+
text: params.text,
|
|
59
|
+
companyId: params.companyId,
|
|
60
|
+
limit: tier === "semantic"
|
|
61
|
+
? exports.CHATBOT_SEMANTIC_MAX_RESULTS
|
|
62
|
+
: tier === "fuzzy"
|
|
63
|
+
? exports.CHATBOT_FUZZY_MAX_RESULTS
|
|
64
|
+
: exports.CHATBOT_EXACT_MAX_RESULTS,
|
|
65
|
+
};
|
|
66
|
+
const inner = tier === "semantic" ? await this.tierSemantic(runParams) : await this.tierFulltext(runParams, tier);
|
|
67
|
+
return inner.items.map((i) => ({
|
|
68
|
+
type: entity.type,
|
|
69
|
+
id: i.id,
|
|
70
|
+
summary: this.projectSummary(entity, i.properties, i.id),
|
|
71
|
+
score: i.score,
|
|
72
|
+
}));
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
this.logger.warn(`resolveEntity: tier=${tier} type=${entity.type} threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
projectSummary(entity, properties, id) {
|
|
80
|
+
if (entity.summary) {
|
|
81
|
+
try {
|
|
82
|
+
return entity.summary(properties);
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
/* fall through */
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const name = properties.name;
|
|
89
|
+
if (typeof name === "string" && name.length)
|
|
90
|
+
return name;
|
|
91
|
+
return id;
|
|
92
|
+
}
|
|
93
|
+
async tierFulltext(params, mode) {
|
|
94
|
+
const indexName = this.indexNames.fulltextIndexName(params.entity.labelName);
|
|
95
|
+
const escaped = params.text.replace(LUCENE_RESERVED_RE, "\\$&").toLowerCase();
|
|
96
|
+
const term = mode === "substring" ? `*${escaped}*` : `${escaped}~`;
|
|
97
|
+
const max = mode === "substring" ? exports.CHATBOT_EXACT_MAX_RESULTS : exports.CHATBOT_FUZZY_MAX_RESULTS;
|
|
98
|
+
const result = await this.neo4j.read(`
|
|
99
|
+
CALL db.index.fulltext.queryNodes($indexName, $term)
|
|
100
|
+
YIELD node, score
|
|
101
|
+
WHERE (node)-[:BELONGS_TO]->(:Company { id: $companyId })
|
|
102
|
+
RETURN node.id AS id, properties(node) AS properties, score
|
|
103
|
+
ORDER BY score DESC
|
|
104
|
+
LIMIT toInteger($limit)
|
|
105
|
+
`, { indexName, term, companyId: params.companyId, limit: Math.min(params.limit, max) });
|
|
106
|
+
const items = result.records.map((r) => ({
|
|
107
|
+
id: r.get("id"),
|
|
108
|
+
score: r.get("score"),
|
|
109
|
+
properties: r.get("properties") ?? {},
|
|
110
|
+
}));
|
|
111
|
+
return { matchMode: mode === "substring" ? "exact" : "fuzzy", items };
|
|
112
|
+
}
|
|
113
|
+
async tierSemantic(params) {
|
|
114
|
+
const indexName = this.indexNames.vectorIndexName(params.entity.labelName);
|
|
115
|
+
const queryEmbedding = await this.embedder.vectoriseText({ text: params.text });
|
|
116
|
+
const result = await this.neo4j.read(`
|
|
117
|
+
CALL db.index.vector.queryNodes($indexName, toInteger($overFetch), $queryEmbedding)
|
|
118
|
+
YIELD node, score
|
|
119
|
+
WHERE (node)-[:BELONGS_TO]->(:Company { id: $companyId })
|
|
120
|
+
AND score >= $minScore
|
|
121
|
+
RETURN node.id AS id, properties(node) AS properties, score
|
|
122
|
+
ORDER BY score DESC
|
|
123
|
+
LIMIT toInteger($limit)
|
|
124
|
+
`, {
|
|
125
|
+
indexName,
|
|
126
|
+
overFetch: CHATBOT_VECTOR_OVERFETCH,
|
|
127
|
+
queryEmbedding,
|
|
128
|
+
companyId: params.companyId,
|
|
129
|
+
minScore: exports.CHATBOT_SEMANTIC_MIN_SCORE,
|
|
130
|
+
limit: Math.min(params.limit, exports.CHATBOT_SEMANTIC_MAX_RESULTS),
|
|
131
|
+
});
|
|
132
|
+
const items = result.records.map((r) => ({
|
|
133
|
+
id: r.get("id"),
|
|
134
|
+
score: r.get("score"),
|
|
135
|
+
properties: r.get("properties") ?? {},
|
|
136
|
+
}));
|
|
137
|
+
return { matchMode: items.length ? "semantic" : "none", items };
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
exports.ChatbotSearchService = ChatbotSearchService;
|
|
141
|
+
exports.ChatbotSearchService = ChatbotSearchService = ChatbotSearchService_1 = __decorate([
|
|
142
|
+
(0, common_1.Injectable)(),
|
|
143
|
+
__metadata("design:paramtypes", [neo4j_service_1.Neo4jService,
|
|
144
|
+
embedder_service_1.EmbedderService,
|
|
145
|
+
chatbot_index_manager_1.ChatbotIndexManager,
|
|
146
|
+
graph_catalog_service_1.GraphCatalogService])
|
|
147
|
+
], ChatbotSearchService);
|
|
148
|
+
//# sourceMappingURL=chatbot.search.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatbot.search.service.js","sourceRoot":"","sources":["../../../../src/agents/chatbot/services/chatbot.search.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { WebSocketService } from "../../../core/websocket/services/websocket.service";
|
|
2
|
+
import { LLMService } from "../../../core/llm/services/llm.service";
|
|
3
|
+
import { GraphCatalogService } from "./graph.catalog.service";
|
|
4
|
+
import { ToolFactory } from "../tools/tool.factory";
|
|
5
|
+
import { ResolveEntityTool } from "../tools/resolve-entity.tool";
|
|
6
|
+
import { DescribeEntityTool } from "../tools/describe-entity.tool";
|
|
7
|
+
import { SearchEntitiesTool } from "../tools/search-entities.tool";
|
|
8
|
+
import { ReadEntityTool } from "../tools/read-entity.tool";
|
|
9
|
+
import { TraverseTool } from "../tools/traverse.tool";
|
|
10
|
+
import { ChatbotResponseInterface } from "../interfaces/chatbot.response.interface";
|
|
11
|
+
export interface ChatbotRunParams {
|
|
12
|
+
companyId: string;
|
|
13
|
+
userId: string;
|
|
14
|
+
userModuleIds: string[];
|
|
15
|
+
messages: Array<{
|
|
16
|
+
role: "user" | "assistant" | "system";
|
|
17
|
+
content: string;
|
|
18
|
+
}>;
|
|
19
|
+
/** Optional — populated on subsequent turns; undefined on the first send of a new thread. */
|
|
20
|
+
assistantId?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare class ChatbotService {
|
|
23
|
+
private readonly llm;
|
|
24
|
+
private readonly graph;
|
|
25
|
+
private readonly factory;
|
|
26
|
+
private readonly resolveTool;
|
|
27
|
+
private readonly describeTool;
|
|
28
|
+
private readonly searchTool;
|
|
29
|
+
private readonly readTool;
|
|
30
|
+
private readonly traverseTool;
|
|
31
|
+
private readonly ws?;
|
|
32
|
+
private readonly logger;
|
|
33
|
+
constructor(llm: LLMService, graph: GraphCatalogService, factory: ToolFactory, resolveTool: ResolveEntityTool, describeTool: DescribeEntityTool, searchTool: SearchEntitiesTool, readTool: ReadEntityTool, traverseTool: TraverseTool, ws?: WebSocketService);
|
|
34
|
+
run(params: ChatbotRunParams): Promise<ChatbotResponseInterface>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=chatbot.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatbot.service.d.ts","sourceRoot":"","sources":["../../../../src/agents/chatbot/services/chatbot.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oDAAoD,CAAC;AAGtF,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAkB,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAapF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5E,6FAA6F;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBACa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IACjB,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;IAXlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;gBAGvC,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,iBAAiB,EAC9B,YAAY,EAAE,kBAAkB,EAChC,UAAU,EAAE,kBAAkB,EAC9B,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,YAAY,EACd,EAAE,CAAC,EAAE,gBAAgB;IAG9C,GAAG,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CA8LvE"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var ChatbotService_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.ChatbotService = void 0;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const websocket_service_1 = require("../../../core/websocket/services/websocket.service");
|
|
19
|
+
const zod_1 = require("zod");
|
|
20
|
+
const tools_1 = require("@langchain/core/tools");
|
|
21
|
+
const llm_service_1 = require("../../../core/llm/services/llm.service");
|
|
22
|
+
const graph_catalog_service_1 = require("./graph.catalog.service");
|
|
23
|
+
const tool_factory_1 = require("../tools/tool.factory");
|
|
24
|
+
const resolve_entity_tool_1 = require("../tools/resolve-entity.tool");
|
|
25
|
+
const describe_entity_tool_1 = require("../tools/describe-entity.tool");
|
|
26
|
+
const search_entities_tool_1 = require("../tools/search-entities.tool");
|
|
27
|
+
const read_entity_tool_1 = require("../tools/read-entity.tool");
|
|
28
|
+
const traverse_tool_1 = require("../tools/traverse.tool");
|
|
29
|
+
const chatbot_system_prompt_1 = require("../prompts/chatbot.system.prompt");
|
|
30
|
+
const agentmessage_type_1 = require("../../../common/enums/agentmessage.type");
|
|
31
|
+
const humanize_tool_1 = require("./humanize-tool");
|
|
32
|
+
const MAX_TOOL_ITERATIONS = 15;
|
|
33
|
+
const outputSchema = zod_1.z.object({
|
|
34
|
+
answer: zod_1.z.string(),
|
|
35
|
+
references: zod_1.z.array(zod_1.z.object({ type: zod_1.z.string(), id: zod_1.z.string(), reason: zod_1.z.string() })),
|
|
36
|
+
needsClarification: zod_1.z.boolean(),
|
|
37
|
+
suggestedQuestions: zod_1.z.array(zod_1.z.string()).max(5),
|
|
38
|
+
});
|
|
39
|
+
let ChatbotService = ChatbotService_1 = class ChatbotService {
|
|
40
|
+
constructor(llm, graph, factory, resolveTool, describeTool, searchTool, readTool, traverseTool, ws) {
|
|
41
|
+
this.llm = llm;
|
|
42
|
+
this.graph = graph;
|
|
43
|
+
this.factory = factory;
|
|
44
|
+
this.resolveTool = resolveTool;
|
|
45
|
+
this.describeTool = describeTool;
|
|
46
|
+
this.searchTool = searchTool;
|
|
47
|
+
this.readTool = readTool;
|
|
48
|
+
this.traverseTool = traverseTool;
|
|
49
|
+
this.ws = ws;
|
|
50
|
+
this.logger = new common_1.Logger(ChatbotService_1.name);
|
|
51
|
+
}
|
|
52
|
+
async run(params) {
|
|
53
|
+
this.logger.log(`run: userId=${params.userId} companyId=${params.companyId} userModuleIds=${JSON.stringify(params.userModuleIds)} messageCount=${params.messages.length}`);
|
|
54
|
+
if (!params.userModuleIds.length) {
|
|
55
|
+
this.logger.warn(`run: empty userModuleIds — returning clean refusal without invoking LLM`);
|
|
56
|
+
return {
|
|
57
|
+
type: agentmessage_type_1.AgentMessageType.Assistant,
|
|
58
|
+
answer: "You have no enabled modules with described data — there is nothing I can query.",
|
|
59
|
+
references: [],
|
|
60
|
+
needsClarification: false,
|
|
61
|
+
suggestedQuestions: [],
|
|
62
|
+
tokens: { input: 0, output: 0 },
|
|
63
|
+
toolCalls: [],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const ctx = {
|
|
67
|
+
companyId: params.companyId,
|
|
68
|
+
userId: params.userId,
|
|
69
|
+
userModuleIds: params.userModuleIds,
|
|
70
|
+
};
|
|
71
|
+
const recorder = [];
|
|
72
|
+
const graphMap = this.graph.getMapFor(params.userModuleIds);
|
|
73
|
+
this.logger.log(`run: graph map length=${graphMap.length} chars`);
|
|
74
|
+
this.logger.debug(`run: graph map contents:\n${graphMap}`);
|
|
75
|
+
const systemPrompt = (0, chatbot_system_prompt_1.renderChatbotSystemPrompt)(graphMap);
|
|
76
|
+
let tools = [
|
|
77
|
+
this.resolveTool.build(ctx, recorder),
|
|
78
|
+
this.describeTool.build(ctx, recorder),
|
|
79
|
+
this.searchTool.build(ctx, recorder),
|
|
80
|
+
this.readTool.build(ctx, recorder),
|
|
81
|
+
this.traverseTool.build(ctx, recorder),
|
|
82
|
+
];
|
|
83
|
+
this.logger.log(`run: bound tools=${JSON.stringify(tools.map((t) => t.name))}`);
|
|
84
|
+
if (this.ws) {
|
|
85
|
+
const ws = this.ws;
|
|
86
|
+
const userId = params.userId;
|
|
87
|
+
const assistantId = params.assistantId;
|
|
88
|
+
tools = tools.map((t) => new tools_1.DynamicStructuredTool({
|
|
89
|
+
name: t.name,
|
|
90
|
+
description: t.description,
|
|
91
|
+
schema: t.schema,
|
|
92
|
+
func: async (input) => {
|
|
93
|
+
try {
|
|
94
|
+
await ws.sendMessageToUser(userId, "assistant:status", {
|
|
95
|
+
assistantId,
|
|
96
|
+
status: (0, humanize_tool_1.humanizeTool)(t.name, input),
|
|
97
|
+
at: new Date().toISOString(),
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
// Non-fatal — status updates are progress hints, not functional.
|
|
102
|
+
this.logger.warn(`assistant:status emit failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
103
|
+
}
|
|
104
|
+
return t.func(input);
|
|
105
|
+
},
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
const history = params.messages.map((m) => ({
|
|
109
|
+
role: m.role === "user"
|
|
110
|
+
? agentmessage_type_1.AgentMessageType.User
|
|
111
|
+
: m.role === "assistant"
|
|
112
|
+
? agentmessage_type_1.AgentMessageType.Assistant
|
|
113
|
+
: agentmessage_type_1.AgentMessageType.System,
|
|
114
|
+
content: m.content,
|
|
115
|
+
}));
|
|
116
|
+
const RETRY_INSTRUCTION = `Your previous attempt did not call any tools and did not return any references. You cannot know whether the user's question is ambiguous without searching first — so "needsClarification: true" is NOT a valid response at this stage.
|
|
117
|
+
|
|
118
|
+
You MUST call at least one tool BEFORE responding. For a question that names an entity (e.g., "Show me the last order from Acme"), the first tool call is always:
|
|
119
|
+
|
|
120
|
+
resolve_entity({ text: "<the user's literal phrase>" })
|
|
121
|
+
|
|
122
|
+
Inspect the returned candidates, pick the right type, then call describe_entity and proceed with the typed tools. Do not respond with text — call the tool now.`;
|
|
123
|
+
this.logger.log(`run: calling LLM (first attempt) with historyLength=${history.length} maxToolIterations=${MAX_TOOL_ITERATIONS}`);
|
|
124
|
+
let started = Date.now();
|
|
125
|
+
let response = await this.llm.call({
|
|
126
|
+
systemPrompts: [systemPrompt],
|
|
127
|
+
history,
|
|
128
|
+
outputSchema,
|
|
129
|
+
inputParams: {},
|
|
130
|
+
tools,
|
|
131
|
+
maxToolIterations: MAX_TOOL_ITERATIONS,
|
|
132
|
+
temperature: 0.1,
|
|
133
|
+
});
|
|
134
|
+
this.logger.log(`run: first-attempt LLM returned in ${Date.now() - started}ms | toolCallsObserved=${recorder.length} | referencesCount=${response.references?.length ?? 0}`);
|
|
135
|
+
if (recorder.length === 0 && (response.references?.length ?? 0) === 0) {
|
|
136
|
+
this.logger.warn(`run: LLM returned no tool calls AND no references — retrying once with enforcement prompt`);
|
|
137
|
+
started = Date.now();
|
|
138
|
+
response = await this.llm.call({
|
|
139
|
+
systemPrompts: [systemPrompt, RETRY_INSTRUCTION],
|
|
140
|
+
history,
|
|
141
|
+
outputSchema,
|
|
142
|
+
inputParams: {},
|
|
143
|
+
tools,
|
|
144
|
+
maxToolIterations: MAX_TOOL_ITERATIONS,
|
|
145
|
+
temperature: 0.1,
|
|
146
|
+
});
|
|
147
|
+
this.logger.log(`run: retry LLM returned in ${Date.now() - started}ms | toolCallsObserved=${recorder.length} | referencesCount=${response.references?.length ?? 0}`);
|
|
148
|
+
}
|
|
149
|
+
// Error-recovery retry. If the LLM hit a tool error and bounced an
|
|
150
|
+
// apology to the user instead of correcting the call, force another pass
|
|
151
|
+
// with the error details and instructions to retry the failing tool
|
|
152
|
+
// with valid arguments. The enhanced error messages from the tools
|
|
153
|
+
// already include the list of valid fields/relationships — the retry
|
|
154
|
+
// just has to point the LLM back at them.
|
|
155
|
+
const erroredCalls = recorder.filter((c) => c.error);
|
|
156
|
+
const answerSoundsApologetic = /^\s*(i am sorry|i'm sorry|i am unable|i cannot|please provide|could you (please )?specify)/i.test(response.answer ?? "");
|
|
157
|
+
if (erroredCalls.length > 0 && answerSoundsApologetic) {
|
|
158
|
+
this.logger.warn(`run: LLM bounced apology after tool error(s) — retrying with recovery prompt (${erroredCalls.length} errored calls)`);
|
|
159
|
+
const lastError = erroredCalls[erroredCalls.length - 1];
|
|
160
|
+
const recoveryInstruction = `A previous tool call failed and you responded to the user with an apology instead of retrying. That is wrong — the user did not cause the error. Read the error message carefully, correct the arguments, and call the tool again.
|
|
161
|
+
|
|
162
|
+
Most recent failing call:
|
|
163
|
+
tool: ${lastError.tool}
|
|
164
|
+
input: ${JSON.stringify(lastError.input)}
|
|
165
|
+
error: ${lastError.error}
|
|
166
|
+
|
|
167
|
+
If the error lists valid fields or relationships, pick one of those and retry NOW. Do not respond to the user until the tool succeeds or you have exhausted sensible options. Do not open your final answer with "I am sorry" or "I cannot".`;
|
|
168
|
+
started = Date.now();
|
|
169
|
+
response = await this.llm.call({
|
|
170
|
+
systemPrompts: [systemPrompt, recoveryInstruction],
|
|
171
|
+
history,
|
|
172
|
+
outputSchema,
|
|
173
|
+
inputParams: {},
|
|
174
|
+
tools,
|
|
175
|
+
maxToolIterations: MAX_TOOL_ITERATIONS,
|
|
176
|
+
temperature: 0.1,
|
|
177
|
+
});
|
|
178
|
+
this.logger.log(`run: recovery retry LLM returned in ${Date.now() - started}ms | toolCallsObserved=${recorder.length} | referencesCount=${response.references?.length ?? 0}`);
|
|
179
|
+
}
|
|
180
|
+
// Post-retry honesty guard. If the LLM still ships needsClarification: true
|
|
181
|
+
// without having called any tool, it is refusing to search — not actually
|
|
182
|
+
// dealing with ambiguous data. Replace the lazy clarification with a clear
|
|
183
|
+
// failure message so the user knows the assistant did not even look.
|
|
184
|
+
if (recorder.length === 0 && response.needsClarification) {
|
|
185
|
+
this.logger.warn(`run: LLM set needsClarification=true with 0 tool calls after retry — rewriting to honest failure`);
|
|
186
|
+
response = {
|
|
187
|
+
...response,
|
|
188
|
+
answer: "I was unable to answer this question — I did not call any tool to look up data for it, so I cannot provide a real response. Please try rephrasing, or ask about a specific entity by name.",
|
|
189
|
+
references: [],
|
|
190
|
+
suggestedQuestions: [],
|
|
191
|
+
needsClarification: false,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
this.logger.log(`run: final response | toolCallsObserved=${recorder.length} | needsClarification=${response.needsClarification} | referencesCount=${response.references?.length ?? 0} | tokens=${JSON.stringify(response.tokenUsage ?? {})}`);
|
|
195
|
+
return {
|
|
196
|
+
type: agentmessage_type_1.AgentMessageType.Assistant,
|
|
197
|
+
answer: response.answer,
|
|
198
|
+
references: response.references,
|
|
199
|
+
needsClarification: response.needsClarification,
|
|
200
|
+
suggestedQuestions: response.suggestedQuestions,
|
|
201
|
+
tokens: response.tokenUsage ?? { input: 0, output: 0 },
|
|
202
|
+
toolCalls: recorder,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
exports.ChatbotService = ChatbotService;
|
|
207
|
+
exports.ChatbotService = ChatbotService = ChatbotService_1 = __decorate([
|
|
208
|
+
(0, common_1.Injectable)(),
|
|
209
|
+
__param(8, (0, common_1.Optional)()),
|
|
210
|
+
__metadata("design:paramtypes", [llm_service_1.LLMService,
|
|
211
|
+
graph_catalog_service_1.GraphCatalogService,
|
|
212
|
+
tool_factory_1.ToolFactory,
|
|
213
|
+
resolve_entity_tool_1.ResolveEntityTool,
|
|
214
|
+
describe_entity_tool_1.DescribeEntityTool,
|
|
215
|
+
search_entities_tool_1.SearchEntitiesTool,
|
|
216
|
+
read_entity_tool_1.ReadEntityTool,
|
|
217
|
+
traverse_tool_1.TraverseTool,
|
|
218
|
+
websocket_service_1.WebSocketService])
|
|
219
|
+
], ChatbotService);
|
|
220
|
+
//# sourceMappingURL=chatbot.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatbot.service.js","sourceRoot":"","sources":["../../../../src/agents/chatbot/services/chatbot.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DescriptorSource } from "./graph.catalog.service";
|
|
2
|
+
export declare class GraphDescriptorRegistry implements DescriptorSource {
|
|
3
|
+
private readonly entries;
|
|
4
|
+
/**
|
|
5
|
+
* Register a feature-module's descriptor with the chatbot graph catalog.
|
|
6
|
+
*
|
|
7
|
+
* `moduleId` must be the stable UUID of the `(Module)` node seeded in the
|
|
8
|
+
* host app's Neo4j migrations. Matching the ID — not the name — means the
|
|
9
|
+
* catalog continues to work after module renames and is decoupled from the
|
|
10
|
+
* host app's naming conventions.
|
|
11
|
+
*/
|
|
12
|
+
register(params: {
|
|
13
|
+
descriptor: any;
|
|
14
|
+
moduleId: string;
|
|
15
|
+
}): void;
|
|
16
|
+
loadAll(): any[];
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=descriptor.source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.source.d.ts","sourceRoot":"","sources":["../../../../src/agents/chatbot/services/descriptor.source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAO3D,qBACa,uBAAwB,YAAW,gBAAgB;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IAEjD;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,GAAG,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAI7D,OAAO,IAAI,GAAG,EAAE;CAUjB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.GraphDescriptorRegistry = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
let GraphDescriptorRegistry = class GraphDescriptorRegistry {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.entries = [];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Register a feature-module's descriptor with the chatbot graph catalog.
|
|
17
|
+
*
|
|
18
|
+
* `moduleId` must be the stable UUID of the `(Module)` node seeded in the
|
|
19
|
+
* host app's Neo4j migrations. Matching the ID — not the name — means the
|
|
20
|
+
* catalog continues to work after module renames and is decoupled from the
|
|
21
|
+
* host app's naming conventions.
|
|
22
|
+
*/
|
|
23
|
+
register(params) {
|
|
24
|
+
this.entries.push({ descriptor: params.descriptor, moduleId: params.moduleId });
|
|
25
|
+
}
|
|
26
|
+
loadAll() {
|
|
27
|
+
return this.entries.map((e) => ({
|
|
28
|
+
model: e.descriptor.model,
|
|
29
|
+
description: e.descriptor.description,
|
|
30
|
+
moduleId: e.moduleId,
|
|
31
|
+
fields: e.descriptor.fields ?? {},
|
|
32
|
+
relationships: e.descriptor.relationships ?? {},
|
|
33
|
+
chat: e.descriptor.chat,
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
exports.GraphDescriptorRegistry = GraphDescriptorRegistry;
|
|
38
|
+
exports.GraphDescriptorRegistry = GraphDescriptorRegistry = __decorate([
|
|
39
|
+
(0, common_1.Injectable)()
|
|
40
|
+
], GraphDescriptorRegistry);
|
|
41
|
+
//# sourceMappingURL=descriptor.source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.source.js","sourceRoot":"","sources":["../../../../src/agents/chatbot/services/descriptor.source.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AASrC,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAA7B;QACY,YAAO,GAAsB,EAAE,CAAC;IAwBnD,CAAC;IAtBC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAA6C;QACpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK;YACzB,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,WAAW;YACrC,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE;YACjC,aAAa,EAAE,CAAC,CAAC,UAAU,CAAC,aAAa,IAAI,EAAE;YAC/C,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI;SACxB,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAA;AAzBY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;GACA,uBAAuB,CAyBnC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { CatalogField } from "../interfaces/graph.catalog.interface";
|
|
2
|
+
import { FieldKind } from "../../../common/interfaces/entity.schema.interface";
|
|
3
|
+
/**
|
|
4
|
+
* Format a money field's raw minor-unit integer as a decimal string the LLM
|
|
5
|
+
* can safely quote to the user (e.g. 600 with minorUnits=2 → "6.00").
|
|
6
|
+
* Returns null when the value is not a finite number so callers can skip
|
|
7
|
+
* emitting a companion key for missing / null values.
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatMoneyField(value: unknown, kind: FieldKind): string | null;
|
|
10
|
+
/**
|
|
11
|
+
* Build the `fields` object a tool returns to the LLM for one record.
|
|
12
|
+
* Emits the raw scalar for every catalogued field, and for money fields
|
|
13
|
+
* also emits a sibling `<name>_formatted` decimal string alongside the raw
|
|
14
|
+
* integer. The sibling name mirrors the prompt's documented convention so
|
|
15
|
+
* the LLM quotes the formatted string instead of the raw minor-unit integer.
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildToolFieldsOutput(fields: CatalogField[], record: Record<string, unknown>): Record<string, unknown>;
|
|
18
|
+
//# sourceMappingURL=field-formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-formatting.d.ts","sourceRoot":"","sources":["../../../../src/agents/chatbot/services/field-formatting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAE/E;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAO/E;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EAAE,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatMoneyField = formatMoneyField;
|
|
4
|
+
exports.buildToolFieldsOutput = buildToolFieldsOutput;
|
|
5
|
+
/**
|
|
6
|
+
* Format a money field's raw minor-unit integer as a decimal string the LLM
|
|
7
|
+
* can safely quote to the user (e.g. 600 with minorUnits=2 → "6.00").
|
|
8
|
+
* Returns null when the value is not a finite number so callers can skip
|
|
9
|
+
* emitting a companion key for missing / null values.
|
|
10
|
+
*/
|
|
11
|
+
function formatMoneyField(value, kind) {
|
|
12
|
+
if (kind.type !== "money")
|
|
13
|
+
return null;
|
|
14
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
15
|
+
return null;
|
|
16
|
+
const minor = kind.minorUnits ?? 2;
|
|
17
|
+
if (minor === 0)
|
|
18
|
+
return String(Math.trunc(value));
|
|
19
|
+
const factor = 10 ** minor;
|
|
20
|
+
return (value / factor).toFixed(minor);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Build the `fields` object a tool returns to the LLM for one record.
|
|
24
|
+
* Emits the raw scalar for every catalogued field, and for money fields
|
|
25
|
+
* also emits a sibling `<name>_formatted` decimal string alongside the raw
|
|
26
|
+
* integer. The sibling name mirrors the prompt's documented convention so
|
|
27
|
+
* the LLM quotes the formatted string instead of the raw minor-unit integer.
|
|
28
|
+
*/
|
|
29
|
+
function buildToolFieldsOutput(fields, record) {
|
|
30
|
+
const out = {};
|
|
31
|
+
for (const f of fields) {
|
|
32
|
+
const value = record[f.name];
|
|
33
|
+
out[f.name] = value;
|
|
34
|
+
if (f.kind?.type === "money") {
|
|
35
|
+
const formatted = formatMoneyField(value, f.kind);
|
|
36
|
+
if (formatted !== null) {
|
|
37
|
+
out[`${f.name}_formatted`] = formatted;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=field-formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-formatting.js","sourceRoot":"","sources":["../../../../src/agents/chatbot/services/field-formatting.ts"],"names":[],"mappings":";;AASA,4CAOC;AASD,sDAgBC;AAtCD;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,KAAc,EAAE,IAAe;IAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,EAAE,IAAI,KAAK,CAAC;IAC3B,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,qBAAqB,CACnC,MAAsB,EACtB,MAA+B;IAE/B,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;gBACvB,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,YAAY,CAAC,GAAG,SAAS,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { OnApplicationBootstrap } from "@nestjs/common";
|
|
2
|
+
import { CatalogEntity } from "../interfaces/graph.catalog.interface";
|
|
3
|
+
import { FieldKind } from "../../../common/interfaces/entity.schema.interface";
|
|
4
|
+
/**
|
|
5
|
+
* Provided by the library bootstrap layer. Must return the full list of registered
|
|
6
|
+
* entity descriptors (including their `moduleId` — the stable UUID of the `(Module)`
|
|
7
|
+
* node in Neo4j, supplied by the feature module at `graphRegistry.register()` time).
|
|
8
|
+
*/
|
|
9
|
+
export interface DescriptorSource {
|
|
10
|
+
loadAll(): Array<{
|
|
11
|
+
model: {
|
|
12
|
+
type: string;
|
|
13
|
+
nodeName: string;
|
|
14
|
+
labelName: string;
|
|
15
|
+
};
|
|
16
|
+
description?: string;
|
|
17
|
+
moduleId: string;
|
|
18
|
+
fields: Record<string, {
|
|
19
|
+
type: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
kind?: FieldKind;
|
|
22
|
+
}>;
|
|
23
|
+
relationships: Record<string, {
|
|
24
|
+
model: {
|
|
25
|
+
type: string;
|
|
26
|
+
nodeName: string;
|
|
27
|
+
labelName: string;
|
|
28
|
+
};
|
|
29
|
+
direction: "in" | "out";
|
|
30
|
+
relationship: string;
|
|
31
|
+
cardinality: "one" | "many";
|
|
32
|
+
description?: string;
|
|
33
|
+
reverse?: {
|
|
34
|
+
name: string;
|
|
35
|
+
description: string;
|
|
36
|
+
};
|
|
37
|
+
}>;
|
|
38
|
+
chat?: {
|
|
39
|
+
summary?: (d: any) => string;
|
|
40
|
+
textSearchFields?: string[];
|
|
41
|
+
};
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
export declare class GraphCatalogService implements OnApplicationBootstrap {
|
|
45
|
+
private readonly source;
|
|
46
|
+
private readonly logger;
|
|
47
|
+
private entities;
|
|
48
|
+
/** Keyed by `moduleId` (UUID), value is the pre-rendered text fragment. */
|
|
49
|
+
private renderedByModuleId;
|
|
50
|
+
constructor(source: DescriptorSource);
|
|
51
|
+
onApplicationBootstrap(): void;
|
|
52
|
+
buildCatalog(): void;
|
|
53
|
+
private renderModule;
|
|
54
|
+
getMapFor(userModuleIds: string[]): string;
|
|
55
|
+
private filterCrossModule;
|
|
56
|
+
getAllChatEnabledEntities(): CatalogEntity[];
|
|
57
|
+
hasType(type: string): boolean;
|
|
58
|
+
getEntityDetail(type: string, userModuleIds: string[]): CatalogEntity | null;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=graph.catalog.service.d.ts.map
|