@librechat/agents 2.1.2 → 2.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/cjs/common/enum.cjs +1 -0
  2. package/dist/cjs/common/enum.cjs.map +1 -1
  3. package/dist/cjs/graphs/Graph.cjs +11 -0
  4. package/dist/cjs/graphs/Graph.cjs.map +1 -1
  5. package/dist/cjs/llm/anthropic/llm.cjs +46 -16
  6. package/dist/cjs/llm/anthropic/llm.cjs.map +1 -1
  7. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +25 -1
  8. package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +1 -1
  9. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +93 -31
  10. package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +1 -1
  11. package/dist/cjs/splitStream.cjs +8 -2
  12. package/dist/cjs/splitStream.cjs.map +1 -1
  13. package/dist/cjs/stream.cjs +13 -2
  14. package/dist/cjs/stream.cjs.map +1 -1
  15. package/dist/esm/common/enum.mjs +1 -0
  16. package/dist/esm/common/enum.mjs.map +1 -1
  17. package/dist/esm/graphs/Graph.mjs +11 -0
  18. package/dist/esm/graphs/Graph.mjs.map +1 -1
  19. package/dist/esm/llm/anthropic/llm.mjs +46 -16
  20. package/dist/esm/llm/anthropic/llm.mjs.map +1 -1
  21. package/dist/esm/llm/anthropic/utils/message_inputs.mjs +25 -1
  22. package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +1 -1
  23. package/dist/esm/llm/anthropic/utils/message_outputs.mjs +93 -31
  24. package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +1 -1
  25. package/dist/esm/splitStream.mjs +8 -2
  26. package/dist/esm/splitStream.mjs.map +1 -1
  27. package/dist/esm/stream.mjs +13 -2
  28. package/dist/esm/stream.mjs.map +1 -1
  29. package/dist/types/common/enum.d.ts +1 -0
  30. package/dist/types/llm/anthropic/llm.d.ts +3 -2
  31. package/dist/types/llm/anthropic/types.d.ts +10 -0
  32. package/dist/types/scripts/caching.d.ts +1 -0
  33. package/dist/types/scripts/thinking.d.ts +1 -0
  34. package/dist/types/splitStream.d.ts +2 -0
  35. package/dist/types/types/stream.d.ts +8 -2
  36. package/package.json +9 -7
  37. package/src/common/enum.ts +1 -0
  38. package/src/graphs/Graph.ts +14 -2
  39. package/src/llm/anthropic/llm.spec.ts +1069 -0
  40. package/src/llm/anthropic/llm.ts +65 -22
  41. package/src/llm/anthropic/types.ts +11 -2
  42. package/src/llm/anthropic/utils/message_inputs.ts +31 -1
  43. package/src/llm/anthropic/utils/message_outputs.ts +112 -42
  44. package/src/scripts/caching.ts +124 -0
  45. package/src/scripts/thinking.ts +152 -0
  46. package/src/scripts/tools.ts +2 -2
  47. package/src/splitStream.ts +8 -3
  48. package/src/stream.ts +11 -2
  49. package/src/types/stream.ts +9 -2
@@ -13,16 +13,27 @@ function _makeMessageChunkFromAnthropicEvent(data, fields) {
13
13
  filteredAdditionalKwargs[key] = value;
14
14
  }
15
15
  }
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ const { input_tokens, output_tokens, ...rest } = usage ?? {};
16
18
  const usageMetadata = {
17
- input_tokens: usage.input_tokens,
18
- output_tokens: usage.output_tokens,
19
- total_tokens: usage.input_tokens + usage.output_tokens,
19
+ input_tokens,
20
+ output_tokens,
21
+ total_tokens: input_tokens + output_tokens,
22
+ input_token_details: {
23
+ cache_creation: rest.cache_creation_input_tokens,
24
+ cache_read: rest.cache_read_input_tokens,
25
+ },
20
26
  };
21
27
  return {
22
28
  chunk: new messages.AIMessageChunk({
23
29
  content: fields.coerceContentToString ? '' : [],
24
30
  additional_kwargs: filteredAdditionalKwargs,
25
31
  usage_metadata: fields.streamUsage ? usageMetadata : undefined,
32
+ response_metadata: {
33
+ usage: {
34
+ ...rest,
35
+ },
36
+ },
26
37
  id: data.message.id,
27
38
  }),
28
39
  };
@@ -32,6 +43,12 @@ function _makeMessageChunkFromAnthropicEvent(data, fields) {
32
43
  input_tokens: 0,
33
44
  output_tokens: data.usage.output_tokens,
34
45
  total_tokens: data.usage.output_tokens,
46
+ input_token_details: {
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ cache_creation: data.usage.cache_creation_input_tokens,
49
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
+ cache_read: data.usage.cache_read_input_tokens,
51
+ },
35
52
  };
36
53
  return {
37
54
  chunk: new messages.AIMessageChunk({
@@ -41,53 +58,77 @@ function _makeMessageChunkFromAnthropicEvent(data, fields) {
41
58
  }),
42
59
  };
43
60
  }
