From 0bd3ff787bf084aa105e94c8ea65b5bc6eae782a Mon Sep 17 00:00:00 2001 From: Daniel Onyejesi Date: Sun, 29 Mar 2026 22:28:32 -0400 Subject: [PATCH] Fix STT/TTS model paths: use exact vertex_ai/ paths for LiteLLM routing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LiteLLM aliases (whisper-1, tts-1) don't resolve in audio endpoints — only chat completions support alias routing. Use exact paths: - STT default: vertex_ai/chirp (was whisper-1) - TTS default: vertex_ai/text-to-speech (was tts-1) Override via LITELLM_STT_MODEL / LITELLM_TTS_MODEL in .env. --- .env.example | 6 +++--- src/routes/transcribe.js | 2 +- src/routes/tts.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index ab45597..74ede76 100644 --- a/.env.example +++ b/.env.example @@ -35,12 +35,12 @@ OPENROUTER_API_KEY=sk-or-v1-your-key # # LiteLLM Speech-to-Text (auto-enabled when LITELLM_API_BASE is set) # TRANSCRIBE_PROVIDER=litellm -# LITELLM_STT_MODEL=whisper-1 # or: groq/whisper-large-v3, openai/whisper-1 +# LITELLM_STT_MODEL=vertex_ai/chirp # or: vertex_ai/chirp_2 for newer model # # LiteLLM Text-to-Speech (auto-enabled when LITELLM_API_BASE is set) # TTS_PROVIDER=litellm -# LITELLM_TTS_MODEL=tts-1 # or: tts-1-hd, openai/tts-1 -# LITELLM_TTS_VOICE=alloy # alloy, echo, fable, onyx, nova, shimmer +# LITELLM_TTS_MODEL=vertex_ai/text-to-speech # voice is set inside LiteLLM per model +# LITELLM_TTS_VOICE is ignored for Vertex AI — voice is configured in LiteLLM model entry # ============================================================ # TRANSCRIPTION (speech-to-text) diff --git a/src/routes/transcribe.js b/src/routes/transcribe.js index 1f09980..d026387 100644 --- a/src/routes/transcribe.js +++ b/src/routes/transcribe.js @@ -70,7 +70,7 @@ router.post('/transcribe', authMiddleware, upload.single('audio'), async (req, r if (provider === 'litellm') { if (!process.env.LITELLM_API_BASE) return res.status(400).json({ error: 'LITELLM_API_BASE not set.' }); - var sttModel = process.env.LITELLM_STT_MODEL || 'whisper-1'; + var sttModel = process.env.LITELLM_STT_MODEL || 'vertex_ai/chirp'; var FormData = require('form-data'); var axios = require('axios'); var form = new FormData(); diff --git a/src/routes/tts.js b/src/routes/tts.js index fe00a9c..89e8e2e 100644 --- a/src/routes/tts.js +++ b/src/routes/tts.js @@ -26,7 +26,7 @@ router.post('/text-to-speech', authMiddleware, async (req, res) => { if (ttsProvider === 'litellm') { if (!process.env.LITELLM_API_BASE) return res.status(400).json({ error: 'LITELLM_API_BASE not set.' }); - var ttsModel = process.env.LITELLM_TTS_MODEL || 'tts-1'; + var ttsModel = process.env.LITELLM_TTS_MODEL || 'vertex_ai/text-to-speech'; var base = process.env.LITELLM_API_BASE.replace(/\/+$/, ''); var ttsHeaders = { 'Content-Type': 'application/json' }; if (process.env.LITELLM_API_KEY) ttsHeaders['Authorization'] = 'Bearer ' + process.env.LITELLM_API_KEY;