@ai-orchestration/core 0.1.0 → 0.3.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 (213) hide show
  1. package/README.md +145 -5
  2. package/dist/cjs/core/errors.d.ts +21 -0
  3. package/dist/cjs/core/errors.d.ts.map +1 -0
  4. package/dist/cjs/core/errors.js +40 -0
  5. package/dist/cjs/core/errors.js.map +1 -0
  6. package/dist/cjs/core/interfaces.d.ts +166 -0
  7. package/dist/cjs/core/interfaces.d.ts.map +1 -0
  8. package/dist/cjs/core/interfaces.js +6 -0
  9. package/dist/cjs/core/interfaces.js.map +1 -0
  10. package/dist/cjs/core/metrics.d.ts +161 -0
  11. package/dist/cjs/core/metrics.d.ts.map +1 -0
  12. package/dist/cjs/core/metrics.js +282 -0
  13. package/dist/cjs/core/metrics.js.map +1 -0
  14. package/dist/cjs/core/orchestrator.d.ts +97 -0
  15. package/dist/cjs/core/orchestrator.d.ts.map +1 -0
  16. package/dist/cjs/core/orchestrator.js +402 -0
  17. package/dist/cjs/core/orchestrator.js.map +1 -0
  18. package/dist/cjs/core/types.d.ts +111 -0
  19. package/dist/cjs/core/types.d.ts.map +1 -0
  20. package/dist/cjs/core/types.js +6 -0
  21. package/dist/cjs/core/types.js.map +1 -0
  22. package/dist/cjs/factory/index.d.ts +14 -0
  23. package/dist/cjs/factory/index.d.ts.map +1 -0
  24. package/dist/cjs/factory/index.js +208 -0
  25. package/dist/cjs/factory/index.js.map +1 -0
  26. package/dist/cjs/index.d.ts +16 -0
  27. package/dist/cjs/index.d.ts.map +1 -0
  28. package/dist/cjs/index.js +37 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/cjs/providers/base.d.ts +30 -0
  31. package/dist/cjs/providers/base.d.ts.map +1 -0
  32. package/dist/cjs/providers/base.js +35 -0
  33. package/dist/cjs/providers/base.js.map +1 -0
  34. package/dist/cjs/providers/cerebras.d.ts +26 -0
  35. package/dist/cjs/providers/cerebras.d.ts.map +1 -0
  36. package/dist/cjs/providers/cerebras.js +207 -0
  37. package/dist/cjs/providers/cerebras.js.map +1 -0
  38. package/dist/cjs/providers/gemini.d.ts +26 -0
  39. package/dist/cjs/providers/gemini.d.ts.map +1 -0
  40. package/dist/cjs/providers/gemini.js +180 -0
  41. package/dist/cjs/providers/gemini.js.map +1 -0
  42. package/dist/cjs/providers/groq.d.ts +26 -0
  43. package/dist/cjs/providers/groq.d.ts.map +1 -0
  44. package/dist/cjs/providers/groq.js +242 -0
  45. package/dist/cjs/providers/groq.js.map +1 -0
  46. package/dist/cjs/providers/index.d.ts +15 -0
  47. package/dist/cjs/providers/index.d.ts.map +1 -0
  48. package/dist/cjs/providers/index.js +19 -0
  49. package/dist/cjs/providers/index.js.map +1 -0
  50. package/dist/cjs/providers/local.d.ts +27 -0
  51. package/dist/cjs/providers/local.d.ts.map +1 -0
  52. package/dist/cjs/providers/local.js +205 -0
  53. package/dist/cjs/providers/local.js.map +1 -0
  54. package/dist/cjs/providers/openrouter.d.ts +26 -0
  55. package/dist/cjs/providers/openrouter.d.ts.map +1 -0
  56. package/dist/cjs/providers/openrouter.js +187 -0
  57. package/dist/cjs/providers/openrouter.js.map +1 -0
  58. package/dist/cjs/strategies/base.d.ts +16 -0
  59. package/dist/cjs/strategies/base.d.ts.map +1 -0
  60. package/dist/cjs/strategies/base.js +25 -0
  61. package/dist/cjs/strategies/base.js.map +1 -0
  62. package/dist/cjs/strategies/fallback.d.ts +14 -0
  63. package/dist/cjs/strategies/fallback.d.ts.map +1 -0
  64. package/dist/cjs/strategies/fallback.js +32 -0
  65. package/dist/cjs/strategies/fallback.js.map +1 -0
  66. package/dist/cjs/strategies/health-aware.d.ts +20 -0
  67. package/dist/cjs/strategies/health-aware.d.ts.map +1 -0
  68. package/dist/cjs/strategies/health-aware.js +108 -0
  69. package/dist/cjs/strategies/health-aware.js.map +1 -0
  70. package/dist/cjs/strategies/index.d.ts +14 -0
  71. package/dist/cjs/strategies/index.d.ts.map +1 -0
  72. package/dist/cjs/strategies/index.js +19 -0
  73. package/dist/cjs/strategies/index.js.map +1 -0
  74. package/dist/cjs/strategies/priority.d.ts +18 -0
  75. package/dist/cjs/strategies/priority.d.ts.map +1 -0
  76. package/dist/cjs/strategies/priority.js +39 -0
  77. package/dist/cjs/strategies/priority.js.map +1 -0
  78. package/dist/cjs/strategies/round-robin.d.ts +10 -0
  79. package/dist/cjs/strategies/round-robin.d.ts.map +1 -0
  80. package/dist/cjs/strategies/round-robin.js +28 -0
  81. package/dist/cjs/strategies/round-robin.js.map +1 -0
  82. package/dist/cjs/strategies/weighted.d.ts +20 -0
  83. package/dist/cjs/strategies/weighted.d.ts.map +1 -0
  84. package/dist/cjs/strategies/weighted.js +61 -0
  85. package/dist/cjs/strategies/weighted.js.map +1 -0
  86. package/dist/core/interfaces.d.ts +80 -1
  87. package/dist/core/interfaces.d.ts.map +1 -1
  88. package/dist/core/metrics.d.ts +161 -0
  89. package/dist/core/metrics.d.ts.map +1 -0
  90. package/dist/core/metrics.js +276 -0
  91. package/dist/core/metrics.js.map +1 -0
  92. package/dist/core/orchestrator.d.ts +45 -3
  93. package/dist/core/orchestrator.d.ts.map +1 -1
  94. package/dist/core/orchestrator.js +271 -11
  95. package/dist/core/orchestrator.js.map +1 -1
  96. package/dist/core/types.d.ts +39 -0
  97. package/dist/core/types.d.ts.map +1 -1
  98. package/dist/esm/core/errors.d.ts +21 -0
  99. package/dist/esm/core/errors.d.ts.map +1 -0
  100. package/dist/esm/core/errors.js +33 -0
  101. package/dist/esm/core/errors.js.map +1 -0
  102. package/dist/esm/core/interfaces.d.ts +166 -0
  103. package/dist/esm/core/interfaces.d.ts.map +1 -0
  104. package/dist/esm/core/interfaces.js +5 -0
  105. package/dist/esm/core/interfaces.js.map +1 -0
  106. package/dist/esm/core/metrics.d.ts +161 -0
  107. package/dist/esm/core/metrics.d.ts.map +1 -0
  108. package/dist/esm/core/metrics.js +278 -0
  109. package/dist/esm/core/metrics.js.map +1 -0
  110. package/dist/esm/core/orchestrator.d.ts +97 -0
  111. package/dist/esm/core/orchestrator.d.ts.map +1 -0
  112. package/dist/esm/core/orchestrator.js +398 -0
  113. package/dist/esm/core/orchestrator.js.map +1 -0
  114. package/dist/esm/core/types.d.ts +111 -0
  115. package/dist/esm/core/types.d.ts.map +1 -0
  116. package/dist/esm/core/types.js +5 -0
  117. package/dist/esm/core/types.js.map +1 -0
  118. package/dist/esm/factory/index.d.ts +14 -0
  119. package/dist/esm/factory/index.d.ts.map +1 -0
  120. package/dist/esm/factory/index.js +204 -0
  121. package/dist/esm/factory/index.js.map +1 -0
  122. package/dist/esm/index.d.ts +16 -0
  123. package/dist/esm/index.d.ts.map +1 -0
  124. package/dist/esm/index.js +16 -0
  125. package/dist/esm/index.js.map +1 -0
  126. package/dist/esm/providers/base.d.ts +30 -0
  127. package/dist/esm/providers/base.d.ts.map +1 -0
  128. package/dist/esm/providers/base.js +31 -0
  129. package/dist/esm/providers/base.js.map +1 -0
  130. package/dist/esm/providers/cerebras.d.ts +26 -0
  131. package/dist/esm/providers/cerebras.d.ts.map +1 -0
  132. package/dist/esm/providers/cerebras.js +203 -0
  133. package/dist/esm/providers/cerebras.js.map +1 -0
  134. package/dist/esm/providers/gemini.d.ts +26 -0
  135. package/dist/esm/providers/gemini.d.ts.map +1 -0
  136. package/dist/esm/providers/gemini.js +176 -0
  137. package/dist/esm/providers/gemini.js.map +1 -0
  138. package/dist/esm/providers/groq.d.ts +26 -0
  139. package/dist/esm/providers/groq.d.ts.map +1 -0
  140. package/dist/esm/providers/groq.js +238 -0
  141. package/dist/esm/providers/groq.js.map +1 -0
  142. package/dist/esm/providers/index.d.ts +15 -0
  143. package/dist/esm/providers/index.d.ts.map +1 -0
  144. package/dist/esm/providers/index.js +10 -0
  145. package/dist/esm/providers/index.js.map +1 -0
  146. package/dist/esm/providers/local.d.ts +27 -0
  147. package/dist/esm/providers/local.d.ts.map +1 -0
  148. package/dist/esm/providers/local.js +201 -0
  149. package/dist/esm/providers/local.js.map +1 -0
  150. package/dist/esm/providers/openrouter.d.ts +26 -0
  151. package/dist/esm/providers/openrouter.d.ts.map +1 -0
  152. package/dist/esm/providers/openrouter.js +183 -0
  153. package/dist/esm/providers/openrouter.js.map +1 -0
  154. package/dist/esm/strategies/base.d.ts +16 -0
  155. package/dist/esm/strategies/base.d.ts.map +1 -0
  156. package/dist/esm/strategies/base.js +21 -0
  157. package/dist/esm/strategies/base.js.map +1 -0
  158. package/dist/esm/strategies/fallback.d.ts +14 -0
  159. package/dist/esm/strategies/fallback.d.ts.map +1 -0
  160. package/dist/esm/strategies/fallback.js +28 -0
  161. package/dist/esm/strategies/fallback.js.map +1 -0
  162. package/dist/esm/strategies/health-aware.d.ts +20 -0
  163. package/dist/esm/strategies/health-aware.d.ts.map +1 -0
  164. package/dist/esm/strategies/health-aware.js +104 -0
  165. package/dist/esm/strategies/health-aware.js.map +1 -0
  166. package/dist/esm/strategies/index.d.ts +14 -0
  167. package/dist/esm/strategies/index.d.ts.map +1 -0
  168. package/dist/esm/strategies/index.js +10 -0
  169. package/dist/esm/strategies/index.js.map +1 -0
  170. package/dist/esm/strategies/priority.d.ts +18 -0
  171. package/dist/esm/strategies/priority.d.ts.map +1 -0
  172. package/dist/esm/strategies/priority.js +35 -0
  173. package/dist/esm/strategies/priority.js.map +1 -0
  174. package/dist/esm/strategies/round-robin.d.ts +10 -0
  175. package/dist/esm/strategies/round-robin.d.ts.map +1 -0
  176. package/dist/esm/strategies/round-robin.js +24 -0
  177. package/dist/esm/strategies/round-robin.js.map +1 -0
  178. package/dist/esm/strategies/weighted.d.ts +20 -0
  179. package/dist/esm/strategies/weighted.d.ts.map +1 -0
  180. package/dist/esm/strategies/weighted.js +57 -0
  181. package/dist/esm/strategies/weighted.js.map +1 -0
  182. package/dist/factory/index.d.ts.map +1 -1
  183. package/dist/factory/index.js +27 -7
  184. package/dist/factory/index.js.map +1 -1
  185. package/dist/index.d.ts +3 -1
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/index.js +1 -0
  188. package/dist/index.js.map +1 -1
  189. package/dist/providers/cerebras.d.ts.map +1 -1
  190. package/dist/providers/cerebras.js +22 -4
  191. package/dist/providers/cerebras.js.map +1 -1
  192. package/dist/providers/groq.d.ts.map +1 -1
  193. package/dist/providers/groq.js +22 -4
  194. package/dist/providers/groq.js.map +1 -1
  195. package/dist/providers/local.d.ts.map +1 -1
  196. package/dist/providers/local.js +9 -1
  197. package/dist/providers/local.js.map +1 -1
  198. package/dist/providers/openrouter.d.ts.map +1 -1
  199. package/dist/providers/openrouter.js +18 -2
  200. package/dist/providers/openrouter.js.map +1 -1
  201. package/docs/CHANGELOG.md +36 -0
  202. package/examples/README.md +205 -0
  203. package/examples/basic.ts +51 -17
  204. package/examples/chat-app/config.json +20 -1
  205. package/examples/chat-app/index.ts +41 -2
  206. package/examples/config.example.json +26 -4
  207. package/examples/language.ts +160 -0
  208. package/examples/metrics.ts +151 -0
  209. package/examples/strategies.ts +4 -2
  210. package/examples/test-local.ts +6 -6
  211. package/package.json +20 -7
  212. package/tsconfig.cjs.json +9 -0
  213. package/tsconfig.esm.json +9 -0
