96 lines
3.0 KiB
TypeScript
96 lines
3.0 KiB
TypeScript
import { Stats } from '../interfaces';
|
|
import { Config } from './config';
|
|
|
|
// Initialize stats object
|
|
export const createStats = (): Stats => ({
|
|
totalFrames: 0,
|
|
totalBatches: 0,
|
|
totalVisionInputCost: 0,
|
|
totalVisionOutputCost: 0,
|
|
totalTTSCost: 0,
|
|
totalCost: 0
|
|
});
|
|
|
|
// Pricing interface
|
|
interface PricingData {
|
|
vision: {
|
|
[provider: string]: {
|
|
[model: string]: {
|
|
input: number;
|
|
output: number;
|
|
}
|
|
}
|
|
};
|
|
tts: {
|
|
[provider: string]: {
|
|
[model: string]: number
|
|
}
|
|
};
|
|
}
|
|
|
|
// Pricing constants (as of March 2025)
|
|
const pricing: PricingData = {
|
|
vision: {
|
|
openai: {
|
|
'gpt-4o': {
|
|
input: 0.0025, // per 1K input tokens
|
|
output: 0.01 // per 1K output tokens
|
|
}
|
|
// Add other OpenAI models here
|
|
},
|
|
gemini: {
|
|
'gemini-pro-vision': {
|
|
input: 0.0025, // per 1K input tokens
|
|
output: 0.0025 // per 1K output tokens
|
|
}
|
|
}
|
|
// Add other vision providers here
|
|
},
|
|
tts: {
|
|
openai: {
|
|
'tts-1': 0.015, // per 1K characters
|
|
'tts-1-hd': 0.030 // per 1K characters
|
|
}
|
|
// Add other TTS providers here
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Print out statistics
|
|
* @param stats - Statistics object
|
|
* @param settings - Configuration settings
|
|
*/
|
|
export function printStats(stats: Stats, settings: Config): void {
|
|
// Get the pricing for the selected providers
|
|
const visionProvider = settings.visionProvider;
|
|
const visionModel = settings.visionProviders[visionProvider].model;
|
|
const ttsProvider = settings.ttsProvider;
|
|
const ttsModel = settings.ttsProviders[ttsProvider].model;
|
|
|
|
// Check if the pricing data exists
|
|
const visionPricing = pricing.vision[visionProvider]?.[visionModel];
|
|
const ttsPricing = pricing.tts[ttsProvider]?.[ttsModel];
|
|
|
|
if (!visionPricing) {
|
|
console.warn(`Warning: No pricing data for vision provider "${visionProvider}" and model "${visionModel}".`);
|
|
}
|
|
|
|
if (!ttsPricing) {
|
|
console.warn(`Warning: No pricing data for TTS provider "${ttsProvider}" and model "${ttsModel}".`);
|
|
}
|
|
|
|
// Calculate prices using available pricing data
|
|
const visionInputCost = visionPricing ? (stats.totalVisionInputCost * visionPricing.input / 1000) : 0;
|
|
const visionOutputCost = visionPricing ? (stats.totalVisionOutputCost * visionPricing.output / 1000) : 0;
|
|
const ttsCost = ttsPricing ? (stats.totalTTSCost * (ttsPricing as number) / 1000) : 0;
|
|
const totalCost = visionInputCost + visionOutputCost + ttsCost;
|
|
|
|
// Print out the stats
|
|
console.log('\n=== STATISTICS ===');
|
|
console.log(`Vision provider: ${visionProvider}, Model: ${visionModel}`);
|
|
console.log(`TTS provider: ${ttsProvider}, Model: ${ttsModel}`);
|
|
console.log(`Total vision input cost: ${visionInputCost.toFixed(4)}`);
|
|
console.log(`Total vision output cost: ${visionOutputCost.toFixed(4)}`);
|
|
console.log(`Total TTS cost: ${ttsCost.toFixed(4)}`);
|
|
console.log(`Total cost: ${totalCost.toFixed(4)}`);
|
|
} |