ai-functions 2.0.2 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/.turbo/turbo-build.log +4 -5
  2. package/CHANGELOG.md +38 -0
  3. package/LICENSE +21 -0
  4. package/README.md +361 -159
  5. package/dist/ai-promise.d.ts +47 -0
  6. package/dist/ai-promise.d.ts.map +1 -1
  7. package/dist/ai-promise.js +291 -3
  8. package/dist/ai-promise.js.map +1 -1
  9. package/dist/ai.d.ts +17 -18
  10. package/dist/ai.d.ts.map +1 -1
  11. package/dist/ai.js +93 -39
  12. package/dist/ai.js.map +1 -1
  13. package/dist/batch-map.d.ts +46 -4
  14. package/dist/batch-map.d.ts.map +1 -1
  15. package/dist/batch-map.js +35 -2
  16. package/dist/batch-map.js.map +1 -1
  17. package/dist/batch-queue.d.ts +116 -12
  18. package/dist/batch-queue.d.ts.map +1 -1
  19. package/dist/batch-queue.js +47 -2
  20. package/dist/batch-queue.js.map +1 -1
  21. package/dist/budget.d.ts +272 -0
  22. package/dist/budget.d.ts.map +1 -0
  23. package/dist/budget.js +500 -0
  24. package/dist/budget.js.map +1 -0
  25. package/dist/cache.d.ts +272 -0
  26. package/dist/cache.d.ts.map +1 -0
  27. package/dist/cache.js +412 -0
  28. package/dist/cache.js.map +1 -0
  29. package/dist/context.d.ts +32 -1
  30. package/dist/context.d.ts.map +1 -1
  31. package/dist/context.js +16 -1
  32. package/dist/context.js.map +1 -1
  33. package/dist/eval/runner.d.ts +2 -1
  34. package/dist/eval/runner.d.ts.map +1 -1
  35. package/dist/eval/runner.js.map +1 -1
  36. package/dist/generate.d.ts.map +1 -1
  37. package/dist/generate.js +6 -10
  38. package/dist/generate.js.map +1 -1
  39. package/dist/index.d.ts +27 -20
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +72 -42
  42. package/dist/index.js.map +1 -1
  43. package/dist/primitives.d.ts +17 -0
  44. package/dist/primitives.d.ts.map +1 -1
  45. package/dist/primitives.js +19 -1
  46. package/dist/primitives.js.map +1 -1
  47. package/dist/retry.d.ts +303 -0
  48. package/dist/retry.d.ts.map +1 -0
  49. package/dist/retry.js +539 -0
  50. package/dist/retry.js.map +1 -0
  51. package/dist/schema.d.ts.map +1 -1
  52. package/dist/schema.js +1 -9
  53. package/dist/schema.js.map +1 -1
  54. package/dist/tool-orchestration.d.ts +391 -0
  55. package/dist/tool-orchestration.d.ts.map +1 -0
  56. package/dist/tool-orchestration.js +663 -0
  57. package/dist/tool-orchestration.js.map +1 -0
  58. package/dist/types.d.ts +50 -33
  59. package/dist/types.d.ts.map +1 -1
  60. package/evalite.config.js +14 -0
  61. package/evals/classification.eval.js +97 -0
  62. package/evals/marketing.eval.js +289 -0
  63. package/evals/math.eval.js +83 -0
  64. package/evals/run-evals.js +151 -0
  65. package/evals/structured-output.eval.js +131 -0
  66. package/evals/writing.eval.js +105 -0
  67. package/examples/batch-blog-posts.js +128 -0
  68. package/package.json +26 -26
  69. package/src/ai-promise.ts +359 -3
  70. package/src/ai.ts +155 -110
  71. package/src/batch/anthropic.js +256 -0
  72. package/src/batch/bedrock.js +584 -0
  73. package/src/batch/cloudflare.js +287 -0
  74. package/src/batch/google.js +359 -0
  75. package/src/batch/index.js +30 -0
  76. package/src/batch/memory.js +187 -0
  77. package/src/batch/openai.js +402 -0
  78. package/src/batch-map.ts +46 -4
  79. package/src/batch-queue.ts +116 -12
  80. package/src/budget.ts +727 -0
  81. package/src/cache.ts +653 -0
  82. package/src/context.ts +33 -1
  83. package/src/eval/index.js +7 -0
  84. package/src/eval/models.js +119 -0
  85. package/src/eval/runner.js +147 -0
  86. package/src/eval/runner.ts +3 -2
  87. package/src/generate.ts +7 -12
  88. package/src/index.ts +231 -53
  89. package/src/primitives.ts +19 -1
  90. package/src/retry.ts +776 -0
  91. package/src/schema.ts +1 -10
  92. package/src/tool-orchestration.ts +1008 -0
  93. package/src/types.ts +59 -41
  94. package/test/ai-proxy.test.js +157 -0
  95. package/test/async-iterators.test.js +261 -0
  96. package/test/backward-compat.test.ts +147 -0
  97. package/test/batch-autosubmit-errors.test.ts +598 -0
  98. package/test/batch-background.test.js +352 -0
  99. package/test/batch-blog-posts.test.js +293 -0
  100. package/test/blog-generation.test.js +390 -0
  101. package/test/browse-read.test.js +480 -0
  102. package/test/budget-tracking.test.ts +800 -0
  103. package/test/cache.test.ts +712 -0
  104. package/test/context-isolation.test.ts +687 -0
  105. package/test/core-functions.test.js +490 -0
  106. package/test/decide.test.js +260 -0
  107. package/test/define.test.js +232 -0
  108. package/test/e2e-bedrock-manual.js +136 -0
  109. package/test/e2e-bedrock.test.js +164 -0
  110. package/test/e2e-flex-gateway.js +131 -0
  111. package/test/e2e-flex-manual.js +156 -0
  112. package/test/e2e-flex.test.js +174 -0
  113. package/test/e2e-google-manual.js +150 -0
  114. package/test/e2e-google.test.js +181 -0
  115. package/test/embeddings.test.js +220 -0
  116. package/test/evals/define-function.eval.test.js +309 -0
  117. package/test/evals/deterministic.eval.test.ts +376 -0
  118. package/test/evals/primitives.eval.test.js +360 -0
  119. package/test/function-types.test.js +407 -0
  120. package/test/generate-core.test.js +213 -0
  121. package/test/generate.test.js +143 -0
  122. package/test/generic-order.test.ts +342 -0
  123. package/test/implicit-batch.test.js +326 -0
  124. package/test/json-parse-error-handling.test.ts +463 -0
  125. package/test/retry.test.ts +1016 -0
  126. package/test/schema.test.js +96 -0
  127. package/test/streaming.test.ts +316 -0
  128. package/test/tagged-templates.test.js +240 -0
  129. package/test/tool-orchestration.test.ts +770 -0
  130. package/vitest.config.js +39 -0