package/README.md CHANGED
@@ -21,6 +21,22 @@ A modular and extensible framework for orchestrating multiple AI/LLM providers c
21
21
  npm install @ai-orchestration/core
22
22
  ```
23
23
 
24
+ ### Module System Compatibility
25
+
26
+ This package supports both **ESM** (ECMAScript Modules) and **CommonJS**, so you can use it in any Node.js project:
27
+
28
+ **ESM Projects** (recommended):
29
+ ```typescript
30
+ import { createOrchestrator } from '@ai-orchestration/core';
31
+ ```
32
+
33
+ **CommonJS Projects**:
34
+ ```javascript
35
+ const { createOrchestrator } = require('@ai-orchestration/core');
36
+ ```
37
+
38
+ The package automatically exports the correct format based on your project's module system.
39
+
24
40
  ## Quick Start
25
41
 
26
42
  ### Basic Usage
@@ -267,20 +283,58 @@ For local models that expose an OpenAI-compatible API:
267
283
  }
268
284
  ```
269
285
 
270
- ## Health Checks
286
+ ## Advanced Configuration
287
+
288
+ ### Retry and Timeout Configuration
289
+
290
+ ```typescript
291
+ const orchestrator = createOrchestrator({
292
+ providers: [...],
293
+ strategy: {...},
294
+ maxRetries: 3, // Maximum retry attempts (default: number of providers)
295
+ requestTimeout: 30000, // Global timeout in milliseconds (default: 30000)
296
+ retryDelay: 'exponential', // or number in milliseconds (default: 1000)
297
+ });
298
+ ```
299
+
300
+ ### Circuit Breaker
271
301
 
