@ai-orchestration/core 0.2.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.
- package/README.md +16 -0
- package/dist/cjs/core/errors.d.ts +21 -0
- package/dist/cjs/core/errors.d.ts.map +1 -0
- package/dist/cjs/core/errors.js +40 -0
- package/dist/cjs/core/errors.js.map +1 -0
- package/dist/cjs/core/interfaces.d.ts +166 -0
- package/dist/cjs/core/interfaces.d.ts.map +1 -0
- package/dist/cjs/core/interfaces.js +6 -0
- package/dist/cjs/core/interfaces.js.map +1 -0
- package/dist/cjs/core/metrics.d.ts +161 -0
- package/dist/cjs/core/metrics.d.ts.map +1 -0
- package/dist/cjs/core/metrics.js +282 -0
- package/dist/cjs/core/metrics.js.map +1 -0
- package/dist/cjs/core/orchestrator.d.ts +97 -0
- package/dist/cjs/core/orchestrator.d.ts.map +1 -0
- package/dist/cjs/core/orchestrator.js +402 -0
- package/dist/cjs/core/orchestrator.js.map +1 -0
- package/dist/cjs/core/types.d.ts +111 -0
- package/dist/cjs/core/types.d.ts.map +1 -0
- package/dist/cjs/core/types.js +6 -0
- package/dist/cjs/core/types.js.map +1 -0
- package/dist/cjs/factory/index.d.ts +14 -0
- package/dist/cjs/factory/index.d.ts.map +1 -0
- package/dist/cjs/factory/index.js +208 -0
- package/dist/cjs/factory/index.js.map +1 -0
- package/dist/cjs/index.d.ts +16 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +37 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/providers/base.d.ts +30 -0
- package/dist/cjs/providers/base.d.ts.map +1 -0
- package/dist/cjs/providers/base.js +35 -0
- package/dist/cjs/providers/base.js.map +1 -0
- package/dist/cjs/providers/cerebras.d.ts +26 -0
- package/dist/cjs/providers/cerebras.d.ts.map +1 -0
- package/dist/cjs/providers/cerebras.js +207 -0
- package/dist/cjs/providers/cerebras.js.map +1 -0
- package/dist/cjs/providers/gemini.d.ts +26 -0
- package/dist/cjs/providers/gemini.d.ts.map +1 -0
- package/dist/cjs/providers/gemini.js +180 -0
- package/dist/cjs/providers/gemini.js.map +1 -0
- package/dist/cjs/providers/groq.d.ts +26 -0
- package/dist/cjs/providers/groq.d.ts.map +1 -0
- package/dist/cjs/providers/groq.js +242 -0
- package/dist/cjs/providers/groq.js.map +1 -0
- package/dist/cjs/providers/index.d.ts +15 -0
- package/dist/cjs/providers/index.d.ts.map +1 -0
- package/dist/cjs/providers/index.js +19 -0
- package/dist/cjs/providers/index.js.map +1 -0
- package/dist/cjs/providers/local.d.ts +27 -0
- package/dist/cjs/providers/local.d.ts.map +1 -0
- package/dist/cjs/providers/local.js +205 -0
- package/dist/cjs/providers/local.js.map +1 -0
- package/dist/cjs/providers/openrouter.d.ts +26 -0
- package/dist/cjs/providers/openrouter.d.ts.map +1 -0
- package/dist/cjs/providers/openrouter.js +187 -0
- package/dist/cjs/providers/openrouter.js.map +1 -0
- package/dist/cjs/strategies/base.d.ts +16 -0
- package/dist/cjs/strategies/base.d.ts.map +1 -0
- package/dist/cjs/strategies/base.js +25 -0
- package/dist/cjs/strategies/base.js.map +1 -0
- package/dist/cjs/strategies/fallback.d.ts +14 -0
- package/dist/cjs/strategies/fallback.d.ts.map +1 -0
- package/dist/cjs/strategies/fallback.js +32 -0
- package/dist/cjs/strategies/fallback.js.map +1 -0
- package/dist/cjs/strategies/health-aware.d.ts +20 -0
- package/dist/cjs/strategies/health-aware.d.ts.map +1 -0
- package/dist/cjs/strategies/health-aware.js +108 -0
- package/dist/cjs/strategies/health-aware.js.map +1 -0
- package/dist/cjs/strategies/index.d.ts +14 -0
- package/dist/cjs/strategies/index.d.ts.map +1 -0
- package/dist/cjs/strategies/index.js +19 -0
- package/dist/cjs/strategies/index.js.map +1 -0
- package/dist/cjs/strategies/priority.d.ts +18 -0
- package/dist/cjs/strategies/priority.d.ts.map +1 -0
- package/dist/cjs/strategies/priority.js +39 -0
- package/dist/cjs/strategies/priority.js.map +1 -0
- package/dist/cjs/strategies/round-robin.d.ts +10 -0
- package/dist/cjs/strategies/round-robin.d.ts.map +1 -0
- package/dist/cjs/strategies/round-robin.js +28 -0
- package/dist/cjs/strategies/round-robin.js.map +1 -0
- package/dist/cjs/strategies/weighted.d.ts +20 -0
- package/dist/cjs/strategies/weighted.d.ts.map +1 -0
- package/dist/cjs/strategies/weighted.js +61 -0
- package/dist/cjs/strategies/weighted.js.map +1 -0
- package/dist/esm/core/errors.d.ts +21 -0
- package/dist/esm/core/errors.d.ts.map +1 -0
- package/dist/esm/core/errors.js +33 -0
- package/dist/esm/core/errors.js.map +1 -0
- package/dist/esm/core/interfaces.d.ts +166 -0
- package/dist/esm/core/interfaces.d.ts.map +1 -0
- package/dist/esm/core/interfaces.js +5 -0
- package/dist/esm/core/interfaces.js.map +1 -0
- package/dist/esm/core/metrics.d.ts +161 -0
- package/dist/esm/core/metrics.d.ts.map +1 -0
- package/dist/esm/core/metrics.js +278 -0
- package/dist/esm/core/metrics.js.map +1 -0
- package/dist/esm/core/orchestrator.d.ts +97 -0
- package/dist/esm/core/orchestrator.d.ts.map +1 -0
- package/dist/esm/core/orchestrator.js +398 -0
- package/dist/esm/core/orchestrator.js.map +1 -0
- package/dist/esm/core/types.d.ts +111 -0
- package/dist/esm/core/types.d.ts.map +1 -0
- package/dist/esm/core/types.js +5 -0
- package/dist/esm/core/types.js.map +1 -0
- package/dist/esm/factory/index.d.ts +14 -0
- package/dist/esm/factory/index.d.ts.map +1 -0
- package/dist/esm/factory/index.js +204 -0
- package/dist/esm/factory/index.js.map +1 -0
- package/dist/esm/index.d.ts +16 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +16 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/providers/base.d.ts +30 -0
- package/dist/esm/providers/base.d.ts.map +1 -0
- package/dist/esm/providers/base.js +31 -0
- package/dist/esm/providers/base.js.map +1 -0
- package/dist/esm/providers/cerebras.d.ts +26 -0
- package/dist/esm/providers/cerebras.d.ts.map +1 -0
- package/dist/esm/providers/cerebras.js +203 -0
- package/dist/esm/providers/cerebras.js.map +1 -0
- package/dist/esm/providers/gemini.d.ts +26 -0
- package/dist/esm/providers/gemini.d.ts.map +1 -0
- package/dist/esm/providers/gemini.js +176 -0
- package/dist/esm/providers/gemini.js.map +1 -0
- package/dist/esm/providers/groq.d.ts +26 -0
- package/dist/esm/providers/groq.d.ts.map +1 -0
- package/dist/esm/providers/groq.js +238 -0
- package/dist/esm/providers/groq.js.map +1 -0
- package/dist/esm/providers/index.d.ts +15 -0
- package/dist/esm/providers/index.d.ts.map +1 -0
- package/dist/esm/providers/index.js +10 -0
- package/dist/esm/providers/index.js.map +1 -0
- package/dist/esm/providers/local.d.ts +27 -0
- package/dist/esm/providers/local.d.ts.map +1 -0
- package/dist/esm/providers/local.js +201 -0
- package/dist/esm/providers/local.js.map +1 -0
- package/dist/esm/providers/openrouter.d.ts +26 -0
- package/dist/esm/providers/openrouter.d.ts.map +1 -0
- package/dist/esm/providers/openrouter.js +183 -0
- package/dist/esm/providers/openrouter.js.map +1 -0
- package/dist/esm/strategies/base.d.ts +16 -0
- package/dist/esm/strategies/base.d.ts.map +1 -0
- package/dist/esm/strategies/base.js +21 -0
- package/dist/esm/strategies/base.js.map +1 -0
- package/dist/esm/strategies/fallback.d.ts +14 -0
- package/dist/esm/strategies/fallback.d.ts.map +1 -0
- package/dist/esm/strategies/fallback.js +28 -0
- package/dist/esm/strategies/fallback.js.map +1 -0
- package/dist/esm/strategies/health-aware.d.ts +20 -0
- package/dist/esm/strategies/health-aware.d.ts.map +1 -0
- package/dist/esm/strategies/health-aware.js +104 -0
- package/dist/esm/strategies/health-aware.js.map +1 -0
- package/dist/esm/strategies/index.d.ts +14 -0
- package/dist/esm/strategies/index.d.ts.map +1 -0
- package/dist/esm/strategies/index.js +10 -0
- package/dist/esm/strategies/index.js.map +1 -0
- package/dist/esm/strategies/priority.d.ts +18 -0
- package/dist/esm/strategies/priority.d.ts.map +1 -0
- package/dist/esm/strategies/priority.js +35 -0
- package/dist/esm/strategies/priority.js.map +1 -0
- package/dist/esm/strategies/round-robin.d.ts +10 -0
- package/dist/esm/strategies/round-robin.d.ts.map +1 -0
- package/dist/esm/strategies/round-robin.js +24 -0
- package/dist/esm/strategies/round-robin.js.map +1 -0
- package/dist/esm/strategies/weighted.d.ts +20 -0
- package/dist/esm/strategies/weighted.d.ts.map +1 -0
- package/dist/esm/strategies/weighted.js +57 -0
- package/dist/esm/strategies/weighted.js.map +1 -0
- package/examples/metrics.ts +1 -0
- package/package.json +15 -6
- package/tsconfig.cjs.json +9 -0
- 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
|
|
@@ -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 @@
|
|
|
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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"}
|