@minded-ai/mindedjs 1.0.122-beta.3 → 1.0.122-beta.4
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/nodes/addToolRunNode.js +1 -1
- package/dist/nodes/addToolRunNode.js.map +1 -1
- package/dist/utils/extractStateMemoryResponse.d.ts +2 -1
- package/dist/utils/extractStateMemoryResponse.d.ts.map +1 -1
- package/dist/utils/extractStateMemoryResponse.js +100 -0
- package/dist/utils/extractStateMemoryResponse.js.map +1 -1
- package/package.json +1 -1
- package/src/nodes/addToolRunNode.ts +1 -1
- package/src/utils/extractStateMemoryResponse.ts +107 -2
|
@@ -42,7 +42,7 @@ const addToolRunNode = async ({ graph, tools, toolNode, attachedToNodeName, agen
|
|
|
42
42
|
const toolCallMessage = await tool.invoke(toolCallObj.tool_calls[0]);
|
|
43
43
|
const toolStateUpdate = (0, extractStateMemoryResponse_1.default)(toolCallMessage);
|
|
44
44
|
// Push the toolCallMessage into the messages array from toolStateUpdate
|
|
45
|
-
const updatedMessages = [toolCallMessage, ...(toolStateUpdate.messages || [])];
|
|
45
|
+
const updatedMessages = [toolCallMessage, ...((toolStateUpdate).messages || [])];
|
|
46
46
|
// Return the full state update from the tool with the updated messages
|
|
47
47
|
return {
|
|
48
48
|
goto: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addToolRunNode.js","sourceRoot":"","sources":["../../src/nodes/addToolRunNode.ts"],"names":[],"mappings":";;;;;;AAIA,sDAA+E;AAC/E,iDAA8D;AAG9D,qGAA2E;AAE3E,4CAAyC;AACzC,8CAAqD;AAY9C,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,GAAG,QAAQ,GAAG,iCAAmB,CAAC,QAAQ,EAAE,CAAC;AAA1F,QAAA,oBAAoB,wBAAsE;AAEhG,MAAM,cAAc,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,KAAK,EAAwB,EAAE,EAAE;IAClH,MAAM,QAAQ,GAAiB,KAAK,EAAE,KAAmC,EAAE,EAAE;QAC3E,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1E,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,cAAc,GAAG,KAAK,EAAE,KAAwC,EAAE,EAAE;YACxE,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBACpE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC3B,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,GAAG,SAAS,EAAE,CAAC,CAAC;gBAClH,OAAO,QAAQ,IAAI,EAAE,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,6BAA6B,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,IAAA,YAAa,EAAC,cAAc,EAAE;YACzC,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,WAAW,EAAE,WAAW,CAAC,WAAW;YACpC,MAAM,EAAE,WAAW,CAAC,KAAK;SAC1B,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAQ,CAAC;QACrE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,eAAe,GAAG,IAAA,oCAAwB,EAAC,eAA8B,CAAC,CAAC;QAEjF,wEAAwE;QACxE,MAAM,eAAe,GAAG,CAAC,eAAe,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"addToolRunNode.js","sourceRoot":"","sources":["../../src/nodes/addToolRunNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ToolMessage } from '@langchain/core/messages';
|
|
2
|
-
|
|
2
|
+
import { State } from '../types/LangGraph.types';
|
|
3
|
+
declare const extractToolStateResponse: (toolMessage: ToolMessage) => Partial<State>;
|
|
3
4
|
export default extractToolStateResponse;
|
|
4
5
|
//# sourceMappingURL=extractStateMemoryResponse.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractStateMemoryResponse.d.ts","sourceRoot":"","sources":["../../src/utils/extractStateMemoryResponse.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"extractStateMemoryResponse.d.ts","sourceRoot":"","sources":["../../src/utils/extractStateMemoryResponse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,WAAW,EAA0C,MAAM,0BAA0B,CAAC;AAE5G,OAAO,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEjD,QAAA,MAAM,wBAAwB,GAAI,aAAa,WAAW,KAAG,OAAO,CAAC,KAAK,CAazE,CAAC;AAuGF,eAAe,wBAAwB,CAAC"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const messages_1 = require("@langchain/core/messages");
|
|
3
4
|
const logger_1 = require("./logger");
|
|
4
5
|
const extractToolStateResponse = (toolMessage) => {
|
|
5
6
|
try {
|
|
6
7
|
const parsed = JSON.parse(toolMessage.content);
|
|
7
8
|
if (typeof parsed === 'object' && parsed !== null && 'state' in parsed) {
|
|
9
|
+
if (parsed.state.messages) {
|
|
10
|
+
parsed.state.messages = constructMessagesFromToolMessage(parsed.state.messages);
|
|
11
|
+
}
|
|
8
12
|
return parsed.state;
|
|
9
13
|
}
|
|
10
14
|
}
|
|
@@ -13,5 +17,101 @@ const extractToolStateResponse = (toolMessage) => {
|
|
|
13
17
|
}
|
|
14
18
|
return {};
|
|
15
19
|
};
|
|
20
|
+
const constructMessagesFromToolMessage = (messages) => {
|
|
21
|
+
if (!Array.isArray(messages)) {
|
|
22
|
+
logger_1.logger.error({ msg: 'Expected messages to be an array', messages });
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
return messages.map((messageObj) => {
|
|
26
|
+
try {
|
|
27
|
+
// Handle case where message is already a BaseMessage instance
|
|
28
|
+
if (messageObj instanceof messages_1.BaseMessage) {
|
|
29
|
+
return messageObj;
|
|
30
|
+
}
|
|
31
|
+
// Handle case where message is a plain object that needs reconstruction
|
|
32
|
+
const messageType = messageObj._type || messageObj.type || messageObj.__class__ || 'unknown';
|
|
33
|
+
const content = messageObj.content || '';
|
|
34
|
+
const id = messageObj.id;
|
|
35
|
+
const additionalKwargs = messageObj.additional_kwargs || {};
|
|
36
|
+
switch (messageType) {
|
|
37
|
+
case 'ai':
|
|
38
|
+
case 'AIMessage':
|
|
39
|
+
return new messages_1.AIMessage({
|
|
40
|
+
content,
|
|
41
|
+
id,
|
|
42
|
+
additional_kwargs: additionalKwargs,
|
|
43
|
+
tool_calls: messageObj.tool_calls || [],
|
|
44
|
+
invalid_tool_calls: messageObj.invalid_tool_calls || [],
|
|
45
|
+
});
|
|
46
|
+
case 'human':
|
|
47
|
+
case 'HumanMessage':
|
|
48
|
+
return new messages_1.HumanMessage({
|
|
49
|
+
content,
|
|
50
|
+
id,
|
|
51
|
+
additional_kwargs: additionalKwargs,
|
|
52
|
+
});
|
|
53
|
+
case 'system':
|
|
54
|
+
case 'SystemMessage':
|
|
55
|
+
return new messages_1.SystemMessage({
|
|
56
|
+
content,
|
|
57
|
+
id,
|
|
58
|
+
additional_kwargs: additionalKwargs,
|
|
59
|
+
});
|
|
60
|
+
case 'tool':
|
|
61
|
+
case 'ToolMessage':
|
|
62
|
+
return new messages_1.ToolMessage({
|
|
63
|
+
content,
|
|
64
|
+
id,
|
|
65
|
+
additional_kwargs: additionalKwargs,
|
|
66
|
+
tool_call_id: messageObj.tool_call_id || '',
|
|
67
|
+
});
|
|
68
|
+
default:
|
|
69
|
+
// Fallback: try to determine type from message structure
|
|
70
|
+
if (messageObj.tool_call_id) {
|
|
71
|
+
return new messages_1.ToolMessage({
|
|
72
|
+
content,
|
|
73
|
+
id,
|
|
74
|
+
additional_kwargs: additionalKwargs,
|
|
75
|
+
tool_call_id: messageObj.tool_call_id,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
else if (messageObj.tool_calls || messageObj.invalid_tool_calls) {
|
|
79
|
+
return new messages_1.AIMessage({
|
|
80
|
+
content,
|
|
81
|
+
id,
|
|
82
|
+
additional_kwargs: additionalKwargs,
|
|
83
|
+
tool_calls: messageObj.tool_calls || [],
|
|
84
|
+
invalid_tool_calls: messageObj.invalid_tool_calls || [],
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Default to HumanMessage for unknown types
|
|
89
|
+
logger_1.logger.warn({
|
|
90
|
+
msg: 'Unknown message type, defaulting to HumanMessage',
|
|
91
|
+
messageType,
|
|
92
|
+
messageObj
|
|
93
|
+
});
|
|
94
|
+
return new messages_1.HumanMessage({
|
|
95
|
+
content,
|
|
96
|
+
id,
|
|
97
|
+
additional_kwargs: additionalKwargs,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
logger_1.logger.error({
|
|
104
|
+
msg: 'Error reconstructing message',
|
|
105
|
+
error,
|
|
106
|
+
messageObj
|
|
107
|
+
});
|
|
108
|
+
// Return a fallback HumanMessage in case of error
|
|
109
|
+
return new messages_1.HumanMessage({
|
|
110
|
+
content: messageObj.content || 'Error reconstructing message',
|
|
111
|
+
id: messageObj.id,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
};
|
|
16
116
|
exports.default = extractToolStateResponse;
|
|
17
117
|
//# sourceMappingURL=extractStateMemoryResponse.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractStateMemoryResponse.js","sourceRoot":"","sources":["../../src/utils/extractStateMemoryResponse.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"extractStateMemoryResponse.js","sourceRoot":"","sources":["../../src/utils/extractStateMemoryResponse.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -56,7 +56,7 @@ export const addToolRunNode = async ({ graph, tools, toolNode, attachedToNodeNam
|
|
|
56
56
|
const toolStateUpdate = extractToolStateResponse(toolCallMessage as ToolMessage);
|
|
57
57
|
|
|
58
58
|
// Push the toolCallMessage into the messages array from toolStateUpdate
|
|
59
|
-
const updatedMessages = [toolCallMessage, ...((toolStateUpdate
|
|
59
|
+
const updatedMessages = [toolCallMessage, ...((toolStateUpdate).messages || [])];
|
|
60
60
|
|
|
61
61
|
// Return the full state update from the tool with the updated messages
|
|
62
62
|
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { ToolMessage } from '@langchain/core/messages';
|
|
1
|
+
import { BaseMessage, ToolMessage, AIMessage, HumanMessage, SystemMessage } from '@langchain/core/messages';
|
|
2
2
|
import { logger } from './logger';
|
|
3
|
+
import { State } from '../types/LangGraph.types';
|
|
3
4
|
|
|
4
|
-
const extractToolStateResponse =
|
|
5
|
+
const extractToolStateResponse = (toolMessage: ToolMessage): Partial<State> => {
|
|
5
6
|
try {
|
|
6
7
|
const parsed = JSON.parse(toolMessage.content as string);
|
|
7
8
|
if (typeof parsed === 'object' && parsed !== null && 'state' in parsed) {
|
|
9
|
+
if (parsed.state.messages) {
|
|
10
|
+
parsed.state.messages = constructMessagesFromToolMessage(parsed.state.messages);
|
|
11
|
+
}
|
|
8
12
|
return parsed.state;
|
|
9
13
|
}
|
|
10
14
|
} catch (error) {
|
|
@@ -13,4 +17,105 @@ const extractToolStateResponse = <State>(toolMessage: ToolMessage): Partial<Stat
|
|
|
13
17
|
return {};
|
|
14
18
|
};
|
|
15
19
|
|
|
20
|
+
const constructMessagesFromToolMessage = (messages: any[]): BaseMessage[] => {
|
|
21
|
+
if (!Array.isArray(messages)) {
|
|
22
|
+
logger.error({ msg: 'Expected messages to be an array', messages });
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return messages.map((messageObj) => {
|
|
27
|
+
try {
|
|
28
|
+
// Handle case where message is already a BaseMessage instance
|
|
29
|
+
if (messageObj instanceof BaseMessage) {
|
|
30
|
+
return messageObj;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Handle case where message is a plain object that needs reconstruction
|
|
34
|
+
const messageType = messageObj._type || messageObj.type || messageObj.__class__ || 'unknown';
|
|
35
|
+
const content = messageObj.content || '';
|
|
36
|
+
const id = messageObj.id;
|
|
37
|
+
const additionalKwargs = messageObj.additional_kwargs || {};
|
|
38
|
+
|
|
39
|
+
switch (messageType) {
|
|
40
|
+
case 'ai':
|
|
41
|
+
case 'AIMessage':
|
|
42
|
+
return new AIMessage({
|
|
43
|
+
content,
|
|
44
|
+
id,
|
|
45
|
+
additional_kwargs: additionalKwargs,
|
|
46
|
+
tool_calls: messageObj.tool_calls || [],
|
|
47
|
+
invalid_tool_calls: messageObj.invalid_tool_calls || [],
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
case 'human':
|
|
51
|
+
case 'HumanMessage':
|
|
52
|
+
return new HumanMessage({
|
|
53
|
+
content,
|
|
54
|
+
id,
|
|
55
|
+
additional_kwargs: additionalKwargs,
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
case 'system':
|
|
59
|
+
case 'SystemMessage':
|
|
60
|
+
return new SystemMessage({
|
|
61
|
+
content,
|
|
62
|
+
id,
|
|
63
|
+
additional_kwargs: additionalKwargs,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
case 'tool':
|
|
67
|
+
case 'ToolMessage':
|
|
68
|
+
return new ToolMessage({
|
|
69
|
+
content,
|
|
70
|
+
id,
|
|
71
|
+
additional_kwargs: additionalKwargs,
|
|
72
|
+
tool_call_id: messageObj.tool_call_id || '',
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
default:
|
|
76
|
+
// Fallback: try to determine type from message structure
|
|
77
|
+
if (messageObj.tool_call_id) {
|
|
78
|
+
return new ToolMessage({
|
|
79
|
+
content,
|
|
80
|
+
id,
|
|
81
|
+
additional_kwargs: additionalKwargs,
|
|
82
|
+
tool_call_id: messageObj.tool_call_id,
|
|
83
|
+
});
|
|
84
|
+
} else if (messageObj.tool_calls || messageObj.invalid_tool_calls) {
|
|
85
|
+
return new AIMessage({
|
|
86
|
+
content,
|
|
87
|
+
id,
|
|
88
|
+
additional_kwargs: additionalKwargs,
|
|
89
|
+
tool_calls: messageObj.tool_calls || [],
|
|
90
|
+
invalid_tool_calls: messageObj.invalid_tool_calls || [],
|
|
91
|
+
});
|
|
92
|
+
} else {
|
|
93
|
+
// Default to HumanMessage for unknown types
|
|
94
|
+
logger.warn({
|
|
95
|
+
msg: 'Unknown message type, defaulting to HumanMessage',
|
|
96
|
+
messageType,
|
|
97
|
+
messageObj
|
|
98
|
+
});
|
|
99
|
+
return new HumanMessage({
|
|
100
|
+
content,
|
|
101
|
+
id,
|
|
102
|
+
additional_kwargs: additionalKwargs,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
} catch (error) {
|
|
107
|
+
logger.error({
|
|
108
|
+
msg: 'Error reconstructing message',
|
|
109
|
+
error,
|
|
110
|
+
messageObj
|
|
111
|
+
});
|
|
112
|
+
// Return a fallback HumanMessage in case of error
|
|
113
|
+
return new HumanMessage({
|
|
114
|
+
content: messageObj.content || 'Error reconstructing message',
|
|
115
|
+
id: messageObj.id,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
|
|
16
121
|
export default extractToolStateResponse;
|