@falai/agent 0.3.10 → 0.3.11

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 (80) hide show
  1. package/README.md +100 -16
  2. package/dist/cjs/core/Agent.d.ts +25 -0
  3. package/dist/cjs/core/Agent.d.ts.map +1 -1
  4. package/dist/cjs/core/Agent.js +130 -0
  5. package/dist/cjs/core/Agent.js.map +1 -1
  6. package/dist/cjs/index.d.ts +2 -0
  7. package/dist/cjs/index.d.ts.map +1 -1
  8. package/dist/cjs/index.js +3 -1
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/providers/AnthropicProvider.d.ts +43 -0
  11. package/dist/cjs/providers/AnthropicProvider.d.ts.map +1 -0
  12. package/dist/cjs/providers/AnthropicProvider.js +328 -0
  13. package/dist/cjs/providers/AnthropicProvider.js.map +1 -0
  14. package/dist/cjs/providers/GeminiProvider.d.ts +4 -1
  15. package/dist/cjs/providers/GeminiProvider.d.ts.map +1 -1
  16. package/dist/cjs/providers/GeminiProvider.js +96 -0
  17. package/dist/cjs/providers/GeminiProvider.js.map +1 -1
  18. package/dist/cjs/providers/OpenAIProvider.d.ts +4 -1
  19. package/dist/cjs/providers/OpenAIProvider.d.ts.map +1 -1
  20. package/dist/cjs/providers/OpenAIProvider.js +115 -0
  21. package/dist/cjs/providers/OpenAIProvider.js.map +1 -1
  22. package/dist/cjs/providers/OpenRouterProvider.d.ts +4 -1
  23. package/dist/cjs/providers/OpenRouterProvider.d.ts.map +1 -1
  24. package/dist/cjs/providers/OpenRouterProvider.js +115 -0
  25. package/dist/cjs/providers/OpenRouterProvider.js.map +1 -1
  26. package/dist/cjs/providers/index.d.ts +13 -0
  27. package/dist/cjs/providers/index.d.ts.map +1 -0
  28. package/dist/cjs/providers/index.js +16 -0
  29. package/dist/cjs/providers/index.js.map +1 -0
  30. package/dist/cjs/types/ai.d.ts +28 -0
  31. package/dist/cjs/types/ai.d.ts.map +1 -1
  32. package/dist/core/Agent.d.ts +25 -0
  33. package/dist/core/Agent.d.ts.map +1 -1
  34. package/dist/core/Agent.js +130 -0
  35. package/dist/core/Agent.js.map +1 -1
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +1 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/providers/AnthropicProvider.d.ts +43 -0
  41. package/dist/providers/AnthropicProvider.d.ts.map +1 -0
  42. package/dist/providers/AnthropicProvider.js +321 -0
  43. package/dist/providers/AnthropicProvider.js.map +1 -0
  44. package/dist/providers/GeminiProvider.d.ts +4 -1
  45. package/dist/providers/GeminiProvider.d.ts.map +1 -1
  46. package/dist/providers/GeminiProvider.js +96 -0
  47. package/dist/providers/GeminiProvider.js.map +1 -1
  48. package/dist/providers/OpenAIProvider.d.ts +4 -1
  49. package/dist/providers/OpenAIProvider.d.ts.map +1 -1
  50. package/dist/providers/OpenAIProvider.js +115 -0
  51. package/dist/providers/OpenAIProvider.js.map +1 -1
  52. package/dist/providers/OpenRouterProvider.d.ts +4 -1
  53. package/dist/providers/OpenRouterProvider.d.ts.map +1 -1
  54. package/dist/providers/OpenRouterProvider.js +115 -0
  55. package/dist/providers/OpenRouterProvider.js.map +1 -1
  56. package/dist/providers/index.d.ts +13 -0
  57. package/dist/providers/index.d.ts.map +1 -0
  58. package/dist/providers/index.js +9 -0
  59. package/dist/providers/index.js.map +1 -0
  60. package/dist/types/ai.d.ts +28 -0
  61. package/dist/types/ai.d.ts.map +1 -1
  62. package/docs/API_REFERENCE.md +260 -2
  63. package/docs/PROVIDERS.md +139 -2
  64. package/examples/business-onboarding.ts +5 -4
  65. package/examples/declarative-agent.ts +1 -1
  66. package/examples/domain-scoping.ts +5 -4
  67. package/examples/healthcare-agent.ts +4 -4
  68. package/examples/openai-agent.ts +6 -4
  69. package/examples/rules-prohibitions.ts +4 -4
  70. package/examples/streaming-agent.ts +371 -0
  71. package/examples/travel-agent.ts +7 -4
  72. package/package.json +2 -1
  73. package/src/core/Agent.ts +174 -0
  74. package/src/index.ts +2 -0
  75. package/src/providers/AnthropicProvider.ts +467 -0
  76. package/src/providers/GeminiProvider.ts +135 -0
  77. package/src/providers/OpenAIProvider.ts +157 -0
  78. package/src/providers/OpenRouterProvider.ts +157 -0
  79. package/src/providers/index.ts +16 -0
  80. package/src/types/ai.ts +32 -0