package/dist/retry.js ADDED
@@ -0,0 +1,539 @@
1
+ /**
2
+ * Retry and fallback patterns for AI function calls
3
+ *
4
+ * Provides:
5
+ * - Exponential backoff with configurable base delay and multiplier
6
+ * - Jitter to prevent thundering herd (equal, full, decorrelated strategies)
7
+ * - Circuit breaker for fail-fast behavior after repeated failures
8
+ * - Fallback chains for model failover (sonnet -> opus -> gpt-4o)
9
+ * - Error classification for intelligent retry decisions
10
+ * - Partial retry for batch operations
11
+ *
12
+ * @packageDocumentation
13
+ */
14
+ // ============================================================================
15
+ // ERROR TYPES AND CLASSIFICATION
16
+ // ============================================================================
17
+ /**
18
+ * Error categories for retry decision making
19
+ */
20
+ export var ErrorCategory;
21
+ (function (ErrorCategory) {
22
+ /** Network connectivity issues (retryable) */
23
+ ErrorCategory["Network"] = "network";
24
+ /** Rate limiting / quota exceeded (retryable with backoff) */
25
+ ErrorCategory["RateLimit"] = "rate_limit";
26
+ /** Invalid input / bad request (not retryable) */
27
+ ErrorCategory["InvalidInput"] = "invalid_input";
28
+ /** Authentication / authorization errors (not retryable) */
29
+ ErrorCategory["Authentication"] = "authentication";
30
+ /** Server errors (retryable) */
31
+ ErrorCategory["Server"] = "server";
32
+ /** Context length exceeded (not retryable without modification) */
33
+ ErrorCategory["ContextLength"] = "context_length";
34
+ /** Unknown error type */
35
+ ErrorCategory["Unknown"] = "unknown";
36
+ })(ErrorCategory || (ErrorCategory = {}));
37
+ /**
38
+ * Base class for retryable errors
39
+ */
40
+ export class RetryableError extends Error {
41
+ retryable = true;
42
+ category;
43
+ constructor(message, category = ErrorCategory.Unknown) {
44
+ super(message);
45
+ this.name = 'RetryableError';
46
+ this.category = category;
47
+ }
48
+ }
49
+ /**
50
+ * Base class for non-retryable errors
51
+ */
52
+ export class NonRetryableError extends Error {
53
+ retryable = false;
54
+ category;
55
+ constructor(message, category = ErrorCategory.InvalidInput) {
56
+ super(message);
57
+ this.name = 'NonRetryableError';
58
+ this.category = category;
59
+ }
60
+ }
61
+ /**
62
+ * Network-related errors (connection issues, timeouts)
63
+ */
64
+ export class NetworkError extends RetryableError {
65
+ constructor(message) {
66
+ super(message, ErrorCategory.Network);
67
+ this.name = 'NetworkError';
68
+ }
69
+ }
70
+ /**
71
+ * Rate limit errors with optional retry-after
72
+ */
73
+ export class RateLimitError extends RetryableError {
74
+ retryAfter;
75
+ constructor(message, options) {
76
+ super(message, ErrorCategory.RateLimit);
77
+ this.name = 'RateLimitError';
78
+ this.retryAfter = options?.retryAfter;
79
+ }
80
+ /**
81
+ * Create RateLimitError from HTTP response
82
+ */
83
+ static fromResponse(response) {
84
+ const retryAfterHeader = response.headers?.['retry-after'];
85
+ let retryAfter;
86
+ if (retryAfterHeader) {
87
+ const seconds = parseInt(retryAfterHeader, 10);
88
+ if (!isNaN(seconds)) {
89
+ retryAfter = seconds * 1000; // Convert to milliseconds
90
+ }
91
+ }
92
+ return new RateLimitError(`Rate limited (${response.status})`, { retryAfter });
93
+ }
94
+ }
95
+ /**
96
+ * Error thrown when circuit breaker is open
97
+ */
98
+ export class CircuitOpenError extends Error {
99
+ retryable = false;
100
+ constructor(message = 'Circuit breaker is open') {
101
+ super(message);
102
+ this.name = 'CircuitOpenError';
103
+ }
104
+ }
105
+ /**
106
+ * Classify an error into a category for retry decisions
107
+ */
108
+ export function classifyError(error) {
109
+ if (!(error instanceof Error)) {
110
+ return ErrorCategory.Unknown;
111
+ }
112
+ const message = error.message.toLowerCase();
113
+ const status = error.status;
114
+ // Network errors
115
+ if (message.includes('econnrefused') ||
116
+ message.includes('etimedout') ||
117
+ message.includes('enotfound') ||
118
+ message.includes('socket hang up') ||
119
+ message.includes('network request failed') ||
120
+ message.includes('fetch failed')) {
121
+ return ErrorCategory.Network;
122
+ }
123
+ // Rate limit errors
124
+ if (message.includes('rate limit') ||
125
+ message.includes('429') ||
126
+ message.includes('too many requests') ||
127
+ message.includes('quota exceeded') ||
128
+ status === 429) {
129
+ return ErrorCategory.RateLimit;
130
+ }
131
+ // Invalid input errors
132
+ if (message.includes('invalid json') ||
133
+ message.includes('400 bad request') ||
134
+ message.includes('validation failed') ||
135
+ status === 400 ||
136
+ status === 422) {
137
+ return ErrorCategory.InvalidInput;
138
+ }
139
+ // Authentication errors
140
+ if (message.includes('401 unauthorized') ||
141
+ message.includes('403 forbidden') ||
142
+ message.includes('invalid api key') ||
143
+ status === 401 ||
144
+ status === 403) {
145
+ return ErrorCategory.Authentication;
146
+ }
147
+ // Server errors
148
+ if (message.includes('500') ||
149
+ message.includes('502') ||
150
+ message.includes('503') ||
151
+ message.includes('504') ||
152
+ message.includes('internal server error') ||
153
+ message.includes('bad gateway') ||
154
+ message.includes('service unavailable') ||
155
+ message.includes('gateway timeout') ||
156
+ (status && status >= 500 && status < 600)) {
157
+ return ErrorCategory.Server;
158
+ }
159
+ // Context length errors
160
+ if (message.includes('context length') ||
161
+ message.includes('token limit') ||
162
+ message.includes('maximum context')) {
163
+ return ErrorCategory.ContextLength;
164
+ }
165
+ return ErrorCategory.Unknown;
166
+ }
167
+ /**
168
+ * Calculate backoff delay with exponential increase and optional jitter
169
+ *
170
+ * @param attempt - Current attempt number (0-indexed)
171
+ * @param options - Backoff configuration
172
+ * @returns Delay in milliseconds
173
+ */
174
+ export function calculateBackoff(attempt, options = {}) {
175
+ const { baseDelay = 1000, maxDelay = 30000, multiplier = 2, jitter = 0, jitterStrategy = 'equal', previousDelay, } = options;
176
+ // Calculate base exponential delay
177
+ let delay = baseDelay * Math.pow(multiplier, attempt);
178
+ // Apply jitter based on strategy
179
+ if (jitterStrategy === 'full') {
180
+ // Full jitter: random value between 0 and calculated delay
181
+ delay = Math.random() * delay;
182
+ }
183
+ else if (jitterStrategy === 'decorrelated' && previousDelay !== undefined) {
184
+ // Decorrelated jitter: random between baseDelay and previousDelay * 3
185
+ delay = baseDelay + Math.random() * (previousDelay * 3 - baseDelay);
186
+ }
187
+ else if (jitter > 0) {
188
+ // Equal jitter: +/- jitter% of calculated delay
189
+ const jitterRange = delay * jitter;
190
+ delay = delay - jitterRange + Math.random() * 2 * jitterRange;
191
+ }
192
+ // Apply max delay cap
193
+ return Math.min(delay, maxDelay);
194
+ }
195
+ /**
196
+ * Retry policy for executing operations with exponential backoff
197
+ */
198
+ export class RetryPolicy {
199
+ options;
200
+ constructor(options = {}) {
201
+ this.options = {
202
+ maxRetries: options.maxRetries ?? 3,
203
+ baseDelay: options.baseDelay ?? 1000,
204
+ maxDelay: options.maxDelay ?? 30000,
205
+ multiplier: options.multiplier ?? 2,
206
+ jitter: options.jitter ?? 0,
207
+ jitterStrategy: options.jitterStrategy ?? 'equal',
208
+ respectRetryAfter: options.respectRetryAfter ?? true,
209
+ shouldRetry: options.shouldRetry,
210
+ };
211
+ }
212
+ /**
213
+ * Execute an operation with retry logic
214
+ */
215
+ async execute(operation) {
216
+ let lastError;
217
+ let previousDelay = this.options.baseDelay;
218
+ for (let attempt = 0; attempt <= this.options.maxRetries; attempt++) {
219
+ try {
220
+ return await operation({ attempt, maxRetries: this.options.maxRetries });
221
+ }
222
+ catch (error) {
223
+ lastError = error;
224
+ // Check if error is retryable
225
+ if (!this.isRetryable(error)) {
226
+ throw error;
227
+ }
228
+ // Don't wait after the last attempt
229
+ if (attempt === this.options.maxRetries) {
230
+ break;
231
+ }
232
+ // Calculate delay
233
+ let delay = calculateBackoff(attempt, {
234
+ baseDelay: this.options.baseDelay,
235
+ maxDelay: this.options.maxDelay,
236
+ multiplier: this.options.multiplier,
237
+ jitter: this.options.jitter,
238
+ jitterStrategy: this.options.jitterStrategy,
239
+ previousDelay,
240
+ });
241
+ // Respect retry-after for rate limit errors
242
+ if (this.options.respectRetryAfter && error instanceof RateLimitError && error.retryAfter) {
243
+ delay = error.retryAfter;
244
+ }
245
+ previousDelay = delay;
246
+ await this.sleep(delay);
247
+ }
248
+ }
249
+ throw lastError;
250
+ }
251
+ /**
252
+ * Execute a batch operation with partial retry for failed items
253
+ */
254
+ async executeBatch(items, batchProcessor) {
255
+ const finalResults = new Map();
256
+ let pendingItems = [...items];
257
+ const attemptCounts = new Map();
258
+ // Initialize attempt counts
259
+ items.forEach(item => attemptCounts.set(item, 0));
260
+ for (let round = 0; round <= this.options.maxRetries && pendingItems.length > 0; round++) {
261
+ // Wait before retry (not on first attempt)
262
+ if (round > 0) {
263
+ const delay = calculateBackoff(round - 1, {
264
+ baseDelay: this.options.baseDelay,
265
+ maxDelay: this.options.maxDelay,
266
+ multiplier: this.options.multiplier,
267
+ jitter: this.options.jitter,
268
+ jitterStrategy: this.options.jitterStrategy,
269
+ });
270
+ await this.sleep(delay);
271
+ }
272
+ // Process current batch
273
+ const results = await batchProcessor(pendingItems);
274
+ // Separate successful and failed items
275
+ const failedItems = [];
276
+ for (const result of results) {
277
+ attemptCounts.set(result.item, (attemptCounts.get(result.item) || 0) + 1);
278
+ if (result.success) {
279
+ finalResults.set(result.item, result);
280
+ }
281
+ else {
282
+ // Check if we can retry this item
283
+ const attempts = attemptCounts.get(result.item) || 0;
284
+ if (attempts <= this.options.maxRetries && this.isRetryable(result.error)) {
285
+ failedItems.push(result.item);
286
+ }
287
+ else {
288
+ finalResults.set(result.item, result);
289
+ }
290
+ }
291
+ }
292
+ pendingItems = failedItems;
293
+ }
294
+ // Return results in original order
295
+ return items.map(item => finalResults.get(item));
296
+ }
297
+ isRetryable(error) {
298
+ // Check custom shouldRetry function first
299
+ if (this.options.shouldRetry) {
300
+ return this.options.shouldRetry(error);
301
+ }
302
+ // Check error's own retryable property
303
+ if (error && typeof error === 'object' && 'retryable' in error) {
304
+ return error.retryable === true;
305
+ }
306
+ // Classify error and determine retryability
307
+ const category = classifyError(error);
308
+ return (category === ErrorCategory.Network ||
309
+ category === ErrorCategory.RateLimit ||
310
+ category === ErrorCategory.Server ||
311
+ category === ErrorCategory.Unknown);
312
+ }
313
+ sleep(ms) {
314
+ return new Promise(resolve => setTimeout(resolve, ms));
315
+ }
316
+ }
317
+ /**
318
+ * Circuit breaker for fail-fast behavior
319
+ *
320
+ * States:
321
+ * - CLOSED: Normal operation, failures tracked
322
+ * - OPEN: Fail fast, reject all requests
323
+ * - HALF-OPEN: Allow single test request
324
+ */
325
+ export class CircuitBreaker {
326
+ _state = 'closed';
327
+ _failureCount = 0;
328
+ _successCount = 0;
329
+ _lastFailure = null;
330
+ _lastSuccess = null;
331
+ _totalFailures = 0;
332
+ _totalSuccesses = 0;
333
+ _openedAt = null;
334
+ options;
335
+ constructor(options = {}) {
336
+ this.options = {
337
+ failureThreshold: options.failureThreshold ?? 5,
338
+ resetTimeout: options.resetTimeout ?? 30000,
339
+ successThreshold: options.successThreshold ?? 1,
340
+ };
341
+ }
342
+ /**
343
+ * Current circuit state
344
+ */
345
+ get state() {
346
+ // Check if we should transition from open to half-open
347
+ if (this._state === 'open' && this._openedAt !== null) {
348
+ if (Date.now() - this._openedAt >= this.options.resetTimeout) {
349
+ this._state = 'half-open';
350
+ }
351
+ }
352
+ return this._state;
353
+ }
354
+ /**
355
+ * Current failure count
356
+ */
357
+ get failureCount() {
358
+ return this._failureCount;
359
+ }
360
+ /**
361
+ * Execute an operation through the circuit breaker
362
+ */
363
+ async execute(operation) {
364
+ // Check current state
365
+ const currentState = this.state;
366
+ if (currentState === 'open') {
367
+ throw new CircuitOpenError();
368
+ }
369
+ try {
370
+ const result = await operation();
371
+ this.recordSuccess();
372
+ return result;
373
+ }
374
+ catch (error) {
375
+ this.recordFailure();
376
+ throw error;
377
+ }
378
+ }
379
+ /**
380
+ * Record a successful operation
381
+ */
382
+ recordSuccess() {
383
+ this._successCount++;
384
+ this._totalSuccesses++;
385
+ this._lastSuccess = new Date();
386
+ this._failureCount = 0; // Reset failure count on success
387
+ if (this._state === 'half-open') {
388
+ if (this._successCount >= this.options.successThreshold) {
389
+ this._state = 'closed';
390
+ this._openedAt = null;
391
+ }
392
+ }
393
+ }
394
+ /**
395
+ * Record a failed operation
396
+ */
397
+ recordFailure() {
398
+ this._failureCount++;
399
+ this._totalFailures++;
400
+ this._lastFailure = new Date();
401
+ this._successCount = 0; // Reset success count on failure
402
+ if (this._state === 'closed') {
403
+ if (this._failureCount >= this.options.failureThreshold) {
404
+ this._state = 'open';
405
+ this._openedAt = Date.now();
406
+ }
407
+ }
408
+ else if (this._state === 'half-open') {
409
+ // Any failure in half-open state reopens the circuit
410
+ this._state = 'open';
411
+ this._openedAt = Date.now();
412
+ }
413
+ }
414
+ /**
415
+ * Get circuit breaker metrics
416
+ */
417
+ getMetrics() {
418
+ return {
419
+ state: this.state,
420
+ failureCount: this._failureCount,
421
+ successCount: this._successCount,
422
+ lastFailure: this._lastFailure,
423
+ lastSuccess: this._lastSuccess,
424
+ totalFailures: this._totalFailures,
425
+ totalSuccesses: this._totalSuccesses,
426
+ };
427
+ }
428
+ /**
429
+ * Manually reset the circuit breaker
430
+ */
431
+ reset() {
432
+ this._state = 'closed';
433
+ this._failureCount = 0;
434
+ this._successCount = 0;
435
+ this._openedAt = null;
436
+ }
437
+ }
438
+ /**
439
+ * Fallback chain for model failover
440
+ *
441
+ * Tries models in order until one succeeds:
442
+ * sonnet -> opus -> gpt-4o -> gemini
443
+ */
444
+ export class FallbackChain {
445
+ models;
446
+ options;
447
+ lastMetrics = null;
448
+ constructor(models, options = {}) {
449
+ if (models.length === 0) {
450
+ throw new Error('FallbackChain requires at least one model');
451
+ }
452
+ this.models = models;
453
+ this.options = options;
454
+ }
455
+ /**
456
+ * Execute the fallback chain
457
+ */
458
+ async execute(params) {
459
+ const startTime = Date.now();
460
+ const failedModels = [];
461
+ const errors = [];
462
+ for (const model of this.models) {
463
+ try {
464
+ const result = await model.execute(params);
465
+ this.lastMetrics = {
466
+ attempts: failedModels.length + 1,
467
+ successfulModel: model.name,
468
+ failedModels,
469
+ totalDuration: Date.now() - startTime,
470
+ errors,
471
+ };
472
+ return result;
473
+ }
474
+ catch (error) {
475
+ const err = error instanceof Error ? error : new Error(String(error));
476
+ failedModels.push(model.name);
477
+ errors.push({ model: model.name, error: err });
478
+ // Check if we should attempt fallback
479
+ if (this.options.shouldFallback && !this.options.shouldFallback(error)) {
480
+ this.lastMetrics = {
481
+ attempts: failedModels.length,
482
+ successfulModel: null,
483
+ failedModels,
484
+ totalDuration: Date.now() - startTime,
485
+ errors,
486
+ };
487
+ throw error;
488
+ }
489
+ }
490
+ }
491
+ this.lastMetrics = {
492
+ attempts: this.models.length,
493
+ successfulModel: null,
494
+ failedModels,
495
+ totalDuration: Date.now() - startTime,
496
+ errors,
497
+ };
498
+ throw new Error('All fallback models failed');
499
+ }
500
+ /**
501
+ * Get metrics from the last execution
502
+ */
503
+ getMetrics() {
504
+ if (!this.lastMetrics) {
505
+ return {
506
+ attempts: 0,
507
+ successfulModel: null,
508
+ failedModels: [],
509
+ totalDuration: 0,
510
+ errors: [],
511
+ };
512
+ }
513
+ return this.lastMetrics;
514
+ }
515
+ }
516
+ // ============================================================================
517
+ // CONVENIENCE HELPER
518
+ // ============================================================================
519
+ /**
520
+ * Wrap an async function with retry logic
521
+ *
522
+ * @example
523
+ * ```ts
524
+ * const reliableFetch = withRetry(fetch, {
525
+ * maxRetries: 3,
526
+ * baseDelay: 1000,
527
+ * jitter: 0.2,
528
+ * })
529
+ *
530
+ * const response = await reliableFetch('https://api.example.com')
531
+ * ```
532
+ */
533
+ export function withRetry(fn, options = {}) {
534
+ const policy = new RetryPolicy(options);
535
+ return (async (...args) => {
536
+ return policy.execute(() => fn(...args));
537
+ });
538
+ }
539
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAK,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAExC;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,CAAC,MAAM,CAAC,GACR,CAAC,MAAM,CAAC,GACR,CAAC,YAAY,CAAC,GACd;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,GAC/B,UAAU,CAAA;AAYd;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAEnE;AAwED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC/C,MAAM,GACN,CAAC,SAAS,CAAC,MAAM,CAAC,GAClB,MAAM,EAAE,GACR,CAAC,SAAS,CAAC,MAAM,CAAC,GAClB,MAAM,EAAE,GACR,CAAC,SAAS;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY;CAAE,GAC1C;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC3C,OAAO,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAK,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAGxC;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,CAAC,MAAM,CAAC,GACR,CAAC,MAAM,CAAC,GACR,CAAC,YAAY,CAAC,GACd;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAAE,GAC/B,UAAU,CAAA;AAEd;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAEnE;AAwED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,GAC/C,MAAM,GACN,CAAC,SAAS,CAAC,MAAM,CAAC,GAClB,MAAM,EAAE,GACR,CAAC,SAAS,CAAC,MAAM,CAAC,GAClB,MAAM,EAAE,GACR,CAAC,SAAS;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,YAAY;CAAE,GAC1C;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GAC3C,OAAO,CAAA"}
package/dist/schema.js CHANGED
@@ -14,15 +14,7 @@
14
14
  * @packageDocumentation
