@eggjs/tegg-langchain 3.64.2
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/LICENSE +21 -0
- package/README.md +20 -0
- package/app.d.ts +8 -0
- package/app.js +55 -0
- package/index.d.ts +1 -0
- package/index.js +18 -0
- package/lib/ChatModelHelper.d.ts +8 -0
- package/lib/ChatModelHelper.js +16 -0
- package/lib/ChatOpenAI.d.ts +7 -0
- package/lib/ChatOpenAI.js +63 -0
- package/lib/boundModel/BoundModelObjectHook.d.ts +5 -0
- package/lib/boundModel/BoundModelObjectHook.js +112 -0
- package/lib/config/QualifierUtil.d.ts +8 -0
- package/lib/config/QualifierUtil.js +17 -0
- package/lib/graph/CompiledStateGraphObject.d.ts +25 -0
- package/lib/graph/CompiledStateGraphObject.js +114 -0
- package/lib/graph/CompiledStateGraphProto.d.ts +21 -0
- package/lib/graph/CompiledStateGraphProto.js +42 -0
- package/lib/graph/GraphBuildHook.d.ts +2 -0
- package/lib/graph/GraphBuildHook.js +24 -0
- package/lib/graph/GraphLoadUnitHook.d.ts +12 -0
- package/lib/graph/GraphLoadUnitHook.js +48 -0
- package/lib/graph/GraphObjectHook.d.ts +5 -0
- package/lib/graph/GraphObjectHook.js +142 -0
- package/lib/graph/GraphPrototypeHook.d.ts +20 -0
- package/lib/graph/GraphPrototypeHook.js +253 -0
- package/lib/tracing/LangGraphTracer.d.ts +7 -0
- package/lib/tracing/LangGraphTracer.js +38 -0
- package/lib/util.d.ts +4 -0
- package/lib/util.js +27 -0
- package/package.json +101 -0
- package/typings/index.d.ts +132 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EggProtoImplClass, LifecycleHook } from '@eggjs/tegg';
|
|
2
|
+
import { EggPrototypeFactory, LoadUnit, LoadUnitLifecycleContext } from '@eggjs/tegg-metadata';
|
|
3
|
+
import { CompiledStateGraphProto } from './CompiledStateGraphProto';
|
|
4
|
+
import { IGraphMetadata } from '@eggjs/tegg-langchain-decorator';
|
|
5
|
+
export declare class GraphLoadUnitHook implements LifecycleHook<LoadUnitLifecycleContext, LoadUnit> {
|
|
6
|
+
private readonly eggPrototypeFactory;
|
|
7
|
+
clazzMap: Map<EggProtoImplClass, IGraphMetadata>;
|
|
8
|
+
graphCompiledNameMap: Map<string, CompiledStateGraphProto>;
|
|
9
|
+
constructor(eggPrototypeFactory: EggPrototypeFactory);
|
|
10
|
+
preCreate(ctx: LoadUnitLifecycleContext, loadUnit: LoadUnit): Promise<void>;
|
|
11
|
+
postCreate(_ctx: LoadUnitLifecycleContext, obj: LoadUnit): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.GraphLoadUnitHook = void 0;
|
|
7
|
+
const CompiledStateGraphProto_1 = require("./CompiledStateGraphProto");
|
|
8
|
+
const tegg_langchain_decorator_1 = require("@eggjs/tegg-langchain-decorator");
|
|
9
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
10
|
+
class GraphLoadUnitHook {
|
|
11
|
+
constructor(eggPrototypeFactory) {
|
|
12
|
+
this.graphCompiledNameMap = new Map();
|
|
13
|
+
this.eggPrototypeFactory = eggPrototypeFactory;
|
|
14
|
+
this.clazzMap = tegg_langchain_decorator_1.GraphInfoUtil.getAllGraphMetadata();
|
|
15
|
+
}
|
|
16
|
+
async preCreate(ctx, loadUnit) {
|
|
17
|
+
const clazzList = await ctx.loader.load();
|
|
18
|
+
for (const clazz of clazzList) {
|
|
19
|
+
const meta = this.clazzMap.get(clazz);
|
|
20
|
+
if (meta) {
|
|
21
|
+
const protoName = clazz.name[0].toLowerCase() + clazz.name.substring(1);
|
|
22
|
+
const graphMetadata = tegg_langchain_decorator_1.GraphInfoUtil.getGraphMetadata(clazz);
|
|
23
|
+
(0, node_assert_1.default)(graphMetadata, `${clazz.name} graphMetadata should not be null`);
|
|
24
|
+
const proto = new CompiledStateGraphProto_1.CompiledStateGraphProto(loadUnit, `compiled${protoName.replace(protoName[0], protoName[0].toUpperCase())}`, protoName, graphMetadata);
|
|
25
|
+
this.eggPrototypeFactory.registerPrototype(proto, loadUnit);
|
|
26
|
+
this.graphCompiledNameMap.set(protoName, proto);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async postCreate(_ctx, obj) {
|
|
31
|
+
for (const graphName of this.graphCompiledNameMap.keys()) {
|
|
32
|
+
const graphProto = obj.getEggPrototype(graphName, [])[0];
|
|
33
|
+
if (graphProto) {
|
|
34
|
+
const compiledGraphProto = this.graphCompiledNameMap.get(graphName);
|
|
35
|
+
if (!compiledGraphProto.injectObjects.find(injectObject => injectObject.objName === graphProto.name)) {
|
|
36
|
+
compiledGraphProto.injectObjects.push({
|
|
37
|
+
refName: 'stateGraph',
|
|
38
|
+
objName: graphProto.name,
|
|
39
|
+
qualifiers: [],
|
|
40
|
+
proto: graphProto,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.GraphLoadUnitHook = GraphLoadUnitHook;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhMb2FkVW5pdEhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJHcmFwaExvYWRVbml0SG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFNQSx1RUFBb0U7QUFDcEUsOEVBQWdGO0FBQ2hGLDhEQUFpQztBQUVqQyxNQUFhLGlCQUFpQjtJQUs1QixZQUFZLG1CQUF3QztRQUZwRCx5QkFBb0IsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUdyRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsR0FBRyx3Q0FBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBNkIsRUFBRSxRQUFrQjtRQUMvRCxNQUFNLFNBQVMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUMsS0FBSyxNQUFNLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUEwQixDQUFDLENBQUM7WUFDM0QsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4RSxNQUFNLGFBQWEsR0FBRyx3Q0FBYSxDQUFDLGdCQUFnQixDQUFDLEtBQTBCLENBQUMsQ0FBQztnQkFDakYsSUFBQSxxQkFBTSxFQUFDLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLG1DQUFtQyxDQUFDLENBQUM7Z0JBQ3hFLE1BQU0sS0FBSyxHQUFHLElBQUksaURBQXVCLENBQUMsUUFBUSxFQUFFLFdBQVcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ3hKLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBOEIsRUFBRSxHQUFhO1FBQzVELEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDekQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUE0QixDQUFDO2dCQUMvRixJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3JHLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7d0JBQ3BDLE9BQU8sRUFBRSxZQUFZO3dCQUNyQixPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUk7d0JBQ3hCLFVBQVUsRUFBRSxFQUFFO3dCQUNkLEtBQUssRUFBRSxVQUFVO3FCQUNsQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUVGO0FBMUNELDhDQTBDQyJ9
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type LifecycleHook } from '@eggjs/tegg';
|
|
2
|
+
import { EggObjectLifeCycleContext, EggObject } from '@eggjs/tegg/helper';
|
|
3
|
+
export declare class GraphObjectHook implements LifecycleHook<EggObjectLifeCycleContext, EggObject> {
|
|
4
|
+
postCreate(_: EggObjectLifeCycleContext, eggObject: EggObject): Promise<void>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.GraphObjectHook = void 0;
|
|
37
|
+
const z = __importStar(require("zod/v4"));
|
|
38
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
39
|
+
const helper_1 = require("@eggjs/tegg/helper");
|
|
40
|
+
const tegg_langchain_decorator_1 = require("@eggjs/tegg-langchain-decorator");
|
|
41
|
+
const mcp_client_1 = require("@eggjs/mcp-client");
|
|
42
|
+
const mcp_adapters_1 = require("@langchain/mcp-adapters");
|
|
43
|
+
const langchain_1 = require("langchain");
|
|
44
|
+
const prebuilt_1 = require("@langchain/langgraph/prebuilt");
|
|
45
|
+
class GraphNodeHandler {
|
|
46
|
+
constructor(nodeMetadata, eggObject) {
|
|
47
|
+
this.nodeMetadata = nodeMetadata;
|
|
48
|
+
this.eggObject = eggObject;
|
|
49
|
+
}
|
|
50
|
+
async findGraphTools() {
|
|
51
|
+
var _a;
|
|
52
|
+
const tools = (_a = this.nodeMetadata.tools) !== null && _a !== void 0 ? _a : [];
|
|
53
|
+
let dTools = [];
|
|
54
|
+
for (let i = 0; i < tools.length; i++) {
|
|
55
|
+
const toolsObj = await helper_1.EggContainerFactory.getOrCreateEggObjectFromClazz(tools[i]);
|
|
56
|
+
const toolMetadata = tegg_langchain_decorator_1.GraphToolInfoUtil.getGraphToolMetadata(toolsObj.proto.clazz);
|
|
57
|
+
const ToolDetail = tegg_1.MCPInfoUtil.getMCPToolArgsIndex(toolsObj.proto.clazz, 'execute');
|
|
58
|
+
if (toolMetadata && ToolDetail) {
|
|
59
|
+
const tool = new langchain_1.DynamicStructuredTool({
|
|
60
|
+
description: toolMetadata.description,
|
|
61
|
+
name: toolMetadata.toolName,
|
|
62
|
+
func: toolsObj.obj.execute.bind(toolsObj.obj),
|
|
63
|
+
schema: z.object(ToolDetail.argsSchema),
|
|
64
|
+
});
|
|
65
|
+
dTools = dTools.concat(tool);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return dTools;
|
|
69
|
+
}
|
|
70
|
+
async findMcpServerTools() {
|
|
71
|
+
var _a;
|
|
72
|
+
const mcpServers = (_a = this.nodeMetadata.mcpServers) !== null && _a !== void 0 ? _a : [];
|
|
73
|
+
let sTools = [];
|
|
74
|
+
for (let i = 0; i < mcpServers.length; i++) {
|
|
75
|
+
const mcpClientObj = await helper_1.EggContainerFactory.getOrCreateEggObjectFromName(mcp_client_1.MCPClientInjectName, [{
|
|
76
|
+
attribute: mcp_client_1.MCPClientQualifierAttribute,
|
|
77
|
+
value: mcpServers[i],
|
|
78
|
+
}]);
|
|
79
|
+
const tool = await (0, mcp_adapters_1.loadMcpTools)(mcpServers[i], mcpClientObj.obj, {
|
|
80
|
+
throwOnLoadError: true,
|
|
81
|
+
prefixToolNameWithServerName: false,
|
|
82
|
+
additionalToolNamePrefix: '',
|
|
83
|
+
});
|
|
84
|
+
sTools = sTools.concat(tool);
|
|
85
|
+
}
|
|
86
|
+
return sTools;
|
|
87
|
+
}
|
|
88
|
+
async boundTools() {
|
|
89
|
+
const nodeObj = this.eggObject.obj;
|
|
90
|
+
const dTools = await this.findGraphTools();
|
|
91
|
+
const sTools = await this.findMcpServerTools();
|
|
92
|
+
if (tegg_langchain_decorator_1.TeggToolNode.prototype.isPrototypeOf(nodeObj)) {
|
|
93
|
+
const toolNode = new prebuilt_1.ToolNode([...dTools, ...sTools]);
|
|
94
|
+
Object.defineProperty(nodeObj, 'toolNode', {
|
|
95
|
+
get: () => toolNode,
|
|
96
|
+
});
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// 如果用户写了 build 方法,则让他自己绑定
|
|
100
|
+
if (nodeObj.build) {
|
|
101
|
+
nodeObj.build([...dTools, ...sTools]);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// 否则自动绑定
|
|
105
|
+
const injectObjects = this.eggObject.proto.injectObjects;
|
|
106
|
+
for (let i = 0; i < injectObjects.length; i++) {
|
|
107
|
+
const injectObject = injectObjects[i];
|
|
108
|
+
const qualifiers = injectObject.qualifiers;
|
|
109
|
+
for (let j = 0; j < qualifiers.length; j++) {
|
|
110
|
+
const qualifier = qualifiers[j];
|
|
111
|
+
if (qualifier.attribute === tegg_langchain_decorator_1.ChatModelQualifierAttribute) {
|
|
112
|
+
// 找到当前 eggObject 上的 chatModel
|
|
113
|
+
const chatModelObj = await helper_1.EggContainerFactory.getOrCreateEggObjectFromName(tegg_langchain_decorator_1.ChatModelInjectName, [{
|
|
114
|
+
attribute: tegg_langchain_decorator_1.ChatModelQualifierAttribute,
|
|
115
|
+
value: qualifier.value,
|
|
116
|
+
}]);
|
|
117
|
+
const chatModel = chatModelObj.obj;
|
|
118
|
+
// 绑定
|
|
119
|
+
const boundChatModel = chatModel.bindTools([...dTools, ...sTools]);
|
|
120
|
+
// 劫持
|
|
121
|
+
Object.defineProperty(nodeObj, injectObject.objName, {
|
|
122
|
+
get: () => boundChatModel,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
class GraphObjectHook {
|
|
131
|
+
async postCreate(_, eggObject) {
|
|
132
|
+
const nodeMetadata = eggObject.proto.getMetaData(tegg_langchain_decorator_1.GRAPH_NODE_METADATA);
|
|
133
|
+
// 找到 graph node
|
|
134
|
+
if (nodeMetadata) {
|
|
135
|
+
const handler = new GraphNodeHandler(nodeMetadata, eggObject);
|
|
136
|
+
await handler.boundTools();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.GraphObjectHook = GraphObjectHook;
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhPYmplY3RIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiR3JhcGhPYmplY3RIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBDQUE0QjtBQUM1QixzQ0FBOEQ7QUFDOUQsK0NBQXNIO0FBQ3RILDhFQVN5QztBQUV6QyxrREFBcUY7QUFDckYsMERBQXVEO0FBRXZELHlDQUFrRDtBQUNsRCw0REFBeUQ7QUFFekQsTUFBTSxnQkFBZ0I7SUFJcEIsWUFBWSxZQUErQixFQUFFLFNBQW9CO1FBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYzs7UUFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssbUNBQUksRUFBRSxDQUFDO1FBQzVDLElBQUksTUFBTSxHQUFvRCxFQUFFLENBQUM7UUFDakUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLDRCQUFtQixDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sWUFBWSxHQUFHLDRDQUFpQixDQUFDLG9CQUFvQixDQUFFLFFBQVEsQ0FBQyxLQUEwQyxDQUFDLEtBQU0sQ0FBQyxDQUFDO1lBQ3pILE1BQU0sVUFBVSxHQUFHLGtCQUFXLENBQUMsbUJBQW1CLENBQUUsUUFBUSxDQUFDLEtBQTBDLENBQUMsS0FBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzNILElBQUksWUFBWSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksR0FBRyxJQUFJLGlDQUFxQixDQUFDO29CQUNyQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7b0JBQ3JDLElBQUksRUFBRSxZQUFZLENBQUMsUUFBUTtvQkFDM0IsSUFBSSxFQUFHLFFBQVEsQ0FBQyxHQUFrQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztvQkFDN0UsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBUTtpQkFDL0MsQ0FBQyxDQUFDO2dCQUNILE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0I7O1FBQ3RCLE1BQU0sVUFBVSxHQUFHLE1BQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLG1DQUFJLEVBQUUsQ0FBQztRQUN0RCxJQUFJLE1BQU0sR0FBb0QsRUFBRSxDQUFDO1FBQ2pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDM0MsTUFBTSxZQUFZLEdBQUcsTUFBTSw0QkFBbUIsQ0FBQyw0QkFBNEIsQ0FBQyxnQ0FBbUIsRUFBRSxDQUFDO29CQUNoRyxTQUFTLEVBQUUsd0NBQTJCO29CQUN0QyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDckIsQ0FBQyxDQUFDLENBQUM7WUFDSixNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsMkJBQVksRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQVUsRUFBRTtnQkFDdEUsZ0JBQWdCLEVBQUUsSUFBSTtnQkFDdEIsNEJBQTRCLEVBQUUsS0FBSztnQkFDbkMsd0JBQXdCLEVBQUUsRUFBRTthQUM3QixDQUFDLENBQUM7WUFDSCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ2QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFzQixDQUFDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFL0MsSUFBSSx1Q0FBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxNQUFNLFFBQVEsR0FBRyxJQUFJLG1CQUFRLENBQUMsQ0FBRSxHQUFJLE1BQWtDLEVBQUUsR0FBSSxNQUFrQyxDQUFFLENBQUMsQ0FBQztZQUNsSCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUU7Z0JBQ3pDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRO2FBQ3BCLENBQUMsQ0FBQztZQUNILE9BQU87UUFDVCxDQUFDO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxLQUFNLENBQUMsQ0FBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBRSxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTO1lBQ1QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQ3pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztnQkFDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDM0MsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssc0RBQTJCLEVBQUUsQ0FBQzt3QkFDeEQsOEJBQThCO3dCQUM5QixNQUFNLFlBQVksR0FBRyxNQUFNLDRCQUFtQixDQUFDLDRCQUE0QixDQUFDLDhDQUFtQixFQUFFLENBQUM7Z0NBQ2hHLFNBQVMsRUFBRSxzREFBMkI7Z0NBQ3RDLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSzs2QkFDdkIsQ0FBQyxDQUFDLENBQUM7d0JBQ0osTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQXdCLENBQUM7d0JBQ3hELEtBQUs7d0JBQ0wsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFFLEdBQUcsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFFLENBQUMsQ0FBQzt3QkFDckUsS0FBSzt3QkFDTCxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFOzRCQUNuRCxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsY0FBYzt5QkFDMUIsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsTUFBYSxlQUFlO0lBRTFCLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBNEIsRUFBRSxTQUFvQjtRQUNqRSxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBb0IsOENBQW1CLENBQUMsQ0FBQztRQUN6RixnQkFBZ0I7UUFDaEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixNQUFNLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RCxNQUFNLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQVhELDBDQVdDIn0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { EggProtoImplClass, LifecycleHook } from '@eggjs/tegg';
|
|
2
|
+
import { EggPrototype, EggPrototypeLifecycleContext } from '@eggjs/tegg-metadata';
|
|
3
|
+
export declare class GraphPrototypeHook implements LifecycleHook<EggPrototypeLifecycleContext, EggPrototype> {
|
|
4
|
+
toolProtoMap: Map<EggProtoImplClass, EggPrototype>;
|
|
5
|
+
nodeProtoMap: Map<EggPrototype, EggProtoImplClass[]>;
|
|
6
|
+
nodeMcpServerProtoMap: Map<EggPrototype, string[]>;
|
|
7
|
+
mcpServerProto: EggPrototype;
|
|
8
|
+
checkPointProto: EggPrototype;
|
|
9
|
+
checkPointList: EggProtoImplClass[];
|
|
10
|
+
checkPointProtoMap: Map<EggProtoImplClass, EggPrototype>;
|
|
11
|
+
checkPointGraphMap: Map<EggProtoImplClass, EggPrototype[]>;
|
|
12
|
+
graphCheckpointProtoMap: Map<EggPrototype, string>;
|
|
13
|
+
graphNodeProtoMap: Map<EggPrototype, EggProtoImplClass[]>;
|
|
14
|
+
nodeProto: Map<EggProtoImplClass, EggPrototype>;
|
|
15
|
+
graphEdgeProtoMap: Map<EggPrototype, EggProtoImplClass[]>;
|
|
16
|
+
edgeProto: Map<EggProtoImplClass, EggPrototype>;
|
|
17
|
+
postCreate(ctx: EggPrototypeLifecycleContext, proto: EggPrototype): Promise<void>;
|
|
18
|
+
makeNodeDependencies(ctx: EggPrototypeLifecycleContext, proto: EggPrototype): Promise<void>;
|
|
19
|
+
makeGraphDependencies(ctx: EggPrototypeLifecycleContext, proto: EggPrototype): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GraphPrototypeHook = void 0;
|
|
4
|
+
const tegg_langchain_decorator_1 = require("@eggjs/tegg-langchain-decorator");
|
|
5
|
+
const mcp_client_1 = require("@eggjs/mcp-client");
|
|
6
|
+
const langgraph_1 = require("@langchain/langgraph");
|
|
7
|
+
class GraphPrototypeHook {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.toolProtoMap = new Map();
|
|
10
|
+
this.nodeProtoMap = new Map();
|
|
11
|
+
this.nodeMcpServerProtoMap = new Map();
|
|
12
|
+
this.checkPointList = [];
|
|
13
|
+
this.checkPointProtoMap = new Map();
|
|
14
|
+
this.checkPointGraphMap = new Map();
|
|
15
|
+
this.graphCheckpointProtoMap = new Map();
|
|
16
|
+
this.graphNodeProtoMap = new Map();
|
|
17
|
+
this.nodeProto = new Map();
|
|
18
|
+
this.graphEdgeProtoMap = new Map();
|
|
19
|
+
this.edgeProto = new Map();
|
|
20
|
+
}
|
|
21
|
+
async postCreate(ctx, proto) {
|
|
22
|
+
await this.makeNodeDependencies(ctx, proto);
|
|
23
|
+
await this.makeGraphDependencies(ctx, proto);
|
|
24
|
+
}
|
|
25
|
+
async makeNodeDependencies(ctx, proto) {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
const nodeMetadata = tegg_langchain_decorator_1.GraphNodeInfoUtil.getGraphNodeMetadata(ctx.clazz);
|
|
28
|
+
if (nodeMetadata) {
|
|
29
|
+
const tools = (_a = nodeMetadata.tools) !== null && _a !== void 0 ? _a : [];
|
|
30
|
+
// 找到所有已经创建好的 tool proto
|
|
31
|
+
for (let i = 0; i < tools.length; i++) {
|
|
32
|
+
if (this.toolProtoMap.has(tools[i])) {
|
|
33
|
+
const toolProto = this.toolProtoMap.get(tools[i]);
|
|
34
|
+
proto.injectObjects.push({
|
|
35
|
+
refName: `__GRAPH_TOOL_${String(toolProto.name)}__`,
|
|
36
|
+
objName: toolProto.name,
|
|
37
|
+
qualifiers: [],
|
|
38
|
+
proto: toolProto,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const mcpServers = (_b = nodeMetadata.mcpServers) !== null && _b !== void 0 ? _b : [];
|
|
43
|
+
if (this.mcpServerProto) {
|
|
44
|
+
for (let i = 0; i < mcpServers.length; i++) {
|
|
45
|
+
proto.injectObjects.push({
|
|
46
|
+
refName: `__GRAPH_MCPSERVER_${String(mcpServers[i])}__`,
|
|
47
|
+
objName: mcp_client_1.MCPClientInjectName,
|
|
48
|
+
qualifiers: [{
|
|
49
|
+
attribute: mcp_client_1.MCPClientQualifierAttribute,
|
|
50
|
+
value: mcpServers[i],
|
|
51
|
+
}],
|
|
52
|
+
proto: this.mcpServerProto,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// 存入 nodeProtoMap,等 tool 创建好了再注入
|
|
57
|
+
this.nodeProtoMap.set(proto, tools);
|
|
58
|
+
// 存入 nodeMcpServerProtoMap,等 mcpServer 创建好了再注入
|
|
59
|
+
this.nodeMcpServerProtoMap.set(proto, mcpServers);
|
|
60
|
+
}
|
|
61
|
+
const toolMetadata = tegg_langchain_decorator_1.GraphToolInfoUtil.getGraphToolMetadata(ctx.clazz);
|
|
62
|
+
if (toolMetadata) {
|
|
63
|
+
// 注入到所有用到这个 tool 的 node 上
|
|
64
|
+
for (const [nodeProto, toolClazzList] of this.nodeProtoMap.entries()) {
|
|
65
|
+
if (toolClazzList.includes(ctx.clazz)) {
|
|
66
|
+
nodeProto.injectObjects.push({
|
|
67
|
+
refName: `__GRAPH_TOOL_${String(proto.name)}__`,
|
|
68
|
+
objName: proto.name,
|
|
69
|
+
qualifiers: [],
|
|
70
|
+
proto,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// 记录已经创建好的 tool proto,以便后续 node 注入
|
|
75
|
+
this.toolProtoMap.set(ctx.clazz, proto);
|
|
76
|
+
}
|
|
77
|
+
if (proto.name === mcp_client_1.MCPClientInjectName) {
|
|
78
|
+
this.mcpServerProto = proto;
|
|
79
|
+
// 注入到所有用到 mcpServer 的 node 上
|
|
80
|
+
for (const [nodeProto, mcpServers] of this.nodeMcpServerProtoMap.entries()) {
|
|
81
|
+
for (let i = 0; i < mcpServers.length; i++) {
|
|
82
|
+
nodeProto.injectObjects.push({
|
|
83
|
+
refName: `__GRAPH_MCPSERVER_${String(mcpServers[i])}__`,
|
|
84
|
+
objName: mcp_client_1.MCPClientInjectName,
|
|
85
|
+
qualifiers: [{
|
|
86
|
+
attribute: mcp_client_1.MCPClientQualifierAttribute,
|
|
87
|
+
value: mcpServers[i],
|
|
88
|
+
}],
|
|
89
|
+
proto,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async makeGraphDependencies(ctx, proto) {
|
|
96
|
+
var _a, _b, _c;
|
|
97
|
+
const graphMetadata = tegg_langchain_decorator_1.GraphInfoUtil.getGraphMetadata(ctx.clazz);
|
|
98
|
+
if (graphMetadata) {
|
|
99
|
+
if (graphMetadata.checkpoint) {
|
|
100
|
+
// module.yml ChatCheckpointSaver
|
|
101
|
+
if (typeof graphMetadata.checkpoint === 'string') {
|
|
102
|
+
// 如果 ChatCheckpointSaver 已经创建好了,则直接注入
|
|
103
|
+
if (this.checkPointProto) {
|
|
104
|
+
proto.injectObjects.push({
|
|
105
|
+
refName: 'checkpoint',
|
|
106
|
+
objName: tegg_langchain_decorator_1.ChatCheckpointSaverInjectName,
|
|
107
|
+
qualifiers: [{
|
|
108
|
+
attribute: tegg_langchain_decorator_1.ChatCheckpointSaverQualifierAttribute,
|
|
109
|
+
value: graphMetadata.checkpoint,
|
|
110
|
+
}],
|
|
111
|
+
proto: this.checkPointProto,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
// 如果没有创建好,则记录下来,等 ChatCheckpointSaver 创建好了再注入
|
|
115
|
+
this.graphCheckpointProtoMap.set(proto, graphMetadata.checkpoint);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// 用户自己编写的 CheckpointSaver class
|
|
119
|
+
if (this.checkPointProtoMap.has(graphMetadata.checkpoint)) {
|
|
120
|
+
// 如果已经创建好了,则直接注入
|
|
121
|
+
const checkPointProto = this.checkPointProtoMap.get(graphMetadata.checkpoint);
|
|
122
|
+
proto.injectObjects.push({
|
|
123
|
+
refName: 'checkpoint',
|
|
124
|
+
objName: checkPointProto.name,
|
|
125
|
+
qualifiers: [],
|
|
126
|
+
proto: checkPointProto,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
// 如果没有创建好,则记录下来,等 CheckpointSaver 创建好了再注入
|
|
130
|
+
this.checkPointList.push(graphMetadata.checkpoint);
|
|
131
|
+
if (this.checkPointGraphMap.has(graphMetadata.checkpoint)) {
|
|
132
|
+
this.checkPointGraphMap.get(graphMetadata.checkpoint).push(proto);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
this.checkPointGraphMap.set(graphMetadata.checkpoint, [proto]);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
this.graphNodeProtoMap.set(proto, []);
|
|
139
|
+
this.graphEdgeProtoMap.set(proto, []);
|
|
140
|
+
// 将所有 node 注入到 graph 上
|
|
141
|
+
for (const nodeProto of (_a = graphMetadata.nodes) !== null && _a !== void 0 ? _a : []) {
|
|
142
|
+
// 如果有,则是扫描过了,直接注入
|
|
143
|
+
if (this.nodeProto.has(nodeProto)) {
|
|
144
|
+
proto.injectObjects.push({
|
|
145
|
+
refName: `__GRAPH_NODE_${String(nodeProto)}__`,
|
|
146
|
+
objName: nodeProto.name,
|
|
147
|
+
qualifiers: [],
|
|
148
|
+
proto: this.nodeProto.get(nodeProto),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
// 如果没有,记录下来,等 node 创建好了再注入
|
|
153
|
+
this.graphNodeProtoMap.get(proto).push(nodeProto);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// 将所有 edge 注入到 graph 上
|
|
157
|
+
for (const edgeProto of (_b = graphMetadata.edges) !== null && _b !== void 0 ? _b : []) {
|
|
158
|
+
// 如果有,则是扫描过了,直接注入
|
|
159
|
+
if (this.edgeProto.has(edgeProto)) {
|
|
160
|
+
proto.injectObjects.push({
|
|
161
|
+
refName: `__GRAPH_EDGE_${String(edgeProto)}__`,
|
|
162
|
+
objName: edgeProto.name,
|
|
163
|
+
qualifiers: [],
|
|
164
|
+
proto: this.edgeProto.get(edgeProto),
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
// 如果没有,记录下来,等 edge 创建好了再注入
|
|
169
|
+
this.graphEdgeProtoMap.get(proto).push(edgeProto);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// 此时创建的是 ChatCheckpointSaver
|
|
175
|
+
if (proto.name === tegg_langchain_decorator_1.ChatCheckpointSaverInjectName) {
|
|
176
|
+
this.checkPointProto = proto;
|
|
177
|
+
// 注入到所有用到 checkpoint 的 graph 上
|
|
178
|
+
for (const [graphProto, checkpoint] of this.graphCheckpointProtoMap.entries()) {
|
|
179
|
+
if (checkpoint === (graphMetadata === null || graphMetadata === void 0 ? void 0 : graphMetadata.checkpoint)) {
|
|
180
|
+
if (!graphProto.injectObjects.find(injectObject => injectObject.refName === 'checkpoint')) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
graphProto.injectObjects.push({
|
|
184
|
+
refName: 'checkpoint',
|
|
185
|
+
objName: tegg_langchain_decorator_1.ChatCheckpointSaverInjectName,
|
|
186
|
+
qualifiers: [{
|
|
187
|
+
attribute: tegg_langchain_decorator_1.ChatCheckpointSaverQualifierAttribute,
|
|
188
|
+
value: checkpoint,
|
|
189
|
+
}],
|
|
190
|
+
proto,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// 此时创建的是用户自定义的 BaseCheckpointSaver 的子类
|
|
196
|
+
if (langgraph_1.BaseCheckpointSaver.isPrototypeOf(ctx.clazz)) {
|
|
197
|
+
// 如果有 graph 依赖这个 CheckpointSaver,则注入
|
|
198
|
+
const graphProto = (_c = this.checkPointGraphMap.get(ctx.clazz)) !== null && _c !== void 0 ? _c : [];
|
|
199
|
+
for (let i = 0; i < graphProto.length; i++) {
|
|
200
|
+
if (!graphProto[i].injectObjects.find(injectObject => injectObject.refName === 'checkpoint')) {
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
graphProto[i].injectObjects.push({
|
|
204
|
+
refName: 'checkpoint',
|
|
205
|
+
objName: proto.name,
|
|
206
|
+
qualifiers: [],
|
|
207
|
+
proto,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
this.checkPointProtoMap.set(ctx.clazz, proto);
|
|
211
|
+
}
|
|
212
|
+
// 此时创建的是 graph node
|
|
213
|
+
const nodeMeta = tegg_langchain_decorator_1.GraphNodeInfoUtil.getGraphNodeMetadata(ctx.clazz);
|
|
214
|
+
if (nodeMeta) {
|
|
215
|
+
this.nodeProto.set(ctx.clazz, proto);
|
|
216
|
+
// 注入到所有依赖这个 graph node 的 graph
|
|
217
|
+
for (const [graphProto, nodeProtos] of this.graphNodeProtoMap.entries()) {
|
|
218
|
+
if (nodeProtos.includes(ctx.clazz)) {
|
|
219
|
+
if (!graphProto.injectObjects.find(injectObject => injectObject.refName === `__GRAPH_NODE_${String(ctx.clazz)}__`)) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
graphProto.injectObjects.push({
|
|
223
|
+
refName: `__GRAPH_NODE_${String(ctx.clazz)}__`,
|
|
224
|
+
objName: proto.name,
|
|
225
|
+
qualifiers: [],
|
|
226
|
+
proto,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// 此时创建的是 graph edge
|
|
232
|
+
const edgeMeta = tegg_langchain_decorator_1.GraphEdgeInfoUtil.getGraphEdgeMetadata(ctx.clazz);
|
|
233
|
+
if (edgeMeta) {
|
|
234
|
+
this.edgeProto.set(ctx.clazz, proto);
|
|
235
|
+
// 注入到所有依赖这个 graph edge 的 graph
|
|
236
|
+
for (const [graphProto, edgeProtos] of this.graphEdgeProtoMap.entries()) {
|
|
237
|
+
if (edgeProtos.includes(ctx.clazz)) {
|
|
238
|
+
if (!graphProto.injectObjects.find(injectObject => injectObject.refName === `__GRAPH_EDGE_${String(ctx.clazz)}__`)) {
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
graphProto.injectObjects.push({
|
|
242
|
+
refName: `__GRAPH_EDGE_${String(ctx.clazz)}__`,
|
|
243
|
+
objName: proto.name,
|
|
244
|
+
qualifiers: [],
|
|
245
|
+
proto,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
exports.GraphPrototypeHook = GraphPrototypeHook;
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhQcm90b3R5cGVIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiR3JhcGhQcm90b3R5cGVIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDhFQUErTDtBQUMvTCxrREFBcUY7QUFDckYsb0RBQTJEO0FBRTNELE1BQWEsa0JBQWtCO0lBQS9CO1FBQ0UsaUJBQVksR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMvRCxpQkFBWSxHQUEyQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pFLDBCQUFxQixHQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBSS9ELG1CQUFjLEdBQXdCLEVBQUUsQ0FBQztRQUN6Qyx1QkFBa0IsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNyRSx1QkFBa0IsR0FBMkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN2RSw0QkFBdUIsR0FBOEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUUvRCxzQkFBaUIsR0FBMkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN0RSxjQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7UUFFNUQsc0JBQWlCLEdBQTJDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEUsY0FBUyxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBbVA5RCxDQUFDO0lBalBDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBaUMsRUFBRSxLQUFtQjtRQUNyRSxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsR0FBaUMsRUFBRSxLQUFtQjs7UUFDL0UsTUFBTSxZQUFZLEdBQUcsNENBQWlCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZFLElB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
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LangGraphTracer = void 0;
|
|
13
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
const base_1 = require("@langchain/core/tracers/base");
|
|
17
|
+
let LangGraphTracer = class LangGraphTracer extends base_1.BaseTracer {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(...arguments);
|
|
20
|
+
this.name = 'LangGraphTracer';
|
|
21
|
+
}
|
|
22
|
+
setName(name) {
|
|
23
|
+
this.name = name;
|
|
24
|
+
}
|
|
25
|
+
persistRun(run) {
|
|
26
|
+
this.logger.info(`[agent_run][${this.name}]:traceId=${run.trace_id},run=${JSON.stringify(run)}`);
|
|
27
|
+
return Promise.resolve(undefined);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
exports.LangGraphTracer = LangGraphTracer;
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, tegg_1.Inject)(),
|
|
33
|
+
__metadata("design:type", Object)
|
|
34
|
+
], LangGraphTracer.prototype, "logger", void 0);
|
|
35
|
+
exports.LangGraphTracer = LangGraphTracer = __decorate([
|
|
36
|
+
(0, tegg_1.SingletonProto)()
|
|
37
|
+
], LangGraphTracer);
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGFuZ0dyYXBoVHJhY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTGFuZ0dyYXBoVHJhY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHNDQUE2RDtBQUM3RCw2REFBNkQ7QUFDN0QsYUFBYTtBQUNiLHVEQUErRDtBQUd4RCxJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFnQixTQUFRLGlCQUFVO0lBQXhDOztRQUlMLFNBQUksR0FBRyxpQkFBaUIsQ0FBQztJQVUzQixDQUFDO0lBUkMsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVTLFVBQVUsQ0FBQyxHQUFRO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksYUFBYSxHQUFHLENBQUMsUUFBUSxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0YsQ0FBQTtBQWRZLDBDQUFlO0FBRVQ7SUFEaEIsSUFBQSxhQUFNLEdBQUU7OytDQUN1QjswQkFGckIsZUFBZTtJQUQzQixJQUFBLHFCQUFjLEdBQUU7R0FDSixlQUFlLENBYzNCIn0=
|
package/lib/util.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ObjectInfo, ModuleConfig } from '@eggjs/tegg';
|
|
2
|
+
export type ConfigTypeHelper<T extends 'ChatModel'> = Required<ModuleConfig>[T]['clients'][keyof Required<ModuleConfig>[T]['clients']];
|
|
3
|
+
export declare function getClientNames(config: ModuleConfig | undefined, key: string): string[];
|
|
4
|
+
export declare function getChatModelConfig(config: ModuleConfig, objectInfo: ObjectInfo): ConfigTypeHelper<'ChatModel'>;
|
package/lib/util.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getClientNames = getClientNames;
|
|
7
|
+
exports.getChatModelConfig = getChatModelConfig;
|
|
8
|
+
const tegg_langchain_decorator_1 = require("@eggjs/tegg-langchain-decorator");
|
|
9
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
10
|
+
function getClientNames(config, key) {
|
|
11
|
+
var _a;
|
|
12
|
+
const clients = (_a = config === null || config === void 0 ? void 0 : config[key]) === null || _a === void 0 ? void 0 : _a.clients;
|
|
13
|
+
if (!clients)
|
|
14
|
+
return [];
|
|
15
|
+
return Object.keys(clients);
|
|
16
|
+
}
|
|
17
|
+
function getChatModelConfig(config, objectInfo) {
|
|
18
|
+
var _a, _b;
|
|
19
|
+
const chatModelName = (_a = objectInfo.qualifiers.find(t => t.attribute === tegg_langchain_decorator_1.ChatModelQualifierAttribute)) === null || _a === void 0 ? void 0 : _a.value;
|
|
20
|
+
(0, node_assert_1.default)(chatModelName, 'not found ChatModel name');
|
|
21
|
+
const chatModelConfig = (_b = config.ChatModel) === null || _b === void 0 ? void 0 : _b.clients[chatModelName];
|
|
22
|
+
if (!config) {
|
|
23
|
+
throw new Error(`not found ChatModel config for ${chatModelName}`);
|
|
24
|
+
}
|
|
25
|
+
return chatModelConfig;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSx3Q0FJQztBQUVELGdEQVFDO0FBdEJELDhFQUV5QztBQUN6Qyw4REFBaUM7QUFLakMsU0FBZ0IsY0FBYyxDQUFDLE1BQWdDLEVBQUUsR0FBVzs7SUFDMUUsTUFBTSxPQUFPLEdBQUcsTUFBQSxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUcsR0FBRyxDQUFDLDBDQUFFLE9BQU8sQ0FBQztJQUN2QyxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsTUFBb0IsRUFBRSxVQUFzQjs7SUFDN0UsTUFBTSxhQUFhLEdBQUcsTUFBQSxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssc0RBQTJCLENBQUMsMENBQUUsS0FBSyxDQUFDO0lBQzFHLElBQUEscUJBQU0sRUFBQyxhQUFhLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUNsRCxNQUFNLGVBQWUsR0FBRyxNQUFBLE1BQU0sQ0FBQyxTQUFTLDBDQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRCxPQUFPLGVBQWdCLENBQUM7QUFDMUIsQ0FBQyJ9
|