Skip to Content
Mélodium 0.10.1 is now available!
DocsExemplesQ&A vocal (local)

Q&A vocal (local)

Source: 07_voice_qa_local

Un pipeline de Q&A vocal entièrement hors ligne : microphone → Whisper local (parole-vers-texte) → Mistral 7B local (génération de texte) → journal et fichier de sortie. Aucune clé d’API n’est requise après le téléchargement initial des modèles depuis HuggingFace.

Exécution

melodium run 07_voice_qa_local/Compo.toml --output qa.txt
[…] info: pipeline: both models ready — listening… […] info: answer: Mélodium est un langage de programmation dataflow conçu pour …

Nécessite environ 14 Go de RAM pour Mistral 7B.

Fonctionnement

Quatre modèles sont déclarés : deux pointeurs HfHub (un par dépôt de modèle) et deux modèles d’inférence :

model WhisperHub() : HfHub { repo_id = "openai/whisper-tiny" } model MistralHub() : HfHub { repo_id = "mistralai/Mistral-7B-v0.1" } model Asr() : Whisper {} model Llm() : Mistral { temperature = 0.7, top_p = 0.9, max_new_tokens = 256 }

Chargement parallèle des modèles

Les deux modèles sont téléchargés en parallèle dès que startup se déclenche :

See in Compositeur Studio

La capture audio démarre dès que le modèle ASR est chargé (loadAsr.loaded). Le LLM peut finir de se charger en parallèle — s’il n’est pas prêt au moment où la première transcription arrive, le dataflow bloque naturellement jusqu’à ce qu’il le soit.

Formatage du prompt

Chaque segment transcrit est formaté dans le template de prompt [INST] de Mistral avant d’être envoyé au modèle :

Self.question -> wrapEntry.value,map -> fmt.entries,formatted -> generate.prompt,generated -> Self.answer

entry(key="q") enveloppe la chaîne dans une StringMap, et format(format="[INST] {q} [/INST]") l’interpole. Cela évite la concaténation de chaînes et garde le template lisible.

Dépendances

[dependencies] std = "0.10.1" # flux de base, journalisation, structures de données fs = "0.10.1" # lecture/écriture de fichiers locaux audio = "0.10.1" # décodage / encodage / rééchantillonnage audio record = "0.10.1" # capture microphone ml = "0.10.1" # inférence LLM, STT, TTS et modèles locaux