44
- else if (data.type === 'content_block_start' &&
45
- data.content_block.type === 'tool_use') {
46
- const toolCallContentBlock = data.content_block;
61
+ else if (data.type === "content_block_start" &&
62
+ ["tool_use", "document"].includes(data.content_block.type)) {
63
+ const contentBlock = data.content_block;
64
+ let toolCallChunks;
65
+ if (contentBlock.type === "tool_use") {
66
+ toolCallChunks = [
67
+ {
68
+ id: contentBlock.id,
69
+ index: data.index,
70
+ name: contentBlock.name,
71
+ args: "",
72
+ },
73
+ ];
74
+ }
75
+ else {
76
+ toolCallChunks = [];
77
+ }
47
78
  return {
48
79
  chunk: new messages.AIMessageChunk({
49
80
  content: fields.coerceContentToString
50
- ? ''
81
+ ? ""
51
82
  : [
52
83
  {
53
84
  index: data.index,
54
85
  ...data.content_block,
55
- input: '',
86
+ input: "",
56
87
  },
57
88
  ],
58
89
  additional_kwargs: {},
59
- tool_call_chunks: [
60
- {
61
- id: toolCallContentBlock.id,
62
- index: data.index,
63
- name: toolCallContentBlock.name,
64
- args: '',
65
- },
66
- ],
90
+ tool_call_chunks: toolCallChunks,
67
91
  }),
68
92
  };
69
93
  }
70
- else if (data.type === 'content_block_delta' &&
71
- data.delta.type === 'text_delta') {
72
- const content = data.delta.text;
73
- if (content !== undefined) {
94
+ else if (data.type === "content_block_delta" &&
95
+ [
96
+ "text_delta",
97
+ "citations_delta",
98
+ "thinking_delta",
99
+ "signature_delta",
100
+ ].includes(data.delta.type)) {
101
+ if (fields.coerceContentToString && "text" in data.delta) {
74
102
  return {
75
103
  chunk: new messages.AIMessageChunk({
76
- content: fields.coerceContentToString
77
- ? content
78
- : [
79
- {
80
- index: data.index,
81
- ...data.delta,
82
- },
83
- ],
84
- additional_kwargs: {},
104
+ content: data.delta.text,
105
+ }),
106
+ };
107
+ }
108
+ else {
109
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
110
+ const contentBlock = data.delta;
111
+ if ("citation" in contentBlock) {
112
+ contentBlock.citations = [contentBlock.citation];
113
+ delete contentBlock.citation;
114
+ }
115
+ if (contentBlock.type === "thinking_delta" ||
116
+ contentBlock.type === "signature_delta") {
117
+ return {
118
+ chunk: new messages.AIMessageChunk({
119
+ content: [{ index: data.index, ...contentBlock, type: "thinking" }],
120
+ }),
121
+ };
122
+ }
123
+ return {
124
+ chunk: new messages.AIMessageChunk({
125
+ content: [{ index: data.index, ...contentBlock, type: "text" }],
85
126
  }),
86
127
  };
87
128
  }
88
129
  }
89
- else if (data.type === 'content_block_delta' &&
90
- data.delta.type === 'input_json_delta') {
130
+ else if (data.type === "content_block_delta" &&
131
+ data.delta.type === "input_json_delta") {
91
132
  return {
92
133
  chunk: new messages.AIMessageChunk({
93
134
  content: fields.coerceContentToString
@@ -128,6 +169,27 @@ function _makeMessageChunkFromAnthropicEvent(data, fields) {
128
169
  };
129
170
  }
130
171
  }
172
+ else if (data.type === "content_block_start" &&
173
+ data.content_block.type === "redacted_thinking") {
174
+ return {
175
+ chunk: new messages.AIMessageChunk({
176
+ content: fields.coerceContentToString
177
+ ? ""
178
+ : [{ index: data.index, ...data.content_block }],
179
+ }),
180
+ };
181
+ }
182
+ else if (data.type === "content_block_start" &&
183
+ data.content_block.type === "thinking") {
184
+ const content = data.content_block.thinking;
185
+ return {
186
+ chunk: new messages.AIMessageChunk({
187
+ content: fields.coerceContentToString
188
+ ? content
189
+ : [{ index: data.index, ...data.content_block }],
190
+ }),
191
+ };
192
+ }
131
193
  return null;
132
194
  }
133
195
 
@@ -1 +1 @@
1
- {"version":3,"file":"message_outputs.cjs","sources":["../../../../../src/llm/anthropic/utils/message_outputs.ts"],"sourcesContent":["/**\n * This util file contains functions for converting Anthropic messages to LangChain messages.\n */\nimport Anthropic from '@anthropic-ai/sdk';\nimport {\n AIMessage,\n UsageMetadata,\n AIMessageChunk,\n} from '@langchain/core/messages';\nimport { ToolCall } from '@langchain/core/messages/tool';\nimport { ChatGeneration } from '@langchain/core/outputs';\nimport { AnthropicMessageResponse } from '../types.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function extractToolCalls(content: Record<string, any>[]): ToolCall[] {\n const toolCalls: ToolCall[] = [];\n for (const block of content) {\n if (block.type === 'tool_use') {\n toolCalls.push({\n name: block.name,\n args: block.input,\n id: block.id,\n type: 'tool_call',\n });\n }\n }\n return toolCalls;\n}\n\nexport function _makeMessageChunkFromAnthropicEvent(\n data: Anthropic.Messages.RawMessageStreamEvent,\n fields: {\n streamUsage: boolean;\n coerceContentToString: boolean;\n }\n): {\n chunk: AIMessageChunk;\n} | null {\n if (data.type === 'message_start') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { content, usage, ...additionalKwargs } = data.message;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredAdditionalKwargs: Record<string, any> = {};\n for (const [key, value] of Object.entries(additionalKwargs)) {\n if (value !== undefined && value !== null) {\n filteredAdditionalKwargs[key] = value;\n }\n }\n const usageMetadata: UsageMetadata = {\n input_tokens: usage.input_tokens,\n output_tokens: usage.output_tokens,\n total_tokens: usage.input_tokens + usage.output_tokens,\n };\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? '' : [],\n additional_kwargs: filteredAdditionalKwargs,\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n id: data.message.id,\n }),\n };\n } else if (data.type === 'message_delta') {\n const usageMetadata: UsageMetadata = {\n input_tokens: 0,\n output_tokens: data.usage.output_tokens,\n total_tokens: data.usage.output_tokens,\n };\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? '' : [],\n additional_kwargs: { ...data.delta },\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n }),\n };\n } else if (\n data.type === 'content_block_start' &&\n data.content_block.type === 'tool_use'\n ) {\n const toolCallContentBlock =\n data.content_block as Anthropic.Messages.ToolUseBlock;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? ''\n : [\n {\n index: data.index,\n ...data.content_block,\n input: '',\n },\n ],\n additional_kwargs: {},\n tool_call_chunks: [\n {\n id: toolCallContentBlock.id,\n index: data.index,\n name: toolCallContentBlock.name,\n args: '',\n },\n ],\n }),\n };\n } else if (\n data.type === 'content_block_delta' &&\n data.delta.type === 'text_delta'\n ) {\n const content = data.delta.text;\n if (content !== undefined) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [\n {\n index: data.index,\n ...data.delta,\n },\n ],\n additional_kwargs: {},\n }),\n };\n }\n } else if (\n data.type === 'content_block_delta' &&\n data.delta.type === 'input_json_delta'\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? ''\n : [\n {\n index: data.index,\n input: data.delta.partial_json,\n type: data.delta.type,\n },\n ],\n additional_kwargs: {},\n tool_call_chunks: [\n {\n index: data.index,\n args: data.delta.partial_json,\n },\n ],\n }),\n };\n } else if (\n data.type === 'content_block_start' &&\n data.content_block.type === 'text'\n ) {\n const content = data.content_block.text;\n if (content !== undefined) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [\n {\n index: data.index,\n ...data.content_block,\n },\n ],\n additional_kwargs: {},\n }),\n };\n }\n }\n\n return null;\n}\n\nexport function anthropicResponseToChatMessages(\n messages: AnthropicMessageResponse[],\n additionalKwargs: Record<string, unknown>\n): ChatGeneration[] {\n const usage: Record<string, number> | null | undefined =\n additionalKwargs.usage as Record<string, number> | null | undefined;\n const usageMetadata =\n usage != null\n ? {\n input_tokens: usage.input_tokens ?? 0,\n output_tokens: usage.output_tokens ?? 0,\n total_tokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n }\n : undefined;\n if (messages.length === 1 && messages[0].type === 'text') {\n return [\n {\n text: messages[0].text,\n message: new AIMessage({\n content: messages[0].text,\n additional_kwargs: additionalKwargs,\n usage_metadata: usageMetadata,\n response_metadata: additionalKwargs,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n } else {\n const toolCalls = extractToolCalls(messages);\n const generations: ChatGeneration[] = [\n {\n text: '',\n message: new AIMessage({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: messages as any,\n additional_kwargs: additionalKwargs,\n tool_calls: toolCalls,\n usage_metadata: usageMetadata,\n response_metadata: additionalKwargs,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n return generations;\n }\n}"],"names":["AIMessageChunk"],"mappings":"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"}
1
+ {"version":3,"file":"message_outputs.cjs","sources":["../../../../../src/llm/anthropic/utils/message_outputs.ts"],"sourcesContent":["/**\n * This util file contains functions for converting Anthropic messages to LangChain messages.\n */\nimport Anthropic from '@anthropic-ai/sdk';\nimport {\n AIMessage,\n UsageMetadata,\n AIMessageChunk,\n} from '@langchain/core/messages';\nimport type { ToolCallChunk } from \"@langchain/core/messages/tool\";\nimport { ToolCall } from '@langchain/core/messages/tool';\nimport { ChatGeneration } from '@langchain/core/outputs';\nimport { AnthropicMessageResponse } from '../types.js';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function extractToolCalls(content: Record<string, any>[]): ToolCall[] {\n const toolCalls: ToolCall[] = [];\n for (const block of content) {\n if (block.type === 'tool_use') {\n toolCalls.push({\n name: block.name,\n args: block.input,\n id: block.id,\n type: 'tool_call',\n });\n }\n }\n return toolCalls;\n}\n\nexport function _makeMessageChunkFromAnthropicEvent(\n data: Anthropic.Messages.RawMessageStreamEvent,\n fields: {\n streamUsage: boolean;\n coerceContentToString: boolean;\n }\n): {\n chunk: AIMessageChunk;\n} | null {\n if (data.type === 'message_start') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { content, usage, ...additionalKwargs } = data.message;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const filteredAdditionalKwargs: Record<string, any> = {};\n for (const [key, value] of Object.entries(additionalKwargs)) {\n if (value !== undefined && value !== null) {\n filteredAdditionalKwargs[key] = value;\n }\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { input_tokens, output_tokens, ...rest }: Record<string, any> =\n usage ?? {};\n const usageMetadata: UsageMetadata = {\n input_tokens,\n output_tokens,\n total_tokens: input_tokens + output_tokens,\n input_token_details: {\n cache_creation: rest.cache_creation_input_tokens,\n cache_read: rest.cache_read_input_tokens,\n },\n };\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? '' : [],\n additional_kwargs: filteredAdditionalKwargs,\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n response_metadata: {\n usage: {\n ...rest,\n },\n },\n id: data.message.id,\n }),\n };\n } else if (data.type === 'message_delta') {\n const usageMetadata: UsageMetadata = {\n input_tokens: 0,\n output_tokens: data.usage.output_tokens,\n total_tokens: data.usage.output_tokens,\n input_token_details: {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cache_creation: (data.usage as any).cache_creation_input_tokens,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cache_read: (data.usage as any).cache_read_input_tokens,\n },\n };\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString ? '' : [],\n additional_kwargs: { ...data.delta },\n usage_metadata: fields.streamUsage ? usageMetadata : undefined,\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n [\"tool_use\", \"document\"].includes(data.content_block.type)\n ) {\n const contentBlock = data.content_block;\n let toolCallChunks: ToolCallChunk[];\n if (contentBlock.type === \"tool_use\") {\n toolCallChunks = [\n {\n id: contentBlock.id,\n index: data.index,\n name: contentBlock.name,\n args: \"\",\n },\n ];\n } else {\n toolCallChunks = [];\n }\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [\n {\n index: data.index,\n ...data.content_block,\n input: \"\",\n },\n ],\n additional_kwargs: {},\n tool_call_chunks: toolCallChunks,\n }),\n };\n } else if (\n data.type === \"content_block_delta\" &&\n [\n \"text_delta\",\n \"citations_delta\",\n \"thinking_delta\",\n \"signature_delta\",\n ].includes(data.delta.type)\n ) {\n if (fields.coerceContentToString && \"text\" in data.delta) {\n return {\n chunk: new AIMessageChunk({\n content: data.delta.text,\n }),\n };\n } else {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const contentBlock: Record<string, any> = data.delta;\n if (\"citation\" in contentBlock) {\n contentBlock.citations = [contentBlock.citation];\n delete contentBlock.citation;\n }\n if (\n contentBlock.type === \"thinking_delta\" ||\n contentBlock.type === \"signature_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"thinking\" }],\n }),\n };\n }\n\n return {\n chunk: new AIMessageChunk({\n content: [{ index: data.index, ...contentBlock, type: \"text\" }],\n }),\n };\n }\n } else if (\n data.type === \"content_block_delta\" &&\n data.delta.type === \"input_json_delta\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? ''\n : [\n {\n index: data.index,\n input: data.delta.partial_json,\n type: data.delta.type,\n },\n ],\n additional_kwargs: {},\n tool_call_chunks: [\n {\n index: data.index,\n args: data.delta.partial_json,\n },\n ],\n }),\n };\n } else if (\n data.type === 'content_block_start' &&\n data.content_block.type === 'text'\n ) {\n const content = data.content_block.text;\n if (content !== undefined) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [\n {\n index: data.index,\n ...data.content_block,\n },\n ],\n additional_kwargs: {},\n }),\n };\n }\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"redacted_thinking\"\n ) {\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? \"\"\n : [{ index: data.index, ...data.content_block }],\n }),\n };\n } else if (\n data.type === \"content_block_start\" &&\n data.content_block.type === \"thinking\"\n ) {\n const content = data.content_block.thinking;\n return {\n chunk: new AIMessageChunk({\n content: fields.coerceContentToString\n ? content\n : [{ index: data.index, ...data.content_block }],\n }),\n };\n }\n\n return null;\n}\n\nexport function anthropicResponseToChatMessages(\n messages: AnthropicMessageResponse[],\n additionalKwargs: Record<string, unknown>\n): ChatGeneration[] {\n const usage: Record<string, number> | null | undefined =\n additionalKwargs.usage as Record<string, number> | null | undefined;\n const usageMetadata =\n usage != null\n ? {\n input_tokens: usage.input_tokens ?? 0,\n output_tokens: usage.output_tokens ?? 0,\n total_tokens: (usage.input_tokens ?? 0) + (usage.output_tokens ?? 0),\n input_token_details: {\n cache_creation: usage.cache_creation_input_tokens,\n cache_read: usage.cache_read_input_tokens,\n },\n }\n : undefined;\n if (messages.length === 1 && messages[0].type === 'text') {\n return [\n {\n text: messages[0].text,\n message: new AIMessage({\n content: messages[0].text,\n additional_kwargs: additionalKwargs,\n usage_metadata: usageMetadata,\n response_metadata: additionalKwargs,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n } else {\n const toolCalls = extractToolCalls(messages);\n const generations: ChatGeneration[] = [\n {\n text: '',\n message: new AIMessage({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n content: messages as any,\n additional_kwargs: additionalKwargs,\n tool_calls: toolCalls,\n usage_metadata: usageMetadata,\n response_metadata: additionalKwargs,\n id: additionalKwargs.id as string,\n }),\n },\n ];\n return generations;\n }\n}"],"names":["AIMessageChunk"],"mappings":"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"}
@@ -127,12 +127,18 @@ class SplitStreamHandler {
127
127
  });
128
128
  }
129
129
  };
130
+ getDeltaContent(chunk) {
131
+ return chunk.choices?.[0]?.delta.content ?? '';
132
+ }
133
+ getReasoningDelta(chunk) {
134
+ return chunk.choices?.[0]?.delta[this.reasoningKey] ?? '';
135
+ }
130
136
  handle(chunk) {
131
137
  if (!chunk) {
132
138
  return;
133
139
  }
134
- const content = chunk.choices?.[0]?.delta.content ?? '';
135
- const reasoning_content = chunk.choices?.[0]?.delta[this.reasoningKey] ?? '';
140
+ const content = this.getDeltaContent(chunk);
141
+ const reasoning_content = this.getReasoningDelta(chunk);
136
142
  if (!content.length && !reasoning_content.length) {
137
143
  return;
138
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"splitStream.cjs","sources":["../../src/splitStream.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport type * as t from '@/types';\nimport { ContentTypes, GraphEvents, StepTypes } from '@/common';\n\nexport const SEPARATORS = ['.', '?', '!', '۔', '。', '‥', ';', '¡', '¿', '\\n', '```'];\n\nexport class SplitStreamHandler {\n private inCodeBlock = false;\n private inThinkBlock = false;\n private accumulate: boolean;\n tokens: string[] = [];\n lastToken = '';\n reasoningTokens: string[] = [];\n currentStepId?: string;\n currentMessageId?: string;\n currentType?: ContentTypes.TEXT | ContentTypes.THINK;\n currentLength = 0;\n reasoningKey: 'reasoning_content' | 'reasoning' = 'reasoning_content';\n currentIndex = -1;\n blockThreshold = 4500;\n /** The run ID AKA the Message ID associated with the complete generation */\n runId: string;\n handlers?: t.SplitStreamHandlers;\n constructor({\n runId,\n handlers,\n accumulate,\n reasoningKey,\n blockThreshold,\n }: {\n runId: string,\n accumulate?: boolean,\n handlers: t.SplitStreamHandlers\n blockThreshold?: number,\n reasoningKey?: 'reasoning_content' | 'reasoning',\n }) {\n this.runId = runId;\n this.handlers = handlers;\n if (reasoningKey) {\n this.reasoningKey = reasoningKey;\n }\n if (blockThreshold != null) {\n this.blockThreshold = blockThreshold;\n }\n this.accumulate = accumulate ?? false;\n }\n getMessageId = (): string | undefined => {\n const messageId = this.currentMessageId;\n if (messageId != null && messageId) {\n return messageId;\n }\n return undefined;\n };\n createMessageStep = (type?: ContentTypes.TEXT | ContentTypes.THINK): [string, string] => {\n if (type != null && this.currentType !== type) {\n this.currentType = type;\n }\n this.currentLength = 0;\n this.currentIndex += 1;\n this.currentStepId = `step_${nanoid()}`;\n this.currentMessageId = `msg_${nanoid()}`;\n return [this.currentStepId, this.currentMessageId];\n };\n dispatchRunStep = (stepId: string, stepDetails: t.StepDetails): void => {\n const runStep: t.RunStep = {\n id: stepId,\n runId: this.runId,\n type: stepDetails.type,\n index: this.currentIndex,\n stepDetails,\n // usage: null,\n };\n this.handlers?.[GraphEvents.ON_RUN_STEP]?.({ event: GraphEvents.ON_RUN_STEP, data: runStep });\n };\n dispatchMessageDelta = (stepId: string, delta: t.MessageDelta): void => {\n const messageDelta: t.MessageDeltaEvent = {\n id: stepId,\n delta,\n };\n this.handlers?.[GraphEvents.ON_MESSAGE_DELTA]?.({ event: GraphEvents.ON_MESSAGE_DELTA, data: messageDelta });\n };\n dispatchReasoningDelta = (stepId: string, delta: t.ReasoningDelta): void => {\n const reasoningDelta: t.ReasoningDeltaEvent = {\n id: stepId,\n delta,\n };\n this.handlers?.[GraphEvents.ON_REASONING_DELTA]?.({ event: GraphEvents.ON_REASONING_DELTA, data: reasoningDelta });\n };\n handleContent = (content: string, _type: ContentTypes.TEXT | ContentTypes.THINK): void => {\n let type = _type;\n if (this.inThinkBlock && type === ContentTypes.TEXT) {\n type = ContentTypes.THINK;\n }\n if (this.accumulate) {\n if (type === ContentTypes.THINK) {\n this.reasoningTokens.push(content);\n } else {\n this.tokens.push(content);\n }\n }\n\n if (this.currentType !== type) {\n const [newStepId, newMessageId] = this.createMessageStep(type);\n this.dispatchRunStep(newStepId, {\n type: StepTypes.MESSAGE_CREATION,\n message_creation: {\n message_id: newMessageId,\n },\n });\n }\n\n const stepId = this.currentStepId ?? '';\n if (type === ContentTypes.THINK) {\n this.dispatchReasoningDelta(stepId, {\n content: [{\n type: ContentTypes.THINK,\n think: content,\n }],\n });\n } else {\n this.dispatchMessageDelta(stepId, {\n content: [{\n type: ContentTypes.TEXT,\n text: content,\n }],\n });\n }\n\n this.currentLength += content.length;\n if (this.inCodeBlock) {\n return;\n }\n\n if (this.currentLength > this.blockThreshold && SEPARATORS.some(sep => content.includes(sep))) {\n const [newStepId, newMessageId] = this.createMessageStep(type);\n this.dispatchRunStep(newStepId, {\n type: StepTypes.MESSAGE_CREATION,\n message_creation: {\n message_id: newMessageId,\n },\n });\n }\n };\n handle(chunk?: t.CustomChunk): void {\n if (!chunk) {\n return;\n }\n\n const content = chunk.choices?.[0]?.delta.content ?? '';\n const reasoning_content = chunk.choices?.[0]?.delta[this.reasoningKey] ?? '';\n\n if (!content.length && !reasoning_content.length) {\n return;\n }\n\n if (content.includes('```')) {\n this.inCodeBlock = !this.inCodeBlock;\n }\n\n if (content.includes('<think>') && !this.inCodeBlock) {\n this.inThinkBlock = true;\n } else if (this.lastToken.includes('</think>') && !this.inCodeBlock) {\n this.inThinkBlock = false;\n }\n\n this.lastToken = content;\n\n const message_id = this.getMessageId() ?? '';\n\n if (!message_id) {\n const initialContentType = this.inThinkBlock ? ContentTypes.THINK : ContentTypes.TEXT;\n const initialType = reasoning_content ? ContentTypes.THINK : initialContentType;\n const [stepId, message_id] = this.createMessageStep(initialType);\n this.dispatchRunStep(stepId, {\n type: StepTypes.MESSAGE_CREATION,\n message_creation: {\n message_id,\n },\n });\n }\n\n if (reasoning_content) {\n this.handleContent(reasoning_content, ContentTypes.THINK);\n } else {\n this.handleContent(content, ContentTypes.TEXT);\n }\n }\n}"],"names":["nanoid","GraphEvents","ContentTypes","StepTypes"],"mappings":"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"}
1
+ {"version":3,"file":"splitStream.cjs","sources":["../../src/splitStream.ts"],"sourcesContent":["import { nanoid } from 'nanoid';\nimport type * as t from '@/types';\nimport { ContentTypes, GraphEvents, StepTypes } from '@/common';\n\nexport const SEPARATORS = ['.', '?', '!', '۔', '。', '‥', ';', '¡', '¿', '\\n', '```'];\n\nexport class SplitStreamHandler {\n private inCodeBlock = false;\n private inThinkBlock = false;\n private accumulate: boolean;\n tokens: string[] = [];\n lastToken = '';\n reasoningTokens: string[] = [];\n currentStepId?: string;\n currentMessageId?: string;\n currentType?: ContentTypes.TEXT | ContentTypes.THINK;\n currentLength = 0;\n reasoningKey: 'reasoning_content' | 'reasoning' = 'reasoning_content';\n currentIndex = -1;\n blockThreshold = 4500;\n /** The run ID AKA the Message ID associated with the complete generation */\n runId: string;\n handlers?: t.SplitStreamHandlers;\n constructor({\n runId,\n handlers,\n accumulate,\n reasoningKey,\n blockThreshold,\n }: {\n runId: string,\n accumulate?: boolean,\n handlers: t.SplitStreamHandlers\n blockThreshold?: number,\n reasoningKey?: 'reasoning_content' | 'reasoning',\n }) {\n this.runId = runId;\n this.handlers = handlers;\n if (reasoningKey) {\n this.reasoningKey = reasoningKey;\n }\n if (blockThreshold != null) {\n this.blockThreshold = blockThreshold;\n }\n this.accumulate = accumulate ?? false;\n }\n getMessageId = (): string | undefined => {\n const messageId = this.currentMessageId;\n if (messageId != null && messageId) {\n return messageId;\n }\n return undefined;\n };\n createMessageStep = (type?: ContentTypes.TEXT | ContentTypes.THINK): [string, string] => {\n if (type != null && this.currentType !== type) {\n this.currentType = type;\n }\n this.currentLength = 0;\n this.currentIndex += 1;\n this.currentStepId = `step_${nanoid()}`;\n this.currentMessageId = `msg_${nanoid()}`;\n return [this.currentStepId, this.currentMessageId];\n };\n dispatchRunStep = (stepId: string, stepDetails: t.StepDetails): void => {\n const runStep: t.RunStep = {\n id: stepId,\n runId: this.runId,\n type: stepDetails.type,\n index: this.currentIndex,\n stepDetails,\n // usage: null,\n };\n this.handlers?.[GraphEvents.ON_RUN_STEP]?.({ event: GraphEvents.ON_RUN_STEP, data: runStep });\n };\n dispatchMessageDelta = (stepId: string, delta: t.MessageDelta): void => {\n const messageDelta: t.MessageDeltaEvent = {\n id: stepId,\n delta,\n };\n this.handlers?.[GraphEvents.ON_MESSAGE_DELTA]?.({ event: GraphEvents.ON_MESSAGE_DELTA, data: messageDelta });\n };\n dispatchReasoningDelta = (stepId: string, delta: t.ReasoningDelta): void => {\n const reasoningDelta: t.ReasoningDeltaEvent = {\n id: stepId,\n delta,\n };\n this.handlers?.[GraphEvents.ON_REASONING_DELTA]?.({ event: GraphEvents.ON_REASONING_DELTA, data: reasoningDelta });\n };\n handleContent = (content: string, _type: ContentTypes.TEXT | ContentTypes.THINK): void => {\n let type = _type;\n if (this.inThinkBlock && type === ContentTypes.TEXT) {\n type = ContentTypes.THINK;\n }\n if (this.accumulate) {\n if (type === ContentTypes.THINK) {\n this.reasoningTokens.push(content);\n } else {\n this.tokens.push(content);\n }\n }\n\n if (this.currentType !== type) {\n const [newStepId, newMessageId] = this.createMessageStep(type);\n this.dispatchRunStep(newStepId, {\n type: StepTypes.MESSAGE_CREATION,\n message_creation: {\n message_id: newMessageId,\n },\n });\n }\n\n const stepId = this.currentStepId ?? '';\n if (type === ContentTypes.THINK) {\n this.dispatchReasoningDelta(stepId, {\n content: [{\n type: ContentTypes.THINK,\n think: content,\n }],\n });\n } else {\n this.dispatchMessageDelta(stepId, {\n content: [{\n type: ContentTypes.TEXT,\n text: content,\n }],\n });\n }\n\n this.currentLength += content.length;\n if (this.inCodeBlock) {\n return;\n }\n\n if (this.currentLength > this.blockThreshold && SEPARATORS.some(sep => content.includes(sep))) {\n const [newStepId, newMessageId] = this.createMessageStep(type);\n this.dispatchRunStep(newStepId, {\n type: StepTypes.MESSAGE_CREATION,\n message_creation: {\n message_id: newMessageId,\n },\n });\n }\n };\n getDeltaContent(chunk: t.CustomChunk): string {\n return chunk.choices?.[0]?.delta.content ?? '';\n }\n getReasoningDelta(chunk: t.CustomChunk): string {\n return chunk.choices?.[0]?.delta[this.reasoningKey] ?? '';\n }\n handle(chunk?: t.CustomChunk): void {\n if (!chunk) {\n return;\n }\n\n const content = this.getDeltaContent(chunk);\n const reasoning_content = this.getReasoningDelta(chunk);\n if (!content.length && !reasoning_content.length) {\n return;\n }\n\n if (content.includes('```')) {\n this.inCodeBlock = !this.inCodeBlock;\n }\n\n if (content.includes('<think>') && !this.inCodeBlock) {\n this.inThinkBlock = true;\n } else if (this.lastToken.includes('</think>') && !this.inCodeBlock) {\n this.inThinkBlock = false;\n }\n\n this.lastToken = content;\n\n const message_id = this.getMessageId() ?? '';\n\n if (!message_id) {\n const initialContentType = this.inThinkBlock ? ContentTypes.THINK : ContentTypes.TEXT;\n const initialType = reasoning_content ? ContentTypes.THINK : initialContentType;\n const [stepId, message_id] = this.createMessageStep(initialType);\n this.dispatchRunStep(stepId, {\n type: StepTypes.MESSAGE_CREATION,\n message_creation: {\n message_id,\n },\n });\n }\n\n if (reasoning_content) {\n this.handleContent(reasoning_content, ContentTypes.THINK);\n } else {\n this.handleContent(content, ContentTypes.TEXT);\n }\n }\n}"],"names":["nanoid","GraphEvents","ContentTypes","StepTypes"],"mappings":"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"}
@@ -198,6 +198,14 @@ hasToolCallChunks: ${hasToolCallChunks}
198
198
  content,
199
199
  });
200
200
  }
