"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.saveConfigToFile = exports.loadConfigFromFile = exports.printStats = exports.createStats = exports.TTSProviderFactory = exports.VisionProviderFactory = exports.defaultConfig = exports.getDefaultConfig = exports.estimateCost = exports.generateAudioDescription = exports.generateAudioDescriptionFromOptions = void 0; require("dotenv/config"); const config_1 = require("./config/config"); const stats_1 = require("./config/stats"); const visionProviderFactory_1 = require("./providers/vision/visionProviderFactory"); const ttsProviderFactory_1 = require("./providers/tts/ttsProviderFactory"); const processor_1 = require("./utils/processor"); const costEstimator_1 = require("./utils/costEstimator"); const configUtils_1 = require("./utils/configUtils"); const args_1 = require("./cli/args"); // Export functions and types for use as a module var processor_2 = require("./utils/processor"); Object.defineProperty(exports, "generateAudioDescriptionFromOptions", { enumerable: true, get: function () { return processor_2.generateAudioDescriptionFromOptions; } }); Object.defineProperty(exports, "generateAudioDescription", { enumerable: true, get: function () { return processor_2.generateAudioDescription; } }); var costEstimator_2 = require("./utils/costEstimator"); Object.defineProperty(exports, "estimateCost", { enumerable: true, get: function () { return costEstimator_2.estimateCost; } }); var config_2 = require("./config/config"); Object.defineProperty(exports, "getDefaultConfig", { enumerable: true, get: function () { return config_2.getDefaultConfig; } }); Object.defineProperty(exports, "defaultConfig", { enumerable: true, get: function () { return config_2.defaultConfig; } }); var visionProviderFactory_2 = require("./providers/vision/visionProviderFactory"); Object.defineProperty(exports, "VisionProviderFactory", { enumerable: true, get: function () { return visionProviderFactory_2.VisionProviderFactory; } }); var ttsProviderFactory_2 = require("./providers/tts/ttsProviderFactory"); Object.defineProperty(exports, "TTSProviderFactory", { enumerable: true, get: function () { return ttsProviderFactory_2.TTSProviderFactory; } }); var stats_2 = require("./config/stats"); Object.defineProperty(exports, "createStats", { enumerable: true, get: function () { return stats_2.createStats; } }); Object.defineProperty(exports, "printStats", { enumerable: true, get: function () { return stats_2.printStats; } }); var configUtils_2 = require("./utils/configUtils"); Object.defineProperty(exports, "loadConfigFromFile", { enumerable: true, get: function () { return configUtils_2.loadConfigFromFile; } }); Object.defineProperty(exports, "saveConfigToFile", { enumerable: true, get: function () { return configUtils_2.saveConfigToFile; } }); // CLI entry point when run directly if (require.main === module) { main().catch(err => console.error('Unhandled error:', err)); } async function main() { const argv = (0, args_1.parseCommandLineArgs)(); let config = (0, config_1.getDefaultConfig)(); if (argv.config) { const fileConfig = (0, configUtils_1.loadConfigFromFile)(argv.config); config = { ...config, ...fileConfig }; } const argvObj = argv; Object.keys(argvObj).forEach(key => { if (key !== '_' && key !== '$0' && key !== 'config' && key !== 'saveConfig' && key !== 'estimate' && key !== 'help' && key !== 'version' && argvObj[key] !== undefined) { config[key] = argvObj[key]; } }); if (argv.visionModel) { if (!config.visionProviders[config.visionProvider]) { config.visionProviders[config.visionProvider] = { model: '' }; } config.visionProviders[config.visionProvider].model = argv.visionModel; } if (argv.ttsModel) { if (!config.ttsProviders[config.ttsProvider]) { config.ttsProviders[config.ttsProvider] = { model: '' }; } config.ttsProviders[config.ttsProvider].model = argv.ttsModel; } if (argv.ttsVoice) { if (!config.ttsProviders[config.ttsProvider]) { config.ttsProviders[config.ttsProvider] = { model: '', voice: '' }; } config.ttsProviders[config.ttsProvider].voice = argv.ttsVoice; } if (argv.ttsInstructions) { config.ttsInstructions = argv.ttsInstructions; } if (argv.saveConfig) { (0, configUtils_1.saveConfigToFile)(argv.saveConfig, config); } if (argv._.length < 1) { console.error('Error: No video file specified'); console.log('Usage: node dist/index.js [options]'); console.log('Use --help for more information'); process.exit(1); } const videoFilePath = String(argv._[0]); if (argv.estimate) { try { const costBreakdown = await (0, costEstimator_1.estimateCost)(videoFilePath, config); console.log('\n=== COST ESTIMATION ==='); console.log(JSON.stringify(costBreakdown, null, 2)); console.log(`\nEstimated total cost: ${costBreakdown.apiCosts.total}`); console.log(`Estimated processing time: ${costBreakdown.estimates.estimatedProcessingTimeMinutes.toFixed(1)} minutes`); console.log('Note: Actual costs may vary based on image complexity and actual response lengths.'); } catch (err) { console.error('Error estimating costs:', err); } } else { try { const stats = (0, stats_1.createStats)(); const visionProvider = visionProviderFactory_1.VisionProviderFactory.getProvider(config); const ttsProvider = ttsProviderFactory_1.TTSProviderFactory.getProvider(config); await (0, processor_1.generateAudioDescription)(videoFilePath, visionProvider, ttsProvider, config, stats); } catch (err) { console.error('Error generating audio description:', err); } } } //# sourceMappingURL=index.js.map