@librechat/agents 1.8.2 → 1.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/llm/providers.cjs +3 -2
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/esm/llm/providers.mjs +3 -2
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/package.json +1 -1
- package/src/llm/providers.ts +3 -3
- package/dist/cjs/llm/anthropic/llm.cjs +0 -117
- package/dist/cjs/llm/anthropic/llm.cjs.map +0 -1
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs +0 -229
- package/dist/cjs/llm/anthropic/utils/message_inputs.cjs.map +0 -1
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs +0 -135
- package/dist/cjs/llm/anthropic/utils/message_outputs.cjs.map +0 -1
- package/dist/cjs/llm/text.cjs +0 -73
- package/dist/cjs/llm/text.cjs.map +0 -1
- package/dist/esm/llm/anthropic/llm.mjs +0 -115
- package/dist/esm/llm/anthropic/llm.mjs.map +0 -1
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs +0 -226
- package/dist/esm/llm/anthropic/utils/message_inputs.mjs.map +0 -1
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs +0 -133
- package/dist/esm/llm/anthropic/utils/message_outputs.mjs.map +0 -1
- package/dist/esm/llm/text.mjs +0 -71
- package/dist/esm/llm/text.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message_outputs.mjs","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":[],"mappings":"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"}
|
package/dist/esm/llm/text.mjs
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { Readable } from 'stream';
|
|
2
|
-
|
|
3
|
-
/* eslint-disable no-console */
|
|
4
|
-
class TextStream extends Readable {
|
|
5
|
-
text;
|
|
6
|
-
currentIndex;
|
|
7
|
-
minChunkSize;
|
|
8
|
-
maxChunkSize;
|
|
9
|
-
delay;
|
|
10
|
-
constructor(text, options = {}) {
|
|
11
|
-
super(options);
|
|
12
|
-
this.text = text;
|
|
13
|
-
this.currentIndex = 0;
|
|
14
|
-
this.minChunkSize = options.minChunkSize ?? 2;
|
|
15
|
-
this.maxChunkSize = options.maxChunkSize ?? 4;
|
|
16
|
-
this.delay = options.delay ?? 20; // Time in milliseconds
|
|
17
|
-
}
|
|
18
|
-
_read() {
|
|
19
|
-
const { delay, minChunkSize, maxChunkSize } = this;
|
|
20
|
-
if (this.currentIndex < this.text.length) {
|
|
21
|
-
setTimeout(() => {
|
|
22
|
-
const remainingChars = this.text.length - this.currentIndex;
|
|
23
|
-
const chunkSize = Math.min(this.randomInt(minChunkSize, maxChunkSize + 1), remainingChars);
|
|
24
|
-
const chunk = this.text.slice(this.currentIndex, this.currentIndex + chunkSize);
|
|
25
|
-
this.push(chunk);
|
|
26
|
-
this.currentIndex += chunkSize;
|
|
27
|
-
}, delay);
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
this.push(null); // signal end of data
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
randomInt(min, max) {
|
|
34
|
-
return Math.floor(Math.random() * (max - min)) + min;
|
|
35
|
-
}
|
|
36
|
-
async processTextStream(progressCallback) {
|
|
37
|
-
const streamPromise = new Promise((resolve, reject) => {
|
|
38
|
-
this.on('data', (chunk) => {
|
|
39
|
-
progressCallback(chunk.toString());
|
|
40
|
-
});
|
|
41
|
-
this.on('end', () => {
|
|
42
|
-
resolve();
|
|
43
|
-
});
|
|
44
|
-
this.on('error', (err) => {
|
|
45
|
-
reject(err);
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
try {
|
|
49
|
-
await streamPromise;
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
console.error('[processTextStream] Error in text stream:', err);
|
|
53
|
-
// Handle the error appropriately, e.g., return an error message or throw an error
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
async *generateText(progressCallback) {
|
|
57
|
-
const { delay, minChunkSize, maxChunkSize } = this;
|
|
58
|
-
while (this.currentIndex < this.text.length) {
|
|
59
|
-
await new Promise(resolve => setTimeout(resolve, delay));
|
|
60
|
-
const remainingChars = this.text.length - this.currentIndex;
|
|
61
|
-
const chunkSize = Math.min(this.randomInt(minChunkSize, maxChunkSize + 1), remainingChars);
|
|
62
|
-
const chunk = this.text.slice(this.currentIndex, this.currentIndex + chunkSize);
|
|
63
|
-
progressCallback?.(chunk);
|
|
64
|
-
yield chunk;
|
|
65
|
-
this.currentIndex += chunkSize;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export { TextStream };
|
|
71
|
-
//# sourceMappingURL=text.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"text.mjs","sources":["../../../src/llm/text.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { Readable } from 'stream';\nimport type { ReadableOptions } from 'stream';\nexport interface TextStreamOptions extends ReadableOptions {\n minChunkSize?: number;\n maxChunkSize?: number;\n delay?: number;\n}\n\nexport type ProgressCallback = (chunk: string) => void;\nexport type PostChunkCallback = (chunk: string) => void;\n\nexport class TextStream extends Readable {\n private text: string;\n private currentIndex: number;\n private minChunkSize: number;\n private maxChunkSize: number;\n private delay: number;\n\n constructor(text: string, options: TextStreamOptions = {}) {\n super(options);\n this.text = text;\n this.currentIndex = 0;\n this.minChunkSize = options.minChunkSize ?? 2;\n this.maxChunkSize = options.maxChunkSize ?? 4;\n this.delay = options.delay ?? 20; // Time in milliseconds\n }\n\n _read(): void {\n const { delay, minChunkSize, maxChunkSize } = this;\n\n if (this.currentIndex < this.text.length) {\n setTimeout(() => {\n const remainingChars = this.text.length - this.currentIndex;\n const chunkSize = Math.min(this.randomInt(minChunkSize, maxChunkSize + 1), remainingChars);\n\n const chunk = this.text.slice(this.currentIndex, this.currentIndex + chunkSize);\n this.push(chunk);\n this.currentIndex += chunkSize;\n }, delay);\n } else {\n this.push(null); // signal end of data\n }\n }\n\n private randomInt(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min)) + min;\n }\n\n async processTextStream(progressCallback: ProgressCallback): Promise<void> {\n const streamPromise = new Promise<void>((resolve, reject) => {\n this.on('data', (chunk) => {\n progressCallback(chunk.toString());\n });\n\n this.on('end', () => {\n resolve();\n });\n\n this.on('error', (err) => {\n reject(err);\n });\n });\n\n try {\n await streamPromise;\n } catch (err) {\n console.error('[processTextStream] Error in text stream:', err);\n // Handle the error appropriately, e.g., return an error message or throw an error\n }\n }\n\n async *generateText(progressCallback?: ProgressCallback): AsyncGenerator<string, void, unknown> {\n const { delay, minChunkSize, maxChunkSize } = this;\n\n while (this.currentIndex < this.text.length) {\n await new Promise(resolve => setTimeout(resolve, delay));\n\n const remainingChars = this.text.length - this.currentIndex;\n const chunkSize = Math.min(this.randomInt(minChunkSize, maxChunkSize + 1), remainingChars);\n\n const chunk = this.text.slice(this.currentIndex, this.currentIndex + chunkSize);\n\n progressCallback?.(chunk);\n\n yield chunk;\n this.currentIndex += chunkSize;\n }\n }\n}"],"names":[],"mappings":"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"}
|