@carlonicora/nestjs-neo4jsonapi 1.64.0 → 1.65.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.js +3 -3
- package/dist/agents/agents.modules.js.map +1 -1
- package/dist/agents/graph/graph.module.d.ts +3 -0
- package/dist/agents/graph/graph.module.d.ts.map +1 -0
- package/dist/agents/{chatbot/chatbot.module.js → graph/graph.module.js} +12 -16
- package/dist/agents/graph/graph.module.js.map +1 -0
- package/dist/agents/{chatbot → graph}/interfaces/graph.catalog.interface.d.ts +4 -0
- package/dist/agents/graph/interfaces/graph.catalog.interface.d.ts.map +1 -0
- package/dist/agents/graph/interfaces/graph.catalog.interface.js.map +1 -0
- package/dist/agents/graph/interfaces/graph.node.output.interface.d.ts +30 -0
- package/dist/agents/graph/interfaces/graph.node.output.interface.d.ts.map +1 -0
- package/dist/agents/graph/interfaces/graph.node.output.interface.js +3 -0
- package/dist/agents/graph/interfaces/graph.node.output.interface.js.map +1 -0
- package/dist/agents/graph/prompts/graph.node.system.prompt.d.ts +3 -0
- package/dist/agents/graph/prompts/graph.node.system.prompt.d.ts.map +1 -0
- package/dist/agents/graph/prompts/graph.node.system.prompt.js +66 -0
- package/dist/agents/graph/prompts/graph.node.system.prompt.js.map +1 -0
- package/dist/agents/graph/repositories/user-modules.repository.d.ts.map +1 -0
- package/dist/agents/graph/repositories/user-modules.repository.js.map +1 -0
- package/dist/agents/{chatbot → graph}/services/descriptor.source.d.ts +2 -0
- package/dist/agents/graph/services/descriptor.source.d.ts.map +1 -0
- package/dist/agents/{chatbot → graph}/services/descriptor.source.js +18 -3
- package/dist/agents/graph/services/descriptor.source.js.map +1 -0
- package/dist/agents/graph/services/field-formatting.d.ts.map +1 -0
- package/dist/agents/graph/services/field-formatting.js.map +1 -0
- package/dist/agents/{chatbot → graph}/services/graph.catalog.service.d.ts +16 -0
- package/dist/agents/graph/services/graph.catalog.service.d.ts.map +1 -0
- package/dist/agents/{chatbot → graph}/services/graph.catalog.service.js +63 -1
- package/dist/agents/graph/services/graph.catalog.service.js.map +1 -0
- package/dist/agents/{chatbot/services/chatbot.index.manager.d.ts → graph/services/graph.index.manager.d.ts} +2 -2
- package/dist/agents/graph/services/graph.index.manager.d.ts.map +1 -0
- package/dist/agents/{chatbot/services/chatbot.index.manager.js → graph/services/graph.index.manager.js} +9 -9
- package/dist/agents/graph/services/graph.index.manager.js.map +1 -0
- package/dist/agents/graph/services/graph.search.service.d.ts +69 -0
- package/dist/agents/graph/services/graph.search.service.d.ts.map +1 -0
- package/dist/agents/graph/services/graph.search.service.js +230 -0
- package/dist/agents/graph/services/graph.search.service.js.map +1 -0
- package/dist/agents/graph/services/humanize-tool.d.ts.map +1 -0
- package/dist/agents/graph/services/humanize-tool.js.map +1 -0
- package/dist/agents/graph/services/materialise-bridge.d.ts +36 -0
- package/dist/agents/graph/services/materialise-bridge.d.ts.map +1 -0
- package/dist/agents/graph/services/materialise-bridge.js +69 -0
- package/dist/agents/graph/services/materialise-bridge.js.map +1 -0
- package/dist/agents/graph/tools/describe-entity.tool.d.ts.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/describe-entity.tool.js +1 -0
- package/dist/agents/graph/tools/describe-entity.tool.js.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/read-entity.tool.d.ts +5 -1
- package/dist/agents/graph/tools/read-entity.tool.d.ts.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/read-entity.tool.js +37 -8
- package/dist/agents/graph/tools/read-entity.tool.js.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/resolve-entity.tool.d.ts +2 -2
- package/dist/agents/graph/tools/resolve-entity.tool.d.ts.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/resolve-entity.tool.js +2 -2
- package/dist/agents/graph/tools/resolve-entity.tool.js.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/search-entities.tool.d.ts +6 -2
- package/dist/agents/graph/tools/search-entities.tool.d.ts.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/search-entities.tool.js +36 -12
- package/dist/agents/graph/tools/search-entities.tool.js.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/tool.factory.d.ts +7 -0
- package/dist/agents/graph/tools/tool.factory.d.ts.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/tool.factory.js +57 -3
- package/dist/agents/graph/tools/tool.factory.js.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/traverse.tool.d.ts +5 -1
- package/dist/agents/graph/tools/traverse.tool.d.ts.map +1 -0
- package/dist/agents/{chatbot → graph}/tools/traverse.tool.js +38 -15
- package/dist/agents/graph/tools/traverse.tool.js.map +1 -0
- package/dist/agents/index.d.ts +6 -9
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +13 -15
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/responder/contexts/responder.context.d.ts +75 -1
- package/dist/agents/responder/contexts/responder.context.d.ts.map +1 -1
- package/dist/agents/responder/contexts/responder.context.js +29 -4
- package/dist/agents/responder/contexts/responder.context.js.map +1 -1
- package/dist/agents/responder/factories/responder.context.factory.d.ts +4 -5
- package/dist/agents/responder/factories/responder.context.factory.d.ts.map +1 -1
- package/dist/agents/responder/factories/responder.context.factory.js +28 -8
- package/dist/agents/responder/factories/responder.context.factory.js.map +1 -1
- package/dist/agents/responder/interfaces/entity.reference.interface.d.ts +7 -0
- package/dist/agents/responder/interfaces/entity.reference.interface.d.ts.map +1 -0
- package/dist/agents/{chatbot/interfaces/chatbot.response.interface.js → responder/interfaces/entity.reference.interface.js} +1 -1
- package/dist/agents/responder/interfaces/entity.reference.interface.js.map +1 -0
- package/dist/agents/responder/interfaces/responder.response.interface.d.ts +12 -3
- package/dist/agents/responder/interfaces/responder.response.interface.d.ts.map +1 -1
- package/dist/agents/responder/interfaces/unified.trace.interface.d.ts +64 -0
- package/dist/agents/responder/interfaces/unified.trace.interface.d.ts.map +1 -0
- package/dist/agents/responder/interfaces/unified.trace.interface.js +3 -0
- package/dist/agents/responder/interfaces/unified.trace.interface.js.map +1 -0
- package/dist/agents/responder/nodes/graph.node.service.d.ts +31 -0
- package/dist/agents/responder/nodes/graph.node.service.d.ts.map +1 -0
- package/dist/agents/responder/nodes/graph.node.service.js +319 -0
- package/dist/agents/responder/nodes/graph.node.service.js.map +1 -0
- package/dist/agents/responder/nodes/planner.node.service.d.ts +14 -0
- package/dist/agents/responder/nodes/planner.node.service.d.ts.map +1 -0
- package/dist/agents/responder/nodes/planner.node.service.js +121 -0
- package/dist/agents/responder/nodes/planner.node.service.js.map +1 -0
- package/dist/agents/responder/nodes/responder.answer.node.service.d.ts +5 -23
- package/dist/agents/responder/nodes/responder.answer.node.service.d.ts.map +1 -1
- package/dist/agents/responder/nodes/responder.answer.node.service.js +257 -432
- package/dist/agents/responder/nodes/responder.answer.node.service.js.map +1 -1
- package/dist/agents/responder/responder.module.d.ts.map +1 -1
- package/dist/agents/responder/responder.module.js +12 -3
- package/dist/agents/responder/responder.module.js.map +1 -1
- package/dist/agents/responder/services/responder.service.d.ts +15 -22
- package/dist/agents/responder/services/responder.service.d.ts.map +1 -1
- package/dist/agents/responder/services/responder.service.js +116 -89
- package/dist/agents/responder/services/responder.service.js.map +1 -1
- package/dist/common/helpers/define-entity.d.ts.map +1 -1
- package/dist/common/helpers/define-entity.js +16 -1
- package/dist/common/helpers/define-entity.js.map +1 -1
- package/dist/common/interfaces/entity.schema.interface.d.ts +15 -0
- package/dist/common/interfaces/entity.schema.interface.d.ts.map +1 -1
- package/dist/core/llm/interfaces/llm-call-metadata.interface.d.ts +19 -0
- package/dist/core/llm/interfaces/llm-call-metadata.interface.d.ts.map +1 -0
- package/dist/core/llm/interfaces/llm-call-metadata.interface.js +3 -0
- package/dist/core/llm/interfaces/llm-call-metadata.interface.js.map +1 -0
- package/dist/core/llm/llm.module.d.ts +1 -0
- package/dist/core/llm/llm.module.d.ts.map +1 -1
- package/dist/core/llm/llm.module.js +3 -1
- package/dist/core/llm/llm.module.js.map +1 -1
- package/dist/core/llm/services/llm-call-dumper.service.d.ts +64 -0
- package/dist/core/llm/services/llm-call-dumper.service.d.ts.map +1 -0
- package/dist/core/llm/services/llm-call-dumper.service.js +204 -0
- package/dist/core/llm/services/llm-call-dumper.service.js.map +1 -0
- package/dist/core/llm/services/llm.service.d.ts +4 -1
- package/dist/core/llm/services/llm.service.d.ts.map +1 -1
- package/dist/core/llm/services/llm.service.js +304 -220
- package/dist/core/llm/services/llm.service.js.map +1 -1
- package/dist/foundations/assistant/assistant.module.d.ts.map +1 -1
- package/dist/foundations/assistant/assistant.module.js +3 -2
- package/dist/foundations/assistant/assistant.module.js.map +1 -1
- package/dist/foundations/assistant/entities/assistant.d.ts +15 -16
- package/dist/foundations/assistant/entities/assistant.d.ts.map +1 -1
- package/dist/foundations/assistant/entities/assistant.js +21 -9
- package/dist/foundations/assistant/entities/assistant.js.map +1 -1
- package/dist/foundations/assistant/repositories/assistant.repository.d.ts +13 -0
- package/dist/foundations/assistant/repositories/assistant.repository.d.ts.map +1 -1
- package/dist/foundations/assistant/services/assistant.service.d.ts +35 -10
- package/dist/foundations/assistant/services/assistant.service.d.ts.map +1 -1
- package/dist/foundations/assistant/services/assistant.service.js +132 -17
- package/dist/foundations/assistant/services/assistant.service.js.map +1 -1
- package/dist/foundations/assistant-message/entities/assistant-message.d.ts +30 -10
- package/dist/foundations/assistant-message/entities/assistant-message.d.ts.map +1 -1
- package/dist/foundations/assistant-message/entities/assistant-message.js +19 -4
- package/dist/foundations/assistant-message/entities/assistant-message.js.map +1 -1
- package/dist/foundations/assistant-message/repositories/assistant-message.repository.d.ts +53 -4
- package/dist/foundations/assistant-message/repositories/assistant-message.repository.d.ts.map +1 -1
- package/dist/foundations/assistant-message/repositories/assistant-message.repository.js +43 -3
- package/dist/foundations/assistant-message/repositories/assistant-message.repository.js.map +1 -1
- package/dist/foundations/assistant-message/services/assistant-message.service.d.ts +26 -0
- package/dist/foundations/assistant-message/services/assistant-message.service.d.ts.map +1 -1
- package/dist/foundations/chunk/chunk.module.d.ts.map +1 -1
- package/dist/foundations/chunk/chunk.module.js +4 -5
- package/dist/foundations/chunk/chunk.module.js.map +1 -1
- package/dist/foundations/chunk/entities/chunk.entity.d.ts +19 -4
- package/dist/foundations/chunk/entities/chunk.entity.d.ts.map +1 -1
- package/dist/foundations/chunk/entities/chunk.entity.js +48 -0
- package/dist/foundations/chunk/entities/chunk.entity.js.map +1 -1
- package/dist/foundations/chunk/index.d.ts +1 -2
- package/dist/foundations/chunk/index.d.ts.map +1 -1
- package/dist/foundations/chunk/index.js +3 -3
- package/dist/foundations/chunk/index.js.map +1 -1
- package/dist/foundations/chunk/repositories/chunk.repository.d.ts.map +1 -1
- package/dist/foundations/chunk/repositories/chunk.repository.js +8 -8
- package/dist/foundations/chunk/repositories/chunk.repository.js.map +1 -1
- package/dist/foundations/chunk/services/chunk.service.d.ts.map +1 -1
- package/dist/foundations/chunk/services/chunk.service.js +2 -2
- package/dist/foundations/chunk/services/chunk.service.js.map +1 -1
- package/package.json +1 -1
- package/dist/agents/chatbot/chatbot.module.d.ts +0 -3
- package/dist/agents/chatbot/chatbot.module.d.ts.map +0 -1
- package/dist/agents/chatbot/chatbot.module.js.map +0 -1
- package/dist/agents/chatbot/interfaces/chatbot.response.interface.d.ts +0 -25
- package/dist/agents/chatbot/interfaces/chatbot.response.interface.d.ts.map +0 -1
- package/dist/agents/chatbot/interfaces/chatbot.response.interface.js.map +0 -1
- package/dist/agents/chatbot/interfaces/graph.catalog.interface.d.ts.map +0 -1
- package/dist/agents/chatbot/interfaces/graph.catalog.interface.js.map +0 -1
- package/dist/agents/chatbot/prompts/chatbot.system.prompt.d.ts +0 -3
- package/dist/agents/chatbot/prompts/chatbot.system.prompt.d.ts.map +0 -1
- package/dist/agents/chatbot/prompts/chatbot.system.prompt.js +0 -60
- package/dist/agents/chatbot/prompts/chatbot.system.prompt.js.map +0 -1
- package/dist/agents/chatbot/repositories/user-modules.repository.d.ts.map +0 -1
- package/dist/agents/chatbot/repositories/user-modules.repository.js.map +0 -1
- package/dist/agents/chatbot/services/chatbot.index.manager.d.ts.map +0 -1
- package/dist/agents/chatbot/services/chatbot.index.manager.js.map +0 -1
- package/dist/agents/chatbot/services/chatbot.search.service.d.ts +0 -46
- package/dist/agents/chatbot/services/chatbot.search.service.d.ts.map +0 -1
- package/dist/agents/chatbot/services/chatbot.search.service.js +0 -148
- package/dist/agents/chatbot/services/chatbot.search.service.js.map +0 -1
- package/dist/agents/chatbot/services/chatbot.service.d.ts +0 -36
- package/dist/agents/chatbot/services/chatbot.service.d.ts.map +0 -1
- package/dist/agents/chatbot/services/chatbot.service.js +0 -220
- package/dist/agents/chatbot/services/chatbot.service.js.map +0 -1
- package/dist/agents/chatbot/services/descriptor.source.d.ts.map +0 -1
- package/dist/agents/chatbot/services/descriptor.source.js.map +0 -1
- package/dist/agents/chatbot/services/field-formatting.d.ts.map +0 -1
- package/dist/agents/chatbot/services/field-formatting.js.map +0 -1
- package/dist/agents/chatbot/services/graph.catalog.service.d.ts.map +0 -1
- package/dist/agents/chatbot/services/graph.catalog.service.js.map +0 -1
- package/dist/agents/chatbot/services/humanize-tool.d.ts.map +0 -1
- package/dist/agents/chatbot/services/humanize-tool.js.map +0 -1
- package/dist/agents/chatbot/tools/describe-entity.tool.d.ts.map +0 -1
- package/dist/agents/chatbot/tools/describe-entity.tool.js.map +0 -1
- package/dist/agents/chatbot/tools/read-entity.tool.d.ts.map +0 -1
- package/dist/agents/chatbot/tools/read-entity.tool.js.map +0 -1
- package/dist/agents/chatbot/tools/resolve-entity.tool.d.ts.map +0 -1
- package/dist/agents/chatbot/tools/resolve-entity.tool.js.map +0 -1
- package/dist/agents/chatbot/tools/search-entities.tool.d.ts.map +0 -1
- package/dist/agents/chatbot/tools/search-entities.tool.js.map +0 -1
- package/dist/agents/chatbot/tools/tool.factory.d.ts.map +0 -1
- package/dist/agents/chatbot/tools/tool.factory.js.map +0 -1
- package/dist/agents/chatbot/tools/traverse.tool.d.ts.map +0 -1
- package/dist/agents/chatbot/tools/traverse.tool.js.map +0 -1
- package/dist/foundations/chunk/entities/chunk.map.d.ts +0 -8
- package/dist/foundations/chunk/entities/chunk.map.d.ts.map +0 -1
- package/dist/foundations/chunk/entities/chunk.map.js +0 -31
- package/dist/foundations/chunk/entities/chunk.map.js.map +0 -1
- package/dist/foundations/chunk/entities/chunk.model.d.ts +0 -4
- package/dist/foundations/chunk/entities/chunk.model.d.ts.map +0 -1
- package/dist/foundations/chunk/entities/chunk.model.js +0 -13
- package/dist/foundations/chunk/entities/chunk.model.js.map +0 -1
- package/dist/foundations/chunk/serialisers/chunk.serialiser.d.ts +0 -14
- package/dist/foundations/chunk/serialisers/chunk.serialiser.d.ts.map +0 -1
- package/dist/foundations/chunk/serialisers/chunk.serialiser.js +0 -54
- package/dist/foundations/chunk/serialisers/chunk.serialiser.js.map +0 -1
- /package/dist/agents/{chatbot → graph}/interfaces/graph.catalog.interface.js +0 -0
- /package/dist/agents/{chatbot → graph}/repositories/user-modules.repository.d.ts +0 -0
- /package/dist/agents/{chatbot → graph}/repositories/user-modules.repository.js +0 -0
- /package/dist/agents/{chatbot → graph}/services/field-formatting.d.ts +0 -0
- /package/dist/agents/{chatbot → graph}/services/field-formatting.js +0 -0
- /package/dist/agents/{chatbot → graph}/services/humanize-tool.d.ts +0 -0
- /package/dist/agents/{chatbot → graph}/services/humanize-tool.js +0 -0
- /package/dist/agents/{chatbot → graph}/tools/describe-entity.tool.d.ts +0 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { EmbedderService } from "../../../core/llm/services/embedder.service";
|
|
2
|
+
import { Neo4jService } from "../../../core/neo4j/services/neo4j.service";
|
|
3
|
+
import { CatalogEntity } from "../interfaces/graph.catalog.interface";
|
|
4
|
+
import { GraphIndexManager } from "./graph.index.manager";
|
|
5
|
+
import { GraphCatalogService } from "./graph.catalog.service";
|
|
6
|
+
export declare const GRAPH_EXACT_MAX_RESULTS = 10;
|
|
7
|
+
export declare const GRAPH_FUZZY_MAX_RESULTS = 10;
|
|
8
|
+
export declare const GRAPH_SEMANTIC_MAX_RESULTS = 5;
|
|
9
|
+
export declare const GRAPH_RESOLVE_MAX_RESULTS = 10;
|
|
10
|
+
export declare const GRAPH_SEMANTIC_MIN_SCORE = 0.6;
|
|
11
|
+
export type MatchMode = "exact" | "fuzzy" | "semantic" | "none";
|
|
12
|
+
export interface RunSearchParams {
|
|
13
|
+
entity: CatalogEntity;
|
|
14
|
+
text: string;
|
|
15
|
+
companyId: string;
|
|
16
|
+
limit: number;
|
|
17
|
+
}
|
|
18
|
+
export interface RankedCandidate {
|
|
19
|
+
type: string;
|
|
20
|
+
id: string;
|
|
21
|
+
summary: string;
|
|
22
|
+
score: number;
|
|
23
|
+
}
|
|
24
|
+
export interface ResolveEntityParams {
|
|
25
|
+
text: string;
|
|
26
|
+
companyId: string;
|
|
27
|
+
userModuleIds: string[];
|
|
28
|
+
}
|
|
29
|
+
export interface ResolveEntityResult {
|
|
30
|
+
matchMode: MatchMode;
|
|
31
|
+
items: RankedCandidate[];
|
|
32
|
+
/**
|
|
33
|
+
* When the merged candidate list satisfies a deterministic disambiguation
|
|
34
|
+
* rule (literal-summary match, or score-margin dominance), surface a short
|
|
35
|
+
* actionable hint here. The graph node prompt instructs the LLM to follow
|
|
36
|
+
* this when present, since LLMs apply rules in the tool result more
|
|
37
|
+
* reliably than rules they have to re-derive from the system prompt.
|
|
38
|
+
*/
|
|
39
|
+
recommendation?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Decide whether the merged candidate list satisfies a deterministic
|
|
43
|
+
* disambiguation rule worth surfacing to the LLM. Returns the recommendation
|
|
44
|
+
* text or `undefined` when the candidates are genuinely ambiguous.
|
|
45
|
+
*
|
|
46
|
+
* Two rules, in priority order:
|
|
47
|
+
* 1. Literal-summary match: items[0].summary equals the user's literal
|
|
48
|
+
* phrase (case-insensitive). Holds even with a smaller margin because
|
|
49
|
+
* the name match is unambiguous on its own.
|
|
50
|
+
* 2. Score-margin dominance: items[0] beats items[1] by ≥ 0.15 on
|
|
51
|
+
* exact/fuzzy tiers, ≥ 0.08 on semantic.
|
|
52
|
+
*/
|
|
53
|
+
export declare function buildResolveRecommendation(items: RankedCandidate[], userText: string, matchMode: MatchMode): string | undefined;
|
|
54
|
+
export declare class GraphSearchService {
|
|
55
|
+
private readonly neo4j;
|
|
56
|
+
private readonly embedder;
|
|
57
|
+
private readonly indexNames;
|
|
58
|
+
private readonly catalog;
|
|
59
|
+
private readonly logger;
|
|
60
|
+
private existingIndexesPromise;
|
|
61
|
+
constructor(neo4j: Neo4jService, embedder: EmbedderService, indexNames: GraphIndexManager, catalog: GraphCatalogService);
|
|
62
|
+
private getExistingIndexes;
|
|
63
|
+
resolveEntity(params: ResolveEntityParams): Promise<ResolveEntityResult>;
|
|
64
|
+
private runTierForEntitySafe;
|
|
65
|
+
private projectSummary;
|
|
66
|
+
private tierFulltext;
|
|
67
|
+
private tierSemantic;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=graph.search.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.search.service.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/services/graph.search.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAK5C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAEhE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,eAAe,EAAE,EACxB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,SAAS,GACnB,MAAM,GAAG,SAAS,CAepB;AASD,qBACa,kBAAkB;IAY3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAd1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAQ9D,OAAO,CAAC,sBAAsB,CAAqC;gBAGhD,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,mBAAmB;IAG/C,OAAO,CAAC,kBAAkB;IAmBpB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;YA2BhE,oBAAoB;IAqDlC,OAAO,CAAC,cAAc;YAiBR,YAAY;YAiCZ,YAAY;CAoC3B"}
|
|
@@ -0,0 +1,230 @@
|
|
|
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 GraphSearchService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.GraphSearchService = exports.GRAPH_SEMANTIC_MIN_SCORE = exports.GRAPH_RESOLVE_MAX_RESULTS = exports.GRAPH_SEMANTIC_MAX_RESULTS = exports.GRAPH_FUZZY_MAX_RESULTS = exports.GRAPH_EXACT_MAX_RESULTS = void 0;
|
|
14
|
+
exports.buildResolveRecommendation = buildResolveRecommendation;
|
|
15
|
+
const common_1 = require("@nestjs/common");
|
|
16
|
+
const embedder_service_1 = require("../../../core/llm/services/embedder.service");
|
|
17
|
+
const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
|
|
18
|
+
const graph_index_manager_1 = require("./graph.index.manager");
|
|
19
|
+
const graph_catalog_service_1 = require("./graph.catalog.service");
|
|
20
|
+
exports.GRAPH_EXACT_MAX_RESULTS = 10;
|
|
21
|
+
exports.GRAPH_FUZZY_MAX_RESULTS = 10;
|
|
22
|
+
exports.GRAPH_SEMANTIC_MAX_RESULTS = 5;
|
|
23
|
+
exports.GRAPH_RESOLVE_MAX_RESULTS = 10;
|
|
24
|
+
exports.GRAPH_SEMANTIC_MIN_SCORE = 0.6;
|
|
25
|
+
const GRAPH_VECTOR_OVERFETCH = 50;
|
|
26
|
+
const LUCENE_RESERVED_RE = /[+\-&|!(){}[\]^"~*?:\\/]/g;
|
|
27
|
+
/**
|
|
28
|
+
* Decide whether the merged candidate list satisfies a deterministic
|
|
29
|
+
* disambiguation rule worth surfacing to the LLM. Returns the recommendation
|
|
30
|
+
* text or `undefined` when the candidates are genuinely ambiguous.
|
|
31
|
+
*
|
|
32
|
+
* Two rules, in priority order:
|
|
33
|
+
* 1. Literal-summary match: items[0].summary equals the user's literal
|
|
34
|
+
* phrase (case-insensitive). Holds even with a smaller margin because
|
|
35
|
+
* the name match is unambiguous on its own.
|
|
36
|
+
* 2. Score-margin dominance: items[0] beats items[1] by ≥ 0.15 on
|
|
37
|
+
* exact/fuzzy tiers, ≥ 0.08 on semantic.
|
|
38
|
+
*/
|
|
39
|
+
function buildResolveRecommendation(items, userText, matchMode) {
|
|
40
|
+
if (items.length === 0)
|
|
41
|
+
return undefined;
|
|
42
|
+
const top = items[0];
|
|
43
|
+
const next = items[1];
|
|
44
|
+
const margin = next ? top.score - next.score : Number.POSITIVE_INFINITY;
|
|
45
|
+
const literalMatch = top.summary.trim().toLowerCase() === userText.trim().toLowerCase();
|
|
46
|
+
const dominantMargin = margin >= (matchMode === "semantic" ? 0.08 : 0.15);
|
|
47
|
+
if (literalMatch && (items.length === 1 || dominantMargin)) {
|
|
48
|
+
return `Use items[0] (id=${top.id}, type=${top.type}): its summary equals the user's literal phrase and dominates by score margin. Do not ask the user to disambiguate.`;
|
|
49
|
+
}
|
|
50
|
+
if (dominantMargin) {
|
|
51
|
+
return `Use items[0] (id=${top.id}, type=${top.type}): it dominates the next candidate by the documented score margin (${margin.toFixed(2)}).`;
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
let GraphSearchService = GraphSearchService_1 = class GraphSearchService {
|
|
56
|
+
constructor(neo4j, embedder, indexNames, catalog) {
|
|
57
|
+
this.neo4j = neo4j;
|
|
58
|
+
this.embedder = embedder;
|
|
59
|
+
this.indexNames = indexNames;
|
|
60
|
+
this.catalog = catalog;
|
|
61
|
+
this.logger = new common_1.Logger(GraphSearchService_1.name);
|
|
62
|
+
// Cached at first use, holds the names of fulltext + vector indexes that
|
|
63
|
+
// actually exist in Neo4j. Pre-checking this set lets us skip the
|
|
64
|
+
// `db.index.fulltext.queryNodes` call entirely for indexes the bootstrap
|
|
65
|
+
// didn't create (silencing the ERROR + WARN spam at source). Stored as a
|
|
66
|
+
// promise to deduplicate concurrent first-time lookups (resolveEntity fans
|
|
67
|
+
// out tier queries via Promise.all).
|
|
68
|
+
this.existingIndexesPromise = null;
|
|
69
|
+
}
|
|
70
|
+
getExistingIndexes() {
|
|
71
|
+
if (this.existingIndexesPromise)
|
|
72
|
+
return this.existingIndexesPromise;
|
|
73
|
+
this.existingIndexesPromise = (async () => {
|
|
74
|
+
try {
|
|
75
|
+
const result = await this.neo4j.read(`SHOW INDEXES YIELD name, type WHERE type IN ["FULLTEXT", "VECTOR"] RETURN name`);
|
|
76
|
+
return new Set((result.records ?? []).map((r) => r.get("name")));
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
// If SHOW INDEXES itself fails (older Neo4j, permissions, mocked tests
|
|
80
|
+
// that don't expect it), return an empty set. Downstream gating uses
|
|
81
|
+
// `size > 0 && !has(name)` so an empty set means "do not gate" — the
|
|
82
|
+
// tier query proceeds and any error is handled by runTierForEntitySafe.
|
|
83
|
+
return new Set();
|
|
84
|
+
}
|
|
85
|
+
})();
|
|
86
|
+
return this.existingIndexesPromise;
|
|
87
|
+
}
|
|
88
|
+
async resolveEntity(params) {
|
|
89
|
+
const entities = this.catalog.getAllChatEnabledEntities().filter((e) => params.userModuleIds.includes(e.moduleId));
|
|
90
|
+
if (!entities.length) {
|
|
91
|
+
return { matchMode: "none", items: [] };
|
|
92
|
+
}
|
|
93
|
+
const tiers = [
|
|
94
|
+
["substring", "exact"],
|
|
95
|
+
["fuzzy", "fuzzy"],
|
|
96
|
+
["semantic", "semantic"],
|
|
97
|
+
];
|
|
98
|
+
for (const [tier, label] of tiers) {
|
|
99
|
+
const buckets = await Promise.all(entities.map((e) => this.runTierForEntitySafe(e, params, tier)));
|
|
100
|
+
const merged = buckets.flat();
|
|
101
|
+
if (merged.length) {
|
|
102
|
+
merged.sort((a, b) => b.score - a.score);
|
|
103
|
+
const items = merged.slice(0, exports.GRAPH_RESOLVE_MAX_RESULTS);
|
|
104
|
+
const recommendation = buildResolveRecommendation(items, params.text, label);
|
|
105
|
+
return recommendation ? { matchMode: label, items, recommendation } : { matchMode: label, items };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return { matchMode: "none", items: [] };
|
|
109
|
+
}
|
|
110
|
+
async runTierForEntitySafe(entity, params, tier) {
|
|
111
|
+
try {
|
|
112
|
+
const runParams = {
|
|
113
|
+
entity,
|
|
114
|
+
text: params.text,
|
|
115
|
+
companyId: params.companyId,
|
|
116
|
+
limit: tier === "semantic"
|
|
117
|
+
? exports.GRAPH_SEMANTIC_MAX_RESULTS
|
|
118
|
+
: tier === "fuzzy"
|
|
119
|
+
? exports.GRAPH_FUZZY_MAX_RESULTS
|
|
120
|
+
: exports.GRAPH_EXACT_MAX_RESULTS,
|
|
121
|
+
};
|
|
122
|
+
const inner = tier === "semantic" ? await this.tierSemantic(runParams) : await this.tierFulltext(runParams, tier);
|
|
123
|
+
// Per-tier diagnostic so a future dump can distinguish "fulltext index
|
|
124
|
+
// missing" from "lucene parse failure" from "genuine zero hits". Today
|
|
125
|
+
// these were silently merged into a single matchMode=none response.
|
|
126
|
+
const indexName = tier === "semantic"
|
|
127
|
+
? this.indexNames.vectorIndexName(entity.labelName)
|
|
128
|
+
: this.indexNames.fulltextIndexName(entity.labelName);
|
|
129
|
+
const existing = await this.getExistingIndexes();
|
|
130
|
+
const indexExists = existing.size === 0 || existing.has(indexName);
|
|
131
|
+
this.logger.debug(`resolve_entity tier=${tier} type=${entity.type} indexExists=${indexExists} items=${inner.items.length}`);
|
|
132
|
+
return inner.items.map((i) => ({
|
|
133
|
+
type: entity.type,
|
|
134
|
+
id: i.id,
|
|
135
|
+
summary: this.projectSummary(entity, i.properties, i.id),
|
|
136
|
+
score: i.score,
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
141
|
+
// Missing fulltext / vector index for an entity type the manager bootstrap
|
|
142
|
+
// didn't create one for: silently skip this tier for this type. The whole
|
|
143
|
+
// Neo4j stack trace was being printed at ERROR level for every resolve_entity
|
|
144
|
+
// call — pure noise. Real failures (other Neo4j errors, network, etc.) still
|
|
145
|
+
// log at WARN as before.
|
|
146
|
+
if (/There is no such fulltext schema index|There is no such vector schema index/i.test(message)) {
|
|
147
|
+
return [];
|
|
148
|
+
}
|
|
149
|
+
this.logger.warn(`resolveEntity: tier=${tier} type=${entity.type} threw: ${message}`);
|
|
150
|
+
return [];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
projectSummary(entity, properties, id) {
|
|
154
|
+
if (entity.summary) {
|
|
155
|
+
try {
|
|
156
|
+
return entity.summary(properties);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
/* fall through */
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const name = properties.name;
|
|
163
|
+
if (typeof name === "string" && name.length)
|
|
164
|
+
return name;
|
|
165
|
+
return id;
|
|
166
|
+
}
|
|
167
|
+
async tierFulltext(params, mode) {
|
|
168
|
+
const indexName = this.indexNames.fulltextIndexName(params.entity.labelName);
|
|
169
|
+
const existing = await this.getExistingIndexes();
|
|
170
|
+
if (existing.size > 0 && !existing.has(indexName)) {
|
|
171
|
+
return { matchMode: mode === "substring" ? "exact" : "fuzzy", items: [] };
|
|
172
|
+
}
|
|
173
|
+
const escaped = params.text.replace(LUCENE_RESERVED_RE, "\\$&").toLowerCase();
|
|
174
|
+
const term = mode === "substring" ? `*${escaped}*` : `${escaped}~`;
|
|
175
|
+
const max = mode === "substring" ? exports.GRAPH_EXACT_MAX_RESULTS : exports.GRAPH_FUZZY_MAX_RESULTS;
|
|
176
|
+
const result = await this.neo4j.read(`
|
|
177
|
+
CALL db.index.fulltext.queryNodes($indexName, $term)
|
|
178
|
+
YIELD node, score
|
|
179
|
+
WHERE (node)-[:BELONGS_TO]->(:Company { id: $companyId })
|
|
180
|
+
RETURN node.id AS id, properties(node) AS properties, score
|
|
181
|
+
ORDER BY score DESC
|
|
182
|
+
LIMIT toInteger($limit)
|
|
183
|
+
`, { indexName, term, companyId: params.companyId, limit: Math.min(params.limit, max) });
|
|
184
|
+
const items = result.records.map((r) => ({
|
|
185
|
+
id: r.get("id"),
|
|
186
|
+
score: r.get("score"),
|
|
187
|
+
properties: r.get("properties") ?? {},
|
|
188
|
+
}));
|
|
189
|
+
return { matchMode: mode === "substring" ? "exact" : "fuzzy", items };
|
|
190
|
+
}
|
|
191
|
+
async tierSemantic(params) {
|
|
192
|
+
const indexName = this.indexNames.vectorIndexName(params.entity.labelName);
|
|
193
|
+
const existing = await this.getExistingIndexes();
|
|
194
|
+
if (existing.size > 0 && !existing.has(indexName)) {
|
|
195
|
+
return { matchMode: "semantic", items: [] };
|
|
196
|
+
}
|
|
197
|
+
const queryEmbedding = await this.embedder.vectoriseText({ text: params.text });
|
|
198
|
+
const result = await this.neo4j.read(`
|
|
199
|
+
CALL db.index.vector.queryNodes($indexName, toInteger($overFetch), $queryEmbedding)
|
|
200
|
+
YIELD node, score
|
|
201
|
+
WHERE (node)-[:BELONGS_TO]->(:Company { id: $companyId })
|
|
202
|
+
AND score >= $minScore
|
|
203
|
+
RETURN node.id AS id, properties(node) AS properties, score
|
|
204
|
+
ORDER BY score DESC
|
|
205
|
+
LIMIT toInteger($limit)
|
|
206
|
+
`, {
|
|
207
|
+
indexName,
|
|
208
|
+
overFetch: GRAPH_VECTOR_OVERFETCH,
|
|
209
|
+
queryEmbedding,
|
|
210
|
+
companyId: params.companyId,
|
|
211
|
+
minScore: exports.GRAPH_SEMANTIC_MIN_SCORE,
|
|
212
|
+
limit: Math.min(params.limit, exports.GRAPH_SEMANTIC_MAX_RESULTS),
|
|
213
|
+
});
|
|
214
|
+
const items = result.records.map((r) => ({
|
|
215
|
+
id: r.get("id"),
|
|
216
|
+
score: r.get("score"),
|
|
217
|
+
properties: r.get("properties") ?? {},
|
|
218
|
+
}));
|
|
219
|
+
return { matchMode: items.length ? "semantic" : "none", items };
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
exports.GraphSearchService = GraphSearchService;
|
|
223
|
+
exports.GraphSearchService = GraphSearchService = GraphSearchService_1 = __decorate([
|
|
224
|
+
(0, common_1.Injectable)(),
|
|
225
|
+
__metadata("design:paramtypes", [neo4j_service_1.Neo4jService,
|
|
226
|
+
embedder_service_1.EmbedderService,
|
|
227
|
+
graph_index_manager_1.GraphIndexManager,
|
|
228
|
+
graph_catalog_service_1.GraphCatalogService])
|
|
229
|
+
], GraphSearchService);
|
|
230
|
+
//# sourceMappingURL=graph.search.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.search.service.js","sourceRoot":"","sources":["../../../../src/agents/graph/services/graph.search.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"humanize-tool.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/services/humanize-tool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAuBjF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"humanize-tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/services/humanize-tool.ts"],"names":[],"mappings":";;AAOA,oCAuBC;AA9BD;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,IAAY,EAAE,KAA8B;IACvE,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,OAAO,cAAc,IAAI,GAAG,CAAC;QAC/B,CAAC;QACD,KAAK,iBAAiB;YACpB,OAAO,cAAc,IAAI,SAAS,CAAC;QACrC,KAAK,iBAAiB;YACpB,OAAO,aAAa,IAAI,EAAE,CAAC;QAC7B,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO,WAAW,IAAI,MAAM,EAAE,EAAE,CAAC;QACnC,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,MAAM,GAAG,GAAG,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,cAAc,IAAI,MAAM,GAAG,EAAE,CAAC;QACvC,CAAC;QACD;YACE,OAAO,WAAW,IAAI,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { CatalogEntity } from "../interfaces/graph.catalog.interface";
|
|
2
|
+
import { GraphCatalogService } from "./graph.catalog.service";
|
|
3
|
+
import { EntityServiceRegistry } from "../../../common/registries/entity.service.registry";
|
|
4
|
+
import { UserContext } from "../tools/tool.factory";
|
|
5
|
+
/** Hard cap per cardinality-many materialised relationship. */
|
|
6
|
+
export declare const MATERIALISE_LIMIT = 50;
|
|
7
|
+
export interface BridgeRecordIn {
|
|
8
|
+
id: string;
|
|
9
|
+
/** Already type-converted target-node fields, as returned by buildToolFieldsOutput. */
|
|
10
|
+
fields: Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
export interface BridgeRecordOut {
|
|
13
|
+
id: string;
|
|
14
|
+
type: string;
|
|
15
|
+
summary: string;
|
|
16
|
+
fields: Record<string, unknown>;
|
|
17
|
+
__materialised: string[];
|
|
18
|
+
__truncated?: Record<string, {
|
|
19
|
+
returned: number;
|
|
20
|
+
hasMore: true;
|
|
21
|
+
}>;
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
export interface MaterialiseBridgeDeps {
|
|
25
|
+
catalog: GraphCatalogService;
|
|
26
|
+
registry: EntityServiceRegistry;
|
|
27
|
+
}
|
|
28
|
+
export declare function materialiseBridge(params: {
|
|
29
|
+
bridge: CatalogEntity;
|
|
30
|
+
record: BridgeRecordIn;
|
|
31
|
+
ctx: UserContext;
|
|
32
|
+
deps: MaterialiseBridgeDeps;
|
|
33
|
+
/** Counter used by the responder to populate trace.materialisedBridges. Optional. */
|
|
34
|
+
onMaterialised?: (relName: string, count: number) => void;
|
|
35
|
+
}): Promise<BridgeRecordOut>;
|
|
36
|
+
//# sourceMappingURL=materialise-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialise-bridge.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/services/materialise-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKpD,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,uFAAuF;IACvF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAElE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,QAAQ,EAAE,qBAAqB,CAAC;CACjC;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,qFAAqF;IACrF,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,GAAG,OAAO,CAAC,eAAe,CAAC,CAsE3B"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MATERIALISE_LIMIT = void 0;
|
|
4
|
+
exports.materialiseBridge = materialiseBridge;
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const field_formatting_1 = require("./field-formatting");
|
|
7
|
+
const logger = new common_1.Logger("materialiseBridge");
|
|
8
|
+
/** Hard cap per cardinality-many materialised relationship. */
|
|
9
|
+
exports.MATERIALISE_LIMIT = 50;
|
|
10
|
+
async function materialiseBridge(params) {
|
|
11
|
+
const { bridge, record, ctx, deps } = params;
|
|
12
|
+
if (!bridge.bridge) {
|
|
13
|
+
throw new Error(`materialiseBridge called on non-bridge entity "${bridge.type}".`);
|
|
14
|
+
}
|
|
15
|
+
const summary = bridge.summary ? bridge.summary({ id: record.id, ...record.fields }) : record.id;
|
|
16
|
+
const out = {
|
|
17
|
+
id: record.id,
|
|
18
|
+
type: bridge.type,
|
|
19
|
+
summary: String(summary),
|
|
20
|
+
fields: record.fields,
|
|
21
|
+
__materialised: [],
|
|
22
|
+
};
|
|
23
|
+
for (const relName of bridge.bridge.materialiseTo) {
|
|
24
|
+
const rel = bridge.relationships.find((r) => r.name === relName);
|
|
25
|
+
if (!rel) {
|
|
26
|
+
// Should be impossible — defineEntity / catalog buildCatalog enforce this — but
|
|
27
|
+
// be defensive at runtime so a stale catalog doesn't crash a tool call.
|
|
28
|
+
logger.warn(`materialiseBridge: relationship "${relName}" not found on ${bridge.type}; skipping.`);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
// Module-gated drop: target type the user can't access disappears from the response.
|
|
32
|
+
const target = deps.catalog.getEntityDetail(rel.targetType, ctx.userModuleIds);
|
|
33
|
+
if (!target) {
|
|
34
|
+
logger.debug(`materialiseBridge: target type ${rel.targetType} not accessible to user; dropping ${bridge.type}.${relName}`);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const targetSvc = deps.registry.get(target.type);
|
|
38
|
+
if (!targetSvc) {
|
|
39
|
+
logger.warn(`materialiseBridge: no service registered for ${target.type}; dropping ${bridge.type}.${relName}`);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const targetDirection = rel.cypherDirection === "out" ? "in" : "out";
|
|
43
|
+
const records = await targetSvc.findRelatedRecordsByEdge({
|
|
44
|
+
cypherLabel: rel.cypherLabel,
|
|
45
|
+
cypherDirection: targetDirection,
|
|
46
|
+
relatedLabel: bridge.labelName,
|
|
47
|
+
relatedId: record.id,
|
|
48
|
+
limit: exports.MATERIALISE_LIMIT + 1, // overfetch by one to detect truncation cheaply
|
|
49
|
+
});
|
|
50
|
+
const truncated = records.length > exports.MATERIALISE_LIMIT;
|
|
51
|
+
const visible = records.slice(0, exports.MATERIALISE_LIMIT);
|
|
52
|
+
const summariser = target.summary ?? ((d) => String(d.name ?? d.id));
|
|
53
|
+
const materialised = visible.map((r) => ({
|
|
54
|
+
id: r.id,
|
|
55
|
+
type: target.type,
|
|
56
|
+
summary: String(summariser(r)),
|
|
57
|
+
fields: (0, field_formatting_1.buildToolFieldsOutput)(target.fields, r),
|
|
58
|
+
}));
|
|
59
|
+
out[relName] = rel.cardinality === "one" ? (materialised[0] ?? null) : materialised;
|
|
60
|
+
out.__materialised.push(relName);
|
|
61
|
+
if (truncated) {
|
|
62
|
+
out.__truncated = out.__truncated ?? {};
|
|
63
|
+
out.__truncated[relName] = { returned: exports.MATERIALISE_LIMIT, hasMore: true };
|
|
64
|
+
}
|
|
65
|
+
params.onMaterialised?.(relName, materialised.length);
|
|
66
|
+
}
|
|
67
|
+
return out;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=materialise-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"materialise-bridge.js","sourceRoot":"","sources":["../../../../src/agents/graph/services/materialise-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-entity.tool.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/describe-entity.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE1E,QAAA,MAAM,WAAW;;iBAEf,CAAC;AAEH,qBACa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,WAAW;IAEjD,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,qBAAqB;IASpE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CA6BjH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-entity.tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/tools/describe-entity.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,iDAA8D;AAC9D,6BAAwB;AACxB,iDAA0E;AAE1E,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CAClE,CAAC,CAAC;AAGI,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YAA6B,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;IAAG,CAAC;IAErD,KAAK,CAAC,GAAgB,EAAE,QAA0B;QAChD,OAAO,IAAI,6BAAqB,CAAC;YAC/B,IAAI,EAAE,iBAAiB;YACvB,WAAW,EAAE,oEAAoE;YACjF,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAkC,EAAE,GAAgB,EAAE,QAA0B;QAC3F,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CACzB,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,EAClC,KAAK,IAAI,EAAE;YACT,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC3D,IAAI,OAAO,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YACrC,OAAO;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAChC,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpC,CAAC,CAAC;gBACH,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC9C,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,UAAU,EAAE,CAAC,CAAC,UAAU;oBACxB,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;iBAC3B,CAAC,CAAC;gBACH,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1F,CAAC;QACJ,CAAC,EACD,QAAQ,CACT,CAAC;IACJ,CAAC;CACF,CAAA;AAzCY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;qCAE2B,0BAAW;GADtC,kBAAkB,CAyC9B"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { DynamicStructuredTool } from "@langchain/core/tools";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { ToolFactory, ToolCallRecord, UserContext } from "./tool.factory";
|
|
4
|
+
import { GraphCatalogService } from "../services/graph.catalog.service";
|
|
5
|
+
import { EntityServiceRegistry } from "../../../common/registries/entity.service.registry";
|
|
4
6
|
declare const inputSchema: z.ZodObject<{
|
|
5
7
|
type: z.ZodString;
|
|
6
8
|
id: z.ZodString;
|
|
@@ -8,7 +10,9 @@ declare const inputSchema: z.ZodObject<{
|
|
|
8
10
|
}, z.core.$strip>;
|
|
9
11
|
export declare class ReadEntityTool {
|
|
10
12
|
private readonly factory;
|
|
11
|
-
|
|
13
|
+
private readonly catalog;
|
|
14
|
+
private readonly registry;
|
|
15
|
+
constructor(factory: ToolFactory, catalog: GraphCatalogService, registry: EntityServiceRegistry);
|
|
12
16
|
build(ctx: UserContext, recorder: ToolCallRecord[]): DynamicStructuredTool;
|
|
13
17
|
invoke(input: z.infer<typeof inputSchema>, ctx: UserContext, recorder: ToolCallRecord[]): Promise<unknown>;
|
|
14
18
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-entity.tool.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/read-entity.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAE3F,QAAA,MAAM,WAAW;;;;iBAIf,CAAC;AAEH,qBACa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAFR,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,qBAAqB;IAGlD,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,qBAAqB;IASpE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CA+FjH"}
|
|
@@ -15,14 +15,19 @@ const tools_1 = require("@langchain/core/tools");
|
|
|
15
15
|
const zod_1 = require("zod");
|
|
16
16
|
const tool_factory_1 = require("./tool.factory");
|
|
17
17
|
const field_formatting_1 = require("../services/field-formatting");
|
|
18
|
+
const materialise_bridge_1 = require("../services/materialise-bridge");
|
|
19
|
+
const graph_catalog_service_1 = require("../services/graph.catalog.service");
|
|
20
|
+
const entity_service_registry_1 = require("../../../common/registries/entity.service.registry");
|
|
18
21
|
const inputSchema = zod_1.z.object({
|
|
19
22
|
type: zod_1.z.string(),
|
|
20
23
|
id: zod_1.z.string(),
|
|
21
24
|
include: zod_1.z.array(zod_1.z.string()).optional().describe("Relationship names to pull one-hop related records."),
|
|
22
25
|
});
|
|
23
26
|
let ReadEntityTool = class ReadEntityTool {
|
|
24
|
-
constructor(factory) {
|
|
27
|
+
constructor(factory, catalog, registry) {
|
|
25
28
|
this.factory = factory;
|
|
29
|
+
this.catalog = catalog;
|
|
30
|
+
this.registry = registry;
|
|
26
31
|
}
|
|
27
32
|
build(ctx, recorder) {
|
|
28
33
|
return new tools_1.DynamicStructuredTool({
|
|
@@ -33,16 +38,18 @@ let ReadEntityTool = class ReadEntityTool {
|
|
|
33
38
|
});
|
|
34
39
|
}
|
|
35
40
|
async invoke(input, ctx, recorder) {
|
|
36
|
-
|
|
41
|
+
const localMaterialised = [];
|
|
42
|
+
const result = await this.factory.capture({ tool: "read_entity", input }, async () => {
|
|
37
43
|
const described = recorder.some((c) => c.tool === "describe_entity" && c.input.type === input.type);
|
|
44
|
+
const entity = this.factory.resolveEntity(input.type, ctx);
|
|
45
|
+
if ("error" in entity)
|
|
46
|
+
return entity;
|
|
38
47
|
if (!described) {
|
|
39
48
|
return {
|
|
40
|
-
error: `You must call describe_entity({ type: "${input.type}" }) before reading a ${input.type} record. The
|
|
49
|
+
error: `You must call describe_entity({ type: "${input.type}" }) before reading a ${input.type} record. The schema is included below — either call describe_entity({ type: "${input.type}" }) to record the contract and retry this read, or proceed using the listed fields and relationships. Never stop on this error.`,
|
|
50
|
+
schema: { fields: entity.fields, relationships: entity.relationships },
|
|
41
51
|
};
|
|
42
52
|
}
|
|
43
|
-
const entity = this.factory.resolveEntity(input.type, ctx);
|
|
44
|
-
if ("error" in entity)
|
|
45
|
-
return entity;
|
|
46
53
|
const validRels = new Set(entity.relationships.map((r) => r.name));
|
|
47
54
|
for (const name of input.include ?? []) {
|
|
48
55
|
if (!validRels.has(name)) {
|
|
@@ -85,18 +92,40 @@ let ReadEntityTool = class ReadEntityTool {
|
|
|
85
92
|
}));
|
|
86
93
|
}
|
|
87
94
|
}
|
|
95
|
+
const baseFields = (0, field_formatting_1.buildToolFieldsOutput)(entity.fields, record);
|
|
96
|
+
// Bridge fanout: if this entity is a bridge, replace the bare payload with
|
|
97
|
+
// the materialised one. The existing `include` block (if any) stacks on top
|
|
98
|
+
// as a sibling `related` map — it carries summary refs, while the bridge
|
|
99
|
+
// fanout fills full records at the top level. They do not collide.
|
|
100
|
+
if (entity.bridge) {
|
|
101
|
+
const materialised = await (0, materialise_bridge_1.materialiseBridge)({
|
|
102
|
+
bridge: entity,
|
|
103
|
+
record: { id: record.id, fields: baseFields },
|
|
104
|
+
ctx,
|
|
105
|
+
deps: { catalog: this.catalog, registry: this.registry },
|
|
106
|
+
onMaterialised: (relName, count) => localMaterialised.push({ relName, count }),
|
|
107
|
+
});
|
|
108
|
+
return input.include?.length ? { ...materialised, related } : materialised;
|
|
109
|
+
}
|
|
88
110
|
return {
|
|
89
111
|
id: record.id,
|
|
90
112
|
type: entity.type,
|
|
91
|
-
fields:
|
|
113
|
+
fields: baseFields,
|
|
92
114
|
...(input.include?.length ? { related } : {}),
|
|
93
115
|
};
|
|
94
116
|
}, recorder);
|
|
117
|
+
// Attach materialised summary to the recorder entry that capture() just pushed.
|
|
118
|
+
if (localMaterialised.length && recorder.length) {
|
|
119
|
+
recorder[recorder.length - 1].materialised = localMaterialised;
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
95
122
|
}
|
|
96
123
|
};
|
|
97
124
|
exports.ReadEntityTool = ReadEntityTool;
|
|
98
125
|
exports.ReadEntityTool = ReadEntityTool = __decorate([
|
|
99
126
|
(0, common_1.Injectable)(),
|
|
100
|
-
__metadata("design:paramtypes", [tool_factory_1.ToolFactory
|
|
127
|
+
__metadata("design:paramtypes", [tool_factory_1.ToolFactory,
|
|
128
|
+
graph_catalog_service_1.GraphCatalogService,
|
|
129
|
+
entity_service_registry_1.EntityServiceRegistry])
|
|
101
130
|
], ReadEntityTool);
|
|
102
131
|
//# sourceMappingURL=read-entity.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-entity.tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/tools/read-entity.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,iDAA8D;AAC9D,6BAAwB;AACxB,iDAA0E;AAC1E,mEAAqE;AACrE,uEAAmE;AACnE,6EAAwE;AACxE,gGAA2F;AAE3F,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE;IAChB,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE;IACd,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;CACxG,CAAC,CAAC;AAGI,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YACmB,OAAoB,EACpB,OAA4B,EAC5B,QAA+B;QAF/B,YAAO,GAAP,OAAO,CAAa;QACpB,YAAO,GAAP,OAAO,CAAqB;QAC5B,aAAQ,GAAR,QAAQ,CAAuB;IAC/C,CAAC;IAEJ,KAAK,CAAC,GAAgB,EAAE,QAA0B;QAChD,OAAO,IAAI,6BAAqB,CAAC;YAC/B,IAAI,EAAE,aAAa;YACnB,WAAW,EAAE,8FAA8F;YAC3G,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAkC,EAAE,GAAgB,EAAE,QAA0B;QAC3F,MAAM,iBAAiB,GAA8C,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACvC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,EAC9B,KAAK,IAAI,EAAE;YACT,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAC7B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,IAAK,CAAC,CAAC,KAA2B,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAC1F,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC3D,IAAI,OAAO,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YACrC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO;oBACL,KAAK,EAAE,0CAA0C,KAAK,CAAC,IAAI,yBAAyB,KAAK,CAAC,IAAI,gFAAgF,KAAK,CAAC,IAAI,kIAAkI;oBAC1T,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE;iBACvE,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACnE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;gBACvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,OAAO,EAAE,KAAK,EAAE,iBAAiB,IAAI,yBAAyB,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;gBACjF,CAAC;YACH,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG;gBAAE,OAAO,EAAE,KAAK,EAAE,8BAA8B,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YAE1E,MAAM,MAAM,GAAQ,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;YAExE,MAAM,OAAO,GAAwB,EAAE,CAAC;YACxC,IAAI,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;oBACjC,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAE,CAAC;oBAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,GAAG,CAAC,UAAU,iBAAiB,EAAE,CAAC;wBAC1E,SAAS;oBACX,CAAC;oBACD,iEAAiE;oBACjE,uEAAuE;oBACvE,MAAM,eAAe,GAAiB,GAAG,CAAC,eAAe,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;oBACnF,MAAM,OAAO,GAAU,MAAM,SAAS,CAAC,wBAAwB,CAAC;wBAC9D,WAAW,EAAE,GAAG,CAAC,WAAW;wBAC5B,eAAe,EAAE,eAAe;wBAChC,YAAY,EAAE,MAAM,CAAC,SAAS;wBAC9B,SAAS,EAAE,KAAK,CAAC,EAAE;wBACnB,KAAK,EAAE,EAAE;qBACV,CAAC,CAAC;oBACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;oBACrE,MAAM,UAAU,GACd,OAAO,IAAI,YAAY;wBACrB,CAAC,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC1B,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACrE,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;wBAClC,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,IAAI,EAAE,GAAG,CAAC,UAAU;wBACpB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;qBACvB,CAAC,CAAC,CAAC;gBACN,CAAC;YACH,CAAC;YAED,MAAM,UAAU,GAAG,IAAA,wCAAqB,EAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAEhE,2EAA2E;YAC3E,4EAA4E;YAC5E,yEAAyE;YACzE,mEAAmE;YACnE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,MAAM,YAAY,GAAG,MAAM,IAAA,sCAAiB,EAAC;oBAC3C,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE;oBAC7C,GAAG;oBACH,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;oBACxD,cAAc,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;iBAC/E,CAAC,CAAC;gBACH,OAAO,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;YAC7E,CAAC;YAED,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,MAAM,EAAE,UAAU;gBAClB,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9C,CAAC;QACJ,CAAC,EACD,QAAQ,CACT,CAAC;QAEF,gFAAgF;QAChF,IAAI,iBAAiB,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAChD,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,iBAAiB,CAAC;QACjE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AA/GY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;qCAGiB,0BAAW;QACX,2CAAmB;QAClB,+CAAqB;GAJvC,cAAc,CA+G1B"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { DynamicStructuredTool } from "@langchain/core/tools";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { ToolFactory, ToolCallRecord, UserContext } from "./tool.factory";
|
|
4
|
-
import {
|
|
4
|
+
import { GraphSearchService } from "../services/graph.search.service";
|
|
5
5
|
declare const inputSchema: z.ZodObject<{
|
|
6
6
|
text: z.ZodString;
|
|
7
7
|
}, z.core.$strip>;
|
|
8
8
|
export declare class ResolveEntityTool {
|
|
9
9
|
private readonly factory;
|
|
10
10
|
private readonly search;
|
|
11
|
-
constructor(factory: ToolFactory, search:
|
|
11
|
+
constructor(factory: ToolFactory, search: GraphSearchService);
|
|
12
12
|
build(ctx: UserContext, recorder: ToolCallRecord[]): DynamicStructuredTool;
|
|
13
13
|
invoke(input: z.infer<typeof inputSchema>, ctx: UserContext, recorder: ToolCallRecord[]): Promise<unknown>;
|
|
14
14
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-entity.tool.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/resolve-entity.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,QAAA,MAAM,WAAW;;iBAEf,CAAC;AAEH,qBACa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,kBAAkB;IAG7C,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,qBAAqB;IAUpE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAYjH"}
|