@absolutejs/voice 0.0.22-beta.614 → 0.0.22-beta.615

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.
@@ -44,21 +44,25 @@ export type VoiceCostBreakdown = {
44
44
  cachedInputTokens: number;
45
45
  inputTokens: number;
46
46
  outputTokens: number;
47
+ provider?: string;
47
48
  usd: number;
48
49
  };
49
50
  sessionId?: string;
50
51
  stt: {
51
52
  audioMs: number;
53
+ provider?: string;
52
54
  usd: number;
53
55
  };
54
56
  telephony: {
55
57
  minutes: number;
58
+ provider?: string;
56
59
  usd: number;
57
60
  };
58
61
  totalUsd: number;
59
62
  tts: {
60
63
  audioMs: number;
61
64
  characters: number;
65
+ provider?: string;
62
66
  usd: number;
63
67
  };
64
68
  };
package/dist/index.js CHANGED
@@ -41866,6 +41866,30 @@ var createVoiceCostAccountant = (options = {}) => {
41866
41866
  let sttUsd = 0;
41867
41867
  let telephonyMinutes = 0;
41868
41868
  let telephonyUsd = 0;
41869
+ const llmByProvider = new Map;
41870
+ const ttsByProvider = new Map;
41871
+ const sttByProvider = new Map;
41872
+ const telephonyByProvider = new Map;
41873
+ let lastLlmProvider;
41874
+ let lastTtsProvider;
41875
+ let lastSttProvider;
41876
+ let lastTelephonyProvider;
41877
+ const addProvider = (byProvider, provider, usd) => {
41878
+ if (!provider)
41879
+ return;
41880
+ byProvider.set(provider, (byProvider.get(provider) ?? 0) + usd);
41881
+ };
41882
+ const dominant = (byProvider, fallback) => {
41883
+ let best;
41884
+ let bestUsd = -1;
41885
+ for (const [provider, usd] of byProvider) {
41886
+ if (usd > bestUsd) {
41887
+ bestUsd = usd;
41888
+ best = provider;
41889
+ }
41890
+ }
41891
+ return best ?? fallback;
41892
+ };
41869
41893
  return {
41870
41894
  recordLLM: (usage) => {
41871
41895
  const input = usage.inputTokens ?? 0;
@@ -41874,64 +41898,85 @@ var createVoiceCostAccountant = (options = {}) => {
41874
41898
  llmInput += input;
41875
41899
  llmCachedInput += cached;
41876
41900
  llmOutput += output;
41901
+ if (usage.provider)
41902
+ lastLlmProvider = usage.provider;
41877
41903
  const rates = lookupRates(priceBook, usage.provider, usage.model)?.llm;
41878
41904
  if (!rates) {
41879
41905
  return;
41880
41906
  }
41881
41907
  const cachedRate = rates.cachedInputPerMillionTokensUsd ?? rates.inputPerMillionTokensUsd;
41882
- llmUsd += Math.max(0, input - cached) * rates.inputPerMillionTokensUsd / 1e6 + cached * cachedRate / 1e6 + output * rates.outputPerMillionTokensUsd / 1e6;
41908
+ const delta = Math.max(0, input - cached) * rates.inputPerMillionTokensUsd / 1e6 + cached * cachedRate / 1e6 + output * rates.outputPerMillionTokensUsd / 1e6;
41909
+ llmUsd += delta;
41910
+ addProvider(llmByProvider, usage.provider, delta);
41883
41911
  },
41884
41912
  recordSTT: (input) => {
41885
41913
  sttAudioMs += Math.max(0, input.audioMs);
41914
+ if (input.provider)
41915
+ lastSttProvider = input.provider;
41886
41916
  const rates = lookupRates(priceBook, input.provider, input.model)?.stt;
41887
41917
  if (!rates) {
41888
41918
  return;
41889
41919
  }
41890
- sttUsd += Math.max(0, input.audioMs) / 1000 * rates.perSecondUsd;
41920
+ const delta = Math.max(0, input.audioMs) / 1000 * rates.perSecondUsd;
41921
+ sttUsd += delta;
41922
+ addProvider(sttByProvider, input.provider, delta);
41891
41923
  },
41892
41924
  recordTelephony: (input) => {
41893
41925
  telephonyMinutes += Math.max(0, input.minutes);
41926
+ if (input.provider)
41927
+ lastTelephonyProvider = input.provider;
41894
41928
  const rates = lookupRates(priceBook, input.provider)?.telephony;
41895
41929
  if (!rates) {
41896
41930
  return;
41897
41931
  }
41898
- telephonyUsd += Math.max(0, input.minutes) * rates.perMinuteUsd;
41932
+ const delta = Math.max(0, input.minutes) * rates.perMinuteUsd;
41933
+ telephonyUsd += delta;
41934
+ addProvider(telephonyByProvider, input.provider, delta);
41899
41935
  },
41900
41936
  recordTTS: (input) => {
41901
41937
  const chars = input.characters ?? 0;
41902
41938
  const audioMs = input.audioMs ?? 0;
41903
41939
  ttsCharacters += chars;
41904
41940
  ttsAudioMs += audioMs;
41941
+ if (input.provider)
41942
+ lastTtsProvider = input.provider;
41905
41943
  const rates = lookupRates(priceBook, input.provider, input.voice)?.tts;
41906
41944
  if (!rates) {
41907
41945
  return;
41908
41946
  }
41947
+ let delta = 0;
41909
41948
  if (rates.perMillionCharactersUsd !== undefined && chars > 0) {
41910
- ttsUsd += chars * rates.perMillionCharactersUsd / 1e6;
41949
+ delta = chars * rates.perMillionCharactersUsd / 1e6;
41911
41950
  } else if (rates.perSecondUsd !== undefined && audioMs > 0) {
41912
- ttsUsd += audioMs / 1000 * rates.perSecondUsd;
41951
+ delta = audioMs / 1000 * rates.perSecondUsd;
41913
41952
  }
41953
+ ttsUsd += delta;
41954
+ addProvider(ttsByProvider, input.provider, delta);
41914
41955
  },
41915
41956
  snapshot: () => ({
41916
41957
  llm: {
41917
41958
  cachedInputTokens: llmCachedInput,
41918
41959
  inputTokens: llmInput,
41919
41960
  outputTokens: llmOutput,
41961
+ provider: dominant(llmByProvider, lastLlmProvider),
41920
41962
  usd: Math.round(llmUsd * 1e6) / 1e6
41921
41963
  },
41922
41964
  sessionId: options.sessionId,
41923
41965
  stt: {
41924
41966
  audioMs: sttAudioMs,
41967
+ provider: dominant(sttByProvider, lastSttProvider),
41925
41968
  usd: Math.round(sttUsd * 1e6) / 1e6
41926
41969
  },
41927
41970
  telephony: {
41928
41971
  minutes: telephonyMinutes,
41972
+ provider: dominant(telephonyByProvider, lastTelephonyProvider),
41929
41973
  usd: Math.round(telephonyUsd * 1e6) / 1e6
41930
41974
  },
41931
41975
  totalUsd: Math.round((llmUsd + ttsUsd + sttUsd + telephonyUsd) * 1e6) / 1e6,
41932
41976
  tts: {
41933
41977
  audioMs: ttsAudioMs,
41934
41978
  characters: ttsCharacters,
41979
+ provider: dominant(ttsByProvider, lastTtsProvider),
41935
41980
  usd: Math.round(ttsUsd * 1e6) / 1e6
41936
41981
  }
41937
41982
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/voice",
3
- "version": "0.0.22-beta.614",
3
+ "version": "0.0.22-beta.615",
4
4
  "description": "Voice primitives and Elysia plugin for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",