201
+ else if (content.every((c) => c.type?.startsWith(_enum.ContentTypes.THINKING))) {
202
+ graph.dispatchReasoningDelta(stepId, {
203
+ content: content.map((c) => ({
204
+ type: _enum.ContentTypes.THINK,
205
+ think: c.thinking,
206
+ }))
207
+ });
208
+ }
201
209
  }
202
210
  handleToolCallChunks = ({ graph, stepKey, toolCallChunks, }) => {
203
211
  const prevStepId = graph.getStepIdByKey(stepKey, graph.contentData.length - 1);
@@ -246,8 +254,11 @@ hasToolCallChunks: ${hasToolCallChunks}
246
254
  });
247
255
  };
248
256
  handleReasoning(chunk, graph) {
249
- const reasoning_content = chunk.additional_kwargs?.[graph.reasoningKey];
250
- if (reasoning_content != null && reasoning_content && (chunk.content == null || chunk.content === '')) {
257
+ let reasoning_content = chunk.additional_kwargs?.[graph.reasoningKey];
258
+ if (Array.isArray(chunk.content) && chunk.content[0]?.type === 'thinking') {
259
+ reasoning_content = 'valid';
260
+ }
261
+ if (reasoning_content != null && reasoning_content && (chunk.content == null || chunk.content === '' || reasoning_content === 'valid')) {
251
262
  graph.currentTokenType = _enum.ContentTypes.THINK;
252
263
  graph.tokenTypeSwitch = 'reasoning';
253
264
  return;
@@ -1 +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, ToolCallChunk } from '@langchain/core/messages/tool';\nimport type { Graph } from '@/graphs';\nimport type * as t from '@/types';\nimport { StepTypes, ContentTypes, GraphEvents, ToolCallTypes } from '@/common';\n\nfunction getNonEmptyValue(possibleValues: string[]): string | undefined {\n for (const value of possibleValues) {\n if (value && value.trim() !== '') {\n return value;\n }\n }\n return undefined;\n}\n\nexport const getMessageId = (stepKey: string, graph: Graph<t.BaseGraphState>, returnExistingId = false): string | undefined => {\n const messageId = graph.messageIdsByStepKey.get(stepKey);\n if (messageId != null && messageId) {\n return returnExistingId ? messageId : undefined;\n }\n\n const prelimMessageId = graph.prelimMessageIdsByStepKey.get(stepKey);\n if (prelimMessageId != null && 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 const handleToolCalls = (toolCalls?: ToolCall[], 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 (!toolCalls) {\n return;\n }\n\n if (toolCalls.length === 0) {\n return;\n }\n\n const tool_calls: ToolCall[] = [];\n const tool_call_ids: string[] = [];\n for (const tool_call of toolCalls) {\n const toolCallId = tool_call.id ?? `toolu_${nanoid()}`;\n tool_call.id = toolCallId;\n if (!toolCallId || graph.toolCallStepIds.has(toolCallId)) {\n continue;\n }\n\n tool_calls.push(tool_call);\n tool_call_ids.push(toolCallId);\n }\n\n const stepKey = graph.getStepKey(metadata);\n\n let prevStepId = '';\n let prevRunStep: t.RunStep | undefined;\n try {\n prevStepId = graph.getStepIdByKey(stepKey, graph.contentData.length - 1);\n prevRunStep = graph.getRunStep(prevStepId);\n } catch (e) {\n // no previous step\n }\n\n const dispatchToolCallIds = (lastMessageStepId: string): void => {\n graph.dispatchMessageDelta(lastMessageStepId, {\n content: [{\n type: 'text',\n text: '',\n tool_call_ids,\n }],\n });\n };\n /* If the previous step exists and is a message creation */\n if (prevStepId && prevRunStep && prevRunStep.type === StepTypes.MESSAGE_CREATION) {\n dispatchToolCallIds(prevStepId);\n graph.messageStepHasToolCalls.set(prevStepId, true);\n /* If the previous step doesn't exist or is not a message creation */\n } else if (!prevRunStep || prevRunStep.type !== StepTypes.MESSAGE_CREATION) {\n const messageId = getMessageId(stepKey, graph, true) ?? '';\n const stepId = graph.dispatchRunStep(stepKey, {\n type: StepTypes.MESSAGE_CREATION,\n message_creation: {\n message_id: messageId,\n },\n });\n dispatchToolCallIds(stepId);\n graph.messageStepHasToolCalls.set(prevStepId, true);\n }\n graph.dispatchRunStep(stepKey, {\n type: StepTypes.TOOL_CALLS,\n tool_calls,\n });\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 if (!graph.config) {\n throw new Error('Config not found in graph');\n }\n if (!data.chunk) {\n console.warn(`No chunk found in ${event} event`);\n return;\n }\n\n const chunk = data.chunk as Partial<AIMessageChunk>;\n const content = (chunk.additional_kwargs?.[graph.reasoningKey] as string | undefined) ?? chunk.content;\n this.handleReasoning(chunk, graph);\n\n let hasToolCalls = false;\n if (chunk.tool_calls && chunk.tool_calls.length > 0 && chunk.tool_calls.every((tc) => tc.id)) {\n hasToolCalls = true;\n handleToolCalls(chunk.tool_calls, metadata, graph);\n }\n\n const hasToolCallChunks = (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) ?? false;\n const isEmptyContent = typeof content === 'undefined' || !content.length || typeof content === 'string' && !content;\n const isEmptyChunk = isEmptyContent && !hasToolCallChunks;\n const chunkId = chunk.id ?? '';\n if (isEmptyChunk && chunkId && chunkId.startsWith('msg')) {\n if (graph.messageIdsByStepKey.has(chunkId)) {\n return;\n } else if (graph.prelimMessageIdsByStepKey.has(chunkId)) {\n return;\n }\n\n const stepKey = graph.getStepKey(metadata);\n graph.prelimMessageIdsByStepKey.set(stepKey, chunkId);\n return;\n } else if (isEmptyChunk) {\n return;\n }\n\n const stepKey = graph.getStepKey(metadata);\n\n if (hasToolCallChunks\n && chunk.tool_call_chunks\n && chunk.tool_call_chunks.length\n && typeof chunk.tool_call_chunks[0]?.index === 'number') {\n this.handleToolCallChunks({ graph, stepKey, toolCallChunks: chunk.tool_call_chunks });\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) ?? false)) {\n return;\n } else if (typeof content === 'string') {\n if (graph.currentTokenType === ContentTypes.TEXT) {\n graph.dispatchMessageDelta(stepId, {\n content: [{\n type: ContentTypes.TEXT,\n text: content,\n }],\n });\n } else {\n graph.dispatchReasoningDelta(stepId, {\n content: [{\n type: ContentTypes.THINK,\n think: content,\n }],\n });\n }\n } else if (content.every((c) => c.type?.startsWith(ContentTypes.TEXT))) {\n graph.dispatchMessageDelta(stepId, {\n content,\n });\n }\n }\n handleToolCallChunks = ({\n graph,\n stepKey,\n toolCallChunks,\n }: {\n graph: Graph;\n stepKey: string;\n toolCallChunks: ToolCallChunk[],\n }): void => {\n const prevStepId = graph.getStepIdByKey(stepKey, graph.contentData.length - 1);\n const prevRunStep = graph.getRunStep(prevStepId);\n const _stepId = graph.getStepIdByKey(stepKey, prevRunStep?.index);\n /** Edge Case: Tool Call Run Step or `tool_call_ids` never dispatched */\n const tool_calls: ToolCall[] | undefined =\n prevStepId && prevRunStep && prevRunStep.type === StepTypes.MESSAGE_CREATION\n ? []\n : undefined;\n /** Edge Case: `id` and `name` fields cannot be empty strings */\n for (const toolCallChunk of toolCallChunks) {\n if (toolCallChunk.name === '') {\n toolCallChunk.name = undefined;\n }\n if (toolCallChunk.id === '') {\n toolCallChunk.id = undefined;\n } else if (tool_calls != null && toolCallChunk.id != null && toolCallChunk.name != null) {\n tool_calls.push({\n args: {},\n id: toolCallChunk.id,\n name: toolCallChunk.name,\n type: ToolCallTypes.TOOL_CALL,\n });\n }\n }\n\n let stepId: string = _stepId;\n const alreadyDispatched = prevRunStep?.type === StepTypes.MESSAGE_CREATION && graph.messageStepHasToolCalls.has(prevStepId);\n if (!alreadyDispatched && tool_calls?.length === toolCallChunks.length) {\n graph.dispatchMessageDelta(prevStepId, {\n content: [{\n type: ContentTypes.TEXT,\n text: '',\n tool_call_ids: tool_calls.map((tc) => tc.id ?? ''),\n }],\n });\n graph.messageStepHasToolCalls.set(prevStepId, true);\n stepId = graph.dispatchRunStep(stepKey, {\n type: StepTypes.TOOL_CALLS,\n tool_calls,\n });\n }\n graph.dispatchRunStepDelta(stepId, {\n type: StepTypes.TOOL_CALLS,\n tool_calls: toolCallChunks,\n });\n };\n handleReasoning(chunk: Partial<AIMessageChunk>, graph: Graph): void {\n const reasoning_content = chunk.additional_kwargs?.[graph.reasoningKey] as string | undefined;\n if (reasoning_content != null && reasoning_content && (chunk.content == null || chunk.content === '')) {\n graph.currentTokenType = ContentTypes.THINK;\n graph.tokenTypeSwitch = 'reasoning';\n return;\n } else if (graph.tokenTypeSwitch === 'reasoning' && graph.currentTokenType !== ContentTypes.TEXT && chunk.content != null && chunk.content !== '') {\n graph.currentTokenType = ContentTypes.TEXT;\n graph.tokenTypeSwitch = 'content';\n } else if (chunk.content != null && typeof chunk.content === 'string' && chunk.content.includes('<think>')) {\n graph.currentTokenType = ContentTypes.THINK;\n graph.tokenTypeSwitch = 'content';\n } else if (graph.lastToken != null && graph.lastToken.includes('</think>')) {\n graph.currentTokenType = ContentTypes.TEXT;\n graph.tokenTypeSwitch = 'content';\n }\n if (typeof chunk.content !== 'string') {\n return;\n }\n graph.lastToken = chunk.content;\n }\n}\n\nexport function createContentAggregator(): t.ContentAggregatorResult {\n const contentParts: Array<t.MessageContentComplex | undefined> = [];\n const stepMap = new Map<string, t.RunStep>();\n const toolCallIdMap = new Map<string, string>();\n\n const updateContent = (\n index: number,\n contentPart: t.MessageContentComplex,\n finalUpdate = false,\n ): void => {\n const partType = contentPart.type ?? '';\n if (!partType) {\n console.warn('No content type found in content part');\n return;\n }\n\n if (!contentParts[index]) {\n contentParts[index] = { type: partType };\n }\n\n if (!partType.startsWith(contentParts[index]?.type ?? '')) {\n console.warn('Content type mismatch');\n return;\n }\n\n if (\n partType.startsWith(ContentTypes.TEXT) &&\n ContentTypes.TEXT in contentPart &&\n typeof contentPart.text === 'string'\n ) {\n // TODO: update this!!\n const currentContent = contentParts[index] as t.MessageDeltaUpdate;\n const update: t.MessageDeltaUpdate = {\n type: ContentTypes.TEXT,\n text: (currentContent.text || '') + contentPart.text,\n };\n\n if (contentPart.tool_call_ids) {\n update.tool_call_ids = contentPart.tool_call_ids;\n }\n contentParts[index] = update;\n } else if (\n partType.startsWith(ContentTypes.THINK) &&\n ContentTypes.THINK in contentPart &&\n typeof contentPart.think === 'string'\n ) {\n const currentContent = contentParts[index] as t.ReasoningDeltaUpdate;\n const update: t.ReasoningDeltaUpdate = {\n type: ContentTypes.THINK,\n think: (currentContent.think || '') + contentPart.think,\n };\n contentParts[index] = update;\n } else if (partType === ContentTypes.IMAGE_URL && 'image_url' in contentPart) {\n const currentContent = contentParts[index] as { type: 'image_url'; image_url: string };\n contentParts[index] = {\n ...currentContent,\n };\n } else if (partType === ContentTypes.TOOL_CALL && 'tool_call' in contentPart) {\n const existingContent = contentParts[index] as Omit<t.ToolCallContent, 'tool_call'> & { tool_call?: ToolCall } | undefined;\n\n const args = finalUpdate\n ? contentPart.tool_call.args\n : (existingContent?.tool_call?.args || '') + (contentPart.tool_call.args ?? '');\n\n const id = getNonEmptyValue([contentPart.tool_call.id, existingContent?.tool_call?.id]) ?? '';\n const name =\n getNonEmptyValue([contentPart.tool_call.name, existingContent?.tool_call?.name]) ?? '';\n\n const newToolCall: ToolCall & t.PartMetadata = {\n id,\n name,\n args,\n type: ToolCallTypes.TOOL_CALL,\n };\n\n if (finalUpdate) {\n newToolCall.progress = 1;\n newToolCall.output = contentPart.tool_call.output;\n }\n\n contentParts[index] = {\n type: ContentTypes.TOOL_CALL,\n tool_call: newToolCall,\n };\n }\n };\n\n const aggregateContent = ({ event, data }: {\n event: GraphEvents;\n data: t.RunStep | t.MessageDeltaEvent | t.RunStepDeltaEvent | { result: t.ToolEndEvent };\n }): void => {\n\n if (event === GraphEvents.ON_RUN_STEP) {\n const runStep = data as t.RunStep;\n stepMap.set(runStep.id, runStep);\n\n // Store tool call IDs if present\n if (runStep.stepDetails.type === StepTypes.TOOL_CALLS && runStep.stepDetails.tool_calls) {\n runStep.stepDetails.tool_calls.forEach((toolCall) => {\n const toolCallId = toolCall.id ?? '';\n if ('id' in toolCall && toolCallId) {\n toolCallIdMap.set(runStep.id, toolCallId);\n }\n });\n }\n } else if (event === GraphEvents.ON_MESSAGE_DELTA) {\n const messageDelta = data as t.MessageDeltaEvent;\n const runStep = stepMap.get(messageDelta.id);\n if (!runStep) {\n console.warn('No run step or runId found for message delta event');\n return;\n }\n\n if (messageDelta.delta.content) {\n const contentPart = Array.isArray(messageDelta.delta.content)\n ? messageDelta.delta.content[0]\n : messageDelta.delta.content;\n\n updateContent(runStep.index, contentPart);\n }\n } else if (event === GraphEvents.ON_REASONING_DELTA) {\n const reasoningDelta = data as t.ReasoningDeltaEvent;\n const runStep = stepMap.get(reasoningDelta.id);\n if (!runStep) {\n console.warn('No run step or runId found for reasoning delta event');\n return;\n }\n\n if (reasoningDelta.delta.content) {\n const contentPart = Array.isArray(reasoningDelta.delta.content)\n ? reasoningDelta.delta.content[0]\n : reasoningDelta.delta.content;\n\n updateContent(runStep.index, contentPart);\n }\n } else if (event === GraphEvents.ON_RUN_STEP_DELTA) {\n const runStepDelta = data as t.RunStepDeltaEvent;\n const runStep = stepMap.get(runStepDelta.id);\n if (!runStep) {\n console.warn('No run step or runId found for run step delta event');\n return;\n }\n\n if (\n runStepDelta.delta.type === StepTypes.TOOL_CALLS &&\n runStepDelta.delta.tool_calls\n ) {\n\n runStepDelta.delta.tool_calls.forEach((toolCallDelta) => {\n const toolCallId = toolCallIdMap.get(runStepDelta.id);\n\n const contentPart: t.MessageContentComplex = {\n type: ContentTypes.TOOL_CALL,\n tool_call: {\n args: toolCallDelta.args ?? '',\n name: toolCallDelta.name,\n id: toolCallId,\n },\n };\n\n updateContent(runStep.index, contentPart);\n });\n }\n } else if (event === GraphEvents.ON_RUN_STEP_COMPLETED) {\n const { result } = data as unknown as { result: t.ToolEndEvent };\n\n const { id: stepId } = result;\n\n const runStep = stepMap.get(stepId);\n if (!runStep) {\n console.warn('No run step or runId found for completed tool call event');\n return;\n }\n\n const contentPart: t.MessageContentComplex = {\n type: ContentTypes.TOOL_CALL,\n tool_call: result.tool_call,\n };\n\n updateContent(runStep.index, contentPart, true);\n }\n\n };\n\n return { contentParts, aggregateContent, stepMap };\n}\n"],"names":["nanoid","StepTypes","ContentTypes","ToolCallTypes","GraphEvents"],"mappings":"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"}
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, ToolCallChunk } from '@langchain/core/messages/tool';\nimport type { Graph } from '@/graphs';\nimport type * as t from '@/types';\nimport { StepTypes, ContentTypes, GraphEvents, ToolCallTypes } from '@/common';\n\nfunction getNonEmptyValue(possibleValues: string[]): string | undefined {\n for (const value of possibleValues) {\n if (value && value.trim() !== '') {\n return value;\n }\n }\n return undefined;\n}\n\nexport const getMessageId = (stepKey: string, graph: Graph<t.BaseGraphState>, returnExistingId = false): string | undefined => {\n const messageId = graph.messageIdsByStepKey.get(stepKey);\n if (messageId != null && messageId) {\n return returnExistingId ? messageId : undefined;\n }\n\n const prelimMessageId = graph.prelimMessageIdsByStepKey.get(stepKey);\n if (prelimMessageId != null && 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 const handleToolCalls = (toolCalls?: ToolCall[], 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 (!toolCalls) {\n return;\n }\n\n if (toolCalls.length === 0) {\n return;\n }\n\n const tool_calls: ToolCall[] = [];\n const tool_call_ids: string[] = [];\n for (const tool_call of toolCalls) {\n const toolCallId = tool_call.id ?? `toolu_${nanoid()}`;\n tool_call.id = toolCallId;\n if (!toolCallId || graph.toolCallStepIds.has(toolCallId)) {\n continue;\n }\n\n tool_calls.push(tool_call);\n tool_call_ids.push(toolCallId);\n }\n\n const stepKey = graph.getStepKey(metadata);\n\n let prevStepId = '';\n let prevRunStep: t.RunStep | undefined;\n try {\n prevStepId = graph.getStepIdByKey(stepKey, graph.contentData.length - 1);\n prevRunStep = graph.getRunStep(prevStepId);\n } catch (e) {\n // no previous step\n }\n\n const dispatchToolCallIds = (lastMessageStepId: string): void => {\n graph.dispatchMessageDelta(lastMessageStepId, {\n content: [{\n type: 'text',\n text: '',\n tool_call_ids,\n }],\n });\n };\n /* If the previous step exists and is a message creation */\n if (prevStepId && prevRunStep && prevRunStep.type === StepTypes.MESSAGE_CREATION) {\n dispatchToolCallIds(prevStepId);\n graph.messageStepHasToolCalls.set(prevStepId, true);\n /* If the previous step doesn't exist or is not a message creation */\n } else if (!prevRunStep || prevRunStep.type !== StepTypes.MESSAGE_CREATION) {\n const messageId = getMessageId(stepKey, graph, true) ?? '';\n const stepId = graph.dispatchRunStep(stepKey, {\n type: StepTypes.MESSAGE_CREATION,\n message_creation: {\n message_id: messageId,\n },\n });\n dispatchToolCallIds(stepId);\n graph.messageStepHasToolCalls.set(prevStepId, true);\n }\n graph.dispatchRunStep(stepKey, {\n type: StepTypes.TOOL_CALLS,\n tool_calls,\n });\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 if (!graph.config) {\n throw new Error('Config not found in graph');\n }\n if (!data.chunk) {\n console.warn(`No chunk found in ${event} event`);\n return;\n }\n\n const chunk = data.chunk as Partial<AIMessageChunk>;\n const content = (chunk.additional_kwargs?.[graph.reasoningKey] as string | undefined) ?? chunk.content;\n this.handleReasoning(chunk, graph);\n\n let hasToolCalls = false;\n if (chunk.tool_calls && chunk.tool_calls.length > 0 && chunk.tool_calls.every((tc) => tc.id)) {\n hasToolCalls = true;\n handleToolCalls(chunk.tool_calls, metadata, graph);\n }\n\n const hasToolCallChunks = (chunk.tool_call_chunks && chunk.tool_call_chunks.length > 0) ?? false;\n const isEmptyContent = typeof content === 'undefined' || !content.length || typeof content === 'string' && !content;\n const isEmptyChunk = isEmptyContent && !hasToolCallChunks;\n const chunkId = chunk.id ?? '';\n if (isEmptyChunk && chunkId && chunkId.startsWith('msg')) {\n if (graph.messageIdsByStepKey.has(chunkId)) {\n return;\n } else if (graph.prelimMessageIdsByStepKey.has(chunkId)) {\n return;\n }\n\n const stepKey = graph.getStepKey(metadata);\n graph.prelimMessageIdsByStepKey.set(stepKey, chunkId);\n return;\n } else if (isEmptyChunk) {\n return;\n }\n\n const stepKey = graph.getStepKey(metadata);\n\n if (hasToolCallChunks\n && chunk.tool_call_chunks\n && chunk.tool_call_chunks.length\n && typeof chunk.tool_call_chunks[0]?.index === 'number') {\n this.handleToolCallChunks({ graph, stepKey, toolCallChunks: chunk.tool_call_chunks });\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) ?? false)) {\n return;\n } else if (typeof content === 'string') {\n if (graph.currentTokenType === ContentTypes.TEXT) {\n graph.dispatchMessageDelta(stepId, {\n content: [{\n type: ContentTypes.TEXT,\n text: content,\n }],\n });\n } else {\n graph.dispatchReasoningDelta(stepId, {\n content: [{\n type: ContentTypes.THINK,\n think: content,\n }],\n });\n }\n } else if (content.every((c) => c.type?.startsWith(ContentTypes.TEXT))) {\n graph.dispatchMessageDelta(stepId, {\n content,\n });\n } else if (content.every((c) => c.type?.startsWith(ContentTypes.THINKING))) {\n graph.dispatchReasoningDelta(stepId, {\n content: content.map((c) => ({\n type: ContentTypes.THINK,\n think: (c as t.ThinkingContentText).thinking,\n }))});\n }\n }\n handleToolCallChunks = ({\n graph,\n stepKey,\n toolCallChunks,\n }: {\n graph: Graph;\n stepKey: string;\n toolCallChunks: ToolCallChunk[],\n }): void => {\n const prevStepId = graph.getStepIdByKey(stepKey, graph.contentData.length - 1);\n const prevRunStep = graph.getRunStep(prevStepId);\n const _stepId = graph.getStepIdByKey(stepKey, prevRunStep?.index);\n /** Edge Case: Tool Call Run Step or `tool_call_ids` never dispatched */\n const tool_calls: ToolCall[] | undefined =\n prevStepId && prevRunStep && prevRunStep.type === StepTypes.MESSAGE_CREATION\n ? []\n : undefined;\n /** Edge Case: `id` and `name` fields cannot be empty strings */\n for (const toolCallChunk of toolCallChunks) {\n if (toolCallChunk.name === '') {\n toolCallChunk.name = undefined;\n }\n if (toolCallChunk.id === '') {\n toolCallChunk.id = undefined;\n } else if (tool_calls != null && toolCallChunk.id != null && toolCallChunk.name != null) {\n tool_calls.push({\n args: {},\n id: toolCallChunk.id,\n name: toolCallChunk.name,\n type: ToolCallTypes.TOOL_CALL,\n });\n }\n }\n\n let stepId: string = _stepId;\n const alreadyDispatched = prevRunStep?.type === StepTypes.MESSAGE_CREATION && graph.messageStepHasToolCalls.has(prevStepId);\n if (!alreadyDispatched && tool_calls?.length === toolCallChunks.length) {\n graph.dispatchMessageDelta(prevStepId, {\n content: [{\n type: ContentTypes.TEXT,\n text: '',\n tool_call_ids: tool_calls.map((tc) => tc.id ?? ''),\n }],\n });\n graph.messageStepHasToolCalls.set(prevStepId, true);\n stepId = graph.dispatchRunStep(stepKey, {\n type: StepTypes.TOOL_CALLS,\n tool_calls,\n });\n }\n graph.dispatchRunStepDelta(stepId, {\n type: StepTypes.TOOL_CALLS,\n tool_calls: toolCallChunks,\n });\n };\n handleReasoning(chunk: Partial<AIMessageChunk>, graph: Graph): void {\n let reasoning_content = chunk.additional_kwargs?.[graph.reasoningKey] as string | undefined;\n if (Array.isArray(chunk.content) && chunk.content[0]?.type === 'thinking') {\n reasoning_content = 'valid';\n }\n if (reasoning_content != null && reasoning_content && (chunk.content == null || chunk.content === '' || reasoning_content === 'valid')) {\n graph.currentTokenType = ContentTypes.THINK;\n graph.tokenTypeSwitch = 'reasoning';\n return;\n } else if (graph.tokenTypeSwitch === 'reasoning' && graph.currentTokenType !== ContentTypes.TEXT && chunk.content != null && chunk.content !== '') {\n graph.currentTokenType = ContentTypes.TEXT;\n graph.tokenTypeSwitch = 'content';\n } else if (chunk.content != null && typeof chunk.content === 'string' && chunk.content.includes('<think>')) {\n graph.currentTokenType = ContentTypes.THINK;\n graph.tokenTypeSwitch = 'content';\n } else if (graph.lastToken != null && graph.lastToken.includes('</think>')) {\n graph.currentTokenType = ContentTypes.TEXT;\n graph.tokenTypeSwitch = 'content';\n }\n if (typeof chunk.content !== 'string') {\n return;\n }\n graph.lastToken = chunk.content;\n }\n}\n\nexport function createContentAggregator(): t.ContentAggregatorResult {\n const contentParts: Array<t.MessageContentComplex | undefined> = [];\n const stepMap = new Map<string, t.RunStep>();\n const toolCallIdMap = new Map<string, string>();\n\n const updateContent = (\n index: number,\n contentPart: t.MessageContentComplex,\n finalUpdate = false,\n ): void => {\n const partType = contentPart.type ?? '';\n if (!partType) {\n console.warn('No content type found in content part');\n return;\n }\n\n if (!contentParts[index]) {\n contentParts[index] = { type: partType };\n }\n\n if (!partType.startsWith(contentParts[index]?.type ?? '')) {\n console.warn('Content type mismatch');\n return;\n }\n\n if (\n partType.startsWith(ContentTypes.TEXT) &&\n ContentTypes.TEXT in contentPart &&\n typeof contentPart.text === 'string'\n ) {\n // TODO: update this!!\n const currentContent = contentParts[index] as t.MessageDeltaUpdate;\n const update: t.MessageDeltaUpdate = {\n type: ContentTypes.TEXT,\n text: (currentContent.text || '') + contentPart.text,\n };\n\n if (contentPart.tool_call_ids) {\n update.tool_call_ids = contentPart.tool_call_ids;\n }\n contentParts[index] = update;\n } else if (\n partType.startsWith(ContentTypes.THINK) &&\n ContentTypes.THINK in contentPart &&\n typeof contentPart.think === 'string'\n ) {\n const currentContent = contentParts[index] as t.ReasoningDeltaUpdate;\n const update: t.ReasoningDeltaUpdate = {\n type: ContentTypes.THINK,\n think: (currentContent.think || '') + contentPart.think,\n };\n contentParts[index] = update;\n } else if (partType === ContentTypes.IMAGE_URL && 'image_url' in contentPart) {\n const currentContent = contentParts[index] as { type: 'image_url'; image_url: string };\n contentParts[index] = {\n ...currentContent,\n };\n } else if (partType === ContentTypes.TOOL_CALL && 'tool_call' in contentPart) {\n const existingContent = contentParts[index] as Omit<t.ToolCallContent, 'tool_call'> & { tool_call?: ToolCall } | undefined;\n\n const args = finalUpdate\n ? contentPart.tool_call.args\n : (existingContent?.tool_call?.args || '') + (contentPart.tool_call.args ?? '');\n\n const id = getNonEmptyValue([contentPart.tool_call.id, existingContent?.tool_call?.id]) ?? '';\n const name =\n getNonEmptyValue([contentPart.tool_call.name, existingContent?.tool_call?.name]) ?? '';\n\n const newToolCall: ToolCall & t.PartMetadata = {\n id,\n name,\n args,\n type: ToolCallTypes.TOOL_CALL,\n };\n\n if (finalUpdate) {\n newToolCall.progress = 1;\n newToolCall.output = contentPart.tool_call.output;\n }\n\n contentParts[index] = {\n type: ContentTypes.TOOL_CALL,\n tool_call: newToolCall,\n };\n }\n };\n\n const aggregateContent = ({ event, data }: {\n event: GraphEvents;\n data: t.RunStep | t.MessageDeltaEvent | t.RunStepDeltaEvent | { result: t.ToolEndEvent };\n }): void => {\n\n if (event === GraphEvents.ON_RUN_STEP) {\n const runStep = data as t.RunStep;\n stepMap.set(runStep.id, runStep);\n\n // Store tool call IDs if present\n if (runStep.stepDetails.type === StepTypes.TOOL_CALLS && runStep.stepDetails.tool_calls) {\n runStep.stepDetails.tool_calls.forEach((toolCall) => {\n const toolCallId = toolCall.id ?? '';\n if ('id' in toolCall && toolCallId) {\n toolCallIdMap.set(runStep.id, toolCallId);\n }\n });\n }\n } else if (event === GraphEvents.ON_MESSAGE_DELTA) {\n const messageDelta = data as t.MessageDeltaEvent;\n const runStep = stepMap.get(messageDelta.id);\n if (!runStep) {\n console.warn('No run step or runId found for message delta event');\n return;\n }\n\n if (messageDelta.delta.content) {\n const contentPart = Array.isArray(messageDelta.delta.content)\n ? messageDelta.delta.content[0]\n : messageDelta.delta.content;\n\n updateContent(runStep.index, contentPart);\n }\n } else if (event === GraphEvents.ON_REASONING_DELTA) {\n const reasoningDelta = data as t.ReasoningDeltaEvent;\n const runStep = stepMap.get(reasoningDelta.id);\n if (!runStep) {\n console.warn('No run step or runId found for reasoning delta event');\n return;\n }\n\n if (reasoningDelta.delta.content) {\n const contentPart = Array.isArray(reasoningDelta.delta.content)\n ? reasoningDelta.delta.content[0]\n : reasoningDelta.delta.content;\n\n updateContent(runStep.index, contentPart);\n }\n } else if (event === GraphEvents.ON_RUN_STEP_DELTA) {\n const runStepDelta = data as t.RunStepDeltaEvent;\n const runStep = stepMap.get(runStepDelta.id);\n if (!runStep) {\n console.warn('No run step or runId found for run step delta event');\n return;\n }\n\n if (\n runStepDelta.delta.type === StepTypes.TOOL_CALLS &&\n runStepDelta.delta.tool_calls\n ) {\n\n runStepDelta.delta.tool_calls.forEach((toolCallDelta) => {\n const toolCallId = toolCallIdMap.get(runStepDelta.id);\n\n const contentPart: t.MessageContentComplex = {\n type: ContentTypes.TOOL_CALL,\n tool_call: {\n args: toolCallDelta.args ?? '',\n name: toolCallDelta.name,\n id: toolCallId,\n },\n };\n\n updateContent(runStep.index, contentPart);\n });\n }\n } else if (event === GraphEvents.ON_RUN_STEP_COMPLETED) {\n const { result } = data as unknown as { result: t.ToolEndEvent };\n\n const { id: stepId } = result;\n\n const runStep = stepMap.get(stepId);\n if (!runStep) {\n console.warn('No run step or runId found for completed tool call event');\n return;\n }\n\n const contentPart: t.MessageContentComplex = {\n type: ContentTypes.TOOL_CALL,\n tool_call: result.tool_call,\n };\n\n updateContent(runStep.index, contentPart, true);\n }\n\n };\n\n return { contentParts, aggregateContent, stepMap };\n}\n"],"names":["nanoid","StepTypes","ContentTypes","ToolCallTypes","GraphEvents"],"mappings":"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"}
@@ -91,6 +91,7 @@ var ContentTypes;
91
91
  (function (ContentTypes) {
92
92
  ContentTypes["TEXT"] = "text";
93
93
  ContentTypes["THINK"] = "think";
94
+ ContentTypes["THINKING"] = "thinking";
94
95
  ContentTypes["TOOL_CALL"] = "tool_call";
95
96
  ContentTypes["IMAGE_FILE"] = "image_file";
96
97
  ContentTypes["IMAGE_URL"] = "image_url";
@@ -1 +1 @@
1
- {"version":3,"file":"enum.mjs","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 /** [Custom] Reasoning Delta events for messages */\n ON_REASONING_DELTA = 'on_reasoning_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_LEGACY = 'bedrock_legacy',\n VERTEXAI = 'vertexai',\n BEDROCK = 'bedrock',\n ANTHROPIC = 'anthropic',\n MISTRALAI = 'mistralai',\n OLLAMA = 'ollama',\n GOOGLE = 'google',\n AZURE = 'azureOpenAI',\n DEEPSEEK = 'deepseek',\n OPENROUTER = 'openrouter',\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 ContentTypes {\n TEXT = 'text',\n THINK = 'think',\n TOOL_CALL = 'tool_call',\n IMAGE_FILE = 'image_file',\n IMAGE_URL = 'image_url',\n ERROR = 'error',\n}\n\nexport enum ToolCallTypes {\n FUNCTION = 'function',\n RETRIEVAL = 'retrieval',\n FILE_SEARCH = 'file_search',\n CODE_INTERPRETER = 'code_interpreter',\n /* Agents Tool Call */\n TOOL_CALL = 'tool_call',\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\nexport enum Constants {\n OFFICIAL_CODE_BASEURL = 'https://api.librechat.ai/v1',\n EXECUTE_CODE = 'execute_code',\n CONTENT_AND_ARTIFACT = 'content_and_artifact',\n}\n\nexport enum EnvVar {\n CODE_API_KEY = 'LIBRECHAT_CODE_API_KEY',\n CODE_BASEURL = 'LIBRECHAT_CODE_BASEURL'\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"enum.mjs","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 /** [Custom] Reasoning Delta events for messages */\n ON_REASONING_DELTA = 'on_reasoning_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_LEGACY = 'bedrock_legacy',\n VERTEXAI = 'vertexai',\n BEDROCK = 'bedrock',\n ANTHROPIC = 'anthropic',\n MISTRALAI = 'mistralai',\n OLLAMA = 'ollama',\n GOOGLE = 'google',\n AZURE = 'azureOpenAI',\n DEEPSEEK = 'deepseek',\n OPENROUTER = 'openrouter',\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 ContentTypes {\n TEXT = 'text',\n THINK = 'think',\n THINKING = 'thinking',\n TOOL_CALL = 'tool_call',\n IMAGE_FILE = 'image_file',\n IMAGE_URL = 'image_url',\n ERROR = 'error',\n}\n\nexport enum ToolCallTypes {\n FUNCTION = 'function',\n RETRIEVAL = 'retrieval',\n FILE_SEARCH = 'file_search',\n CODE_INTERPRETER = 'code_interpreter',\n /* Agents Tool Call */\n TOOL_CALL = 'tool_call',\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\nexport enum Constants {\n OFFICIAL_CODE_BASEURL = 'https://api.librechat.ai/v1',\n EXECUTE_CODE = 'execute_code',\n CONTENT_AND_ARTIFACT = 'content_and_artifact',\n}\n\nexport enum EnvVar {\n CODE_API_KEY = 'LIBRECHAT_CODE_API_KEY',\n CODE_BASEURL = 'LIBRECHAT_CODE_BASEURL'\n}\n"],"names":[],"mappings":"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"}
@@ -68,6 +68,17 @@ class StandardGraph extends Graph {
68
68
  if (additional_instructions) {
69
69
  finalInstructions = finalInstructions ? `${finalInstructions}\n\n${additional_instructions}` : additional_instructions;
70
70
  }
71
+ if (finalInstructions && provider === Providers.ANTHROPIC && clientOptions?.clientOptions?.defaultHeaders?.['anthropic-beta']?.includes('prompt-caching')) {
72
+ finalInstructions = {
73
+ content: [
74
+ {
75
+ type: "text",
76
+ text: instructions,
77
+ cache_control: { type: "ephemeral" },
78
+ },
79
+ ],
80
+ };
81
+ }
71
82
  if (finalInstructions) {
72
83
  this.systemMessage = new SystemMessage(finalInstructions);
73
84
  }