livekit-plugins-openai gestisce STT e LLM quando lo punti all’URL base di Venice. Per il TTS, una breve classe VeniceTTS chiama direttamente l’endpoint /audio/speech di Venice.
Venice si adatta all’architettura della pipeline STT-LLM-TTS in LiveKit Agents. Venice non espone un’API WebSocket OpenAI Realtime (speech-to-speech), quindi il percorso
RealtimeModel / multimodale non è disponibile. Utilizza la pipeline componentizzata mostrata di seguito: ti offre il pieno controllo su ciascun modello e mantiene l’inferenza sull’infrastruttura privata di Venice.Come Venice si integra con LiveKit Agents
Configurazione
Installa il framework e i plugin utilizzati di seguito:Il plugin OpenAI ricade su
OPENAI_API_KEY quando api_key viene omesso. Poiché lo stai puntando a Venice, passa sempre api_key esplicitamente (altrimenti la chiave verrebbe letta dalla variabile sbagliata). Gli esempi seguenti leggono VENICE_API_KEY.Classe Venice TTS
Non usare la classeopenai.TTS del plugin con Venice. Le versioni attuali di livekit-plugins-openai inviano un campo stream_format con ogni richiesta di sintesi vocale, e l’endpoint /audio/speech di Venice la rifiuta con un errore 400. Salva invece questa classe come venice_tts.py accanto al tuo agente. Chiama /audio/speech solo con i campi accettati da Venice e passa l’audio a LiveKit man mano che arriva.
venice_tts.py
response_format deve essere un formato supportato dal modello. Controlla model_spec.supported_formats in GET /models?type=tts. Usa pcm con tts-kokoro, che LiveKit riproduce senza alcun passaggio di decodifica. Per gli altri modelli, passa mp3 o wav e LiveKit decodificherà l’audio.
Agente vocale completo
Questo è un agente vocale completo che trascrive con Venice STT, ragiona con un LLM Venice e parla con Venice TTS tramite la classeVeniceTTS vista sopra. Silero fornisce il rilevamento locale dell’attività vocale, così l’STT in modalità batch sa quando un turno è completo.
agent.py
Configurazione di ciascun componente
LLM
L’LLM è la corrispondenza più diretta: Venice/chat/completions supporta streaming SSE, tool calling e visione, tutte funzionalità che LiveKit utilizza direttamente. venice-uncensored-1-2 mantiene l’inferenza privata e senza censura mentre alimenta la pipeline TTS; ricorri a un modello di classe flash solo se hai bisogno di un time-to-first-token inferiore.
extra_body:
Speech-to-Text
Lo STT OpenAI di LiveKit chiama/audio/transcriptions per ogni segmento vocale, quindi ha bisogno di un VAD (Silero, sopra) per rilevare la fine di un turno. Sovrascrivi il modello predefinito con un modello STT di Venice. nvidia/parakeet-tdt-0.6b-v3 è l’opzione più piccola e a minor latenza; stt-xai-v1 ed elevenlabs/scribe-v2 sono alternative più recenti se desideri maggiore accuratezza.
Text-to-Speech
VeniceTTS chiama /audio/speech. Le voci in Venice sono specifiche per ciascun modello: passa una coppia model/voice dallo stesso modello. tts-kokoro mantiene privata e senza censura la fase vocale, così può pronunciare l’output dell’LLM letteralmente, e il suo output pcm evita un passaggio di decodifica MP3 riducendo leggermente la latenza. Le voci più veloci basate su provider (ad es. Gemini) possono applicare filtri sui contenuti, quindi evitale se hai bisogno di un parlato senza censura.
Modelli consigliati
Gli ID dei modelli cambiano nel tempo — scopri le opzioni attuali a runtime conGET /models?type=... e GET /models/traits invece di codificarli in modo statico. Per gli agenti vocali, dai priorità ai tier a bassa latenza (modelli chiamati flash, turbo, mini o con un numero ridotto di parametri) poiché la reattività percepita dipende dal time-to-first-token e dalla velocità del TTS. Buoni punti di partenza dal catalogo attuale:
Sfoglia tutti i modelli
Filtra per testo, speech-to-text e text-to-speech con prezzi e capacità in tempo reale.
Latenza e consigli per la produzione
La qualità di un agente vocale è dominata dalla latenza di cambio turno — il tempo tra la fine della frase dell’utente e l’inizio della risposta parlata dell’agente. Con la pipeline interamente Venice, prevedi indicativamente:
Aspettati ~0,8–1,5 s per il primo audio — ottimo per uno stile assistente con turni misurati. Per conversazioni altamente interrompibili e sovrapposte, noterai il divario rispetto a un modello speech-to-speech nativo.
Ridurre la latenza
- Usa
tts-kokoroconresponse_format="pcm", l’impostazione predefinita diVeniceTTS, per saltare il passaggio di decodifica MP3. - Regola Silero VAD (
silero.VAD.load(min_silence_duration=0.4)) per abbreviare l’endpointing senza troncare il parlato. - Prediligi i tier a bassa latenza per STT/TTS (ad es. TTS
tts-kokoro, STTnvidia/parakeet-tdt-0.6b-v3). Mantienivenice-uncensored-1-2per l’LLM per rimanere privato e senza censura; passa a un LLM di classeflashsolo se hai bisogno di un time-to-first-token più veloce. - Mantieni concise le risposte — è la prima frase a determinare la reattività percepita.
Combinare provider
LiveKit ti consente di scegliere ogni componente in modo indipendente, così puoi mantenere Venice dove la sua privacy e i modelli senza censura contano di più e integrare un provider in streaming dove la latenza è critica. Una configurazione comune ad alta interattività mantiene l’LLM Venice (e opzionalmente lo STT) e lo abbina a un TTS in streaming dedicato:Limitazioni e note
- Nessuna API speech-to-speech / Realtime. Venice non dispone di un WebSocket OpenAI Realtime, quindi
openai.realtime.RealtimeModele il percorso dell’agente multimodale non sono disponibili. Usa la pipeline STT-LLM-TTS mostrata sopra. - STT è batch, non streaming. La trascrizione Venice è richiesta/risposta, quindi è necessario un VAD (Silero) per l’endpointing. Ciò aggiunge una piccola latenza rispetto a un socket STT in streaming.
- Il TTS usa la classe
VeniceTTS, nonopenai.TTS. Le versioni attuali dilivekit-plugins-openaiinvianostream_formatnelle richieste di sintesi vocale, che Venice rifiuta con un errore 400.VeniceTTSriportastreaming=False, quindi LiveKit sintetizza la risposta circa una frase alla volta, e non utilizza il flagstreamingdi Venice. La latenza rimane comunque adeguata per la maggior parte degli agenti; usaresponse_format="pcm"per minimizzare l’overhead di decodifica. - Abbina la voce al modello. Gli ID
voicedel TTS sono validi solo per ilmodelcorrispondente. Vedi Modelli Text-to-Speech. - Non codificare in modo statico gli elenchi dei modelli. Gli ID dei modelli Venice vengono deprecati e sostituiti regolarmente — interroga
GET /models/GET /models/traitsa runtime. Vedi Deprecazioni.