@librechat/agents 1.4.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.
- package/LICENSE +21 -0
- package/dist/cjs/common/enum.cjs +108 -0
- package/dist/cjs/common/enum.cjs.map +1 -0
- package/dist/cjs/events.cjs +104 -0
- package/dist/cjs/events.cjs.map +1 -0
- package/dist/cjs/graphs/Graph.cjs +313 -0
- package/dist/cjs/graphs/Graph.cjs.map +1 -0
- package/dist/cjs/llm/providers.cjs +30 -0
- package/dist/cjs/llm/providers.cjs.map +1 -0
- package/dist/cjs/main.cjs +59 -0
- package/dist/cjs/main.cjs.map +1 -0
- package/dist/cjs/messages.cjs +195 -0
- package/dist/cjs/messages.cjs.map +1 -0
- package/dist/cjs/run.cjs +106 -0
- package/dist/cjs/run.cjs.map +1 -0
- package/dist/cjs/stream.cjs +133 -0
- package/dist/cjs/stream.cjs.map +1 -0
- package/dist/cjs/tools/ToolNode.cjs +80 -0
- package/dist/cjs/tools/ToolNode.cjs.map +1 -0
- package/dist/cjs/utils/graph.cjs +16 -0
- package/dist/cjs/utils/graph.cjs.map +1 -0
- package/dist/cjs/utils/run.cjs +59 -0
- package/dist/cjs/utils/run.cjs.map +1 -0
- package/dist/esm/common/enum.mjs +108 -0
- package/dist/esm/common/enum.mjs.map +1 -0
- package/dist/esm/events.mjs +97 -0
- package/dist/esm/events.mjs.map +1 -0
- package/dist/esm/graphs/Graph.mjs +310 -0
- package/dist/esm/graphs/Graph.mjs.map +1 -0
- package/dist/esm/llm/providers.mjs +27 -0
- package/dist/esm/llm/providers.mjs.map +1 -0
- package/dist/esm/main.mjs +9 -0
- package/dist/esm/main.mjs.map +1 -0
- package/dist/esm/messages.mjs +190 -0
- package/dist/esm/messages.mjs.map +1 -0
- package/dist/esm/run.mjs +104 -0
- package/dist/esm/run.mjs.map +1 -0
- package/dist/esm/stream.mjs +131 -0
- package/dist/esm/stream.mjs.map +1 -0
- package/dist/esm/tools/ToolNode.mjs +77 -0
- package/dist/esm/tools/ToolNode.mjs.map +1 -0
- package/dist/esm/utils/graph.mjs +13 -0
- package/dist/esm/utils/graph.mjs.map +1 -0
- package/dist/esm/utils/run.mjs +57 -0
- package/dist/esm/utils/run.mjs.map +1 -0
- package/dist/types/common/enum.d.ts +79 -0
- package/dist/types/common/index.d.ts +1 -0
- package/dist/types/events.d.ts +22 -0
- package/dist/types/graphs/Graph.d.ts +86 -0
- package/dist/types/graphs/index.d.ts +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/llm/providers.d.ts +4 -0
- package/dist/types/messages.d.ts +10 -0
- package/dist/types/prompts/collab.d.ts +1 -0
- package/dist/types/prompts/index.d.ts +2 -0
- package/dist/types/prompts/taskmanager.d.ts +41 -0
- package/dist/types/run.d.ts +21 -0
- package/dist/types/scripts/args.d.ts +6 -0
- package/dist/types/scripts/cli.d.ts +1 -0
- package/dist/types/scripts/cli2.d.ts +1 -0
- package/dist/types/scripts/cli3.d.ts +1 -0
- package/dist/types/scripts/cli4.d.ts +1 -0
- package/dist/types/scripts/cli5.d.ts +1 -0
- package/dist/types/scripts/empty_input.d.ts +1 -0
- package/dist/types/stream.d.ts +5 -0
- package/dist/types/tools/ToolNode.d.ts +15 -0
- package/dist/types/tools/example.d.ts +26 -0
- package/dist/types/types/graph.d.ts +108 -0
- package/dist/types/types/index.d.ts +5 -0
- package/dist/types/types/llm.d.ts +25 -0
- package/dist/types/types/run.d.ts +53 -0
- package/dist/types/types/stream.d.ts +134 -0
- package/dist/types/types/tools.d.ts +24 -0
- package/dist/types/utils/graph.d.ts +2 -0
- package/dist/types/utils/index.d.ts +2 -0
- package/dist/types/utils/llmConfig.d.ts +2 -0
- package/dist/types/utils/logging.d.ts +1 -0
- package/dist/types/utils/run.d.ts +20 -0
- package/package.json +142 -0
- package/src/common/enum.ts +121 -0
- package/src/common/index.ts +2 -0
- package/src/events.ts +110 -0
- package/src/graphs/Graph.ts +416 -0
- package/src/graphs/index.ts +1 -0
- package/src/index.ts +15 -0
- package/src/llm/providers.ts +27 -0
- package/src/messages.ts +210 -0
- package/src/prompts/collab.ts +6 -0
- package/src/prompts/index.ts +2 -0
- package/src/prompts/taskmanager.ts +61 -0
- package/src/proto/CollabGraph.ts +269 -0
- package/src/proto/TaskManager.ts +243 -0
- package/src/proto/collab.ts +200 -0
- package/src/proto/collab_design.ts +184 -0
- package/src/proto/collab_design_v2.ts +224 -0
- package/src/proto/collab_design_v3.ts +255 -0
- package/src/proto/collab_design_v4.ts +220 -0
- package/src/proto/collab_design_v5.ts +251 -0
- package/src/proto/collab_graph.ts +181 -0
- package/src/proto/collab_original.ts +123 -0
- package/src/proto/example.ts +93 -0
- package/src/proto/example_new.ts +68 -0
- package/src/proto/example_old.ts +201 -0
- package/src/proto/example_test.ts +152 -0
- package/src/proto/example_test_anthropic.ts +100 -0
- package/src/proto/log_stream.ts +202 -0
- package/src/proto/main_collab_community_event.ts +133 -0
- package/src/proto/main_collab_design_v2.ts +96 -0
- package/src/proto/main_collab_design_v4.ts +100 -0
- package/src/proto/main_collab_design_v5.ts +135 -0
- package/src/proto/main_collab_global_analysis.ts +122 -0
- package/src/proto/main_collab_hackathon_event.ts +153 -0
- package/src/proto/main_collab_space_mission.ts +153 -0
- package/src/proto/main_philosophy.ts +210 -0
- package/src/proto/original_script.ts +126 -0
- package/src/proto/standard.ts +100 -0
- package/src/proto/stream.ts +56 -0
- package/src/proto/tasks.ts +118 -0
- package/src/proto/tools/global_analysis_tools.ts +86 -0
- package/src/proto/tools/space_mission_tools.ts +60 -0
- package/src/proto/vertexai.ts +54 -0
- package/src/run.ts +132 -0
- package/src/scripts/args.ts +42 -0
- package/src/scripts/cli.ts +166 -0
- package/src/scripts/cli2.ts +124 -0
- package/src/scripts/cli3.ts +175 -0
- package/src/scripts/cli4.ts +182 -0
- package/src/scripts/cli5.ts +182 -0
- package/src/scripts/empty_input.ts +136 -0
- package/src/stream.ts +145 -0
- package/src/tools/ToolNode.ts +108 -0
- package/src/tools/example.ts +52 -0
- package/src/types/graph.ts +126 -0
- package/src/types/index.ts +6 -0
- package/src/types/llm.ts +38 -0
- package/src/types/run.ts +56 -0
- package/src/types/stream.ts +174 -0
- package/src/types/tools.ts +31 -0
- package/src/utils/graph.ts +11 -0
- package/src/utils/index.ts +2 -0
- package/src/utils/llmConfig.ts +50 -0
- package/src/utils/logging.ts +48 -0
- package/src/utils/run.ts +91 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 LibreChat
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Enum representing the various event types emitted during the execution of runnables.
|
|
5
|
+
* These events provide real-time information about the progress and state of different components.
|
|
6
|
+
*
|
|
7
|
+
* @enum {string}
|
|
8
|
+
*/
|
|
9
|
+
exports.GraphEvents = void 0;
|
|
10
|
+
(function (GraphEvents) {
|
|
11
|
+
/* Custom Events */
|
|
12
|
+
/** [Custom] Delta event for run steps (message creation and tool calls) */
|
|
13
|
+
GraphEvents["ON_RUN_STEP"] = "on_run_step";
|
|
14
|
+
/** [Custom] Delta event for run steps (tool calls) */
|
|
15
|
+
GraphEvents["ON_RUN_STEP_DELTA"] = "on_run_step_delta";
|
|
16
|
+
/** [Custom] Completed event for run steps (tool calls) */
|
|
17
|
+
GraphEvents["ON_RUN_STEP_COMPLETED"] = "on_run_step_completed";
|
|
18
|
+
/** [Custom] Delta events for messages */
|
|
19
|
+
GraphEvents["ON_MESSAGE_DELTA"] = "on_message_delta";
|
|
20
|
+
/* Official Events */
|
|
21
|
+
/** Custom event, emitted by system */
|
|
22
|
+
GraphEvents["ON_CUSTOM_EVENT"] = "on_custom_event";
|
|
23
|
+
/** Emitted when a chat model starts processing. */
|
|
24
|
+
GraphEvents["CHAT_MODEL_START"] = "on_chat_model_start";
|
|
25
|
+
/** Emitted when a chat model streams a chunk of its response. */
|
|
26
|
+
GraphEvents["CHAT_MODEL_STREAM"] = "on_chat_model_stream";
|
|
27
|
+
/** Emitted when a chat model completes its processing. */
|
|
28
|
+
GraphEvents["CHAT_MODEL_END"] = "on_chat_model_end";
|
|
29
|
+
/** Emitted when a language model starts processing. */
|
|
30
|
+
GraphEvents["LLM_START"] = "on_llm_start";
|
|
31
|
+
/** Emitted when a language model streams a chunk of its response. */
|
|
32
|
+
GraphEvents["LLM_STREAM"] = "on_llm_stream";
|
|
33
|
+
/** Emitted when a language model completes its processing. */
|
|
34
|
+
GraphEvents["LLM_END"] = "on_llm_end";
|
|
35
|
+
/** Emitted when a chain starts processing. */
|
|
36
|
+
GraphEvents["CHAIN_START"] = "on_chain_start";
|
|
37
|
+
/** Emitted when a chain streams a chunk of its output. */
|
|
38
|
+
GraphEvents["CHAIN_STREAM"] = "on_chain_stream";
|
|
39
|
+
/** Emitted when a chain completes its processing. */
|
|
40
|
+
GraphEvents["CHAIN_END"] = "on_chain_end";
|
|
41
|
+
/** Emitted when a tool starts its operation. */
|
|
42
|
+
GraphEvents["TOOL_START"] = "on_tool_start";
|
|
43
|
+
/** Emitted when a tool completes its operation. */
|
|
44
|
+
GraphEvents["TOOL_END"] = "on_tool_end";
|
|
45
|
+
/** Emitted when a retriever starts its operation. */
|
|
46
|
+
GraphEvents["RETRIEVER_START"] = "on_retriever_start";
|
|
47
|
+
/** Emitted when a retriever completes its operation. */
|
|
48
|
+
GraphEvents["RETRIEVER_END"] = "on_retriever_end";
|
|
49
|
+
/** Emitted when a prompt starts processing. */
|
|
50
|
+
GraphEvents["PROMPT_START"] = "on_prompt_start";
|
|
51
|
+
/** Emitted when a prompt completes its processing. */
|
|
52
|
+
GraphEvents["PROMPT_END"] = "on_prompt_end";
|
|
53
|
+
})(exports.GraphEvents || (exports.GraphEvents = {}));
|
|
54
|
+
exports.Providers = void 0;
|
|
55
|
+
(function (Providers) {
|
|
56
|
+
Providers["OPENAI"] = "openAI";
|
|
57
|
+
Providers["BEDROCK"] = "bedrock";
|
|
58
|
+
Providers["VERTEXAI"] = "vertexai";
|
|
59
|
+
Providers["AWS"] = "aws";
|
|
60
|
+
Providers["ANTHROPIC"] = "anthropic";
|
|
61
|
+
Providers["MISTRALAI"] = "mistralai";
|
|
62
|
+
})(exports.Providers || (exports.Providers = {}));
|
|
63
|
+
exports.GraphNodeKeys = void 0;
|
|
64
|
+
(function (GraphNodeKeys) {
|
|
65
|
+
GraphNodeKeys["TOOLS"] = "tools";
|
|
66
|
+
GraphNodeKeys["AGENT"] = "agent";
|
|
67
|
+
GraphNodeKeys["PRE_TOOLS"] = "pre_tools";
|
|
68
|
+
GraphNodeKeys["POST_TOOLS"] = "post_tools";
|
|
69
|
+
})(exports.GraphNodeKeys || (exports.GraphNodeKeys = {}));
|
|
70
|
+
exports.GraphNodeActions = void 0;
|
|
71
|
+
(function (GraphNodeActions) {
|
|
72
|
+
GraphNodeActions["TOOL_NODE"] = "tool_node";
|
|
73
|
+
GraphNodeActions["CALL_MODEL"] = "call_model";
|
|
74
|
+
GraphNodeActions["ROUTE_MESSAGE"] = "route_message";
|
|
75
|
+
})(exports.GraphNodeActions || (exports.GraphNodeActions = {}));
|
|
76
|
+
exports.CommonEvents = void 0;
|
|
77
|
+
(function (CommonEvents) {
|
|
78
|
+
CommonEvents["LANGGRAPH"] = "LangGraph";
|
|
79
|
+
})(exports.CommonEvents || (exports.CommonEvents = {}));
|
|
80
|
+
exports.StepTypes = void 0;
|
|
81
|
+
(function (StepTypes) {
|
|
82
|
+
StepTypes["TOOL_CALLS"] = "tool_calls";
|
|
83
|
+
StepTypes["MESSAGE_CREATION"] = "message_creation";
|
|
84
|
+
})(exports.StepTypes || (exports.StepTypes = {}));
|
|
85
|
+
exports.Callback = void 0;
|
|
86
|
+
(function (Callback) {
|
|
87
|
+
Callback["TOOL_ERROR"] = "handleToolError";
|
|
88
|
+
Callback["TOOL_START"] = "handleToolStart";
|
|
89
|
+
Callback["TOOL_END"] = "handleToolEnd";
|
|
90
|
+
/*
|
|
91
|
+
LLM_START = 'handleLLMStart',
|
|
92
|
+
LLM_NEW_TOKEN = 'handleLLMNewToken',
|
|
93
|
+
LLM_ERROR = 'handleLLMError',
|
|
94
|
+
LLM_END = 'handleLLMEnd',
|
|
95
|
+
CHAT_MODEL_START = 'handleChatModelStart',
|
|
96
|
+
CHAIN_START = 'handleChainStart',
|
|
97
|
+
CHAIN_ERROR = 'handleChainError',
|
|
98
|
+
CHAIN_END = 'handleChainEnd',
|
|
99
|
+
TEXT = 'handleText',
|
|
100
|
+
AGENT_ACTION = 'handleAgentAction',
|
|
101
|
+
AGENT_END = 'handleAgentEnd',
|
|
102
|
+
RETRIEVER_START = 'handleRetrieverStart',
|
|
103
|
+
RETRIEVER_END = 'handleRetrieverEnd',
|
|
104
|
+
RETRIEVER_ERROR = 'handleRetrieverError',
|
|
105
|
+
CUSTOM_EVENT = 'handleCustomEvent'
|
|
106
|
+
*/
|
|
107
|
+
})(exports.Callback || (exports.Callback = {}));
|
|
108
|
+
//# sourceMappingURL=enum.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enum.cjs","sources":["../../../src/common/enum.ts"],"sourcesContent":["/**\n * Enum representing the various event types emitted during the execution of runnables.\n * These events provide real-time information about the progress and state of different components.\n *\n * @enum {string}\n */\nexport enum GraphEvents {\n /* Custom Events */\n\n /** [Custom] Delta event for run steps (message creation and tool calls) */\n ON_RUN_STEP = 'on_run_step',\n /** [Custom] Delta event for run steps (tool calls) */\n ON_RUN_STEP_DELTA = 'on_run_step_delta',\n /** [Custom] Completed event for run steps (tool calls) */\n ON_RUN_STEP_COMPLETED = 'on_run_step_completed',\n /** [Custom] Delta events for messages */\n ON_MESSAGE_DELTA = 'on_message_delta',\n\n /* Official Events */\n\n /** Custom event, emitted by system */\n ON_CUSTOM_EVENT = 'on_custom_event',\n /** Emitted when a chat model starts processing. */\n CHAT_MODEL_START = 'on_chat_model_start',\n\n /** Emitted when a chat model streams a chunk of its response. */\n CHAT_MODEL_STREAM = 'on_chat_model_stream',\n\n /** Emitted when a chat model completes its processing. */\n CHAT_MODEL_END = 'on_chat_model_end',\n\n /** Emitted when a language model starts processing. */\n LLM_START = 'on_llm_start',\n\n /** Emitted when a language model streams a chunk of its response. */\n LLM_STREAM = 'on_llm_stream',\n\n /** Emitted when a language model completes its processing. */\n LLM_END = 'on_llm_end',\n\n /** Emitted when a chain starts processing. */\n CHAIN_START = 'on_chain_start',\n\n /** Emitted when a chain streams a chunk of its output. */\n CHAIN_STREAM = 'on_chain_stream',\n\n /** Emitted when a chain completes its processing. */\n CHAIN_END = 'on_chain_end',\n\n /** Emitted when a tool starts its operation. */\n TOOL_START = 'on_tool_start',\n\n /** Emitted when a tool completes its operation. */\n TOOL_END = 'on_tool_end',\n\n /** Emitted when a retriever starts its operation. */\n RETRIEVER_START = 'on_retriever_start',\n\n /** Emitted when a retriever completes its operation. */\n RETRIEVER_END = 'on_retriever_end',\n\n /** Emitted when a prompt starts processing. */\n PROMPT_START = 'on_prompt_start',\n\n /** Emitted when a prompt completes its processing. */\n PROMPT_END = 'on_prompt_end'\n}\n\nexport enum Providers {\n OPENAI = 'openAI',\n BEDROCK = 'bedrock',\n VERTEXAI = 'vertexai',\n AWS = 'aws',\n ANTHROPIC = 'anthropic',\n MISTRALAI = 'mistralai',\n}\n\nexport enum GraphNodeKeys {\n TOOLS = 'tools',\n AGENT = 'agent',\n PRE_TOOLS = 'pre_tools',\n POST_TOOLS = 'post_tools',\n}\n\nexport enum GraphNodeActions {\n TOOL_NODE = 'tool_node',\n CALL_MODEL = 'call_model',\n ROUTE_MESSAGE = 'route_message',\n}\n\nexport enum CommonEvents {\n LANGGRAPH = 'LangGraph',\n}\n\nexport enum StepTypes {\n TOOL_CALLS = 'tool_calls',\n MESSAGE_CREATION = 'message_creation'\n}\n\nexport enum Callback {\n TOOL_ERROR = 'handleToolError',\n TOOL_START = 'handleToolStart',\n TOOL_END = 'handleToolEnd',\n /*\n LLM_START = 'handleLLMStart',\n LLM_NEW_TOKEN = 'handleLLMNewToken',\n LLM_ERROR = 'handleLLMError',\n LLM_END = 'handleLLMEnd',\n CHAT_MODEL_START = 'handleChatModelStart',\n CHAIN_START = 'handleChainStart',\n CHAIN_ERROR = 'handleChainError',\n CHAIN_END = 'handleChainEnd',\n TEXT = 'handleText',\n AGENT_ACTION = 'handleAgentAction',\n AGENT_END = 'handleAgentEnd',\n RETRIEVER_START = 'handleRetrieverStart',\n RETRIEVER_END = 'handleRetrieverEnd',\n RETRIEVER_ERROR = 'handleRetrieverError',\n CUSTOM_EVENT = 'handleCustomEvent'\n */\n}\n"],"names":["GraphEvents","Providers","GraphNodeKeys","GraphNodeActions","CommonEvents","StepTypes","Callback"],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
class HandlerRegistry {
|
|
4
|
+
handlers = new Map();
|
|
5
|
+
register(eventType, handler) {
|
|
6
|
+
this.handlers.set(eventType, handler);
|
|
7
|
+
}
|
|
8
|
+
getHandler(eventType) {
|
|
9
|
+
return this.handlers.get(eventType);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
class ModelEndHandler {
|
|
13
|
+
handle(event, data, metadata, graph) {
|
|
14
|
+
if (!graph || !metadata) {
|
|
15
|
+
console.warn(`Graph or metadata not found in ${event} event`);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
// const messageType = (data?.output as BaseMessage | undefined)?._getType();
|
|
19
|
+
// console.log('messageType', messageType);
|
|
20
|
+
const usage = data?.output?.usage_metadata;
|
|
21
|
+
// const stepKey = graph.getStepKey(metadata);
|
|
22
|
+
// const stepId = graph.getStepIdByKey(stepKey);
|
|
23
|
+
// const step = graph.getRunStep(stepId);
|
|
24
|
+
console.log(`====== ${event.toUpperCase()} ======`);
|
|
25
|
+
console.dir({
|
|
26
|
+
usage,
|
|
27
|
+
}, { depth: null });
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
class ToolEndHandler {
|
|
31
|
+
handle(event, data, metadata, graph) {
|
|
32
|
+
if (!graph || !metadata) {
|
|
33
|
+
console.warn(`Graph or metadata not found in ${event} event`);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (!data?.output) {
|
|
37
|
+
console.warn('No output found in tool_end event');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
graph.handleToolCallCompleted({ input: data.input, output: data.output });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
class TestLLMStreamHandler {
|
|
44
|
+
handle(event, data) {
|
|
45
|
+
const chunk = data?.chunk;
|
|
46
|
+
const isMessageChunk = !!(chunk && 'message' in chunk);
|
|
47
|
+
const msg = isMessageChunk && chunk?.message;
|
|
48
|
+
if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {
|
|
49
|
+
console.log(msg.tool_call_chunks);
|
|
50
|
+
}
|
|
51
|
+
else if (msg && msg.content) {
|
|
52
|
+
if (typeof msg.content === 'string') {
|
|
53
|
+
process.stdout.write(msg.content);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
class TestChatStreamHandler {
|
|
59
|
+
handle(event, data) {
|
|
60
|
+
const chunk = data?.chunk;
|
|
61
|
+
const isContentChunk = !!(chunk && 'content' in chunk);
|
|
62
|
+
const content = isContentChunk && chunk?.content;
|
|
63
|
+
if (!content || !isContentChunk) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) {
|
|
67
|
+
console.dir(chunk.tool_call_chunks, { depth: null });
|
|
68
|
+
}
|
|
69
|
+
if (typeof content === 'string') {
|
|
70
|
+
process.stdout.write(content);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
console.dir(content, { depth: null });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
class LLMStreamHandler {
|
|
78
|
+
handle(event, data, metadata) {
|
|
79
|
+
const chunk = data?.chunk;
|
|
80
|
+
const isMessageChunk = !!(chunk && 'message' in chunk);
|
|
81
|
+
const msg = isMessageChunk && chunk?.message;
|
|
82
|
+
if (metadata) {
|
|
83
|
+
console.log(metadata);
|
|
84
|
+
}
|
|
85
|
+
if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {
|
|
86
|
+
console.log(msg.tool_call_chunks);
|
|
87
|
+
}
|
|
88
|
+
else if (msg && msg.content) {
|
|
89
|
+
if (typeof msg.content === 'string') {
|
|
90
|
+
// const text_delta = msg.content;
|
|
91
|
+
// dispatchCustomEvent(GraphEvents.CHAT_MODEL_STREAM, { chunk }, config);
|
|
92
|
+
process.stdout.write(msg.content);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
exports.HandlerRegistry = HandlerRegistry;
|
|
99
|
+
exports.LLMStreamHandler = LLMStreamHandler;
|
|
100
|
+
exports.ModelEndHandler = ModelEndHandler;
|
|
101
|
+
exports.TestChatStreamHandler = TestChatStreamHandler;
|
|
102
|
+
exports.TestLLMStreamHandler = TestLLMStreamHandler;
|
|
103
|
+
exports.ToolEndHandler = ToolEndHandler;
|
|
104
|
+
//# sourceMappingURL=events.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.cjs","sources":["../../src/events.ts"],"sourcesContent":["/* eslint-disable no-console */\n// src/events.ts\nimport type { AIMessage } from '@langchain/core/messages';\nimport type { Graph } from '@/graphs';\nimport type * as t from '@/types';\n\nexport class HandlerRegistry {\n private handlers: Map<string, t.EventHandler> = new Map();\n\n register(eventType: string, handler: t.EventHandler): void {\n this.handlers.set(eventType, handler);\n }\n\n getHandler(eventType: string): t.EventHandler | undefined {\n return this.handlers.get(eventType);\n }\n}\n\nexport class ModelEndHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>, graph?: Graph): void {\n if (!graph || !metadata) {\n console.warn(`Graph or metadata not found in ${event} event`);\n return;\n }\n\n // const messageType = (data?.output as BaseMessage | undefined)?._getType();\n // console.log('messageType', messageType);\n const usage = (data?.output as AIMessage)?.usage_metadata;\n\n // const stepKey = graph.getStepKey(metadata);\n // const stepId = graph.getStepIdByKey(stepKey);\n // const step = graph.getRunStep(stepId);\n\n console.log(`====== ${event.toUpperCase()} ======`);\n console.dir({\n usage,\n }, { depth: null });\n }\n}\n\nexport class ToolEndHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>, graph?: Graph): void {\n if (!graph || !metadata) {\n console.warn(`Graph or metadata not found in ${event} event`);\n return;\n }\n\n if (!data?.output) {\n console.warn('No output found in tool_end event');\n return;\n }\n\n graph.handleToolCallCompleted({ input: data.input, output: data.output } as t.ToolEndData);\n }\n}\n\nexport class TestLLMStreamHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData): void {\n const chunk = data?.chunk;\n const isMessageChunk = !!(chunk && 'message' in chunk);\n const msg = isMessageChunk && chunk?.message;\n if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {\n console.log(msg.tool_call_chunks);\n } else if (msg && msg.content) {\n if (typeof msg.content === 'string') {\n process.stdout.write(msg.content);\n }\n }\n }\n}\n\nexport class TestChatStreamHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData): void {\n const chunk = data?.chunk;\n const isContentChunk = !!(chunk && 'content' in chunk);\n const content = isContentChunk && chunk?.content;\n\n if (!content || !isContentChunk) {\n return;\n }\n\n if (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) {\n console.dir(chunk.tool_call_chunks, { depth: null });\n }\n\n if (typeof content === 'string') {\n process.stdout.write(content);\n } else {\n console.dir(content, { depth: null });\n }\n }\n}\n\nexport class LLMStreamHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>): void {\n const chunk = data?.chunk;\n const isMessageChunk = !!(chunk && 'message' in chunk);\n const msg = isMessageChunk && chunk?.message;\n if (metadata) { console.log(metadata); }\n if (msg && msg.tool_call_chunks && msg.tool_call_chunks.length > 0) {\n console.log(msg.tool_call_chunks);\n } else if (msg && msg.content) {\n if (typeof msg.content === 'string') {\n // const text_delta = msg.content;\n // dispatchCustomEvent(GraphEvents.CHAT_MODEL_STREAM, { chunk }, config);\n process.stdout.write(msg.content);\n }\n }\n }\n}"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var nanoid = require('nanoid');
|
|
4
|
+
var stream = require('@langchain/core/utils/stream');
|
|
5
|
+
var langgraph = require('@langchain/langgraph');
|
|
6
|
+
var dispatch = require('@langchain/core/callbacks/dispatch');
|
|
7
|
+
var messages = require('@langchain/core/messages');
|
|
8
|
+
var _enum = require('../common/enum.cjs');
|
|
9
|
+
var ToolNode = require('../tools/ToolNode.cjs');
|
|
10
|
+
var messages$1 = require('../messages.cjs');
|
|
11
|
+
var providers = require('../llm/providers.cjs');
|
|
12
|
+
var graph = require('../utils/graph.cjs');
|
|
13
|
+
require('@langchain/core/runnables');
|
|
14
|
+
require('@langchain/core/singletons');
|
|
15
|
+
|
|
16
|
+
// src/graphs/Graph.ts
|
|
17
|
+
const { AGENT, TOOLS } = _enum.GraphNodeKeys;
|
|
18
|
+
class Graph {
|
|
19
|
+
messageIdsByStepKey = new Map();
|
|
20
|
+
prelimMessageIdsByStepKey = new Map();
|
|
21
|
+
config;
|
|
22
|
+
contentData = [];
|
|
23
|
+
stepKeyIds = new Map();
|
|
24
|
+
contentIndexMap = new Map();
|
|
25
|
+
toolCallStepIds = new Map();
|
|
26
|
+
}
|
|
27
|
+
class StandardGraph extends Graph {
|
|
28
|
+
graphState;
|
|
29
|
+
clientOptions;
|
|
30
|
+
boundModel;
|
|
31
|
+
handlerRegistry;
|
|
32
|
+
systemMessage;
|
|
33
|
+
messages = [];
|
|
34
|
+
runId;
|
|
35
|
+
tools;
|
|
36
|
+
toolMap;
|
|
37
|
+
startIndex = 0;
|
|
38
|
+
provider;
|
|
39
|
+
constructor({ runId, tools, toolMap, provider, clientOptions, instructions, additional_instructions, }) {
|
|
40
|
+
super();
|
|
41
|
+
this.runId = runId;
|
|
42
|
+
this.tools = tools;
|
|
43
|
+
this.toolMap = toolMap;
|
|
44
|
+
this.provider = provider;
|
|
45
|
+
this.clientOptions = clientOptions;
|
|
46
|
+
this.graphState = this.createGraphState();
|
|
47
|
+
this.boundModel = this.initializeModel();
|
|
48
|
+
let finalInstructions = instructions;
|
|
49
|
+
if (additional_instructions) {
|
|
50
|
+
finalInstructions = finalInstructions ? `${finalInstructions}\n\n${additional_instructions}` : additional_instructions;
|
|
51
|
+
}
|
|
52
|
+
if (finalInstructions) {
|
|
53
|
+
this.systemMessage = new messages.SystemMessage(finalInstructions);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/* Init */
|
|
57
|
+
resetValues() {
|
|
58
|
+
this.messages = [];
|
|
59
|
+
this.config = graph.resetIfNotEmpty(this.config, undefined);
|
|
60
|
+
this.contentData = graph.resetIfNotEmpty(this.contentData, []);
|
|
61
|
+
this.stepKeyIds = graph.resetIfNotEmpty(this.stepKeyIds, new Map());
|
|
62
|
+
this.toolCallStepIds = graph.resetIfNotEmpty(this.toolCallStepIds, new Map());
|
|
63
|
+
this.contentIndexMap = graph.resetIfNotEmpty(this.contentIndexMap, new Map());
|
|
64
|
+
this.messageIdsByStepKey = graph.resetIfNotEmpty(this.messageIdsByStepKey, new Map());
|
|
65
|
+
this.prelimMessageIdsByStepKey = graph.resetIfNotEmpty(this.prelimMessageIdsByStepKey, new Map());
|
|
66
|
+
}
|
|
67
|
+
/* Run Step Processing */
|
|
68
|
+
getRunStep(stepId) {
|
|
69
|
+
const index = this.contentIndexMap.get(stepId);
|
|
70
|
+
if (index !== undefined) {
|
|
71
|
+
return this.contentData[index];
|
|
72
|
+
}
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
getStepKey(metadata) {
|
|
76
|
+
if (!metadata)
|
|
77
|
+
return '';
|
|
78
|
+
const keyList = this.getKeyList(metadata);
|
|
79
|
+
if (this.checkKeyList(keyList)) {
|
|
80
|
+
throw new Error('Missing metadata');
|
|
81
|
+
}
|
|
82
|
+
return graph.joinKeys(keyList);
|
|
83
|
+
}
|
|
84
|
+
getStepIdByKey(stepKey, index) {
|
|
85
|
+
const stepIds = this.stepKeyIds.get(stepKey);
|
|
86
|
+
if (!stepIds) {
|
|
87
|
+
throw new Error(`No step IDs found for stepKey ${stepKey}`);
|
|
88
|
+
}
|
|
89
|
+
if (index === undefined) {
|
|
90
|
+
return stepIds[stepIds.length - 1];
|
|
91
|
+
}
|
|
92
|
+
return stepIds[index];
|
|
93
|
+
}
|
|
94
|
+
generateStepId(stepKey) {
|
|
95
|
+
const stepIds = this.stepKeyIds.get(stepKey);
|
|
96
|
+
let newStepId;
|
|
97
|
+
let stepIndex = 0;
|
|
98
|
+
if (stepIds) {
|
|
99
|
+
stepIndex = stepIds.length;
|
|
100
|
+
newStepId = `step_${nanoid.nanoid()}`;
|
|
101
|
+
stepIds.push(newStepId);
|
|
102
|
+
this.stepKeyIds.set(stepKey, stepIds);
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
newStepId = `step_${nanoid.nanoid()}`;
|
|
106
|
+
this.stepKeyIds.set(stepKey, [newStepId]);
|
|
107
|
+
}
|
|
108
|
+
return [newStepId, stepIndex];
|
|
109
|
+
}
|
|
110
|
+
getKeyList(metadata) {
|
|
111
|
+
if (!metadata)
|
|
112
|
+
return [];
|
|
113
|
+
return [
|
|
114
|
+
metadata.thread_id,
|
|
115
|
+
metadata.langgraph_node,
|
|
116
|
+
metadata.langgraph_step,
|
|
117
|
+
metadata.langgraph_task_idx,
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
checkKeyList(keyList) {
|
|
121
|
+
return keyList.some((key) => key === undefined);
|
|
122
|
+
}
|
|
123
|
+
/* Misc.*/
|
|
124
|
+
getRunMessages() {
|
|
125
|
+
return this.messages.slice(this.startIndex);
|
|
126
|
+
}
|
|
127
|
+
getContentParts() {
|
|
128
|
+
return messages$1.convertMessagesToContent(this.messages.slice(this.startIndex));
|
|
129
|
+
}
|
|
130
|
+
/* Graph */
|
|
131
|
+
createGraphState() {
|
|
132
|
+
return {
|
|
133
|
+
messages: {
|
|
134
|
+
value: (x, y) => {
|
|
135
|
+
if (!x.length) {
|
|
136
|
+
if (this.systemMessage) {
|
|
137
|
+
x.push(this.systemMessage);
|
|
138
|
+
}
|
|
139
|
+
this.startIndex = x.length + y.length;
|
|
140
|
+
}
|
|
141
|
+
const current = x.concat(y);
|
|
142
|
+
this.messages = current;
|
|
143
|
+
return current;
|
|
144
|
+
},
|
|
145
|
+
default: () => [],
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
initializeTools() {
|
|
150
|
+
// return new ToolNode<t.BaseGraphState>(this.tools);
|
|
151
|
+
return new ToolNode.ToolNode({
|
|
152
|
+
tools: this.tools || [],
|
|
153
|
+
toolMap: this.toolMap,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
initializeModel() {
|
|
157
|
+
const ChatModelClass = providers.getChatModelClass(this.provider);
|
|
158
|
+
const model = new ChatModelClass(this.clientOptions);
|
|
159
|
+
if (!this.tools || this.tools.length === 0) {
|
|
160
|
+
return model;
|
|
161
|
+
}
|
|
162
|
+
return model.bindTools(this.tools);
|
|
163
|
+
}
|
|
164
|
+
createCallModel() {
|
|
165
|
+
return async (state, config) => {
|
|
166
|
+
const { provider } = config?.configurable ?? {};
|
|
167
|
+
if (!config || !provider) {
|
|
168
|
+
throw new Error(`No ${config ? 'provider' : 'config'} provided`);
|
|
169
|
+
}
|
|
170
|
+
this.config = config;
|
|
171
|
+
const { messages: messages$2 } = state;
|
|
172
|
+
const finalMessages = messages$2;
|
|
173
|
+
const lastMessageX = finalMessages[finalMessages.length - 2];
|
|
174
|
+
const lastMessageY = finalMessages[finalMessages.length - 1];
|
|
175
|
+
if (provider === _enum.Providers.AWS
|
|
176
|
+
&& lastMessageX instanceof messages.AIMessageChunk
|
|
177
|
+
&& lastMessageY instanceof messages.ToolMessage
|
|
178
|
+
&& typeof lastMessageX.content === 'string') {
|
|
179
|
+
finalMessages[finalMessages.length - 2].content = '';
|
|
180
|
+
}
|
|
181
|
+
if (this.tools?.length && (provider === _enum.Providers.ANTHROPIC || provider === _enum.Providers.AWS)) {
|
|
182
|
+
const stream$1 = await this.boundModel.stream(finalMessages, config);
|
|
183
|
+
let finalChunk;
|
|
184
|
+
for await (const chunk of stream$1) {
|
|
185
|
+
dispatch.dispatchCustomEvent(_enum.GraphEvents.CHAT_MODEL_STREAM, { chunk }, config);
|
|
186
|
+
if (!finalChunk) {
|
|
187
|
+
finalChunk = chunk;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
finalChunk = stream.concat(finalChunk, chunk);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
finalChunk = messages$1.modifyDeltaProperties(finalChunk);
|
|
194
|
+
return { messages: [finalChunk] };
|
|
195
|
+
}
|
|
196
|
+
const finalMessage = await this.boundModel.invoke(finalMessages, config);
|
|
197
|
+
return { messages: [finalMessage] };
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
createWorkflow() {
|
|
201
|
+
const routeMessage = (state, config) => {
|
|
202
|
+
this.config = config;
|
|
203
|
+
// const lastMessage = state.messages[state.messages.length - 1] as AIMessage;
|
|
204
|
+
// if (!lastMessage?.tool_calls?.length) {
|
|
205
|
+
// return END;
|
|
206
|
+
// }
|
|
207
|
+
// return TOOLS;
|
|
208
|
+
return ToolNode.toolsCondition(state);
|
|
209
|
+
};
|
|
210
|
+
const workflow = new langgraph.StateGraph({
|
|
211
|
+
channels: this.graphState,
|
|
212
|
+
})
|
|
213
|
+
.addNode(AGENT, this.createCallModel())
|
|
214
|
+
.addNode(TOOLS, this.initializeTools())
|
|
215
|
+
.addEdge(langgraph.START, AGENT)
|
|
216
|
+
.addConditionalEdges(AGENT, routeMessage)
|
|
217
|
+
.addEdge(TOOLS, AGENT);
|
|
218
|
+
return workflow.compile();
|
|
219
|
+
}
|
|
220
|
+
/* Dispatchers */
|
|
221
|
+
dispatchRunStep(stepKey, stepDetails) {
|
|
222
|
+
if (!this.config) {
|
|
223
|
+
throw new Error('No config provided');
|
|
224
|
+
}
|
|
225
|
+
const [stepId, stepIndex] = this.generateStepId(stepKey);
|
|
226
|
+
if (stepDetails.type === _enum.StepTypes.TOOL_CALLS && stepDetails.tool_calls) {
|
|
227
|
+
for (const tool_call of stepDetails.tool_calls) {
|
|
228
|
+
if (!tool_call.id || this.toolCallStepIds.has(tool_call.id)) {
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
this.toolCallStepIds.set(tool_call.id, stepId);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const runStep = {
|
|
235
|
+
stepIndex,
|
|
236
|
+
id: stepId,
|
|
237
|
+
type: stepDetails.type,
|
|
238
|
+
index: this.contentData.length,
|
|
239
|
+
stepDetails,
|
|
240
|
+
usage: null,
|
|
241
|
+
};
|
|
242
|
+
if (this.runId) {
|
|
243
|
+
runStep.runId = this.runId;
|
|
244
|
+
}
|
|
245
|
+
this.contentData.push(runStep);
|
|
246
|
+
this.contentIndexMap.set(stepId, runStep.index);
|
|
247
|
+
dispatch.dispatchCustomEvent(_enum.GraphEvents.ON_RUN_STEP, runStep, this.config);
|
|
248
|
+
}
|
|
249
|
+
handleToolCallCompleted(data, metadata) {
|
|
250
|
+
if (!this.config) {
|
|
251
|
+
throw new Error('No config provided');
|
|
252
|
+
}
|
|
253
|
+
const { input, output } = data;
|
|
254
|
+
const { tool_call_id } = output;
|
|
255
|
+
const stepId = this.toolCallStepIds.get(tool_call_id);
|
|
256
|
+
if (!stepId) {
|
|
257
|
+
throw new Error(`No stepId found for tool_call_id ${tool_call_id}`);
|
|
258
|
+
}
|
|
259
|
+
const runStep = this.getRunStep(stepId);
|
|
260
|
+
if (!runStep) {
|
|
261
|
+
throw new Error(`No run step found for stepId ${stepId}`);
|
|
262
|
+
}
|
|
263
|
+
if (!data?.output) {
|
|
264
|
+
// console.warn('No output found in tool_end event');
|
|
265
|
+
// console.dir(data, { depth: null });
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
const args = typeof input === 'string' ? input : input.input;
|
|
269
|
+
const tool_call = {
|
|
270
|
+
args: typeof args === 'string' ? args : JSON.stringify(args),
|
|
271
|
+
name: output.name ?? '',
|
|
272
|
+
id: output.tool_call_id,
|
|
273
|
+
output: typeof output.content === 'string'
|
|
274
|
+
? output.content
|
|
275
|
+
: JSON.stringify(output.content),
|
|
276
|
+
progress: 1,
|
|
277
|
+
};
|
|
278
|
+
this.handlerRegistry?.getHandler(_enum.GraphEvents.ON_RUN_STEP_COMPLETED)?.handle(_enum.GraphEvents.ON_RUN_STEP_COMPLETED, { result: {
|
|
279
|
+
id: stepId,
|
|
280
|
+
index: runStep.index,
|
|
281
|
+
type: 'tool_call',
|
|
282
|
+
tool_call
|
|
283
|
+
},
|
|
284
|
+
}, metadata, this);
|
|
285
|
+
}
|
|
286
|
+
dispatchRunStepDelta(id, delta) {
|
|
287
|
+
if (!this.config) {
|
|
288
|
+
throw new Error('No config provided');
|
|
289
|
+
}
|
|
290
|
+
else if (!id) {
|
|
291
|
+
throw new Error('No step ID found');
|
|
292
|
+
}
|
|
293
|
+
const runStepDelta = {
|
|
294
|
+
id,
|
|
295
|
+
delta,
|
|
296
|
+
};
|
|
297
|
+
dispatch.dispatchCustomEvent(_enum.GraphEvents.ON_RUN_STEP_DELTA, runStepDelta, this.config);
|
|
298
|
+
}
|
|
299
|
+
dispatchMessageDelta(id, delta) {
|
|
300
|
+
if (!this.config) {
|
|
301
|
+
throw new Error('No config provided');
|
|
302
|
+
}
|
|
303
|
+
const messageDelta = {
|
|
304
|
+
id,
|
|
305
|
+
delta,
|
|
306
|
+
};
|
|
307
|
+
dispatch.dispatchCustomEvent(_enum.GraphEvents.ON_MESSAGE_DELTA, messageDelta, this.config);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
exports.Graph = Graph;
|
|
312
|
+
exports.StandardGraph = StandardGraph;
|
|
313
|
+
//# sourceMappingURL=Graph.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Graph.cjs","sources":["../../../src/graphs/Graph.ts"],"sourcesContent":["// src/graphs/Graph.ts\nimport { nanoid } from 'nanoid';\nimport { concat } from '@langchain/core/utils/stream';\nimport { ToolNode } from '@langchain/langgraph/prebuilt';\nimport { START, StateGraph } from '@langchain/langgraph';\nimport { Runnable, RunnableConfig } from '@langchain/core/runnables';\nimport { dispatchCustomEvent } from '@langchain/core/callbacks/dispatch';\nimport { AIMessageChunk, ToolMessage, SystemMessage } from '@langchain/core/messages';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport type { StructuredTool } from '@langchain/core/tools';\nimport type * as t from '@/types';\nimport { Providers, GraphEvents, GraphNodeKeys, StepTypes, Callback } from '@/common';\nimport { ToolNode as CustomToolNode, toolsCondition } from '@/tools/ToolNode';\nimport { modifyDeltaProperties, convertMessagesToContent } from '@/messages';\nimport { getChatModelClass } from '@/llm/providers';\nimport { resetIfNotEmpty, joinKeys } from '@/utils';\nimport { HandlerRegistry } from '@/events';\n\nconst { AGENT, TOOLS } = GraphNodeKeys;\nexport type GraphNode = GraphNodeKeys | typeof START;\nexport type ClientCallback<T extends unknown[]> = (graph: StandardGraph, ...args: T) => void;\nexport type ClientCallbacks = {\n [Callback.TOOL_ERROR]?: ClientCallback<[Error, string]>;\n [Callback.TOOL_START]?: ClientCallback<unknown[]>;\n [Callback.TOOL_END]?: ClientCallback<unknown[]>;\n}\nexport type SystemCallbacks = {\n [K in keyof ClientCallbacks]: ClientCallbacks[K] extends ClientCallback<infer Args>\n ? (...args: Args) => void\n : never;\n};\n\nexport abstract class Graph<\n T extends t.BaseGraphState = t.BaseGraphState,\n TNodeName extends string = string,\n> {\n abstract resetValues(): void;\n abstract createGraphState(): t.GraphStateChannels<T>;\n abstract initializeTools(): CustomToolNode<T> | ToolNode<T>;\n abstract initializeModel(): Runnable;\n abstract getRunMessages(): BaseMessage[] | undefined;\n abstract getContentParts(): t.MessageContentComplex[] | undefined;\n abstract generateStepId(stepKey: string): [string, number];\n abstract getKeyList(metadata: Record<string, unknown> | undefined): (string | number | undefined)[];\n abstract getStepKey(metadata: Record<string, unknown> | undefined): string;\n abstract checkKeyList(keyList: (string | number | undefined)[]): boolean;\n abstract getStepIdByKey(stepKey: string, index?: number): string\n abstract getRunStep(stepId: string): t.RunStep | undefined;\n abstract dispatchRunStep(stepKey: string, stepDetails: t.StepDetails): void;\n abstract dispatchRunStepDelta(id: string, delta: t.ToolCallDelta): void;\n abstract dispatchMessageDelta(id: string, delta: t.MessageDelta): void;\n abstract handleToolCallCompleted(data: t.ToolEndData): void;\n\n abstract createCallModel(): (state: T, config?: RunnableConfig) => Promise<Partial<T>>;\n abstract createWorkflow(): t.CompiledWorkflow<T, Partial<T>, TNodeName>;\n messageIdsByStepKey: Map<string, string> = new Map();\n prelimMessageIdsByStepKey: Map<string, string> = new Map();\n config: RunnableConfig | undefined;\n contentData: t.RunStep[] = [];\n stepKeyIds: Map<string, string[]> = new Map<string, string[]>();\n contentIndexMap: Map<string, number> = new Map();\n toolCallStepIds: Map<string, string> = new Map();\n}\n\nexport class StandardGraph extends Graph<\n t.BaseGraphState,\n GraphNode\n> {\n private graphState: t.GraphStateChannels<t.BaseGraphState>;\n private clientOptions: Record<string, unknown>;\n private boundModel: Runnable;\n handlerRegistry: HandlerRegistry | undefined;\n systemMessage: SystemMessage | undefined;\n messages: BaseMessage[] = [];\n runId: string | undefined;\n tools?: t.GenericTool[];\n toolMap?: t.ToolMap;\n startIndex: number = 0;\n provider: Providers;\n\n constructor({\n runId,\n tools,\n toolMap,\n provider,\n clientOptions,\n instructions,\n additional_instructions,\n } : {\n runId?: string;\n provider: Providers;\n tools?: t.GenericTool[];\n toolMap?: t.ToolMap;\n clientOptions: Record<string, unknown>;\n instructions?: string;\n additional_instructions?: string;\n }) {\n super();\n this.runId = runId;\n this.tools = tools;\n this.toolMap = toolMap;\n this.provider = provider;\n this.clientOptions = clientOptions;\n this.graphState = this.createGraphState();\n this.boundModel = this.initializeModel();\n\n let finalInstructions = instructions;\n if (additional_instructions) {\n finalInstructions = finalInstructions ? `${finalInstructions}\\n\\n${additional_instructions}` : additional_instructions;\n }\n\n if (finalInstructions) {\n this.systemMessage = new SystemMessage(finalInstructions);\n }\n }\n\n /* Init */\n\n resetValues(): void {\n this.messages = [];\n this.config = resetIfNotEmpty(this.config, undefined);\n this.contentData = resetIfNotEmpty(this.contentData, []);\n this.stepKeyIds = resetIfNotEmpty(this.stepKeyIds, new Map());\n this.toolCallStepIds = resetIfNotEmpty(this.toolCallStepIds, new Map());\n this.contentIndexMap = resetIfNotEmpty(this.contentIndexMap, new Map());\n this.messageIdsByStepKey = resetIfNotEmpty(this.messageIdsByStepKey, new Map());\n this.prelimMessageIdsByStepKey = resetIfNotEmpty(this.prelimMessageIdsByStepKey, new Map());\n }\n\n /* Run Step Processing */\n\n getRunStep(stepId: string): t.RunStep | undefined {\n const index = this.contentIndexMap.get(stepId);\n if (index !== undefined) {\n return this.contentData[index];\n }\n return undefined;\n }\n\n getStepKey(metadata: Record<string, unknown> | undefined): string {\n if (!metadata) return '';\n\n const keyList = this.getKeyList(metadata);\n if (this.checkKeyList(keyList)) {\n throw new Error('Missing metadata');\n }\n\n return joinKeys(keyList);\n }\n\n getStepIdByKey(stepKey: string, index?: number): string {\n const stepIds = this.stepKeyIds.get(stepKey);\n if (!stepIds) {\n throw new Error(`No step IDs found for stepKey ${stepKey}`);\n }\n\n if (index === undefined) {\n return stepIds[stepIds.length - 1];\n }\n\n return stepIds[index];\n }\n\n generateStepId(stepKey: string): [string, number] {\n const stepIds = this.stepKeyIds.get(stepKey);\n let newStepId: string | undefined;\n let stepIndex = 0;\n if (stepIds) {\n stepIndex = stepIds.length;\n newStepId = `step_${nanoid()}`;\n stepIds.push(newStepId);\n this.stepKeyIds.set(stepKey, stepIds);\n } else {\n newStepId = `step_${nanoid()}`;\n this.stepKeyIds.set(stepKey, [newStepId]);\n }\n\n return [newStepId, stepIndex];\n }\n\n getKeyList(metadata: Record<string, unknown> | undefined): (string | number | undefined)[] {\n if (!metadata) return [];\n\n return [\n metadata.thread_id as string,\n metadata.langgraph_node as string,\n metadata.langgraph_step as number,\n metadata.langgraph_task_idx as number,\n ];\n }\n\n checkKeyList(keyList: (string | number | undefined)[]): boolean {\n return keyList.some((key) => key === undefined);\n }\n\n /* Misc.*/\n\n getRunMessages(): BaseMessage[] | undefined {\n return this.messages.slice(this.startIndex);\n }\n\n getContentParts(): t.MessageContentComplex[] | undefined {\n return convertMessagesToContent(this.messages.slice(this.startIndex));\n }\n\n /* Graph */\n\n createGraphState(): t.GraphStateChannels<t.BaseGraphState> {\n return {\n messages: {\n value: (x: BaseMessage[], y: BaseMessage[]): BaseMessage[] => {\n if (!x.length) {\n if (this.systemMessage) {\n x.push(this.systemMessage);\n }\n\n this.startIndex = x.length + y.length;\n }\n const current = x.concat(y);\n this.messages = current;\n return current;\n },\n default: () => [],\n },\n };\n }\n\n initializeTools(): CustomToolNode<t.BaseGraphState> | ToolNode<t.BaseGraphState> {\n // return new ToolNode<t.BaseGraphState>(this.tools);\n return new CustomToolNode<t.BaseGraphState>({\n tools: this.tools || [],\n toolMap: this.toolMap,\n });\n }\n\n initializeModel(): Runnable {\n const ChatModelClass = getChatModelClass(this.provider);\n const model = new ChatModelClass(this.clientOptions);\n if (!this.tools || this.tools.length === 0) {\n return model;\n }\n return model.bindTools(this.tools as StructuredTool[]);\n }\n\n createCallModel() {\n return async (state: t.BaseGraphState, config?: RunnableConfig): Promise<Partial<t.BaseGraphState>> => {\n const { provider } = (config?.configurable as t.GraphConfig) ?? {} ;\n if (!config || !provider) {\n throw new Error(`No ${config ? 'provider' : 'config'} provided`);\n }\n this.config = config;\n const { messages } = state;\n\n const finalMessages = messages;\n const lastMessageX = finalMessages[finalMessages.length - 2];\n const lastMessageY = finalMessages[finalMessages.length - 1];\n\n if (\n provider === Providers.AWS\n && lastMessageX instanceof AIMessageChunk\n && lastMessageY instanceof ToolMessage\n && typeof lastMessageX.content === 'string'\n ) {\n finalMessages[finalMessages.length - 2].content = '';\n }\n\n if (this.tools?.length && (provider === Providers.ANTHROPIC || provider === Providers.AWS)) {\n const stream = await this.boundModel.stream(finalMessages, config);\n let finalChunk: AIMessageChunk | undefined;\n for await (const chunk of stream) {\n dispatchCustomEvent(GraphEvents.CHAT_MODEL_STREAM, { chunk }, config);\n if (!finalChunk) {\n finalChunk = chunk;\n } else {\n finalChunk = concat(finalChunk, chunk);\n }\n }\n\n finalChunk = modifyDeltaProperties(finalChunk);\n return { messages: [finalChunk as AIMessageChunk] };\n }\n\n const finalMessage = await this.boundModel.invoke(finalMessages, config);\n return { messages: [finalMessage as AIMessageChunk] };\n };\n }\n\n createWorkflow(): t.CompiledWorkflow<t.BaseGraphState, Partial<t.BaseGraphState>, GraphNode> {\n const routeMessage = (state: t.BaseGraphState, config?: RunnableConfig): string => {\n this.config = config;\n // const lastMessage = state.messages[state.messages.length - 1] as AIMessage;\n // if (!lastMessage?.tool_calls?.length) {\n // return END;\n // }\n // return TOOLS;\n return toolsCondition(state);\n };\n\n const workflow = new StateGraph<t.BaseGraphState, Partial<t.BaseGraphState>, GraphNode>({\n channels: this.graphState,\n })\n .addNode(AGENT, this.createCallModel())\n .addNode(TOOLS, this.initializeTools())\n .addEdge(START, AGENT)\n .addConditionalEdges(AGENT, routeMessage)\n .addEdge(TOOLS, AGENT);\n\n return workflow.compile();\n }\n\n /* Dispatchers */\n\n dispatchRunStep(stepKey: string, stepDetails: t.StepDetails): void {\n if (!this.config) {\n throw new Error('No config provided');\n }\n\n const [stepId, stepIndex] = this.generateStepId(stepKey);\n if (stepDetails.type === StepTypes.TOOL_CALLS && stepDetails.tool_calls) {\n for (const tool_call of stepDetails.tool_calls) {\n if (!tool_call.id || this.toolCallStepIds.has(tool_call.id)) {\n continue;\n }\n this.toolCallStepIds.set(tool_call.id, stepId);\n }\n }\n\n const runStep: t.RunStep = {\n stepIndex,\n id: stepId,\n type: stepDetails.type,\n index: this.contentData.length,\n stepDetails,\n usage: null,\n };\n\n if (this.runId) {\n runStep.runId = this.runId;\n }\n\n this.contentData.push(runStep);\n this.contentIndexMap.set(stepId, runStep.index);\n dispatchCustomEvent(GraphEvents.ON_RUN_STEP, runStep, this.config);\n }\n\n handleToolCallCompleted(data: t.ToolEndData, metadata?: Record<string, unknown>): void {\n if (!this.config) {\n throw new Error('No config provided');\n }\n\n const { input, output } = data;\n const { tool_call_id } = output;\n const stepId = this.toolCallStepIds.get(tool_call_id);\n if (!stepId) {\n throw new Error(`No stepId found for tool_call_id ${tool_call_id}`);\n }\n const runStep = this.getRunStep(stepId);\n if (!runStep) {\n throw new Error(`No run step found for stepId ${stepId}`);\n }\n\n if (!data?.output) {\n // console.warn('No output found in tool_end event');\n // console.dir(data, { depth: null });\n return;\n }\n\n const args = typeof input === 'string' ? input : input.input;\n const tool_call = {\n args: typeof args === 'string' ? args : JSON.stringify(args),\n name: output.name ?? '',\n id: output.tool_call_id,\n output: typeof output.content === 'string'\n ? output.content\n : JSON.stringify(output.content),\n progress: 1,\n };\n\n this.handlerRegistry?.getHandler(GraphEvents.ON_RUN_STEP_COMPLETED)?.handle(\n GraphEvents.ON_RUN_STEP_COMPLETED,\n { result: {\n id: stepId,\n index: runStep.index,\n type: 'tool_call',\n tool_call\n } as t.ToolCompleteEvent,\n },\n metadata,\n this,\n );\n }\n\n dispatchRunStepDelta(id: string, delta: t.ToolCallDelta): void {\n if (!this.config) {\n throw new Error('No config provided');\n } else if (!id) {\n throw new Error('No step ID found');\n }\n const runStepDelta: t.RunStepDeltaEvent = {\n id,\n delta,\n };\n dispatchCustomEvent(GraphEvents.ON_RUN_STEP_DELTA, runStepDelta, this.config);\n }\n\n dispatchMessageDelta(id: string, delta: t.MessageDelta): void {\n if (!this.config) {\n throw new Error('No config provided');\n }\n const messageDelta: t.MessageDeltaEvent = {\n id,\n delta,\n };\n dispatchCustomEvent(GraphEvents.ON_MESSAGE_DELTA, messageDelta, this.config);\n }\n}\n"],"names":["GraphNodeKeys","SystemMessage","resetIfNotEmpty","joinKeys","nanoid","convertMessagesToContent","CustomToolNode","getChatModelClass","messages","Providers","AIMessageChunk","ToolMessage","stream","dispatchCustomEvent","GraphEvents","concat","modifyDeltaProperties","toolsCondition","StateGraph","START","StepTypes"],"mappings":"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"}
|