@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.
- package/README.md +145 -5
- 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/core/interfaces.d.ts +80 -1
- package/dist/core/interfaces.d.ts.map +1 -1
- package/dist/core/metrics.d.ts +161 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +276 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/orchestrator.d.ts +45 -3
- package/dist/core/orchestrator.d.ts.map +1 -1
- package/dist/core/orchestrator.js +271 -11
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/types.d.ts +39 -0
- package/dist/core/types.d.ts.map +1 -1
- 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/dist/factory/index.d.ts.map +1 -1
- package/dist/factory/index.js +27 -7
- package/dist/factory/index.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/cerebras.d.ts.map +1 -1
- package/dist/providers/cerebras.js +22 -4
- package/dist/providers/cerebras.js.map +1 -1
- package/dist/providers/groq.d.ts.map +1 -1
- package/dist/providers/groq.js +22 -4
- package/dist/providers/groq.js.map +1 -1
- package/dist/providers/local.d.ts.map +1 -1
- package/dist/providers/local.js +9 -1
- package/dist/providers/local.js.map +1 -1
- package/dist/providers/openrouter.d.ts.map +1 -1
- package/dist/providers/openrouter.js +18 -2
- package/dist/providers/openrouter.js.map +1 -1
- package/docs/CHANGELOG.md +36 -0
- package/examples/README.md +205 -0
- package/examples/basic.ts +51 -17
- package/examples/chat-app/config.json +20 -1
- package/examples/chat-app/index.ts +41 -2
- package/examples/config.example.json +26 -4
- package/examples/language.ts +160 -0
- package/examples/metrics.ts +151 -0
- package/examples/strategies.ts +4 -2
- package/examples/test-local.ts +6 -6
- package/package.json +20 -7
- package/tsconfig.cjs.json +9 -0
- package/tsconfig.esm.json +9 -0
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Core orchestrator that manages providers and strategies
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Orchestrator = void 0;
|
|
7
|
+
const metrics_js_1 = require("./metrics.js");
|
|
8
|
+
/**
|
|
9
|
+
* Language instruction mapping
|
|
10
|
+
*/
|
|
11
|
+
const LANGUAGE_INSTRUCTIONS = {
|
|
12
|
+
// ISO 639-1 codes
|
|
13
|
+
es: 'Responde siempre en español.',
|
|
14
|
+
en: 'Respond always in English.',
|
|
15
|
+
fr: 'Répondez toujours en français.',
|
|
16
|
+
de: 'Antworte immer auf Deutsch.',
|
|
17
|
+
it: 'Rispondi sempre in italiano.',
|
|
18
|
+
pt: 'Responda sempre em português.',
|
|
19
|
+
ja: '常に日本語で回答してください。',
|
|
20
|
+
zh: '请始终用中文回答。',
|
|
21
|
+
ru: 'Всегда отвечайте на русском языке.',
|
|
22
|
+
ko: '항상 한국어로 답변하세요.',
|
|
23
|
+
ar: 'أجب دائماً بالعربية.',
|
|
24
|
+
hi: 'हमेशा हिंदी में उत्तर दें।',
|
|
25
|
+
nl: 'Antwoord altijd in het Nederlands.',
|
|
26
|
+
pl: 'Zawsze odpowiadaj po polsku.',
|
|
27
|
+
sv: 'Svara alltid på svenska.',
|
|
28
|
+
tr: 'Her zaman Türkçe cevap verin.',
|
|
29
|
+
// Full language names
|
|
30
|
+
spanish: 'Responde siempre en español.',
|
|
31
|
+
english: 'Respond always in English.',
|
|
32
|
+
french: 'Répondez toujours en français.',
|
|
33
|
+
german: 'Antworte immer auf Deutsch.',
|
|
34
|
+
italian: 'Rispondi sempre in italiano.',
|
|
35
|
+
portuguese: 'Responda sempre em português.',
|
|
36
|
+
japanese: '常に日本語で回答してください。',
|
|
37
|
+
chinese: '请始终用中文回答。',
|
|
38
|
+
russian: 'Всегда отвечайте на русском языке.',
|
|
39
|
+
korean: '항상 한국어로 답변하세요.',
|
|
40
|
+
arabic: 'أجب دائماً بالعربية.',
|
|
41
|
+
hindi: 'हमेशा हिंदी में उत्तर दें।',
|
|
42
|
+
dutch: 'Antwoord altijd in het Nederlands.',
|
|
43
|
+
polish: 'Zawsze odpowiadaj po polsku.',
|
|
44
|
+
swedish: 'Svara alltid på svenska.',
|
|
45
|
+
turkish: 'Her zaman Türkçe cevap verin.',
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Get language instruction for a given language code or name
|
|
49
|
+
*/
|
|
50
|
+
function getLanguageInstruction(language) {
|
|
51
|
+
const normalized = language.toLowerCase().trim();
|
|
52
|
+
return LANGUAGE_INSTRUCTIONS[normalized] || `Respond always in ${language}.`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Process messages to add language instruction if responseLanguage is specified
|
|
56
|
+
*/
|
|
57
|
+
function processMessagesWithLanguage(messages, options) {
|
|
58
|
+
if (!options?.responseLanguage) {
|
|
59
|
+
return messages;
|
|
60
|
+
}
|
|
61
|
+
// Check if there's already a system message
|
|
62
|
+
const hasSystemMessage = messages.some((msg) => msg.role === 'system');
|
|
63
|
+
// If there's already a system message, prepend the language instruction to it
|
|
64
|
+
if (hasSystemMessage) {
|
|
65
|
+
const languageInstruction = getLanguageInstruction(options.responseLanguage);
|
|
66
|
+
return messages.map((msg) => {
|
|
67
|
+
if (msg.role === 'system') {
|
|
68
|
+
return {
|
|
69
|
+
...msg,
|
|
70
|
+
content: `${languageInstruction}\n\n${msg.content}`,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return msg;
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
// Otherwise, add a new system message at the beginning
|
|
77
|
+
const languageInstruction = getLanguageInstruction(options.responseLanguage);
|
|
78
|
+
return [
|
|
79
|
+
{ role: 'system', content: languageInstruction },
|
|
80
|
+
...messages,
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
class Orchestrator {
|
|
84
|
+
constructor(strategy, options) {
|
|
85
|
+
this.providers = new Map();
|
|
86
|
+
this.circuitBreakerStates = new Map();
|
|
87
|
+
this.providerFailureCounts = new Map();
|
|
88
|
+
this.strategy = strategy;
|
|
89
|
+
this.maxRetries = options?.maxRetries ?? -1; // -1 means use providers.size
|
|
90
|
+
this.requestTimeout = options?.requestTimeout ?? 30000; // 30 seconds default
|
|
91
|
+
this.retryDelay = options?.retryDelay ?? 1000; // 1 second default
|
|
92
|
+
this.circuitBreaker = options?.circuitBreaker;
|
|
93
|
+
this.healthCheckConfig = options?.healthCheck;
|
|
94
|
+
this.strategyName = strategy.constructor.name.replace('Strategy', '').toLowerCase();
|
|
95
|
+
// Initialize metrics collector
|
|
96
|
+
this.metrics = new metrics_js_1.MetricsCollector();
|
|
97
|
+
if (options?.enableMetrics !== false) {
|
|
98
|
+
// Enable metrics by default
|
|
99
|
+
if (options?.onMetricsEvent) {
|
|
100
|
+
this.metrics.onEvent(options.onMetricsEvent);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Register a provider
|
|
106
|
+
*/
|
|
107
|
+
registerProvider(provider) {
|
|
108
|
+
this.providers.set(provider.id, provider);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Unregister a provider
|
|
112
|
+
*/
|
|
113
|
+
unregisterProvider(id) {
|
|
114
|
+
this.providers.delete(id);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get a provider by ID
|
|
118
|
+
*/
|
|
119
|
+
getProvider(id) {
|
|
120
|
+
return this.providers.get(id);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get all registered providers
|
|
124
|
+
*/
|
|
125
|
+
getAllProviders() {
|
|
126
|
+
return Array.from(this.providers.values());
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Check if a provider's circuit breaker is open
|
|
130
|
+
*/
|
|
131
|
+
isCircuitBreakerOpen(providerId) {
|
|
132
|
+
if (!this.circuitBreaker?.enabled) {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
const state = this.circuitBreakerStates.get(providerId);
|
|
136
|
+
if (!state || !state.isOpen) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
// Check if reset timeout has passed
|
|
140
|
+
if (state.lastFailureTime) {
|
|
141
|
+
const resetTimeout = this.circuitBreaker.resetTimeout ?? 60000;
|
|
142
|
+
if (Date.now() - state.lastFailureTime >= resetTimeout) {
|
|
143
|
+
// Reset circuit breaker
|
|
144
|
+
this.circuitBreakerStates.set(providerId, {
|
|
145
|
+
failures: 0,
|
|
146
|
+
isOpen: false,
|
|
147
|
+
});
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Record a provider failure for circuit breaker
|
|
155
|
+
*/
|
|
156
|
+
recordFailure(providerId) {
|
|
157
|
+
if (!this.circuitBreaker?.enabled) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const state = this.circuitBreakerStates.get(providerId) || {
|
|
161
|
+
failures: 0,
|
|
162
|
+
isOpen: false,
|
|
163
|
+
};
|
|
164
|
+
state.failures++;
|
|
165
|
+
state.lastFailureTime = Date.now();
|
|
166
|
+
const threshold = this.circuitBreaker.failureThreshold ?? 5;
|
|
167
|
+
if (state.failures >= threshold) {
|
|
168
|
+
state.isOpen = true;
|
|
169
|
+
}
|
|
170
|
+
this.circuitBreakerStates.set(providerId, state);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Record a provider success (reset circuit breaker)
|
|
174
|
+
*/
|
|
175
|
+
recordSuccess(providerId) {
|
|
176
|
+
if (!this.circuitBreaker?.enabled) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
this.circuitBreakerStates.set(providerId, {
|
|
180
|
+
failures: 0,
|
|
181
|
+
isOpen: false,
|
|
182
|
+
});
|
|
183
|
+
this.providerFailureCounts.set(providerId, 0);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get enabled providers (those that pass basic checks)
|
|
187
|
+
*/
|
|
188
|
+
async getAvailableProviders() {
|
|
189
|
+
const providers = this.getAllProviders();
|
|
190
|
+
const available = [];
|
|
191
|
+
const healthCheckTimeout = this.healthCheckConfig?.timeout ?? 5000; // 5 seconds default
|
|
192
|
+
for (const provider of providers) {
|
|
193
|
+
// Check circuit breaker
|
|
194
|
+
if (this.isCircuitBreakerOpen(provider.id)) {
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
// Check consecutive failures
|
|
198
|
+
const consecutiveFailures = this.providerFailureCounts.get(provider.id) ?? 0;
|
|
199
|
+
const maxFailures = this.healthCheckConfig?.maxConsecutiveFailures ?? 3;
|
|
200
|
+
if (consecutiveFailures >= maxFailures) {
|
|
201
|
+
continue;
|
|
202
|
+
}
|
|
203
|
+
try {
|
|
204
|
+
// Use Promise.race to implement timeout
|
|
205
|
+
const healthPromise = provider.checkHealth();
|
|
206
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Health check timeout')), healthCheckTimeout));
|
|
207
|
+
const health = await Promise.race([healthPromise, timeoutPromise]);
|
|
208
|
+
// Record health check in metrics
|
|
209
|
+
this.metrics.recordHealthCheck(provider, health);
|
|
210
|
+
// Check latency threshold
|
|
211
|
+
const latencyThreshold = this.healthCheckConfig?.latencyThreshold ?? 10000; // 10 seconds default
|
|
212
|
+
if (health.healthy) {
|
|
213
|
+
if (!health.latency || health.latency <= latencyThreshold) {
|
|
214
|
+
available.push(provider);
|
|
215
|
+
this.providerFailureCounts.set(provider.id, 0);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Skip unhealthy providers
|
|
221
|
+
const currentFailures = this.providerFailureCounts.get(provider.id) ?? 0;
|
|
222
|
+
this.providerFailureCounts.set(provider.id, currentFailures + 1);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return available;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Select a provider using the configured strategy
|
|
229
|
+
*/
|
|
230
|
+
async selectProvider(context) {
|
|
231
|
+
const startTime = Date.now();
|
|
232
|
+
const available = await this.getAvailableProviders();
|
|
233
|
+
if (available.length === 0) {
|
|
234
|
+
return null;
|
|
235
|
+
}
|
|
236
|
+
const provider = await this.strategy.select(available, context);
|
|
237
|
+
if (provider) {
|
|
238
|
+
const selectionTime = Date.now() - startTime;
|
|
239
|
+
this.metrics.recordSelection(provider, this.strategyName, selectionTime);
|
|
240
|
+
}
|
|
241
|
+
return provider;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Calculate retry delay based on attempt number
|
|
245
|
+
*/
|
|
246
|
+
getRetryDelay(attempt) {
|
|
247
|
+
if (this.retryDelay === 'exponential') {
|
|
248
|
+
return Math.min(1000 * Math.pow(2, attempt), 30000); // Max 30 seconds
|
|
249
|
+
}
|
|
250
|
+
return this.retryDelay;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Perform a chat completion with automatic provider selection and fallback
|
|
254
|
+
*/
|
|
255
|
+
async chat(messages, options) {
|
|
256
|
+
// Process messages to add language instruction if responseLanguage is specified
|
|
257
|
+
const processedMessages = processMessagesWithLanguage(messages, options);
|
|
258
|
+
const context = {
|
|
259
|
+
messages: processedMessages,
|
|
260
|
+
options,
|
|
261
|
+
previousAttempts: [],
|
|
262
|
+
};
|
|
263
|
+
// Determine max attempts
|
|
264
|
+
const maxAttempts = this.maxRetries === -1 ? this.providers.size || 1 : this.maxRetries;
|
|
265
|
+
let lastError = null;
|
|
266
|
+
// Get timeout (request-level or global)
|
|
267
|
+
const timeout = options?.timeout ?? this.requestTimeout;
|
|
268
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
269
|
+
// Add delay between retries (except first attempt)
|
|
270
|
+
if (attempt > 0) {
|
|
271
|
+
const delay = this.getRetryDelay(attempt - 1);
|
|
272
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
273
|
+
}
|
|
274
|
+
const provider = await this.selectProvider(context);
|
|
275
|
+
if (!provider) {
|
|
276
|
+
throw new Error('No available providers. All providers are unhealthy or unavailable.');
|
|
277
|
+
}
|
|
278
|
+
// Skip providers we've already tried
|
|
279
|
+
if (context.previousAttempts?.includes(provider.id)) {
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
try {
|
|
283
|
+
this.metrics.recordRequestStart(provider);
|
|
284
|
+
const requestStart = Date.now();
|
|
285
|
+
// Wrap provider call with timeout
|
|
286
|
+
const chatPromise = provider.chat(processedMessages, options);
|
|
287
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Request timeout')), timeout));
|
|
288
|
+
const response = await Promise.race([chatPromise, timeoutPromise]);
|
|
289
|
+
const latency = Date.now() - requestStart;
|
|
290
|
+
this.strategy.update?.(provider, true, { response });
|
|
291
|
+
this.recordSuccess(provider.id);
|
|
292
|
+
this.metrics.recordSuccess(provider, response, latency);
|
|
293
|
+
return response;
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
const requestStart = Date.now();
|
|
297
|
+
const latency = Date.now() - requestStart;
|
|
298
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
299
|
+
context.previousAttempts?.push(provider.id);
|
|
300
|
+
this.strategy.update?.(provider, false, { error });
|
|
301
|
+
this.recordFailure(provider.id);
|
|
302
|
+
this.metrics.recordFailure(provider, lastError, latency);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
throw lastError || new Error('Failed to get response from any provider');
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Perform a streaming chat completion with automatic provider selection
|
|
309
|
+
*/
|
|
310
|
+
async chatStream(messages, options) {
|
|
311
|
+
// Process messages to add language instruction if responseLanguage is specified
|
|
312
|
+
const processedMessages = processMessagesWithLanguage(messages, options);
|
|
313
|
+
const context = {
|
|
314
|
+
messages: processedMessages,
|
|
315
|
+
options: { ...options, stream: true },
|
|
316
|
+
previousAttempts: [],
|
|
317
|
+
};
|
|
318
|
+
const provider = await this.selectProvider(context);
|
|
319
|
+
if (!provider) {
|
|
320
|
+
throw new Error('No available providers. All providers are unhealthy or unavailable.');
|
|
321
|
+
}
|
|
322
|
+
// Get timeout (request-level or global)
|
|
323
|
+
const timeout = options?.timeout ?? this.requestTimeout;
|
|
324
|
+
try {
|
|
325
|
+
this.metrics.recordRequestStart(provider);
|
|
326
|
+
// Wrap provider call with timeout
|
|
327
|
+
const streamPromise = provider.chatStream(processedMessages, options);
|
|
328
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Request timeout')), timeout));
|
|
329
|
+
const stream = await Promise.race([streamPromise, timeoutPromise]);
|
|
330
|
+
// Note: For streaming, we can't track success until stream completes
|
|
331
|
+
// This is a limitation - we'd need to wrap the stream to track completion
|
|
332
|
+
// Latency tracking would require wrapping the stream reader
|
|
333
|
+
this.strategy.update?.(provider, true);
|
|
334
|
+
this.recordSuccess(provider.id);
|
|
335
|
+
return stream;
|
|
336
|
+
}
|
|
337
|
+
catch (error) {
|
|
338
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
339
|
+
this.strategy.update?.(provider, false, { error });
|
|
340
|
+
this.recordFailure(provider.id);
|
|
341
|
+
// For streaming errors, we can't measure latency accurately
|
|
342
|
+
this.metrics.recordFailure(provider, err);
|
|
343
|
+
throw error;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Start periodic health checks
|
|
348
|
+
*/
|
|
349
|
+
startHealthChecks(intervalMs) {
|
|
350
|
+
this.stopHealthChecks();
|
|
351
|
+
const interval = intervalMs ?? this.healthCheckConfig?.interval ?? 60000; // Default 60 seconds
|
|
352
|
+
if (interval < 1000) {
|
|
353
|
+
console.warn('Health check interval is very low (< 1000ms). Consider using at least 1000ms.');
|
|
354
|
+
}
|
|
355
|
+
this.healthCheckInterval = setInterval(async () => {
|
|
356
|
+
const providers = this.getAllProviders();
|
|
357
|
+
const healthCheckTimeout = this.healthCheckConfig?.timeout ?? 5000; // 5 seconds default
|
|
358
|
+
await Promise.allSettled(providers.map(async (p) => {
|
|
359
|
+
try {
|
|
360
|
+
const healthPromise = p.checkHealth();
|
|
361
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error('Health check timeout')), healthCheckTimeout));
|
|
362
|
+
await Promise.race([healthPromise, timeoutPromise]);
|
|
363
|
+
this.providerFailureCounts.set(p.id, 0);
|
|
364
|
+
}
|
|
365
|
+
catch {
|
|
366
|
+
const currentFailures = this.providerFailureCounts.get(p.id) ?? 0;
|
|
367
|
+
this.providerFailureCounts.set(p.id, currentFailures + 1);
|
|
368
|
+
}
|
|
369
|
+
}));
|
|
370
|
+
}, interval);
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Stop periodic health checks
|
|
374
|
+
*/
|
|
375
|
+
stopHealthChecks() {
|
|
376
|
+
if (this.healthCheckInterval) {
|
|
377
|
+
clearInterval(this.healthCheckInterval);
|
|
378
|
+
this.healthCheckInterval = undefined;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Get metrics collector instance
|
|
383
|
+
*/
|
|
384
|
+
getMetrics() {
|
|
385
|
+
return this.metrics;
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Register a callback for metrics events
|
|
389
|
+
*/
|
|
390
|
+
onMetricsEvent(callback) {
|
|
391
|
+
return this.metrics.onEvent(callback);
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Cleanup resources
|
|
395
|
+
*/
|
|
396
|
+
dispose() {
|
|
397
|
+
this.stopHealthChecks();
|
|
398
|
+
this.providers.clear();
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
exports.Orchestrator = Orchestrator;
|
|
402
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/core/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core types and interfaces for the AI Orchestration Framework
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Represents a chat message in a conversation
|
|
6
|
+
*/
|
|
7
|
+
export interface ChatMessage {
|
|
8
|
+
role: 'system' | 'user' | 'assistant';
|
|
9
|
+
content: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Options for chat completion requests
|
|
13
|
+
*/
|
|
14
|
+
export interface ChatOptions {
|
|
15
|
+
temperature?: number;
|
|
16
|
+
maxTokens?: number;
|
|
17
|
+
topP?: number;
|
|
18
|
+
topK?: number;
|
|
19
|
+
stream?: boolean;
|
|
20
|
+
stopSequences?: string[];
|
|
21
|
+
/**
|
|
22
|
+
* Force the response language. When set, automatically prepends a system message
|
|
23
|
+
* instructing the model to respond in the specified language.
|
|
24
|
+
*
|
|
25
|
+
* Supported values: ISO 639-1 language codes (e.g., 'es', 'en', 'fr', 'de', 'it', 'pt', 'ja', 'zh', 'ru')
|
|
26
|
+
* or full language names (e.g., 'spanish', 'english', 'french').
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```typescript
|
|
30
|
+
* await orchestrator.chat(messages, { responseLanguage: 'es' });
|
|
31
|
+
* await orchestrator.chat(messages, { responseLanguage: 'spanish' });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
responseLanguage?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Number between -2.0 and 2.0. Positive values penalize new tokens based on their
|
|
37
|
+
* existing frequency in the text so far, decreasing the model's likelihood to
|
|
38
|
+
* repeat the same line verbatim.
|
|
39
|
+
*/
|
|
40
|
+
frequencyPenalty?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Number between -2.0 and 2.0. Positive values penalize new tokens based on whether
|
|
43
|
+
* they appear in the text so far, increasing the model's likelihood to talk about
|
|
44
|
+
* new topics.
|
|
45
|
+
*/
|
|
46
|
+
presencePenalty?: number;
|
|
47
|
+
/**
|
|
48
|
+
* If specified, the system will make a best effort to sample deterministically,
|
|
49
|
+
* such that repeated requests with the same seed and parameters should return the same result.
|
|
50
|
+
*/
|
|
51
|
+
seed?: number | null;
|
|
52
|
+
/**
|
|
53
|
+
* Request timeout in milliseconds. If not specified, uses the orchestrator's default timeout.
|
|
54
|
+
*/
|
|
55
|
+
timeout?: number;
|
|
56
|
+
/**
|
|
57
|
+
* A unique identifier representing your end-user, which can help to monitor and detect abuse.
|
|
58
|
+
*/
|
|
59
|
+
user?: string;
|
|
60
|
+
[key: string]: unknown;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Response from a chat completion (non-streaming)
|
|
64
|
+
*/
|
|
65
|
+
export interface ChatResponse {
|
|
66
|
+
content: string;
|
|
67
|
+
usage?: {
|
|
68
|
+
promptTokens: number;
|
|
69
|
+
completionTokens: number;
|
|
70
|
+
totalTokens: number;
|
|
71
|
+
};
|
|
72
|
+
model?: string;
|
|
73
|
+
finishReason?: string;
|
|
74
|
+
metadata?: Record<string, unknown>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Streaming chunk from a chat completion
|
|
78
|
+
*/
|
|
79
|
+
export interface ChatChunk {
|
|
80
|
+
content: string;
|
|
81
|
+
done: boolean;
|
|
82
|
+
usage?: {
|
|
83
|
+
promptTokens?: number;
|
|
84
|
+
completionTokens?: number;
|
|
85
|
+
totalTokens?: number;
|
|
86
|
+
};
|
|
87
|
+
finishReason?: string;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Health status of a provider
|
|
91
|
+
*/
|
|
92
|
+
export interface ProviderHealth {
|
|
93
|
+
healthy: boolean;
|
|
94
|
+
latency?: number;
|
|
95
|
+
lastChecked?: Date;
|
|
96
|
+
error?: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Provider metadata
|
|
100
|
+
*/
|
|
101
|
+
export interface ProviderMetadata {
|
|
102
|
+
id: string;
|
|
103
|
+
name: string;
|
|
104
|
+
model?: string;
|
|
105
|
+
costPerToken?: {
|
|
106
|
+
prompt: number;
|
|
107
|
+
completion: number;
|
|
108
|
+
};
|
|
109
|
+
capabilities?: string[];
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory for creating orchestrators from configuration
|
|
3
|
+
*/
|
|
4
|
+
import { Orchestrator } from '../core/orchestrator.js';
|
|
5
|
+
import type { OrchestratorConfig } from '../core/interfaces.js';
|
|
6
|
+
/**
|
|
7
|
+
* Create an orchestrator from configuration
|
|
8
|
+
*/
|
|
9
|
+
export declare function createOrchestrator(config: OrchestratorConfig): Orchestrator;
|
|
10
|
+
/**
|
|
11
|
+
* Type guard to check if a config is valid
|
|
12
|
+
*/
|
|
13
|
+
export declare function isValidOrchestratorConfig(config: unknown): config is OrchestratorConfig;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/factory/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,uBAAuB,CAAC;AAyK/B;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAuE3E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,OAAO,GACd,MAAM,IAAI,kBAAkB,CAqB9B"}
|