Talk-Llama
(github.com/ggerganov)- Talk-Llama est un exemple de
whisper.cppoù, lorsque vous parlez au micro dans le terminal, Whisper convertit la voix en texte et LLaMA répond - SDL2 est nécessaire pour capturer l’audio du micro, et l’option CMake
WHISPER_SDL2=ONdoit être activée lors du build - À l’exécution, le modèle Whisper se spécifie avec
-mw; pour une conversation en temps réel, les modèlesbaseousmallsont recommandés - Avec
-ml, on spécifie un modèle LLaMA compatible ggml; la préparation du modèle suit les instructions dellama.cpp - L’utilisation de
--session FILEpermet d’enregistrer et de recharger l’état du modèle, afin de conserver le contexte sur de longues conversations ou entre plusieurs exécutions
Exemple de conversation vocale dans le terminal
whisper.cpp/examples/talk-llamaest un exemple permettant de discuter vocalement avec une IA LLaMA dans le terminal- Au 2 novembre 2023, la démo de performance est indiquée comme ayant été exécutée sur un M2 Ultra avec la combinaison Whisper Medium + LLaMA v2 13B Q8_0
- Une démo précédente est fournie séparément en vidéo comme exemple d’exécution sur CPU
Build et déroulé de l’exécution
whisper-talk-llamadépend de la bibliothèque SDL2 pour capturer l’audio du micro- Exemples d’installation de SDL2 selon le système d’exploitation :
- Linux dérivé de Debian :
sudo apt-get install libsdl2-dev - Fedora Linux :
sudo dnf install SDL2 SDL2-devel - Mac OS :
brew install sdl2
- Linux dérivé de Debian :
- Dans le build CMake, activez l’option
WHISPER_SDL2=ONcmake -B build -S . -DWHISPER_SDL2=ONcmake --build build --config Release
- L’exemple d’exécution spécifie ensemble le modèle Whisper, le modèle LLaMA, le prompt et le nombre de threads
./build/bin/whisper-talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8
Options de sélection des modèles
- L’argument
-mwspécifie le modèle Whisper à utiliser- Pour une expérience en temps réel, les modèles
baseousmallsont recommandés
- Pour une expérience en temps réel, les modèles
- L’argument
-mlspécifie le modèle LLaMA à utiliser- Pour obtenir un modèle LLaMA compatible
ggml, il est indiqué de se référer aux instructions de llama.cpp
- Pour obtenir un modèle LLaMA compatible
Continuer le contexte avec un fichier de session
whisper-talk-llamaprend en charge la gestion de session pour des conversations plus cohérentes et continues- Il peut conserver le contexte des interactions précédentes afin de comprendre les demandes de l’utilisateur et d’y répondre plus naturellement
- La prise en charge des sessions s’active à l’exécution via l’option de ligne de commande
--session FILE- Après chaque interaction, l’état du modèle
whisper-talk-llamaest enregistré dans le fichier spécifié - Si le fichier n’existe pas, il est créé
- Si le fichier existe, l’état du modèle est chargé depuis ce fichier pour reprendre la session précédente
- Après chaque interaction, l’état du modèle
- C’est utile lors d’interactions avec l’assistant IA sur de longues conversations ou sur plusieurs sessions, afin qu’il se souvienne des interactions précédentes et fournisse des réponses contextuelles plus pertinentes
- Exemple d’exécution :
./build/bin/whisper-talk-llama --session ./my-session-file -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-13b/ggml-model-q4_0.gguf -p "Georgi" -t 8
Sortie vocale et retours
- Pour écouter les réponses textuelles générées sous forme vocale, un outil de TTS est nécessaire
- Vous pouvez utiliser le moteur TTS de votre choix et modifier le script speak selon vos besoins
- La configuration par défaut utilise
saysur MacOS ou SpeechSynthesizer sur Windows - Les retours sont sollicités via la GitHub Discussion #672
1 commentaires
Commentaires sur Hacker News
C’est sympa à voir ici :)
Les performances d’Apple Silicon doivent être bien meilleures maintenant que dans la vidéo. whisper.cpp tourne désormais entièrement sur le GPU, et la vitesse de génération de llama.cpp s’est aussi beaucoup améliorée ces derniers mois.
Les performances réelles sont impressionnantes aussi.
Très chouette. J’ai récemment essayé de connecter Llama à un modèle open source de synthèse vocale dans un projet, et il y avait beaucoup d’aspects d’ingénierie intéressants.
Personnellement, les assistants de code qui me sont les plus utiles sont ceux qui réduisent la charge de travail manuelle, par exemple en générant les arguments et les types à partir des docstrings, ou l’inverse, plutôt que d’essayer de faire à ma place la réflexion difficile ou la résolution de problèmes. Pour les tâches plus complexes, il faut quand même donner à l’assistant un très bon point de départ.
Je me parle souvent à moi-même en codant, donc si un outil de ce genre pouvait intégrer mes paroles sous forme de vecteurs de contexte pour les utiliser comme entrée supplémentaire et donner au modèle un meilleur point de départ, ce serait vraiment futuriste et utile. J’ai adopté Copilot assez tard et je ne l’utilise pas tout le temps, mais si quelqu’un connaît quelque chose de similaire, ça m’intéresse.
Si la proposition open weights se concrétise dans les 270 jours, cela pourrait en pratique être interdit quelques mois plus tard.
Je n’ai trouvé absolument rien qui parle d’interdire les modèles open weights. Je vois mal pourquoi la recommandation finale contiendrait « interdisez-les ».
On peut imaginer, par exemple, des recommandations favorables aux acteurs en place, où le gouvernement rendrait le coût d’adoption des modèles open weights si élevé qu’acheter chez OpenAI deviendrait bien plus attrayant. Mais ce n’est pas ce qui était dit au départ.
L’Executive Order me semble assez facile à lire ; est-ce qu’il y a quelque chose que j’ai raté dans le texte ?
https://www.whitehouse.gov/briefing-room/presidential-action...
Je suis d’accord pour dire qu’une formulation aussi ouverte est préoccupante, mais où voyez-vous une interdiction concrète ?
Sur Arch et Debian, lancer
./talk-llamaprovoque une floating point exception. J’ai vérifiésdl2libetffmpeg, et j’ai aussi regardé l’issue correspondante (https://github.com/ggerganov/whisper.cpp/issues/1325), mais rien n’y fait. D’autres ont le même problème ?https://github.com/ggerganov/whisper.cpp/issues/352#issuecom...
Je ne sais pas exactement ce qui a changé, mais en gros j’ai supprimé
ffmpegetlibsdl2-dev, puis exécutémakeà la racine du dépôt. Ensuite j’ai installélibsdl2etffmpeg, puis faitmake talk-llama.C’est assez lent sur un i7-8550U à 4 cœurs avec 16 Go de RAM.
Depuis la racine du dépôt, j’ai fait à peu près ceci :
$ sudo apt purge ffmpeg$ make clean$ git pull$ make$ sudo apt install libsdl2-dev$ make talk-llama$ ./talk-llama -mw ./models/ggml-small.en.bin -ml ../llama.cpp/models/llama-2-13b.Q4_0.gguf -p "t0mk" -t 8\n\nN’existe-t-il pas de solution de synthèse vocale capable de recevoir un flux de texte et de le prononcer immédiatement, sans attendre que Llama ait fini de générer ?
J’imagine que ce n’est possible que si le modèle remplit le buffer assez vite pour que le moteur de synthèse vocale ne s’arrête pas.
Sans attendre la fin complète de la réponse du LLM, est-ce qu’on pourrait réduire la latence en diffusant la synthèse vocale au fil de la génération, par paquets d’environ 6 tokens ?
On peut déjà améliorer la détection de fin d’énoncé, qui n’utilise actuellement qu’un seuil adaptatif de base, et on pourrait aussi faire générer des réponses rapides et génériques par un petit LLM pendant qu’un gros LLM calcule. La synthèse vocale pourrait aussi être diffusée par chunks ou par phrases
À mon avis, l’une des meilleures versions open source de ce type de chatbot est https://github.com/yacineMTB/talk. Il y a sans doute encore plus de projets similaires aujourd’hui
Quelle est la meilleure interface de chat pour Llama ? J’ai une 3090 et j’aimerais faire tourner un modèle dans le terminal pour des tâches de code rapides
pacman -S ollamaollama serveollama run llama2:13b 'insert prompt'https://ollama.ai/
https://github.com/cogentapps/chat-with-gpt
Il semble conçu pour utiliser ElevenLabs et l’API OpenAI, mais il pourrait aussi être facile à configurer pour Whisper.cpp local et Llama
Ils recrutent et n’ont pas de stratégie de monétisation publique, donc je m’attends à ce que certains changements arrivent bientôt, soit avec des fonctions gratuites qui deviennent payantes, soit avec des limitations volontaires. Cela dit, pour des applis légères gratuites pour LLM qui reposent entièrement sur llama.cpp, il est difficile de créer un vrai verrouillage fournisseur. Si l’open source passe avant les fonctionnalités, je recommanderais moi aussi ollama
Pour les questions techniques, j’ai l’impression que Wizard est la référence du moment
J’aime vraiment ollama pour exécuter des LLM open source en local, mais quel serait l’équivalent pour Whisper ou les modèles open source récents de synthèse vocale ? Je ne connais pas vraiment de projet qui rende l’installation locale de Whisper aussi simple
WhisperScript avait aussi l’air plutôt bien : https://github.com/openai/whisper/discussions/1028
Cela dit, l’installation de WhisperX n’est pas si difficile. Voici un journal étape par étape que j’avais rédigé il y a quelques mois : https://llm-tracker.info/books/logbook/page/transcription-te...
https://goodsnooze.gumroad.com/l/macwhisper
Pour la synthèse vocale, coqui offre la meilleure expérience utilisateur et les meilleurs modèles sur plusieurs langues, même si la qualité n’est pas au niveau des fournisseurs commerciaux de synthèse vocale
Est-ce que quelqu’un pourrait expliquer simplement ce que ça peut faire ? Est-ce que ça peut apprendre et conserver le contexte du chat, en construisant une sorte de mémoire à long terme ?
La limite de contexte du LLM dépend du modèle et des réglages choisis par l’utilisateur. Par exemple, cela varie selon que vous utilisez Llama 2, Wizard Vicuna ou un autre modèle, ainsi que selon la façon dont la fenêtre de contexte est configurée. Un LLM ne « répond » pas tant à l’utilisateur qu’il ne prédit la suite la plus plausible dans l’historique d’une conversation entre l’utilisateur et un assistant utile ; comme il réussit ainsi à faire semblant d’être un assistant utile, il finit par en être un en pratique, ce qui peut prêter à confusion
En modifiant le pipeline, ce genre de comportement semble possible. Si l’architecture devient
reconnaissance vocale → Wrapper[Llama] → synthèse vocale, et que le Wrapper peut laisser Llama faire son travail tout en appliquant un traitement supplémentaire au texte d’entrée, cela devient intéressantLe Wrapper pourrait analyser la conversation et en extraire des éléments clés comme « cette personne s’appelle Bob, c’est un homme de 35 ans, il aime les chiens, préfère que tout soit bien rangé, veut un rappel à 17 h pour appeler sa fille, est un agent infiltré de la mafia antarctique et préfère qu’on lui parle avec un fort accent polonais », puis agir en conséquence
Par exemple, il pourrait créer le rappel de 17 h via HomeAssistant, configurer le moteur de synthèse vocale avec un accent polonais et modifier l’historique de départ des sessions suivantes. Il pourrait insérer le nom de la personne dans le dialogue interne et fournir, dans l’introduction préalable des conversations suivantes, un condensé de ses centres d’intérêt et de sa personnalité
De cette manière, il y aurait de l’interactivité via les actions réalisées par d’autres outils, et aussi une continuité en modifiant l’historique des conversations suivantes
Ça donne vraiment une forte vibe ELIZA