70 lines
2 KiB
JavaScript
70 lines
2 KiB
JavaScript
const { getLiteLLMHeaders } = require('./litellm');
|
|
|
|
function parseList(value) {
|
|
return String(value || '')
|
|
.split(',')
|
|
.map(function(item) { return item.trim(); })
|
|
.filter(Boolean);
|
|
}
|
|
|
|
function getTTSProvider() {
|
|
var env = process.env.TTS_PROVIDER;
|
|
if (env === 'litellm') return 'litellm';
|
|
if (process.env.LITELLM_API_BASE) return 'litellm';
|
|
return 'none';
|
|
}
|
|
|
|
function getTTSEnvProvider() {
|
|
return process.env.TTS_PROVIDER || 'auto';
|
|
}
|
|
|
|
function getTTSVoiceLists() {
|
|
return {
|
|
litellm: parseList(process.env.LITELLM_TTS_VOICES)
|
|
};
|
|
}
|
|
|
|
function isLiteLLMTTSModel(model) {
|
|
var mode = model && model.model_info && model.model_info.mode ? String(model.model_info.mode) : '';
|
|
return mode === 'audio_speech';
|
|
}
|
|
|
|
function getLiteLLMTTSModels(models) {
|
|
return (models || [])
|
|
.filter(isLiteLLMTTSModel)
|
|
.map(function(model) { return model && (model.id || model.model_name) ? (model.id || model.model_name) : String(model || ''); });
|
|
}
|
|
|
|
function pushUniqueTTSItem(items, item) {
|
|
if (!item || !item.id) return;
|
|
if (items.some(function(existing) { return existing.id === item.id && existing.kind === item.kind; })) return;
|
|
items.push(item);
|
|
}
|
|
|
|
function getLiteLLMTTSDiscoveryItems(models, opts) {
|
|
opts = opts || {};
|
|
var items = [];
|
|
getLiteLLMTTSModels(models).forEach(function(id) {
|
|
pushUniqueTTSItem(items, { id: id, name: id, source: 'gateway-api', kind: 'model' });
|
|
});
|
|
if (opts.currentModel) {
|
|
pushUniqueTTSItem(items, { id: opts.currentModel, name: opts.currentModel, source: 'configured-model', kind: 'model' });
|
|
}
|
|
if (opts.currentVoice) {
|
|
pushUniqueTTSItem(items, { id: opts.currentVoice, name: opts.currentVoice, source: 'configured-voice', kind: 'voice' });
|
|
}
|
|
getTTSVoiceLists().litellm.forEach(function(voice) {
|
|
pushUniqueTTSItem(items, { id: voice, name: voice, source: 'configured-voice-list', kind: 'voice' });
|
|
});
|
|
return items;
|
|
}
|
|
|
|
module.exports = {
|
|
getTTSEnvProvider,
|
|
getLiteLLMTTSDiscoveryItems,
|
|
getLiteLLMHeaders,
|
|
getLiteLLMTTSModels,
|
|
getTTSProvider,
|
|
getTTSVoiceLists,
|
|
isLiteLLMTTSModel
|
|
};
|