livekit-plugins-openai cuida do STT e do LLM quando você o aponta para a base URL da Venice. Para o TTS, uma classe VeniceTTS curta chama diretamente o endpoint /audio/speech da Venice.
A Venice se encaixa na arquitetura de pipeline STT-LLM-TTS do LiveKit Agents. A Venice não expõe uma API WebSocket Realtime (speech-to-speech) da OpenAI, portanto o caminho
RealtimeModel / multimodal não está disponível. Use o pipeline componentizado mostrado abaixo — ele oferece controle total sobre cada modelo e mantém a inferência na infraestrutura privada da Venice.Como a Venice se mapeia para o LiveKit Agents
Configuração
Instale o framework e os plugins usados abaixo:O plugin OpenAI recorre a
OPENAI_API_KEY quando api_key é omitido. Como você o está apontando para a Venice, sempre passe api_key explicitamente (caso contrário, a chave seria lida da variável errada). Os exemplos abaixo leem VENICE_API_KEY.Classe Venice TTS
Não use a classeopenai.TTS do plugin com a Venice. As versões atuais do livekit-plugins-openai enviam um campo stream_format em cada requisição de fala, e o endpoint /audio/speech da Venice o rejeita com 400. Em vez disso, salve esta classe como venice_tts.py ao lado do seu agente. Ela chama /audio/speech apenas com os campos que a Venice aceita e entrega o áudio ao LiveKit à medida que ele chega.
venice_tts.py
response_format deve ser um formato suportado pelo modelo. Verifique model_spec.supported_formats em GET /models?type=tts. Use pcm com o tts-kokoro, que o LiveKit reproduz sem etapa de decodificação. Para outros modelos, passe mp3 ou wav e o LiveKit decodifica o áudio.
Agente de Voz Completo
Este é um agente de voz completo que transcreve com Venice STT, pensa com um LLM da Venice e fala com Venice TTS por meio da classeVeniceTTS acima. O Silero fornece detecção de atividade de voz local para que o STT em lote saiba quando um turno está completo.
agent.py
Configurando Cada Componente
LLM
O LLM é o mapeamento mais direto — o endpoint/chat/completions da Venice suporta streaming SSE, tool calling e visão, todos utilizados diretamente pelo LiveKit. O venice-uncensored-1-2 mantém a inferência privada e sem censura enquanto alimenta o pipeline de TTS; recorra a um modelo da classe flash apenas se precisar de um tempo até o primeiro token menor.
extra_body:
Speech-to-Text
O STT OpenAI do LiveKit chama/audio/transcriptions por segmento de fala, então ele precisa de um VAD (Silero acima) para detectar quando um turno termina. Substitua o modelo padrão por um modelo de STT da Venice. nvidia/parakeet-tdt-0.6b-v3 é a opção menor / de menor latência; stt-xai-v1 e elevenlabs/scribe-v2 são alternativas mais recentes se você quiser maior precisão.
Text-to-Speech
AVeniceTTS chama /audio/speech. Vozes são específicas do modelo na Venice — passe um par model/voice do mesmo modelo. O tts-kokoro mantém o estágio de voz privado e sem censura para que possa falar a saída do LLM literalmente, e sua saída pcm evita uma etapa de decodificação de MP3 e reduz um pouco a latência. Vozes mais rápidas fornecidas por provedores (por exemplo, Gemini) podem aplicar filtragem de conteúdo, então evite-as se você precisar de fala sem censura.
Modelos Recomendados
Os IDs dos modelos mudam com o tempo — descubra as opções atuais em tempo de execução comGET /models?type=... e GET /models/traits em vez de codificar diretamente. Para agentes de voz, priorize as camadas de baixa latência (modelos chamados flash, turbo, mini ou com contagens pequenas de parâmetros), já que a responsividade percebida depende do tempo até o primeiro token e da velocidade do TTS. Bons pontos de partida no catálogo atual:
Explore todos os modelos
Filtre por texto, speech-to-text e text-to-speech com preços e capacidades ao vivo.
Latência e Dicas de Produção
A qualidade do agente de voz é dominada pela latência de troca de turno — o tempo entre o usuário terminar sua frase e o agente começar a falar. Com o pipeline totalmente Venice, estime aproximadamente:
Espere ~0,8–1,5 s até o primeiro áudio — ótimo para trocas de turno medidas no estilo assistente. Para conversas altamente interrompíveis e sobrepostas, você sentirá a diferença em comparação com um modelo nativo speech-to-speech.
Reduzir latência
- Use
tts-kokorocomresponse_format="pcm", o padrão daVeniceTTS, para pular a etapa de decodificação de MP3. - Ajuste o VAD Silero (
silero.VAD.load(min_silence_duration=0.4)) para encurtar o endpointing sem cortar a fala. - Prefira camadas de baixa latência para STT/TTS (por exemplo, TTS
tts-kokoro, STTnvidia/parakeet-tdt-0.6b-v3). Mantenhavenice-uncensored-1-2para o LLM para permanecer privado e sem censura; troque para um LLM da classeflashapenas se você precisar de um tempo até o primeiro token mais rápido. - Mantenha as respostas concisas — a primeira frase é o que determina a responsividade percebida.
Misturando provedores
O LiveKit permite escolher cada componente de forma independente, então você pode manter a Venice onde sua privacidade e modelos sem censura importam mais e trocar por um provedor de streaming onde a latência é crítica. Uma configuração comum de alta interatividade mantém o LLM da Venice (e opcionalmente o STT) e o combina com um TTS de streaming dedicado:Limitações e Notas
- Sem API speech-to-speech / Realtime. A Venice não tem WebSocket Realtime da OpenAI, então
openai.realtime.RealtimeModele o caminho de agente multimodal estão indisponíveis. Use o pipeline STT-LLM-TTS mostrado acima. - STT é em lote, não em streaming. A transcrição da Venice é requisição/resposta, então um VAD (Silero) é necessário para o endpointing. Isso adiciona uma pequena quantidade de latência em comparação com um socket STT de streaming.
- O TTS usa a classe
VeniceTTS, nãoopenai.TTS. As versões atuais dolivekit-plugins-openaienviamstream_formatnas requisições de fala, o que a Venice rejeita com 400. AVeniceTTSreportastreaming=False, então o LiveKit sintetiza a resposta mais ou menos uma frase por vez, e ela não usa a flagstreamingda Venice. A latência ainda é boa para a maioria dos agentes; useresponse_format="pcm"para minimizar a sobrecarga de decodificação. - Combine a voz com o modelo. IDs de
voicede TTS são válidos apenas para seumodelcorrespondente. Consulte Modelos de Text-to-Speech. - Não codifique listas de modelos. IDs de modelos da Venice são obsoletos e substituídos regularmente — consulte
GET /models/GET /models/traitsem tempo de execução. Consulte Descontinuações.