272
- Enable periodic health monitoring:
302
+ Automatically disable providers after consecutive failures:
273
303
 
274
304
  ```typescript
275
305
  const orchestrator = createOrchestrator({
276
306
  providers: [...],
277
307
  strategy: {...},
278
- enableHealthChecks: true,
279
- healthCheckInterval: 60000, // every 60 seconds
308
+ circuitBreaker: {
309
+ enabled: true,
310
+ failureThreshold: 5, // Open circuit after 5 failures
311
+ resetTimeout: 60000, // Reset after 60 seconds
312
+ },
280
313
  });
281
314
  ```
282
315
 
283
- Or manually:
316
+ ### Health Checks
317
+
318
+ Enhanced health check configuration:
319
+
320
+ ```typescript
321
+ const orchestrator = createOrchestrator({
322
+ providers: [...],
323
+ strategy: {...},
324
+ healthCheck: {
325
+ enabled: true,
326
+ interval: 60000, // Check every 60 seconds
327
+ timeout: 5000, // Health check timeout (default: 5000ms)
328
+ maxConsecutiveFailures: 3, // Mark unhealthy after 3 failures (default: 3)
329
+ latencyThreshold: 10000, // Max latency in ms (default: 10000ms)
330
+ },
331
+ // Legacy format still supported:
332
+ // enableHealthChecks: true,
333
+ // healthCheckInterval: 60000,
334
+ });
335
+ ```
336
+
337
+ Or manually check health:
284
338
 