@@ -0,0 +1,328 @@
1
+ "use strict";
2
+ /**
3
+ * Anthropic (Claude) provider implementation with retry and backup models
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AnthropicProvider = void 0;
10
+ const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
11
+ const retry_1 = require("../utils/retry");
12
+ const DEFAULT_RETRY_CONFIG = {
13
+ timeout: 60000,
14
+ retries: 3,
15
+ };
16
+ /**
17
+ * Type guard to check if error is ErrorWithStatus
18
+ */
19
+ function isErrorWithStatus(error) {
20
+ return (typeof error === "object" &&
21
+ error !== null &&
22
+ ("status" in error || "code" in error || "message" in error));
23
+ }
24
+ /**
25
+ * Safely extract error message
26
+ */
27
+ function getErrorMessage(error) {
28
+ if (error instanceof Error) {
29
+ return error.message;
30
+ }
31
+ if (isErrorWithStatus(error) && error.message) {
32
+ return error.message;
33
+ }
34
+ return String(error);
35
+ }
36
+ /**
37
+ * Determines if an error should trigger backup model usage
38
+ */
39
+ const shouldUseBackupModel = (error) => {
40
+ if (!isErrorWithStatus(error)) {
41
+ return false;
42
+ }
43
+ // Server errors
44
+ if (error.status === 500 || error.status === 503 || error.status === 529) {
45
+ return true;
46
+ }
47
+ // Rate limiting
48
+ if (error.status === 429) {
49
+ return true;
50
+ }
51
+ // Model overloaded or unavailable
52
+ if (error.type === "overloaded_error" ||
53
+ error.type === "api_error" ||
54
+ error.code === "overloaded") {
55
+ return true;
56
+ }
57
+ const message = getErrorMessage(error);
58
+ if (message.includes("overloaded") ||
59
+ message.includes("unavailable") ||
60
+ message.includes("internal error") ||
61
+ message.includes("Internal error")) {
62
+ return true;
63
+ }
64
+ return false;
65
+ };
66
+ /**
67
+ * Anthropic provider implementation with backup models and retry logic
68
+ */
69
+ class AnthropicProvider {
70
+ constructor(options) {
71
+ this.name = "anthropic";
72
+ const { apiKey, model, backupModels = [], config, retryConfig } = options;
73
+ if (!apiKey) {
74
+ throw new Error("Anthropic API key is required");
75
+ }
76
+ if (!model) {
77
+ throw new Error("Model is required. Example: 'claude-sonnet-4-5'");
78
+ }
79
+ this.client = new sdk_1.default({
80
+ apiKey,
81
+ });
82
+ this.primaryModel = model;
83
+ this.backupModels = backupModels;
84
+ this.config = config;
85
+ this.retryConfig = {
86
+ timeout: retryConfig?.timeout || DEFAULT_RETRY_CONFIG.timeout,
87
+ retries: retryConfig?.retries || DEFAULT_RETRY_CONFIG.retries,
88
+ };
89
+ }
90
+ async generateMessage(input) {
91
+ return this.generateWithBackup(input);
92
+ }
93
+ async *generateMessageStream(input) {
94
+ yield* this.generateStreamWithBackup(input);
95
+ }
96
+ async generateWithBackup(input) {
97
+ // Try primary model first
98
+ try {
99
+ return await this.generateWithModel(this.primaryModel, input);
100
+ }
101
+ catch (primaryError) {
102
+ const primaryErrMsg = getErrorMessage(primaryError);
103
+ console.warn(`[ANTHROPIC] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`);
104
+ if (!shouldUseBackupModel(primaryError)) {
105
+ throw primaryError;
106
+ }
107
+ console.log(`[ANTHROPIC] Trying backup models`);
108
+ let lastBackupError = primaryError;
109
+ for (let i = 0; i < this.backupModels.length; i++) {
110
+ const backupModel = this.backupModels[i];
111
+ console.log(`[ANTHROPIC] Trying backup model ${i + 1}/${this.backupModels.length}: ${backupModel}`);
112
+ try {
113
+ const result = await this.generateWithModel(backupModel, input);
114
+ console.log(`[ANTHROPIC] Backup model ${backupModel} succeeded`);
115
+ return result;
116
+ }
117
+ catch (backupError) {
118
+ const backupErrMsg = getErrorMessage(backupError);
119
+ console.warn(`[ANTHROPIC] Backup model ${backupModel} failed: ${backupErrMsg}`);
120
+ lastBackupError = backupError;
121
+ if (!shouldUseBackupModel(backupError) &&
122
+ i < this.backupModels.length - 1) {
123
+ console.log(`[ANTHROPIC] Backup model error doesn't qualify for further attempts`);
124
+ break;
125
+ }
126
+ }
127
+ }
128
+ const lastBackupErrMsg = getErrorMessage(lastBackupError);
129
+ console.error(`[ANTHROPIC] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`);
130
+ throw lastBackupError;
131
+ }
132
+ }
133
+ async generateWithModel(model, input) {
134
+ const operation = async () => {
135
+ // Anthropic requires max_tokens to be specified
136
+ const maxTokens = input.parameters?.maxOutputTokens || 4096;
137
+ const params = {
138
+ model,
139
+ max_tokens: maxTokens,
140
+ messages: [
141
+ {
142
+ role: "user",
143
+ content: input.prompt,
144
+ },
145
+ ],
146
+ ...this.config,
147
+ };
148
+ // Handle JSON mode if requested
149
+ // Note: Anthropic doesn't have a native JSON mode like OpenAI,
150
+ // but we can add it to the system prompt
151
+ if (input.parameters?.jsonMode) {
152
+ // Add system message requesting JSON output
153
+ const systemPrompt = "You must respond with valid JSON only. Do not include any text outside the JSON structure.";
154
+ // Merge with existing system if present
155
+ if (typeof this.config?.system === "string") {
156
+ params.system = `${this.config.system}\n\n${systemPrompt}`;
157
+ }
158
+ else if (Array.isArray(this.config?.system)) {
159
+ params.system = [
160
+ ...this.config.system,
161
+ {
162
+ type: "text",
163
+ text: systemPrompt,
164
+ },
165
+ ];
166
+ }
167
+ else {
168
+ params.system = systemPrompt;
169
+ }
170
+ }
171
+ const response = await this.client.messages.create(params);
172
+ // Extract text from response
173
+ const textContent = response.content.find((block) => block.type === "text");
174
+ const message = textContent?.type === "text" ? textContent.text : "";
175
+ if (!message) {
176
+ throw new Error("No response from Anthropic");
177
+ }
178
+ // Parse JSON response if JSON mode was enabled
179
+ let structured;
180
+ if (input.parameters?.jsonMode) {
181
+ try {
182
+ structured = JSON.parse(message);
183
+ }
184
+ catch (error) {
185
+ console.warn("[ANTHROPIC] Failed to parse JSON response:", error);
186
+ // Fall back to treating the message as plain text
187
+ }
188
+ }
189
+ return {
190
+ message,
191
+ metadata: {
192
+ model: response.model,
193
+ stopReason: response.stop_reason,
194
+ tokensUsed: response.usage.input_tokens + response.usage.output_tokens,
195
+ promptTokens: response.usage.input_tokens,
196
+ completionTokens: response.usage.output_tokens,
197
+ },
198
+ structured,
199
+ };
200
+ };
201
+ return (0, retry_1.withTimeoutAndRetry)(operation, this.retryConfig.timeout, this.retryConfig.retries, `Anthropic ${model}`);
202
+ }
203
+ async *generateStreamWithBackup(input) {
204
+ // Try primary model first
205
+ try {
206
+ yield* this.generateStreamWithModel(this.primaryModel, input);
207
+ }
208
+ catch (primaryError) {
209
+ const primaryErrMsg = getErrorMessage(primaryError);
210
+ console.warn(`[ANTHROPIC] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`);
211
+ if (!shouldUseBackupModel(primaryError)) {
212
+ throw primaryError;
213
+ }
214
+ console.log(`[ANTHROPIC] Trying backup models for streaming`);
215
+ let lastBackupError = primaryError;
216
+ for (let i = 0; i < this.backupModels.length; i++) {
217
+ const backupModel = this.backupModels[i];
218
+ console.log(`[ANTHROPIC] Trying backup model ${i + 1}/${this.backupModels.length}: ${backupModel}`);
219
+ try {
220
+ yield* this.generateStreamWithModel(backupModel, input);
221
+ console.log(`[ANTHROPIC] Backup model ${backupModel} succeeded`);
222
+ return;
223
+ }
224
+ catch (backupError) {
225
+ const backupErrMsg = getErrorMessage(backupError);
226
+ console.warn(`[ANTHROPIC] Backup model ${backupModel} failed: ${backupErrMsg}`);
227
+ lastBackupError = backupError;
228
+ if (!shouldUseBackupModel(backupError) &&
229
+ i < this.backupModels.length - 1) {
230
+ console.log(`[ANTHROPIC] Backup model error doesn't qualify for further attempts`);
231
+ break;
232
+ }
233
+ }
234
+ }
235
+ const lastBackupErrMsg = getErrorMessage(lastBackupError);
236
+ console.error(`[ANTHROPIC] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`);
237
+ throw lastBackupError;
238
+ }
239
+ }
240
+ async *generateStreamWithModel(model, input) {
241
+ // Anthropic requires max_tokens to be specified
242
+ const maxTokens = input.parameters?.maxOutputTokens || 4096;
243
+ const params = {
244
+ model,
245
+ max_tokens: maxTokens,
246
+ messages: [
247
+ {
248
+ role: "user",
249
+ content: input.prompt,
250
+ },
251
+ ],
252
+ stream: true,
253
+ ...this.config,
254
+ };
255
+ // Handle JSON mode if requested
256
+ if (input.parameters?.jsonMode) {
257
+ const systemPrompt = "You must respond with valid JSON only. Do not include any text outside the JSON structure.";
258
+ if (typeof this.config?.system === "string") {
259
+ params.system = `${this.config.system}\n\n${systemPrompt}`;
260
+ }
261
+ else if (Array.isArray(this.config?.system)) {
262
+ params.system = [
263
+ ...this.config.system,
264
+ {
265
+ type: "text",
266
+ text: systemPrompt,
267
+ },
268
+ ];
269
+ }
270
+ else {
271
+ params.system = systemPrompt;
272
+ }
273
+ }
274
+ const stream = this.client.messages.stream(params);
275
+ let accumulated = "";
276
+ let currentModel = model;
277
+ let stopReason;
278
+ let inputTokens = 0;
279
+ let outputTokens = 0;
280
+ for await (const chunk of stream) {
281
+ if (chunk.type === "message_start") {
282
+ currentModel = chunk.message.model;
283
+ inputTokens = chunk.message.usage.input_tokens;
284
+ }
285
+ else if (chunk.type === "content_block_delta") {
286
+ if (chunk.delta.type === "text_delta") {
287
+ const delta = chunk.delta.text;
288
+ accumulated += delta;
289
+ yield {
290
+ delta,
291
+ accumulated,
292
+ done: false,
293
+ };
294
+ }
295
+ }
296
+ else if (chunk.type === "message_delta") {
297
+ stopReason = chunk.delta.stop_reason || undefined;
298
+ outputTokens = chunk.usage.output_tokens;
299
+ }
300
+ }
301
+ // Parse JSON response if JSON mode was enabled
302
+ let structured;
303
+ if (input.parameters?.jsonMode && accumulated) {
304
+ try {
305
+ structured = JSON.parse(accumulated);
306
+ }
307
+ catch (error) {
308
+ console.warn("[ANTHROPIC] Failed to parse JSON response in stream:", error);
309
+ }
310
+ }
311
+ // Yield final chunk
312
+ yield {
313
+ delta: "",
314
+ accumulated,
315
+ done: true,
316
+ metadata: {
317
+ model: currentModel,
318
+ stopReason,
319
+ tokensUsed: inputTokens + outputTokens,
320
+ promptTokens: inputTokens,
321
+ completionTokens: outputTokens,
322
+ },
323
+ structured,
324
+ };
325
+ }
326
+ }
327
+ exports.AnthropicProvider = AnthropicProvider;
328
+ //# sourceMappingURL=AnthropicProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnthropicProvider.js","sourceRoot":"","sources":["../../../src/providers/AnthropicProvider.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,4DAA0C;AAU1C,0CAAqD;AAErD,MAAM,oBAAoB,GAAG;IAC3B,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,CAAC;CACX,CAAC;AAgCF;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,QAAQ,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAW,EAAE;IACvD,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAClC,IACE,KAAK,CAAC,IAAI,KAAK,kBAAkB;QACjC,KAAK,CAAC,IAAI,KAAK,WAAW;QAC1B,KAAK,CAAC,IAAI,KAAK,YAAY,EAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IACE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;GAEG;AACH,MAAa,iBAAiB;IAU5B,YAAY,OAAiC;QAT7B,SAAI,GAAG,WAAW,CAAC;QAUjC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAE1E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,aAAS,CAAC;YAC1B,MAAM;SACP,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG;YACjB,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,oBAAoB,CAAC,OAAO;YAC7D,OAAO,EAAE,WAAW,EAAE,OAAO,IAAI,oBAAoB,CAAC,OAAO;SAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,KAAqC;QAErC,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,CAAC,qBAAqB,CAC1B,KAAqC;QAErC,KAAK,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,KAAqC;QAErC,0BAA0B;QAC1B,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,YAAqB,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CACV,6BAA6B,IAAI,CAAC,YAAY,YAAY,aAAa,EAAE,CAC1E,CAAC;YAEF,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,MAAM,YAAY,CAAC;YACrB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;YAEhD,IAAI,eAAe,GAAY,YAAY,CAAC;YAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CACT,mCAAmC,CAAC,GAAG,CAAC,IACtC,IAAI,CAAC,YAAY,CAAC,MACpB,KAAK,WAAW,EAAE,CACnB,CAAC;gBAEF,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBAChE,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,YAAY,CAAC,CAAC;oBACjE,OAAO,MAAM,CAAC;gBAChB,CAAC;gBAAC,OAAO,WAAoB,EAAE,CAAC;oBAC9B,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;oBAClD,OAAO,CAAC,IAAI,CACV,4BAA4B,WAAW,YAAY,YAAY,EAAE,CAClE,CAAC;oBACF,eAAe,GAAG,WAAW,CAAC;oBAE9B,IACE,CAAC,oBAAoB,CAAC,WAAW,CAAC;wBAClC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;wBACD,OAAO,CAAC,GAAG,CACT,qEAAqE,CACtE,CAAC;wBACF,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;YAC1D,OAAO,CAAC,KAAK,CACX,2CAA2C,aAAa,kBAAkB,gBAAgB,EAAE,CAC7F,CAAC;YACF,MAAM,eAAe,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,KAAa,EACb,KAAqC;QAErC,MAAM,SAAS,GAAG,KAAK,IAAoC,EAAE;YAC3D,gDAAgD;YAChD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,eAAe,IAAI,IAAI,CAAC;YAE5D,MAAM,MAAM,GAAoC;gBAC9C,KAAK;gBACL,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE;oBACR;wBACE,IAAI,EAAE,MAAM;wBACZ,OAAO,EAAE,KAAK,CAAC,MAAM;qBACtB;iBACF;gBACD,GAAG,IAAI,CAAC,MAAM;aACf,CAAC;YAEF,gCAAgC;YAChC,+DAA+D;YAC/D,yCAAyC;YACzC,IAAI,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;gBAC/B,4CAA4C;gBAC5C,MAAM,YAAY,GAChB,4FAA4F,CAAC;gBAE/F,wCAAwC;gBACxC,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC5C,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,OAAO,YAAY,EAAE,CAAC;gBAC7D,CAAC;qBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;oBAC9C,MAAM,CAAC,MAAM,GAAG;wBACd,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;wBACrB;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,YAAY;yBACnB;qBACF,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAE3D,6BAA6B;YAC7B,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CACjC,CAAC;YACF,MAAM,OAAO,GAAG,WAAW,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAErE,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAChD,CAAC;YAED,+CAA+C;YAC/C,IAAI,UAA+C,CAAC;YACpD,IAAI,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;gBAC9D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;oBAClE,kDAAkD;gBACpD,CAAC;YACH,CAAC;YAED,OAAO;gBACL,OAAO;gBACP,QAAQ,EAAE;oBACR,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACrB,UAAU,EAAE,QAAQ,CAAC,WAAW;oBAChC,UAAU,EACR,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa;oBAC5D,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;oBACzC,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;iBAC/C;gBACD,UAAU;aACX,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,IAAA,2BAAmB,EACxB,SAAS,EACT,IAAI,CAAC,WAAW,CAAC,OAAO,EACxB,IAAI,CAAC,WAAW,CAAC,OAAO,EACxB,aAAa,KAAK,EAAE,CACrB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,CAAC,wBAAwB,CACrC,KAAqC;QAErC,0BAA0B;QAC1B,IAAI,CAAC;YACH,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,YAAqB,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CACV,6BAA6B,IAAI,CAAC,YAAY,YAAY,aAAa,EAAE,CAC1E,CAAC;YAEF,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAAC;gBACxC,MAAM,YAAY,CAAC;YACrB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;YAE9D,IAAI,eAAe,GAAY,YAAY,CAAC;YAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CACT,mCAAmC,CAAC,GAAG,CAAC,IACtC,IAAI,CAAC,YAAY,CAAC,MACpB,KAAK,WAAW,EAAE,CACnB,CAAC;gBAEF,IAAI,CAAC;oBACH,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,4BAA4B,WAAW,YAAY,CAAC,CAAC;oBACjE,OAAO;gBACT,CAAC;gBAAC,OAAO,WAAoB,EAAE,CAAC;oBAC9B,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;oBAClD,OAAO,CAAC,IAAI,CACV,4BAA4B,WAAW,YAAY,YAAY,EAAE,CAClE,CAAC;oBACF,eAAe,GAAG,WAAW,CAAC;oBAE9B,IACE,CAAC,oBAAoB,CAAC,WAAW,CAAC;wBAClC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAChC,CAAC;wBACD,OAAO,CAAC,GAAG,CACT,qEAAqE,CACtE,CAAC;wBACF,MAAM;oBACR,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,gBAAgB,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC;YAC1D,OAAO,CAAC,KAAK,CACX,2CAA2C,aAAa,kBAAkB,gBAAgB,EAAE,CAC7F,CAAC;YACF,MAAM,eAAe,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,CAAC,uBAAuB,CACpC,KAAa,EACb,KAAqC;QAErC,gDAAgD;QAChD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,eAAe,IAAI,IAAI,CAAC;QAE5D,MAAM,MAAM,GAAG;YACb,KAAK;YACL,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE,KAAK,CAAC,MAAM;iBACtB;aACF;YACD,MAAM,EAAE,IAAI;YACZ,GAAG,IAAI,CAAC,MAAM;SACf,CAAC;QAEF,gCAAgC;QAChC,IAAI,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC/B,MAAM,YAAY,GAChB,4FAA4F,CAAC;YAE/F,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC5C,MAAM,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,OAAO,YAAY,EAAE,CAAC;YAC7D,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC9C,MAAM,CAAC,MAAM,GAAG;oBACd,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;oBACrB;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,YAAY;qBACnB;iBACF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEnD,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,YAAY,GAAG,KAAK,CAAC;QACzB,IAAI,UAA8B,CAAC;QACnC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACnC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACnC,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;YACjD,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;gBAChD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC/B,WAAW,IAAI,KAAK,CAAC;oBACrB,MAAM;wBACJ,KAAK;wBACL,WAAW;wBACX,IAAI,EAAE,KAAK;qBACZ,CAAC;gBACJ,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC1C,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,SAAS,CAAC;gBAClD,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC;YAC3C,CAAC;QACH,CAAC;QAED,+CAA+C;QAC/C,IAAI,UAA+C,CAAC;QACpD,IAAI,KAAK,CAAC,UAAU,EAAE,QAAQ,IAAI,WAAW,EAAE,CAAC;YAC9C,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAA4B,CAAC;YAClE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,sDAAsD,EACtD,KAAK,CACN,CAAC;YACJ,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM;YACJ,KAAK,EAAE,EAAE;YACT,WAAW;YACX,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE;gBACR,KAAK,EAAE,YAAY;gBACnB,UAAU;gBACV,UAAU,EAAE,WAAW,GAAG,YAAY;gBACtC,YAAY,EAAE,WAAW;gBACzB,gBAAgB,EAAE,YAAY;aAC/B;YACD,UAAU;SACX,CAAC;IACJ,CAAC;CACF;AA5VD,8CA4VC"}
@@ -2,7 +2,7 @@
2
2
  * Google Gemini AI provider implementation with retry and backup models
