@librechat/agents 3.0.79 → 3.0.80

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.
@@ -1,231 +0,0 @@
1
- import { AIMessage, AIMessageChunk } from '@langchain/core/messages';
2
- import { ChatGenerationChunk } from '@langchain/core/outputs';
3
-
4
- /**
5
- * Utility functions for converting Bedrock Converse responses to LangChain messages.
6
- * Ported from @langchain/aws common.js
7
- */
8
- /**
9
- * Convert a Bedrock reasoning block delta to a LangChain partial reasoning block.
10
- */
11
- function bedrockReasoningDeltaToLangchainPartialReasoningBlock(reasoningContent) {
12
- const { text, redactedContent, signature } = reasoningContent;
13
- if (typeof text === 'string') {
14
- return {
15
- type: 'reasoning_content',
16
- reasoningText: { text },
17
- };
18
- }
19
- if (signature) {
20
- return {
21
- type: 'reasoning_content',
22
- reasoningText: { signature },
23
- };
24
- }
25
- if (redactedContent) {
26
- return {
27
- type: 'reasoning_content',
28
- redactedContent: Buffer.from(redactedContent).toString('base64'),
29
- };
30
- }
31
- throw new Error('Invalid reasoning content');
32
- }
33
- /**
34
- * Convert a Bedrock reasoning block to a LangChain reasoning block.
35
- */
36
- function bedrockReasoningBlockToLangchainReasoningBlock(reasoningContent) {
37
- const { reasoningText, redactedContent } = reasoningContent;
38
- if (reasoningText) {
39
- return {
40
- type: 'reasoning_content',
41
- reasoningText: reasoningText,
42
- };
43
- }
44
- if (redactedContent) {
45
- return {
46
- type: 'reasoning_content',
47
- redactedContent: Buffer.from(redactedContent).toString('base64'),
48
- };
49
- }
50
- throw new Error('Invalid reasoning content');
51
- }
52
- /**
53
- * Convert a Bedrock Converse message to a LangChain message.
54
- */
55
- function convertConverseMessageToLangChainMessage(message, responseMetadata) {
56
- if (!message.content) {
57
- throw new Error('No message content found in response.');
58
- }
59
- if (message.role !== 'assistant') {
60
- throw new Error(`Unsupported message role received in ChatBedrockConverse response: ${message.role}`);
61
- }
62
- let requestId;
63
- if ('$metadata' in responseMetadata &&
64
- responseMetadata.$metadata &&
65
- typeof responseMetadata.$metadata === 'object' &&
66
- 'requestId' in responseMetadata.$metadata) {
67
- requestId = responseMetadata.$metadata.requestId;
68
- }
69
- let tokenUsage;
70
- if (responseMetadata.usage) {
71
- const input_tokens = responseMetadata.usage.inputTokens ?? 0;
72
- const output_tokens = responseMetadata.usage.outputTokens ?? 0;
73
- tokenUsage = {
74
- input_tokens,
75
- output_tokens,
76
- total_tokens: responseMetadata.usage.totalTokens ?? input_tokens + output_tokens,
77
- };
78
- }
79
- if (message.content.length === 1 &&
80
- 'text' in message.content[0] &&
81
- typeof message.content[0].text === 'string') {
82
- return new AIMessage({
83
- content: message.content[0].text,
84
- response_metadata: responseMetadata,
85
- usage_metadata: tokenUsage,
86
- id: requestId,
87
- });
88
- }
89
- else {
90
- const toolCalls = [];
91
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
92
- const content = [];
93
- message.content.forEach((c) => {
94
- if ('toolUse' in c &&
95
- c.toolUse &&
96
- c.toolUse.name &&
97
- c.toolUse.input &&
98
- typeof c.toolUse.input === 'object') {
99
- toolCalls.push({
100
- id: c.toolUse.toolUseId,
101
- name: c.toolUse.name,
102
- args: c.toolUse.input,
103
- type: 'tool_call',
104
- });
105
- }
106
- else if ('text' in c && typeof c.text === 'string') {
107
- content.push({ type: 'text', text: c.text });
108
- }
109
- else if ('reasoningContent' in c && c.reasoningContent) {
110
- content.push(bedrockReasoningBlockToLangchainReasoningBlock(c.reasoningContent));
111
- }
112
- else {
113
- content.push(c);
114
- }
115
- });
116
- return new AIMessage({
117
- content: content.length ? content : '',
118
- tool_calls: toolCalls.length ? toolCalls : undefined,
119
- response_metadata: responseMetadata,
120
- usage_metadata: tokenUsage,
121
- id: requestId,
122
- });
123
- }
124
- }
125
- /**
126
- * Handle a content block delta event from Bedrock Converse stream.
127
- */
128
- function handleConverseStreamContentBlockDelta(contentBlockDelta) {
129
- if (!contentBlockDelta.delta) {
130
- throw new Error('No delta found in content block.');
131
- }
132
- if (typeof contentBlockDelta.delta.text === 'string') {
133
- return new ChatGenerationChunk({
134
- text: contentBlockDelta.delta.text,
135
- message: new AIMessageChunk({
136
- content: contentBlockDelta.delta.text,
137
- response_metadata: {
138
- contentBlockIndex: contentBlockDelta.contentBlockIndex,
139
- },
140
- }),
141
- });
142
- }
143
- else if (contentBlockDelta.delta.toolUse) {
144
- const index = contentBlockDelta.contentBlockIndex;
145
- return new ChatGenerationChunk({
146
- text: '',
147
- message: new AIMessageChunk({
148
- content: '',
149
- tool_call_chunks: [
150
- {
151
- args: contentBlockDelta.delta.toolUse.input,
152
- index,
153
- type: 'tool_call_chunk',
154
- },
155
- ],
156
- response_metadata: {
157
- contentBlockIndex: contentBlockDelta.contentBlockIndex,
158
- },
159
- }),
160
- });
161
- }
162
- else if (contentBlockDelta.delta.reasoningContent) {
163
- return new ChatGenerationChunk({
164
- text: '',
165
- message: new AIMessageChunk({
166
- content: [
167
- bedrockReasoningDeltaToLangchainPartialReasoningBlock(contentBlockDelta.delta.reasoningContent),
168
- ],
169
- response_metadata: {
170
- contentBlockIndex: contentBlockDelta.contentBlockIndex,
171
- },
172
- }),
173
- });
174
- }
175
- else {
176
- throw new Error(`Unsupported content block type(s): ${JSON.stringify(contentBlockDelta.delta, null, 2)}`);
177
- }
178
- }
179
- /**
180
- * Handle a content block start event from Bedrock Converse stream.
181
- */
182
- function handleConverseStreamContentBlockStart(contentBlockStart) {
183
- const index = contentBlockStart.contentBlockIndex;
184
- if (contentBlockStart.start?.toolUse) {
185
- return new ChatGenerationChunk({
186
- text: '',
187
- message: new AIMessageChunk({
188
- content: '',
189
- tool_call_chunks: [
190
- {
191
- name: contentBlockStart.start.toolUse.name,
192
- id: contentBlockStart.start.toolUse.toolUseId,
193
- index,
194
- type: 'tool_call_chunk',
195
- },
196
- ],
197
- response_metadata: {
198
- contentBlockIndex: index,
199
- },
200
- }),
201
- });
202
- }
203
- // Return null for non-tool content block starts (text blocks don't need special handling)
204
- return null;
205
- }
206
- /**
207
- * Handle a metadata event from Bedrock Converse stream.
208
- */
209
- function handleConverseStreamMetadata(metadata, extra) {
210
- const inputTokens = metadata.usage?.inputTokens ?? 0;
211
- const outputTokens = metadata.usage?.outputTokens ?? 0;
212
- const usage_metadata = {
213
- input_tokens: inputTokens,
214
- output_tokens: outputTokens,
215
- total_tokens: metadata.usage?.totalTokens ?? inputTokens + outputTokens,
216
- };
217
- return new ChatGenerationChunk({
218
- text: '',
219
- message: new AIMessageChunk({
220
- content: '',
221
- usage_metadata: extra.streamUsage ? usage_metadata : undefined,
222
- response_metadata: {
223
- // Use the same key as returned from the Converse API
224
- metadata,
225
- },
226
- }),
227
- });
228
- }
229
-
230
- export { bedrockReasoningBlockToLangchainReasoningBlock, bedrockReasoningDeltaToLangchainPartialReasoningBlock, convertConverseMessageToLangChainMessage, handleConverseStreamContentBlockDelta, handleConverseStreamContentBlockStart, handleConverseStreamMetadata };
231
- //# sourceMappingURL=message_outputs.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"message_outputs.mjs","sources":["../../../../../src/llm/bedrock/utils/message_outputs.ts"],"sourcesContent":["/**\n * Utility functions for converting Bedrock Converse responses to LangChain messages.\n * Ported from @langchain/aws common.js\n */\nimport { AIMessage, AIMessageChunk } from '@langchain/core/messages';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport type {\n BedrockMessage,\n ConverseResponse,\n ContentBlockDeltaEvent,\n ConverseStreamMetadataEvent,\n ContentBlockStartEvent,\n ReasoningContentBlock,\n ReasoningContentBlockDelta,\n MessageContentReasoningBlock,\n MessageContentReasoningBlockReasoningTextPartial,\n MessageContentReasoningBlockRedacted,\n} from '../types';\n\n/**\n * Convert a Bedrock reasoning block delta to a LangChain partial reasoning block.\n */\nexport function bedrockReasoningDeltaToLangchainPartialReasoningBlock(\n reasoningContent: ReasoningContentBlockDelta\n):\n | MessageContentReasoningBlockReasoningTextPartial\n | MessageContentReasoningBlockRedacted {\n const { text, redactedContent, signature } =\n reasoningContent as ReasoningContentBlockDelta & {\n text?: string;\n redactedContent?: Uint8Array;\n signature?: string;\n };\n\n if (typeof text === 'string') {\n return {\n type: 'reasoning_content',\n reasoningText: { text },\n };\n }\n if (signature) {\n return {\n type: 'reasoning_content',\n reasoningText: { signature },\n };\n }\n if (redactedContent) {\n return {\n type: 'reasoning_content',\n redactedContent: Buffer.from(redactedContent).toString('base64'),\n };\n }\n throw new Error('Invalid reasoning content');\n}\n\n/**\n * Convert a Bedrock reasoning block to a LangChain reasoning block.\n */\nexport function bedrockReasoningBlockToLangchainReasoningBlock(\n reasoningContent: ReasoningContentBlock\n): MessageContentReasoningBlock {\n const { reasoningText, redactedContent } =\n reasoningContent as ReasoningContentBlock & {\n reasoningText?: { text?: string; signature?: string };\n redactedContent?: Uint8Array;\n };\n\n if (reasoningText) {\n return {\n type: 'reasoning_content',\n reasoningText: reasoningText,\n };\n }\n if (redactedContent) {\n return {\n type: 'reasoning_content',\n redactedContent: Buffer.from(redactedContent).toString('base64'),\n };\n }\n throw new Error('Invalid reasoning content');\n}\n\n/**\n * Convert a Bedrock Converse message to a LangChain message.\n */\nexport function convertConverseMessageToLangChainMessage(\n message: BedrockMessage,\n responseMetadata: Omit<ConverseResponse, 'output'>\n): AIMessage {\n if (!message.content) {\n throw new Error('No message content found in response.');\n }\n if (message.role !== 'assistant') {\n throw new Error(\n `Unsupported message role received in ChatBedrockConverse response: ${message.role}`\n );\n }\n\n let requestId: string | undefined;\n if (\n '$metadata' in responseMetadata &&\n responseMetadata.$metadata &&\n typeof responseMetadata.$metadata === 'object' &&\n 'requestId' in responseMetadata.$metadata\n ) {\n requestId = responseMetadata.$metadata.requestId as string;\n }\n\n let tokenUsage:\n | { input_tokens: number; output_tokens: number; total_tokens: number }\n | undefined;\n if (responseMetadata.usage) {\n const input_tokens = responseMetadata.usage.inputTokens ?? 0;\n const output_tokens = responseMetadata.usage.outputTokens ?? 0;\n tokenUsage = {\n input_tokens,\n output_tokens,\n total_tokens:\n responseMetadata.usage.totalTokens ?? input_tokens + output_tokens,\n };\n }\n\n if (\n message.content.length === 1 &&\n 'text' in message.content[0] &&\n typeof message.content[0].text === 'string'\n ) {\n return new AIMessage({\n content: message.content[0].text,\n response_metadata: responseMetadata,\n usage_metadata: tokenUsage,\n id: requestId,\n });\n } else {\n const toolCalls: Array<{\n id?: string;\n name: string;\n args: Record<string, unknown>;\n type: 'tool_call';\n }> = [];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const content: any[] = [];\n\n message.content.forEach((c) => {\n if (\n 'toolUse' in c &&\n c.toolUse &&\n c.toolUse.name &&\n c.toolUse.input &&\n typeof c.toolUse.input === 'object'\n ) {\n toolCalls.push({\n id: c.toolUse.toolUseId,\n name: c.toolUse.name,\n args: c.toolUse.input as Record<string, unknown>,\n type: 'tool_call',\n });\n } else if ('text' in c && typeof c.text === 'string') {\n content.push({ type: 'text', text: c.text });\n } else if ('reasoningContent' in c && c.reasoningContent) {\n content.push(\n bedrockReasoningBlockToLangchainReasoningBlock(c.reasoningContent)\n );\n } else {\n content.push(c);\n }\n });\n\n return new AIMessage({\n content: content.length ? content : '',\n tool_calls: toolCalls.length ? toolCalls : undefined,\n response_metadata: responseMetadata,\n usage_metadata: tokenUsage,\n id: requestId,\n });\n }\n}\n\n/**\n * Handle a content block delta event from Bedrock Converse stream.\n */\nexport function handleConverseStreamContentBlockDelta(\n contentBlockDelta: ContentBlockDeltaEvent\n): ChatGenerationChunk {\n if (!contentBlockDelta.delta) {\n throw new Error('No delta found in content block.');\n }\n\n if (typeof contentBlockDelta.delta.text === 'string') {\n return new ChatGenerationChunk({\n text: contentBlockDelta.delta.text,\n message: new AIMessageChunk({\n content: contentBlockDelta.delta.text,\n response_metadata: {\n contentBlockIndex: contentBlockDelta.contentBlockIndex,\n },\n }),\n });\n } else if (contentBlockDelta.delta.toolUse) {\n const index = contentBlockDelta.contentBlockIndex;\n return new ChatGenerationChunk({\n text: '',\n message: new AIMessageChunk({\n content: '',\n tool_call_chunks: [\n {\n args: contentBlockDelta.delta.toolUse.input as string,\n index,\n type: 'tool_call_chunk',\n },\n ],\n response_metadata: {\n contentBlockIndex: contentBlockDelta.contentBlockIndex,\n },\n }),\n });\n } else if (contentBlockDelta.delta.reasoningContent) {\n return new ChatGenerationChunk({\n text: '',\n message: new AIMessageChunk({\n content: [\n bedrockReasoningDeltaToLangchainPartialReasoningBlock(\n contentBlockDelta.delta.reasoningContent\n ),\n ],\n response_metadata: {\n contentBlockIndex: contentBlockDelta.contentBlockIndex,\n },\n }),\n });\n } else {\n throw new Error(\n `Unsupported content block type(s): ${JSON.stringify(contentBlockDelta.delta, null, 2)}`\n );\n }\n}\n\n/**\n * Handle a content block start event from Bedrock Converse stream.\n */\nexport function handleConverseStreamContentBlockStart(\n contentBlockStart: ContentBlockStartEvent\n): ChatGenerationChunk | null {\n const index = contentBlockStart.contentBlockIndex;\n\n if (contentBlockStart.start?.toolUse) {\n return new ChatGenerationChunk({\n text: '',\n message: new AIMessageChunk({\n content: '',\n tool_call_chunks: [\n {\n name: contentBlockStart.start.toolUse.name,\n id: contentBlockStart.start.toolUse.toolUseId,\n index,\n type: 'tool_call_chunk',\n },\n ],\n response_metadata: {\n contentBlockIndex: index,\n },\n }),\n });\n }\n\n // Return null for non-tool content block starts (text blocks don't need special handling)\n return null;\n}\n\n/**\n * Handle a metadata event from Bedrock Converse stream.\n */\nexport function handleConverseStreamMetadata(\n metadata: ConverseStreamMetadataEvent,\n extra: { streamUsage: boolean }\n): ChatGenerationChunk {\n const inputTokens = metadata.usage?.inputTokens ?? 0;\n const outputTokens = metadata.usage?.outputTokens ?? 0;\n const usage_metadata = {\n input_tokens: inputTokens,\n output_tokens: outputTokens,\n total_tokens: metadata.usage?.totalTokens ?? inputTokens + outputTokens,\n };\n\n return new ChatGenerationChunk({\n text: '',\n message: new AIMessageChunk({\n content: '',\n usage_metadata: extra.streamUsage ? usage_metadata : undefined,\n response_metadata: {\n // Use the same key as returned from the Converse API\n metadata,\n },\n }),\n });\n}\n"],"names":[],"mappings":"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"}