285
339
  ```typescript
286
340
  const health = await provider.checkHealth();
@@ -296,9 +350,95 @@ const response = await orchestrator.chat(messages, {
296
350
  topP: 0.9,
297
351
  topK: 40,
298
352
  stopSequences: ['\n\n'],
353
+ responseLanguage: 'es', // Force response in Spanish
354
+ frequencyPenalty: 0.5, // Reduce repetition
355
+ presencePenalty: 0.3, // Encourage new topics
356
+ seed: 42, // For reproducible outputs
357
+ timeout: 30000, // Request timeout in milliseconds
358
+ user: 'user-123', // User identifier for tracking
299
359
  });
300
360
  ```
301
361
 
362
+ ### Available Chat Options
363
+
364
+ - **`temperature`**: Controls randomness (0.0 to 2.0)
365
+ - **`maxTokens`**: Maximum tokens in response
366
+ - **`topP`**: Nucleus sampling threshold
367
+ - **`topK`**: Top-K sampling
368
+ - **`stopSequences`**: Stop generation on these sequences
369
+ - **`responseLanguage`**: Force response language (see below)
370
+ - **`frequencyPenalty`**: Penalize frequent tokens (-2.0 to 2.0)
371
+ - **`presencePenalty`**: Penalize existing tokens (-2.0 to 2.0)
372
+ - **`seed`**: Seed for reproducible outputs
373
+ - **`timeout`**: Request timeout in milliseconds (overrides global timeout)
374
+ - **`user`**: User identifier for tracking/rate limiting
375
+
376
+ ### Forcing Response Language
377
+
378
+ You can force the AI to respond in a specific language using the `responseLanguage` option:
379
+
380
+ ```typescript
381
+ // Using ISO 639-1 language codes
382
+ const response = await orchestrator.chat(messages, {
383
+ responseLanguage: 'es', // Spanish
384
+ // or 'en', 'fr', 'de', 'it', 'pt', 'ja', 'zh', 'ru', etc.
385
+ });
386
+
387
+ // Using full language names
388
+ const response2 = await orchestrator.chat(messages, {
389
+ responseLanguage: 'spanish', // Also works
390
+ // or 'english', 'french', 'german', 'italian', etc.
391
+ });
392
+ ```
393
+
394
+ **How it works**: When `responseLanguage` is specified, the framework automatically prepends a system message instructing the model to respond in the specified language. If you already have a system message, the language instruction will be prepended to it.
395
+
396
+ **Supported languages**: Spanish, English, French, German, Italian, Portuguese, Japanese, Chinese, Russian, Korean, Arabic, Hindi, Dutch, Polish, Swedish, Turkish (and more via ISO 639-1 codes).
397
+
398
+ ## Metrics and Analytics
399
+
400
+ Track provider usage, costs, and strategy effectiveness:
401
+
402
+ ```typescript
403
+ const orchestrator = createOrchestrator({
404
+ providers: [...],
405
+ strategy: {...},
406
+ enableMetrics: true, // Enabled by default
407
+ onMetricsEvent: (event) => {
408
+ // Optional: Real-time event tracking
409
+ console.log('Event:', event.type, event.providerId);
410
+ },
411
+ });
412
+
413
+ // Make some requests...
414
+
415
+ // Get overall metrics
416
+ const metrics = orchestrator.getMetrics().getOrchestratorMetrics();
417
+ console.log('Total Requests:', metrics.totalRequests);
418
+ console.log('Total Cost:', metrics.totalCost);
419
+ console.log('Error Rate:', metrics.errorRate);
420
+
421
+ // Get provider-specific metrics
422
+ const providerMetrics = orchestrator.getMetrics().getProviderMetrics('groq-1');
423
+ console.log('Provider Requests:', providerMetrics?.totalRequests);
424
+ console.log('Provider Cost:', providerMetrics?.totalCost);
425
+ console.log('Success Rate:', providerMetrics?.successfulRequests / providerMetrics?.totalRequests);
426
+
427
+ // Get strategy metrics
428
+ const strategyMetrics = orchestrator.getMetrics().getStrategyMetrics();
429
+ console.log('Selections by Provider:', strategyMetrics.selectionsByProvider);
430
+ console.log('Average Selection Time:', strategyMetrics.averageSelectionTime);
431
+ ```
432
+
433
+ ### Available Metrics
434
+
435
+ - **Provider Metrics**: Requests, success/failure rates, latency, token usage, costs
436
+ - **Strategy Metrics**: Selection counts, distribution, selection time
437
+ - **Overall Metrics**: Total requests, costs, error rates, requests per minute
438
+ - **Request History**: Detailed history with filtering options
439
+
440
+ See `examples/metrics.ts` for a complete example.
441
+
302
442
  ## Extensibility
