--- license: mit language: - fr tags: - voice-assistant - speech-to-text - text-to-speech - ollama - faster-whisper - kokoro - silero-vad - claude-code --- # 🤖 JARVIS Local **Ton assistant vocal personnel, façon Iron Man, 100 % sur ton PC. Aucune clé API, rien ne sort de la machine.** Tu parles à une orbe futuriste. JARVIS te répond à la voix, et il sait vraiment faire des choses : - 🗣️ **Conversation vocale mains libres** : il détecte tout seul quand tu as fini de parler, et tu peux lui couper la parole - 🛠️ **Vraies tâches sur ta machine** : il délègue à un agent **Claude Code branché sur le modèle local** (fichiers, code, analyses…) et te résume le résultat - 🚀 **Lancer tes applications** sur l'écran de ton choix (« Mets Spotify sur l'écran de gauche ») - 🌐 **Ouvrir des sites** (« Ouvre mes emails ») - 📊 **Cartes, rapports et graphiques** directement sur l'interface - ❌ **Annuler une tâche** à la voix ou d'un clic ## 🧱 La stack | Brique | Outil | Où ça tourne | |---|---|---| | Détection de fin de parole | **Silero VAD** (ONNX) | CPU, ~0,1 ms par trame | | Oreille | **faster-whisper** large-v3-turbo (int8) | GPU, ~0,2 s par phrase | | Cerveau | **Qwen3-30B-A3B Instruct** (MoE) via **Ollama** | GPU, ~250 tokens/s | | Voix | **Kokoro** 82M (ONNX) | GPU, ~0,1-0,25 s par phrase | | Agent de tâches | **Claude Code** : tâches simples sur le modèle local (via Ollama), tâches complexes sur ton abonnement Claude | GPU / cloud | ``` micro ─WebSocket PCM 16 kHz─► Silero VAD ─► Whisper ─► Qwen3 (+ outils) ─► Kokoro ─► haut-parleurs │ └─► delegate_task ─► claude -p (sur Ollama) ``` La réponse est lue **par morceaux** pendant que le modèle écrit encore : le premier son arrive **~0,8 s** après la fin de ta phrase (affiché dans la console : « 1er son … »). ### Ce que JARVIS sait faire en plus - **Mémoire** : « Souviens-toi que… » / « Oublie… ». Les faits sont gardés dans `memory.json` (modifiable à la main) et rechargés à chaque session. - **Notifications Windows** à la fin de chaque tâche, et sur demande (« préviens-moi… »). - **Routage des tâches** : il choisit lui-même local ou Claude selon la difficulté ; dis « avec Claude » ou « en mode cloud » pour forcer Claude. - **Heure et date** instantanées (sans passer par l'agent). - **Phrases avec hésitation** : si tu reprends la parole moins d'une seconde après une pause, JARVIS abandonne sa réponse et recolle les deux morceaux. - **Corrections de transcription** : `corrections.json` (« MediaOne » → « Mediawan »…), pris en compte sans redémarrer. - **Journal** : chaque session est enregistrée dans `logs/AAAA-MM-JJ.log` (ce qu'il a entendu, ses réponses, ses outils, la latence). ## 📋 Prérequis - Windows, GPU NVIDIA (testé sur RTX 5090 32 Go ; 24 Go = prends un modèle plus petit, voir plus bas) - [Python](https://www.python.org/downloads/) (n'importe quelle version récente : l'installeur crée un environnement 3.12) - [Ollama](https://ollama.com/download) - Optionnel, pour les tâches : [Node.js](https://nodejs.org) + Claude Code (`npm install -g @anthropic-ai/claude-code`). Pas besoin de compte en mode `ollama`. ## ⚙️ Installation > 📘 Guide pas à pas complet (versions testées, vérifications, réinstallation sur un nouveau PC) : **[INSTALL.md](INSTALL.md)** ```powershell powershell -ExecutionPolicy Bypass -File install.ps1 ``` Le script crée `.venv`, installe les dépendances, télécharge Kokoro et Silero dans `models/`, puis fait `ollama pull qwen3:30b-a3b-instruct-2507-q4_K_M`. Whisper se télécharge tout seul au premier démarrage. ### ⚡ Réglage Ollama recommandé Par défaut, Ollama ne traite **qu'une requête à la fois** : pendant qu'une tâche de l'agent tourne, JARVIS ne peut plus te répondre. Pour éviter ça, mets ces variables d'environnement utilisateur, puis **redémarre Ollama** : ```powershell setx OLLAMA_NUM_PARALLEL 2 setx OLLAMA_FLASH_ATTENTION 1 setx OLLAMA_KV_CACHE_TYPE q8_0 setx OLLAMA_CONTEXT_LENGTH 32768 ``` Avec ça, le modèle MoE occupe environ 22 Go (2 conversations × 32k de contexte) et laisse de la marge à Whisper et Kokoro sur une carte de 32 Go. ## 🚀 Lancer Double-clique **`start.bat`** (ou `.venv\Scripts\python.exe server.py`), puis va sur **http://127.0.0.1:8788**, clique l'orbe, autorise le micro et parle. - « Bonjour JARVIS, présente-toi. » - « Ouvre Discord sur l'écran de gauche. » - « Lance une tâche : liste les fichiers de mon dossier de travail. » - « Affiche-moi un comparatif des trois plus grandes villes de France. » - « Stop » (en lui coupant la parole) / « Annule la tâche. » ## 🔧 Personnalisation (`.env`) Toutes les options sont commentées dans `.env.example`. Les principales : | Variable | Défaut | Rôle | |---|---|---| | `JARVIS_LLM` | `qwen3:30b-a3b-instruct-2507-q4_K_M` | Modèle Ollama (`qwen3:32b` = dense, un peu plus fin mais ~4x plus lent). Évite `qwen3:30b-a3b` tout court : il raisonne à voix haute | | `JARVIS_USER_NAME` | *(vide)* | Ton prénom : JARVIS t'appelle ainsi au lieu de « monsieur » | | `JARVIS_VOICE` | `ff_siwis` | Voix Kokoro. `ff_siwis` = seule voix française native (féminine). `bm_george`, `bm_lewis`… = hommes britanniques qui parlent français **avec l'accent** : l'effet majordome garanti | | `JARVIS_BARGE_IN` | `1` | Couper JARVIS en parlant. Mets `0` sur haut-parleurs si sa propre voix l'interrompt | | `VAD_THRESHOLD` / `JARVIS_SILENCE_MS` | `0.5` / `550` | Sensibilité du micro / silence qui marque la fin de ta phrase | | `JARVIS_AGENT_BACKEND` | `ollama` | Moteur des tâches simples (`anthropic` = tout sur Claude) | | `JARVIS_COMPLEX_BACKEND` | `anthropic` | Moteur des tâches complexes (`ollama` = 100 % local) | | `JARVIS_CONTINUE_MS` | `1000` | Délai pendant lequel une reprise de parole est la suite de ta phrase | | `JARVIS_TEMPERATURE` | `0.3` | Créativité du modèle (bas = plus stable) | | `JARVIS_HOTWORDS` | *(vide)* | Noms propres à bien reconnaître, séparés par des virgules | | `JARVIS_NOTIFY` | `1` | Notification Windows à la fin des tâches | | `JARVIS_WORKDIR` | `D:/jarvis-workspace` | Seul dossier où l'agent travaille | | `WHISPER_DEVICE` | `cuda` | `cpu` sans GPU NVIDIA (avec `WHISPER_COMPUTE=int8`) | ## ❓ Problèmes fréquents - **« Ollama injoignable » au démarrage** : lance Ollama (icône dans la barre des tâches) puis relance. - **JARVIS ne répond plus pendant une tâche** : applique le « Réglage Ollama recommandé » ci-dessus. - **Réponses lentes, `ollama ps` affiche du CPU** : la VRAM est pleine. Ferme les applis gourmandes en GPU, baisse `OLLAMA_CONTEXT_LENGTH`/`JARVIS_NUM_CTX` (24576), ou passe à un modèle plus petit. - **Il s'interrompt tout seul** : sa voix revient dans le micro. Prends un casque, ou `JARVIS_BARGE_IN=0`, ou monte `VAD_THRESHOLD`. - **Chrome ne t'entend pas (Edge oui)** : Chrome capte un autre micro. Choisis le bon dans la liste sous l'orbe (le choix est mémorisé). - **Il transcrit mal un nom propre** (ex. « MediaOne » au lieu de « Mediawan ») : ajoute-le dans `JARVIS_HOTWORDS`. - **Le tout premier démarrage est long** (~30 s pour Whisper) : la carte compile ses noyaux CUDA une fois pour toutes, c'est normal. - **Les tâches sont moins brillantes qu'avec Claude** : c'est un modèle local de 32B dans l'agent. Pour les grosses tâches : `JARVIS_AGENT_BACKEND=anthropic`. - **Les rapports/graphiques ne s'affichent pas** : les composants graphiques de l'interface se chargent depuis un CDN, il faut internet (seulement pour ça). ## 🔒 Sécurité - Serveur en **127.0.0.1 uniquement** : ne l'expose jamais sur le réseau. - L'agent tourne **sans demande d'autorisation** (`bypassPermissions`), avec tes droits, dans `JARVIS_WORKDIR`. Garde un dossier dédié. Pour un garde-fou plus strict : `JARVIS_PERMISSION_MODE=acceptEdits` (les commandes shell sont alors refusées). ## 📄 Licence MIT — fais-en ce que tu veux.