@minded-ai/mindedjs 1.0.100-beta.2 → 1.0.100-beta.5
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/addBrowserTaskNode.d.ts +3 -1
- package/dist/nodes/addBrowserTaskNode.d.ts.map +1 -1
- package/dist/nodes/addBrowserTaskNode.js +79 -32
- package/dist/nodes/addBrowserTaskNode.js.map +1 -1
- package/dist/nodes/nodeFactory.js +1 -1
- package/dist/nodes/nodeFactory.js.map +1 -1
- package/dist/types/Flows.types.d.ts +6 -0
- package/dist/types/Flows.types.d.ts.map +1 -1
- package/dist/types/Flows.types.js.map +1 -1
- package/package.json +1 -1
- package/src/nodes/addBrowserTaskNode.ts +98 -37
- package/src/nodes/nodeFactory.ts +2 -2
- package/src/types/Flows.types.ts +6 -0
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { BrowserTaskNode } from '../types/Flows.types';
|
|
2
2
|
import { PreCompiledGraph } from '../types/LangGraph.types';
|
|
3
3
|
import { Agent } from '../agent';
|
|
4
|
+
import { LLMProviders } from '../types/LLM.types';
|
|
4
5
|
type AddBrowserTaskNodeParams = {
|
|
5
6
|
graph: PreCompiledGraph;
|
|
6
7
|
node: BrowserTaskNode;
|
|
7
8
|
agent: Agent;
|
|
9
|
+
llm: (typeof LLMProviders)[keyof typeof LLMProviders];
|
|
8
10
|
};
|
|
9
|
-
export declare const addBrowserTaskNode: ({ graph, node, agent }: AddBrowserTaskNodeParams) => Promise<void>;
|
|
11
|
+
export declare const addBrowserTaskNode: ({ graph, node, agent, llm }: AddBrowserTaskNodeParams) => Promise<void>;
|
|
10
12
|
export {};
|
|
11
13
|
//# sourceMappingURL=addBrowserTaskNode.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addBrowserTaskNode.d.ts","sourceRoot":"","sources":["../../src/nodes/addBrowserTaskNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAY,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAO7E,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"addBrowserTaskNode.d.ts","sourceRoot":"","sources":["../../src/nodes/addBrowserTaskNode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAY,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAmB,MAAM,0BAA0B,CAAC;AAO7E,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGjC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,KAAK,wBAAwB,GAAG;IAC9B,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,6BAA6B,wBAAwB,kBA+I7F,CAAC"}
|
|
@@ -7,45 +7,92 @@ const history_1 = require("../utils/history");
|
|
|
7
7
|
const messages_1 = require("@langchain/core/messages");
|
|
8
8
|
const executeBrowserTask_1 = require("../browserTask/executeBrowserTask");
|
|
9
9
|
const uuid_1 = require("uuid");
|
|
10
|
-
const
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
const tools_1 = require("@langchain/core/tools");
|
|
12
|
+
const playbooks_1 = require("../playbooks/playbooks");
|
|
13
|
+
const addBrowserTaskNode = async ({ graph, node, agent, llm }) => {
|
|
11
14
|
const callback = async (state) => {
|
|
15
|
+
let inputArgs = {};
|
|
16
|
+
let toolCallId;
|
|
17
|
+
let toolCallingMessageId;
|
|
18
|
+
let toolCallingMessage;
|
|
19
|
+
// Check if inputSchema exists and has fields
|
|
20
|
+
if (node.inputSchema && node.inputSchema.length > 0) {
|
|
21
|
+
// Convert inputSchema to Zod schema
|
|
22
|
+
const zodSchemaFields = {};
|
|
23
|
+
for (const field of node.inputSchema) {
|
|
24
|
+
const baseType = field.type === 'string' ? zod_1.z.string() : zod_1.z.number();
|
|
25
|
+
zodSchemaFields[field.name] = field.required ? baseType : baseType.optional();
|
|
26
|
+
}
|
|
27
|
+
const zodSchema = zod_1.z.object(zodSchemaFields);
|
|
28
|
+
// Create tool definition
|
|
29
|
+
const browserTaskTool = (0, tools_1.tool)(() => { }, {
|
|
30
|
+
name: node.displayName,
|
|
31
|
+
description: node.prompt,
|
|
32
|
+
schema: zodSchema,
|
|
33
|
+
});
|
|
34
|
+
// Get compiled playbooks
|
|
35
|
+
const playbookParams = {
|
|
36
|
+
...state.memory,
|
|
37
|
+
state,
|
|
38
|
+
currentTime: new Date().toISOString(),
|
|
39
|
+
};
|
|
40
|
+
const compiledPlaybooks = (0, playbooks_1.compilePlaybooks)(agent.playbooks, playbookParams) || '';
|
|
41
|
+
// Create prompt for LLM
|
|
42
|
+
const toolPrompt = `${compiledPlaybooks ? compiledPlaybooks + '\n\n' : ''}
|
|
43
|
+
Additional context:
|
|
44
|
+
workflow memory: ${JSON.stringify(state.memory)}
|
|
45
|
+
`;
|
|
46
|
+
// Get tool call from LLM
|
|
47
|
+
const aiMessage = await llm
|
|
48
|
+
.bindTools([browserTaskTool], {
|
|
49
|
+
tool_choice: browserTaskTool.name,
|
|
50
|
+
})
|
|
51
|
+
.invoke([...state.messages, new messages_1.SystemMessage(toolPrompt)]);
|
|
52
|
+
if (!aiMessage.tool_calls || aiMessage.tool_calls.length === 0) {
|
|
53
|
+
throw new Error('Failed to generate tool call for browser task input');
|
|
54
|
+
}
|
|
55
|
+
// Extract input arguments
|
|
56
|
+
inputArgs = aiMessage.tool_calls[0].args;
|
|
57
|
+
toolCallId = aiMessage.tool_calls[0].id;
|
|
58
|
+
toolCallingMessageId = aiMessage.id;
|
|
59
|
+
toolCallingMessage = aiMessage;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// No input schema - create a minimal AI message with tool calls
|
|
63
|
+
toolCallId = (0, uuid_1.v4)();
|
|
64
|
+
toolCallingMessageId = (0, uuid_1.v4)();
|
|
65
|
+
// Create an AI message with tool_calls to satisfy the API requirement
|
|
66
|
+
toolCallingMessage = new messages_1.AIMessage({
|
|
67
|
+
content: '',
|
|
68
|
+
id: toolCallingMessageId,
|
|
69
|
+
tool_calls: [{
|
|
70
|
+
id: toolCallId,
|
|
71
|
+
name: 'browser-task',
|
|
72
|
+
args: {},
|
|
73
|
+
}],
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Update state with the tool calling message
|
|
77
|
+
await agent.compiledGraph.updateState(agent.getLangraphConfig(state.sessionId), {
|
|
78
|
+
messages: [toolCallingMessage],
|
|
79
|
+
}, node.name);
|
|
80
|
+
// Build the prompt with input arguments
|
|
12
81
|
const prompt = `
|
|
13
|
-
Follow the instructions. Any retrieved data should be printed as string and not saved to a file
|
|
14
|
-
|
|
15
|
-
${
|
|
16
|
-
|
|
82
|
+
# Follow the instructions. Any retrieved data should be printed as string and not saved to a file.
|
|
83
|
+
${state.memory ? `## Task context:\n${JSON.stringify(state.memory)}\n\n` : ''}
|
|
84
|
+
${Object.keys(inputArgs).length > 0 ? `## Input parameters:\n${JSON.stringify(inputArgs, null, 2)}\n\n` : ''}
|
|
85
|
+
## Task instructions:\n${node.prompt}\n\n
|
|
17
86
|
`;
|
|
18
|
-
logger_1.logger.info({ msg: `Executing browser task node ${node.displayName}`, prompt, model: node.model });
|
|
19
|
-
const toolCallId = (0, uuid_1.v4)();
|
|
20
|
-
const toolCallingMessageId = (0, uuid_1.v4)();
|
|
21
|
-
const toolCallingMessage = new messages_1.AIMessage({
|
|
22
|
-
id: toolCallingMessageId,
|
|
23
|
-
content: '',
|
|
24
|
-
tool_calls: [
|
|
25
|
-
{
|
|
26
|
-
id: toolCallId,
|
|
27
|
-
name: 'browser-task',
|
|
28
|
-
args: {
|
|
29
|
-
prompt,
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
additional_kwargs: {
|
|
34
|
-
mindedMetadata: {
|
|
35
|
-
nodeType: Flows_types_1.NodeType.BROWSER_TASK,
|
|
36
|
-
},
|
|
37
|
-
},
|
|
38
|
-
});
|
|
87
|
+
logger_1.logger.info({ msg: `Executing browser task node ${node.displayName}`, prompt, model: node.model, inputArgs });
|
|
39
88
|
try {
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
messages: [toolCallingMessage],
|
|
43
|
-
}, node.name);
|
|
89
|
+
const output = await (0, executeBrowserTask_1.executeBrowserTask)(prompt, node.model);
|
|
90
|
+
const result = output.split(` Result: `)[1] || output;
|
|
44
91
|
logger_1.logger.debug({ message: 'Browser task result', result });
|
|
45
92
|
const toolCall = new messages_1.ToolMessage({
|
|
46
93
|
id: (0, uuid_1.v4)(),
|
|
47
94
|
content: JSON.stringify({
|
|
48
|
-
result
|
|
95
|
+
result,
|
|
49
96
|
}),
|
|
50
97
|
name: 'browser-task',
|
|
51
98
|
tool_call_id: toolCallId,
|
|
@@ -61,7 +108,7 @@ const addBrowserTaskNode = async ({ graph, node, agent }) => {
|
|
|
61
108
|
type: Flows_types_1.NodeType.BROWSER_TASK,
|
|
62
109
|
nodeId: node.name,
|
|
63
110
|
nodeDisplayName: node.displayName,
|
|
64
|
-
raw:
|
|
111
|
+
raw: output,
|
|
65
112
|
messageIds: [toolCallingMessageId],
|
|
66
113
|
}),
|
|
67
114
|
messages: [toolCallingMessage, toolCall],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"addBrowserTaskNode.js","sourceRoot":"","sources":["../../src/nodes/addBrowserTaskNode.ts"],"names":[],"mappings":";;;AACA,sDAAiE;AAGjE,4CAAyC;AACzC,8CAAqD;AACrD,
|
|
1
|
+
{"version":3,"file":"addBrowserTaskNode.js","sourceRoot":"","sources":["../../src/nodes/addBrowserTaskNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ const nodeFactory = ({ graph, node, tools, llm, emit, agent, }) => {
|
|
|
31
31
|
(0, addJumpToNode_1.addJumpToNode)({ graph, node });
|
|
32
32
|
break;
|
|
33
33
|
case Flows_types_1.NodeType.BROWSER_TASK:
|
|
34
|
-
(0, addBrowserTaskNode_1.addBrowserTaskNode)({ graph, node, agent });
|
|
34
|
+
(0, addBrowserTaskNode_1.addBrowserTaskNode)({ graph, node, agent, llm });
|
|
35
35
|
break;
|
|
36
36
|
default:
|
|
37
37
|
throw new Error(`Unsupported node type: ${nodeType}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeFactory.js","sourceRoot":"","sources":["../../src/nodes/nodeFactory.ts"],"names":[],"mappings":";;;AAAA,sDAAsD;AAGtD,+CAA4C;AAC5C,mDAAgD;AAGhD,qDAAkD;AAClD,qDAAkD;AAGlD,mDAAgD;AAChD,uDAAoD;AACpD,6DAA0D;AAEnD,MAAM,WAAW,GAAG,CAAC,EAC1B,KAAK,EACL,IAAI,EACJ,KAAK,EACL,GAAG,EACH,IAAI,EACJ,KAAK,GAQN,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,sBAAQ,CAAC,OAAO;YACnB,IAAA,+BAAc,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChC,MAAM;QACR,KAAK,sBAAQ,CAAC,IAAI;YAChB,IAAA,yBAAW,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YAChD,MAAM;QACR,KAAK,sBAAQ,CAAC,QAAQ;YACpB,IAAA,iCAAe,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,sBAAQ,CAAC,QAAQ;YACpB,IAAA,+BAAc,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5C,MAAM;QACR,KAAK,sBAAQ,CAAC,WAAW;YACvB,IAAA,6BAAa,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,MAAM;QACR,KAAK,sBAAQ,CAAC,YAAY;YACxB,IAAA,6BAAa,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,sBAAQ,CAAC,YAAY;YACxB,IAAA,uCAAkB,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"nodeFactory.js","sourceRoot":"","sources":["../../src/nodes/nodeFactory.ts"],"names":[],"mappings":";;;AAAA,sDAAsD;AAGtD,+CAA4C;AAC5C,mDAAgD;AAGhD,qDAAkD;AAClD,qDAAkD;AAGlD,mDAAgD;AAChD,uDAAoD;AACpD,6DAA0D;AAEnD,MAAM,WAAW,GAAG,CAAC,EAC1B,KAAK,EACL,IAAI,EACJ,KAAK,EACL,GAAG,EACH,IAAI,EACJ,KAAK,GAQN,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,sBAAQ,CAAC,OAAO;YACnB,IAAA,+BAAc,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAChC,MAAM;QACR,KAAK,sBAAQ,CAAC,IAAI;YAChB,IAAA,yBAAW,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YAChD,MAAM;QACR,KAAK,sBAAQ,CAAC,QAAQ;YACpB,IAAA,iCAAe,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,sBAAQ,CAAC,QAAQ;YACpB,IAAA,+BAAc,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5C,MAAM;QACR,KAAK,sBAAQ,CAAC,WAAW;YACvB,IAAA,6BAAa,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,MAAM;QACR,KAAK,sBAAQ,CAAC,YAAY;YACxB,IAAA,6BAAa,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/B,MAAM;QACR,KAAK,sBAAQ,CAAC,YAAY;YACxB,IAAA,uCAAkB,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAChD,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC,CAAC;AAzCW,QAAA,WAAW,eAyCtB"}
|
|
@@ -81,6 +81,12 @@ export interface BrowserTaskNode extends BaseNode {
|
|
|
81
81
|
type: NodeType.BROWSER_TASK;
|
|
82
82
|
prompt: string;
|
|
83
83
|
model?: string;
|
|
84
|
+
inputSchema?: {
|
|
85
|
+
name: string;
|
|
86
|
+
type: 'string' | 'number';
|
|
87
|
+
description?: string;
|
|
88
|
+
required?: boolean;
|
|
89
|
+
}[];
|
|
84
90
|
}
|
|
85
91
|
export type TriggerNode = AppTriggerNode | WebhookTriggerNode | ManualTriggerNode | VoiceTriggerNode;
|
|
86
92
|
export interface JunctionNode extends BaseNode {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flows.types.d.ts","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,oBAAY,QAAQ;IAClB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,QAAQ,YAAY;IACpB,WAAW,eAAe;IAC1B,YAAY,eAAe;IAC3B,YAAY,gBAAgB;CAC7B;AAED,oBAAY,QAAQ;IAClB,iBAAiB,qBAAqB;IACtC,gBAAgB,oBAAoB;IACpC,YAAY,gBAAgB;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,oBAAY,WAAW;IACrB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,cAAe,SAAQ,eAAe,EAAE,WAAW;IAClE,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC;IAC/B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Flows.types.d.ts","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flows.types.js","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":";;;AAMA,IAAY,QAQX;AARD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;IACrB,yBAAa,CAAA;IACb,gCAAoB,CAAA;IACpB,sCAA0B,CAAA;IAC1B,uCAA2B,CAAA;IAC3B,wCAA4B,CAAA;AAC9B,CAAC,EARW,QAAQ,wBAAR,QAAQ,QAQnB;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,kDAAsC,CAAA;IACtC,gDAAoC,CAAA;IACpC,wCAA4B,CAAA;AAC9B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAWD,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,0BAAW,CAAA;IACX,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,8BAAe,CAAA;AACjB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;
|
|
1
|
+
{"version":3,"file":"Flows.types.js","sourceRoot":"","sources":["../../src/types/Flows.types.ts"],"names":[],"mappings":";;;AAMA,IAAY,QAQX;AARD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;IACrB,yBAAa,CAAA;IACb,gCAAoB,CAAA;IACpB,sCAA0B,CAAA;IAC1B,uCAA2B,CAAA;IAC3B,wCAA4B,CAAA;AAC9B,CAAC,EARW,QAAQ,wBAAR,QAAQ,QAQnB;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,kDAAsC,CAAA;IACtC,gDAAoC,CAAA;IACpC,wCAA4B,CAAA;AAC9B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAWD,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,0BAAW,CAAA;IACX,kCAAmB,CAAA;IACnB,gCAAiB,CAAA;IACjB,8BAAe,CAAA;AACjB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB;AAkHD,IAAY,mBAEX;AAFD,WAAY,mBAAmB;IAC7B,2CAAoB,CAAA;AACtB,CAAC,EAFW,mBAAmB,mCAAnB,mBAAmB,QAE9B;AAsBD,IAAY,oBAOX;AAPD,WAAY,oBAAoB;IAC9B,yCAAiB,CAAA;IACjB,yCAAiB,CAAA;IACjB,2CAAmB,CAAA;IACnB,uCAAe,CAAA;IACf,yCAAiB,CAAA;IACjB,mCAAW,CAAA;AACb,CAAC,EAPW,oBAAoB,oCAApB,oBAAoB,QAO/B;AAQD,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,4DAAuC,CAAA;IACvC,oDAA+B,CAAA;AACjC,CAAC,EAJW,iBAAiB,iCAAjB,iBAAiB,QAI5B;AAED,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,4DAAqC,CAAA;IACrC,4CAAqB,CAAA;AACvB,CAAC,EAHW,mBAAmB,mCAAnB,mBAAmB,QAG9B"}
|
package/package.json
CHANGED
|
@@ -4,62 +4,121 @@ import { PreCompiledGraph, stateAnnotation } from '../types/LangGraph.types';
|
|
|
4
4
|
import { HistoryStep } from '../types/Agent.types';
|
|
5
5
|
import { logger } from '../utils/logger';
|
|
6
6
|
import { createHistoryStep } from '../utils/history';
|
|
7
|
-
import {
|
|
7
|
+
import { ToolMessage, SystemMessage, AIMessage } from '@langchain/core/messages';
|
|
8
8
|
import { executeBrowserTask } from '../browserTask/executeBrowserTask';
|
|
9
9
|
import { v4 as uuidv4 } from 'uuid';
|
|
10
10
|
import { Agent } from '../agent';
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { tool as langchainTool } from '@langchain/core/tools';
|
|
13
|
+
import { LLMProviders } from '../types/LLM.types';
|
|
14
|
+
import { compilePlaybooks } from '../playbooks/playbooks';
|
|
11
15
|
|
|
12
16
|
type AddBrowserTaskNodeParams = {
|
|
13
17
|
graph: PreCompiledGraph;
|
|
14
18
|
node: BrowserTaskNode;
|
|
15
19
|
agent: Agent;
|
|
20
|
+
llm: (typeof LLMProviders)[keyof typeof LLMProviders];
|
|
16
21
|
};
|
|
17
22
|
|
|
18
|
-
export const addBrowserTaskNode = async ({ graph, node, agent }: AddBrowserTaskNodeParams) => {
|
|
23
|
+
export const addBrowserTaskNode = async ({ graph, node, agent, llm }: AddBrowserTaskNodeParams) => {
|
|
19
24
|
const callback: RunnableLike = async (state: typeof stateAnnotation.State) => {
|
|
25
|
+
let inputArgs: Record<string, any> = {};
|
|
26
|
+
let toolCallId: string;
|
|
27
|
+
let toolCallingMessageId: string;
|
|
28
|
+
let toolCallingMessage: AIMessage;
|
|
20
29
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
// Check if inputSchema exists and has fields
|
|
31
|
+
if (node.inputSchema && node.inputSchema.length > 0) {
|
|
32
|
+
// Convert inputSchema to Zod schema
|
|
33
|
+
const zodSchemaFields: Record<string, z.ZodType> = {};
|
|
34
|
+
for (const field of node.inputSchema) {
|
|
35
|
+
const baseType = field.type === 'string' ? z.string() : z.number();
|
|
36
|
+
zodSchemaFields[field.name] = field.required ? baseType : baseType.optional();
|
|
37
|
+
}
|
|
38
|
+
const zodSchema = z.object(zodSchemaFields);
|
|
39
|
+
|
|
40
|
+
// Create tool definition
|
|
41
|
+
const browserTaskTool = langchainTool(() => { }, {
|
|
42
|
+
name: node.displayName,
|
|
43
|
+
description: node.prompt,
|
|
44
|
+
schema: zodSchema,
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Get compiled playbooks
|
|
48
|
+
const playbookParams = {
|
|
49
|
+
...state.memory,
|
|
50
|
+
state,
|
|
51
|
+
currentTime: new Date().toISOString(),
|
|
52
|
+
};
|
|
53
|
+
const compiledPlaybooks = compilePlaybooks(agent.playbooks, playbookParams) || '';
|
|
54
|
+
|
|
55
|
+
// Create prompt for LLM
|
|
56
|
+
const toolPrompt = `${compiledPlaybooks ? compiledPlaybooks + '\n\n' : ''}
|
|
57
|
+
Additional context:
|
|
58
|
+
workflow memory: ${JSON.stringify(state.memory)}
|
|
59
|
+
`;
|
|
60
|
+
|
|
61
|
+
// Get tool call from LLM
|
|
62
|
+
const aiMessage = await llm
|
|
63
|
+
.bindTools([browserTaskTool], {
|
|
64
|
+
tool_choice: browserTaskTool.name,
|
|
65
|
+
})
|
|
66
|
+
.invoke([...state.messages, new SystemMessage(toolPrompt)]);
|
|
67
|
+
|
|
68
|
+
if (!aiMessage.tool_calls || aiMessage.tool_calls.length === 0) {
|
|
69
|
+
throw new Error('Failed to generate tool call for browser task input');
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Extract input arguments
|
|
73
|
+
inputArgs = aiMessage.tool_calls[0].args;
|
|
74
|
+
toolCallId = aiMessage.tool_calls[0].id;
|
|
75
|
+
toolCallingMessageId = aiMessage.id!;
|
|
76
|
+
toolCallingMessage = aiMessage;
|
|
77
|
+
} else {
|
|
78
|
+
// No input schema - create a minimal AI message with tool calls
|
|
79
|
+
toolCallId = uuidv4();
|
|
80
|
+
toolCallingMessageId = uuidv4();
|
|
81
|
+
|
|
82
|
+
// Create an AI message with tool_calls to satisfy the API requirement
|
|
83
|
+
toolCallingMessage = new AIMessage({
|
|
84
|
+
content: '',
|
|
85
|
+
id: toolCallingMessageId,
|
|
86
|
+
tool_calls: [{
|
|
36
87
|
id: toolCallId,
|
|
37
88
|
name: 'browser-task',
|
|
38
|
-
args: {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
89
|
+
args: {},
|
|
90
|
+
}],
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Update state with the tool calling message
|
|
95
|
+
await agent.compiledGraph.updateState(
|
|
96
|
+
agent.getLangraphConfig(state.sessionId),
|
|
97
|
+
{
|
|
98
|
+
messages: [toolCallingMessage],
|
|
47
99
|
},
|
|
48
|
-
|
|
100
|
+
node.name,
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
// Build the prompt with input arguments
|
|
104
|
+
const prompt = `
|
|
105
|
+
# Follow the instructions. Any retrieved data should be printed as string and not saved to a file.
|
|
106
|
+
${state.memory ? `## Task context:\n${JSON.stringify(state.memory)}\n\n` : ''}
|
|
107
|
+
${Object.keys(inputArgs).length > 0 ? `## Input parameters:\n${JSON.stringify(inputArgs, null, 2)}\n\n` : ''}
|
|
108
|
+
## Task instructions:\n${node.prompt}\n\n
|
|
109
|
+
`;
|
|
110
|
+
|
|
111
|
+
logger.info({ msg: `Executing browser task node ${node.displayName}`, prompt, model: node.model, inputArgs });
|
|
112
|
+
|
|
49
113
|
try {
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
messages: [toolCallingMessage],
|
|
55
|
-
},
|
|
56
|
-
node.name,
|
|
57
|
-
);
|
|
114
|
+
const output = await executeBrowserTask(prompt, node.model);
|
|
115
|
+
const result = output.split(` Result: `)[1] || output;
|
|
116
|
+
|
|
58
117
|
logger.debug({ message: 'Browser task result', result });
|
|
59
118
|
const toolCall = new ToolMessage({
|
|
60
119
|
id: uuidv4(),
|
|
61
120
|
content: JSON.stringify({
|
|
62
|
-
result
|
|
121
|
+
result,
|
|
63
122
|
}),
|
|
64
123
|
name: 'browser-task',
|
|
65
124
|
tool_call_id: toolCallId,
|
|
@@ -70,12 +129,13 @@ export const addBrowserTaskNode = async ({ graph, node, agent }: AddBrowserTaskN
|
|
|
70
129
|
},
|
|
71
130
|
},
|
|
72
131
|
});
|
|
132
|
+
|
|
73
133
|
return {
|
|
74
134
|
history: createHistoryStep<HistoryStep>(state.history, {
|
|
75
135
|
type: NodeType.BROWSER_TASK,
|
|
76
136
|
nodeId: node.name,
|
|
77
137
|
nodeDisplayName: node.displayName,
|
|
78
|
-
raw:
|
|
138
|
+
raw: output,
|
|
79
139
|
messageIds: [toolCallingMessageId],
|
|
80
140
|
}),
|
|
81
141
|
messages: [toolCallingMessage, toolCall],
|
|
@@ -96,6 +156,7 @@ export const addBrowserTaskNode = async ({ graph, node, agent }: AddBrowserTaskN
|
|
|
96
156
|
},
|
|
97
157
|
},
|
|
98
158
|
});
|
|
159
|
+
|
|
99
160
|
return {
|
|
100
161
|
messages: [toolCallingMessage, toolCall],
|
|
101
162
|
};
|
package/src/nodes/nodeFactory.ts
CHANGED
|
@@ -49,9 +49,9 @@ export const nodeFactory = ({
|
|
|
49
49
|
addJumpToNode({ graph, node });
|
|
50
50
|
break;
|
|
51
51
|
case NodeType.BROWSER_TASK:
|
|
52
|
-
addBrowserTaskNode({ graph, node, agent });
|
|
52
|
+
addBrowserTaskNode({ graph, node, agent, llm });
|
|
53
53
|
break;
|
|
54
54
|
default:
|
|
55
55
|
throw new Error(`Unsupported node type: ${nodeType}`);
|
|
56
56
|
}
|
|
57
|
-
};
|
|
57
|
+
};
|
package/src/types/Flows.types.ts
CHANGED
|
@@ -94,6 +94,12 @@ export interface BrowserTaskNode extends BaseNode {
|
|
|
94
94
|
type: NodeType.BROWSER_TASK;
|
|
95
95
|
prompt: string;
|
|
96
96
|
model?: string;
|
|
97
|
+
inputSchema?: {
|
|
98
|
+
name: string;
|
|
99
|
+
type: 'string' | 'number';
|
|
100
|
+
description?: string;
|
|
101
|
+
required?: boolean;
|
|
102
|
+
}[];
|
|
97
103
|
}
|
|
98
104
|
|
|
99
105
|
export type TriggerNode = AppTriggerNode | WebhookTriggerNode | ManualTriggerNode | VoiceTriggerNode;
|