@propio-ai/providers 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/dist/config.d.ts +91 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/configFile.d.ts +22 -0
- package/dist/configFile.d.ts.map +1 -0
- package/dist/configFile.js +33 -0
- package/dist/configFile.js.map +1 -0
- package/dist/configValidation.d.ts +34 -0
- package/dist/configValidation.d.ts.map +1 -0
- package/dist/configValidation.js +185 -0
- package/dist/configValidation.js.map +1 -0
- package/dist/diagnostics.d.ts +29 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +9 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/factory.d.ts +56 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +162 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/interface.d.ts +36 -0
- package/dist/interface.d.ts.map +1 -0
- package/dist/interface.js +2 -0
- package/dist/interface.js.map +1 -0
- package/dist/internal/baseProvider.d.ts +20 -0
- package/dist/internal/baseProvider.d.ts.map +1 -0
- package/dist/internal/baseProvider.js +13 -0
- package/dist/internal/baseProvider.js.map +1 -0
- package/dist/internal/capabilities.d.ts +4 -0
- package/dist/internal/capabilities.d.ts.map +1 -0
- package/dist/internal/capabilities.js +12 -0
- package/dist/internal/capabilities.js.map +1 -0
- package/dist/internal/jsonFile.d.ts +11 -0
- package/dist/internal/jsonFile.d.ts.map +1 -0
- package/dist/internal/jsonFile.js +78 -0
- package/dist/internal/jsonFile.js.map +1 -0
- package/dist/internal/openAiCompatibleProvider.d.ts +44 -0
- package/dist/internal/openAiCompatibleProvider.d.ts.map +1 -0
- package/dist/internal/openAiCompatibleProvider.js +93 -0
- package/dist/internal/openAiCompatibleProvider.js.map +1 -0
- package/dist/internal/openAiStream.d.ts +13 -0
- package/dist/internal/openAiStream.d.ts.map +1 -0
- package/dist/internal/openAiStream.js +85 -0
- package/dist/internal/openAiStream.js.map +1 -0
- package/dist/internal/shared.d.ts +79 -0
- package/dist/internal/shared.d.ts.map +1 -0
- package/dist/internal/shared.js +250 -0
- package/dist/internal/shared.js.map +1 -0
- package/dist/internal/withRetry.d.ts +25 -0
- package/dist/internal/withRetry.d.ts.map +1 -0
- package/dist/internal/withRetry.js +46 -0
- package/dist/internal/withRetry.js.map +1 -0
- package/dist/providers/anthropic.d.ts +32 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +435 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/bedrock.d.ts +67 -0
- package/dist/providers/bedrock.d.ts.map +1 -0
- package/dist/providers/bedrock.js +442 -0
- package/dist/providers/bedrock.js.map +1 -0
- package/dist/providers/cloudflare.d.ts +40 -0
- package/dist/providers/cloudflare.d.ts.map +1 -0
- package/dist/providers/cloudflare.js +115 -0
- package/dist/providers/cloudflare.js.map +1 -0
- package/dist/providers/gemini.d.ts +57 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +359 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/ollama.d.ts +67 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +241 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openrouter.d.ts +76 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +571 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/xai.d.ts +45 -0
- package/dist/providers/xai.d.ts.map +1 -0
- package/dist/providers/xai.js +371 -0
- package/dist/providers/xai.js.map +1 -0
- package/dist/types.d.ts +166 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +60 -0
- package/dist/types.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
2
|
+
import { BaseProvider } from "../internal/baseProvider.js";
|
|
3
|
+
import { ProviderError, ProviderAuthenticationError, ProviderRateLimitError, ProviderModelNotFoundError, ProviderContextLengthError, ProviderCapacityError, } from "../types.js";
|
|
4
|
+
import { withRetry } from "../internal/withRetry.js";
|
|
5
|
+
import { createProviderRetryOptions } from "../internal/shared.js";
|
|
6
|
+
// Default budget and min output headroom when extended thinking is enabled.
|
|
7
|
+
const THINKING_BUDGET_TOKENS = 10000;
|
|
8
|
+
const THINKING_OUTPUT_HEADROOM = 1000;
|
|
9
|
+
const DEFAULT_MAX_TOKENS = 16384;
|
|
10
|
+
export class AnthropicProvider extends BaseProvider {
|
|
11
|
+
constructor(options) {
|
|
12
|
+
const apiKey = options.apiKey ?? process.env.ANTHROPIC_API_KEY;
|
|
13
|
+
if (!apiKey) {
|
|
14
|
+
throw new ProviderAuthenticationError("Anthropic API key not found. Set ANTHROPIC_API_KEY environment variable or provide apiKey in config.");
|
|
15
|
+
}
|
|
16
|
+
super(options);
|
|
17
|
+
this.name = "anthropic";
|
|
18
|
+
this.client = new Anthropic({ apiKey });
|
|
19
|
+
}
|
|
20
|
+
// fallow-ignore-next-line complexity
|
|
21
|
+
async *streamChat(request) {
|
|
22
|
+
try {
|
|
23
|
+
// Concatenate multiple system messages rather than silently dropping all but the first.
|
|
24
|
+
const systemMessages = request.messages.filter((m) => m.role === "system");
|
|
25
|
+
const systemContent = systemMessages.length > 0
|
|
26
|
+
? systemMessages.map((m) => m.content).join("\n\n")
|
|
27
|
+
: undefined;
|
|
28
|
+
const replayThinkingBlocks = request.requestReasoning === true;
|
|
29
|
+
const messages = request.messages
|
|
30
|
+
.filter((m) => m.role !== "system")
|
|
31
|
+
.map((msg) => this.chatMessageToAnthropicMessage(msg, { replayThinkingBlocks }));
|
|
32
|
+
const anthropicTools = request.tools?.map((tool) => this.chatToolToAnthropicTool(tool));
|
|
33
|
+
const thinkingBudget = request.requestReasoning
|
|
34
|
+
? THINKING_BUDGET_TOKENS
|
|
35
|
+
: undefined;
|
|
36
|
+
// max_tokens must exceed thinking.budget_tokens; use 16k floor for normal requests.
|
|
37
|
+
const maxTokens = thinkingBudget
|
|
38
|
+
? Math.max(thinkingBudget + THINKING_OUTPUT_HEADROOM, DEFAULT_MAX_TOKENS)
|
|
39
|
+
: DEFAULT_MAX_TOKENS;
|
|
40
|
+
const createStream = () => this.client.messages.create({
|
|
41
|
+
model: request.model || this.model,
|
|
42
|
+
max_tokens: maxTokens,
|
|
43
|
+
system: systemContent,
|
|
44
|
+
messages: messages,
|
|
45
|
+
tools: anthropicTools,
|
|
46
|
+
thinking: thinkingBudget
|
|
47
|
+
? { type: "enabled", budget_tokens: thinkingBudget }
|
|
48
|
+
: undefined,
|
|
49
|
+
stream: true,
|
|
50
|
+
}, { signal: request.signal });
|
|
51
|
+
const stream = (await withRetry(createStream, this.createRetryOptions(request)));
|
|
52
|
+
const state = {
|
|
53
|
+
toolCalls: [],
|
|
54
|
+
currentToolCall: null,
|
|
55
|
+
currentToolInputJson: "",
|
|
56
|
+
currentToolInputFromStart: null,
|
|
57
|
+
currentThinkingText: "",
|
|
58
|
+
currentThinkingSignature: "",
|
|
59
|
+
inThinkingBlock: false,
|
|
60
|
+
thinkingBlocks: [],
|
|
61
|
+
stopReason: "end_turn",
|
|
62
|
+
rawStopReason: "end_turn",
|
|
63
|
+
};
|
|
64
|
+
for await (const event of stream) {
|
|
65
|
+
if (event.type === "content_block_start") {
|
|
66
|
+
this.handleContentBlockStart(event, state);
|
|
67
|
+
}
|
|
68
|
+
else if (event.type === "content_block_delta") {
|
|
69
|
+
const { text, thinking } = this.handleContentBlockDelta(event, state);
|
|
70
|
+
if (text) {
|
|
71
|
+
yield { type: "assistant_text", delta: text };
|
|
72
|
+
}
|
|
73
|
+
if (thinking) {
|
|
74
|
+
yield { type: "thinking_delta", delta: thinking };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (event.type === "content_block_stop") {
|
|
78
|
+
this.handleContentBlockStop(state);
|
|
79
|
+
}
|
|
80
|
+
else if (event.type === "message_delta") {
|
|
81
|
+
// stop_reason lives on message_delta, not message_stop
|
|
82
|
+
const deltaEvent = event;
|
|
83
|
+
if (deltaEvent.delta.stop_reason) {
|
|
84
|
+
state.rawStopReason = deltaEvent.delta.stop_reason;
|
|
85
|
+
state.stopReason = this.mapStopReason(deltaEvent.delta.stop_reason);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (state.toolCalls.length > 0) {
|
|
90
|
+
// Attach accumulated thinking blocks as reasoningContent for replay in the next turn.
|
|
91
|
+
const reasoningContent = state.thinkingBlocks.length > 0
|
|
92
|
+
? JSON.stringify(state.thinkingBlocks)
|
|
93
|
+
: undefined;
|
|
94
|
+
yield {
|
|
95
|
+
type: "tool_calls",
|
|
96
|
+
toolCalls: state.toolCalls,
|
|
97
|
+
reasoningContent,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
yield {
|
|
101
|
+
type: "terminal",
|
|
102
|
+
stopReason: state.stopReason,
|
|
103
|
+
rawProviderReason: state.rawStopReason,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
throw this.translateError(error);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
handleContentBlockStart(event, state) {
|
|
111
|
+
const block = event.content_block;
|
|
112
|
+
if (block.type === "tool_use") {
|
|
113
|
+
const toolBlock = block;
|
|
114
|
+
state.currentToolCall = {
|
|
115
|
+
id: toolBlock.id,
|
|
116
|
+
function: {
|
|
117
|
+
name: toolBlock.name,
|
|
118
|
+
arguments: {},
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
state.currentToolInputJson = "";
|
|
122
|
+
state.currentToolInputFromStart = this.asToolInputObject(toolBlock.input);
|
|
123
|
+
}
|
|
124
|
+
else if (block.type === "thinking") {
|
|
125
|
+
state.inThinkingBlock = true;
|
|
126
|
+
state.currentThinkingText = "";
|
|
127
|
+
state.currentThinkingSignature = "";
|
|
128
|
+
}
|
|
129
|
+
else if (block.type === "redacted_thinking") {
|
|
130
|
+
state.thinkingBlocks.push({
|
|
131
|
+
type: "redacted_thinking",
|
|
132
|
+
data: block.data,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// fallow-ignore-next-line complexity
|
|
137
|
+
handleContentBlockDelta(event, state) {
|
|
138
|
+
const delta = event.delta;
|
|
139
|
+
if (delta.type === "text_delta") {
|
|
140
|
+
return { text: delta.text || undefined };
|
|
141
|
+
}
|
|
142
|
+
else if (delta.type === "thinking_delta") {
|
|
143
|
+
const text = delta.thinking || "";
|
|
144
|
+
state.currentThinkingText += text;
|
|
145
|
+
return { thinking: text || undefined };
|
|
146
|
+
}
|
|
147
|
+
else if (delta.type === "signature_delta") {
|
|
148
|
+
state.currentThinkingSignature +=
|
|
149
|
+
delta.signature || "";
|
|
150
|
+
}
|
|
151
|
+
else if (delta.type === "input_json_delta") {
|
|
152
|
+
state.currentToolInputJson +=
|
|
153
|
+
delta.partial_json || "";
|
|
154
|
+
}
|
|
155
|
+
return {};
|
|
156
|
+
}
|
|
157
|
+
handleContentBlockStop(state) {
|
|
158
|
+
if (state.inThinkingBlock) {
|
|
159
|
+
// Finalize the thinking block — keep text+signature for replay.
|
|
160
|
+
if (state.currentThinkingText || state.currentThinkingSignature) {
|
|
161
|
+
state.thinkingBlocks.push({
|
|
162
|
+
type: "thinking",
|
|
163
|
+
thinking: state.currentThinkingText,
|
|
164
|
+
signature: state.currentThinkingSignature,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
state.inThinkingBlock = false;
|
|
168
|
+
state.currentThinkingText = "";
|
|
169
|
+
state.currentThinkingSignature = "";
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (!state.currentToolCall?.function) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
state.currentToolCall.function.arguments =
|
|
176
|
+
this.parseToolInputArguments(state);
|
|
177
|
+
state.toolCalls.push(state.currentToolCall);
|
|
178
|
+
state.currentToolCall = null;
|
|
179
|
+
state.currentToolInputJson = "";
|
|
180
|
+
state.currentToolInputFromStart = null;
|
|
181
|
+
}
|
|
182
|
+
parseToolInputArguments(state) {
|
|
183
|
+
const inputJson = state.currentToolInputJson.trim();
|
|
184
|
+
if (inputJson.length === 0) {
|
|
185
|
+
return state.currentToolInputFromStart ?? {};
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
return JSON.parse(inputJson);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
return {
|
|
192
|
+
raw: state.currentToolInputJson,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
asToolInputObject(value) {
|
|
197
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
return value;
|
|
201
|
+
}
|
|
202
|
+
mapStopReason(reason) {
|
|
203
|
+
switch (reason) {
|
|
204
|
+
case "end_turn":
|
|
205
|
+
return "end_turn";
|
|
206
|
+
case "tool_use":
|
|
207
|
+
return "tool_use";
|
|
208
|
+
case "max_tokens":
|
|
209
|
+
return "max_tokens";
|
|
210
|
+
case "stop_sequence":
|
|
211
|
+
return "stop_sequence";
|
|
212
|
+
default:
|
|
213
|
+
return "end_turn";
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
chatMessageToAnthropicMessage(msg, options = {
|
|
217
|
+
replayThinkingBlocks: true,
|
|
218
|
+
}) {
|
|
219
|
+
const content = [];
|
|
220
|
+
if (options.replayThinkingBlocks !== false) {
|
|
221
|
+
this.appendThinkingBlocks(msg, content);
|
|
222
|
+
}
|
|
223
|
+
this.appendTextBlock(msg, content);
|
|
224
|
+
this.appendToolUseBlocks(msg, content);
|
|
225
|
+
this.appendImageBlocks(msg, content);
|
|
226
|
+
this.appendToolResultBlocks(msg, content);
|
|
227
|
+
return {
|
|
228
|
+
role: msg.role === "tool" ? "user" : msg.role,
|
|
229
|
+
content: content.length > 0 ? content : [{ type: "text", text: "." }],
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// Replay thinking blocks on assistant turns preceding tool_result messages.
|
|
233
|
+
// Anthropic requires the prior thinking content to be re-sent in tool-call loops.
|
|
234
|
+
appendThinkingBlocks(msg, content) {
|
|
235
|
+
if (!(msg.role === "assistant" &&
|
|
236
|
+
msg.reasoningContent &&
|
|
237
|
+
msg.toolCalls?.length)) {
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
try {
|
|
241
|
+
const blocks = JSON.parse(msg.reasoningContent);
|
|
242
|
+
for (const block of blocks) {
|
|
243
|
+
if (this.appendRedactedThinkingBlock(block, content))
|
|
244
|
+
continue;
|
|
245
|
+
this.appendThinkingReplayBlock(block, content);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// Malformed reasoningContent — skip rather than crash.
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
appendRedactedThinkingBlock(block, content) {
|
|
253
|
+
if (block.type !== "redacted_thinking" || typeof block.data !== "string") {
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
content.push({ type: "redacted_thinking", data: block.data });
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
appendThinkingReplayBlock(block, content) {
|
|
260
|
+
if (block.type !== undefined && block.type !== "thinking") {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
if (typeof block.thinking !== "string" ||
|
|
264
|
+
typeof block.signature !== "string") {
|
|
265
|
+
return false;
|
|
266
|
+
}
|
|
267
|
+
content.push({
|
|
268
|
+
type: "thinking",
|
|
269
|
+
thinking: block.thinking,
|
|
270
|
+
signature: block.signature,
|
|
271
|
+
});
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
appendTextBlock(msg, content) {
|
|
275
|
+
if (msg.content && msg.role !== "tool") {
|
|
276
|
+
content.push({ type: "text", text: msg.content });
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
appendToolUseBlocks(msg, content) {
|
|
280
|
+
if (!msg.toolCalls?.length)
|
|
281
|
+
return;
|
|
282
|
+
for (const toolCall of msg.toolCalls) {
|
|
283
|
+
if (!toolCall.id) {
|
|
284
|
+
throw new ProviderError(`Anthropic requires a tool call id but tool call "${toolCall.function.name}" has none`);
|
|
285
|
+
}
|
|
286
|
+
content.push({
|
|
287
|
+
type: "tool_use",
|
|
288
|
+
id: toolCall.id,
|
|
289
|
+
name: toolCall.function.name,
|
|
290
|
+
input: toolCall.function.arguments,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
appendImageBlocks(msg, content) {
|
|
295
|
+
if (!msg.images?.length)
|
|
296
|
+
return;
|
|
297
|
+
for (const image of msg.images) {
|
|
298
|
+
const { data, mediaType } = this.resolveImageData(image);
|
|
299
|
+
content.push({
|
|
300
|
+
type: "image",
|
|
301
|
+
source: { type: "base64", media_type: mediaType, data },
|
|
302
|
+
});
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
appendToolResultBlocks(msg, content) {
|
|
306
|
+
if (msg.role !== "tool")
|
|
307
|
+
return;
|
|
308
|
+
if (msg.toolResults?.length) {
|
|
309
|
+
for (const toolResult of msg.toolResults) {
|
|
310
|
+
content.push({
|
|
311
|
+
type: "tool_result",
|
|
312
|
+
tool_use_id: toolResult.toolCallId,
|
|
313
|
+
content: toolResult.content,
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
else if (msg.toolCallId) {
|
|
318
|
+
content.push({
|
|
319
|
+
type: "tool_result",
|
|
320
|
+
tool_use_id: msg.toolCallId,
|
|
321
|
+
content: msg.content,
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
resolveImageData(image) {
|
|
326
|
+
if (typeof image === "string") {
|
|
327
|
+
if (image.startsWith("data:")) {
|
|
328
|
+
const semicolonIndex = image.indexOf(";");
|
|
329
|
+
const commaIndex = image.indexOf(",");
|
|
330
|
+
if (semicolonIndex === -1 || commaIndex === -1) {
|
|
331
|
+
throw new ProviderError("Anthropic image data URLs must include a base64 payload");
|
|
332
|
+
}
|
|
333
|
+
const mediaType = image.slice(5, semicolonIndex);
|
|
334
|
+
const data = image.slice(commaIndex + 1);
|
|
335
|
+
const supportedMediaTypes = new Set([
|
|
336
|
+
"image/jpeg",
|
|
337
|
+
"image/png",
|
|
338
|
+
"image/gif",
|
|
339
|
+
"image/webp",
|
|
340
|
+
]);
|
|
341
|
+
if (supportedMediaTypes.has(mediaType)) {
|
|
342
|
+
return {
|
|
343
|
+
mediaType: mediaType,
|
|
344
|
+
data,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
throw new ProviderError(`Anthropic does not support image data URL media type "${mediaType || "unknown"}"`);
|
|
348
|
+
}
|
|
349
|
+
return { data: image, mediaType: "image/png" };
|
|
350
|
+
}
|
|
351
|
+
// Sniff magic bytes for Uint8Array images
|
|
352
|
+
const mediaType = this.sniffImageMediaType(image);
|
|
353
|
+
return { data: Buffer.from(image).toString("base64"), mediaType };
|
|
354
|
+
}
|
|
355
|
+
sniffImageMediaType(bytes) {
|
|
356
|
+
if (bytes[0] === 0xff && bytes[1] === 0xd8)
|
|
357
|
+
return "image/jpeg";
|
|
358
|
+
if (bytes[0] === 0x89 && bytes[1] === 0x50)
|
|
359
|
+
return "image/png"; // \x89P
|
|
360
|
+
if (bytes[0] === 0x47 && bytes[1] === 0x49)
|
|
361
|
+
return "image/gif"; // GI
|
|
362
|
+
if (bytes[8] === 0x57 && bytes[9] === 0x45)
|
|
363
|
+
return "image/webp"; // RIFF....WEBP
|
|
364
|
+
return "image/png";
|
|
365
|
+
}
|
|
366
|
+
chatToolToAnthropicTool(chatTool) {
|
|
367
|
+
return {
|
|
368
|
+
name: chatTool.function.name,
|
|
369
|
+
description: chatTool.function.description,
|
|
370
|
+
input_schema: chatTool.function
|
|
371
|
+
.parameters,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
createRetryOptions(request) {
|
|
375
|
+
return createProviderRetryOptions({
|
|
376
|
+
request,
|
|
377
|
+
model: this.model,
|
|
378
|
+
provider: this.name,
|
|
379
|
+
retryConfig: this.retryConfig
|
|
380
|
+
? { ...this.retryConfig, baseDelayMs: 500 }
|
|
381
|
+
: undefined,
|
|
382
|
+
isRetryable: (error) => this.isRetryableError(error),
|
|
383
|
+
onDiagnosticEvent: this.onDiagnosticEvent,
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
// fallow-ignore-next-line complexity
|
|
387
|
+
isRetryableError(error) {
|
|
388
|
+
if (error instanceof ProviderCapacityError)
|
|
389
|
+
return true;
|
|
390
|
+
if (error instanceof Anthropic.APIError) {
|
|
391
|
+
return AnthropicProvider.RETRYABLE_STATUSES.has(error.status);
|
|
392
|
+
}
|
|
393
|
+
const name = error?.name ?? "";
|
|
394
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
395
|
+
return (name.includes("timeout") ||
|
|
396
|
+
message.includes("rate limit") ||
|
|
397
|
+
message.includes("throttle") ||
|
|
398
|
+
message.includes("ECONNREFUSED") ||
|
|
399
|
+
message.includes("ENOTFOUND"));
|
|
400
|
+
}
|
|
401
|
+
// fallow-ignore-next-line complexity
|
|
402
|
+
translateError(error) {
|
|
403
|
+
if (error instanceof Anthropic.APIError) {
|
|
404
|
+
const status = error.status;
|
|
405
|
+
if (status === 401 || error.message.includes("authentication")) {
|
|
406
|
+
return new ProviderAuthenticationError(`Anthropic authentication failed: ${error.message}`, error);
|
|
407
|
+
}
|
|
408
|
+
if (status === 429) {
|
|
409
|
+
const retryAfter = error.headers?.["retry-after"];
|
|
410
|
+
const retryAfterSeconds = retryAfter
|
|
411
|
+
? parseInt(retryAfter, 10)
|
|
412
|
+
: undefined;
|
|
413
|
+
return new ProviderRateLimitError(`Anthropic rate limit exceeded: ${error.message}`, retryAfterSeconds, error);
|
|
414
|
+
}
|
|
415
|
+
if (status === 529) {
|
|
416
|
+
return new ProviderCapacityError(`Anthropic overloaded: ${error.message}`, error);
|
|
417
|
+
}
|
|
418
|
+
if (status === 404 || error.message.includes("Model not found")) {
|
|
419
|
+
return new ProviderModelNotFoundError(this.model, `Anthropic model not found: ${error.message}`, error);
|
|
420
|
+
}
|
|
421
|
+
if (status === 400 && error.message.includes("context length")) {
|
|
422
|
+
return new ProviderContextLengthError(`Anthropic context length exceeded: ${error.message}`, error);
|
|
423
|
+
}
|
|
424
|
+
return new ProviderError(`Anthropic API error (${status}): ${error.message}`, error);
|
|
425
|
+
}
|
|
426
|
+
if (error instanceof Error) {
|
|
427
|
+
return new ProviderError(`Anthropic provider error: ${error.message}`, error);
|
|
428
|
+
}
|
|
429
|
+
return new ProviderError(`Anthropic provider error: ${String(error)}`);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
AnthropicProvider.RETRYABLE_STATUSES = new Set([
|
|
433
|
+
429, 500, 502, 503, 504, 529,
|
|
434
|
+
]);
|
|
435
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { BaseProvider, BaseProviderOptions } from "../internal/baseProvider.js";
|
|
2
|
+
import { ChatRequest, ChatStreamEvent } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Bedrock implementation of LLMProvider
|
|
5
|
+
*/
|
|
6
|
+
export declare class BedrockProvider extends BaseProvider {
|
|
7
|
+
readonly name = "bedrock";
|
|
8
|
+
private client;
|
|
9
|
+
constructor(options: BaseProviderOptions & {
|
|
10
|
+
region?: string;
|
|
11
|
+
});
|
|
12
|
+
streamChat(request: ChatRequest): AsyncIterable<ChatStreamEvent>;
|
|
13
|
+
private createRetryOptions;
|
|
14
|
+
private isRetryableError;
|
|
15
|
+
private emitRetryDiagnostic;
|
|
16
|
+
private captureStopReason;
|
|
17
|
+
private createConverseStreamCommand;
|
|
18
|
+
private getStreamFromResponse;
|
|
19
|
+
private handleStreamEvent;
|
|
20
|
+
private handleContentBlockDelta;
|
|
21
|
+
private handleContentBlockStart;
|
|
22
|
+
private handleContentBlockStop;
|
|
23
|
+
/**
|
|
24
|
+
* Check if a message is a system message
|
|
25
|
+
*/
|
|
26
|
+
private isSystemMessage;
|
|
27
|
+
/**
|
|
28
|
+
* Translate ChatMessage to Bedrock Message format
|
|
29
|
+
*/
|
|
30
|
+
private chatMessageToBedrockMessage;
|
|
31
|
+
private appendTextContentBlock;
|
|
32
|
+
private appendToolCallBlocks;
|
|
33
|
+
private appendImageBlocks;
|
|
34
|
+
private appendBase64ImageBlock;
|
|
35
|
+
private appendToolResultBlocks;
|
|
36
|
+
/**
|
|
37
|
+
* Translate Bedrock Message to ChatMessage
|
|
38
|
+
*/
|
|
39
|
+
private bedrockMessageToChatMessage;
|
|
40
|
+
/**
|
|
41
|
+
* Translate ChatTool to Bedrock ToolSpecification
|
|
42
|
+
*/
|
|
43
|
+
private chatToolToBedrockTool;
|
|
44
|
+
/**
|
|
45
|
+
* Clean JSON schema by removing unsupported fields like descriptions from properties
|
|
46
|
+
*/
|
|
47
|
+
private isSchemaObject;
|
|
48
|
+
private cleanSchema;
|
|
49
|
+
private cleanSchemaProperty;
|
|
50
|
+
private copySchemaField;
|
|
51
|
+
/**
|
|
52
|
+
* Map Bedrock stop reason to provider-agnostic format
|
|
53
|
+
*/
|
|
54
|
+
private mapStopReason;
|
|
55
|
+
/**
|
|
56
|
+
* Translate errors to ProviderError types
|
|
57
|
+
*/
|
|
58
|
+
private isContextLengthError;
|
|
59
|
+
private getErrorDetails;
|
|
60
|
+
private translateError;
|
|
61
|
+
private translateContextLengthError;
|
|
62
|
+
private translateAuthenticationError;
|
|
63
|
+
private translateModelNotFoundError;
|
|
64
|
+
private translateRateLimitError;
|
|
65
|
+
private translateServiceError;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=bedrock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../src/providers/bedrock.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAEL,WAAW,EACX,eAAe,EAShB,MAAM,aAAa,CAAC;AAgBrB;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,MAAM,CAAuB;gBAEzB,OAAO,EAAE,mBAAmB,GAAG;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAOvD,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC;IAuCvE,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,2BAA2B;IAqBnC,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,uBAAuB;IAsB/B,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAcnC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,oBAAoB;IAgB5B,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,sBAAsB;IA6B9B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAuCnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAsB7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,mBAAmB;IAmB3B,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,2BAA2B;IAYnC,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,2BAA2B;IAgBnC,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,qBAAqB;CAc9B"}
|