@absolutejs/voice 0.0.22-beta.13 → 0.0.22-beta.14
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/dist/index.js +24 -3
- package/dist/modelAdapters.d.ts +3 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -7265,6 +7265,21 @@ var createVoiceProviderRouter = (options) => {
|
|
|
7265
7265
|
healthState.set(provider, next);
|
|
7266
7266
|
return next;
|
|
7267
7267
|
};
|
|
7268
|
+
const cloneHealth = (provider) => {
|
|
7269
|
+
if (!healthOptions) {
|
|
7270
|
+
return;
|
|
7271
|
+
}
|
|
7272
|
+
return {
|
|
7273
|
+
...getHealth(provider)
|
|
7274
|
+
};
|
|
7275
|
+
};
|
|
7276
|
+
const getSuppressionRemainingMs = (provider) => {
|
|
7277
|
+
if (!healthOptions) {
|
|
7278
|
+
return;
|
|
7279
|
+
}
|
|
7280
|
+
const suppressedUntil = getHealth(provider).suppressedUntil;
|
|
7281
|
+
return typeof suppressedUntil === "number" ? Math.max(0, suppressedUntil - now()) : undefined;
|
|
7282
|
+
};
|
|
7268
7283
|
const isSuppressed = (provider) => {
|
|
7269
7284
|
if (!healthOptions) {
|
|
7270
7285
|
return false;
|
|
@@ -7280,10 +7295,11 @@ var createVoiceProviderRouter = (options) => {
|
|
|
7280
7295
|
health.consecutiveFailures = 0;
|
|
7281
7296
|
health.status = "healthy";
|
|
7282
7297
|
health.suppressedUntil = undefined;
|
|
7298
|
+
return cloneHealth(provider);
|
|
7283
7299
|
};
|
|
7284
7300
|
const recordProviderError = (provider, isProviderError, rateLimited) => {
|
|
7285
7301
|
if (!healthOptions || !isProviderError) {
|
|
7286
|
-
return;
|
|
7302
|
+
return cloneHealth(provider);
|
|
7287
7303
|
}
|
|
7288
7304
|
const currentTime = now();
|
|
7289
7305
|
const health = getHealth(provider);
|
|
@@ -7296,6 +7312,7 @@ var createVoiceProviderRouter = (options) => {
|
|
|
7296
7312
|
health.status = "suppressed";
|
|
7297
7313
|
health.suppressedUntil = currentTime + (rateLimited ? rateLimitCooldownMs : cooldownMs);
|
|
7298
7314
|
}
|
|
7315
|
+
return cloneHealth(provider);
|
|
7299
7316
|
};
|
|
7300
7317
|
const resolveAllowedProviders = async (input) => {
|
|
7301
7318
|
const allowProviders = policy?.allowProviders ?? options.allowProviders;
|
|
@@ -7361,12 +7378,13 @@ var createVoiceProviderRouter = (options) => {
|
|
|
7361
7378
|
const startedAt = Date.now();
|
|
7362
7379
|
try {
|
|
7363
7380
|
const output = await model.generate(input);
|
|
7364
|
-
recordProviderSuccess(provider);
|
|
7381
|
+
const providerHealth = recordProviderSuccess(provider);
|
|
7365
7382
|
await emit({
|
|
7366
7383
|
at: Date.now(),
|
|
7367
7384
|
elapsedMs: Date.now() - startedAt,
|
|
7368
7385
|
fallbackProvider: provider === selectedProvider ? undefined : provider,
|
|
7369
7386
|
provider,
|
|
7387
|
+
providerHealth,
|
|
7370
7388
|
recovered: provider !== selectedProvider,
|
|
7371
7389
|
selectedProvider,
|
|
7372
7390
|
status: provider === selectedProvider ? "success" : "fallback"
|
|
@@ -7378,7 +7396,7 @@ var createVoiceProviderRouter = (options) => {
|
|
|
7378
7396
|
const isProviderError = options.isProviderError?.(error, provider) ?? true;
|
|
7379
7397
|
const rateLimited = options.isRateLimitError?.(error, provider) ?? defaultIsRateLimitError(error);
|
|
7380
7398
|
const shouldFallback = fallbackMode === "provider-error" ? isProviderError : fallbackMode === "rate-limit" ? isProviderError && rateLimited : false;
|
|
7381
|
-
recordProviderError(provider, isProviderError, rateLimited);
|
|
7399
|
+
const providerHealth = recordProviderError(provider, isProviderError, rateLimited);
|
|
7382
7400
|
const nextProvider = hasNextProvider ? order[index + 1] : undefined;
|
|
7383
7401
|
await emit({
|
|
7384
7402
|
at: Date.now(),
|
|
@@ -7386,8 +7404,11 @@ var createVoiceProviderRouter = (options) => {
|
|
|
7386
7404
|
error: errorMessage(error),
|
|
7387
7405
|
fallbackProvider: shouldFallback ? nextProvider : undefined,
|
|
7388
7406
|
provider,
|
|
7407
|
+
providerHealth,
|
|
7389
7408
|
rateLimited,
|
|
7390
7409
|
selectedProvider,
|
|
7410
|
+
suppressionRemainingMs: getSuppressionRemainingMs(provider),
|
|
7411
|
+
suppressedUntil: providerHealth?.suppressedUntil,
|
|
7391
7412
|
status: "error"
|
|
7392
7413
|
}, input);
|
|
7393
7414
|
if (!hasNextProvider || !shouldFallback) {
|
package/dist/modelAdapters.d.ts
CHANGED
|
@@ -40,9 +40,12 @@ export type VoiceProviderRouterEvent<TProvider extends string = string> = {
|
|
|
40
40
|
error?: string;
|
|
41
41
|
fallbackProvider?: TProvider;
|
|
42
42
|
provider: TProvider;
|
|
43
|
+
providerHealth?: VoiceProviderRouterProviderHealth<TProvider>;
|
|
43
44
|
rateLimited?: boolean;
|
|
44
45
|
recovered?: boolean;
|
|
45
46
|
selectedProvider: TProvider;
|
|
47
|
+
suppressionRemainingMs?: number;
|
|
48
|
+
suppressedUntil?: number;
|
|
46
49
|
status: 'error' | 'fallback' | 'success';
|
|
47
50
|
};
|
|
48
51
|
export type VoiceProviderRouterFallbackMode = 'never' | 'provider-error' | 'rate-limit';
|