@eggjs/tegg-langchain 0.0.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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhPYmplY3RIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiR3JhcGhPYmplY3RIb29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBDQUE0QjtBQUM1QixzQ0FBOEQ7QUFDOUQsK0NBQXNIO0FBQ3RILDhFQVN5QztBQUV6QyxrREFBcUY7QUFDckYsMERBQXVEO0FBRXZELHlDQUFrRDtBQUNsRCw0REFBeUQ7QUFFekQsTUFBTSxnQkFBZ0I7SUFJcEIsWUFBWSxZQUErQixFQUFFLFNBQW9CO1FBQy9ELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYzs7UUFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssbUNBQUksRUFBRSxDQUFDO1FBQzVDLElBQUksTUFBTSxHQUFvRCxFQUFFLENBQUM7UUFDakUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxNQUFNLDRCQUFtQixDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE1BQU0sWUFBWSxHQUFHLDRDQUFpQixDQUFDLG9CQUFvQixDQUFFLFFBQVEsQ0FBQyxLQUEwQyxDQUFDLEtBQU0sQ0FBQyxDQUFDO1lBQ3pILE1BQU0sVUFBVSxHQUFHLGtCQUFXLENBQUMsbUJBQW1CLENBQUUsUUFBUSxDQUFDLEtBQTBDLENBQUMsS0FBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzNILElBQUksWUFBWSxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksR0FBRyxJQUFJ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
@@ -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,8 @@
1
+ import { Logger } from '@eggjs/tegg';
2
+ import { BaseTracer, Run } from '@langchain/core/tracers/base';
3
+ export declare class LangGraphTracer extends BaseTracer {
4
+ logger: Logger;
5
+ name: string;
6
+ setName(name: string): void;
7
+ protected persistRun(run: Run): Promise<void>;
8
+ }
@@ -0,0 +1,40 @@
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
+ accessLevel: tegg_1.AccessLevel.PUBLIC,
38
+ })
39
+ ], LangGraphTracer);
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGFuZ0dyYXBoVHJhY2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiTGFuZ0dyYXBoVHJhY2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHNDQUEwRTtBQUMxRSw2REFBNkQ7QUFDN0QsYUFBYTtBQUNiLHVEQUErRDtBQUt4RCxJQUFNLGVBQWUsR0FBckIsTUFBTSxlQUFnQixTQUFRLGlCQUFVO0lBQXhDOztRQUlMLFNBQUksR0FBRyxpQkFBaUIsQ0FBQztJQVUzQixDQUFDO0lBUkMsT0FBTyxDQUFDLElBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVTLFVBQVUsQ0FBQyxHQUFRO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksYUFBYSxHQUFHLENBQUMsUUFBUSxRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0YsQ0FBQTtBQWRZLDBDQUFlO0FBRTFCO0lBREMsSUFBQSxhQUFNLEdBQUU7OytDQUNNOzBCQUZKLGVBQWU7SUFIM0IsSUFBQSxxQkFBYyxFQUFDO1FBQ2QsV0FBVyxFQUFFLGtCQUFXLENBQUMsTUFBTTtLQUNoQyxDQUFDO0dBQ1csZUFBZSxDQWMzQiJ9
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