@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 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) {
@@ -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';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.13",
3
+ "version": "0.0.22-beta.14",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",