Files
9router/src/shared/constants/ttsProviders.js
T
decolua d4bc42e1f5 feat: add STT support, Gemini TTS, and expand usage tracking
- Speech-to-Text: full pipeline with sttCore handler, /v1/audio/transcriptions
  endpoint, sttConfig for OpenAI, Gemini, Groq, Deepgram, AssemblyAI,
  HuggingFace, NVIDIA Parakeet; new 9router-stt skill
- Gemini TTS: add gemini provider with 30 prebuilt voices and TTS_PROVIDER_CONFIG
- Usage: implement GLM (intl/cn) and MiniMax (intl/cn) quota fetchers; refactor
  Gemini CLI usage to use retrieveUserQuota with per-model buckets
- Disabled models: lowdb-backed disabledModelsDb + /api/models/disabled route
- Header search: reusable Zustand store (headerSearchStore) wired into Header
- CLI tools: add Claude Cowork tool card and cowork-settings API
- Providers: introduce mediaPriority sorting in getProvidersByKind, add
  Kimi K2.6, reorder hermes, drop qwen STT kind
- UI: expand media-providers/[kind]/[id] page (+314), enhance OAuthModal,
  ModelSelectModal, ProviderTopology, ProxyPools, ProviderLimits
- Assets: refresh provider PNGs (alicode, byteplus, cloudflare-ai, nvidia,
  ollama, vertex, volcengine-ark) and add aws-polly, fal-ai, jina-ai, recraft,
  runwayml, stability-ai, topaz, black-forest-labs
2026-05-05 10:32:59 +07:00

123 lines
3.2 KiB
JavaScript

/**
* TTS Provider Configuration
* Centralized config for TTS provider UI behavior
*/
export const TTS_PROVIDER_CONFIG = {
"google-tts": {
hasLanguageDropdown: false,
hasModelSelector: false,
hasBrowseButton: true,
voiceSource: "hardcoded", // languages built from providerModels at runtime
},
"openai": {
hasLanguageDropdown: false,
hasModelSelector: true,
hasBrowseButton: false,
voiceSource: "hardcoded",
modelKey: "openai-tts-models",
voiceKey: "openai-tts-voices",
voicesPerModel: true,
},
"openrouter": {
hasLanguageDropdown: false,
hasModelSelector: true,
hasBrowseButton: false,
voiceSource: "hardcoded",
modelKey: "openrouter-tts-models",
voiceKey: "openrouter-tts-voices",
voicesPerModel: true,
},
"elevenlabs": {
hasLanguageDropdown: false,
hasModelSelector: true,
hasBrowseButton: true,
hasVoiceIdInput: true, // allow manual voice id entry
voiceSource: "api-language", // grouped by language from backend
modelKey: "elevenlabs-tts-models",
apiEndpoint: "/api/media-providers/tts/elevenlabs/voices",
},
"edge-tts": {
hasLanguageDropdown: false,
hasModelSelector: false,
hasBrowseButton: true,
voiceSource: "api-language", // from API with language picker
},
"local-device": {
hasLanguageDropdown: false,
hasModelSelector: false,
hasBrowseButton: true,
voiceSource: "api-language", // from API with language picker
},
// ── Config-driven providers (load models from providers.js → ttsConfig.models) ──
"nvidia": {
hasModelSelector: true,
hasBrowseButton: false,
hasVoiceIdInput: true,
voiceSource: "config",
},
"hyperbolic": {
hasModelSelector: true,
hasBrowseButton: false,
voiceSource: "config",
},
"deepgram": {
hasModelSelector: false,
hasBrowseButton: true,
voiceSource: "api-language",
apiEndpoint: "/api/media-providers/tts/deepgram/voices",
},
"huggingface": {
hasModelSelector: true,
hasBrowseButton: false,
voiceSource: "config",
},
"cartesia": {
hasModelSelector: true,
hasBrowseButton: false,
hasVoiceIdInput: true,
voiceSource: "config",
},
"playht": {
hasModelSelector: true,
hasBrowseButton: false,
hasVoiceIdInput: true,
voiceSource: "config",
},
"coqui": {
hasModelSelector: true,
hasBrowseButton: false,
hasVoiceIdInput: true,
voiceSource: "config",
},
"tortoise": {
hasModelSelector: true,
hasBrowseButton: false,
hasVoiceIdInput: true,
voiceSource: "config",
},
"inworld": {
hasModelSelector: true,
hasBrowseButton: true,
hasVoiceIdInput: true,
voiceSource: "api-language",
modelKey: "inworld-tts-models",
apiEndpoint: "/api/media-providers/tts/inworld/voices",
},
"qwen": {
hasModelSelector: true,
hasBrowseButton: false,
hasVoiceIdInput: true,
voiceSource: "config",
},
"gemini": {
hasLanguageDropdown: false,
hasLanguageHint: true, // sends body.language to guide TTS pronunciation
hasModelSelector: true,
hasBrowseButton: false,
voiceSource: "hardcoded",
modelKey: "gemini-tts-models",
voiceKey: "gemini-tts-voices",
voicesPerModel: true,
},
};