@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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/common/enum.cjs +108 -0
  3. package/dist/cjs/common/enum.cjs.map +1 -0
  4. package/dist/cjs/events.cjs +104 -0
  5. package/dist/cjs/events.cjs.map +1 -0
  6. package/dist/cjs/graphs/Graph.cjs +313 -0
  7. package/dist/cjs/graphs/Graph.cjs.map +1 -0
  8. package/dist/cjs/llm/providers.cjs +30 -0
  9. package/dist/cjs/llm/providers.cjs.map +1 -0
  10. package/dist/cjs/main.cjs +59 -0
  11. package/dist/cjs/main.cjs.map +1 -0
  12. package/dist/cjs/messages.cjs +195 -0
  13. package/dist/cjs/messages.cjs.map +1 -0
  14. package/dist/cjs/run.cjs +106 -0
  15. package/dist/cjs/run.cjs.map +1 -0
  16. package/dist/cjs/stream.cjs +133 -0
  17. package/dist/cjs/stream.cjs.map +1 -0
  18. package/dist/cjs/tools/ToolNode.cjs +80 -0
  19. package/dist/cjs/tools/ToolNode.cjs.map +1 -0
  20. package/dist/cjs/utils/graph.cjs +16 -0
  21. package/dist/cjs/utils/graph.cjs.map +1 -0
  22. package/dist/cjs/utils/run.cjs +59 -0
  23. package/dist/cjs/utils/run.cjs.map +1 -0
  24. package/dist/esm/common/enum.mjs +108 -0
  25. package/dist/esm/common/enum.mjs.map +1 -0
  26. package/dist/esm/events.mjs +97 -0
  27. package/dist/esm/events.mjs.map +1 -0
  28. package/dist/esm/graphs/Graph.mjs +310 -0
  29. package/dist/esm/graphs/Graph.mjs.map +1 -0
  30. package/dist/esm/llm/providers.mjs +27 -0
  31. package/dist/esm/llm/providers.mjs.map +1 -0
  32. package/dist/esm/main.mjs +9 -0
  33. package/dist/esm/main.mjs.map +1 -0
  34. package/dist/esm/messages.mjs +190 -0
  35. package/dist/esm/messages.mjs.map +1 -0
  36. package/dist/esm/run.mjs +104 -0
  37. package/dist/esm/run.mjs.map +1 -0
  38. package/dist/esm/stream.mjs +131 -0
  39. package/dist/esm/stream.mjs.map +1 -0
  40. package/dist/esm/tools/ToolNode.mjs +77 -0
  41. package/dist/esm/tools/ToolNode.mjs.map +1 -0
  42. package/dist/esm/utils/graph.mjs +13 -0
  43. package/dist/esm/utils/graph.mjs.map +1 -0
  44. package/dist/esm/utils/run.mjs +57 -0
  45. package/dist/esm/utils/run.mjs.map +1 -0
  46. package/dist/types/common/enum.d.ts +79 -0
  47. package/dist/types/common/index.d.ts +1 -0
  48. package/dist/types/events.d.ts +22 -0
  49. package/dist/types/graphs/Graph.d.ts +86 -0
  50. package/dist/types/graphs/index.d.ts +1 -0
  51. package/dist/types/index.d.ts +8 -0
  52. package/dist/types/llm/providers.d.ts +4 -0
  53. package/dist/types/messages.d.ts +10 -0
  54. package/dist/types/prompts/collab.d.ts +1 -0
  55. package/dist/types/prompts/index.d.ts +2 -0
  56. package/dist/types/prompts/taskmanager.d.ts +41 -0
  57. package/dist/types/run.d.ts +21 -0
  58. package/dist/types/scripts/args.d.ts +6 -0
  59. package/dist/types/scripts/cli.d.ts +1 -0
  60. package/dist/types/scripts/cli2.d.ts +1 -0
  61. package/dist/types/scripts/cli3.d.ts +1 -0
  62. package/dist/types/scripts/cli4.d.ts +1 -0
  63. package/dist/types/scripts/cli5.d.ts +1 -0
  64. package/dist/types/scripts/empty_input.d.ts +1 -0
  65. package/dist/types/stream.d.ts +5 -0
  66. package/dist/types/tools/ToolNode.d.ts +15 -0
  67. package/dist/types/tools/example.d.ts +26 -0
  68. package/dist/types/types/graph.d.ts +108 -0
  69. package/dist/types/types/index.d.ts +5 -0
  70. package/dist/types/types/llm.d.ts +25 -0
  71. package/dist/types/types/run.d.ts +53 -0
  72. package/dist/types/types/stream.d.ts +134 -0
  73. package/dist/types/types/tools.d.ts +24 -0
  74. package/dist/types/utils/graph.d.ts +2 -0
  75. package/dist/types/utils/index.d.ts +2 -0
  76. package/dist/types/utils/llmConfig.d.ts +2 -0
  77. package/dist/types/utils/logging.d.ts +1 -0
  78. package/dist/types/utils/run.d.ts +20 -0
  79. package/package.json +142 -0
  80. package/src/common/enum.ts +121 -0
  81. package/src/common/index.ts +2 -0
  82. package/src/events.ts +110 -0
  83. package/src/graphs/Graph.ts +416 -0
  84. package/src/graphs/index.ts +1 -0
  85. package/src/index.ts +15 -0
  86. package/src/llm/providers.ts +27 -0
  87. package/src/messages.ts +210 -0
  88. package/src/prompts/collab.ts +6 -0
  89. package/src/prompts/index.ts +2 -0
  90. package/src/prompts/taskmanager.ts +61 -0
  91. package/src/proto/CollabGraph.ts +269 -0
  92. package/src/proto/TaskManager.ts +243 -0
  93. package/src/proto/collab.ts +200 -0
  94. package/src/proto/collab_design.ts +184 -0
  95. package/src/proto/collab_design_v2.ts +224 -0
  96. package/src/proto/collab_design_v3.ts +255 -0
  97. package/src/proto/collab_design_v4.ts +220 -0
  98. package/src/proto/collab_design_v5.ts +251 -0
  99. package/src/proto/collab_graph.ts +181 -0
  100. package/src/proto/collab_original.ts +123 -0
  101. package/src/proto/example.ts +93 -0
  102. package/src/proto/example_new.ts +68 -0
  103. package/src/proto/example_old.ts +201 -0
  104. package/src/proto/example_test.ts +152 -0
  105. package/src/proto/example_test_anthropic.ts +100 -0
  106. package/src/proto/log_stream.ts +202 -0
  107. package/src/proto/main_collab_community_event.ts +133 -0
  108. package/src/proto/main_collab_design_v2.ts +96 -0
  109. package/src/proto/main_collab_design_v4.ts +100 -0
  110. package/src/proto/main_collab_design_v5.ts +135 -0
  111. package/src/proto/main_collab_global_analysis.ts +122 -0
  112. package/src/proto/main_collab_hackathon_event.ts +153 -0
  113. package/src/proto/main_collab_space_mission.ts +153 -0
  114. package/src/proto/main_philosophy.ts +210 -0
  115. package/src/proto/original_script.ts +126 -0
  116. package/src/proto/standard.ts +100 -0
  117. package/src/proto/stream.ts +56 -0
  118. package/src/proto/tasks.ts +118 -0
  119. package/src/proto/tools/global_analysis_tools.ts +86 -0
  120. package/src/proto/tools/space_mission_tools.ts +60 -0
  121. package/src/proto/vertexai.ts +54 -0
  122. package/src/run.ts +132 -0
  123. package/src/scripts/args.ts +42 -0
  124. package/src/scripts/cli.ts +166 -0
  125. package/src/scripts/cli2.ts +124 -0
  126. package/src/scripts/cli3.ts +175 -0
  127. package/src/scripts/cli4.ts +182 -0
  128. package/src/scripts/cli5.ts +182 -0
  129. package/src/scripts/empty_input.ts +136 -0
  130. package/src/stream.ts +145 -0
  131. package/src/tools/ToolNode.ts +108 -0
  132. package/src/tools/example.ts +52 -0
  133. package/src/types/graph.ts +126 -0
  134. package/src/types/index.ts +6 -0
  135. package/src/types/llm.ts +38 -0
  136. package/src/types/run.ts +56 -0
  137. package/src/types/stream.ts +174 -0
  138. package/src/types/tools.ts +31 -0
  139. package/src/utils/graph.ts +11 -0
  140. package/src/utils/index.ts +2 -0
  141. package/src/utils/llmConfig.ts +50 -0
  142. package/src/utils/logging.ts +48 -0
  143. package/src/utils/run.ts +91 -0
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ var openai = require('@langchain/openai');
4
+ var aws = require('@langchain/aws');
5
+ var anthropic = require('@langchain/anthropic');
6
+ var mistralai = require('@langchain/mistralai');
7
+ var googleVertexai = require('@langchain/google-vertexai');
8
+ var web = require('@langchain/community/chat_models/bedrock/web');
9
+ var _enum = require('../common/enum.cjs');
10
+
11
+ // src/llm/providers.ts
12
+ const llmProviders = {
13
+ [_enum.Providers.OPENAI]: openai.ChatOpenAI,
14
+ [_enum.Providers.VERTEXAI]: googleVertexai.ChatVertexAI,
15
+ [_enum.Providers.BEDROCK]: web.BedrockChat,
16
+ [_enum.Providers.MISTRALAI]: mistralai.ChatMistralAI,
17
+ [_enum.Providers.AWS]: aws.ChatBedrockConverse,
18
+ [_enum.Providers.ANTHROPIC]: anthropic.ChatAnthropic,
19
+ };
20
+ const getChatModelClass = (provider) => {
21
+ const ChatModelClass = llmProviders[provider];
22
+ if (!ChatModelClass) {
23
+ throw new Error(`Unsupported LLM provider: ${provider}`);
24
+ }
25
+ return ChatModelClass;
26
+ };
27
+
28
+ exports.getChatModelClass = getChatModelClass;
29
+ exports.llmProviders = llmProviders;
30
+ //# sourceMappingURL=providers.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.cjs","sources":["../../../src/llm/providers.ts"],"sourcesContent":["// src/llm/providers.ts\nimport { ChatOpenAI } from '@langchain/openai';\nimport { ChatBedrockConverse } from '@langchain/aws';\nimport { ChatAnthropic } from '@langchain/anthropic';\nimport { ChatMistralAI } from '@langchain/mistralai';\nimport { ChatVertexAI } from '@langchain/google-vertexai';\nimport { BedrockChat } from '@langchain/community/chat_models/bedrock/web';\nimport type * as t from '@/types';\nimport { Providers } from '@/common';\n\nexport const llmProviders: Record<Providers, t.ChatModelConstructor> = {\n [Providers.OPENAI]: ChatOpenAI,\n [Providers.VERTEXAI]: ChatVertexAI,\n [Providers.BEDROCK]: BedrockChat as unknown as t.ChatModelConstructor,\n [Providers.MISTRALAI]: ChatMistralAI,\n [Providers.AWS]: ChatBedrockConverse as unknown as t.ChatModelConstructor,\n [Providers.ANTHROPIC]: ChatAnthropic,\n};\n\nexport const getChatModelClass = (provider: Providers): t.ChatModelConstructor => {\n const ChatModelClass = llmProviders[provider];\n if (!ChatModelClass) {\n throw new Error(`Unsupported LLM provider: ${provider}`);\n }\n\n return ChatModelClass;\n};\n"],"names":["Providers","ChatOpenAI","ChatVertexAI","BedrockChat","ChatMistralAI","ChatBedrockConverse","ChatAnthropic"],"mappings":";;;;;;;;;;AAAA;AAUa,MAAA,YAAY,GAA8C;AACrE,IAAA,CAACA,eAAS,CAAC,MAAM,GAAGC,iBAAU;AAC9B,IAAA,CAACD,eAAS,CAAC,QAAQ,GAAGE,2BAAY;AAClC,IAAA,CAACF,eAAS,CAAC,OAAO,GAAGG,eAAgD;AACrE,IAAA,CAACH,eAAS,CAAC,SAAS,GAAGI,uBAAa;AACpC,IAAA,CAACJ,eAAS,CAAC,GAAG,GAAGK,uBAAwD;AACzE,IAAA,CAACL,eAAS,CAAC,SAAS,GAAGM,uBAAa;EACpC;AAEW,MAAA,iBAAiB,GAAG,CAAC,QAAmB,KAA4B;AAC/E,IAAA,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,cAAc,EAAE;AACnB,QAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAA,CAAE,CAAC,CAAC;KAC1D;AAED,IAAA,OAAO,cAAc,CAAC;AACxB;;;;;"}
@@ -0,0 +1,59 @@
1
+ 'use strict';
2
+
3
+ var run = require('./run.cjs');
4
+ var stream = require('./stream.cjs');
5
+ var events = require('./events.cjs');
6
+ var messages = require('./messages.cjs');
7
+ var Graph = require('./graphs/Graph.cjs');
8
+ var _enum = require('./common/enum.cjs');
9
+ var graph = require('./utils/graph.cjs');
10
+ var run$1 = require('./utils/run.cjs');
11
+
12
+
13
+
14
+ exports.Run = run.Run;
15
+ exports.ChatModelStreamHandler = stream.ChatModelStreamHandler;
16
+ exports.HandlerRegistry = events.HandlerRegistry;
17
+ exports.LLMStreamHandler = events.LLMStreamHandler;
18
+ exports.ModelEndHandler = events.ModelEndHandler;
19
+ exports.TestChatStreamHandler = events.TestChatStreamHandler;
20
+ exports.TestLLMStreamHandler = events.TestLLMStreamHandler;
21
+ exports.ToolEndHandler = events.ToolEndHandler;
22
+ exports.convertMessagesToContent = messages.convertMessagesToContent;
23
+ exports.formatAnthropicMessage = messages.formatAnthropicMessage;
24
+ exports.getConverseOverrideMessage = messages.getConverseOverrideMessage;
25
+ exports.modifyDeltaProperties = messages.modifyDeltaProperties;
26
+ exports.Graph = Graph.Graph;
27
+ exports.StandardGraph = Graph.StandardGraph;
28
+ Object.defineProperty(exports, "Callback", {
29
+ enumerable: true,
30
+ get: function () { return _enum.Callback; }
31
+ });
32
+ Object.defineProperty(exports, "CommonEvents", {
33
+ enumerable: true,
34
+ get: function () { return _enum.CommonEvents; }
35
+ });
36
+ Object.defineProperty(exports, "GraphEvents", {
37
+ enumerable: true,
38
+ get: function () { return _enum.GraphEvents; }
39
+ });
40
+ Object.defineProperty(exports, "GraphNodeActions", {
41
+ enumerable: true,
42
+ get: function () { return _enum.GraphNodeActions; }
43
+ });
44
+ Object.defineProperty(exports, "GraphNodeKeys", {
45
+ enumerable: true,
46
+ get: function () { return _enum.GraphNodeKeys; }
47
+ });
48
+ Object.defineProperty(exports, "Providers", {
49
+ enumerable: true,
50
+ get: function () { return _enum.Providers; }
51
+ });
52
+ Object.defineProperty(exports, "StepTypes", {
53
+ enumerable: true,
54
+ get: function () { return _enum.StepTypes; }
55
+ });
56
+ exports.joinKeys = graph.joinKeys;
57
+ exports.resetIfNotEmpty = graph.resetIfNotEmpty;
58
+ exports.RunnableCallable = run$1.RunnableCallable;
59
+ //# sourceMappingURL=main.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,195 @@
1
+ 'use strict';
2
+
3
+ var messages = require('@langchain/core/messages');
4
+
5
+ // src/messages.ts
6
+ function getConverseOverrideMessage({ userMessage, lastMessageX, lastMessageY }) {
7
+ const content = `
8
+ User: ${userMessage[1]}
9
+
10
+ ---
11
+ # YOU HAVE ALREADY RESPONDED TO THE LATEST USER MESSAGE:
12
+
13
+ # Observations:
14
+ - ${lastMessageX.content}
15
+
16
+ # Tool Calls:
17
+ - ${lastMessageX?.tool_calls?.join('\n- ')}
18
+
19
+ # Tool Responses:
20
+ - ${lastMessageY.content}
21
+ `;
22
+ return new messages.HumanMessage(content);
23
+ }
24
+ const modifyContent = (messageType, content) => {
25
+ return content.map(item => {
26
+ if (item && typeof item === 'object' && 'type' in item && item.type) {
27
+ let newType = item.type;
28
+ if (newType.endsWith('_delta')) {
29
+ newType = newType.replace('_delta', '');
30
+ }
31
+ const allowedTypes = ['image_url', 'text', 'tool_use', 'tool_result'];
32
+ if (!allowedTypes.includes(newType)) {
33
+ newType = 'text';
34
+ }
35
+ /* Handle the edge case for empty object 'tool_use' input in AI messages */
36
+ if (messageType === 'ai' && newType === 'tool_use' && 'input' in item && item.input === '') {
37
+ return { ...item, type: newType, input: '{}' };
38
+ }
39
+ return { ...item, type: newType };
40
+ }
41
+ return item;
42
+ });
43
+ };
44
+ function modifyDeltaProperties(obj) {
45
+ if (!obj || typeof obj !== 'object')
46
+ return obj;
47
+ const messageType = obj._getType ? obj._getType() : '';
48
+ if (Array.isArray(obj.content)) {
49
+ obj.content = modifyContent(messageType, obj.content);
50
+ }
51
+ if (obj.lc_kwargs && Array.isArray(obj.lc_kwargs.content)) {
52
+ obj.lc_kwargs.content = modifyContent(messageType, obj.lc_kwargs.content);
53
+ }
54
+ return obj;
55
+ }
56
+ function formatAnthropicMessage(message) {
57
+ if (!message.tool_calls || message.tool_calls.length === 0) {
58
+ return new messages.AIMessage({ content: message.content });
59
+ }
60
+ const toolCallMap = new Map(message.tool_calls.map(tc => [tc.id, tc]));
61
+ let formattedContent;
62
+ if (Array.isArray(message.content)) {
63
+ formattedContent = message.content.reduce((acc, item) => {
64
+ if (typeof item === 'object' && item !== null) {
65
+ const extendedItem = item;
66
+ if (extendedItem.type === 'text' && extendedItem.text) {
67
+ acc.push({ type: 'text', text: extendedItem.text });
68
+ }
69
+ else if (extendedItem.type === 'tool_use' && extendedItem.id) {
70
+ const toolCall = toolCallMap.get(extendedItem.id);
71
+ if (toolCall) {
72
+ acc.push({
73
+ type: 'tool_use',
74
+ id: extendedItem.id,
75
+ name: toolCall.name,
76
+ input: toolCall.args
77
+ });
78
+ }
79
+ }
80
+ else if ('input' in extendedItem && extendedItem.input) {
81
+ try {
82
+ const parsedInput = JSON.parse(extendedItem.input);
83
+ const toolCall = message.tool_calls?.find(tc => tc.args.input === parsedInput.input);
84
+ if (toolCall) {
85
+ acc.push({
86
+ type: 'tool_use',
87
+ id: toolCall.id,
88
+ name: toolCall.name,
89
+ input: toolCall.args
90
+ });
91
+ }
92
+ }
93
+ catch (e) {
94
+ if (extendedItem.input) {
95
+ acc.push({ type: 'text', text: extendedItem.input });
96
+ }
97
+ }
98
+ }
99
+ }
100
+ else if (typeof item === 'string') {
101
+ acc.push({ type: 'text', text: item });
102
+ }
103
+ return acc;
104
+ }, []);
105
+ }
106
+ else if (typeof message.content === 'string') {
107
+ formattedContent = message.content;
108
+ }
109
+ else {
110
+ formattedContent = [];
111
+ }
112
+ // const formattedToolCalls: ToolCall[] = message.tool_calls.map(toolCall => ({
113
+ // id: toolCall.id ?? '',
114
+ // name: toolCall.name,
115
+ // args: toolCall.args,
116
+ // type: 'tool_call',
117
+ // }));
118
+ const formattedToolCalls = message.tool_calls.map(toolCall => ({
119
+ id: toolCall.id ?? '',
120
+ type: 'function',
121
+ function: {
122
+ name: toolCall.name,
123
+ arguments: toolCall.args
124
+ }
125
+ }));
126
+ return new messages.AIMessage({
127
+ content: formattedContent,
128
+ tool_calls: formattedToolCalls,
129
+ additional_kwargs: {
130
+ ...message.additional_kwargs,
131
+ }
132
+ });
133
+ }
134
+ function convertMessagesToContent(messages) {
135
+ const processedContent = [];
136
+ const addContentPart = (message) => {
137
+ const content = message?.content;
138
+ if (content === undefined) {
139
+ return;
140
+ }
141
+ if (typeof content === 'string') {
142
+ processedContent.push({
143
+ type: 'text',
144
+ text: content
145
+ });
146
+ }
147
+ else if (Array.isArray(content)) {
148
+ const filteredContent = content.filter(item => item && item.type !== 'tool_use');
149
+ processedContent.push(...filteredContent);
150
+ }
151
+ };
152
+ let currentAIMessageIndex = -1;
153
+ const toolCallMap = new Map();
154
+ for (let i = 0; i < messages.length; i++) {
155
+ const message = messages[i];
156
+ const messageType = message?._getType();
157
+ if (messageType === 'ai' && message.tool_calls?.length) {
158
+ const tool_calls = message.tool_calls || [];
159
+ for (const tool_call of tool_calls) {
160
+ if (!tool_call.id) {
161
+ continue;
162
+ }
163
+ toolCallMap.set(tool_call.id, tool_call);
164
+ }
165
+ addContentPart(message);
166
+ currentAIMessageIndex = processedContent.length - 1;
167
+ continue;
168
+ }
169
+ else if (messageType === 'tool' && message.tool_call_id) {
170
+ const id = message.tool_call_id;
171
+ const output = message.content;
172
+ const tool_call = toolCallMap.get(id);
173
+ processedContent.push({
174
+ type: 'tool_call',
175
+ tool_call: Object.assign({}, tool_call, { output }),
176
+ });
177
+ const contentPart = processedContent[currentAIMessageIndex];
178
+ const tool_call_ids = contentPart.tool_call_ids || [];
179
+ tool_call_ids.push(id);
180
+ contentPart.tool_call_ids = tool_call_ids;
181
+ continue;
182
+ }
183
+ else if (messageType !== 'ai') {
184
+ continue;
185
+ }
186
+ addContentPart(message);
187
+ }
188
+ return processedContent;
189
+ }
190
+
191
+ exports.convertMessagesToContent = convertMessagesToContent;
192
+ exports.formatAnthropicMessage = formatAnthropicMessage;
193
+ exports.getConverseOverrideMessage = getConverseOverrideMessage;
194
+ exports.modifyDeltaProperties = modifyDeltaProperties;
195
+ //# sourceMappingURL=messages.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.cjs","sources":["../../src/messages.ts"],"sourcesContent":["// src/messages.ts\nimport { AIMessageChunk, HumanMessage, ToolMessage, AIMessage, BaseMessage } from '@langchain/core/messages';\nimport type { ToolCall } from '@langchain/core/messages/tool';\nimport type * as t from '@/types';\n\nexport function getConverseOverrideMessage({\n userMessage,\n lastMessageX,\n lastMessageY\n}: {\n userMessage: string[];\n lastMessageX: AIMessageChunk;\n lastMessageY: ToolMessage;\n}): HumanMessage {\n const content = `\nUser: ${userMessage[1]}\n\n---\n# YOU HAVE ALREADY RESPONDED TO THE LATEST USER MESSAGE:\n\n# Observations:\n- ${lastMessageX.content}\n\n# Tool Calls:\n- ${lastMessageX?.tool_calls?.join('\\n- ')}\n\n# Tool Responses:\n- ${lastMessageY.content}\n`;\n\n return new HumanMessage(content);\n}\n\nconst modifyContent = (messageType: string, content: t.ExtendedMessageContent[]): t.ExtendedMessageContent[] => {\n return content.map(item => {\n if (item && typeof item === 'object' && 'type' in item && item.type) {\n let newType = item.type;\n if (newType.endsWith('_delta')) {\n newType = newType.replace('_delta', '');\n }\n const allowedTypes = ['image_url', 'text', 'tool_use', 'tool_result'];\n if (!allowedTypes.includes(newType)) {\n newType = 'text';\n }\n\n /* Handle the edge case for empty object 'tool_use' input in AI messages */\n if (messageType === 'ai' && newType === 'tool_use' && 'input' in item && item.input === '') {\n return { ...item, type: newType, input: '{}' };\n }\n\n return { ...item, type: newType };\n }\n return item;\n });\n};\n\nexport function modifyDeltaProperties(obj?: AIMessageChunk): AIMessageChunk | undefined {\n if (!obj || typeof obj !== 'object') return obj;\n\n const messageType = obj._getType ? obj._getType() : '';\n\n if (Array.isArray(obj.content)) {\n obj.content = modifyContent(messageType, obj.content);\n }\n if (obj.lc_kwargs && Array.isArray(obj.lc_kwargs.content)) {\n obj.lc_kwargs.content = modifyContent(messageType, obj.lc_kwargs.content);\n }\n return obj;\n}\n\nexport function formatAnthropicMessage(message: AIMessageChunk): AIMessage {\n if (!message.tool_calls || message.tool_calls.length === 0) {\n return new AIMessage({ content: message.content });\n }\n\n const toolCallMap = new Map(message.tool_calls.map(tc => [tc.id, tc]));\n let formattedContent: string | t.ExtendedMessageContent[];\n\n if (Array.isArray(message.content)) {\n formattedContent = message.content.reduce<t.ExtendedMessageContent[]>((acc, item) => {\n if (typeof item === 'object' && item !== null) {\n const extendedItem = item as t.ExtendedMessageContent;\n if (extendedItem.type === 'text' && extendedItem.text) {\n acc.push({ type: 'text', text: extendedItem.text });\n } else if (extendedItem.type === 'tool_use' && extendedItem.id) {\n const toolCall = toolCallMap.get(extendedItem.id);\n if (toolCall) {\n acc.push({\n type: 'tool_use',\n id: extendedItem.id,\n name: toolCall.name,\n input: toolCall.args as unknown as string\n });\n }\n } else if ('input' in extendedItem && extendedItem.input) {\n try {\n const parsedInput = JSON.parse(extendedItem.input);\n const toolCall = message.tool_calls?.find(tc => tc.args.input === parsedInput.input);\n if (toolCall) {\n acc.push({\n type: 'tool_use',\n id: toolCall.id,\n name: toolCall.name,\n input: toolCall.args as unknown as string\n });\n }\n } catch (e) {\n if (extendedItem.input) {\n acc.push({ type: 'text', text: extendedItem.input });\n }\n }\n }\n } else if (typeof item === 'string') {\n acc.push({ type: 'text', text: item });\n }\n return acc;\n }, []);\n } else if (typeof message.content === 'string') {\n formattedContent = message.content;\n } else {\n formattedContent = [];\n }\n\n // const formattedToolCalls: ToolCall[] = message.tool_calls.map(toolCall => ({\n // id: toolCall.id ?? '',\n // name: toolCall.name,\n // args: toolCall.args,\n // type: 'tool_call',\n // }));\n\n const formattedToolCalls: t.AgentToolCall[] = message.tool_calls.map(toolCall => ({\n id: toolCall.id ?? '',\n type: 'function',\n function: {\n name: toolCall.name,\n arguments: toolCall.args\n }\n }));\n\n return new AIMessage({\n content: formattedContent,\n tool_calls: formattedToolCalls as ToolCall[],\n additional_kwargs: {\n ...message.additional_kwargs,\n }\n });\n}\n\nexport function convertMessagesToContent(messages: BaseMessage[]): t.MessageContentComplex[] {\n const processedContent: t.MessageContentComplex[] = [];\n\n const addContentPart = (message: BaseMessage): void => {\n const content = message?.content;\n if (content === undefined) {\n return;\n }\n if (typeof content === 'string') {\n processedContent.push({\n type: 'text',\n text: content\n });\n } else if (Array.isArray(content)) {\n const filteredContent = content.filter(item => item && item.type !== 'tool_use');\n processedContent.push(...filteredContent);\n }\n };\n\n let currentAIMessageIndex = -1;\n const toolCallMap = new Map<string, t.CustomToolCall>();\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n const messageType = message?._getType();\n\n if (messageType === 'ai' && (message as AIMessage).tool_calls?.length) {\n const tool_calls = (message as AIMessage).tool_calls || [];\n for (const tool_call of tool_calls) {\n if (!tool_call.id) {\n continue;\n }\n\n toolCallMap.set(tool_call.id, tool_call);\n }\n\n addContentPart(message);\n currentAIMessageIndex = processedContent.length - 1;\n continue;\n } else if (messageType === 'tool' && (message as ToolMessage).tool_call_id) {\n const id = (message as ToolMessage).tool_call_id;\n const output = (message as ToolMessage).content;\n const tool_call = toolCallMap.get(id);\n\n processedContent.push({\n type: 'tool_call',\n tool_call: Object.assign({}, tool_call, { output }),\n });\n const contentPart = processedContent[currentAIMessageIndex];\n const tool_call_ids = contentPart.tool_call_ids || [];\n tool_call_ids.push(id);\n contentPart.tool_call_ids = tool_call_ids;\n continue;\n } else if (messageType !== 'ai') {\n continue;\n }\n\n addContentPart(message);\n }\n\n return processedContent;\n}"],"names":["HumanMessage","AIMessage"],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ 'use strict';
2
+
3
+ var _enum = require('./common/enum.cjs');
4
+ var Graph = require('./graphs/Graph.cjs');
5
+ var events = require('./events.cjs');
6
+
7
+ class Run {
8
+ graphRunnable;
9
+ // private collab!: CollabGraph;
10
+ // private taskManager!: TaskManager;
11
+ handlerRegistry;
12
+ Graph;
13
+ provider;
14
+ run_id;
15
+ constructor(config) {
16
+ const handlerRegistry = new events.HandlerRegistry();
17
+ if (config.customHandlers) {
18
+ for (const [eventType, handler] of Object.entries(config.customHandlers)) {
19
+ handlerRegistry.register(eventType, handler);
20
+ }
21
+ }
22
+ this.handlerRegistry = handlerRegistry;
23
+ if (config.graphConfig.type === 'standard' || !config.graphConfig.type) {
24
+ this.provider = config.graphConfig.llmConfig.provider;
25
+ this.graphRunnable = this.createStandardGraph(config.graphConfig);
26
+ if (this.Graph) {
27
+ this.Graph.handlerRegistry = handlerRegistry;
28
+ }
29
+ }
30
+ }
31
+ createStandardGraph(config) {
32
+ const { runId, llmConfig, instructions, additional_instructions, tools = [] } = config;
33
+ const { provider, ...clientOptions } = llmConfig;
34
+ const standardGraph = new Graph.StandardGraph({
35
+ runId,
36
+ tools,
37
+ provider,
38
+ instructions,
39
+ clientOptions,
40
+ additional_instructions,
41
+ });
42
+ this.Graph = standardGraph;
43
+ return standardGraph.createWorkflow();
44
+ }
45
+ static async create(config) {
46
+ return new Run(config);
47
+ }
48
+ getRunMessages() {
49
+ if (!this.Graph) {
50
+ throw new Error('Graph not initialized. Make sure to use Run.create() to instantiate the Run.');
51
+ }
52
+ return this.Graph.getRunMessages();
53
+ }
54
+ async processStream(inputs, config, clientCallbacks) {
55
+ if (!this.graphRunnable) {
56
+ throw new Error('Run not initialized. Make sure to use Run.create() to instantiate the Run.');
57
+ }
58
+ if (!this.Graph) {
59
+ throw new Error('Graph not initialized. Make sure to use Run.create() to instantiate the Run.');
60
+ }
61
+ this.Graph.resetValues();
62
+ const provider = this.Graph.provider;
63
+ const hasTools = this.Graph.tools ? this.Graph.tools.length > 0 : false;
64
+ if (clientCallbacks) {
65
+ /* TODO: conflicts with callback manager */
66
+ const callbacks = config.callbacks || [];
67
+ config.callbacks = callbacks.concat(this.getCallbacks(clientCallbacks));
68
+ }
69
+ const stream = this.graphRunnable.streamEvents(inputs, config);
70
+ for await (const event of stream) {
71
+ const { data, name, metadata, ...info } = event;
72
+ let eventName = info.event;
73
+ if (hasTools && provider === _enum.Providers.ANTHROPIC && eventName === _enum.GraphEvents.CHAT_MODEL_STREAM) {
74
+ /* Skipping CHAT_MODEL_STREAM event for Anthropic due to double-call edge case */
75
+ continue;
76
+ }
77
+ if (eventName && eventName === _enum.GraphEvents.ON_CUSTOM_EVENT) {
78
+ eventName = name;
79
+ }
80
+ // console.log(`Event: ${event.event} | Executing Event: ${eventName}`);
81
+ const handler = this.handlerRegistry.getHandler(eventName);
82
+ if (handler) {
83
+ handler.handle(eventName, data, metadata, this.Graph);
84
+ }
85
+ }
86
+ return this.Graph.getContentParts();
87
+ }
88
+ createSystemCallback(clientCallbacks, key) {
89
+ return ((...args) => {
90
+ const clientCallback = clientCallbacks[key];
91
+ if (clientCallback && this.Graph) {
92
+ clientCallback(this.Graph, ...args);
93
+ }
94
+ });
95
+ }
96
+ getCallbacks(clientCallbacks) {
97
+ return {
98
+ [_enum.Callback.TOOL_ERROR]: this.createSystemCallback(clientCallbacks, _enum.Callback.TOOL_ERROR),
99
+ [_enum.Callback.TOOL_START]: this.createSystemCallback(clientCallbacks, _enum.Callback.TOOL_START),
100
+ [_enum.Callback.TOOL_END]: this.createSystemCallback(clientCallbacks, _enum.Callback.TOOL_END),
101
+ };
102
+ }
103
+ }
104
+
105
+ exports.Run = Run;
106
+ //# sourceMappingURL=run.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.cjs","sources":["../../src/run.ts"],"sourcesContent":["// src/run.ts\nimport type { BaseCallbackHandler, CallbackHandlerMethods } from '@langchain/core/callbacks/base';\nimport type { BaseMessage, MessageContentComplex } from '@langchain/core/messages';\nimport type { RunnableConfig } from '@langchain/core/runnables';\nimport type { ClientCallbacks, SystemCallbacks } from '@/graphs/Graph';\nimport type * as t from '@/types';\nimport { GraphEvents, Providers, Callback } from '@/common';\nimport { StandardGraph } from '@/graphs/Graph';\nimport { HandlerRegistry } from '@/events';\n\nexport class Run<T extends t.BaseGraphState> {\n graphRunnable?: t.CompiledWorkflow<T, Partial<T>, string>;\n // private collab!: CollabGraph;\n // private taskManager!: TaskManager;\n private handlerRegistry: HandlerRegistry;\n private Graph: StandardGraph | undefined;\n provider: Providers | undefined;\n run_id: string | undefined;\n\n private constructor(config: t.RunConfig) {\n const handlerRegistry = new HandlerRegistry();\n\n if (config.customHandlers) {\n for (const [eventType, handler] of Object.entries(config.customHandlers)) {\n handlerRegistry.register(eventType, handler);\n }\n }\n\n this.handlerRegistry = handlerRegistry;\n\n if (config.graphConfig.type === 'standard' || !config.graphConfig.type) {\n this.provider = config.graphConfig.llmConfig.provider;\n this.graphRunnable = this.createStandardGraph(config.graphConfig) as unknown as t.CompiledWorkflow<T, Partial<T>, string>;\n if (this.Graph) {\n this.Graph.handlerRegistry = handlerRegistry;\n }\n }\n }\n\n private createStandardGraph(config: t.StandardGraphConfig): t.CompiledWorkflow<t.IState, Partial<t.IState>, string> {\n const { runId, llmConfig, instructions, additional_instructions, tools = [] } = config;\n const { provider, ...clientOptions } = llmConfig;\n\n const standardGraph = new StandardGraph({\n runId,\n tools,\n provider,\n instructions,\n clientOptions,\n additional_instructions,\n });\n this.Graph = standardGraph;\n return standardGraph.createWorkflow();\n }\n\n static async create<T extends t.BaseGraphState>(config: t.RunConfig): Promise<Run<T>> {\n return new Run<T>(config);\n }\n\n getRunMessages(): BaseMessage[] | undefined {\n if (!this.Graph) {\n throw new Error('Graph not initialized. Make sure to use Run.create() to instantiate the Run.');\n }\n return this.Graph.getRunMessages();\n }\n\n async processStream(\n inputs: t.IState,\n config: Partial<RunnableConfig> & { version: 'v1' | 'v2' },\n clientCallbacks?: ClientCallbacks,\n ): Promise<MessageContentComplex[] | undefined> {\n if (!this.graphRunnable) {\n throw new Error('Run not initialized. Make sure to use Run.create() to instantiate the Run.');\n }\n if (!this.Graph) {\n throw new Error('Graph not initialized. Make sure to use Run.create() to instantiate the Run.');\n }\n\n this.Graph.resetValues();\n const provider = this.Graph.provider;\n const hasTools = this.Graph.tools ? this.Graph.tools.length > 0 : false;\n if (clientCallbacks) {\n /* TODO: conflicts with callback manager */\n const callbacks = config.callbacks as (BaseCallbackHandler | CallbackHandlerMethods)[] || [];\n config.callbacks = callbacks.concat(this.getCallbacks(clientCallbacks));\n }\n const stream = this.graphRunnable.streamEvents(inputs, config);\n\n for await (const event of stream) {\n const { data, name, metadata, ...info } = event;\n\n let eventName: t.EventName = info.event;\n if (hasTools && provider === Providers.ANTHROPIC && eventName === GraphEvents.CHAT_MODEL_STREAM) {\n /* Skipping CHAT_MODEL_STREAM event for Anthropic due to double-call edge case */\n continue;\n }\n\n if (eventName && eventName === GraphEvents.ON_CUSTOM_EVENT) {\n eventName = name;\n }\n\n // console.log(`Event: ${event.event} | Executing Event: ${eventName}`);\n\n const handler = this.handlerRegistry.getHandler(eventName);\n if (handler) {\n handler.handle(eventName, data, metadata, this.Graph);\n }\n }\n\n return this.Graph.getContentParts();\n }\n\n private createSystemCallback<K extends keyof ClientCallbacks>(\n clientCallbacks: ClientCallbacks,\n key: K\n ): SystemCallbacks[K] {\n return ((...args: unknown[]) => {\n const clientCallback = clientCallbacks[key];\n if (clientCallback && this.Graph) {\n (clientCallback as (...args: unknown[]) => void)(this.Graph, ...args);\n }\n }) as SystemCallbacks[K];\n }\n\n getCallbacks(clientCallbacks: ClientCallbacks): SystemCallbacks {\n return {\n [Callback.TOOL_ERROR]: this.createSystemCallback(clientCallbacks, Callback.TOOL_ERROR),\n [Callback.TOOL_START]: this.createSystemCallback(clientCallbacks, Callback.TOOL_START),\n [Callback.TOOL_END]: this.createSystemCallback(clientCallbacks, Callback.TOOL_END),\n };\n }\n}\n"],"names":["HandlerRegistry","StandardGraph","Providers","GraphEvents","Callback"],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ 'use strict';
2
+
3
+ var nanoid = require('nanoid');
4
+ var _enum = require('./common/enum.cjs');
5
+
6
+ // src/stream.ts
7
+ const getMessageId = (stepKey, graph) => {
8
+ const messageId = graph.messageIdsByStepKey.get(stepKey);
9
+ if (messageId) {
10
+ return;
11
+ }
12
+ const prelimMessageId = graph.prelimMessageIdsByStepKey.get(stepKey);
13
+ if (prelimMessageId) {
14
+ graph.prelimMessageIdsByStepKey.delete(stepKey);
15
+ graph.messageIdsByStepKey.set(stepKey, prelimMessageId);
16
+ return prelimMessageId;
17
+ }
18
+ const message_id = `msg_${nanoid.nanoid()}`;
19
+ graph.messageIdsByStepKey.set(stepKey, message_id);
20
+ return message_id;
21
+ };
22
+ class ChatModelStreamHandler {
23
+ handle(event, data, metadata, graph) {
24
+ if (!graph) {
25
+ throw new Error('Graph not found');
26
+ }
27
+ const chunk = data.chunk;
28
+ const content = chunk?.content;
29
+ if (!graph.config) {
30
+ throw new Error('Config not found in graph');
31
+ }
32
+ if (!chunk) {
33
+ console.warn(`No chunk found in ${event} event`);
34
+ return;
35
+ }
36
+ const hasToolCalls = chunk.tool_calls && chunk.tool_calls.length > 0;
37
+ const hasToolCallChunks = chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0;
38
+ if (hasToolCalls && chunk.tool_calls?.every((tc) => tc.id)) {
39
+ const tool_calls = [];
40
+ for (const tool_call of chunk.tool_calls) {
41
+ if (!tool_call.id || graph.toolCallStepIds.has(tool_call.id)) {
42
+ continue;
43
+ }
44
+ tool_calls.push(tool_call);
45
+ }
46
+ const stepKey = graph.getStepKey(metadata);
47
+ graph.dispatchRunStep(stepKey, {
48
+ type: _enum.StepTypes.TOOL_CALLS,
49
+ tool_calls,
50
+ });
51
+ }
52
+ const isEmptyContent = !content || !content.length;
53
+ const isEmptyChunk = isEmptyContent && !hasToolCallChunks;
54
+ if (isEmptyChunk && chunk.id && chunk.id?.startsWith('msg')) {
55
+ if (graph.messageIdsByStepKey.has(chunk.id)) {
56
+ return;
57
+ }
58
+ else if (graph.prelimMessageIdsByStepKey.has(chunk.id)) {
59
+ return;
60
+ }
61
+ const stepKey = graph.getStepKey(metadata);
62
+ graph.prelimMessageIdsByStepKey.set(stepKey, chunk.id);
63
+ return;
64
+ }
65
+ else if (isEmptyChunk) {
66
+ return;
67
+ }
68
+ const stepKey = graph.getStepKey(metadata);
69
+ if (hasToolCallChunks && chunk.tool_call_chunks?.length && typeof chunk.tool_call_chunks[0]?.index === 'number') {
70
+ const stepId = graph.getStepIdByKey(stepKey, chunk.tool_call_chunks[0].index);
71
+ graph.dispatchRunStepDelta(stepId, {
72
+ type: _enum.StepTypes.TOOL_CALLS,
73
+ tool_calls: chunk.tool_call_chunks,
74
+ });
75
+ }
76
+ if (isEmptyContent) {
77
+ return;
78
+ }
79
+ const message_id = getMessageId(stepKey, graph);
80
+ if (message_id) {
81
+ graph.dispatchRunStep(stepKey, {
82
+ type: _enum.StepTypes.MESSAGE_CREATION,
83
+ message_creation: {
84
+ message_id,
85
+ },
86
+ });
87
+ }
88
+ const stepId = graph.getStepIdByKey(stepKey);
89
+ const runStep = graph.getRunStep(stepId);
90
+ if (!runStep) {
91
+ // eslint-disable-next-line no-console
92
+ console.warn(`\n
93
+ ==============================================================
94
+
95
+
96
+ Run step for ${stepId} does not exist, cannot dispatch delta event.
97
+
98
+ event: ${event}
99
+ stepId: ${stepId}
100
+ stepKey: ${stepKey}
101
+ message_id: ${message_id}
102
+ hasToolCalls: ${hasToolCalls}
103
+ hasToolCallChunks: ${hasToolCallChunks}
104
+
105
+ ==============================================================
106
+ \n`);
107
+ return;
108
+ }
109
+ /* Note: tool call chunks may have non-empty content that matches the current tool chunk generation */
110
+ if (typeof content === 'string' && runStep.type === _enum.StepTypes.TOOL_CALLS) {
111
+ return;
112
+ }
113
+ else if (hasToolCallChunks && chunk.tool_call_chunks?.some((tc) => tc.args === content)) {
114
+ return;
115
+ }
116
+ else if (typeof content === 'string') {
117
+ graph.dispatchMessageDelta(stepId, {
118
+ content: [{
119
+ type: 'text',
120
+ text: content,
121
+ }],
122
+ });
123
+ }
124
+ else if (content?.every((c) => c.type?.startsWith('text'))) {
125
+ graph.dispatchMessageDelta(stepId, {
126
+ content,
127
+ });
128
+ }
129
+ }
130
+ }
131
+
132
+ exports.ChatModelStreamHandler = ChatModelStreamHandler;
133
+ //# sourceMappingURL=stream.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.cjs","sources":["../../src/stream.ts"],"sourcesContent":["// src/stream.ts\nimport { nanoid } from 'nanoid';\nimport type { AIMessageChunk } from '@langchain/core/messages';\nimport type { ToolCall } from '@langchain/core/messages/tool';\nimport type { Graph } from '@/graphs';\nimport type * as t from '@/types';\nimport { StepTypes } from '@/common';\n\nconst getMessageId = (stepKey: string, graph: Graph<t.BaseGraphState>): string | undefined => {\n const messageId = graph.messageIdsByStepKey.get(stepKey);\n if (messageId) {\n return;\n }\n\n const prelimMessageId = graph.prelimMessageIdsByStepKey.get(stepKey);\n if (prelimMessageId) {\n graph.prelimMessageIdsByStepKey.delete(stepKey);\n graph.messageIdsByStepKey.set(stepKey, prelimMessageId);\n return prelimMessageId;\n }\n\n const message_id = `msg_${nanoid()}`;\n graph.messageIdsByStepKey.set(stepKey, message_id);\n return message_id;\n};\n\nexport class ChatModelStreamHandler implements t.EventHandler {\n handle(event: string, data: t.StreamEventData, metadata?: Record<string, unknown>, graph?: Graph): void {\n if (!graph) {\n throw new Error('Graph not found');\n }\n\n const chunk = data.chunk as AIMessageChunk;\n const content = chunk?.content;\n\n if (!graph.config) {\n throw new Error('Config not found in graph');\n }\n\n if (!chunk) {\n console.warn(`No chunk found in ${event} event`);\n return;\n }\n\n const hasToolCalls = chunk.tool_calls && chunk.tool_calls.length > 0;\n const hasToolCallChunks = chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0;\n\n if (hasToolCalls && chunk.tool_calls?.every((tc) => tc.id)) {\n const tool_calls: ToolCall[] = [];\n for (const tool_call of chunk.tool_calls) {\n if (!tool_call.id || graph.toolCallStepIds.has(tool_call.id)) {\n continue;\n }\n\n tool_calls.push(tool_call);\n }\n\n const stepKey = graph.getStepKey(metadata);\n graph.dispatchRunStep(stepKey, {\n type: StepTypes.TOOL_CALLS,\n tool_calls,\n });\n }\n\n const isEmptyContent = !content || !content.length;\n const isEmptyChunk = isEmptyContent && !hasToolCallChunks;\n if (isEmptyChunk && chunk.id && chunk.id?.startsWith('msg')) {\n if (graph.messageIdsByStepKey.has(chunk.id)) {\n return;\n } else if (graph.prelimMessageIdsByStepKey.has(chunk.id)) {\n return;\n }\n\n const stepKey = graph.getStepKey(metadata);\n graph.prelimMessageIdsByStepKey.set(stepKey, chunk.id);\n return;\n } else if (isEmptyChunk) {\n return;\n }\n\n const stepKey = graph.getStepKey(metadata);\n\n if (hasToolCallChunks && chunk.tool_call_chunks?.length && typeof chunk.tool_call_chunks[0]?.index === 'number') {\n const stepId = graph.getStepIdByKey(stepKey, chunk.tool_call_chunks[0].index);\n graph.dispatchRunStepDelta(stepId, {\n type: StepTypes.TOOL_CALLS,\n tool_calls: chunk.tool_call_chunks,\n });\n }\n\n if (isEmptyContent) {\n return;\n }\n\n const message_id = getMessageId(stepKey, graph);\n if (message_id) {\n graph.dispatchRunStep(stepKey, {\n type: StepTypes.MESSAGE_CREATION,\n message_creation: {\n message_id,\n },\n });\n }\n\n const stepId = graph.getStepIdByKey(stepKey);\n const runStep = graph.getRunStep(stepId);\n if (!runStep) {\n // eslint-disable-next-line no-console\n console.warn(`\\n\n==============================================================\n\n\nRun step for ${stepId} does not exist, cannot dispatch delta event.\n\nevent: ${event}\nstepId: ${stepId}\nstepKey: ${stepKey}\nmessage_id: ${message_id}\nhasToolCalls: ${hasToolCalls}\nhasToolCallChunks: ${hasToolCallChunks}\n\n==============================================================\n\\n`);\n return;\n }\n\n /* Note: tool call chunks may have non-empty content that matches the current tool chunk generation */\n if (typeof content === 'string' && runStep.type === StepTypes.TOOL_CALLS) {\n return;\n } else if (hasToolCallChunks && chunk.tool_call_chunks?.some((tc) => tc.args === content)) {\n return;\n } else if (typeof content === 'string') {\n graph.dispatchMessageDelta(stepId, {\n content: [{\n type: 'text',\n text: content,\n }],\n });\n } else if (content?.every((c) => c.type?.startsWith('text'))) {\n graph.dispatchMessageDelta(stepId, {\n content,\n });\n }\n }\n}"],"names":["nanoid","StepTypes"],"mappings":";;;;;AAAA;AAQA,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,KAA8B,KAAwB;IAC3F,MAAM,SAAS,GAAG,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,SAAS,EAAE;QACb,OAAO;KACR;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrE,IAAI,eAAe,EAAE;AACnB,QAAA,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACxD,QAAA,OAAO,eAAe,CAAC;KACxB;AAED,IAAA,MAAM,UAAU,GAAG,CAAA,IAAA,EAAOA,aAAM,EAAE,EAAE,CAAC;IACrC,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACnD,IAAA,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;MAEW,sBAAsB,CAAA;AACjC,IAAA,MAAM,CAAC,KAAa,EAAE,IAAuB,EAAE,QAAkC,EAAE,KAAa,EAAA;QAC9F,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;SACpC;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAuB,CAAC;AAC3C,QAAA,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,CAAC;AAE/B,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC9C;QAED,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,CAAC,IAAI,CAAC,qBAAqB,KAAK,CAAA,MAAA,CAAQ,CAAC,CAAC;YACjD,OAAO;SACR;AAED,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;AACrE,QAAA,MAAM,iBAAiB,GAAG,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;AAEtF,QAAA,IAAI,YAAY,IAAI,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;YAC1D,MAAM,UAAU,GAAe,EAAE,CAAC;AAClC,YAAA,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,EAAE;AACxC,gBAAA,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;oBAC5D,SAAS;iBACV;AAED,gBAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC5B;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC3C,YAAA,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE;gBAC7B,IAAI,EAAEC,eAAS,CAAC,UAAU;gBAC1B,UAAU;AACX,aAAA,CAAC,CAAC;SACJ;QAED,MAAM,cAAc,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACnD,QAAA,MAAM,YAAY,GAAG,cAAc,IAAI,CAAC,iBAAiB,CAAC;AAC1D,QAAA,IAAI,YAAY,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE;YAC3D,IAAI,KAAK,CAAC,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;gBAC3C,OAAO;aACR;iBAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;gBACxD,OAAO;aACR;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC3C,KAAK,CAAC,yBAAyB,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YACvD,OAAO;SACR;aAAM,IAAI,YAAY,EAAE;YACvB,OAAO;SACR;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE3C,IAAI,iBAAiB,IAAI,KAAK,CAAC,gBAAgB,EAAE,MAAM,IAAI,OAAO,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,QAAQ,EAAE;AAC/G,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9E,YAAA,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE;gBACjC,IAAI,EAAEA,eAAS,CAAC,UAAU;gBAC1B,UAAU,EAAE,KAAK,CAAC,gBAAgB;AACnC,aAAA,CAAC,CAAC;SACJ;QAED,IAAI,cAAc,EAAE;YAClB,OAAO;SACR;QAED,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,UAAU,EAAE;AACd,YAAA,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE;gBAC7B,IAAI,EAAEA,eAAS,CAAC,gBAAgB;AAChC,gBAAA,gBAAgB,EAAE;oBAChB,UAAU;AACX,iBAAA;AACF,aAAA,CAAC,CAAC;SACJ;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE;;YAEZ,OAAO,CAAC,IAAI,CAAC,CAAA;;;;eAIJ,MAAM,CAAA;;SAEZ,KAAK,CAAA;UACJ,MAAM,CAAA;WACL,OAAO,CAAA;cACJ,UAAU,CAAA;gBACR,YAAY,CAAA;qBACP,iBAAiB,CAAA;;;AAGnC,EAAA,CAAA,CAAC,CAAC;YACC,OAAO;SACR;;AAGD,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAKA,eAAS,CAAC,UAAU,EAAE;YACxE,OAAO;SACR;aAAM,IAAI,iBAAiB,IAAI,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE;YACzF,OAAO;SACR;AAAM,aAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACtC,YAAA,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE;AACjC,gBAAA,OAAO,EAAE,CAAC;AACR,wBAAA,IAAI,EAAE,MAAM;AACZ,wBAAA,IAAI,EAAE,OAAO;qBACd,CAAC;AACH,aAAA,CAAC,CAAC;SACJ;AAAM,aAAA,IAAI,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE;AAC5D,YAAA,KAAK,CAAC,oBAAoB,CAAC,MAAM,EAAE;gBACjC,OAAO;AACR,aAAA,CAAC,CAAC;SACJ;KACF;AACF;;;;"}