@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.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/dist/config.d.ts +91 -0
  4. package/dist/config.d.ts.map +1 -0
  5. package/dist/config.js +2 -0
  6. package/dist/config.js.map +1 -0
  7. package/dist/configFile.d.ts +22 -0
  8. package/dist/configFile.d.ts.map +1 -0
  9. package/dist/configFile.js +33 -0
  10. package/dist/configFile.js.map +1 -0
  11. package/dist/configValidation.d.ts +34 -0
  12. package/dist/configValidation.d.ts.map +1 -0
  13. package/dist/configValidation.js +185 -0
  14. package/dist/configValidation.js.map +1 -0
  15. package/dist/diagnostics.d.ts +29 -0
  16. package/dist/diagnostics.d.ts.map +1 -0
  17. package/dist/diagnostics.js +9 -0
  18. package/dist/diagnostics.js.map +1 -0
  19. package/dist/factory.d.ts +56 -0
  20. package/dist/factory.d.ts.map +1 -0
  21. package/dist/factory.js +162 -0
  22. package/dist/factory.js.map +1 -0
  23. package/dist/index.d.ts +11 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +9 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/interface.d.ts +36 -0
  28. package/dist/interface.d.ts.map +1 -0
  29. package/dist/interface.js +2 -0
  30. package/dist/interface.js.map +1 -0
  31. package/dist/internal/baseProvider.d.ts +20 -0
  32. package/dist/internal/baseProvider.d.ts.map +1 -0
  33. package/dist/internal/baseProvider.js +13 -0
  34. package/dist/internal/baseProvider.js.map +1 -0
  35. package/dist/internal/capabilities.d.ts +4 -0
  36. package/dist/internal/capabilities.d.ts.map +1 -0
  37. package/dist/internal/capabilities.js +12 -0
  38. package/dist/internal/capabilities.js.map +1 -0
  39. package/dist/internal/jsonFile.d.ts +11 -0
  40. package/dist/internal/jsonFile.d.ts.map +1 -0
  41. package/dist/internal/jsonFile.js +78 -0
  42. package/dist/internal/jsonFile.js.map +1 -0
  43. package/dist/internal/openAiCompatibleProvider.d.ts +44 -0
  44. package/dist/internal/openAiCompatibleProvider.d.ts.map +1 -0
  45. package/dist/internal/openAiCompatibleProvider.js +93 -0
  46. package/dist/internal/openAiCompatibleProvider.js.map +1 -0
  47. package/dist/internal/openAiStream.d.ts +13 -0
  48. package/dist/internal/openAiStream.d.ts.map +1 -0
  49. package/dist/internal/openAiStream.js +85 -0
  50. package/dist/internal/openAiStream.js.map +1 -0
  51. package/dist/internal/shared.d.ts +79 -0
  52. package/dist/internal/shared.d.ts.map +1 -0
  53. package/dist/internal/shared.js +250 -0
  54. package/dist/internal/shared.js.map +1 -0
  55. package/dist/internal/withRetry.d.ts +25 -0
  56. package/dist/internal/withRetry.d.ts.map +1 -0
  57. package/dist/internal/withRetry.js +46 -0
  58. package/dist/internal/withRetry.js.map +1 -0
  59. package/dist/providers/anthropic.d.ts +32 -0
  60. package/dist/providers/anthropic.d.ts.map +1 -0
  61. package/dist/providers/anthropic.js +435 -0
  62. package/dist/providers/anthropic.js.map +1 -0
  63. package/dist/providers/bedrock.d.ts +67 -0
  64. package/dist/providers/bedrock.d.ts.map +1 -0
  65. package/dist/providers/bedrock.js +442 -0
  66. package/dist/providers/bedrock.js.map +1 -0
  67. package/dist/providers/cloudflare.d.ts +40 -0
  68. package/dist/providers/cloudflare.d.ts.map +1 -0
  69. package/dist/providers/cloudflare.js +115 -0
  70. package/dist/providers/cloudflare.js.map +1 -0
  71. package/dist/providers/gemini.d.ts +57 -0
  72. package/dist/providers/gemini.d.ts.map +1 -0
  73. package/dist/providers/gemini.js +359 -0
  74. package/dist/providers/gemini.js.map +1 -0
  75. package/dist/providers/ollama.d.ts +67 -0
  76. package/dist/providers/ollama.d.ts.map +1 -0
  77. package/dist/providers/ollama.js +241 -0
  78. package/dist/providers/ollama.js.map +1 -0
  79. package/dist/providers/openrouter.d.ts +76 -0
  80. package/dist/providers/openrouter.d.ts.map +1 -0
  81. package/dist/providers/openrouter.js +571 -0
  82. package/dist/providers/openrouter.js.map +1 -0
  83. package/dist/providers/xai.d.ts +45 -0
  84. package/dist/providers/xai.d.ts.map +1 -0
  85. package/dist/providers/xai.js +371 -0
  86. package/dist/providers/xai.js.map +1 -0
  87. package/dist/types.d.ts +166 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +60 -0
  90. package/dist/types.js.map +1 -0
  91. package/package.json +70 -0
