Support Gemini 3.1 Flash Live + Défi MiniCPM-o 4.5 vLLM — Le développement de l'IA vocale S2S en temps réel de Naia OS Depuis, je n'ai pas pu publier de mises à jour.
Beaucoup de choses se sont passées depuis. Nextain a pris en charge l'exploitation du portail chrétien coréen (www.onmam.com) et a discuté du support pour l'application de l'IA. De plus, nous avons été sélectionnés pour un projet gouvernemental coréen, ce qui donnera un élan aux services de Naia. Il semble que nous pourrons bientôt présenter de véritables avatars Naia, et non plus les avatars par défaut de Vroid Hub.
Et à la fin de l'article précédent, j'avais écrit que la situation deviendrait plus facile car nous allions emprunter des cartes graphiques la semaine suivante, et je peux enfin tenir cette promesse. Nous avons terminé la première validation de fonctionnement : portage de MiniCPM-o 4.5 vers vllm-omni dans un environnement avec deux RTX 3090, connexion au client Naia, et conversation en anglais en temps réel avec référence audio (clonage vocal).
À titre de référence, nous sommes les premiers à avoir porté MiniCPM-o 4.5 sur vllm-omni, et des personnes à l'étranger se demandent également jusqu'où nous en sommes.. Il y a eu une tentative d'une autre personne dans l'upstream > #1182, mais elle n'a jamais été fusionnée, et nous avons également progressé sur une voie séparée. Nous avons atteint un niveau de fonctionnement acceptable, et nous sommes maintenant en phase de nettoyage pour que ce soit acceptable par le mainteneur upstream.
Pourquoi MiniCPM-o 4.5 était-il notre objectif ?
Comme mentionné dans l'article précédent, pour récapituler, MiniCPM-o 4.5 est actuellement le seul modèle omni capable de fonctionner sur une seule RTX 3090 pour un particulier, tout en permettant simultanément la référence audio (clonage vocal) et le fine-tuning.
- GPT-4o / Gemini Live — Exclusif au cloud, poids non publics, fine-tuning impossible
- Moshi — Open source et excellent en full-duplex, mais principalement anglais/français + communauté inactive
- Qwen3-Omni-30B — 30B, ne rentre pas sur une seule carte de 24 Go sans quantification, et la sortie vocale est dégradée avec la quantification
- MiniCPM-o 4.5 — 9B (combinaison de Whisper-medium + Qwen3-8B + CosyVoice2 + SigLip2), fonctionne sur une seule carte de 24 Go, clonage vocal par référence audio, et fine-tuning possible
Cependant, le manque de support pour le coréen est un inconvénient, mais c'est aussi un domaine où nous pouvons apporter notre contribution. C'est pourquoi, lors de ce championnat d'IA, nous avons soumis une proposition pour un service de VTuber utilisant le fine-tuning coréen de vLLM-omni et Naia-Memory sous le nom d'équipe "Je me souviens de toi". Nous n'avons pas pu postuler dans la catégorie 'domestique' pour Dokpamo car il n'y avait pas de modèle omni au niveau que nous souhaitions.
"Qui ne voudrait pas d'un VTuber IA qui se souvient de moi et parle avec ma propre voix sur mon PC ?" Pour rendre cela possible, nous pensons que les technologies suivantes sont nécessaires et nous nous concentrons sur elles :
- Modèle omni fonctionnant localement — Pas un pipeline STT/LLM/TTS, mais du bout en bout parole-à-parole. Les pipelines ont une latence cumulée et une perte d'intonation trop importantes. → MiniCPM-o 4.5
- Référence audio (clonage vocal) — "Parle avec cette voix" Une fois qu'on lui fait écouter, il converse avec ce timbre. → Clonage basé sur
spk_embde CosyVoice2 - Mémoire à long terme — Un système de mémoire qui ne se réinitialise pas à chaque session et qui se souvient de l'utilisateur. → Naia Memory que nous développons séparément (système de mémoire à 4 niveaux inspiré des neurosciences)
- Coréen — Les trois précédents doivent fonctionner en coréen pour une utilisation quotidienne. → Fine-tuning coréen de CosyVoice2 (acquisition des données AIHub terminée, démarrage immédiat avec support GPU)
Et il y a une autre piste que nous dévoilerons bientôt. naia-sing — Vous devriez deviner de quoi il s'agit d'après le nom. Restez à l'écoute. Ci-dessous, nous partageons également une démo en fonctionnement réel et des détails techniques supplémentaires.
Démo 1 — Conversation avec le client Naia
Veuillez excuser mon anglais imparfait dans la vidéo de démonstration.
C'est une vidéo testant la conversation après avoir porté MiniCPM 4.5-o sur vllm-omni et l'avoir connecté à l'application de bureau Naia. Le matériel est composé de deux RTX-3090 (2-way), sans quantification, en bf16. Fidèle aux caractéristiques d'un modèle omni (S2S, speech-to-speech de bout en bout), le flux de conversation est fluide et les expressions émotionnelles naturelles sont préservées. Actuellement, l'anglais et le chinois sont pris en charge.
Démo 2 — Page de démonstration MiniCPM-o + Référence audio
Ceci est un fork de la page de démonstration officielle de MiniCPM-o 4.5, connecté au backend vllm-omni. Il inclut un exemple de fonctionnement de la référence audio (clonage vocal). Lorsque vous téléchargez un fichier WAV, la réponse est synthétisée avec le timbre et l'intonation de cette voix. Côté serveur, un cache LRU basé sur des clés SHA-256 évite le recalcul des références identiques, ce qui signifie qu'il n'y a pratiquement pas de surcoût supplémentaire après la première réponse.
Résumé de l'implémentation
Le travail a été effectué sur trois dépôts.
| Dépôt | Rôle |
|---|---|
nextain/vllm-omni | Fork de vllm-omni — Ajout du module de modèle MiniCPM-o 4.5 + pipeline à 3 étapes Thinker→Talker→Code2Wav + clonage vocal (session.update.ref_audio) |
nextain/MiniCPM-o-Demo-forvLLM-omni | Fork de la démo officielle PyTorch — Ajout du mode backend=vllm_omni, possibilité de saisir/valider directement l'URL vllm-omni sur la page audio-duplex |
nextain/naia-os | Application de bureau Naia — Ajout du champ de première classe MiniCpmOConfig.refAudio, AudioContext → 16 kHz mono → encodeur WAV base64 depuis le navigateur (Tauri webview) |
Le client Naia se connecte directement à /v1/realtime de vllm-omni (compatible avec l'API OpenAI Realtime) sans passer par une passerelle de démonstration. Il envoie de l'audio PCM16 16 kHz via WebSocket et reçoit des réponses en PCM16 mono 24 kHz. Tout le travail a été effectué avec Claude Code : le code du modèle, le YAML de configuration de stage, le stage_input_processor, le proxy de backend de démonstration, le client TypeScript de Naia + l'encodeur WAV + vitest.
- Naia est en pleine refonte. Une partie de Naia-os devrait devenir une structure avec un backend CLI flexible sous la forme de
naia-agent, et sera combinée avec Naia-memory et Naia-ADK.
Mais le "AI slop" persiste
Dans l'article précédent, j'avais écrit que "l'objectif de ce travail est de réaliser un écosystème Open Source natif de l'IA, une expérience visant à permettre à l'IA de contribuer correctement à l'open source sans "AI slop" (négligence de l'IA)". Actuellement, c'est toujours la partie la plus difficile, et après une dernière vérification, des problèmes sont apparus. Cependant, je voulais partager cela le plus rapidement possible, alors j'ai écrit ce billet avant de résoudre ces problèmes.
Au cours des derniers jours, j'ai fait tourner d'autres agents IA en tant que relecteurs adverses à quatre reprises. Lors du premier tour : 2 BLOCKER + 13 MAJOR. L'un d'eux était un mensonge évident comme "Le client exemple ne fonctionne pas — le backend est basé sur l'entrée audio mais est écrit en mode texte". Au deuxième tour : 1 MAJOR (l'exemple utilise audioop de la stdlib, supprimé dans Python 3.13). Aux troisième et quatrième tours : passage propre. Nos règles (2 passages propres consécutifs) ont été respectées. Mais je ne me suis pas arrêté là et j'ai refait un tour du point de vue du mainteneur de vllm-project, et c'est toujours le cas.
- 3 BLOCKER :
- Modification de l'invariant transversal (liste blanche → liste noire) de
chunk_transfer_adapter.pypour une fonctionnalité de modèle unique prompt_len_overrideest spécifique à MiniCPM-o mais se trouve dans l'infrastructure partagée- Le canal secondaire
chat_template_kwargs.ref_audioviole la couche — il existe un précédent de champ de première classe à côté
- Modification de l'invariant transversal (liste blanche → liste noire) de
- 5 MAJOR + 8 MINOR
Bien que nos règles internes soient respectées, selon les critères d'un mainteneur externe, la fusion ne serait pas acceptée dès le premier tour. De plus, upstream/main a été mis à jour à nouveau après la base de fusion de notre fork, et des travaux de fusion supplémentaires sont en cours.
Prochaines étapes
- Correction des BLOCKER/MAJOR du point de vue de l'upstream — En cours
- Fusion
upstream/main+ résolution des conflits — Bientôt - Soumission de la PR — Une fois les 2 points ci-dessus terminés. Décision en suspens : PR unique ou 2 PR séparées (module de modèle / clonage vocal)
- Fine-tuning coréen — Le modèle lui-même. Le fait que CosyVoice2 (backend Code2Wav) n'ait pas été entraîné en coréen est le plus grand obstacle. Actuellement, la génération de texte coréen est normale, mais la synthèse vocale est dégradée.
Je partagerai les prochaines étapes une fois qu'elles seront organisées. Nous montrerons que l'IA peut également contribuer à l'open source. Les commentaires et les issues GitHub sont les bienvenus.
Repos
Naia: https://naia.nextain.io