3
3
  */
4
4
  import type { GenerateContentConfig } from "@google/genai";
5
- import type { AiProvider, GenerateMessageInput, GenerateMessageOutput } from "../types/ai";
5
+ import type { AiProvider, GenerateMessageInput, GenerateMessageOutput, GenerateMessageStreamChunk } from "../types/ai";
6
6
  /**
7
7
  * Configuration options for Gemini provider
8
8
  * Uses types from @google/genai package
@@ -34,7 +34,10 @@ export declare class GeminiProvider implements AiProvider {
34
34
  private retryConfig;
35
35
  constructor(options: GeminiProviderOptions);
36
36
  generateMessage<TContext = unknown>(input: GenerateMessageInput<TContext>): Promise<GenerateMessageOutput>;
37
+ generateMessageStream<TContext = unknown>(input: GenerateMessageInput<TContext>): AsyncGenerator<GenerateMessageStreamChunk>;
37
38
  private generateWithBackup;
38
39
  private generateWithModel;
40
+ private generateStreamWithBackup;
41
+ private generateStreamWithModel;
39
42
  }
40
43
  //# sourceMappingURL=GeminiProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeminiProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAEV,qBAAqB,EAEtB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AAQrB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gFAAgF;IAChF,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxC,0BAA0B;IAC1B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AA8CD;;GAEG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,SAAgB,IAAI,YAAY;IAChC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAiC;IAChD,OAAO,CAAC,WAAW,CAAuC;gBAE9C,OAAO,EAAE,qBAAqB;IAqBpC,eAAe,CAAC,QAAQ,GAAG,OAAO,EACtC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC;YAInB,kBAAkB;YA2DlB,iBAAiB;CAqDhC"}
1
+ {"version":3,"file":"GeminiProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAEV,qBAAqB,EAEtB,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAE3B,MAAM,aAAa,CAAC;AAQrB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gFAAgF;IAChF,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACxC,0BAA0B;IAC1B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AA8CD;;GAEG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,SAAgB,IAAI,YAAY;IAChC,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAiC;IAChD,OAAO,CAAC,WAAW,CAAuC;gBAE9C,OAAO,EAAE,qBAAqB;IAqBpC,eAAe,CAAC,QAAQ,GAAG,OAAO,EACtC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC;IAI1B,qBAAqB,CAAC,QAAQ,GAAG,OAAO,EAC7C,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,cAAc,CAAC,0BAA0B,CAAC;YAI/B,kBAAkB;YA2DlB,iBAAiB;YAsDhB,wBAAwB;YA2DxB,uBAAuB;CAoEvC"}
@@ -60,6 +60,9 @@ class GeminiProvider {
60
60
  async generateMessage(input) {
61
61
  return this.generateWithBackup(input);
62
62
  }
63
+ async *generateMessageStream(input) {
64
+ yield* this.generateStreamWithBackup(input);
65
+ }
63
66
  async generateWithBackup(input) {
64
67
  // Try primary model first
65
68
  try {
@@ -137,6 +140,99 @@ class GeminiProvider {
137
140
  };
138
141
  return (0, retry_1.withTimeoutAndRetry)(operation, this.retryConfig.timeout, this.retryConfig.retries, `Gemini ${model}`);
139
142
  }
143
+ async *generateStreamWithBackup(input) {
144
+ // Try primary model first
145
+ try {
146
+ yield* this.generateStreamWithModel(this.primaryModel, input);
147
+ }
148
+ catch (primaryError) {
149
+ const primaryErrMsg = String(primaryError);
150
+ console.warn(`[GEMINI] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`);
151
+ if (!shouldUseBackupModel(primaryError)) {
152
+ throw primaryError;
153
+ }
154
+ console.log(`[GEMINI] Trying backup models for streaming`);
155
+ let lastBackupError = primaryError;
156
+ for (let i = 0; i < this.backupModels.length; i++) {
157
+ const backupModel = this.backupModels[i];
158
+ console.log(`[GEMINI] Trying backup model ${i + 1}/${this.backupModels.length}: ${backupModel}`);
159
+ try {
160
+ yield* this.generateStreamWithModel(backupModel, input);
161
+ console.log(`[GEMINI] Backup model ${backupModel} succeeded`);
162
+ return;
163
+ }
164
+ catch (backupError) {
165
+ const backupErrMsg = String(backupError);
166
+ console.warn(`[GEMINI] Backup model ${backupModel} failed: ${backupErrMsg}`);
167
+ lastBackupError = backupError;
168
+ if (!shouldUseBackupModel(backupError) &&
169
+ i < this.backupModels.length - 1) {
170
+ console.log(`[GEMINI] Backup model error doesn't qualify for further attempts`);
171
+ break;
172
+ }
173
+ }
174
+ }
175
+ const lastBackupErrMsg = String(lastBackupError);
176
+ console.error(`[GEMINI] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`);
177
+ throw lastBackupError;
178
+ }
179
+ }
180
+ async *generateStreamWithModel(model, input) {
181
+ // Enable JSON mode if requested
182
+ const configOverride = { ...this.config };
183
+ if (input.parameters?.jsonMode) {
184
+ configOverride.responseMimeType = "application/json";
185
+ }
186
+ const stream = await this.genAI.models.generateContentStream({
187
+ model,
188
+ contents: input.prompt,
189
+ config: configOverride,
190
+ });
191
+ let accumulated = "";
192
+ let promptTokenCount = 0;
193
+ let candidatesTokenCount = 0;
194
+ let totalTokenCount = 0;
195
+ for await (const chunk of stream) {
196
+ const delta = chunk.text || "";
197
+ if (delta) {
198
+ accumulated += delta;
199
+ yield {
200
+ delta,
201
+ accumulated,
202
+ done: false,
203
+ };
204
+ }
205
+ // Update token counts if available
206
+ if (chunk.usageMetadata) {
207
+ promptTokenCount = chunk.usageMetadata.promptTokenCount || 0;
208
+ candidatesTokenCount = chunk.usageMetadata.candidatesTokenCount || 0;
209
+ totalTokenCount = chunk.usageMetadata.totalTokenCount || 0;
210
+ }
211
+ }
212
+ // Parse JSON response if JSON mode was enabled
213
+ let structured;
214
+ if (input.parameters?.jsonMode && accumulated) {
215
+ try {
216
+ structured = JSON.parse(accumulated);
217
+ }
218
+ catch (error) {
219
+ console.warn("[GEMINI] Failed to parse JSON response in stream:", error);
220
+ }
221
+ }
222
+ // Yield final chunk
223
+ yield {
224
+ delta: "",
225
+ accumulated,
226
+ done: true,
227
+ metadata: {
228
+ model,
229
+ tokensUsed: totalTokenCount,
230
+ promptTokens: promptTokenCount,
231
+ completionTokens: candidatesTokenCount,
232
+ },
233
+ structured,
234
+ };
235
+ }
140
236
  }
141
237
  exports.GeminiProvider = GeminiProvider;
142
238
  //# sourceMappingURL=GeminiProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GeminiProvider.js","sourceRoot":"","sources":["../../../src/providers/GeminiProvider.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * OpenAI provider implementation with retry and backup models
3
3
  */