303
443
 
304
444
  ### Adding a New Provider
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Custom error classes for the framework
3
+ */
4
+ export declare class ProviderError extends Error {
5
+ readonly providerId: string;
6
+ readonly cause?: Error | undefined;
7
+ constructor(message: string, providerId: string, cause?: Error | undefined);
8
+ }
9
+ export declare class StrategyError extends Error {
10
+ readonly cause?: Error | undefined;
11
+ constructor(message: string, cause?: Error | undefined);
12
+ }
13
+ export declare class OrchestratorError extends Error {
14
+ readonly cause?: Error | undefined;
15
+ constructor(message: string, cause?: Error | undefined);
16
+ }
17
+ export declare class ConfigurationError extends Error {
18
+ readonly cause?: Error | undefined;
19
+ constructor(message: string, cause?: Error | undefined);
20
+ }
21
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,aAAc,SAAQ,KAAK;aAGpB,UAAU,EAAE,MAAM;aAClB,KAAK,CAAC,EAAE,KAAK;gBAF7B,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,KAAK,YAAA;CAKhC;AAED,qBAAa,aAAc,SAAQ,KAAK;aACO,KAAK,CAAC,EAAE,KAAK;gBAA9C,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,KAAK,YAAA;CAI3D;AAED,qBAAa,iBAAkB,SAAQ,KAAK;aACG,KAAK,CAAC,EAAE,KAAK;gBAA9C,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,KAAK,YAAA;CAI3D;AAED,qBAAa,kBAAmB,SAAQ,KAAK;aACE,KAAK,CAAC,EAAE,KAAK;gBAA9C,OAAO,EAAE,MAAM,EAAkB,KAAK,CAAC,EAAE,KAAK,YAAA;CAI3D"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Custom error classes for the framework
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConfigurationError = exports.OrchestratorError = exports.StrategyError = exports.ProviderError = void 0;
7
+ class ProviderError extends Error {
8
+ constructor(message, providerId, cause) {
9
+ super(message);
10
+ this.providerId = providerId;
11
+ this.cause = cause;
12
+ this.name = 'ProviderError';
13
+ }
14
+ }
15
+ exports.ProviderError = ProviderError;
16
+ class StrategyError extends Error {
17
+ constructor(message, cause) {
18
+ super(message);
19
+ this.cause = cause;
20
+ this.name = 'StrategyError';
21
+ }
22
+ }
23
+ exports.StrategyError = StrategyError;
24
+ class OrchestratorError extends Error {
25
+ constructor(message, cause) {
26
+ super(message);
27
+ this.cause = cause;
28
+ this.name = 'OrchestratorError';
29
+ }
30
+ }
31
+ exports.OrchestratorError = OrchestratorError;
32
+ class ConfigurationError extends Error {
33
+ constructor(message, cause) {
34
+ super(message);
35
+ this.cause = cause;
36
+ this.name = 'ConfigurationError';
37
+ }
38
+ }
39
+ exports.ConfigurationError = ConfigurationError;
40
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/core/errors.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAa,aAAc,SAAQ,KAAK;IACtC,YACE,OAAe,EACC,UAAkB,EAClB,KAAa;QAE7B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,eAAU,GAAV,UAAU,CAAQ;QAClB,UAAK,GAAL,KAAK,CAAQ;QAG7B,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AATD,sCASC;AAED,MAAa,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe,EAAkB,KAAa;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,UAAK,GAAL,KAAK,CAAQ;QAExD,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AALD,sCAKC;AAED,MAAa,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe,EAAkB,KAAa;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,UAAK,GAAL,KAAK,CAAQ;QAExD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AALD,8CAKC;AAED,MAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAe,EAAkB,KAAa;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,UAAK,GAAL,KAAK,CAAQ;QAExD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AALD,gDAKC"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Core interfaces for AI providers and strategies
3
+ */
4
+ import type { ChatMessage, ChatOptions, ChatResponse, ChatChunk, ProviderHealth, ProviderMetadata } from './types.js';
5
+ export type { ChatMessage, ChatOptions, ChatResponse, ChatChunk, ProviderHealth, ProviderMetadata, };
6
+ /**
7
+ * Main interface that all AI providers must implement
8
+ */
9
+ export interface AIService {
10
+ /**
11
+ * Unique identifier for this provider instance
12
+ */
13
+ readonly id: string;
14
+ /**
15
+ * Provider metadata
16
+ */
17
+ readonly metadata: ProviderMetadata;
18
+ /**
19
+ * Check the health status of this provider
20
+ */
21
+ checkHealth(): Promise<ProviderHealth>;
22
+ /**
23
+ * Perform a chat completion (non-streaming)
24
+ */
25
+ chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
26
+ /**
27
+ * Perform a chat completion with streaming
28
+ */
29
+ chatStream(messages: ChatMessage[], options?: ChatOptions): Promise<ReadableStream<ChatChunk>>;
30
+ }
31
+ /**
32
+ * Strategy interface for selecting providers
33
+ */
34
+ export interface SelectionStrategy {
35
+ /**
36
+ * Select a provider from the available list
37
+ * @param providers List of available providers
38
+ * @param context Optional context for selection (e.g., request metadata)
39
+ */
40
+ select(providers: AIService[], context?: SelectionContext): Promise<AIService | null>;
41
+ /**
42
+ * Update strategy state (e.g., after a successful/failed request)
43
+ */
44
+ update?(provider: AIService, success: boolean, metadata?: unknown): void;
45
+ }
46
+ /**
47
+ * Context passed to selection strategies
48
+ */
49
+ export interface SelectionContext {
50
+ messages?: ChatMessage[];
51
+ options?: ChatOptions;
52
+ previousAttempts?: string[];
53
+ [key: string]: unknown;
54
+ }
55
+ /**
56
+ * Configuration for a provider instance
57
+ */
58
+ export interface ProviderConfig {
59
+ id: string;
60
+ type: string;
61
+ apiKey?: string;
62
+ baseURL?: string;
63
+ model?: string;
64
+ enabled?: boolean;
65
+ priority?: number;
66
+ weight?: number;
67
+ metadata?: Record<string, unknown>;
68
+ [key: string]: unknown;
69
+ }
70
+ /**
71
+ * Configuration for a selection strategy
72
+ */
73
+ export interface StrategyConfig {
74
+ type: string;
75
+ [key: string]: unknown;
76
+ }
77
+ /**
78
+ * Circuit breaker configuration
79
+ */
80
+ export interface CircuitBreakerConfig {
81
+ /**
82
+ * Enable circuit breaker functionality
83
+ */
84
+ enabled?: boolean;
85
+ /**
86
+ * Number of consecutive failures before opening the circuit
87
+ */
88
+ failureThreshold?: number;
89
+ /**
90
+ * Time in milliseconds before attempting to reset the circuit
91
+ */
92
+ resetTimeout?: number;
93
+ }
94
+ /**
95
+ * Health check configuration
96
+ */
97
+ export interface HealthCheckConfig {
98
+ /**
99
+ * Interval between health checks in milliseconds
100
+ */
101
+ interval?: number;
102
+ /**
103
+ * Timeout for individual health checks in milliseconds
104
+ */
105
+ timeout?: number;
106
+ /**
107
+ * Maximum consecutive failures before marking provider as unhealthy
108
+ */
109
+ maxConsecutiveFailures?: number;
110
+ /**
111
+ * Maximum latency threshold in milliseconds. Providers exceeding this will be marked unhealthy.
112
+ */
113
+ latencyThreshold?: number;
114
+ /**
115
+ * Enable periodic health checks
116
+ */
117
+ enabled?: boolean;
118
+ }
119
+ /**
120
+ * Main orchestrator configuration
121
+ */
122
+ export interface OrchestratorConfig {
123
+ providers: ProviderConfig[];
124
+ strategy: StrategyConfig;
125
+ defaultOptions?: ChatOptions;
126
+ /**
127
+ * Maximum number of retry attempts before giving up.
128
+ * Defaults to the number of providers if not specified.
129
+ */
130
+ maxRetries?: number;
131
+ /**
132
+ * Global timeout for all requests in milliseconds.
133
+ * Defaults to 30000 (30 seconds) if not specified.
134
+ */
135
+ requestTimeout?: number;
136
+ /**
137
+ * Delay between retries in milliseconds, or 'exponential' for exponential backoff.
138
+ * Defaults to 1000 (1 second) if not specified.
139
+ */
140
+ retryDelay?: number | 'exponential';
141
+ /**
142
+ * Circuit breaker configuration
143
+ */
144
+ circuitBreaker?: CircuitBreakerConfig;
145
+ /**
146
+ * Health check configuration
147
+ */
148
+ healthCheck?: HealthCheckConfig;
149
+ /**
150
+ * Enable metrics collection (default: true)
151
+ */
152
+ enableMetrics?: boolean;
153
+ /**
154
+ * Callback for metrics events
155
+ */
156
+ onMetricsEvent?: import('./metrics.js').MetricsCallback;
157
+ /**
158
+ * @deprecated Use healthCheck.enabled instead
159
+ */
160
+ enableHealthChecks?: boolean;
161
+ /**
162
+ * @deprecated Use healthCheck.interval instead
163
+ */
164
+ healthCheckInterval?: number;
165
+ }
166
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/core/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * Core interfaces for AI providers and strategies
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/core/interfaces.ts"],"names":[],"mappings":";AAAA;;GAEG"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Metrics and analytics system for the AI Orchestration Framework
3
+ */
4
+ import type { AIService, ChatResponse } from './interfaces.js';
5
+ import type { ProviderHealth } from './types.js';
6
+ /**
7
+ * Metrics for a single provider
8
+ */
9
+ export interface ProviderMetrics {
10
+ providerId: string;
11
+ providerName: string;
12
+ model?: string;
13
+ totalRequests: number;
14
+ successfulRequests: number;
15
+ failedRequests: number;
16
+ totalTokens: {
17
+ prompt: number;
18
+ completion: number;
19
+ total: number;
20
+ };
21
+ totalCost: number;
22
+ averageLatency: number;
23
+ lastUsed?: Date;
24
+ lastSuccess?: Date;
25
+ lastFailure?: Date;
26
+ healthHistory: Array<{
27
+ timestamp: Date;
28
+ healthy: boolean;
29
+ latency?: number;
30
+ }>;
31
+ }
32
+ /**
33
+ * Strategy selection metrics
34
+ */
35
+ export interface StrategyMetrics {
36
+ totalSelections: number;
37
+ selectionsByProvider: Map<string, number>;
38
+ selectionsByStrategy: Map<string, number>;
39
+ averageSelectionTime: number;
40
+ }
41
+ /**
42
+ * Overall orchestrator metrics
43
+ */
44
+ export interface OrchestratorMetrics {
45
+ totalRequests: number;
46
+ successfulRequests: number;
47
+ failedRequests: number;
48
+ totalCost: number;
49
+ providerMetrics: Map<string, ProviderMetrics>;
50
+ strategyMetrics: StrategyMetrics;
51
+ averageRequestLatency: number;
52
+ requestsPerMinute: number;
53
+ errorRate: number;
54
+ }
55
+ /**
56
+ * Event types for metrics tracking
57
+ */
58
+ export type MetricsEvent = {
59
+ type: 'provider_selected';
60
+ providerId: string;
61
+ strategy: string;
62
+ timestamp: Date;
63
+ selectionTime?: number;
64
+ } | {
65
+ type: 'request_started';
66
+ providerId: string;
67
+ timestamp: Date;
68
+ } | {
69
+ type: 'request_success';
70
+ providerId: string;
71
+ response: ChatResponse;
72
+ latency: number;
73
+ timestamp: Date;
74
+ } | {
75
+ type: 'request_failure';
76
+ providerId: string;
77
+ error: Error;
78
+ latency?: number;
79
+ timestamp: Date;
80
+ } | {
81
+ type: 'health_check';
82
+ providerId: string;
83
+ health: ProviderHealth;
84
+ timestamp: Date;
85
+ };
86
+ /**
87
+ * Callback function for metrics events
88
+ */
89
+ export type MetricsCallback = (event: MetricsEvent) => void;
90
+ /**
91
+ * Metrics collector for tracking orchestrator usage
92
+ */
93
+ export declare class MetricsCollector {
94
+ private providerMetrics;
95
+ private strategyMetrics;
96
+ private requestHistory;
97
+ private callbacks;
98
+ private selectionTimes;
99
+ /**
100
+ * Register a callback for metrics events
101
+ */
102
+ onEvent(callback: MetricsCallback): () => void;
103
+ /**
104
+ * Emit a metrics event
105
+ */
106
+ private emit;
107
+ /**
108
+ * Record provider selection
109
+ */
110
+ recordSelection(provider: AIService, strategy: string, selectionTime?: number): void;
111
+ /**
112
+ * Record request start
113
+ */
114
+ recordRequestStart(provider: AIService): void;
115
+ /**
116
+ * Record successful request
117
+ */
118
+ recordSuccess(provider: AIService, response: ChatResponse, latency: number): void;
119
+ /**
120
+ * Record failed request
121
+ */
122
+ recordFailure(provider: AIService, error: Error, latency?: number): void;
123
+ /**
124
+ * Record health check
125
+ */
126
+ recordHealthCheck(provider: AIService, health: ProviderHealth): void;
127
+ /**
128
+ * Get or create provider metrics
129
+ */
130
+ private getOrCreateProviderMetrics;
131
+ /**
132
+ * Get metrics for a specific provider
133
+ */
134
+ getProviderMetrics(providerId: string): ProviderMetrics | undefined;
135
+ /**
136
+ * Get all provider metrics
137
+ */
138
+ getAllProviderMetrics(): Map<string, ProviderMetrics>;
139
+ /**
140
+ * Get strategy metrics
141
+ */
142
+ getStrategyMetrics(): StrategyMetrics;
143
+ /**
144
+ * Get overall orchestrator metrics
145
+ */
146
+ getOrchestratorMetrics(): OrchestratorMetrics;
147
+ /**
148
+ * Reset all metrics
149
+ */
150
+ reset(): void;
151
+ /**
152
+ * Get request history (optionally filtered)
153
+ */
154
+ getRequestHistory(options?: {
155
+ providerId?: string;
156
+ startTime?: Date;
157
+ endTime?: Date;
158
+ limit?: number;
159
+ }): typeof this.requestHistory;
160
+ }
161
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/core/metrics.ts"],"names":[],"mappings":"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"}