@librechat/agents 2.4.15 → 2.4.16
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/anthropic/{llm.cjs → index.cjs} +19 -8
- package/dist/cjs/llm/anthropic/index.cjs.map +1 -0
- package/dist/cjs/llm/openai/index.cjs +140 -0
- package/dist/cjs/llm/openai/index.cjs.map +1 -0
- package/dist/cjs/llm/openrouter/{llm.cjs → index.cjs} +4 -4
- package/dist/cjs/llm/openrouter/index.cjs.map +1 -0
- package/dist/cjs/llm/providers.cjs +9 -11
- package/dist/cjs/llm/providers.cjs.map +1 -1
- package/dist/cjs/main.cjs +2 -0
- package/dist/cjs/main.cjs.map +1 -1
- package/dist/esm/graphs/Graph.mjs +2 -2
- package/dist/esm/graphs/Graph.mjs.map +1 -1
- package/dist/esm/llm/anthropic/{llm.mjs → index.mjs} +19 -8
- package/dist/esm/llm/anthropic/index.mjs.map +1 -0
- package/dist/esm/llm/openai/index.mjs +134 -0
- package/dist/esm/llm/openai/index.mjs.map +1 -0
- package/dist/esm/llm/openrouter/{llm.mjs → index.mjs} +3 -3
- package/dist/esm/llm/openrouter/index.mjs.map +1 -0
- package/dist/esm/llm/providers.mjs +3 -5
- package/dist/esm/llm/providers.mjs.map +1 -1
- package/dist/esm/main.mjs +1 -0
- package/dist/esm/main.mjs.map +1 -1
- package/dist/esm/run.mjs +2 -2
- package/dist/esm/run.mjs.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/llm/openai/index.d.ts +19 -0
- package/dist/types/llm/openrouter/{llm.d.ts → index.d.ts} +2 -2
- package/dist/types/types/llm.d.ts +5 -7
- package/package.json +2 -2
- package/src/index.ts +4 -1
- package/src/llm/anthropic/{llm.ts → index.ts} +62 -19
- package/src/llm/openai/index.ts +164 -0
- package/src/llm/openrouter/{llm.ts → index.ts} +27 -13
- package/src/llm/providers.ts +8 -5
- package/src/types/llm.ts +11 -11
- package/src/utils/llmConfig.ts +1 -1
- package/dist/cjs/llm/anthropic/llm.cjs.map +0 -1
- package/dist/cjs/llm/openrouter/llm.cjs.map +0 -1
- package/dist/esm/llm/anthropic/llm.mjs.map +0 -1
- package/dist/esm/llm/openrouter/llm.mjs.map +0 -1
- /package/dist/types/llm/anthropic/{llm.d.ts → index.d.ts} +0 -0
|
@@ -2,10 +2,19 @@ import { AIMessageChunk } from '@langchain/core/messages';
|
|
|
2
2
|
import { ChatAnthropicMessages } from '@langchain/anthropic';
|
|
3
3
|
import { ChatGenerationChunk } from '@langchain/core/outputs';
|
|
4
4
|
import type { BaseChatModelParams } from '@langchain/core/language_models/chat_models';
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
BaseMessage,
|
|
7
|
+
MessageContentComplex,
|
|
8
|
+
} from '@langchain/core/messages';
|
|
6
9
|
import type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';
|
|
7
10
|
import type { AnthropicInput } from '@langchain/anthropic';
|
|
8
|
-
import type {
|
|
11
|
+
import type {
|
|
12
|
+
AnthropicMessageCreateParams,
|
|
13
|
+
AnthropicStreamingMessageCreateParams,
|
|
14
|
+
AnthropicStreamUsage,
|
|
15
|
+
AnthropicMessageStartEvent,
|
|
16
|
+
AnthropicMessageDeltaEvent,
|
|
17
|
+
} from '@/llm/anthropic/types';
|
|
9
18
|
import { _makeMessageChunkFromAnthropicEvent } from './utils/message_outputs';
|
|
10
19
|
import { _convertMessagesToAnthropicPayload } from './utils/message_inputs';
|
|
11
20
|
import { TextStream } from '@/llm/text';
|
|
@@ -43,7 +52,9 @@ function _thinkingInParams(
|
|
|
43
52
|
return !!(params.thinking && params.thinking.type === 'enabled');
|
|
44
53
|
}
|
|
45
54
|
|
|
46
|
-
function extractToken(
|
|
55
|
+
function extractToken(
|
|
56
|
+
chunk: AIMessageChunk
|
|
57
|
+
): [string, 'string' | 'input' | 'content'] | [undefined] {
|
|
47
58
|
if (typeof chunk.content === 'string') {
|
|
48
59
|
return [chunk.content, 'string'];
|
|
49
60
|
} else if (
|
|
@@ -70,7 +81,11 @@ function extractToken(chunk: AIMessageChunk): [string, 'string' | 'input' | 'con
|
|
|
70
81
|
return [undefined];
|
|
71
82
|
}
|
|
72
83
|
|
|
73
|
-
function cloneChunk(
|
|
84
|
+
function cloneChunk(
|
|
85
|
+
text: string,
|
|
86
|
+
tokenType: string,
|
|
87
|
+
chunk: AIMessageChunk
|
|
88
|
+
): AIMessageChunk {
|
|
74
89
|
if (tokenType === 'string') {
|
|
75
90
|
return new AIMessageChunk(Object.assign({}, chunk, { content: text }));
|
|
76
91
|
} else if (tokenType === 'input') {
|
|
@@ -78,17 +93,31 @@ function cloneChunk(text: string, tokenType: string, chunk: AIMessageChunk): AIM
|
|
|
78
93
|
}
|
|
79
94
|
const content = chunk.content[0] as MessageContentComplex;
|
|
80
95
|
if (tokenType === 'content' && content.type === 'text') {
|
|
81
|
-
return new AIMessageChunk(
|
|
96
|
+
return new AIMessageChunk(
|
|
97
|
+
Object.assign({}, chunk, {
|
|
98
|
+
content: [Object.assign({}, content, { text })],
|
|
99
|
+
})
|
|
100
|
+
);
|
|
82
101
|
} else if (tokenType === 'content' && content.type === 'text_delta') {
|
|
83
|
-
return new AIMessageChunk(
|
|
102
|
+
return new AIMessageChunk(
|
|
103
|
+
Object.assign({}, chunk, {
|
|
104
|
+
content: [Object.assign({}, content, { text })],
|
|
105
|
+
})
|
|
106
|
+
);
|
|
84
107
|
} else if (tokenType === 'content' && content.type?.startsWith('thinking')) {
|
|
85
|
-
return new AIMessageChunk(
|
|
108
|
+
return new AIMessageChunk(
|
|
109
|
+
Object.assign({}, chunk, {
|
|
110
|
+
content: [Object.assign({}, content, { thinking: text })],
|
|
111
|
+
})
|
|
112
|
+
);
|
|
86
113
|
}
|
|
87
114
|
|
|
88
115
|
return chunk;
|
|
89
116
|
}
|
|
90
117
|
|
|
91
|
-
export type CustomAnthropicInput = AnthropicInput & {
|
|
118
|
+
export type CustomAnthropicInput = AnthropicInput & {
|
|
119
|
+
_lc_stream_delay?: number;
|
|
120
|
+
} & BaseChatModelParams;
|
|
92
121
|
|
|
93
122
|
export class CustomAnthropic extends ChatAnthropicMessages {
|
|
94
123
|
_lc_stream_delay: number;
|
|
@@ -109,18 +138,26 @@ export class CustomAnthropic extends ChatAnthropicMessages {
|
|
|
109
138
|
if (this.emitted_usage === true) {
|
|
110
139
|
return;
|
|
111
140
|
}
|
|
112
|
-
const inputUsage =
|
|
113
|
-
|
|
141
|
+
const inputUsage = this.message_start?.message.usage as
|
|
142
|
+
| undefined
|
|
143
|
+
| AnthropicStreamUsage;
|
|
144
|
+
const outputUsage = this.message_delta?.usage as
|
|
145
|
+
| undefined
|
|
146
|
+
| Partial<AnthropicStreamUsage>;
|
|
114
147
|
if (!outputUsage) {
|
|
115
148
|
return;
|
|
116
149
|
}
|
|
117
150
|
const totalUsage: AnthropicStreamUsage = {
|
|
118
151
|
input_tokens: inputUsage?.input_tokens ?? 0,
|
|
119
152
|
output_tokens: outputUsage.output_tokens ?? 0,
|
|
120
|
-
total_tokens:
|
|
153
|
+
total_tokens:
|
|
154
|
+
(inputUsage?.input_tokens ?? 0) + (outputUsage.output_tokens ?? 0),
|
|
121
155
|
};
|
|
122
156
|
|
|
123
|
-
if (
|
|
157
|
+
if (
|
|
158
|
+
inputUsage?.cache_creation_input_tokens != null ||
|
|
159
|
+
inputUsage?.cache_read_input_tokens != null
|
|
160
|
+
) {
|
|
124
161
|
totalUsage.input_token_details = {
|
|
125
162
|
cache_creation: inputUsage.cache_creation_input_tokens ?? 0,
|
|
126
163
|
cache_read: inputUsage.cache_read_input_tokens ?? 0,
|
|
@@ -144,12 +181,14 @@ export class CustomAnthropic extends ChatAnthropicMessages {
|
|
|
144
181
|
usageMetadata,
|
|
145
182
|
shouldStreamUsage,
|
|
146
183
|
}: {
|
|
147
|
-
token?: string
|
|
148
|
-
chunk: AIMessageChunk
|
|
149
|
-
shouldStreamUsage: boolean
|
|
150
|
-
usageMetadata?: AnthropicStreamUsage
|
|
184
|
+
token?: string;
|
|
185
|
+
chunk: AIMessageChunk;
|
|
186
|
+
shouldStreamUsage: boolean;
|
|
187
|
+
usageMetadata?: AnthropicStreamUsage;
|
|
151
188
|
}): ChatGenerationChunk {
|
|
152
|
-
const usage_metadata = shouldStreamUsage
|
|
189
|
+
const usage_metadata = shouldStreamUsage
|
|
190
|
+
? (usageMetadata ?? chunk.usage_metadata)
|
|
191
|
+
: undefined;
|
|
153
192
|
return new ChatGenerationChunk({
|
|
154
193
|
message: new AIMessageChunk({
|
|
155
194
|
// Just yield chunk as it is and tool_use will be concat by BaseChatModel._generateUncached().
|
|
@@ -220,7 +259,11 @@ export class CustomAnthropic extends ChatAnthropicMessages {
|
|
|
220
259
|
const { chunk } = result;
|
|
221
260
|
const [token = '', tokenType] = extractToken(chunk);
|
|
222
261
|
|
|
223
|
-
if (
|
|
262
|
+
if (
|
|
263
|
+
!tokenType ||
|
|
264
|
+
tokenType === 'input' ||
|
|
265
|
+
(token === '' && usageMetadata)
|
|
266
|
+
) {
|
|
224
267
|
const generationChunk = this.createGenerationChunk({
|
|
225
268
|
token,
|
|
226
269
|
chunk,
|
|
@@ -280,4 +323,4 @@ export class CustomAnthropic extends ChatAnthropicMessages {
|
|
|
280
323
|
|
|
281
324
|
this.resetTokenEvents();
|
|
282
325
|
}
|
|
283
|
-
}
|
|
326
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { ChatXAI as OriginalChatXAI } from '@langchain/xai';
|
|
2
|
+
import { ChatDeepSeek as OriginalChatDeepSeek } from '@langchain/deepseek';
|
|
3
|
+
import {
|
|
4
|
+
getEndpoint,
|
|
5
|
+
OpenAIClient,
|
|
6
|
+
ChatOpenAI as OriginalChatOpenAI,
|
|
7
|
+
AzureChatOpenAI as OriginalAzureChatOpenAI,
|
|
8
|
+
} from '@langchain/openai';
|
|
9
|
+
import type * as t from '@langchain/openai';
|
|
10
|
+
|
|
11
|
+
export class CustomOpenAIClient extends OpenAIClient {
|
|
12
|
+
async fetchWithTimeout(
|
|
13
|
+
url: RequestInfo,
|
|
14
|
+
init: RequestInit | undefined,
|
|
15
|
+
ms: number,
|
|
16
|
+
controller: AbortController
|
|
17
|
+
): Promise<Response> {
|
|
18
|
+
const { signal, ...options } = init || {};
|
|
19
|
+
const handler = (): void => controller.abort();
|
|
20
|
+
if (signal) signal.addEventListener('abort', handler);
|
|
21
|
+
|
|
22
|
+
const timeout = setTimeout(() => handler, ms);
|
|
23
|
+
|
|
24
|
+
const fetchOptions = {
|
|
25
|
+
signal: controller.signal as AbortSignal,
|
|
26
|
+
...options,
|
|
27
|
+
};
|
|
28
|
+
if (fetchOptions.method != null) {
|
|
29
|
+
// Custom methods like 'patch' need to be uppercased
|
|
30
|
+
// See https://github.com/nodejs/undici/issues/2294
|
|
31
|
+
fetchOptions.method = fetchOptions.method.toUpperCase();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return (
|
|
35
|
+
// use undefined this binding; fetch errors if bound to something else in browser/cloudflare
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
37
|
+
/** @ts-ignore */
|
|
38
|
+
this.fetch.call(undefined, url, fetchOptions).finally(() => {
|
|
39
|
+
if (signal) signal.removeEventListener('abort', handler);
|
|
40
|
+
clearTimeout(timeout);
|
|
41
|
+
})
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export class ChatOpenAI extends OriginalChatOpenAI<t.ChatOpenAICallOptions> {
|
|
47
|
+
protected _getClientOptions(
|
|
48
|
+
options?: t.OpenAICoreRequestOptions
|
|
49
|
+
): t.OpenAICoreRequestOptions {
|
|
50
|
+
if (!(this.client as OpenAIClient | undefined)) {
|
|
51
|
+
const openAIEndpointConfig: t.OpenAIEndpointConfig = {
|
|
52
|
+
baseURL: this.clientConfig.baseURL,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const endpoint = getEndpoint(openAIEndpointConfig);
|
|
56
|
+
const params = {
|
|
57
|
+
...this.clientConfig,
|
|
58
|
+
baseURL: endpoint,
|
|
59
|
+
timeout: this.timeout,
|
|
60
|
+
maxRetries: 0,
|
|
61
|
+
};
|
|
62
|
+
if (params.baseURL == null) {
|
|
63
|
+
delete params.baseURL;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
this.client = new CustomOpenAIClient(params);
|
|
67
|
+
}
|
|
68
|
+
const requestOptions = {
|
|
69
|
+
...this.clientConfig,
|
|
70
|
+
...options,
|
|
71
|
+
} as t.OpenAICoreRequestOptions;
|
|
72
|
+
return requestOptions;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export class AzureChatOpenAI extends OriginalAzureChatOpenAI {
|
|
77
|
+
protected _getClientOptions(
|
|
78
|
+
options?: t.OpenAICoreRequestOptions
|
|
79
|
+
): t.OpenAICoreRequestOptions {
|
|
80
|
+
if (!(this.client as OpenAIClient | undefined)) {
|
|
81
|
+
const openAIEndpointConfig: t.OpenAIEndpointConfig = {
|
|
82
|
+
baseURL: this.clientConfig.baseURL,
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const endpoint = getEndpoint(openAIEndpointConfig);
|
|
86
|
+
const params = {
|
|
87
|
+
...this.clientConfig,
|
|
88
|
+
baseURL: endpoint,
|
|
89
|
+
timeout: this.timeout,
|
|
90
|
+
maxRetries: 0,
|
|
91
|
+
};
|
|
92
|
+
if (params.baseURL == null) {
|
|
93
|
+
delete params.baseURL;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
this.client = new CustomOpenAIClient(params);
|
|
97
|
+
}
|
|
98
|
+
const requestOptions = {
|
|
99
|
+
...this.clientConfig,
|
|
100
|
+
...options,
|
|
101
|
+
} as t.OpenAICoreRequestOptions;
|
|
102
|
+
return requestOptions;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export class ChatDeepSeek extends OriginalChatDeepSeek {
|
|
107
|
+
protected _getClientOptions(
|
|
108
|
+
options?: t.OpenAICoreRequestOptions
|
|
109
|
+
): t.OpenAICoreRequestOptions {
|
|
110
|
+
if (!(this.client as OpenAIClient | undefined)) {
|
|
111
|
+
const openAIEndpointConfig: t.OpenAIEndpointConfig = {
|
|
112
|
+
baseURL: this.clientConfig.baseURL,
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
const endpoint = getEndpoint(openAIEndpointConfig);
|
|
116
|
+
const params = {
|
|
117
|
+
...this.clientConfig,
|
|
118
|
+
baseURL: endpoint,
|
|
119
|
+
timeout: this.timeout,
|
|
120
|
+
maxRetries: 0,
|
|
121
|
+
};
|
|
122
|
+
if (params.baseURL == null) {
|
|
123
|
+
delete params.baseURL;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
this.client = new CustomOpenAIClient(params);
|
|
127
|
+
}
|
|
128
|
+
const requestOptions = {
|
|
129
|
+
...this.clientConfig,
|
|
130
|
+
...options,
|
|
131
|
+
} as t.OpenAICoreRequestOptions;
|
|
132
|
+
return requestOptions;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export class ChatXAI extends OriginalChatXAI {
|
|
137
|
+
protected _getClientOptions(
|
|
138
|
+
options?: t.OpenAICoreRequestOptions
|
|
139
|
+
): t.OpenAICoreRequestOptions {
|
|
140
|
+
if (!(this.client as OpenAIClient | undefined)) {
|
|
141
|
+
const openAIEndpointConfig: t.OpenAIEndpointConfig = {
|
|
142
|
+
baseURL: this.clientConfig.baseURL,
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const endpoint = getEndpoint(openAIEndpointConfig);
|
|
146
|
+
const params = {
|
|
147
|
+
...this.clientConfig,
|
|
148
|
+
baseURL: endpoint,
|
|
149
|
+
timeout: this.timeout,
|
|
150
|
+
maxRetries: 0,
|
|
151
|
+
};
|
|
152
|
+
if (params.baseURL == null) {
|
|
153
|
+
delete params.baseURL;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
this.client = new CustomOpenAIClient(params);
|
|
157
|
+
}
|
|
158
|
+
const requestOptions = {
|
|
159
|
+
...this.clientConfig,
|
|
160
|
+
...options,
|
|
161
|
+
} as t.OpenAICoreRequestOptions;
|
|
162
|
+
return requestOptions;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
@@ -1,31 +1,45 @@
|
|
|
1
|
-
import { ChatOpenAI } from '@langchain/openai';
|
|
2
1
|
import type { ChatOpenAICallOptions, OpenAIClient } from '@langchain/openai';
|
|
3
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
AIMessageChunk,
|
|
4
|
+
HumanMessageChunk,
|
|
5
|
+
SystemMessageChunk,
|
|
6
|
+
FunctionMessageChunk,
|
|
7
|
+
ToolMessageChunk,
|
|
8
|
+
ChatMessageChunk,
|
|
9
|
+
} from '@langchain/core/messages';
|
|
10
|
+
import { ChatOpenAI } from '@/llm/openai';
|
|
11
|
+
|
|
4
12
|
export interface ChatOpenRouterCallOptions extends ChatOpenAICallOptions {
|
|
5
13
|
include_reasoning?: boolean;
|
|
6
14
|
}
|
|
7
|
-
export class ChatOpenRouter extends ChatOpenAI
|
|
15
|
+
export class ChatOpenRouter extends ChatOpenAI {
|
|
8
16
|
constructor(_fields: Partial<ChatOpenRouterCallOptions>) {
|
|
9
17
|
const { include_reasoning, ...fields } = _fields;
|
|
10
18
|
super({
|
|
11
19
|
...fields,
|
|
12
20
|
modelKwargs: {
|
|
13
21
|
include_reasoning,
|
|
14
|
-
}
|
|
22
|
+
},
|
|
15
23
|
});
|
|
16
24
|
}
|
|
17
25
|
protected override _convertOpenAIDeltaToBaseMessageChunk(
|
|
18
|
-
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
27
|
delta: Record<string, any>,
|
|
20
28
|
rawResponse: OpenAIClient.ChatCompletionChunk,
|
|
21
29
|
defaultRole?:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
):
|
|
30
|
+
| 'function'
|
|
31
|
+
| 'user'
|
|
32
|
+
| 'system'
|
|
33
|
+
| 'developer'
|
|
34
|
+
| 'assistant'
|
|
35
|
+
| 'tool'
|
|
36
|
+
):
|
|
37
|
+
| AIMessageChunk
|
|
38
|
+
| HumanMessageChunk
|
|
39
|
+
| SystemMessageChunk
|
|
40
|
+
| FunctionMessageChunk
|
|
41
|
+
| ToolMessageChunk
|
|
42
|
+
| ChatMessageChunk {
|
|
29
43
|
const messageChunk = super._convertOpenAIDeltaToBaseMessageChunk(
|
|
30
44
|
delta,
|
|
31
45
|
rawResponse,
|
|
@@ -34,4 +48,4 @@ export class ChatOpenRouter extends ChatOpenAI<ChatOpenRouterCallOptions> {
|
|
|
34
48
|
messageChunk.additional_kwargs.reasoning = delta.reasoning;
|
|
35
49
|
return messageChunk;
|
|
36
50
|
}
|
|
37
|
-
}
|
|
51
|
+
}
|
package/src/llm/providers.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
// src/llm/providers.ts
|
|
2
|
-
import { ChatXAI } from '@langchain/xai';
|
|
3
2
|
import { ChatOllama } from '@langchain/ollama';
|
|
4
|
-
import { ChatDeepSeek } from '@langchain/deepseek';
|
|
5
3
|
import { ChatMistralAI } from '@langchain/mistralai';
|
|
6
4
|
import { ChatBedrockConverse } from '@langchain/aws';
|
|
7
5
|
// import { ChatAnthropic } from '@langchain/anthropic';
|
|
8
6
|
import { ChatVertexAI } from '@langchain/google-vertexai';
|
|
9
|
-
import { ChatOpenAI, AzureChatOpenAI } from '@langchain/openai';
|
|
10
7
|
import { ChatGoogleGenerativeAI } from '@langchain/google-genai';
|
|
11
8
|
import { BedrockChat } from '@langchain/community/chat_models/bedrock/web';
|
|
12
9
|
import type {
|
|
@@ -14,8 +11,14 @@ import type {
|
|
|
14
11
|
ProviderOptionsMap,
|
|
15
12
|
ChatModelMap,
|
|
16
13
|
} from '@/types';
|
|
17
|
-
import { CustomAnthropic } from '@/llm/anthropic
|
|
18
|
-
import { ChatOpenRouter } from '@/llm/openrouter
|
|
14
|
+
import { CustomAnthropic } from '@/llm/anthropic';
|
|
15
|
+
import { ChatOpenRouter } from '@/llm/openrouter';
|
|
16
|
+
import {
|
|
17
|
+
ChatXAI,
|
|
18
|
+
ChatOpenAI,
|
|
19
|
+
ChatDeepSeek,
|
|
20
|
+
AzureChatOpenAI,
|
|
21
|
+
} from '@/llm/openai';
|
|
19
22
|
import { Providers } from '@/common';
|
|
20
23
|
|
|
21
24
|
export const llmProviders: Partial<ChatModelConstructorMap> = {
|
package/src/types/llm.ts
CHANGED
|
@@ -1,31 +1,26 @@
|
|
|
1
1
|
// src/types/llm.ts
|
|
2
|
-
import { ChatXAI } from '@langchain/xai';
|
|
3
2
|
import { ChatOllama } from '@langchain/ollama';
|
|
4
|
-
import { ChatDeepSeek } from '@langchain/deepseek';
|
|
5
3
|
import { ChatAnthropic } from '@langchain/anthropic';
|
|
6
4
|
import { ChatMistralAI } from '@langchain/mistralai';
|
|
7
5
|
import { ChatBedrockConverse } from '@langchain/aws';
|
|
8
6
|
import { ChatVertexAI } from '@langchain/google-vertexai';
|
|
9
7
|
import { ChatGoogleGenerativeAI } from '@langchain/google-genai';
|
|
10
8
|
import { BedrockChat } from '@langchain/community/chat_models/bedrock/web';
|
|
11
|
-
import {
|
|
12
|
-
ChatOpenAI,
|
|
13
|
-
AzureChatOpenAI,
|
|
14
|
-
ClientOptions as OAIClientOptions,
|
|
15
|
-
} from '@langchain/openai';
|
|
16
9
|
import type {
|
|
17
10
|
BindToolsInput,
|
|
18
11
|
BaseChatModelParams,
|
|
19
12
|
} from '@langchain/core/language_models/chat_models';
|
|
20
13
|
import type {
|
|
21
|
-
ChatOpenAIFields,
|
|
22
14
|
OpenAIChatInput,
|
|
15
|
+
ChatOpenAIFields,
|
|
23
16
|
AzureOpenAIInput,
|
|
17
|
+
ClientOptions as OAIClientOptions,
|
|
24
18
|
} from '@langchain/openai';
|
|
25
19
|
import type { BedrockChatFields } from '@langchain/community/chat_models/bedrock/web';
|
|
26
20
|
import type { GoogleGenerativeAIChatInput } from '@langchain/google-genai';
|
|
27
21
|
import type { ChatVertexAIInput } from '@langchain/google-vertexai';
|
|
28
22
|
import type { ChatDeepSeekCallOptions } from '@langchain/deepseek';
|
|
23
|
+
import type { ChatOpenRouterCallOptions } from '@/llm/openrouter';
|
|
29
24
|
import type { ChatBedrockConverseInput } from '@langchain/aws';
|
|
30
25
|
import type { ChatMistralAIInput } from '@langchain/mistralai';
|
|
31
26
|
import type { StructuredTool } from '@langchain/core/tools';
|
|
@@ -34,8 +29,13 @@ import type { Runnable } from '@langchain/core/runnables';
|
|
|
34
29
|
import type { ChatOllamaInput } from '@langchain/ollama';
|
|
35
30
|
import type { OpenAI as OpenAIClient } from 'openai';
|
|
36
31
|
import type { ChatXAIInput } from '@langchain/xai';
|
|
37
|
-
import
|
|
38
|
-
|
|
32
|
+
import {
|
|
33
|
+
ChatXAI,
|
|
34
|
+
ChatOpenAI,
|
|
35
|
+
ChatDeepSeek,
|
|
36
|
+
AzureChatOpenAI,
|
|
37
|
+
} from '@/llm/openai';
|
|
38
|
+
import { ChatOpenRouter } from '@/llm/openrouter';
|
|
39
39
|
import { Providers } from '@/common';
|
|
40
40
|
|
|
41
41
|
export type AzureClientOptions = Partial<OpenAIChatInput> &
|
|
@@ -105,6 +105,7 @@ export type ProviderOptionsMap = {
|
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
export type ChatModelMap = {
|
|
108
|
+
[Providers.XAI]: ChatXAI;
|
|
108
109
|
[Providers.OPENAI]: ChatOpenAI;
|
|
109
110
|
[Providers.OLLAMA]: ChatOllama;
|
|
110
111
|
[Providers.AZURE]: AzureChatOpenAI;
|
|
@@ -117,7 +118,6 @@ export type ChatModelMap = {
|
|
|
117
118
|
[Providers.BEDROCK_LEGACY]: BedrockChat;
|
|
118
119
|
[Providers.BEDROCK]: ChatBedrockConverse;
|
|
119
120
|
[Providers.GOOGLE]: ChatGoogleGenerativeAI;
|
|
120
|
-
[Providers.XAI]: ChatXAI;
|
|
121
121
|
};
|
|
122
122
|
|
|
123
123
|
export type ChatModelConstructorMap = {
|
package/src/utils/llmConfig.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/utils/llmConfig.ts
|
|
2
2
|
import { Providers } from '@/common';
|
|
3
|
-
import type * as or from '@/llm/openrouter
|
|
3
|
+
import type * as or from '@/llm/openrouter';
|
|
4
4
|
import type * as t from '@/types';
|
|
5
5
|
|
|
6
6
|
export const llmConfigs: Record<string, t.LLMConfig | undefined> = {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm.cjs","sources":["../../../../src/llm/anthropic/llm.ts"],"sourcesContent":["import { AIMessageChunk } from '@langchain/core/messages';\nimport { ChatAnthropicMessages } from '@langchain/anthropic';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport type { BaseChatModelParams } from '@langchain/core/language_models/chat_models';\nimport type { BaseMessage, MessageContentComplex } from '@langchain/core/messages';\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { AnthropicInput } from '@langchain/anthropic';\nimport type { AnthropicMessageCreateParams, AnthropicStreamingMessageCreateParams, AnthropicStreamUsage, AnthropicMessageStartEvent, AnthropicMessageDeltaEvent } from '@/llm/anthropic/types';\nimport { _makeMessageChunkFromAnthropicEvent } from './utils/message_outputs';\nimport { _convertMessagesToAnthropicPayload } from './utils/message_inputs';\nimport { TextStream } from '@/llm/text';\n\nfunction _toolsInParams(\n params: AnthropicMessageCreateParams | AnthropicStreamingMessageCreateParams\n): boolean {\n return !!(params.tools && params.tools.length > 0);\n}\nfunction _documentsInParams(\n params: AnthropicMessageCreateParams | AnthropicStreamingMessageCreateParams\n): boolean {\n for (const message of params.messages ?? []) {\n if (typeof message.content === 'string') {\n continue;\n }\n for (const block of message.content ?? []) {\n if (\n typeof block === 'object' &&\n block != null &&\n block.type === 'document' &&\n typeof block.citations === 'object' &&\n block.citations.enabled\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction _thinkingInParams(\n params: AnthropicMessageCreateParams | AnthropicStreamingMessageCreateParams\n): boolean {\n return !!(params.thinking && params.thinking.type === 'enabled');\n}\n\nfunction extractToken(chunk: AIMessageChunk): [string, 'string' | 'input' | 'content'] | [undefined] {\n if (typeof chunk.content === 'string') {\n return [chunk.content, 'string'];\n } else if (\n Array.isArray(chunk.content) &&\n chunk.content.length >= 1 &&\n 'input' in chunk.content[0]\n ) {\n return typeof chunk.content[0].input === 'string'\n ? [chunk.content[0].input, 'input']\n : [JSON.stringify(chunk.content[0].input), 'input'];\n } else if (\n Array.isArray(chunk.content) &&\n chunk.content.length >= 1 &&\n 'text' in chunk.content[0]\n ) {\n return [chunk.content[0].text, 'content'];\n } else if (\n Array.isArray(chunk.content) &&\n chunk.content.length >= 1 &&\n 'thinking' in chunk.content[0]\n ) {\n return [chunk.content[0].thinking, 'content'];\n }\n return [undefined];\n}\n\nfunction cloneChunk(text: string, tokenType: string, chunk: AIMessageChunk): AIMessageChunk {\n if (tokenType === 'string') {\n return new AIMessageChunk(Object.assign({}, chunk, { content: text }));\n } else if (tokenType === 'input') {\n return chunk;\n }\n const content = chunk.content[0] as MessageContentComplex;\n if (tokenType === 'content' && content.type === 'text') {\n return new AIMessageChunk(Object.assign({}, chunk, { content: [Object.assign({}, content, { text })] }));\n } else if (tokenType === 'content' && content.type === 'text_delta') {\n return new AIMessageChunk(Object.assign({}, chunk, { content: [Object.assign({}, content, { text })] }));\n } else if (tokenType === 'content' && content.type?.startsWith('thinking')) {\n return new AIMessageChunk(Object.assign({}, chunk, { content: [Object.assign({}, content, { thinking: text })] }));\n }\n\n return chunk;\n}\n\nexport type CustomAnthropicInput = AnthropicInput & { _lc_stream_delay?: number } & BaseChatModelParams;\n\nexport class CustomAnthropic extends ChatAnthropicMessages {\n _lc_stream_delay: number;\n private message_start: AnthropicMessageStartEvent | undefined;\n private message_delta: AnthropicMessageDeltaEvent | undefined;\n private tools_in_params?: boolean;\n private emitted_usage?: boolean;\n constructor(fields?: CustomAnthropicInput) {\n super(fields);\n this._lc_stream_delay = fields?._lc_stream_delay ?? 25;\n }\n\n /**\n * Get stream usage as returned by this client's API response.\n * @returns {AnthropicStreamUsage} The stream usage object.\n */\n getStreamUsage(): AnthropicStreamUsage | undefined {\n if (this.emitted_usage === true) {\n return;\n }\n const inputUsage = (this.message_start?.message)?.usage as undefined | AnthropicStreamUsage;\n const outputUsage = this.message_delta?.usage as undefined | Partial<AnthropicStreamUsage>;\n if (!outputUsage) {\n return;\n }\n const totalUsage: AnthropicStreamUsage = {\n input_tokens: inputUsage?.input_tokens ?? 0,\n output_tokens: outputUsage.output_tokens ?? 0,\n total_tokens: (inputUsage?.input_tokens ?? 0) + (outputUsage.output_tokens ?? 0),\n };\n\n if (inputUsage?.cache_creation_input_tokens != null || inputUsage?.cache_read_input_tokens != null) {\n totalUsage.input_token_details = {\n cache_creation: inputUsage.cache_creation_input_tokens ?? 0,\n cache_read: inputUsage.cache_read_input_tokens ?? 0,\n };\n }\n\n this.emitted_usage = true;\n return totalUsage;\n }\n\n resetTokenEvents(): void {\n this.message_start = undefined;\n this.message_delta = undefined;\n this.emitted_usage = undefined;\n this.tools_in_params = undefined;\n }\n\n private createGenerationChunk({\n token,\n chunk,\n usageMetadata,\n shouldStreamUsage,\n }: {\n token?: string,\n chunk: AIMessageChunk,\n shouldStreamUsage: boolean\n usageMetadata?: AnthropicStreamUsage,\n }): ChatGenerationChunk {\n const usage_metadata = shouldStreamUsage ? usageMetadata ?? chunk.usage_metadata : undefined;\n return new ChatGenerationChunk({\n message: new AIMessageChunk({\n // Just yield chunk as it is and tool_use will be concat by BaseChatModel._generateUncached().\n content: chunk.content,\n additional_kwargs: chunk.additional_kwargs,\n tool_call_chunks: chunk.tool_call_chunks,\n response_metadata: chunk.response_metadata,\n usage_metadata,\n id: chunk.id,\n }),\n text: token ?? '',\n });\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const params = this.invocationParams(options);\n const formattedMessages = _convertMessagesToAnthropicPayload(messages);\n const payload = {\n ...params,\n ...formattedMessages,\n stream: true,\n } as const;\n const coerceContentToString =\n !_toolsInParams(payload) &&\n !_documentsInParams(payload) &&\n !_thinkingInParams(payload);\n\n const stream = await this.createStreamWithRetry(\n {\n ...params,\n ...formattedMessages,\n stream: true,\n },\n {\n headers: options.headers,\n }\n );\n\n const shouldStreamUsage = this.streamUsage ?? options.streamUsage;\n\n for await (const data of stream) {\n if (options.signal?.aborted === true) {\n stream.controller.abort();\n throw new Error('AbortError: User aborted the request.');\n }\n\n if (data.type === 'message_start') {\n this.message_start = data as AnthropicMessageStartEvent;\n } else if (data.type === 'message_delta') {\n this.message_delta = data as AnthropicMessageDeltaEvent;\n }\n\n let usageMetadata: AnthropicStreamUsage | undefined;\n if (this.tools_in_params !== true && this.emitted_usage !== true) {\n usageMetadata = this.getStreamUsage();\n }\n\n const result = _makeMessageChunkFromAnthropicEvent(data, {\n streamUsage: shouldStreamUsage,\n coerceContentToString,\n });\n if (!result) continue;\n\n const { chunk } = result;\n const [token = '', tokenType] = extractToken(chunk);\n\n if (!tokenType || tokenType === 'input' || (token === '' && usageMetadata)) {\n const generationChunk = this.createGenerationChunk({\n token,\n chunk,\n usageMetadata,\n shouldStreamUsage,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n token,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n continue;\n }\n\n const textStream = new TextStream(token, {\n delay: this._lc_stream_delay,\n firstWordChunk: true,\n minChunkSize: 4,\n maxChunkSize: 8,\n });\n\n const generator = textStream.generateText();\n try {\n let emittedUsage = false;\n for await (const currentToken of generator) {\n const newChunk = cloneChunk(currentToken, tokenType, chunk);\n\n const generationChunk = this.createGenerationChunk({\n token: currentToken,\n chunk: newChunk,\n usageMetadata: emittedUsage ? undefined : usageMetadata,\n shouldStreamUsage,\n });\n\n if (usageMetadata && !emittedUsage) {\n emittedUsage = true;\n }\n yield generationChunk;\n\n await runManager?.handleLLMNewToken(\n token,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n } finally {\n await generator.return();\n }\n }\n\n this.resetTokenEvents();\n }\n}"],"names":["AIMessageChunk","ChatAnthropicMessages","ChatGenerationChunk","_convertMessagesToAnthropicPayload","_makeMessageChunkFromAnthropicEvent","TextStream"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm.cjs","sources":["../../../../src/llm/openrouter/llm.ts"],"sourcesContent":["import { ChatOpenAI } from '@langchain/openai';\nimport type { ChatOpenAICallOptions, OpenAIClient } from '@langchain/openai';\nimport type { AIMessageChunk, HumanMessageChunk, SystemMessageChunk, FunctionMessageChunk, ToolMessageChunk, ChatMessageChunk} from '@langchain/core/messages';\nexport interface ChatOpenRouterCallOptions extends ChatOpenAICallOptions {\n include_reasoning?: boolean;\n}\nexport class ChatOpenRouter extends ChatOpenAI<ChatOpenRouterCallOptions> {\n constructor(_fields: Partial<ChatOpenRouterCallOptions>) {\n const { include_reasoning, ...fields } = _fields;\n super({\n ...fields,\n modelKwargs: {\n include_reasoning,\n }\n });\n }\n protected override _convertOpenAIDeltaToBaseMessageChunk(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>,\n rawResponse: OpenAIClient.ChatCompletionChunk,\n defaultRole?:\n | 'function'\n | 'user'\n | 'system'\n | 'developer'\n | 'assistant'\n | 'tool'\n ): AIMessageChunk | HumanMessageChunk | SystemMessageChunk | FunctionMessageChunk | ToolMessageChunk | ChatMessageChunk {\n const messageChunk = super._convertOpenAIDeltaToBaseMessageChunk(\n delta,\n rawResponse,\n defaultRole\n );\n messageChunk.additional_kwargs.reasoning = delta.reasoning;\n return messageChunk;\n }\n}"],"names":["ChatOpenAI"],"mappings":";;;;AAMM,MAAO,cAAe,SAAQA,iBAAqC,CAAA;AACvE,IAAA,WAAA,CAAY,OAA2C,EAAA;QACrD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO;AAChD,QAAA,KAAK,CAAC;AACJ,YAAA,GAAG,MAAM;AACT,YAAA,WAAW,EAAE;gBACX,iBAAiB;AAClB;AACF,SAAA,CAAC;;IAEe,qCAAqC;;IAEtD,KAA0B,EAC1B,WAA6C,EAC7C,WAMQ,EAAA;AAER,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,qCAAqC,CAC9D,KAAK,EACL,WAAW,EACX,WAAW,CACZ;QACD,YAAY,CAAC,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;AAC1D,QAAA,OAAO,YAAY;;AAEtB;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm.mjs","sources":["../../../../src/llm/anthropic/llm.ts"],"sourcesContent":["import { AIMessageChunk } from '@langchain/core/messages';\nimport { ChatAnthropicMessages } from '@langchain/anthropic';\nimport { ChatGenerationChunk } from '@langchain/core/outputs';\nimport type { BaseChatModelParams } from '@langchain/core/language_models/chat_models';\nimport type { BaseMessage, MessageContentComplex } from '@langchain/core/messages';\nimport type { CallbackManagerForLLMRun } from '@langchain/core/callbacks/manager';\nimport type { AnthropicInput } from '@langchain/anthropic';\nimport type { AnthropicMessageCreateParams, AnthropicStreamingMessageCreateParams, AnthropicStreamUsage, AnthropicMessageStartEvent, AnthropicMessageDeltaEvent } from '@/llm/anthropic/types';\nimport { _makeMessageChunkFromAnthropicEvent } from './utils/message_outputs';\nimport { _convertMessagesToAnthropicPayload } from './utils/message_inputs';\nimport { TextStream } from '@/llm/text';\n\nfunction _toolsInParams(\n params: AnthropicMessageCreateParams | AnthropicStreamingMessageCreateParams\n): boolean {\n return !!(params.tools && params.tools.length > 0);\n}\nfunction _documentsInParams(\n params: AnthropicMessageCreateParams | AnthropicStreamingMessageCreateParams\n): boolean {\n for (const message of params.messages ?? []) {\n if (typeof message.content === 'string') {\n continue;\n }\n for (const block of message.content ?? []) {\n if (\n typeof block === 'object' &&\n block != null &&\n block.type === 'document' &&\n typeof block.citations === 'object' &&\n block.citations.enabled\n ) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction _thinkingInParams(\n params: AnthropicMessageCreateParams | AnthropicStreamingMessageCreateParams\n): boolean {\n return !!(params.thinking && params.thinking.type === 'enabled');\n}\n\nfunction extractToken(chunk: AIMessageChunk): [string, 'string' | 'input' | 'content'] | [undefined] {\n if (typeof chunk.content === 'string') {\n return [chunk.content, 'string'];\n } else if (\n Array.isArray(chunk.content) &&\n chunk.content.length >= 1 &&\n 'input' in chunk.content[0]\n ) {\n return typeof chunk.content[0].input === 'string'\n ? [chunk.content[0].input, 'input']\n : [JSON.stringify(chunk.content[0].input), 'input'];\n } else if (\n Array.isArray(chunk.content) &&\n chunk.content.length >= 1 &&\n 'text' in chunk.content[0]\n ) {\n return [chunk.content[0].text, 'content'];\n } else if (\n Array.isArray(chunk.content) &&\n chunk.content.length >= 1 &&\n 'thinking' in chunk.content[0]\n ) {\n return [chunk.content[0].thinking, 'content'];\n }\n return [undefined];\n}\n\nfunction cloneChunk(text: string, tokenType: string, chunk: AIMessageChunk): AIMessageChunk {\n if (tokenType === 'string') {\n return new AIMessageChunk(Object.assign({}, chunk, { content: text }));\n } else if (tokenType === 'input') {\n return chunk;\n }\n const content = chunk.content[0] as MessageContentComplex;\n if (tokenType === 'content' && content.type === 'text') {\n return new AIMessageChunk(Object.assign({}, chunk, { content: [Object.assign({}, content, { text })] }));\n } else if (tokenType === 'content' && content.type === 'text_delta') {\n return new AIMessageChunk(Object.assign({}, chunk, { content: [Object.assign({}, content, { text })] }));\n } else if (tokenType === 'content' && content.type?.startsWith('thinking')) {\n return new AIMessageChunk(Object.assign({}, chunk, { content: [Object.assign({}, content, { thinking: text })] }));\n }\n\n return chunk;\n}\n\nexport type CustomAnthropicInput = AnthropicInput & { _lc_stream_delay?: number } & BaseChatModelParams;\n\nexport class CustomAnthropic extends ChatAnthropicMessages {\n _lc_stream_delay: number;\n private message_start: AnthropicMessageStartEvent | undefined;\n private message_delta: AnthropicMessageDeltaEvent | undefined;\n private tools_in_params?: boolean;\n private emitted_usage?: boolean;\n constructor(fields?: CustomAnthropicInput) {\n super(fields);\n this._lc_stream_delay = fields?._lc_stream_delay ?? 25;\n }\n\n /**\n * Get stream usage as returned by this client's API response.\n * @returns {AnthropicStreamUsage} The stream usage object.\n */\n getStreamUsage(): AnthropicStreamUsage | undefined {\n if (this.emitted_usage === true) {\n return;\n }\n const inputUsage = (this.message_start?.message)?.usage as undefined | AnthropicStreamUsage;\n const outputUsage = this.message_delta?.usage as undefined | Partial<AnthropicStreamUsage>;\n if (!outputUsage) {\n return;\n }\n const totalUsage: AnthropicStreamUsage = {\n input_tokens: inputUsage?.input_tokens ?? 0,\n output_tokens: outputUsage.output_tokens ?? 0,\n total_tokens: (inputUsage?.input_tokens ?? 0) + (outputUsage.output_tokens ?? 0),\n };\n\n if (inputUsage?.cache_creation_input_tokens != null || inputUsage?.cache_read_input_tokens != null) {\n totalUsage.input_token_details = {\n cache_creation: inputUsage.cache_creation_input_tokens ?? 0,\n cache_read: inputUsage.cache_read_input_tokens ?? 0,\n };\n }\n\n this.emitted_usage = true;\n return totalUsage;\n }\n\n resetTokenEvents(): void {\n this.message_start = undefined;\n this.message_delta = undefined;\n this.emitted_usage = undefined;\n this.tools_in_params = undefined;\n }\n\n private createGenerationChunk({\n token,\n chunk,\n usageMetadata,\n shouldStreamUsage,\n }: {\n token?: string,\n chunk: AIMessageChunk,\n shouldStreamUsage: boolean\n usageMetadata?: AnthropicStreamUsage,\n }): ChatGenerationChunk {\n const usage_metadata = shouldStreamUsage ? usageMetadata ?? chunk.usage_metadata : undefined;\n return new ChatGenerationChunk({\n message: new AIMessageChunk({\n // Just yield chunk as it is and tool_use will be concat by BaseChatModel._generateUncached().\n content: chunk.content,\n additional_kwargs: chunk.additional_kwargs,\n tool_call_chunks: chunk.tool_call_chunks,\n response_metadata: chunk.response_metadata,\n usage_metadata,\n id: chunk.id,\n }),\n text: token ?? '',\n });\n }\n\n async *_streamResponseChunks(\n messages: BaseMessage[],\n options: this['ParsedCallOptions'],\n runManager?: CallbackManagerForLLMRun\n ): AsyncGenerator<ChatGenerationChunk> {\n const params = this.invocationParams(options);\n const formattedMessages = _convertMessagesToAnthropicPayload(messages);\n const payload = {\n ...params,\n ...formattedMessages,\n stream: true,\n } as const;\n const coerceContentToString =\n !_toolsInParams(payload) &&\n !_documentsInParams(payload) &&\n !_thinkingInParams(payload);\n\n const stream = await this.createStreamWithRetry(\n {\n ...params,\n ...formattedMessages,\n stream: true,\n },\n {\n headers: options.headers,\n }\n );\n\n const shouldStreamUsage = this.streamUsage ?? options.streamUsage;\n\n for await (const data of stream) {\n if (options.signal?.aborted === true) {\n stream.controller.abort();\n throw new Error('AbortError: User aborted the request.');\n }\n\n if (data.type === 'message_start') {\n this.message_start = data as AnthropicMessageStartEvent;\n } else if (data.type === 'message_delta') {\n this.message_delta = data as AnthropicMessageDeltaEvent;\n }\n\n let usageMetadata: AnthropicStreamUsage | undefined;\n if (this.tools_in_params !== true && this.emitted_usage !== true) {\n usageMetadata = this.getStreamUsage();\n }\n\n const result = _makeMessageChunkFromAnthropicEvent(data, {\n streamUsage: shouldStreamUsage,\n coerceContentToString,\n });\n if (!result) continue;\n\n const { chunk } = result;\n const [token = '', tokenType] = extractToken(chunk);\n\n if (!tokenType || tokenType === 'input' || (token === '' && usageMetadata)) {\n const generationChunk = this.createGenerationChunk({\n token,\n chunk,\n usageMetadata,\n shouldStreamUsage,\n });\n yield generationChunk;\n await runManager?.handleLLMNewToken(\n token,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n continue;\n }\n\n const textStream = new TextStream(token, {\n delay: this._lc_stream_delay,\n firstWordChunk: true,\n minChunkSize: 4,\n maxChunkSize: 8,\n });\n\n const generator = textStream.generateText();\n try {\n let emittedUsage = false;\n for await (const currentToken of generator) {\n const newChunk = cloneChunk(currentToken, tokenType, chunk);\n\n const generationChunk = this.createGenerationChunk({\n token: currentToken,\n chunk: newChunk,\n usageMetadata: emittedUsage ? undefined : usageMetadata,\n shouldStreamUsage,\n });\n\n if (usageMetadata && !emittedUsage) {\n emittedUsage = true;\n }\n yield generationChunk;\n\n await runManager?.handleLLMNewToken(\n token,\n undefined,\n undefined,\n undefined,\n undefined,\n { chunk: generationChunk }\n );\n }\n } finally {\n await generator.return();\n }\n }\n\n this.resetTokenEvents();\n }\n}"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"llm.mjs","sources":["../../../../src/llm/openrouter/llm.ts"],"sourcesContent":["import { ChatOpenAI } from '@langchain/openai';\nimport type { ChatOpenAICallOptions, OpenAIClient } from '@langchain/openai';\nimport type { AIMessageChunk, HumanMessageChunk, SystemMessageChunk, FunctionMessageChunk, ToolMessageChunk, ChatMessageChunk} from '@langchain/core/messages';\nexport interface ChatOpenRouterCallOptions extends ChatOpenAICallOptions {\n include_reasoning?: boolean;\n}\nexport class ChatOpenRouter extends ChatOpenAI<ChatOpenRouterCallOptions> {\n constructor(_fields: Partial<ChatOpenRouterCallOptions>) {\n const { include_reasoning, ...fields } = _fields;\n super({\n ...fields,\n modelKwargs: {\n include_reasoning,\n }\n });\n }\n protected override _convertOpenAIDeltaToBaseMessageChunk(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n delta: Record<string, any>,\n rawResponse: OpenAIClient.ChatCompletionChunk,\n defaultRole?:\n | 'function'\n | 'user'\n | 'system'\n | 'developer'\n | 'assistant'\n | 'tool'\n ): AIMessageChunk | HumanMessageChunk | SystemMessageChunk | FunctionMessageChunk | ToolMessageChunk | ChatMessageChunk {\n const messageChunk = super._convertOpenAIDeltaToBaseMessageChunk(\n delta,\n rawResponse,\n defaultRole\n );\n messageChunk.additional_kwargs.reasoning = delta.reasoning;\n return messageChunk;\n }\n}"],"names":[],"mappings":";;AAMM,MAAO,cAAe,SAAQ,UAAqC,CAAA;AACvE,IAAA,WAAA,CAAY,OAA2C,EAAA;QACrD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO;AAChD,QAAA,KAAK,CAAC;AACJ,YAAA,GAAG,MAAM;AACT,YAAA,WAAW,EAAE;gBACX,iBAAiB;AAClB;AACF,SAAA,CAAC;;IAEe,qCAAqC;;IAEtD,KAA0B,EAC1B,WAA6C,EAC7C,WAMQ,EAAA;AAER,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,qCAAqC,CAC9D,KAAK,EACL,WAAW,EACX,WAAW,CACZ;QACD,YAAY,CAAC,iBAAiB,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;AAC1D,QAAA,OAAO,YAAY;;AAEtB;;;;"}
|
|
File without changes
|