@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.
@@ -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":"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"}
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
- declare const extractToolStateResponse: <State>(toolMessage: ToolMessage) => Partial<State>;
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,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,QAAA,MAAM,wBAAwB,GAAI,KAAK,EAAE,aAAa,WAAW,KAAG,OAAO,CAAC,KAAK,CAUhF,CAAC;AAEF,eAAe,wBAAwB,CAAC"}
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":";;AACA,qCAAkC;AAElC,MAAM,wBAAwB,GAAG,CAAQ,WAAwB,EAAkB,EAAE;IACnF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAiB,CAAC,CAAC;QACzD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;YACvE,OAAO,MAAM,CAAC,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,mCAAmC,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,kBAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"extractStateMemoryResponse.js","sourceRoot":"","sources":["../../src/utils/extractStateMemoryResponse.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minded-ai/mindedjs",
3
- "version": "1.0.122-beta.3",
3
+ "version": "1.0.122-beta.4",
4
4
  "description": "MindedJS is a TypeScript library for building agents.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -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 as any).messages || [])];
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 = <State>(toolMessage: ToolMessage): Partial<State> => {
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;