@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.
- package/dist/core/costAccounting.d.ts +4 -0
- package/dist/index.js +50 -5
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
41949
|
+
delta = chars * rates.perMillionCharactersUsd / 1e6;
|
|
41911
41950
|
} else if (rates.perSecondUsd !== undefined && audioMs > 0) {
|
|
41912
|
-
|
|
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
|
})
|