- 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
8.8 KiB
📋 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
gfx1100est 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-ct2avecgfx1100→ 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