livekit-plugins-openai se encarga del STT y del LLM cuando lo apuntas a la URL base de Venice. Para el TTS, una breve clase VeniceTTS llama directamente al endpoint /audio/speech de Venice.
Venice encaja en la arquitectura de tubería STT-LLM-TTS de LiveKit Agents. Venice no expone una API WebSocket Realtime (voz a voz) de OpenAI, por lo que la ruta
RealtimeModel / multimodal no está disponible. Utiliza la tubería por componentes que se muestra a continuación — te da control total sobre cada modelo y mantiene la inferencia en la infraestructura privada de Venice.Cómo se corresponde Venice con LiveKit Agents
Configuración
Instala el framework y los plugins que se usan a continuación:El plugin de OpenAI recurre a
OPENAI_API_KEY cuando se omite api_key. Como lo estás apuntando a Venice, pasa siempre api_key de forma explícita (o la clave se leería de la variable equivocada). Los ejemplos a continuación leen VENICE_API_KEY.Clase Venice TTS
No uses la claseopenai.TTS del plugin con Venice. Las versiones actuales de livekit-plugins-openai envían un campo stream_format en cada solicitud de voz, y el endpoint /audio/speech de Venice lo rechaza con un 400. En su lugar, guarda esta clase como venice_tts.py junto a tu agente. Llama a /audio/speech solo con los campos que Venice acepta y entrega el audio a LiveKit a medida que llega.
venice_tts.py
response_format debe ser un formato compatible con el modelo. Consulta model_spec.supported_formats en GET /models?type=tts. Usa pcm con tts-kokoro, que LiveKit reproduce sin paso de decodificación. Para otros modelos, pasa mp3 o wav y LiveKit decodificará el audio.
Agente de voz completo
Este es un agente de voz completo que transcribe con Venice STT, piensa con un LLM de Venice y habla con Venice TTS mediante la claseVeniceTTS anterior. Silero proporciona detección de actividad de voz local para que el STT por lotes sepa cuándo termina un turno.
agent.py
Configuración de cada componente
LLM
El LLM es la correspondencia más limpia — Venice/chat/completions admite streaming SSE, llamadas a herramientas y visión, todo lo cual LiveKit utiliza directamente. venice-uncensored-1-2 mantiene la inferencia privada y sin censura mientras alimenta la tubería de TTS; recurre a un modelo de clase flash solo si necesitas un menor tiempo hasta el primer token.
extra_body:
Reconocimiento de voz (Speech-to-Text)
El STT de OpenAI de LiveKit llama a/audio/transcriptions por cada segmento de habla, por lo que necesita un VAD (Silero, arriba) para detectar cuándo termina un turno. Anula el modelo predeterminado con un modelo STT de Venice. nvidia/parakeet-tdt-0.6b-v3 es la opción más pequeña y de menor latencia; stt-xai-v1 y elevenlabs/scribe-v2 son alternativas más recientes si quieres mayor precisión.
Síntesis de voz (Text-to-Speech)
VeniceTTS llama a /audio/speech. Las voces son específicas de cada modelo en Venice — pasa un par model/voice del mismo modelo. tts-kokoro mantiene la etapa de voz privada y sin censura para que pueda pronunciar la salida del LLM de forma literal, y su salida pcm evita un paso de decodificación de MP3 y reduce un poco la latencia. Las voces más rápidas respaldadas por proveedores (por ejemplo, Gemini) pueden aplicar filtrado de contenido, así que evítalas si necesitas voz sin censura.
Modelos recomendados
Los IDs de los modelos cambian con el tiempo — descubre las opciones actuales en tiempo de ejecución conGET /models?type=... y GET /models/traits en lugar de codificarlos de forma fija. Para agentes de voz, prioriza los niveles de baja latencia (modelos denominados flash, turbo, mini, o con pocos parámetros) ya que la capacidad de respuesta percibida depende del tiempo hasta el primer token y de la velocidad de TTS. Buenos puntos de partida del catálogo actual:
Explorar todos los modelos
Filtra por texto, reconocimiento de voz y síntesis de voz con precios y capacidades en tiempo real.
Latencia y consejos para producción
La calidad del agente de voz está dominada por la latencia en la toma de turnos — el tiempo entre que el usuario termina su frase y el agente comienza a hablar. Con la tubería íntegramente de Venice, calcula aproximadamente:
Espera ~0,8–1,5 s hasta el primer audio — genial para una toma de turnos mesurada, estilo asistente. Para conversaciones altamente interrumpibles y solapadas notarás la diferencia respecto a un modelo nativo de voz a voz.
Reducir la latencia
- Usa
tts-kokoroconresponse_format="pcm", el valor predeterminado deVeniceTTS, para saltarte el paso de decodificación de MP3. - Ajusta Silero VAD (
silero.VAD.load(min_silence_duration=0.4)) para acortar la detección de fin de turno sin cortar el habla. - Prefiere niveles de baja latencia para STT/TTS (por ejemplo,
tts-kokoropara TTS,nvidia/parakeet-tdt-0.6b-v3para STT). Conservavenice-uncensored-1-2para el LLM y mantén la privacidad y ausencia de censura; cambia a un LLM de claseflashsolo si necesitas un menor tiempo hasta el primer token. - Mantén las respuestas concisas — la primera frase es la que condiciona la capacidad de respuesta percibida.
Combinar proveedores
LiveKit te permite elegir cada componente de forma independiente, de modo que puedes mantener Venice donde su privacidad y sus modelos sin censura son más importantes y sustituirlo por un proveedor de streaming donde la latencia es crítica. Una configuración común de alta interactividad conserva el LLM de Venice (y opcionalmente el STT) y lo empareja con un TTS de streaming dedicado:Limitaciones y notas
- Sin API Realtime / voz a voz. Venice no tiene un WebSocket Realtime de OpenAI, por lo que
openai.realtime.RealtimeModely la ruta de agente multimodal no están disponibles. Utiliza la tubería STT-LLM-TTS mostrada arriba. - El STT es por lotes, no en streaming. La transcripción de Venice es de solicitud/respuesta, por lo que se requiere un VAD (Silero) para la detección de fin de turno. Esto añade una pequeña cantidad de latencia frente a un socket STT en streaming.
- El TTS usa la clase
VeniceTTS, noopenai.TTS. Las versiones actuales delivekit-plugins-openaienvíanstream_formaten las solicitudes de voz, y Venice lo rechaza con un 400.VeniceTTSinformastreaming=False, por lo que LiveKit sintetiza la respuesta aproximadamente frase a frase, y no utiliza el flagstreamingde Venice. La latencia sigue siendo aceptable para la mayoría de los agentes; usaresponse_format="pcm"para minimizar la sobrecarga de decodificación. - Empareja la voz con el modelo. Los IDs de
voicede TTS solo son válidos para sumodelcorrespondiente. Consulta Modelos de síntesis de voz. - No codifiques listas de modelos de forma fija. Los IDs de los modelos de Venice se deprecian y reemplazan con regularidad — consulta
GET /models/GET /models/traitsen tiempo de ejecución. Consulta Deprecaciones.