15
15
  */
16
16
  import { z } from 'zod';
17
- /**
18
- * Check if value is a Zod schema
19
- */
20
- function isZodSchema(value) {
21
- return value !== null &&
22
- typeof value === 'object' &&
23
- '_def' in value &&
24
- 'parse' in value;
25
- }
17
+ import { isZodSchema } from '@org.ai/core';
26
18
  /**
27
19
  * Convert a simplified schema to a Zod schema
28
20
  *
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,CAAC,EAAmB,MAAM,KAAK,CAAA;AAaxC;;GAEG;AACH,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,KAAK,IAAI;QACnB,OAAO,KAAK,KAAK,QAAQ;QACzB,MAAM,IAAI,KAAK;QACf,OAAO,IAAI,KAAK,CAAA;AACpB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,MAAM,CAAyB,KAAQ;IACrD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,YAAY,CAAC,KAAmB;IACvC,sCAAsC;IACtC,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,kBAAkB;IAClB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,6CAA6C;QAC7C,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YACrD,OAAO,CAAC,CAAC,IAAI,CAAC,OAAgC,CAAC,CAAA;QACjD,CAAC;QAED,yCAAyC;QACzC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;QAC7E,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,SAAS,CAAA;YACvC,MAAM,IAAI,GAAG,WAAY,CAAC,IAAI,EAAE,CAAA;YAChC,QAAQ,IAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBAC5B,KAAK,QAAQ;oBACX,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAClC,KAAK,SAAS;oBACZ,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBACxC,KAAK,SAAS;oBACZ,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBACnC,KAAK,MAAM;oBACT,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;gBAC7C;oBACE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,mDAAmD;IACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;QAEpB,kDAAkD;QAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;QAC3C,CAAC;QAED,4DAA4D;QAC5D,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAA;QAC5B,CAAC;QAED,sCAAsC;QACtC,OAAO,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,IAAoB,CAAC,CAAC,CAAA;IACpD,CAAC;IAED,gDAAgD;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,KAAK,GAA+B,EAAE,CAAA;QAE5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAqB,CAAC,CAAA;QAClD,CAAC;QAED,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IAED,kCAAkC;IAClC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}