File size: 8,174 Bytes
3fa98f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
---
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.