jarvis-local / README.md
PascalF53's picture
Sauvegarde JARVIS Local + guide d'installation
3fa98f2 verified
|
Raw History Blame Contribute Delete
8.17 kB
---
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.