Initial commit: Documentation Effi v1.0

- Structure complète du projet
- Docker compose de production
- Documentation organisée par thèmes
- Guides d'installation et configuration
- Section dépannage détaillée
- Journal historique
This commit is contained in:
Folzo
2026-04-04 08:45:59 +02:00
commit d1e12cff60
35 changed files with 4656 additions and 0 deletions
@@ -0,0 +1,247 @@
# 📋 Projet Effi — Documentation complète
## 🎯 Objectif
Effi est un assistant IA personnel **100% self-hosted**, avec :
- Personnalité joyeuse, mémoire persistante entre sessions
- Discussion vocale (STT + TTS)
- Recherche internet (Brave Search)
- Prise de notes automatique dans AFFiNE
- Analyse d'images
- RAG sur fichiers personnels (PDF/DOC depuis Nextcloud)
---
## 🖥️ Infrastructure matérielle
|Machine|IP|Rôle|CPU/GPU|
|---|---|---|---|
|**effi-server**|`192.168.1.27`|Serveur principal Docker|Intel J5040 / ~7.6 GB RAM|
|**folzo-Corp** (PC gaming)|`192.168.1.11`|Ollama LLM + STT + TTS|AMD Ryzen 5800X3D / RX 7800 XT 16 GB VRAM|
---
## 🐳 Stack Docker — effi-server (`~/effi/docker-compose.yml`)
## Services actifs
|Service|Image|Port|Rôle|
|---|---|---|---|
|`open-webui`|`ghcr.io/open-webui/open-webui:main`|`3000`|Interface principale Effi|
|`qdrant`|`qdrant/qdrant`|`6333-6334`|Base vectorielle RAG|
|`couchdb`|`couchdb:3.3`|`5984`|Sync Obsidian LiveSync|
|`n8n`|`n8nio/n8n`|`5678`|Automatisation workflows|
|`mcpo`|`ghcr.io/open-webui/mcpo`|`8000`|Proxy MCP pour outils|
|`wol-proxy`|`effi-wol-proxy` (build local)|`3011`|Wake-on-LAN PC gaming|
## Fichier `.env` (`~/effi/.env`)
text
`OLLAMA_HOST=192.168.1.11 PC_GAMING_MAC=XX:XX:XX:XX:XX:XX WEBUI_SECRET_KEY=<clé_aléatoire> COUCHDB_USER=master COUCHDB_PASSWORD=<mot_de_passe> N8N_USER=master N8N_PASSWORD=<mot_de_passe>`
## wol-proxy
Image buildée localement depuis `~/effi/wol-proxy/` — pinge `192.168.1.11:11434`, envoie un magic packet WoL si Ollama ne répond pas.
---
## 🎮 Stack Docker — folzo-Corp (`~/speaches/docker-compose.yml`)
## speaches — STT (Speech To Text)
text
`services: # ───────────────────────────────────────────────────────── # 1. SPEACHES - Speech To Text (STT) OpenAI-compatible # → http://192.168.1.11:8200 # ───────────────────────────────────────────────────────── speaches-stt: image: speaches:rocm-ct2 # image buildée localement (voir ci-dessous) container_name: speaches-stt restart: unless-stopped ports: - "8200:8000" devices: - /dev/kfd - /dev/dri group_add: - "44" # GID video - "991" # GID render security_opt: - seccomp=unconfined environment: - HSA_OVERRIDE_GFX_VERSION=11.0.0 - WHISPER__MODEL=Systran/faster-whisper-large-v3 - WHISPER__LANGUAGE=fr - WHISPER__COMPUTE_TYPE=int8 # float16 non supporté en CPU - WHISPER__DEVICE=cpu # GPU ROCm en cours (rebuild) volumes: - speaches-models:/root/.cache/huggingface speaches-init: image: curlimages/curl:latest container_name: speaches-init restart: "no" depends_on: - speaches-stt entrypoint: > sh -c "sleep 5 && curl -sf -X POST http://speaches-stt:8000/v1/models/Systran%2Ffaster-whisper-large-v3 && echo 'Modèle enregistré'" volumes: speaches-models:`
## openedai-speech — TTS (Text To Speech) (`~/openedai-speech/docker-compose.yml`)
text
`services: openedai-speech: image: ghcr.io/matatonic/openedai-speech container_name: openedai-speech restart: unless-stopped ports: - "8100:8000" volumes: - ./tts-voices:/app/voices - ./tts-config:/app/config devices: - /dev/kfd - /dev/dri group_add: - "44" # GID video - "991" # GID render environment: - HSA_OVERRIDE_GFX_VERSION=11.0.0 - HIP_VISIBLE_DEVICES=0`
---
## ⚙️ Configuration Open WebUI
## Admin Panel → Settings → Connections
- **Ollama URL** : `http://192.168.1.11:3011`
## Admin Panel → Settings → Audio
- **STT Engine** : OpenAI
- **STT URL** : `http://192.168.1.11:8200/v1`
- **STT Model** : `Systran/faster-whisper-large-v3`
- **TTS Engine** : OpenAI
- **TTS URL** : `http://192.168.1.11:8100/v1`
- **TTS Model** : `tts-1-hd`
## Admin Panel → Settings → Documents
- **Embedding Engine** : Ollama
- **Embedding Model** : `bge-m3:latest`
- **Vector Database** : Qdrant
- **Qdrant URL** : `http://qdrant:6333`​
## Modèles Ollama disponibles sur folzo-Corp​
- `qwen2.5:14b` — LLM principal d'Effi
- `bge-m3` — Embeddings RAG
## Workspace Effi (Open WebUI)
- Compte admin : `master`
- Compte utilisateur : `folzo`
- System prompt global configuré avec personnalité + contexte infrastructure​
---
## 🔧 Build speaches ROCm — CTranslate2 gfx1100
## Problème rencontré
L'image speaches ne publie pas d'image ROCm. Il faut builder manuellement. La RX 7800 XT est `gfx1100` mais le Dockerfile par défaut cible `gfx1101` → `hipErrorInvalidDeviceFunction`.
## Solution
bash
`cd ~/speaches git clone https://github.com/speaches-ai/speaches . cd src # Corriger l'architecture GPU : gfx1101 → gfx1100 sed -i 's/gfx1101/gfx1100/g' Dockerfile.rocm-ct2 grep gfx Dockerfile.rocm-ct2 # vérification # Build (~50 min la première fois) docker build -f Dockerfile.rocm-ct2 -t speaches:rocm-ct2 .`
## Ajout MIOpen (fix cuDNN)​
text
`# Dans Dockerfile.rocm-ct2, ajouter dans le cmake : -DWITH_CUDNN=ON -DCUDnn_LIBRARY=/opt/rocm-6.3.4/lib/libMIOpen.so`
> ⚠️ **Statut actuel** : Le rebuild avec `gfx1100` est en cours. speaches fonctionne en **CPU** (int8) en attendant — ~10s pour 5s d'audio sur le Ryzen 5800X3D.​
---
## 🐛 Problèmes rencontrés et solutions
## 1. wol-proxy — image inexistante
**Problème** : Image Docker inexistante sur le registry​
**Solution** : Build local depuis le code Python maison
bash
`cd ~/effi && docker compose up -d --build`
## 2. Interface réseau Ubuntu plantée​
**Problème** : La carte réseau d'effi-server tombe silencieusement
**Solution** : Off/On via NetworkManager
bash
`sudo systemctl restart NetworkManager`
**Fix permanent** (pour NIC Intel i225/i226) :
bash
`echo 'ACTION=="add", SUBSYSTEM=="net", NAME=="enp3s0", RUN+="/usr/sbin/ethtool -s enp3s0 wol g"' \ | sudo tee /etc/udev/rules.d/99-disable-net-powersave.rules`
## 3. Whisper — mauvais repo HuggingFace
**Problème** : Open WebUI envoyait `Systeme/faster-whisper-tiny` (inexistant)
**Solution** : Corriger dans Settings → Audio → STT Model + changer `WHISPER__MODEL` dans docker-compose
## 4. speaches — `PRELOAD_MODELS` format invalide​
**Problème** : La variable `PRELOAD_MODELS` avec un objet JSON crash le conteneur
**Solution** : Supprimer `PRELOAD_MODELS` entièrement, utiliser un service `speaches-init` pour enregistrer le modèle via API au démarrage
## 5. openedai-speech — `group render` introuvable
**Problème** : `group_add: render` échoue car le groupe n'existe pas dans le conteneur
**Solution** : Utiliser les GID numériques `"44"` et `"991"` au lieu des noms
## 6. CTranslate2 float16 sur CPU​
**Problème** : `ValueError: float16 not supported on CPU backend`
**Solution** : `WHISPER__COMPUTE_TYPE=int8`
## 7. mcpo redémarre en boucle​
**Problème** : Config `mcpo-config/config.json` vide au premier démarrage
**Solution** :
bash
`cat > ~/effi/mcpo-config/config.json << 'EOF' {"mcpServers": {}} EOF docker compose restart mcpo`
## 8. Open WebUI lent après reboot​
**Problème** : Conteneurs sans `restart: unless-stopped`
**Solution** : Ajouter `restart: unless-stopped` à tous les services du docker-compose
---
## 📦 Initialisation CouchDB (une seule fois)
bash
`curl -X PUT http://master:MOT_DE_PASSE@192.168.1.27:5984/_users curl -X PUT http://master:MOT_DE_PASSE@192.168.1.27:5984/_replicator curl -X PUT http://master:MOT_DE_PASSE@192.168.1.27:5984/obsidian-livesync`
---
## 🔌 Ouverture de ports firewall
Sur **folzo-Corp** (Bazzite/Fedora) :
bash
`sudo firewall-cmd --add-port=8200/tcp --permanent # speaches STT sudo firewall-cmd --add-port=8100/tcp --permanent # openedai-speech TTS sudo firewall-cmd --reload`
---
## ✅ État actuel du pipeline vocal
|Étape|Status|Détail|
|---|---|---|
|STT (Whisper)|✅ Fonctionnel|speaches CPU, large-v3, ~10s/phrase|
|LLM (Ollama)|✅ Fonctionnel|qwen2.5:14b sur folzo-Corp|
|TTS (openedai-speech)|✅ Fonctionnel|tts-1-hd, ROCm activé|
|WOL PC gaming|✅ Fonctionnel|wol-proxy sur port 3011|
|RAG Qdrant|🔧 En cours|Nextcloud → indexation à configurer|
---
## 🚧 Prochaines étapes
-  Finaliser le rebuild `speaches:rocm-ct2` avec `gfx1100` → activer GPU pour STT
-  Configurer le RAG Qdrant avec les fichiers Nextcloud (~1 GB, ~1000 fichiers)
-  Tester mem0 / MCP pour la mémoire persistante d'Effi​
-  Configurer n8n pour les workflows automatiques
-  Sync Obsidian LiveSync sur mobile​