4
4
  import type { ChatCompletionCreateParamsNonStreaming } from "openai/resources/chat/completions";
5
- import type { AiProvider, GenerateMessageInput, GenerateMessageOutput } from "../types/ai";
5
+ import type { AiProvider, GenerateMessageInput, GenerateMessageOutput, GenerateMessageStreamChunk } from "../types/ai";
6
6
  /**
7
7
  * Configuration options for OpenAI provider
8
8
  * Uses types from openai package
@@ -36,7 +36,10 @@ export declare class OpenAIProvider implements AiProvider {
36
36
  private retryConfig;
37
37
  constructor(options: OpenAIProviderOptions);
38
38
  generateMessage<TContext = unknown>(input: GenerateMessageInput<TContext>): Promise<GenerateMessageOutput>;
39
+ generateMessageStream<TContext = unknown>(input: GenerateMessageInput<TContext>): AsyncGenerator<GenerateMessageStreamChunk>;
39
40
  private generateWithBackup;
40
41
  private generateWithModel;
42
+ private generateStreamWithBackup;
43
+ private generateStreamWithModel;
41
44
  }
42
45
  //# sourceMappingURL=OpenAIProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,mCAAmC,CAAC;AAEhG,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AAQrB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,OAAO,CACd,IAAI,CAAC,sCAAsC,EAAE,OAAO,GAAG,UAAU,CAAC,CACnE,CAAC;IACF,0BAA0B;IAC1B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAwED;;GAEG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,SAAgB,IAAI,YAAY;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAC,CAEb;IACF,OAAO,CAAC,WAAW,CAAuC;gBAE9C,OAAO,EAAE,qBAAqB;IAiCpC,eAAe,CAAC,QAAQ,GAAG,OAAO,EACtC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC;YAInB,kBAAkB;YA2DlB,iBAAiB;CAkIhC"}
1
+ {"version":3,"file":"OpenAIProvider.d.ts","sourceRoot":"","sources":["../../../src/providers/OpenAIProvider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,mCAAmC,CAAC;AAEhG,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAE3B,MAAM,aAAa,CAAC;AAQrB;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,2FAA2F;IAC3F,MAAM,CAAC,EAAE,OAAO,CACd,IAAI,CAAC,sCAAsC,EAAE,OAAO,GAAG,UAAU,CAAC,CACnE,CAAC;IACF,0BAA0B;IAC1B,WAAW,CAAC,EAAE;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAwED;;GAEG;AACH,qBAAa,cAAe,YAAW,UAAU;IAC/C,SAAgB,IAAI,YAAY;IAChC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAW;IAC/B,OAAO,CAAC,MAAM,CAAC,CAEb;IACF,OAAO,CAAC,WAAW,CAAuC;gBAE9C,OAAO,EAAE,qBAAqB;IAiCpC,eAAe,CAAC,QAAQ,GAAG,OAAO,EACtC,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC;IAI1B,qBAAqB,CAAC,QAAQ,GAAG,OAAO,EAC7C,KAAK,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACpC,cAAc,CAAC,0BAA0B,CAAC;YAI/B,kBAAkB;YA2DlB,iBAAiB;YAmIhB,wBAAwB;YA2DxB,uBAAuB;CA0FvC"}
@@ -90,6 +90,9 @@ class OpenAIProvider {
90
90
  async generateMessage(input) {
91
91
  return this.generateWithBackup(input);
92
92
  }
93
+ async *generateMessageStream(input) {
94
+ yield* this.generateStreamWithBackup(input);
95
+ }
93
96
  async generateWithBackup(input) {
94
97
  // Try primary model first
95
98
  try {
@@ -237,6 +240,118 @@ class OpenAIProvider {
237
240
  };
238
241
  return (0, retry_1.withTimeoutAndRetry)(operation, this.retryConfig.timeout, this.retryConfig.retries, `OpenAI ${model}`);
239
242
  }
243
+ async *generateStreamWithBackup(input) {
244
+ // Try primary model first
245
+ try {
246
+ yield* this.generateStreamWithModel(this.primaryModel, input);
247
+ }
248
+ catch (primaryError) {
249
+ const primaryErrMsg = getErrorMessage(primaryError);
250
+ console.warn(`[OPENAI] Primary model ${this.primaryModel} failed: ${primaryErrMsg}`);
251
+ if (!shouldUseBackupModel(primaryError)) {
252
+ throw primaryError;
253
+ }
254
+ console.log(`[OPENAI] Trying backup models for streaming`);
255
+ let lastBackupError = primaryError;
256
+ for (let i = 0; i < this.backupModels.length; i++) {
257
+ const backupModel = this.backupModels[i];
258
+ console.log(`[OPENAI] Trying backup model ${i + 1}/${this.backupModels.length}: ${backupModel}`);
259
+ try {
260
+ yield* this.generateStreamWithModel(backupModel, input);
261
+ console.log(`[OPENAI] Backup model ${backupModel} succeeded`);
262
+ return;
263
+ }
264
+ catch (backupError) {
265
+ const backupErrMsg = getErrorMessage(backupError);
266
+ console.warn(`[OPENAI] Backup model ${backupModel} failed: ${backupErrMsg}`);
267
+ lastBackupError = backupError;
268
+ if (!shouldUseBackupModel(backupError) &&
269
+ i < this.backupModels.length - 1) {
270
+ console.log(`[OPENAI] Backup model error doesn't qualify for further attempts`);
271
+ break;
272
+ }
273
+ }
274
+ }
275
+ const lastBackupErrMsg = getErrorMessage(lastBackupError);
276
+ console.error(`[OPENAI] All models failed. Primary: ${primaryErrMsg}, Last backup: ${lastBackupErrMsg}`);
277
+ throw lastBackupError;
278
+ }
279
+ }
280
+ async *generateStreamWithModel(model, input) {
281
+ const params = {
282
+ ...this.config,
283
+ model,
284
+ messages: [
285
+ {
286
+ role: "user",
287
+ content: input.prompt,
288
+ },
289
+ ],
290
+ stream: true,
291
+ };
292
+ // Override with input parameters if provided
293
+ if (input.parameters?.maxOutputTokens !== undefined) {
294
+ params.max_tokens = input.parameters.maxOutputTokens;
295
+ }
296
+ // Use JSON mode if requested
297
+ // Note: OpenAI streaming doesn't support the responses.parse API,
298
+ // so we use response_format with JSON mode instead
299
+ if (input.parameters?.jsonMode) {
300
+ params.response_format = { type: "json_object" };
301
+ }
302
+ const stream = await this.client.chat.completions.create(params);
303
+ let accumulated = "";
304
+ let currentModel = model;
305
+ let finishReason;
306
+ let promptTokens;
307
+ let completionTokens;
308
+ let totalTokens;
309
+ for await (const chunk of stream) {
310
+ currentModel = chunk.model;
311
+ const delta = chunk.choices[0]?.delta?.content || "";
312
+ if (delta) {
313
+ accumulated += delta;
314
+ yield {
315
+ delta,
316
+ accumulated,
317
+ done: false,
318
+ };
319
+ }
320
+ if (chunk.choices[0]?.finish_reason) {
321
+ finishReason = chunk.choices[0].finish_reason;
322
+ }
323
+ // OpenAI includes usage in the final chunk for some models
324
+ if (chunk.usage) {
325
+ promptTokens = chunk.usage.prompt_tokens;
326
+ completionTokens = chunk.usage.completion_tokens;
327
+ totalTokens = chunk.usage.total_tokens;
328
+ }
329
+ }
330
+ // Parse JSON response if JSON mode was enabled
331
+ let structured;
332
+ if (input.parameters?.jsonMode && accumulated) {
333
+ try {
334
+ structured = JSON.parse(accumulated);
335
+ }
336
+ catch (error) {
337
+ console.warn("[OPENAI] Failed to parse JSON response in stream:", error);
338
+ }
339
+ }
340
+ // Yield final chunk
341
+ yield {
342
+ delta: "",
343
+ accumulated,
344
+ done: true,
345
+ metadata: {
346
+ model: currentModel,
347
+ finishReason,
348
+ tokensUsed: totalTokens,
349
+ promptTokens,
350
+ completionTokens,
351
+ },
352
+ structured,
353
+ };
354
+ }
240
355
  }
241
356
  exports.OpenAIProvider = OpenAIProvider;
242
357
  //# sourceMappingURL=OpenAIProvider.js.map