@@ -0,0 +1,442 @@
1
+ import { BedrockRuntimeClient, ConverseStreamCommand, } from "@aws-sdk/client-bedrock-runtime";
2
+ import { BaseProvider } from "../internal/baseProvider.js";
3
+ import { ProviderError, ProviderAuthenticationError, ProviderRateLimitError, ProviderModelNotFoundError, ProviderContextLengthError, } from "../types.js";
4
+ import { withRetry } from "../internal/withRetry.js";
5
+ /**
6
+ * Bedrock implementation of LLMProvider
7
+ */
8
+ export class BedrockProvider extends BaseProvider {
9
+ constructor(options) {
10
+ super(options);
11
+ this.name = "bedrock";
12
+ this.client = new BedrockRuntimeClient({
13
+ region: options.region ?? "us-east-1",
14
+ });
15
+ }
16
+ async *streamChat(request) {
17
+ try {
18
+ const command = this.createConverseStreamCommand(request);
19
+ const response = await withRetry(() => this.client.send(command, { abortSignal: request.signal }), this.createRetryOptions(request));
20
+ const stream = this.getStreamFromResponse(response);
21
+ if (!stream) {
22
+ throw new Error("No stream output");
23
+ }
24
+ const state = {
25
+ toolCalls: [],
26
+ currentToolCall: null,
27
+ currentToolInput: "",
28
+ stopReason: "end_turn",
29
+ };
30
+ for await (const event of stream) {
31
+ this.captureStopReason(event, state);
32
+ const assistantText = this.handleStreamEvent(event, state);
33
+ if (assistantText) {
34
+ yield { type: "assistant_text", delta: assistantText };
35
+ }
36
+ }
37
+ if (state.toolCalls.length > 0) {
38
+ yield { type: "tool_calls", toolCalls: state.toolCalls };
39
+ }
40
+ // Emit normalized terminal event (Phase 4.5)
41
+ yield { type: "terminal", stopReason: state.stopReason };
42
+ }
43
+ catch (error) {
44
+ throw this.translateError(error);
45
+ }
46
+ }
47
+ createRetryOptions(request) {
48
+ return {
49
+ maxRetries: this.retryConfig?.maxRetries ?? 3,
50
+ baseDelayMs: 500,
51
+ isRetryable: (error) => this.isRetryableError(error),
52
+ consecutive529Limit: this.retryConfig?.consecutive529Limit ?? 3,
53
+ onRetry: (ctx) => this.emitRetryDiagnostic(request, ctx),
54
+ };
55
+ }
56
+ isRetryableError(error) {
57
+ const name = error?.name ?? "";
58
+ const message = error instanceof Error ? error.message : String(error);
59
+ return (name === "ThrottlingException" ||
60
+ name === "ServiceUnavailableException" ||
61
+ name === "InternalServerException" ||
62
+ message.includes("rate limit") ||
63
+ message.includes("throttl"));
64
+ }
65
+ emitRetryDiagnostic(request, ctx) {
66
+ this.onDiagnosticEvent?.({
67
+ type: "provider_retry",
68
+ provider: this.name,
69
+ model: request.model || this.model,
70
+ iteration: request.iteration ?? 0,
71
+ reason: ctx.err instanceof Error ? ctx.err.message : String(ctx.err),
72
+ attemptNumber: ctx.attempt + 1,
73
+ delayMs: ctx.delayMs,
74
+ });
75
+ }
76
+ captureStopReason(event, state) {
77
+ if (event.messageStop?.stopReason) {
78
+ state.stopReason = this.mapStopReason(event.messageStop.stopReason);
79
+ }
80
+ }
81
+ createConverseStreamCommand(request) {
82
+ const systemMessage = request.messages.find((m) => m.role === "system");
83
+ const messages = request.messages
84
+ .filter((m) => m.role !== "system")
85
+ .map((msg) => this.chatMessageToBedrockMessage(msg));
86
+ const toolConfig = request.tools
87
+ ? {
88
+ tools: request.tools.map((tool) => this.chatToolToBedrockTool(tool)),
89
+ }
90
+ : undefined;
91
+ return new ConverseStreamCommand({
92
+ modelId: request.model || this.model,
93
+ messages: messages,
94
+ system: systemMessage ? [{ text: systemMessage.content }] : undefined,
95
+ toolConfig: toolConfig,
96
+ });
97
+ }
98
+ getStreamFromResponse(response) {
99
+ let stream = response.stream || response.output;
100
+ if (!stream &&
101
+ typeof response === "object" &&
102
+ response !== null &&
103
+ Symbol.asyncIterator in response) {
104
+ stream = response;
105
+ }
106
+ return stream;
107
+ }
108
+ handleStreamEvent(event, state) {
109
+ let assistantText;
110
+ if (event.contentBlockDelta) {
111
+ assistantText = this.handleContentBlockDelta(event.contentBlockDelta.delta, state);
112
+ }
113
+ if (event.contentBlockStart) {
114
+ this.handleContentBlockStart(event.contentBlockStart.start, state);
115
+ }
116
+ if (event.contentBlockStop) {
117
+ this.handleContentBlockStop(state);
118
+ }
119
+ return assistantText;
120
+ }
121
+ handleContentBlockDelta(delta, state) {
122
+ if (delta.text) {
123
+ return delta.text;
124
+ }
125
+ if (delta.toolUse) {
126
+ const partialInput = delta.toolUse.input;
127
+ if (partialInput) {
128
+ state.currentToolInput += partialInput;
129
+ }
130
+ }
131
+ return undefined;
132
+ }
133
+ handleContentBlockStart(start, state) {
134
+ const toolUse = start?.toolUse;
135
+ if (!toolUse) {
136
+ return;
137
+ }
138
+ state.currentToolCall = {
139
+ id: toolUse.toolUseId,
140
+ function: {
141
+ name: toolUse.name,
142
+ arguments: {},
143
+ },
144
+ };
145
+ state.currentToolInput = "";
146
+ }
147
+ handleContentBlockStop(state) {
148
+ if (!state.currentToolCall?.function || !state.currentToolInput) {
149
+ return;
150
+ }
151
+ try {
152
+ state.currentToolCall.function.arguments = JSON.parse(state.currentToolInput);
153
+ }
154
+ catch {
155
+ state.currentToolCall.function.arguments = {
156
+ raw: state.currentToolInput,
157
+ };
158
+ }
159
+ state.toolCalls.push(state.currentToolCall);
160
+ state.currentToolCall = null;
161
+ state.currentToolInput = "";
162
+ }
163
+ /**
164
+ * Check if a message is a system message
165
+ */
166
+ isSystemMessage(msg) {
167
+ return msg.role === "system";
168
+ }
169
+ /**
170
+ * Translate ChatMessage to Bedrock Message format
171
+ */
172
+ chatMessageToBedrockMessage(msg) {
173
+ const contentBlocks = [];
174
+ this.appendTextContentBlock(msg, contentBlocks);
175
+ this.appendToolCallBlocks(msg, contentBlocks);
176
+ this.appendImageBlocks(msg, contentBlocks);
177
+ this.appendToolResultBlocks(msg, contentBlocks);
178
+ return {
179
+ role: msg.role === "tool" ? "user" : msg.role,
180
+ content: contentBlocks,
181
+ };
182
+ }
183
+ appendTextContentBlock(msg, contentBlocks) {
184
+ if (msg.content && msg.role !== "tool") {
185
+ contentBlocks.push({
186
+ text: msg.content,
187
+ });
188
+ }
189
+ }
190
+ appendToolCallBlocks(msg, contentBlocks) {
191
+ if (!msg.toolCalls || msg.toolCalls.length === 0) {
192
+ return;
193
+ }
194
+ for (const toolCall of msg.toolCalls) {
195
+ contentBlocks.push({
196
+ toolUse: {
197
+ toolUseId: toolCall.id || `${toolCall.function.name}-${Date.now()}`,
198
+ name: toolCall.function.name,
199
+ input: toolCall.function.arguments,
200
+ },
201
+ });
202
+ }
203
+ }
204
+ appendImageBlocks(msg, contentBlocks) {
205
+ if (!msg.images || msg.images.length === 0) {
206
+ return;
207
+ }
208
+ for (const image of msg.images) {
209
+ if (typeof image === "string") {
210
+ this.appendBase64ImageBlock(image, contentBlocks);
211
+ }
212
+ else {
213
+ contentBlocks.push({
214
+ image: {
215
+ format: "png",
216
+ source: {
217
+ bytes: image,
218
+ },
219
+ },
220
+ });
221
+ }
222
+ }
223
+ }
224
+ appendBase64ImageBlock(image, contentBlocks) {
225
+ if (!image.startsWith("data:")) {
226
+ return;
227
+ }
228
+ const [header, data] = image.split(",");
229
+ const mediaType = header.match(/:(.*?);/)?.[1] || "image/png";
230
+ contentBlocks.push({
231
+ image: {
232
+ format: (mediaType.split("/")[1] || "png"),
233
+ source: {
234
+ bytes: Buffer.from(data, "base64"),
235
+ },
236
+ },
237
+ });
238
+ }
239
+ appendToolResultBlocks(msg, contentBlocks) {
240
+ if (msg.role !== "tool") {
241
+ return;
242
+ }
243
+ if (msg.toolResults && msg.toolResults.length > 0) {
244
+ for (const toolResult of msg.toolResults) {
245
+ contentBlocks.push({
246
+ toolResult: {
247
+ toolUseId: toolResult.toolCallId,
248
+ content: [{ text: toolResult.content }],
249
+ status: "success",
250
+ },
251
+ });
252
+ }
253
+ return;
254
+ }
255
+ if (msg.toolCallId) {
256
+ contentBlocks.push({
257
+ toolResult: {
258
+ toolUseId: msg.toolCallId,
259
+ content: [{ text: msg.content }],
260
+ status: "success",
261
+ },
262
+ });
263
+ }
264
+ }
265
+ /**
266
+ * Translate Bedrock Message to ChatMessage
267
+ */
268
+ bedrockMessageToChatMessage(msg) {
269
+ let content = "";
270
+ const toolCalls = [];
271
+ if (msg.content && Array.isArray(msg.content)) {
272
+ for (const block of msg.content) {
273
+ // Skip undefined or null blocks
274
+ if (!block) {
275
+ continue;
276
+ }
277
+ if (block.text) {
278
+ content += block.text;
279
+ }
280
+ if (block.toolUse) {
281
+ toolCalls.push({
282
+ id: block.toolUse.toolUseId, // Store toolUseId for later reference
283
+ function: {
284
+ name: block.toolUse.name,
285
+ arguments: block.toolUse.input || {},
286
+ },
287
+ });
288
+ }
289
+ }
290
+ }
291
+ const chatMsg = {
292
+ role: "assistant",
293
+ content,
294
+ };
295
+ if (toolCalls.length > 0) {
296
+ chatMsg.toolCalls = toolCalls;
297
+ }
298
+ return chatMsg;
299
+ }
300
+ /**
301
+ * Translate ChatTool to Bedrock ToolSpecification
302
+ */
303
+ chatToolToBedrockTool(chatTool) {
304
+ // Bedrock expects the JSON schema directly in the inputSchema.json field
305
+ // Strip out descriptions from properties as Bedrock may not support them
306
+ const schema = chatTool.function.parameters || {
307
+ type: "object",
308
+ properties: {},
309
+ };
310
+ // Clean the schema by removing descriptions from properties
311
+ const cleanedSchema = this.cleanSchema(schema);
312
+ return {
313
+ toolSpec: {
314
+ name: chatTool.function.name,
315
+ description: chatTool.function.description,
316
+ inputSchema: {
317
+ json: cleanedSchema,
318
+ },
319
+ },
320
+ };
321
+ }
322
+ /**
323
+ * Clean JSON schema by removing unsupported fields like descriptions from properties
324
+ */
325
+ isSchemaObject(schema) {
326
+ return Boolean(schema) && typeof schema === "object";
327
+ }
328
+ cleanSchema(schema) {
329
+ if (!this.isSchemaObject(schema)) {
330
+ return schema;
331
+ }
332
+ const cleaned = { ...schema };
333
+ if (this.isSchemaObject(cleaned.properties)) {
334
+ cleaned.properties = Object.fromEntries(Object.entries(cleaned.properties).map(([key, value]) => [
335
+ key,
336
+ this.cleanSchemaProperty(value),
337
+ ]));
338
+ }
339
+ return cleaned;
340
+ }
341
+ cleanSchemaProperty(value) {
342
+ if (!this.isSchemaObject(value)) {
343
+ return value;
344
+ }
345
+ const cleaned = {};
346
+ this.copySchemaField(cleaned, value, "type");
347
+ this.copySchemaField(cleaned, value, "enum");
348
+ if (value.items) {
349
+ cleaned.items = this.cleanSchema(value.items);
350
+ }
351
+ if (value.properties) {
352
+ cleaned.properties = this.cleanSchema(value.properties);
353
+ }
354
+ return cleaned;
355
+ }
356
+ copySchemaField(target, source, field) {
357
+ if (source[field] !== undefined) {
358
+ target[field] = source[field];
359
+ }
360
+ }
361
+ /**
362
+ * Map Bedrock stop reason to provider-agnostic format
363
+ */
364
+ mapStopReason(bedrockStopReason) {
365
+ switch (bedrockStopReason) {
366
+ case "tool_use":
367
+ return "tool_use";
368
+ case "max_tokens":
369
+ return "max_tokens";
370
+ case "stop_sequence":
371
+ return "stop_sequence";
372
+ default:
373
+ return "end_turn";
374
+ }
375
+ }
376
+ /**
377
+ * Translate errors to ProviderError types
378
+ */
379
+ isContextLengthError(message, name) {
380
+ const lower = message.toLowerCase();
381
+ return (name.includes("ModelInputLimitExceededException") ||
382
+ lower.includes("too many input tokens") ||
383
+ lower.includes("context length") ||
384
+ lower.includes("input is too long") ||
385
+ lower.includes("prompt is too long") ||
386
+ lower.includes("maximum number of tokens") ||
387
+ lower.includes("exceeds the model"));
388
+ }
389
+ getErrorDetails(error) {
390
+ return {
391
+ message: error instanceof Error ? error.message : String(error),
392
+ name: error.name || "",
393
+ ...(error instanceof Error ? { originalError: error } : {}),
394
+ };
395
+ }
396
+ translateError(error) {
397
+ const details = this.getErrorDetails(error);
398
+ return (this.translateContextLengthError(details) ??
399
+ this.translateAuthenticationError(details) ??
400
+ this.translateModelNotFoundError(details) ??
401
+ this.translateRateLimitError(details) ??
402
+ this.translateServiceError(details) ??
403
+ new ProviderError(details.message, details.originalError));
404
+ }
405
+ translateContextLengthError(details) {
406
+ if (this.isContextLengthError(details.message, details.name)) {
407
+ return new ProviderContextLengthError(`Context length exceeded: ${details.message}`, details.originalError);
408
+ }
409
+ return null;
410
+ }
411
+ translateAuthenticationError(details) {
412
+ if (details.name.includes("ValidationException") ||
413
+ details.message.includes("Invalid") ||
414
+ details.message.includes("credentials")) {
415
+ return new ProviderAuthenticationError(`Bedrock authentication failed: ${details.message}`, details.originalError);
416
+ }
417
+ return null;
418
+ }
419
+ translateModelNotFoundError(details) {
420
+ if (details.name.includes("ResourceNotFoundException") ||
421
+ details.message.includes("model not found")) {
422
+ return new ProviderModelNotFoundError(this.model, `Model ${this.model} not found in Bedrock: ${details.message}`, details.originalError);
423
+ }
424
+ return null;
425
+ }
426
+ translateRateLimitError(details) {
427
+ if (details.name.includes("ThrottlingException") ||
428
+ details.message.includes("rate limit") ||
429
+ details.message.includes("throttl")) {
430
+ return new ProviderRateLimitError(`Bedrock rate limited: ${details.message}`, undefined, details.originalError);
431
+ }
432
+ return null;
433
+ }
434
+ translateServiceError(details) {
435
+ if (details.name.includes("ServiceUnavailableException") ||
436
+ details.name.includes("InternalServerException")) {
437
+ return new ProviderError(`Bedrock service error: ${details.message}`, details.originalError);
438
+ }
439
+ return null;
440
+ }
441
+ }
442
+ //# sourceMappingURL=bedrock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock.js","sourceRoot":"","sources":["../../src/providers/bedrock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { ChatMessage, ChatRequest, ChatStreamEvent, ProviderError } from "../types.js";
2
+ import { type OpenAIMessageContentPart } from "../internal/shared.js";
3
+ import { OpenAiCompatibleProvider, type OpenAiCompatibleProviderOptions } from "../internal/openAiCompatibleProvider.js";
4
+ interface OpenAIMessage {
5
+ role: "user" | "assistant" | "system" | "tool";
6
+ content: string | OpenAIMessageContentPart[];
7
+ tool_calls?: Array<{
8
+ id: string;
9
+ type: "function";
10
+ function: {
11
+ name: string;
12
+ arguments: string;
13
+ };
14
+ }>;
15
+ tool_call_id?: string;
16
+ }
17
+ export interface CloudflareProviderOptions extends OpenAiCompatibleProviderOptions {
18
+ accountId?: string;
19
+ }
20
+ export declare function normalizeCloudflareModelId(modelId: string): string;
21
+ /**
22
+ * Cloudflare Workers AI implementation using the OpenAI-compatible chat-completions endpoint.
23
+ */
24
+ export declare class CloudflareProvider extends OpenAiCompatibleProvider {
25
+ readonly name = "cloudflare";
26
+ private readonly model;
27
+ private readonly apiKey;
28
+ private readonly accountId;
29
+ private readonly retryConfig?;
30
+ private readonly onDiagnosticEvent?;
31
+ constructor(options: CloudflareProviderOptions);
32
+ private getChatCompletionsUrl;
33
+ protected chatMessageToOpenAIMessage(msg: ChatMessage): OpenAIMessage;
34
+ private createChatCompletionRequestBody;
35
+ private fetchStream;
36
+ streamChat(request: ChatRequest): AsyncIterable<ChatStreamEvent>;
37
+ protected translateError(error: unknown, response?: Response, _responseBody?: string): ProviderError;
38
+ }
39
+ export {};
40
+ //# sourceMappingURL=cloudflare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/providers/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,WAAW,EACX,eAAe,EAEf,aAAa,EACd,MAAM,aAAa,CAAC;AAErB,OAAO,EAIL,KAAK,wBAAwB,EAE9B,MAAM,uBAAuB,CAAC;AAK/B,OAAO,EACL,wBAAwB,EACxB,KAAK,+BAA+B,EACrC,MAAM,yCAAyC,CAAC;AAKjD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC/C,OAAO,EAAE,MAAM,GAAG,wBAAwB,EAAE,CAAC;IAC7C,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;KAC/C,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,yBAA0B,SAAQ,+BAA+B;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQlE;AAgBD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,wBAAwB;IAC9D,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAG3B;IACF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAA6B;gBAEpD,OAAO,EAAE,yBAAyB;IAwB9C,OAAO,CAAC,qBAAqB;IAI7B,SAAS,CAAC,0BAA0B,CAAC,GAAG,EAAE,WAAW,GAAG,aAAa;IAIrE,OAAO,CAAC,+BAA+B;YAczB,WAAW;IA+BlB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,aAAa,CAAC,eAAe,CAAC;IA4BvE,SAAS,CAAC,cAAc,CACtB,KAAK,EAAE,OAAO,EACd,QAAQ,CAAC,EAAE,QAAQ,EACnB,aAAa,CAAC,EAAE,MAAM,GACrB,aAAa;CAUjB"}
@@ -0,0 +1,115 @@
1
+ import { ProviderAuthenticationError, ProviderError, } from "../types.js";
2
+ import { applyOpenAIMessageCore, buildOpenAIChatCompletionRequestBody, createOpenAIMessageWithImages, } from "../internal/shared.js";
3
+ import { consumeOpenAiChatCompletionsStream, fetchOpenAiCompatibleStreamReader, } from "../internal/openAiStream.js";
4
+ import { OpenAiCompatibleProvider, } from "../internal/openAiCompatibleProvider.js";
5
+ const CLOUDFLARE_CHAT_COMPLETIONS_URL = "https://api.cloudflare.com/client/v4/accounts";
6
+ export function normalizeCloudflareModelId(modelId) {
7
+ if (modelId.startsWith("@")) {
8
+ return modelId;
9
+ }
10
+ if (modelId.startsWith("cf/")) {
11
+ return `@${modelId}`;
12
+ }
13
+ return modelId;
14
+ }
15
+ function resolveCloudflareApiKey(apiKey) {
16
+ return (apiKey ??
17
+ process.env.CLOUDFLARE_API_TOKEN ??
18
+ process.env.CLOUDFLARE_AUTH_TOKEN ??
19
+ process.env.CLOUDFLARE_API_KEY ??
20
+ "");
21
+ }
22
+ function resolveCloudflareAccountId(accountId) {
23
+ return accountId ?? process.env.CLOUDFLARE_ACCOUNT_ID ?? "";
24
+ }
25
+ /**
26
+ * Cloudflare Workers AI implementation using the OpenAI-compatible chat-completions endpoint.
27
+ */
28
+ export class CloudflareProvider extends OpenAiCompatibleProvider {
29
+ constructor(options) {
30
+ super();
31
+ this.name = "cloudflare";
32
+ const apiKey = resolveCloudflareApiKey(options.apiKey);
33
+ const accountId = resolveCloudflareAccountId(options.accountId);
34
+ if (!accountId || accountId.trim() === "") {
35
+ throw new ProviderAuthenticationError("Cloudflare account ID is required. Set CLOUDFLARE_ACCOUNT_ID or pass accountId in options.");
36
+ }
37
+ if (!apiKey || apiKey.trim() === "") {
38
+ throw new ProviderAuthenticationError("Cloudflare API token is required. Set CLOUDFLARE_API_TOKEN, CLOUDFLARE_AUTH_TOKEN, or CLOUDFLARE_API_KEY, or pass apiKey in options.");
39
+ }
40
+ this.model = options.model;
41
+ this.configureCapabilities(options.contextWindowTokens);
42
+ this.apiKey = apiKey;
43
+ this.accountId = accountId;
44
+ this.retryConfig = options.retryConfig;
45
+ this.onDiagnosticEvent = options.onDiagnosticEvent;
46
+ }
47
+ getChatCompletionsUrl() {
48
+ return `${CLOUDFLARE_CHAT_COMPLETIONS_URL}/${this.accountId}/ai/v1/chat/completions`;
49
+ }
50
+ chatMessageToOpenAIMessage(msg) {
51
+ return applyOpenAIMessageCore(createOpenAIMessageWithImages(msg), msg);
52
+ }
53
+ createChatCompletionRequestBody(request) {
54
+ const effectiveModel = normalizeCloudflareModelId(request.model || this.model);
55
+ return buildOpenAIChatCompletionRequestBody({
56
+ request: { ...request, model: effectiveModel },
57
+ model: effectiveModel,
58
+ mapMessage: (msg) => this.chatMessageToOpenAIMessage(msg),
59
+ mapTool: (tool) => this.chatToolToOpenAITool(tool),
60
+ });
61
+ }
62
+ async fetchStream(body, signal) {
63
+ const response = await fetch(this.getChatCompletionsUrl(), {
64
+ method: "POST",
65
+ headers: {
66
+ Authorization: `Bearer ${this.apiKey}`,
67
+ Accept: "text/event-stream, application/json",
68
+ "Content-Type": "application/json",
69
+ },
70
+ body: JSON.stringify(body),
71
+ signal,
72
+ });
73
+ if (!response.ok) {
74
+ let errorBody = "";
75
+ try {
76
+ errorBody = await response.text();
77
+ }
78
+ catch {
79
+ // ignore read failures
80
+ }
81
+ throw this.translateError(new Error(errorBody || `HTTP ${response.status}`), response);
82
+ }
83
+ return response;
84
+ }
85
+ async *streamChat(request) {
86
+ try {
87
+ const body = this.createChatCompletionRequestBody(request);
88
+ const reader = await fetchOpenAiCompatibleStreamReader({
89
+ body,
90
+ signal: request.signal,
91
+ fetchStream: (streamBody, signal) => this.fetchStream(streamBody, signal),
92
+ retryOptions: this.buildRetryOptions(request, this.model, this.retryConfig, this.onDiagnosticEvent),
93
+ translateError: (error) => this.translateError(error),
94
+ });
95
+ const toolCallsByIndex = new Map();
96
+ yield* consumeOpenAiChatCompletionsStream(reader, toolCallsByIndex);
97
+ }
98
+ catch (error) {
99
+ if (error instanceof ProviderError)
100
+ throw error;
101
+ throw this.translateError(error);
102
+ }
103
+ }
104
+ translateError(error, response, _responseBody) {
105
+ return this.translateStandardOpenAiError(error, response, {
106
+ model: this.model,
107
+ authenticationMessage: "Invalid Cloudflare API token",
108
+ rateLimitMessage: "Cloudflare rate limit exceeded",
109
+ serviceErrorMessage: "Cloudflare service error",
110
+ connectionErrorMessage: "Failed to connect to Cloudflare API",
111
+ requestFailedMessage: "Cloudflare request failed",
112
+ });
113
+ }
114
+ }
115
+ //# sourceMappingURL=cloudflare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/providers/cloudflare.ts"],"names":[],"mappings":"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"}