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:
@@ -0,0 +1,54 @@
|
|||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# EFFI SERVER - Variables d'environnement
|
||||||
|
#
|
||||||
|
# IMPORTANT :
|
||||||
|
# 1. Copier ce fichier en .env : cp .env.example .env
|
||||||
|
# 2. Remplir toutes les valeurs avec vos informations
|
||||||
|
# 3. Ne JAMAIS commiter le fichier .env !
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# 1. OPEN WEBUI
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# Clé secrète pour la session OpenWebUI (générer une chaîne aléatoire)
|
||||||
|
WEBUI_SECRET_KEY=changez_moi_par_une_cle_longue_et_aleatoire
|
||||||
|
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# 2. OLLAMA / PC GAMING
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# IP du PC Gaming où tourne Ollama
|
||||||
|
OLLAMA_HOST=192.168.1.11
|
||||||
|
|
||||||
|
# Adresse MAC du PC Gaming (pour Wake-on-LAN)
|
||||||
|
# Format : XX:XX:XX:XX:XX:XX
|
||||||
|
PC_GAMING_MAC=00:00:00:00:00:00
|
||||||
|
|
||||||
|
# IP de broadcast du réseau local (généralement 192.168.1.255)
|
||||||
|
BROADCAST_IP=192.168.1.255
|
||||||
|
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# 3. COUCHDB (Obsidian LiveSync)
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# Nom d'utilisateur administrateur CouchDB
|
||||||
|
COUCHDB_USER=master
|
||||||
|
|
||||||
|
# Mot de passe administrateur CouchDB
|
||||||
|
COUCHDB_PASSWORD=changez_moi_mot_de_passe_securise
|
||||||
|
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# 4. N8N (Automatisation)
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# Nom d'utilisateur pour l'accès à n8n
|
||||||
|
N8N_USER=master
|
||||||
|
|
||||||
|
# Mot de passe pour l'accès à n8n
|
||||||
|
N8N_PASSWORD=changez_moi_mot_de_passe_securise
|
||||||
|
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# 5. CONFIGURATION OPTIONNELLE
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# Fuseau horaire (déjà configuré dans docker-compose.yml)
|
||||||
|
# TZ=Europe/Paris
|
||||||
|
|
||||||
|
# Version ROCm à utiliser (si différente)
|
||||||
|
# HSA_OVERRIDE_GFX_VERSION=11.0.0
|
||||||
+72
@@ -0,0 +1,72 @@
|
|||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# EFFI - Fichiers sensibles et données à ignorer
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
|
||||||
|
# Variables d'environnement sensibles
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.production
|
||||||
|
.env.*.local
|
||||||
|
|
||||||
|
# Clés et certificats
|
||||||
|
*.pem
|
||||||
|
*.key
|
||||||
|
*.crt
|
||||||
|
*.p12
|
||||||
|
*.pfx
|
||||||
|
|
||||||
|
# Données et volumes Docker (jamais versionner !)
|
||||||
|
**/data/
|
||||||
|
**/storage/
|
||||||
|
**/*-data/
|
||||||
|
qdrant-storage/
|
||||||
|
couchdb-data/
|
||||||
|
n8n-data/
|
||||||
|
obsidian-vault/
|
||||||
|
whisper-cache/
|
||||||
|
open-webui-data/
|
||||||
|
pipelines-data/
|
||||||
|
tts-voices/
|
||||||
|
tts-config/
|
||||||
|
mcpo-config/
|
||||||
|
wol-proxy/
|
||||||
|
|
||||||
|
# Fichiers de base de données
|
||||||
|
*.db
|
||||||
|
*.sqlite
|
||||||
|
*.sqlite3
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
|
log/
|
||||||
|
|
||||||
|
# Sauvegardes locales
|
||||||
|
*.tar.gz
|
||||||
|
*.zip
|
||||||
|
*.7z
|
||||||
|
*.rar
|
||||||
|
BACKUP*/
|
||||||
|
backup*/
|
||||||
|
Sauvegarde*/
|
||||||
|
sauvegarde*/
|
||||||
|
|
||||||
|
# Fichiers système
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
desktop.ini
|
||||||
|
|
||||||
|
# IDE et éditeurs
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Fichiers temporaires
|
||||||
|
*.tmp
|
||||||
|
*.temp
|
||||||
|
.cache/
|
||||||
|
|
||||||
|
# Fichiers de configuration spécifiques à l'utilisateur
|
||||||
|
*.local
|
||||||
@@ -0,0 +1,162 @@
|
|||||||
|
# 🤖 Effi - Assistant IA Personnel Self-Hosted
|
||||||
|
|
||||||
|
Effi est un assistant IA personnel **100% auto-hébergé**, avec mémoire persistante entre sessions, discussion vocale (STT + TTS), et intégration avec les outils de productivité.
|
||||||
|
|
||||||
|
## 🎯 Objectifs
|
||||||
|
|
||||||
|
- **Assistant conversationnel** avec personnalité joyeuse et mécanismes de mémoire
|
||||||
|
- **Discussion vocale complète** : Speech-to-Text (Whisper) + Text-to-Speech (Piper/XTTS)
|
||||||
|
- **Mémoire persistante** entre les sessions via filtres OpenWebUI
|
||||||
|
- **Intégration Obsidian** pour la prise de notes et la synchronisation
|
||||||
|
- **Automatisation** via n8n et protocole MCP
|
||||||
|
- **Infrastructure entièrement locale** - aucun appel API externe
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🏗️ Architecture
|
||||||
|
|
||||||
|
### Infrastructure Multi-Machines
|
||||||
|
|
||||||
|
| Machine | IP | Rôle | Spécifications |
|
||||||
|
|---------|-----|------|----------------|
|
||||||
|
| **effi-server** | `192.168.1.27` | Serveur Docker principal | Intel J5040 / 7.6 GB RAM |
|
||||||
|
| **folzo-Corp** | `192.168.1.11` | LLM + STT + TTS | AMD Ryzen 5800X3D / RX 7800 XT 16GB VRAM |
|
||||||
|
|
||||||
|
### Schéma Global
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ EFFI SERVER (192.168.1.27) │
|
||||||
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||||
|
│ │ Open WebUI │ │ Qdrant │ │ n8n │ │ CouchDB │ │
|
||||||
|
│ │ Port 3000 │ │ Port 6333 │ │ Port 5678 │ │ Port 5984 │ │
|
||||||
|
│ └──────┬───────┘ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||||
|
│ │ │
|
||||||
|
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||||
|
│ │ mcpo │ │ wol-proxy │ │ pipelines │ │
|
||||||
|
│ │ Port 8000 │ │ Port 3011 │ │ Port 9099 │ │
|
||||||
|
│ └──────────────┘ └──────┬───────┘ └──────────────┘ │
|
||||||
|
└───────────────────────────┼─────────────────────────────────────────────────┘
|
||||||
|
│ Wake-on-LAN + Proxy
|
||||||
|
▼
|
||||||
|
┌─────────────────────────────────────────────────────────────────────────────┐
|
||||||
|
│ FOLZO-CORP (192.168.1.11) │
|
||||||
|
│ ┌─────────────────────────────────────────────────────────────────────┐ │
|
||||||
|
│ │ RX 7800 XT (ROCm) │ │
|
||||||
|
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
|
||||||
|
│ │ │ Ollama │ │ speaches │ │ openedai │ │ │
|
||||||
|
│ │ │ qwen2.5:14b │ │ Whisper STT │ │ speech TTS │ │ │
|
||||||
|
│ │ │ Port 11434 │ │ Port 8200 │ │ Port 8100 │ │ │
|
||||||
|
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
|
||||||
|
│ └─────────────────────────────────────────────────────────────────────┘ │
|
||||||
|
└─────────────────────────────────────────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐳 Stack Services
|
||||||
|
|
||||||
|
| Service | Hôte | Port | Image | Rôle |
|
||||||
|
|---------|------|------|-------|------|
|
||||||
|
| Open WebUI | effi-server | 3000 | `ghcr.io/open-webui/open-webui:main` | Interface IA principale |
|
||||||
|
| Qdrant | effi-server | 6333 | `qdrant/qdrant:latest` | Base vectorielle RAG |
|
||||||
|
| CouchDB | effi-server | 5984 | `couchdb:3.3` | Sync Obsidian LiveSync |
|
||||||
|
| n8n | effi-server | 5678 | `docker.n8n.io/n8nio/n8n:latest` | Automatisation workflows |
|
||||||
|
| mcpo | effi-server | 8000 | `ghcr.io/open-webui/mcpo:main` | Proxy MCP outils |
|
||||||
|
| wol-proxy | effi-server | 3011 | Build local | Wake-on-LAN + Proxy Ollama |
|
||||||
|
| pipelines | effi-server | 9099 | `ghcr.io/open-webui/pipelines:main` | Middleware mem0 |
|
||||||
|
| speaches | folzo-Corp | 8200 | `speaches:rocm-ct2` (build local) | STT Whisper ROCm |
|
||||||
|
| openedai-speech | folzo-Corp | 8100 | `ghcr.io/matatonic/openedai-speech` | TTS Piper/XTTS ROCm |
|
||||||
|
| Ollama | folzo-Corp | 11434 | Installation native | LLM qwen2.5:14b, bge-m3 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 Documentation
|
||||||
|
|
||||||
|
- [📁 Architecture](./docs/01-architecture/) - Infrastructure et réseau
|
||||||
|
- [⚙️ Configuration](./docs/02-configuration/) - Docker, audio, mémoire
|
||||||
|
- [📖 Guides](./docs/03-guides/) - Installation et configuration initiale
|
||||||
|
- [🔧 Dépannage](./docs/04-depannage/) - Erreurs courantes et solutions
|
||||||
|
- [📓 Journal](./docs/05-journal/) - Historique des évolutions
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Démarrage Rapide
|
||||||
|
|
||||||
|
### Prérequis
|
||||||
|
|
||||||
|
- **Serveur** : Ubuntu 22.04+ avec Docker et Docker Compose
|
||||||
|
- **PC Gaming** : Ollama installé avec modèles `qwen2.5:14b` et `bge-m3`
|
||||||
|
- **Réseau** : Les deux machines sur le même LAN
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Cloner le dépôt
|
||||||
|
git clone https://gitea.folzocorp.fr/Folzo/effi.git
|
||||||
|
cd effi
|
||||||
|
|
||||||
|
# 2. Configurer les variables d'environnement
|
||||||
|
cp .env.example .env
|
||||||
|
# Éditer .env avec tes valeurs
|
||||||
|
|
||||||
|
# 3. Démarrer les services
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration OpenWebUI
|
||||||
|
|
||||||
|
1. Accéder à `http://192.168.1.27:3000`
|
||||||
|
2. Créer un compte admin
|
||||||
|
3. Configurer les connexions (Ollama, Audio, etc.)
|
||||||
|
4. Voir le [guide de première configuration](./docs/03-guides/premiere-config.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔑 Caractéristiques Clés
|
||||||
|
|
||||||
|
### 🎤 Pipeline Vocal
|
||||||
|
- **STT** : Whisper large-v3 avec ROCm sur RX 7800 XT
|
||||||
|
- **TTS** : Piper français (`fr_FR-upmc-medium`) ou XTTS
|
||||||
|
- **Latence** : ~500ms pour le TTS, ~10s pour STT (CPU, GPU en cours)
|
||||||
|
|
||||||
|
### 🧠 Mémoire Persistante
|
||||||
|
- **Auto Memory** : Extraction automatique des faits importants
|
||||||
|
- **Memory Injection** : Injection des souvenirs dans le contexte
|
||||||
|
- **Stockage** : SQLite dans le conteneur OpenWebUI
|
||||||
|
|
||||||
|
### 🔗 Intégrations
|
||||||
|
- **Obsidian** : LiveSync via CouchDB + outils MCP
|
||||||
|
- **n8n** : Workflows d'automatisation
|
||||||
|
- **mcpo** : Protocole MCP pour outils externes
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Technologies
|
||||||
|
|
||||||
|
| Domaine | Technologies |
|
||||||
|
|---------|-------------|
|
||||||
|
| **LLM** | Ollama, Qwen 2.5 14B |
|
||||||
|
| **Interface** | Open WebUI |
|
||||||
|
| **STT** | Faster Whisper (ROCm) |
|
||||||
|
| **TTS** | Piper, XTTS, OpenedAI-Speech |
|
||||||
|
| **Vector DB** | Qdrant |
|
||||||
|
| **Automatisation** | n8n |
|
||||||
|
| **Sync Notes** | CouchDB |
|
||||||
|
| **GPU** | AMD ROCm (RX 7800 XT gfx1100) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📄 Licence
|
||||||
|
|
||||||
|
Ce projet est personnel et documenté à des fins d'apprentissage.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🙋 Auteur
|
||||||
|
|
||||||
|
**Folzo** - [gitea.folzocorp.fr/Folzo](https://gitea.folzocorp.fr/Folzo)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Dernière mise à jour : Avril 2026*
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
# 🏗️ Architecture Système
|
||||||
|
|
||||||
|
## 📋 Schéma Global
|
||||||
|
- **Matériel** :
|
||||||
|
- Serveur : `folzo-Corp` (RX 7800 XT)
|
||||||
|
- IP : `192.168.1.50`
|
||||||
|
- Rôle : Hôte principal pour Docker et ROCm.
|
||||||
|
|
||||||
|
- **Serveurs et Rôles** :
|
||||||
|
| Nom | Rôle | IP |
|
||||||
|
|-------------------|-------------------------------|--------------|
|
||||||
|
| effi-server | Ancien hôte (obsolète) | 192.168.1.30 |
|
||||||
|
| folzo-Corp | Hôte principal (ROCm + Docker)| 192.168.1.50 |
|
||||||
|
| NAS | Stockage partagé | 192.168.1.20 |
|
||||||
|
|
||||||
|
## 📊 Diagramme Docker
|
||||||
|
```mermaid
|
||||||
|
graph TD
|
||||||
|
A[folzo-Corp] --> B[Docker]
|
||||||
|
B --> C[OpenWebUI]
|
||||||
|
B --> D[Whisper-STT]
|
||||||
|
D --> E[ROCm]
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## 🔗 Liens Relatifs
|
||||||
|
- Pour plus de détails sur la configuration Docker : [[02_Configuration_Docker]].
|
||||||
|
- Pour les problèmes rencontrés : [[22_Problèmes_Resolus]].
|
||||||
|
# 🔧 01_Architecture_Système
|
||||||
|
|
||||||
|
> **Liens internes** : [[02_Configuration_Docker]]
|
||||||
|
|
||||||
|
## 📋 Schéma Global
|
||||||
|
- **Description** : Diagramme global des serveurs, IPs, rôles, et relations entre composants.
|
||||||
|
- **Contenu à ajouter** :
|
||||||
|
- Schéma réseau.
|
||||||
|
- Tableau comparatif matériel (CPU, GPU, stockage).
|
||||||
|
- Diagramme Docker (services et dépendances).
|
||||||
|
|
||||||
|
## 🛠️ Diagrammes
|
||||||
|
- **Format** : Mermaid.js ou Excalidraw intégré.
|
||||||
|
|
||||||
|
---
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
# 🐳 Configuration Docker
|
||||||
|
|
||||||
|
## 📝 Docker Compose
|
||||||
|
```yaml
|
||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
openwebui:
|
||||||
|
image: ghcr.io/open-webui/open-webui:main
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
volumes:
|
||||||
|
- ./openwebui_data:/data
|
||||||
|
environment:
|
||||||
|
- OW_UI_HOST=0.0.0.0
|
||||||
|
depends_on:
|
||||||
|
- qdrant
|
||||||
|
|
||||||
|
qdrant:
|
||||||
|
image: qdrant/qdrant
|
||||||
|
ports:
|
||||||
|
- "6333:6333"
|
||||||
|
volumes:
|
||||||
|
- ./qdrant_data:/qdrant/data
|
||||||
|
|
||||||
|
whisper:
|
||||||
|
image: bofenghuang/whisper-large-v3-french
|
||||||
|
ports:
|
||||||
|
- "8200:80"
|
||||||
|
environment:
|
||||||
|
- HSA_OVERRIDE_GFX_VERSION=11.0.0
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Variables d'Environnement
|
||||||
|
| Variable | Valeur |
|
||||||
|
|------------------------------|----------------------------|
|
||||||
|
| `HSA_OVERRIDE_GFX_VERSION` | `11.0.0` |
|
||||||
|
| `WHISPER__COMPUTE_TYPE` | `int8` |
|
||||||
|
|
||||||
|
## 🔗 Liens Relatifs
|
||||||
|
- Pour des détails sur l'architecture générale : [[01_Architecture_Systeme]].
|
||||||
|
- Pour les problèmes de configuration : [[04_Depannage]].
|
||||||
|
# 🔧 02_Configuration_Docker
|
||||||
|
|
||||||
|
> **Liens internes** : [[01_Architecture_Systeme]] → [[03_Configuration_Audio]]
|
||||||
|
|
||||||
|
## 📋 `docker-compose.yml`
|
||||||
|
```yaml
|
||||||
|
# Exemple de structure à compléter
|
||||||
|
version: "3.8"
|
||||||
|
services:
|
||||||
|
openwebui:
|
||||||
|
image: ghcr.io/openwebui/openwebui:main
|
||||||
|
# Configuration à détailler...
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📌 Variables `.env`
|
||||||
|
- **Exemple** :
|
||||||
|
```env
|
||||||
|
OWUI_AUTH=True
|
||||||
|
QDRANT_URL=http://qdrant:6333
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔗 Services
|
||||||
|
| Service | Rôle | Ports |
|
||||||
|
|---------------|--------------------------------------|----------------|
|
||||||
|
| OpenWebUI | Interface utilisateur | 8080:80 |
|
||||||
|
| Qdrant | Base de données vectorielle | 6333:6333 |
|
||||||
|
|
||||||
|
---
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
# 🎤 Configuration Audio
|
||||||
|
|
||||||
|
## 🔊 STT (Speech-to-Text)
|
||||||
|
### Modèles Utilisés
|
||||||
|
| Modèle | Type | Port |
|
||||||
|
|-------------------------------------|---------------|--------|
|
||||||
|
| `bofenghuang/whisper-large-v3-french` | ROCm | `8200` |
|
||||||
|
| `Systran/faster-whisper-large-v3` | CPU (backup) | `8201` |
|
||||||
|
|
||||||
|
### Problèmes Connus
|
||||||
|
- **Erreur `gfx1100`** : Résolu via un build custom. Voir [[22_Problèmes_Resolus#gfx1100]].
|
||||||
|
|
||||||
|
## 📢 TTS (Text-to-Speech)
|
||||||
|
### Voix Disponibles
|
||||||
|
| Voix | Modèle | Latence | Taille |
|
||||||
|
|----------|------------------|---------|-------|
|
||||||
|
| `alloy` | XTTS | 0.5s | 1.8GB |
|
||||||
|
| `piper-fr` | ONNX | 0.3s | 50MB |
|
||||||
|
|
||||||
|
## 🔗 Liens Relatifs
|
||||||
|
- Pour la configuration Docker : [[02_Configuration_Docker]].
|
||||||
|
- Pour les logs de diagnostic : [[07_Logs_Diagnostic]].
|
||||||
|
# 🔧 03_Configuration_Audio
|
||||||
|
|
||||||
|
> **Liens internes** : [[02_Configuration_Docker]] → [[04_Depannage]]
|
||||||
|
|
||||||
|
## 🎙️ STT (Speech-to-Text)
|
||||||
|
- **Outils** : Whisper, Vosk.
|
||||||
|
- **Modèles** : `whisper-large-v3` (exemple).
|
||||||
|
- **Ports** : `5002` (STT).
|
||||||
|
|
||||||
|
## 🗣️ TTS (Text-to-Speech)
|
||||||
|
- **Outils** : OpenDai-Speech.
|
||||||
|
- **Paramètres ROCm** :
|
||||||
|
```
|
||||||
|
ROCR_VISIBLE_DEVICES=1
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Problèmes courants
|
||||||
|
- Vérifier les dépendances `gfx1100`/`gfx1101`.
|
||||||
|
|
||||||
|
---
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
# 🛠️ Dépanage
|
||||||
|
|
||||||
|
## 🔍 Problèmes Fréquents
|
||||||
|
|
||||||
|
### **ROCm Non Détecté**
|
||||||
|
- **Commande de diagnostic** :
|
||||||
|
```bash
|
||||||
|
rocm-smi --showproductname
|
||||||
|
```
|
||||||
|
- **Solution** : Mettre à jour le noyau et les pilotes ROCm.
|
||||||
|
|
||||||
|
### **Conflit Port**
|
||||||
|
- **Erreur** : Port `8200` déjà utilisé.
|
||||||
|
- **Solution** : Modifier le `docker-compose.yml` :
|
||||||
|
```yaml
|
||||||
|
ports:
|
||||||
|
- "8201:80"
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Erreurs ROCm Courantes**
|
||||||
|
- **`hipErrorInvalidDeviceFunction`** : Vérifier la compatibilité de la carte graphique avec ROCm.
|
||||||
|
|
||||||
|
## 🔗 Liens Relatifs
|
||||||
|
- Pour la configuration audio : [[03_Configuration_Audio]].
|
||||||
|
- Pour les logs détaillés : [[07_Logs_Diagnostic]].
|
||||||
|
# 🛠️ 04_Depannage
|
||||||
|
|
||||||
|
> **Liens internes** : [[03_Configuration_Audio]] → [[22_Problemes_Resolus]]
|
||||||
|
|
||||||
|
## ⚠️ Problèmes fréquents
|
||||||
|
| Problème | Solution possible |
|
||||||
|
|-----------------------------------------------|---------------------------------------------------------------------------------|
|
||||||
|
| `hipErrorInvalidDeviceFunction` | Vérifier les drivers ROCm et les variables d'environnement. |
|
||||||
|
| Processus zombies dans Docker | Exécuter `docker system prune`. |
|
||||||
|
|
||||||
|
## 🛠️ Commandes utiles
|
||||||
|
```bash
|
||||||
|
# Exemple de diagnostic
|
||||||
|
docker logs openwebui
|
||||||
|
journalctl -u docker.service
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔗 Liens utiles
|
||||||
|
- [Documentation ROCm](https://docs.amd.com)
|
||||||
|
|
||||||
|
---
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
# 🧠 Configuration Mémoire
|
||||||
|
|
||||||
|
## 🗃️ Mémoire Persistante
|
||||||
|
- **Base de données** : SQLite (`webui.db`).
|
||||||
|
- **Configuration** :
|
||||||
|
```python
|
||||||
|
memory:
|
||||||
|
- type: Auto
|
||||||
|
- prompt: "Utilise les informations suivantes pour répondre à la question."
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔗 Intégration Calendrier
|
||||||
|
- **Événements familiaux** : Synchronisation avec Google Calendar via API.
|
||||||
|
- **Rappels configurés** dans OpenWebUI.
|
||||||
|
|
||||||
|
### Exemple de Configuration
|
||||||
|
- **Fichier de configuration** :
|
||||||
|
```yaml
|
||||||
|
calendar:
|
||||||
|
- provider: google
|
||||||
|
- credentials: "path/to/credentials.json"
|
||||||
|
- sync_interval: "1h"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔗 Liens Relatifs
|
||||||
|
- Pour la configuration d'OpenWebUI : [[06_Configuration_OpenWebUI]].
|
||||||
|
- Pour les logs de diagnostic : [[07_Logs_Diagnostic]].
|
||||||
|
# 📋 05_Configuration_Mémoire
|
||||||
|
|
||||||
|
> **Liens internes** : [[06_Configuration_OpenWebUI]]
|
||||||
|
|
||||||
|
## 🧠 Mémoire Persistante
|
||||||
|
- **Outils** : Auto Memory, Memory Injection.
|
||||||
|
- **Base de données** : CouchDB (configuration à préciser).
|
||||||
|
|
||||||
|
## 📝 Filtres et Prompts
|
||||||
|
- **Exemple de prompt pour la mémoire** :
|
||||||
|
```
|
||||||
|
"Utilise les données de la base CouchDB pour enrichir les réponses."
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔗 Intégration avec Obsidian
|
||||||
|
- **Objectif** : Synchronisation des notes via MCP (Markdown Connection Publishing).
|
||||||
|
|
||||||
|
---
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# 🌐 Configuration OpenWebUI
|
||||||
|
|
||||||
|
## 📌 Interface Utilisateur
|
||||||
|
- **Accès** : `http://192.168.1.50:8080`
|
||||||
|
- **Authentification** : Désactivée (réseau local uniquement).
|
||||||
|
|
||||||
|
## 🔧 Plugins Actifs
|
||||||
|
| Plugin | Rôle |
|
||||||
|
|----------------------|-------------------------------|
|
||||||
|
| Auto Memory | Mémoire persistante |
|
||||||
|
| Calendar Integration | Rappels d'événements familiaux |
|
||||||
|
|
||||||
|
## 🔗 Configuration Avancée
|
||||||
|
- **Variables d'environnement** :
|
||||||
|
```yaml
|
||||||
|
OW_UI_HOST: 0.0.0.0
|
||||||
|
OW_UI_PORT: 8080
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔗 Liens Relatifs
|
||||||
|
- Pour la configuration de la mémoire : [[05_Configuration_Memoire]].
|
||||||
|
- Pour la configuration Docker : [[02_Configuration_Docker]].
|
||||||
|
# 🔧 06_Configuration_OpenWebUI
|
||||||
|
|
||||||
|
> **Liens internes** : [[05_Configuration_Memoire]] → [[11_Guide_Configuration]]
|
||||||
|
|
||||||
|
## 📋 Configuration de base
|
||||||
|
- **Fichier de config** : `/app/data/config.yml`
|
||||||
|
- **Exemple** :
|
||||||
|
```yaml
|
||||||
|
auth:
|
||||||
|
enabled: true
|
||||||
|
models:
|
||||||
|
- name: "mistral"
|
||||||
|
url: http://mistral:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔗 Modules clés
|
||||||
|
| Module | Rôle |
|
||||||
|
|----------------------|--------------------------------------|
|
||||||
|
| RAG | Recherche augmentée par la génération.|
|
||||||
|
| Plugins Obsidian | Intégration avec MCP. |
|
||||||
|
|
||||||
|
---
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# 📦 Guide d'Installation
|
||||||
|
|
||||||
|
## 🔧 Prérequis
|
||||||
|
- Système : Ubuntu 22.04 LTS
|
||||||
|
- GPU : AMD RX 7800 XT avec ROCm supporté
|
||||||
|
- Docker : Version 24.x
|
||||||
|
|
||||||
|
## 📝 Étapes d'Installation
|
||||||
|
|
||||||
|
1. **Installer ROCm** :
|
||||||
|
```bash
|
||||||
|
sudo apt update && sudo apt install -y rocm-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Cloner le dépôt** :
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/folzo/effi.git
|
||||||
|
cd effi
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Démarrer les services** :
|
||||||
|
```bash
|
||||||
|
docker compose -f docker-compose.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔗 Liens Relatifs
|
||||||
|
- Pour la configuration Docker : [[02_Configuration_Docker]].
|
||||||
|
- Pour les problèmes d'installation : [[04_Depannage]].
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
# ⚙️ Guide de Configuration
|
||||||
|
|
||||||
|
## 🔄 Mettre à Jour les Services
|
||||||
|
- Redémarrer OpenWebUI :
|
||||||
|
```bash
|
||||||
|
docker restart openwebui
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎤 Configurer l'Audio
|
||||||
|
|
||||||
|
1. **Modifier le `docker-compose.yml`** pour pointer vers le bon port.
|
||||||
|
2. **Tester la connexion** :
|
||||||
|
```bash
|
||||||
|
curl http://localhost:8200
|
||||||
|
```
|
||||||
|
|
||||||
|
### Exemple de Configuration Audio
|
||||||
|
```yaml
|
||||||
|
whisper:
|
||||||
|
ports:
|
||||||
|
- "8200:80"
|
||||||
|
environment:
|
||||||
|
- HSA_OVERRIDE_GFX_VERSION=11.0.0
|
||||||
|
- WHISPER__COMPUTE_TYPE=int8
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔗 Liens Relatifs
|
||||||
|
- Pour plus d'informations sur l'audio : [[03_Configuration_Audio]].
|
||||||
|
- Pour la configuration OpenWebUI : [[06_Configuration_OpenWebUI]].
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
|
||||||
|
## **Installation ROCm sur Bazzite**
|
||||||
|
- Vérifier la présence de ROCm et son état via `rocm-smi`
|
||||||
|
- Installer les dépendances nécessaires pour le développement (ex: `sudo dnf install rocm-dev`)
|
||||||
|
|
||||||
|
## **Recherche de l'image Docker pour AMD ROCm**
|
||||||
|
- Chercher une image prête à utiliser avec ROCm
|
||||||
|
- Si pas d'images disponibles, compiler le code source de `faster-whisper-server` en utilisant ROCm comme compilateur
|
||||||
|
|
||||||
|
## **Choix du modèle Whisper pour le français**
|
||||||
|
- Utiliser `bofenghuang/whisper-large-v3-french` car adapté au français et plus performant
|
||||||
|
|
||||||
|
## **Reconfiguration Open WebUI**
|
||||||
|
- Mettre à jour la configuration d'Open WebUI pour pointer vers l'adresse IP du PC de jeu et le port 8200
|
||||||
|
|
||||||
|
## **Trouvé un modèle Whisper pour le français avec ROCm**
|
||||||
|
- Modèle `bofenghuang/whisper-large-v3-french` : Spécifiquement conçu pour améliorer la reconnaissance vocale en français et compatible ROCm.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Discussion sur l'optimisation de EFFi pour plus de réactivité et d'efficacité.
|
||||||
@@ -0,0 +1,212 @@
|
|||||||
|
# 🚀 Projet Futur : Intégration EFFi avec Homelab & Home Assistant
|
||||||
|
|
||||||
|
**Date de création** : 2026-02-23
|
||||||
|
**Statut** : À explorer (priorité moyenne)
|
||||||
|
**Responsable** : Folzo
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Objectif
|
||||||
|
|
||||||
|
Créer une **couche conversationnelle intelligente** pour gérer :
|
||||||
|
- **Home Assistant** (domotique, éclairage, chauffage, sécurité).
|
||||||
|
- **Homelab** (supervision des services, backup, monitoring).
|
||||||
|
- **Automatisations familiales** (rappels, gestion des tâches).
|
||||||
|
|
||||||
|
EFFi agit comme un **hub central** pour toutes les interactions vocales ou textuelles avec tes infrastructures.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 Architecture Proposée
|
||||||
|
|
||||||
|
### 1. **Couche Vocale (STT/TTS existant)**
|
||||||
|
- **Entrée** : Commande vocale ou texte via Open WebUI.
|
||||||
|
- **Traitement** : STT (Whisper sur `folzo-Corp`) → Analyse par EFFi → Action.
|
||||||
|
- **Sortie** : Réponse vocale (XTTS sur `folzo-Corp`) ou notification.
|
||||||
|
|
||||||
|
### 2. **Couche d’Automatisation (`n8n`)**
|
||||||
|
- **Rôle** : Traduire les commandes d’EFFi en actions pour HA/Homelab.
|
||||||
|
- **Exemple de workflow** :
|
||||||
|
```plaintext
|
||||||
|
[Commande vocale : "Eteins les lumières"]
|
||||||
|
→ STT → EFFi → n8n (appel API HA) → HA éteint les lumières → TTS "Fait !"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. **Couche Domotique (Home Assistant)**
|
||||||
|
- **Intégration** : Utilisation de l’[API REST de HA](https://developers.home-assistant.io/docs/api/rest/).
|
||||||
|
- **Fonctionnalités clés** :
|
||||||
|
- Contrôle des lumières, chauffage, volets.
|
||||||
|
- Scénarios (mode cinéma, sécurité, nuit).
|
||||||
|
- Alertes (portes ouvertes, mouvement détecté).
|
||||||
|
|
||||||
|
### 4. **Couche Homelab (Supervision)**
|
||||||
|
- **Outils** : Docker API, SSH, `systemctl`.
|
||||||
|
- **Fonctionnalités** :
|
||||||
|
- Vérification de l’état des services (`docker ps`, `systemctl status`).
|
||||||
|
- Redémarrage automatique en cas d’erreur.
|
||||||
|
- Mises à jour (`docker compose pull`).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Fonctionnalités Clés
|
||||||
|
|
||||||
|
### A. **Domotique avec Home Assistant**
|
||||||
|
|
||||||
|
| **Commande Vocale** | **Action d’EFFi** | **Technologie** |
|
||||||
|
|-----------------------------------|---------------------------------------------------------------------------------|--------------------------------------|
|
||||||
|
| "Allume la lumière du salon" | Envoie une requête à HA pour allumer `light.salon`. | API REST HA + `n8n`. |
|
||||||
|
| "Quelle est la température ?" | Récupère les données du capteur `sensor.temperature` via HA. | API Sensor HA. |
|
||||||
|
| "Active le mode cinéma" | Lance un scénario HA (lumière éteinte, projecteur allumé, volets fermés). | Automations HA. |
|
||||||
|
| "Alerte : la porte est ouverte" | Vérifie `binary_sensor.porte_entree` et envoie une notification. | Events HA + `n8n`. |
|
||||||
|
|
||||||
|
**Exemple de scénario complet** :
|
||||||
|
1. **Commande** : *« Effi, bonne nuit. »*
|
||||||
|
2. **Actions** :
|
||||||
|
- HA éteint les lumières.
|
||||||
|
- HA baisse le chauffage à 18°C.
|
||||||
|
- HA active le mode « Nuit » (volets fermés).
|
||||||
|
- EFFi rappelle : *« Bonne nuit ! Je surveille tout. »*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### B. **Supervision Homelab**
|
||||||
|
|
||||||
|
| **Commande** | **Action** | **Technologie** |
|
||||||
|
|-----------------------------------|--------------------------------------------------------------------------------|--------------------------------------|
|
||||||
|
| "Vérifie l’état du NAS" | Exécute `docker ps` et renvoie les stats CPU/mémoire. | Docker API. |
|
||||||
|
| "Redémarre le service Qdrant" | Exécute `docker restart qdrant` via SSH. | SSH + `mcpo`. |
|
||||||
|
| "Fais un backup des fichiers" | Lance un script `rsync` ou `borg`. | SSH + scripts. |
|
||||||
|
| "Quelle est la CPU de effi-server ?" | Récupère les stats via `docker stats`. | Docker SDK. |
|
||||||
|
|
||||||
|
**Exemple de workflow** :
|
||||||
|
1. **Commande** : *« Effi, check les ressources. »*
|
||||||
|
2. **Actions** :
|
||||||
|
- EFFi exécute : `docker stats --format "{{.Name}}: {{.CPUPerc}}%"`.
|
||||||
|
- Réponse : *« effi-server : 12% CPU, qdrant : 3%. Tout est normal. »*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### C. **Automatisations Familiales**
|
||||||
|
|
||||||
|
| **Fonctionnalité** | **Description** | **Intégration** |
|
||||||
|
|-----------------------------------|---------------------------------------------------------------------------------|--------------------------------------|
|
||||||
|
| Rappels de tâches | *« Effi, rappelle-moi d’acheter du lait. »* → Sync avec Nextcloud. | Nextcloud API + `n8n`. |
|
||||||
|
| Gestion des recettes | *« Effi, quelle recette pour ce soir ? »* → Intègre Jellyfin ou un wiki. | API Jellyfin ou Obsidian. |
|
||||||
|
| Calendrier partagé | *« Qu’est-ce que j’ai prévu demain ? »* → Sync avec Google/Nextcloud Calendar.| Calendar API. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Étapes de Mise en Œuvre
|
||||||
|
|
||||||
|
### 1. **Prérequis Techniques**
|
||||||
|
- [ ] **Home Assistant** :
|
||||||
|
- Activer l’API REST dans `Configuration > Long Live Options`.
|
||||||
|
- Créer un **token d’accès** pour EFFi.
|
||||||
|
- [ ] **`n8n`** :
|
||||||
|
- Configurer un node **Home Assistant** avec ton token.
|
||||||
|
- Créer un workflow de test (ex : allumer une lumière).
|
||||||
|
- [ ] **Accès SSH** :
|
||||||
|
- Configurer `mcpo` pour exécuter des commandes Docker/SSH.
|
||||||
|
|
||||||
|
### 2. **Configuration d’EFFi**
|
||||||
|
- [ ] **Ajouter un plugin ou script** pour HA dans `mcpo` (Python).
|
||||||
|
- [ ] **Configurer le STT/TTS** pour une boucle vocale complète.
|
||||||
|
- [ ] **Documenter les commandes vocales** dans une FAQ.
|
||||||
|
|
||||||
|
### 3. **Tests Initiaux**
|
||||||
|
1. Tester les commandes basiques avec `n8n` (ex : allumer/éteindre une lumière).
|
||||||
|
2. Vérifier la boucle vocale (STT → HA → TTS).
|
||||||
|
3. Automatiser une tâche homelab (ex : vérifier l’état des services).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📝 Exemples de Commandes Vocales
|
||||||
|
|
||||||
|
### **Domotique**
|
||||||
|
- *« Allume la lumière dans la chambre. »*
|
||||||
|
- *« Baisse le chauffage à 20°C. »*
|
||||||
|
- *« Ferme les volets du salon. »*
|
||||||
|
- *« Quel est l’état des capteurs de mouvement ? »*
|
||||||
|
|
||||||
|
### **Homelab**
|
||||||
|
- *« Vérifie l’état de mon NAS. »*
|
||||||
|
- *« Redémarre le service Docker qui plante. »*
|
||||||
|
- *« Fais un backup des fichiers importants. »*
|
||||||
|
- *« Quelle est la consommation CPU de effi-server ? »*
|
||||||
|
|
||||||
|
### **Automatisations Familiales**
|
||||||
|
- *« Rappelle-moi d’appeler maman ce soir. »*
|
||||||
|
- *« Quelle recette puis-je faire avec des pommes de terre ? »*
|
||||||
|
- *« Qu’est-ce que j’ai dans mon calendrier pour demain ? »*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Ressources Utiles
|
||||||
|
|
||||||
|
### **Documentation**
|
||||||
|
- [API REST Home Assistant](https://developers.home-assistant.io/docs/api/rest/)
|
||||||
|
- [Automatisations avec `n8n`](https://n8n.io/integrations/home-assistant/)
|
||||||
|
- [Docker API](https://docs.docker.com/engine/api/)
|
||||||
|
|
||||||
|
### **Scripts d’Exemple**
|
||||||
|
```python
|
||||||
|
# Exemple de script pour mcpo (Python)
|
||||||
|
def handle_ha_command(command):
|
||||||
|
import requests
|
||||||
|
ha_url = "http://192.168.1.50:8123/api/services/light/turn_on"
|
||||||
|
headers = {"Authorization": "Bearer <TON_TOKEN_HA>", "Content-Type": "application/json"}
|
||||||
|
data = {"entity_id": "light.salon"}
|
||||||
|
|
||||||
|
if "lumière salon" in command:
|
||||||
|
response = requests.post(ha_url, headers=headers, json=data)
|
||||||
|
return "Lumière allumée !" if response.ok else "Erreur."
|
||||||
|
return "Commande non reconnue."
|
||||||
|
```
|
||||||
|
|
||||||
|
### **Workflow `n8n`**
|
||||||
|
```plaintext
|
||||||
|
1. **Trigger** : Webhook (ex : `http://effi-server:5678/webhook/ha`)
|
||||||
|
2. **Function Node** : Parse la commande (ex : extrait "light.salon").
|
||||||
|
3. **HTTP Request** : Appelle l’API HA.
|
||||||
|
4. **Webhook** : Renvoie la confirmation à EFFi pour TTS.
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔜 Prochaines Étapes (Quand tu auras le temps !)
|
||||||
|
|
||||||
|
1. **Priorité 1** :
|
||||||
|
- Configurer un workflow `n8n` pour HA (ex : allumer une lumière).
|
||||||
|
- Tester la boucle vocale STT → HA → TTS.
|
||||||
|
2. **Priorité 2** :
|
||||||
|
- Automatiser la supervision d’un service Docker (ex : `qdrant`).
|
||||||
|
- Intégrer un rappels de tâches avec Nextcloud.
|
||||||
|
3. **Priorité 3** :
|
||||||
|
- Créer des scénarios complexes (ex : mode cinéma complet).
|
||||||
|
- Documenter toutes les commandes vocales possibles.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 Idées Avancées (Pour plus tard)
|
||||||
|
|
||||||
|
- **Intégration avec Jellyfin** : *« Effi, lance mon dernier film vu en mode cinéma. »*
|
||||||
|
- **Voice Cloning** : Utiliser des modèles vocaux personnalisés pour une voix plus naturelle.
|
||||||
|
- **IA Contextuelle** : EFFi se souvient de tes habitudes (ex : *« D’habitude, tu éteins les lumières à 23h. »*).
|
||||||
|
- **Dashboard Vocale** : *« Effi, montre-moi les stats de mon homelab. »* → Réponse vocale + affichage sur un écran.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📅 Journal des Mises à Jour
|
||||||
|
|
||||||
|
| **Date** | **Action** | **Statut** |
|
||||||
|
|----------------|-------------------------------------------|-------------|
|
||||||
|
| 2026-02-23 | Création de cette note. | ✅ Terminé |
|
||||||
|
| À définir | Configuration initiale de `n8n` + HA. | À faire |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Conclusion
|
||||||
|
|
||||||
|
Ce projet permettrait de **centraliser toutes tes interactions avec ton homelab et ta domotique** via une interface vocale naturelle. En démarrant par les bases (contrôle des lumières, supervision Docker), tu pourras progressivement ajouter des fonctionnalités plus avancées.
|
||||||
|
|
||||||
|
**Prochaine action** : Quand tu auras 30 minutes, lance-toi sur la configuration de `n8n` avec Home Assistant ! Je peux te guider étape par étape si besoin. 😊
|
||||||
@@ -0,0 +1,129 @@
|
|||||||
|
## 1. STT – Speaches (Whisper) sur folzo-Corp
|
||||||
|
|
||||||
|
## Conteneur Docker `speaches-stt` (folzo-Corp)
|
||||||
|
|
||||||
|
Fichier `~/speaches/docker-compose.yml` :
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`services:
|
||||||
|
speaches:
|
||||||
|
image: speaches:rocm-ct2
|
||||||
|
container_name: speaches-stt
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8200:8000"
|
||||||
|
devices:
|
||||||
|
- /dev/kfd
|
||||||
|
- /dev/dri
|
||||||
|
group_add:
|
||||||
|
- "44"
|
||||||
|
- "991"
|
||||||
|
security_opt:
|
||||||
|
- seccomp=unconfined
|
||||||
|
environment:
|
||||||
|
- HSA_OVERRIDE_GFX_VERSION=11.0.0
|
||||||
|
- WHISPER__MODEL=deepdml/faster-whisper-large-v3-turbo-ct2
|
||||||
|
- WHISPER__LANGUAGE=fr
|
||||||
|
- WHISPER__COMPUTE_TYPE=float32
|
||||||
|
- WHISPER__DEVICE=auto
|
||||||
|
volumes:
|
||||||
|
- speaches-models:/root/.cache/huggingface
|
||||||
|
|
||||||
|
speaches-init:
|
||||||
|
image: curlimages/curl:latest
|
||||||
|
container_name: speaches-init
|
||||||
|
restart: "no"
|
||||||
|
depends_on:
|
||||||
|
- speaches
|
||||||
|
entrypoint: >
|
||||||
|
sh -c "sleep 5 &&
|
||||||
|
curl -sf -X POST http://speaches:8000/v1/models/deepdml%2Ffaster-whisper-large-v3-turbo-ct2 &&
|
||||||
|
echo 'Modèle enregistré'"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
speaches-models:
|
||||||
|
`
|
||||||
|
|
||||||
|
Points importants :
|
||||||
|
|
||||||
|
- Modèle STT : `deepdml/faster-whisper-large-v3-turbo-ct2` (CT2, turbo).[](https://huggingface.co/deepdml/faster-whisper-large-v3-turbo-ct2)
|
||||||
|
|
||||||
|
- Langue forcée : `WHISPER__LANGUAGE=fr`.
|
||||||
|
|
||||||
|
- Compute type CPU : `float32` (évite les erreurs int8).
|
||||||
|
|
||||||
|
- `speaches-init` enregistre le modèle au démarrage via `POST /v1/models/...`.
|
||||||
|
|
||||||
|
|
||||||
|
Commandes de déploiement :
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`cd ~/speaches sudo docker compose up -d`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. TTS – openedai-speech + Piper FR sur folzo-Corp
|
||||||
|
|
||||||
|
## Fichiers de voix Piper
|
||||||
|
|
||||||
|
Dans `~/openedai-speech/tts-voices` :
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`cd ~/openedai-speech/tts-voices wget https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/upmc/medium/fr_FR-upmc-medium.onnx wget https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/upmc/medium/fr_FR-upmc-medium.onnx.json`
|
||||||
|
|
||||||
|
## Config openedai-speech
|
||||||
|
|
||||||
|
Fichier `~/openedai-speech/tts-config/config.yaml` (partie utile) :
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`tts-1: alloy: model: voices/fr_FR-upmc-medium.onnx speaker: 0 # 0 = Jessica, 1 = Pierre (tu peux changer si besoin) tts-1-hd: alloy: model: xtts speaker: voices/alloy.wav # … autres voix XTTS inchangées`
|
||||||
|
|
||||||
|
- `tts-1` = backend Piper (CPU), voix par défaut **alloy** ↦ modèle FR `fr_FR-upmc-medium`.
|
||||||
|
|
||||||
|
- L’ancienne config `tts-1-hd` (XTTS GPU) reste, mais n’est plus utilisée.
|
||||||
|
|
||||||
|
|
||||||
|
Docker compose (rappel) :
|
||||||
|
|
||||||
|
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" - "991" environment: - HSA_OVERRIDE_GFX_VERSION=11.0.0 - HIP_VISIBLE_DEVICES=0`
|
||||||
|
|
||||||
|
Redémarrage :
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`cd ~/openedai-speech sudo docker compose restart openedai-speech`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Configuration Open WebUI (effi-server)
|
||||||
|
|
||||||
|
Dans **Admin Panel → Settings → Audio** :
|
||||||
|
|
||||||
|
- **STT Engine** : `OpenAI`
|
||||||
|
|
||||||
|
- **STT URL** : `http://192.168.1.11:8200/v1`
|
||||||
|
|
||||||
|
- **STT Model** : `deepdml/faster-whisper-large-v3-turbo-ct2`
|
||||||
|
|
||||||
|
- **TTS Engine** : `OpenAI`
|
||||||
|
|
||||||
|
- **TTS URL** : `http://192.168.1.11:8100/v1`
|
||||||
|
|
||||||
|
- **TTS Model** : `tts-1`
|
||||||
|
|
||||||
|
- **Voice / Speaker** : `alloy` (qui correspond à `fr_FR-upmc-medium` côté Piper)
|
||||||
|
|
||||||
|
|
||||||
|
C’est cette combinaison qui donne :
|
||||||
|
|
||||||
|
- STT rapide, précis en français (large-v3-turbo CT2 sur GPU).
|
||||||
|
|
||||||
|
- TTS français fluide, léger côté CPU (Piper `fr_FR-upmc-medium`).[](https://huggingface.co/rhasspy/piper-voices/tree/main/fr/fr_FR/upmc/medium)
|
||||||
|
|
||||||
|
- GPU principalement utilisé par les LLM (qwen/ministral, bge-m3), plus de charge « fantôme » après les échanges.
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
Date : 19 février 2026
|
||||||
|
|
||||||
|
## Stack installé aujourd'hui
|
||||||
|
- Open WebUI :3000
|
||||||
|
- WOL Proxy :3011
|
||||||
|
- Qdrant :6333
|
||||||
|
- CouchDB :5984
|
||||||
|
- n8n :5678
|
||||||
|
- mcpo :8000
|
||||||
|
|
||||||
|
## Statut
|
||||||
|
✅ Infrastructure opérationnelle
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
**Date : 23 février 2026**
|
||||||
|
|
||||||
|
### Nouvelles intégrations et mises à jour
|
||||||
|
- **Intégration MCP Obsidian fonctionnelle** ✅
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,214 @@
|
|||||||
|
## Vue d'ensemble
|
||||||
|
|
||||||
|
Effi est une assistante IA personnelle 100% locale, auto-hébergée, avec mémoire persistante entre les sessions. Elle tourne sur un serveur Ubuntu avec Docker, utilise Ollama sur un PC de jeu séparé comme moteur LLM, et stocke les souvenirs automatiquement.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`[PC Gamer - 192.168.1.X] [Serveur - 192.168.1.27] Ollama :3011 ←→ Docker Compose qwen2.5:14b ├── open-webui :3000 RX 7800 XT 16GB VRAM ├── qdrant :6333 ├── mcpo :8000 └── wol-proxy :9999`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
- **Serveur** : Ubuntu Server, Docker + Docker Compose installés
|
||||||
|
|
||||||
|
- **PC Gamer** : Ollama installé, accessible sur le réseau local via `:3011`
|
||||||
|
|
||||||
|
- **Modèles Ollama** : `qwen2.5:14b` (principal), `qwen2.5:3b` (mémoire)
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Structure des fichiers
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`~/effi/ ├── docker-compose.yml ├── .env └── mcpo-config/ └── config.json`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Fichier `.env`
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`WEBUI_SECRET_KEY=une_cle_secrete_longue_et_aleatoire`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## `docker-compose.yml` complet
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`services: open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui restart: unless-stopped extra_hosts: - "host.docker.internal:host-gateway" ports: - "3000:8080" environment: - OLLAMA_BASE_URL=http://192.168.1.X:3011 - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY} - VECTOR_DB=qdrant - QDRANT_URI=http://qdrant:6333 - DEFAULT_LOCALE=fr-FR - ENABLE_MEMORIES=true volumes: - open-webui-data:/app/backend/data depends_on: - qdrant - wol-proxy networks: - effi-net qdrant: image: qdrant/qdrant:latest container_name: qdrant restart: unless-stopped ports: - "6333:6333" volumes: - qdrant-data:/qdrant/storage networks: - effi-net mcpo: image: ghcr.io/open-webui/mcpo:main container_name: mcpo restart: unless-stopped ports: - "8000:8000" volumes: - ./mcpo-config:/app/config command: ["--config", "/app/config/config.json"] networks: - effi-net wol-proxy: image: alpine:latest container_name: wol-proxy restart: unless-stopped networks: - effi-net volumes: open-webui-data: qdrant-data: networks: effi-net: driver: bridge`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Démarrage
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`cd ~/effi docker compose up -d`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Configuration Open WebUI
|
||||||
|
|
||||||
|
## 1. Créer le compte admin
|
||||||
|
|
||||||
|
Accède à `http://192.168.1.27:3000` → crée le compte **Folzo**.
|
||||||
|
|
||||||
|
## 2. Connecter Ollama
|
||||||
|
|
||||||
|
`Admin Panel → Settings → Connections → Ollama`
|
||||||
|
→ URL : `http://192.168.1.X:3011`
|
||||||
|
|
||||||
|
## 3. Créer le modèle Effi
|
||||||
|
|
||||||
|
`Admin Panel → Models → + New Model`
|
||||||
|
|
||||||
|
- **Nom** : `Effi`
|
||||||
|
|
||||||
|
- **Modèle de base** : `qwen2.5:14b`
|
||||||
|
|
||||||
|
- **System prompt** : voir section dédiée ci-dessous
|
||||||
|
|
||||||
|
|
||||||
|
## 4. Activer la mémoire
|
||||||
|
|
||||||
|
`Admin Panel → Settings → General → Memory` → toggle **ON**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## System prompt d'Effi
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`Tu es Effi, l'assistante IA locale de Folzo (Open WebUI + Ollama). ## Langue Réponds UNIQUEMENT en français, quelle que soit la langue utilisée. ## Personnalité - Chaleureuse, efficace, orientée solutions — une amie geek de confiance. - Humour fin : 0 à 1 vanne max par réponse, jamais forcée. - Ton conversationnel IRL, phrases courtes, pas de pavés. ## Priorités 1. Répondre à la demande directement et clairement. 2. Ajouter un conseil ou alternative si pertinent. 3. Si ambigu → 1 à 3 questions courtes avant de proposer une solution. ## Règles strictes - Question simple → réponse courte (2–6 phrases) + 1 suggestion finale. - Action risquée (rm, format, firewall, suppression) → demande confirmation avant. - Ne sur-parle pas, pas de répétitions inutiles. ## Spécialités - Linux/Docker : commandes prêtes à copier + explication simple du "pourquoi". - Débogage : étape par étape, checks rapides d'abord. - Écriture : corrige en gardant le style de Folzo. ## Prise de notes Folzo utilise Obsidian. Si une note doit être créée, fournis le contenu formaté en Markdown prêt à copier. ## Mémoire N'invente pas de souvenirs. Les infos sur Folzo sont injectées automatiquement ci-dessous. <memory_user_context></memory_user_context>`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation du filtre Auto Memory
|
||||||
|
|
||||||
|
## Installer le filtre
|
||||||
|
|
||||||
|
`Admin Panel → Functions → Discover` → cherche **"Auto Memory"** par **nokodo** → Installer
|
||||||
|
|
||||||
|
## Configurer les Valves
|
||||||
|
|
||||||
|
`Admin Panel → Functions → Auto Memory → ⚙️`
|
||||||
|
|
||||||
|
|Valve|Valeur|
|
||||||
|
|---|---|
|
||||||
|
|Openai Api Url|`http://192.168.1.X:3011/v1`|
|
||||||
|
|Model|`qwen2.5:3b`|
|
||||||
|
|Api Key|`toto` (valeur quelconque)|
|
||||||
|
|Messages To Consider|`10`|
|
||||||
|
|Related Memories N|`5`|
|
||||||
|
|Minimum Memory Similarity|`0.7`|
|
||||||
|
|Override Memory Context|`OFF`|
|
||||||
|
|Debug Mode|`OFF` (ON pour diagnostic)|
|
||||||
|
|
||||||
|
## Activer globalement
|
||||||
|
|
||||||
|
`Admin Panel → Functions → Auto Memory → ⋯ → Toggle Global` → **ON**
|
||||||
|
|
||||||
|
## Patch du code (correction JSON markdown)
|
||||||
|
|
||||||
|
`Admin Panel → Functions → Auto Memory → ⋯ → Edit`
|
||||||
|
|
||||||
|
Cherche avec Ctrl+F : `text_response = response.choices[0].message.content`
|
||||||
|
|
||||||
|
Remplace le bloc `if response_model:` par :
|
||||||
|
|
||||||
|
python
|
||||||
|
|
||||||
|
`if response_model: try: cleaned = re.sub(r'```(?:json)?\s*', '', text_response) cleaned = re.sub(r'```\s*', '', cleaned).strip() match = re.search(r'\{.*\}', cleaned, re.DOTALL) if match: cleaned = match.group(0) return response_model.model_validate_json(cleaned) except ValidationError as e: self.log(f"response model validation error: {e}", level="warning") raise return text_response`
|
||||||
|
|
||||||
|
Cherche aussi `UNIFIED_SYSTEM_PROMPT` et ajoute au tout début de la chaîne :
|
||||||
|
|
||||||
|
python
|
||||||
|
|
||||||
|
`UNIFIED_SYSTEM_PROMPT = """IMPORTANT: Respond with ONLY valid JSON. No markdown formatting, no code blocks, no explanation text. Start your response directly with { and end with }. """ + UNIFIED_SYSTEM_PROMPT`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation du filtre Memory Injection
|
||||||
|
|
||||||
|
## Installer le filtre
|
||||||
|
|
||||||
|
`Admin Panel → Functions → Discover` → cherche **"Memory Injection Filter"** par **Raphael** → Installer
|
||||||
|
|
||||||
|
## Configurer les Valves
|
||||||
|
|
||||||
|
- **PREPENDING_TEXT** : `Voici les souvenirs à long terme de l'utilisateur :`
|
||||||
|
|
||||||
|
- **SHOW_MEMORY_COUNT_EMITTER** : `ON`
|
||||||
|
|
||||||
|
|
||||||
|
## Activer globalement
|
||||||
|
|
||||||
|
`Admin Panel → Functions → Memory Injection Filter → ⋯ → Toggle Global` → **ON**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Vérification du bon fonctionnement
|
||||||
|
|
||||||
|
## 1. Test d'enregistrement mémoire
|
||||||
|
|
||||||
|
Dans un chat avec Effi :
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`Je collectionne les vinyles des années 80`
|
||||||
|
|
||||||
|
Dans le terminal :
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`sudo docker cp open-webui:/app/backend/data/webui.db /tmp/webui.db sqlite3 /tmp/webui.db "SELECT content, datetime(created_at, 'unixepoch') FROM memory ORDER BY created_at DESC LIMIT 5;"`
|
||||||
|
|
||||||
|
→ Le souvenir doit apparaître.
|
||||||
|
|
||||||
|
## 2. Test de restitution entre sessions
|
||||||
|
|
||||||
|
Ouvre un **nouveau chat** :
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`Qu'est-ce que tu sais sur mes hobbies ?`
|
||||||
|
|
||||||
|
→ Effi doit mentionner les vinyles sans que tu l'aies redit.
|
||||||
|
|
||||||
|
## 3. Vérification des logs
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`docker logs open-webui --tail 50 | grep -iE "memory|saved|added"`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Gestion de la mémoire
|
||||||
|
|
||||||
|
## Voir tous les souvenirs
|
||||||
|
|
||||||
|
`Profil → Settings → Personalization → Memory`
|
||||||
|
|
||||||
|
## Supprimer un souvenir
|
||||||
|
|
||||||
|
Via l'UI : icône 🗑️ dans la liste des souvenirs.
|
||||||
|
|
||||||
|
Via SQLite :
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`sudo docker cp open-webui:/app/backend/data/webui.db /tmp/webui.db sqlite3 /tmp/webui.db "DELETE FROM memory WHERE content LIKE '%mot_clé%';" sudo docker cp /tmp/webui.db open-webui:/app/backend/data/webui.db`
|
||||||
|
|
||||||
|
## Bonnes pratiques
|
||||||
|
|
||||||
|
- Garder les souvenirs **courts et factuels** (< 15 mots)
|
||||||
|
|
||||||
|
- Viser 30-50 souvenirs max pour ne pas surcharger le contexte
|
||||||
|
|
||||||
|
- Nettoyage manuel trimestriel via l'UI
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# 📂 Dépanage
|
||||||
|
|
||||||
|
> **Dossier pour les références techniques et solutions aux problèmes**
|
||||||
|
|
||||||
|
**Fichiers à ajouter plus tard :**
|
||||||
|
- [[04_Depannage]]
|
||||||
|
- [[07_Logs_Diagnostic]]
|
||||||
|
|
||||||
|
---
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# Archive - Notes Originales
|
||||||
|
|
||||||
|
Ce dossier contient les notes et documents originaux créés pendant le développement du projet Effi.
|
||||||
|
|
||||||
|
## Contenu
|
||||||
|
|
||||||
|
Les fichiers ici sont conservés pour référence historique. La documentation officielle et à jour se trouve dans les dossiers `docs/`.
|
||||||
|
|
||||||
|
### Liste des fichiers archivés
|
||||||
|
|
||||||
|
- `01_Architecture_Systeme.md` - Ébauche d'architecture
|
||||||
|
- `02_Configuration_Docker.md` - Notes Docker
|
||||||
|
- `03_Configuration_Audio.md` - Notes audio
|
||||||
|
- `04_Depannage.md` - Notes dépannage
|
||||||
|
- `05_Configuration_Memoire.md` - Notes mémoire
|
||||||
|
- `06_Configuration_OpenWebUI.md` - Notes OpenWebUI
|
||||||
|
- `10_Guide_Installation.md` - Guide installation (ancien)
|
||||||
|
- `11_Guide_Configuration.md` - Guide configuration (ancien)
|
||||||
|
- `2026-02-21-Projet_Effi.md` - Notes ROCm
|
||||||
|
- `2026-02-22-Optimisation-Effi.md` - Note optimisation (vide)
|
||||||
|
- `2026-02-23-Intégration Effi avec Homelab et Home A.md` - Projet futur HA
|
||||||
|
- `Descriptif complet de ta config audio Effi (STT + .md` - Config audio détaillée
|
||||||
|
- `Effi - Journal de bord.md` - Journal court
|
||||||
|
- `Projet Effi — Documentation complète 2.md` - Documentation complète infrastructure
|
||||||
|
- `Projet Effi — Documentation d_installation complèt.md` - Guide installation mémoire
|
||||||
|
- `Speaches + OpenedAI-Speech ROCm — folzo-Corp RX 78.md` - Résumé thread STT/TTS
|
||||||
|
- `Suivi du projet.md` - Suivi de projet basique
|
||||||
|
- `README-old.md` - Ancienne structure de dossiers
|
||||||
|
|
||||||
|
## Note
|
||||||
|
|
||||||
|
Ces documents ne sont plus maintenus. Pour une documentation à jour, consulter :
|
||||||
|
- `/docs/01-architecture/` - Architecture actuelle
|
||||||
|
- `/docs/02-configuration/` - Configuration détaillée
|
||||||
|
- `/docs/03-guides/` - Guides pratiques
|
||||||
|
- `/docs/04-depannage/` - Solutions aux problèmes
|
||||||
|
- `/docs/05-journal/` - Historique du projet
|
||||||
@@ -0,0 +1,187 @@
|
|||||||
|
## 📋 Résumé Complet du Thread
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🖥️ Infrastructure
|
||||||
|
|
||||||
|
|Machine|IP|Rôle|GPU/CPU|
|
||||||
|
|---|---|---|---|
|
||||||
|
|**folzo-Corp**|192.168.1.11|PC gaming / STT+TTS|AMD RX 7800 XT (gfx1100)|
|
||||||
|
|**effi-server**|192.168.1.27|Serveur IA principal|CPU Intel 4 cores / 7.6GB RAM|
|
||||||
|
|**PC Gaming Ollama**|variable|LLM Ollama|GPU dédié|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 Objectif du Thread
|
||||||
|
|
||||||
|
Faire tourner Whisper (STT) sur la RX 7800 XT de folzo-Corp via ROCm, en construisant CTranslate2-ROCm depuis les sources (speaches), puis migrer le TTS (openedai-speech) d'effi-server vers folzo-Corp pour libérer le CPU.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔨 Étapes Réalisées
|
||||||
|
|
||||||
|
## 1. Build CTranslate2-ROCm pour speaches
|
||||||
|
|
||||||
|
**Problème initial :** `RuntimeError: Conv1D on GPU currently requires the cuDNN library which is not integrated in this build`
|
||||||
|
|
||||||
|
**Cause :** CTranslate2-ROCm compilé sans support MIOpen (équivalent ROCm de cuDNN)
|
||||||
|
|
||||||
|
**Solution :** Dockerfile custom `~/speaches/src/Dockerfile.rocm-ct2` avec :
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`-DWITH_CUDNN=ON -DCUDnn_INCLUDE_DIR=/opt/rocm-6.3.4/include -DCUDnn_LIBRARY=/opt/rocm-6.3.4/lib/libMIOpen.so`
|
||||||
|
|
||||||
|
Image base : `rocm/dev-ubuntu-24.04:6.3.4-complete`
|
||||||
|
Source CTranslate2 : `github.com/arlo-phoenix/CTranslate2-rocm`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Erreur Architecture GPU Incorrecte
|
||||||
|
|
||||||
|
**Problème :** `RuntimeError: parallel_for failed: hipErrorInvalidDeviceFunction: invalid device function`
|
||||||
|
|
||||||
|
**Cause :** Build compilé pour `gfx1101` mais la RX 7800 XT est `gfx1100`
|
||||||
|
|
||||||
|
**Diagnostic :**
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`docker run --device /dev/kfd --device /dev/dri \ -e HSA_OVERRIDE_GFX_VERSION=11.0.0 speaches:rocm-ct2 \ /opt/rocm-6.3.4/bin/rocminfo | grep -E "gfx|Name" # → gfx1100 (AMD Radeon RX 7800 XT)`
|
||||||
|
|
||||||
|
**Fix :**
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`sed -i 's/gfx1101/gfx1100/g' ~/speaches/src/Dockerfile.rocm-ct2 cd ~/speaches/src docker build -f Dockerfile.rocm-ct2 -t speaches:rocm-ct2 .`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Transcription fonctionnelle (CPU en attendant rebuild)
|
||||||
|
|
||||||
|
Après le premier build, speaches fonctionne en CPU (fallback) :
|
||||||
|
|
||||||
|
- `200 OK` sur `/v1/audio/transcriptions`
|
||||||
|
|
||||||
|
- Langue `fr` détectée à 99%
|
||||||
|
|
||||||
|
- RTF > 1 (13s pour 5.4s audio) → confirme CPU, pas GPU
|
||||||
|
|
||||||
|
- ONNX Runtime cherche `libcublasLt.so.12` (CUDA) → warning non bloquant, fallback CPU automatique
|
||||||
|
|
||||||
|
|
||||||
|
**Rebuild avec gfx1100 en cours** pour activer l'accélération GPU (~10x plus rapide attendu).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Problème réseau effi-server
|
||||||
|
|
||||||
|
**Symptômes :** Interface filaire effi-server plantée après reboot, OpenWebUI inaccessible
|
||||||
|
|
||||||
|
**Diagnostic :**
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`conflict detected for IP address 192.168.1.11 with host 5C:87:9C:65:95:23`
|
||||||
|
|
||||||
|
**Cause :** Conflit DHCP — deux machines avec la même IP `192.168.1.11`
|
||||||
|
|
||||||
|
**Fix court terme :** `nmcli device disconnect enp6s0 && nmcli device connect enp6s0`
|
||||||
|
|
||||||
|
**Fix permanent recommandé :** Réservations DHCP par MAC sur le routeur + `ethtool wol g` pour la carte Realtek RTL8111
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. OpenWebUI lent / erreurs 500
|
||||||
|
|
||||||
|
**Symptômes :** `500: Open WebUI: Server Connection Error`, lenteur UI
|
||||||
|
|
||||||
|
**Diagnostic :**
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`ERROR: open_webui.routers.ollama: Connection error`
|
||||||
|
|
||||||
|
**Cause :** Ollama inaccessible — le PC gaming était éteint. Le `wol-proxy` sur effi-server assure le Wake-on-LAN mais le PC n'avait pas répondu à temps.
|
||||||
|
|
||||||
|
**Architecture WOL :**
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`OpenWebUI → port 3011 effi → wol-proxy → WOL magic packet → PC Gaming → proxy TCP vers 11434`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Deux processus zombies sur effi-server
|
||||||
|
|
||||||
|
Détectés via `ps aux` :
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`[mcpo] <defunct> [python] <defunct>`
|
||||||
|
|
||||||
|
**Fix :**
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`docker restart mcpo`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Migration openedai-speech → folzo-Corp
|
||||||
|
|
||||||
|
**Raison :** `openedai-speech` consommait ~100% CPU sur effi-server (1.06GB RAM, CPU intensif)
|
||||||
|
|
||||||
|
**Étapes :**
|
||||||
|
|
||||||
|
bash
|
||||||
|
|
||||||
|
`# Arrêt sur effi docker compose stop openedai-speech && docker compose rm -f openedai-speech # Copie des données depuis folzo-Corp scp -r effi@192.168.1.27:~/effi/tts-voices ~/openedai-speech/ scp -r effi@192.168.1.27:~/effi/tts-config ~/openedai-speech/`
|
||||||
|
|
||||||
|
**Contenu transféré :** modèles XTTS (~1.8GB), voix WAV (alloy/echo/nova/shimmer/fable/onyx), modèles ONNX piper, configs YAML
|
||||||
|
|
||||||
|
**Problème group_add :** `Unable to find group render: no matching entries in group file`
|
||||||
|
|
||||||
|
**Fix :** Utiliser GID numériques au lieu des noms :
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`group_add: - "44" # video - "991" # render`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📁 Fichiers Clés
|
||||||
|
|
||||||
|
text
|
||||||
|
|
||||||
|
`folzo-Corp: ├── ~/speaches/ │ ├── src/Dockerfile.rocm-ct2 # Build CTranslate2 gfx1100 + MIOpen │ └── docker-compose.yml # speaches-stt:8200 └── ~/openedai-speech/ ├── docker-compose.yml # TTS ROCm gfx1100 ├── tts-voices/ # Voix XTTS + ONNX └── tts-config/ # voice_to_speaker.yaml etc. effi-server: └── ~/effi/docker-compose.yml # OpenWebUI + WOL + n8n + qdrant...`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ État Final des Services
|
||||||
|
|
||||||
|
|Service|Hôte|Port|État|Notes|
|
||||||
|
|---|---|---|---|---|
|
||||||
|
|**speaches-stt**|folzo-Corp|8200|✅ Fonctionne|CPU actuellement, rebuild gfx1100 pending|
|
||||||
|
|**openedai-speech**|folzo-Corp|8100|✅ Démarré|ROCm gfx1100, group_add 44+991|
|
||||||
|
|**OpenWebUI**|effi-server|3000|✅ Fonctionne|Pointé STT+TTS vers 192.168.1.11|
|
||||||
|
|**wol-proxy**|effi-server|3011|✅ Fonctionne|Proxy Ollama + WOL PC gaming|
|
||||||
|
|**n8n**|effi-server|5678|✅ Running||
|
||||||
|
|**qdrant**|effi-server|6333|✅ Running|Vector store RAG|
|
||||||
|
|**pipelines**|effi-server|9099|✅ Running|mem0 memory|
|
||||||
|
|**couchdb**|effi-server|5984|✅ Running|Obsidian LiveSync|
|
||||||
|
|**mcpo**|effi-server|8000|⚠️ Zombie détecté|Redémarré|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔜 Prochaines Étapes
|
||||||
|
|
||||||
|
1. **Finaliser rebuild speaches gfx1100** → activer GPU sur Whisper large-v3
|
||||||
|
|
||||||
|
2. **Tester TTS ROCm** → vérifier que openedai-speech utilise bien la RX 7800 XT
|
||||||
|
|
||||||
|
3. **Mettre à jour l'URL TTS** dans OpenWebUI Admin → Audio → `http://192.168.1.11:8100`
|
||||||
|
|
||||||
|
4. **Réservations DHCP** sur le routeur pour fixer les IPs de façon permanente
|
||||||
|
|
||||||
|
5. **Tester pipeline vocal complet** : micro → STT folzo → OpenWebUI effi → LLM Ollama → TTS folzo → speaker
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
Suivi du Projet EFFi
|
||||||
|
=======================
|
||||||
|
|
||||||
|
### Résumé général
|
||||||
|
- **Date de début** : 2023-10-08
|
||||||
|
- **Équipe impliquée** : Folzo et moi-même
|
||||||
|
- **Objectifs principaux** :
|
||||||
|
- Améliorer l'efficacité des tâches liées à EFFi
|
||||||
|
- Assurer une communication claire entre les membres de l'équipe
|
||||||
|
|
||||||
|
### Tâches en cours
|
||||||
|
- [ ] Révision du document d'installation : Projet Effi — Documentation d'installation complète.md
|
||||||
|
- [ ] Mise à jour du guide technique : Projet Effi — Documentation complète 2.md
|
||||||
|
- [ ] Préparation des présentations pour les parties prenantes : Speaches + OpenedAI-Speech ROCm — folzo-Corp RX 7800 XT.md
|
||||||
|
|
||||||
|
## Objectifs et Milestones
|
||||||
|
Description détaillée des objectifs et des jalons principaux pour le projet Effi.
|
||||||
|
|
||||||
|
## Actions en cours
|
||||||
|
Liste des tâches actuellement en cours avec leurs responsables respectifs.
|
||||||
|
|
||||||
|
## Historique des modifications
|
||||||
|
Chronologie des mises à jour et évolutions du suivi de projet.
|
||||||
@@ -0,0 +1,227 @@
|
|||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# EFFI SERVER - Stack IA Locale
|
||||||
|
# Machine : effi-server (192.168.1.27)
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 1. OPEN WEBUI - Interface Chat Effi
|
||||||
|
# → http://192.168.1.27:3000
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
open-webui:
|
||||||
|
image: ghcr.io/open-webui/open-webui:main
|
||||||
|
container_name: open-webui
|
||||||
|
restart: unless-stopped
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
|
ports:
|
||||||
|
- "3000:8080"
|
||||||
|
environment:
|
||||||
|
- OLLAMA_BASE_URL=http://host.docker.internal:3011
|
||||||
|
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
|
||||||
|
- VECTOR_DB=qdrant
|
||||||
|
- QDRANT_URI=http://qdrant:6333
|
||||||
|
- DEFAULT_LOCALE=fr-FR
|
||||||
|
- ENABLE_MEMORIES=true
|
||||||
|
- AUDIO_STT_ENGINE=openai
|
||||||
|
- AUDIO_STT_OPENAI_API_BASE_URL=http://192.168.1.11:8200/v1
|
||||||
|
- AUDIO_STT_OPENAI_API_KEY=anything
|
||||||
|
- AUDIO_STT_MODEL=Systran/faster-whisper-large-v3
|
||||||
|
volumes:
|
||||||
|
- open-webui-data:/app/backend/data
|
||||||
|
depends_on:
|
||||||
|
- qdrant
|
||||||
|
- wol-proxy
|
||||||
|
networks:
|
||||||
|
- effi-net
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 2. WOL PROXY - Réveil PC Gaming avant appel Ollama
|
||||||
|
# → Proxy :3011 → PC Gaming :11434
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
wol-proxy:
|
||||||
|
build: ./wol-proxy
|
||||||
|
container_name: wol-proxy
|
||||||
|
restart: unless-stopped
|
||||||
|
network_mode: host
|
||||||
|
environment:
|
||||||
|
- TARGET_HOST=${OLLAMA_HOST}
|
||||||
|
- TARGET_PORT=11434
|
||||||
|
- TARGET_MAC=${PC_GAMING_MAC}
|
||||||
|
- LISTEN_PORT=3011
|
||||||
|
- WAKE_TIMEOUT=60
|
||||||
|
- CHECK_INTERVAL=5
|
||||||
|
- BROADCAST_IP=${BROADCAST_IP}
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 3. MCPO - Proxy outils MCP (Obsidian, etc.)
|
||||||
|
# → http://192.168.1.27:8000
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
mcpo:
|
||||||
|
image: ghcr.io/open-webui/mcpo:main
|
||||||
|
container_name: mcpo
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
volumes:
|
||||||
|
- ./mcpo-config:/app/config:ro
|
||||||
|
- ./mcpo-patch.sh:/mcpo-patch.sh:ro
|
||||||
|
entrypoint: ["sh", "/mcpo-patch.sh"]
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 4. QDRANT - Vector Store (RAG sémantique)
|
||||||
|
# → http://192.168.1.27:6333
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
qdrant:
|
||||||
|
image: qdrant/qdrant:latest
|
||||||
|
container_name: qdrant
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "6333:6333"
|
||||||
|
- "6334:6334"
|
||||||
|
volumes:
|
||||||
|
- ./qdrant-storage:/qdrant/storage:z
|
||||||
|
networks:
|
||||||
|
- effi-net
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 5. COUCHDB - Backend Obsidian LiveSync
|
||||||
|
# → http://192.168.1.27:5984
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
couchdb:
|
||||||
|
image: couchdb:3.3
|
||||||
|
container_name: couchdb
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "5984:5984"
|
||||||
|
environment:
|
||||||
|
- COUCHDB_USER=${COUCHDB_USER}
|
||||||
|
- COUCHDB_PASSWORD=${COUCHDB_PASSWORD}
|
||||||
|
volumes:
|
||||||
|
- ./couchdb-data:/opt/couchdb/data
|
||||||
|
networks:
|
||||||
|
- effi-net
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 6. N8N - Automatisation autonome Effi
|
||||||
|
# → http://192.168.1.27:5678
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
n8n:
|
||||||
|
image: docker.n8n.io/n8nio/n8n:latest
|
||||||
|
container_name: n8n
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "5678:5678"
|
||||||
|
environment:
|
||||||
|
- N8N_HOST=0.0.0.0
|
||||||
|
- N8N_PORT=5678
|
||||||
|
- N8N_PROTOCOL=http
|
||||||
|
- WEBHOOK_URL=http://192.168.1.27:5678
|
||||||
|
- N8N_BASIC_AUTH_ACTIVE=true
|
||||||
|
- N8N_BASIC_AUTH_USER=${N8N_USER}
|
||||||
|
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
|
||||||
|
- GENERIC_TIMEZONE=Europe/Paris
|
||||||
|
- TZ=Europe/Paris
|
||||||
|
volumes:
|
||||||
|
- ./n8n-data:/home/node/.n8n
|
||||||
|
networks:
|
||||||
|
- effi-net
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 7. PIPELINES - Middleware Open WebUI (mem0 memory)
|
||||||
|
# → http://192.168.1.27:9099
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
pipelines:
|
||||||
|
image: ghcr.io/open-webui/pipelines:main
|
||||||
|
container_name: pipelines
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "9099:9099"
|
||||||
|
volumes:
|
||||||
|
- pipelines-data:/app/pipelines
|
||||||
|
networks:
|
||||||
|
- effi-net
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 8. WHISPER - Speech To Text (STT)
|
||||||
|
# → http://192.168.1.27:8200
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
whisper:
|
||||||
|
image: fedirz/faster-whisper-server:latest-cpu
|
||||||
|
container_name: whisper
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8200:8000"
|
||||||
|
volumes:
|
||||||
|
- whisper-cache:/root/.cache/huggingface
|
||||||
|
environment:
|
||||||
|
- WHISPER__MODEL=guillaumekln/faster-whisper-tiny
|
||||||
|
- WHISPER__LANGUAGE=fr
|
||||||
|
- HF_HUB_OFFLINE=0
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 9. OPENEDAI-SPEECH - Text To Speech (TTS)
|
||||||
|
# → http://192.168.1.27:8100
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
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
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 10. WATCHTOWER - Mise à jour automatique des containers
|
||||||
|
# → Vérifie les mises à jour chaque nuit à 4h00
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
watchtower:
|
||||||
|
image: nickfedor/watchtower:latest
|
||||||
|
container_name: watchtower
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
environment:
|
||||||
|
- WATCHTOWER_CLEANUP=true
|
||||||
|
- WATCHTOWER_SCHEDULE=0 0 4 * * *
|
||||||
|
- WATCHTOWER_NOTIFICATIONS_LEVEL=warn
|
||||||
|
- WATCHTOWER_INCLUDE_STOPPED=true
|
||||||
|
- WATCHTOWER_REVIVE_STOPPED=false
|
||||||
|
- TZ=Europe/Paris
|
||||||
|
restart: unless-stopped
|
||||||
|
networks:
|
||||||
|
- effi-net
|
||||||
|
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
# 11. OBSIDIAN - Version Serveur 24/7 (Web UI & MCP)
|
||||||
|
# → Interface Web : https://192.168.1.27:3100
|
||||||
|
# ─────────────────────────────────────────────────────────
|
||||||
|
obsidian:
|
||||||
|
image: lscr.io/linuxserver/obsidian:latest
|
||||||
|
container_name: obsidian
|
||||||
|
restart: unless-stopped
|
||||||
|
security_opt:
|
||||||
|
- seccomp:unconfined # Nécessaire pour le rendu Chromium/Electron dans Docker
|
||||||
|
environment:
|
||||||
|
- PUID=1000 # À vérifier avec la commande 'id' sur ton serveur Ubuntu
|
||||||
|
- PGID=1000
|
||||||
|
- TZ=Europe/Paris
|
||||||
|
ports:
|
||||||
|
- "3100:3001" # Accès HTTPS à l'interface virtuelle
|
||||||
|
volumes:
|
||||||
|
- ./obsidian-vault:/config # Contient l'OS virtuel ET ton Vault Obsidian
|
||||||
|
shm_size: "1gb" # Requis pour la stabilité de l'interface graphique
|
||||||
|
networks:
|
||||||
|
- effi-net
|
||||||
|
|
||||||
|
networks:
|
||||||
|
effi-net:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
open-webui-data:
|
||||||
|
pipelines-data:
|
||||||
|
whisper-cache:
|
||||||
@@ -0,0 +1,185 @@
|
|||||||
|
# 🏗️ Architecture Infrastructure
|
||||||
|
|
||||||
|
## Vue d'ensemble
|
||||||
|
|
||||||
|
Effi fonctionne sur une architecture **multi-machines** avec une séparation claire entre le serveur principal (services Docker) et la station de travail puissante (calcul GPU).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Machines
|
||||||
|
|
||||||
|
### effi-server (192.168.1.27)
|
||||||
|
|
||||||
|
**Rôle** : Serveur Docker principal, héberge tous les services de l'interface et de la logique
|
||||||
|
|
||||||
|
| Caractéristique | Valeur |
|
||||||
|
|-----------------|--------|
|
||||||
|
| **OS** | Ubuntu Server 22.04 LTS |
|
||||||
|
| **CPU** | Intel J5040 (4 cœurs) |
|
||||||
|
| **RAM** | ~7.6 GB |
|
||||||
|
| **Stockage** | SSD |
|
||||||
|
| **GPU** | Aucun (tout est fait en CPU) |
|
||||||
|
|
||||||
|
**Services hébergés :**
|
||||||
|
- Open WebUI (interface utilisateur)
|
||||||
|
- Qdrant (base vectorielle)
|
||||||
|
- CouchDB (synchronisation Obsidian)
|
||||||
|
- n8n (automatisation)
|
||||||
|
- mcpo (proxy MCP)
|
||||||
|
- wol-proxy (Wake-on-LAN)
|
||||||
|
- pipelines (middleware mémoire)
|
||||||
|
- Watchtower (mises à jour auto)
|
||||||
|
- Obsidian Server (interface web)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### folzo-Corp (192.168.1.11)
|
||||||
|
|
||||||
|
**Rôle** : Station de calcul GPU pour LLM et traitement audio
|
||||||
|
|
||||||
|
| Caractéristique | Valeur |
|
||||||
|
|-----------------|--------|
|
||||||
|
| **OS** | Bazzite (Fedora-based) |
|
||||||
|
| **CPU** | AMD Ryzen 5800X3D |
|
||||||
|
| **RAM** | 32 GB+ |
|
||||||
|
| **GPU** | AMD RX 7800 XT 16 GB VRAM |
|
||||||
|
| **ROCm** | Version 6.3.4 |
|
||||||
|
| **Architecture GPU** | gfx1100 |
|
||||||
|
|
||||||
|
**Services hébergés :**
|
||||||
|
- Ollama (LLM qwen2.5:14b)
|
||||||
|
- speaches (STT Whisper)
|
||||||
|
- openedai-speech (TTS Piper/XTTS)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Schéma Réseau
|
||||||
|
|
||||||
|
```
|
||||||
|
Internet
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌────────────────────────────────────────────────────────────┐
|
||||||
|
│ Routeur (Box) │
|
||||||
|
│ DHCP 192.168.1.0/24 │
|
||||||
|
└────────────────────────────────────────────────────────────┘
|
||||||
|
│ │
|
||||||
|
│ │
|
||||||
|
▼ ▼
|
||||||
|
┌──────────────┐ ┌──────────────────┐
|
||||||
|
│ effi-server │◄────────►│ folzo-Corp │
|
||||||
|
│ 192.168.1.27 │ LAN │ 192.168.1.11 │
|
||||||
|
│ │ │ │
|
||||||
|
│ • Docker │ │ • Ollama │
|
||||||
|
│ • WebUI │ WoL │ • Whisper │
|
||||||
|
│ • Qdrant │◄─────────│ • TTS │
|
||||||
|
│ • n8n │ │ • ROCm/GPU │
|
||||||
|
└──────────────┘ └──────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Flux de Données
|
||||||
|
|
||||||
|
### Pipeline Conversationnelle
|
||||||
|
|
||||||
|
```
|
||||||
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||||
|
│ Micro │────►│ speaches │────►│ Open WebUI │────►│ Ollama │
|
||||||
|
│ (Client) │ STT │ (folzo-Corp) │ │(effi-server) │ │ (folzo-Corp) │
|
||||||
|
└──────────────┘ └──────────────┘ └──────┬───────┘ └──────┬───────┘
|
||||||
|
│ │
|
||||||
|
│◄───────────────────┘
|
||||||
|
│ Réponse LLM
|
||||||
|
│
|
||||||
|
▼
|
||||||
|
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||||
|
│ Haut- │◄────│ openedai- │◄────│ Open WebUI │
|
||||||
|
│ parleurs │ TTS │ speech │ │(traite la │
|
||||||
|
│ │ │(folzo-Corp) │ │ réponse) │
|
||||||
|
└──────────────┘ └──────────────┘ └──────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### Wake-on-LAN
|
||||||
|
|
||||||
|
Quand OpenWebUI sur effi-server veut appeler Ollama sur folzo-Corp :
|
||||||
|
|
||||||
|
1. Requête vers `192.168.1.27:3011` (wol-proxy)
|
||||||
|
2. wol-proxy vérifie si Ollama répond sur `192.168.1.11:11434`
|
||||||
|
3. Si non → envoie un Magic Packet WoL à l'adresse MAC configurée
|
||||||
|
4. Attend que le PC démarre (timeout configurable)
|
||||||
|
5. Une fois démarré, fait le proxy vers Ollama
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sécurité Réseau
|
||||||
|
|
||||||
|
### Ports ouverts sur effi-server
|
||||||
|
|
||||||
|
| Port | Service | Exposition |
|
||||||
|
|------|---------|------------|
|
||||||
|
| 3000 | Open WebUI | LAN uniquement |
|
||||||
|
| 5678 | n8n | LAN uniquement |
|
||||||
|
| 5984 | CouchDB | LAN uniquement |
|
||||||
|
| 6333 | Qdrant | LAN uniquement |
|
||||||
|
| 8000 | mcpo | LAN uniquement |
|
||||||
|
|
||||||
|
### Ports ouverts sur folzo-Corp
|
||||||
|
|
||||||
|
| Port | Service | Exposition |
|
||||||
|
|------|---------|------------|
|
||||||
|
| 8100 | openedai-speech | LAN uniquement |
|
||||||
|
| 8200 | speaches | LAN uniquement |
|
||||||
|
| 11434 | Ollama | LAN uniquement |
|
||||||
|
|
||||||
|
### Recommandations
|
||||||
|
|
||||||
|
- Utiliser un VPN (WireGuard, Tailscale) pour l'accès externe
|
||||||
|
- Jamais exposer les ports directement sur Internet
|
||||||
|
- Configurer le pare-feu UFW (Ubuntu) ou firewall-cmd (Fedora)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sauvegardes
|
||||||
|
|
||||||
|
### Données critiques à sauvegarder
|
||||||
|
|
||||||
|
**Sur effi-server :**
|
||||||
|
```
|
||||||
|
~/effi/
|
||||||
|
├── docker-compose.yml # Configuration
|
||||||
|
├── .env # Variables (chiffrer)
|
||||||
|
├── open-webui-data/ # Mémoire, config
|
||||||
|
├── qdrant-storage/ # Vecteurs RAG
|
||||||
|
├── couchdb-data/ # Sync Obsidian
|
||||||
|
└── n8n-data/ # Workflows
|
||||||
|
```
|
||||||
|
|
||||||
|
**Sur folzo-Corp :**
|
||||||
|
```
|
||||||
|
~/ollama/ # Modèles téléchargés
|
||||||
|
~/speaches/models/ # Modèles Whisper
|
||||||
|
~/openedai-speech/tts-voices/ # Voix TTS
|
||||||
|
```
|
||||||
|
|
||||||
|
### Commande de backup
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Sur effi-server
|
||||||
|
tar -czvf effi-backup-$(date +%Y%m%d).tar.gz \
|
||||||
|
~/effi/docker-compose.yml \
|
||||||
|
~/effi/.env \
|
||||||
|
~/effi/open-webui-data/ \
|
||||||
|
~/effi/qdrant-storage/ \
|
||||||
|
~/effi/couchdb-data/ \
|
||||||
|
~/effi/n8n-data/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Évolution Future
|
||||||
|
|
||||||
|
- **Réservation DHCP** : Fixer les IPs via le routeur
|
||||||
|
- **DNS local** : Utiliser des noms comme `effi.local` et `folzo-corp.local`
|
||||||
|
- **Reverse Proxy** : Traefik ou Nginx Proxy Manager pour HTTPS
|
||||||
|
- **Monitoring** : Prometheus + Grafana pour les métriques
|
||||||
@@ -0,0 +1,230 @@
|
|||||||
|
# 🐳 Services et Ports
|
||||||
|
|
||||||
|
## Tableau récapitulatif
|
||||||
|
|
||||||
|
| Service | Hôte | Port | Image | Description |
|
||||||
|
|---------|------|------|-------|-------------|
|
||||||
|
| **Open WebUI** | effi-server | 3000 | `ghcr.io/open-webui/open-webui:main` | Interface IA principale |
|
||||||
|
| **Qdrant** | effi-server | 6333 | `qdrant/qdrant:latest` | Base de données vectorielle |
|
||||||
|
| **CouchDB** | effi-server | 5984 | `couchdb:3.3` | Backend Obsidian LiveSync |
|
||||||
|
| **n8n** | effi-server | 5678 | `docker.n8n.io/n8nio/n8n:latest` | Automatisation workflows |
|
||||||
|
| **mcpo** | effi-server | 8000 | `ghcr.io/open-webui/mcpo:main` | Proxy MCP pour outils |
|
||||||
|
| **wol-proxy** | effi-server | 3011 | Build local | Wake-on-LAN + Proxy Ollama |
|
||||||
|
| **pipelines** | effi-server | 9099 | `ghcr.io/open-webui/pipelines:main` | Middleware mémoire mem0 |
|
||||||
|
| **speaches** | folzo-Corp | 8200 | `speaches:rocm-ct2` (build local) | STT Whisper avec ROCm |
|
||||||
|
| **openedai-speech** | folzo-Corp | 8100 | `ghcr.io/matatonic/openedai-speech` | TTS Piper/XTTS |
|
||||||
|
| **Ollama** | folzo-Corp | 11434 | Installation native | LLM (qwen2.5:14b) |
|
||||||
|
| **Obsidian** | effi-server | 3100 | `lscr.io/linuxserver/obsidian:latest` | Interface Obsidian web |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description détaillée
|
||||||
|
|
||||||
|
### Open WebUI (Port 3000)
|
||||||
|
|
||||||
|
**Rôle** : Interface utilisateur principale pour interagir avec l'IA
|
||||||
|
|
||||||
|
**Fonctionnalités :**
|
||||||
|
- Chat textuel avec le LLM
|
||||||
|
- Support vocal (STT/TTS)
|
||||||
|
- Gestion des conversations
|
||||||
|
- Upload de documents (RAG)
|
||||||
|
- Administration système
|
||||||
|
|
||||||
|
**Configuration clé :**
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
- OLLAMA_BASE_URL=http://host.docker.internal:3011
|
||||||
|
- VECTOR_DB=qdrant
|
||||||
|
- QDRANT_URI=http://qdrant:6333
|
||||||
|
- ENABLE_MEMORIES=true
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Qdrant (Port 6333)
|
||||||
|
|
||||||
|
**Rôle** : Stockage vectoriel pour le RAG (Retrieval Augmented Generation)
|
||||||
|
|
||||||
|
**Utilisation :**
|
||||||
|
- Indexation des documents uploadés
|
||||||
|
- Recherche sémantique
|
||||||
|
- Embeddings via `bge-m3:latest`
|
||||||
|
|
||||||
|
**Endpoints :**
|
||||||
|
- API REST : `http://192.168.1.27:6333`
|
||||||
|
- gRPC : `http://192.168.1.27:6334`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### CouchDB (Port 5984)
|
||||||
|
|
||||||
|
**Rôle** : Base de données NoSQL pour Obsidian LiveSync
|
||||||
|
|
||||||
|
**Fonctionnalités :**
|
||||||
|
- Synchronisation temps réel des notes Obsidian
|
||||||
|
- Multi-device (mobile, desktop, web)
|
||||||
|
- Résolution de conflits intégrée
|
||||||
|
|
||||||
|
**Initialisation (premier démarrage) :**
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### n8n (Port 5678)
|
||||||
|
|
||||||
|
**Rôle** : Plateforme d'automatisation de workflows
|
||||||
|
|
||||||
|
**Cas d'usage :**
|
||||||
|
- Workflows d'intégration avec Home Assistant
|
||||||
|
- Automatisations basées sur le calendrier
|
||||||
|
- Webhooks pour notifications
|
||||||
|
- Traitement de données
|
||||||
|
|
||||||
|
**Authentification :** Basic Auth configurée via variables d'environnement
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### mcpo (Port 8000)
|
||||||
|
|
||||||
|
**Rôle** : Proxy pour le protocole MCP (Model Context Protocol)
|
||||||
|
|
||||||
|
**Fonctionnalités :**
|
||||||
|
- Interface entre OpenWebUI et outils externes
|
||||||
|
- Exécution de commandes système
|
||||||
|
- Intégration avec Obsidian MCP
|
||||||
|
|
||||||
|
**Configuration :**
|
||||||
|
Fichier `~/effi/mcpo-config/config.json` :
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### wol-proxy (Port 3011)
|
||||||
|
|
||||||
|
**Rôle** : Wake-on-LAN + Proxy vers Ollama
|
||||||
|
|
||||||
|
**Fonctionnement :**
|
||||||
|
1. Intercepte les requêtes vers Ollama
|
||||||
|
2. Envoie un Magic Packet si le PC est éteint
|
||||||
|
3. Attend le démarrage (timeout: 60s)
|
||||||
|
4. Proxy la requête vers Ollama
|
||||||
|
|
||||||
|
**Variables d'environnement :**
|
||||||
|
- `TARGET_HOST` : IP du PC Gaming
|
||||||
|
- `TARGET_MAC` : Adresse MAC pour WoL
|
||||||
|
- `BROADCAST_IP` : IP de broadcast
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### pipelines (Port 9099)
|
||||||
|
|
||||||
|
**Rôle** : Middleware pour les filtres OpenWebUI
|
||||||
|
|
||||||
|
**Utilisation actuelle :**
|
||||||
|
- Intégration mem0 pour mémoire avancée
|
||||||
|
- Traitement des messages entrants/sortants
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### speaches (Port 8200)
|
||||||
|
|
||||||
|
**Rôle** : Service STT (Speech-to-Text)
|
||||||
|
|
||||||
|
**Caractéristiques :**
|
||||||
|
- Modèle : `deepdml/faster-whisper-large-v3-turbo-ct2`
|
||||||
|
- Accélération : ROCm (GPU AMD)
|
||||||
|
- Langue : Français forcé
|
||||||
|
- Format : Compatible API OpenAI
|
||||||
|
|
||||||
|
**Build personnalisé :**
|
||||||
|
- Nécessite CTranslate2 compilé pour gfx1100
|
||||||
|
- Voir guide dépannage ROCm
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### openedai-speech (Port 8100)
|
||||||
|
|
||||||
|
**Rôle** : Service TTS (Text-to-Speech)
|
||||||
|
|
||||||
|
**Voix disponibles :**
|
||||||
|
- `tts-1` : Piper (CPU, rapide) - Voix FR : `fr_FR-upmc-medium`
|
||||||
|
- `tts-1-hd` : XTTS (GPU, qualité) - Voix clones
|
||||||
|
|
||||||
|
**Configuration :**
|
||||||
|
Fichier `~/openedai-speech/tts-config/config.yaml`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Ollama (Port 11434)
|
||||||
|
|
||||||
|
**Rôle** : Serveur LLM
|
||||||
|
|
||||||
|
**Modèles installés :**
|
||||||
|
- `qwen2.5:14b` : LLM principal d'Effi
|
||||||
|
- `bge-m3:latest` : Modèle d'embeddings pour RAG
|
||||||
|
- `qwen2.5:3b` : LLM léger pour filtres mémoire
|
||||||
|
|
||||||
|
**Commandes utiles :**
|
||||||
|
```bash
|
||||||
|
# Lister les modèols
|
||||||
|
ollama list
|
||||||
|
|
||||||
|
# Télécharger un modèle
|
||||||
|
ollama pull qwen2.5:14b
|
||||||
|
|
||||||
|
# Vérifier le statut
|
||||||
|
curl http://localhost:11434/api/tags
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Obsidian Server (Port 3100)
|
||||||
|
|
||||||
|
**Rôle** : Interface web Obsidian 24/7
|
||||||
|
|
||||||
|
**Utilisation :**
|
||||||
|
- Accès aux notes depuis n'importe où
|
||||||
|
- Intégration MCP pour modification automatique
|
||||||
|
- Interface graphique complète
|
||||||
|
|
||||||
|
**Note :** Nécessite `shm_size: 1gb` pour la stabilité
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dépendances entre services
|
||||||
|
|
||||||
|
```
|
||||||
|
open-webui
|
||||||
|
├──► qdrant (pour RAG)
|
||||||
|
├──► wol-proxy (pour Ollama)
|
||||||
|
└──► mcpo (pour outils externes)
|
||||||
|
|
||||||
|
n8n
|
||||||
|
└──► Peut appeler tous les services via API
|
||||||
|
|
||||||
|
Obsidian (mobile/desktop)
|
||||||
|
└──► CouchDB (synchronisation)
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ressources système
|
||||||
|
|
||||||
|
| Service | CPU | RAM | Stockage |
|
||||||
|
|---------|-----|-----|----------|
|
||||||
|
| Open WebUI | Faible | ~500 MB | ~1 GB (DB SQLite) |
|
||||||
|
| Qdrant | Moyen | ~1 GB | Variable (vecteurs) |
|
||||||
|
| CouchDB | Faible | ~200 MB | Taille des notes |
|
||||||
|
| n8n | Variable | ~500 MB | Workflows |
|
||||||
|
| speaches | Élevé (GPU) | ~4 GB VRAM | ~3 GB (modèles) |
|
||||||
|
| openedai-speech | Moyen | ~2 GB VRAM | ~2 GB (voix) |
|
||||||
|
| Ollama | Élevé (GPU) | ~10 GB VRAM | ~9 GB (qwen2.5:14b) |
|
||||||
@@ -0,0 +1,230 @@
|
|||||||
|
# 🎤 Configuration Audio (STT + TTS)
|
||||||
|
|
||||||
|
## Vue d'ensemble
|
||||||
|
|
||||||
|
Effi dispose d'un pipeline vocal complet fonctionnant sur **folzo-Corp** (PC Gaming avec RX 7800 XT) :
|
||||||
|
|
||||||
|
- **STT** (Speech-to-Text) : Whisper via speaches avec ROCm
|
||||||
|
- **TTS** (Text-to-Speech) : Piper/XTTS via openedai-speech
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## STT - Speaches (Whisper)
|
||||||
|
|
||||||
|
### Configuration Docker Compose
|
||||||
|
|
||||||
|
Fichier : `~/speaches/docker-compose.yml` (sur folzo-Corp)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
speaches:
|
||||||
|
image: speaches:rocm-ct2
|
||||||
|
container_name: speaches-stt
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "8200:8000"
|
||||||
|
devices:
|
||||||
|
- /dev/kfd
|
||||||
|
- /dev/dri
|
||||||
|
group_add:
|
||||||
|
- "44"
|
||||||
|
- "991"
|
||||||
|
security_opt:
|
||||||
|
- seccomp=unconfined
|
||||||
|
environment:
|
||||||
|
- HSA_OVERRIDE_GFX_VERSION=11.0.0
|
||||||
|
- WHISPER__MODEL=deepdml/faster-whisper-large-v3-turbo-ct2
|
||||||
|
- WHISPER__LANGUAGE=fr
|
||||||
|
- WHISPER__COMPUTE_TYPE=float32
|
||||||
|
- WHISPER__DEVICE=auto
|
||||||
|
volumes:
|
||||||
|
- speaches-models:/root/.cache/huggingface
|
||||||
|
|
||||||
|
speaches-init:
|
||||||
|
image: curlimages/curl:latest
|
||||||
|
container_name: speaches-init
|
||||||
|
restart: "no"
|
||||||
|
depends_on:
|
||||||
|
- speaches
|
||||||
|
entrypoint: >
|
||||||
|
sh -c "sleep 5 &&
|
||||||
|
curl -sf -X POST http://speaches:8000/v1/models/deepdml%2Ffaster-whisper-large-v3-turbo-ct2 &&
|
||||||
|
echo 'Modèle enregistré'"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
speaches-models:
|
||||||
|
```
|
||||||
|
|
||||||
|
### Modèle utilisé
|
||||||
|
|
||||||
|
**`deepdml/faster-whisper-large-v3-turbo-ct2`**
|
||||||
|
|
||||||
|
- Version optimisée CTranslate2
|
||||||
|
- Support ROCm (GPU AMD)
|
||||||
|
- Turbo = version rapide du large-v3
|
||||||
|
- Langue : Français forcé (`fr`)
|
||||||
|
|
||||||
|
### Points importants
|
||||||
|
|
||||||
|
1. **Build personnalisé** : L'image `speaches:rocm-ct2` doit être construite localement
|
||||||
|
2. **Architecture GPU** : gfx1100 (RX 7800 XT)
|
||||||
|
3. **Compute type** : `float32` en CPU, `float16` en GPU
|
||||||
|
4. **Initialisation** : Le service `speaches-init` enregistre le modèle au démarrage
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## TTS - OpenedAI-Speech (Piper)
|
||||||
|
|
||||||
|
### Configuration Docker Compose
|
||||||
|
|
||||||
|
Fichier : `~/openedai-speech/docker-compose.yml` (sur folzo-Corp)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
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"
|
||||||
|
- "991"
|
||||||
|
environment:
|
||||||
|
- HSA_OVERRIDE_GFX_VERSION=11.0.0
|
||||||
|
- HIP_VISIBLE_DEVICES=0
|
||||||
|
```
|
||||||
|
|
||||||
|
### Voix disponibles
|
||||||
|
|
||||||
|
#### Piper (CPU - Recommandé pour usage standard)
|
||||||
|
|
||||||
|
**Voix française** : `fr_FR-upmc-medium`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Téléchargement
|
||||||
|
cd ~/openedai-speech/tts-voices
|
||||||
|
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/upmc/medium/fr_FR-upmc-medium.onnx
|
||||||
|
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/upmc/medium/fr_FR-upmc-medium.onnx.json
|
||||||
|
```
|
||||||
|
|
||||||
|
Configuration (`tts-config/config.yaml`) :
|
||||||
|
```yaml
|
||||||
|
tts-1:
|
||||||
|
alloy:
|
||||||
|
model: voices/fr_FR-upmc-medium.onnx
|
||||||
|
speaker: 0 # 0 = voix féminine
|
||||||
|
```
|
||||||
|
|
||||||
|
### Points importants
|
||||||
|
|
||||||
|
1. **group_add numériques** : Utiliser `"44"` et `"991"` (pas les noms)
|
||||||
|
2. **ROCm activé** : `HSA_OVERRIDE_GFX_VERSION=11.0.0`
|
||||||
|
3. **Fallback CPU** : Piper fonctionne aussi en CPU si GPU indisponible
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Configuration Open WebUI
|
||||||
|
|
||||||
|
**Admin Panel → Settings → Audio**
|
||||||
|
|
||||||
|
### Paramètres STT
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| Engine | `OpenAI` |
|
||||||
|
| URL | `http://192.168.1.11:8200/v1` |
|
||||||
|
| Model | `deepdml/faster-whisper-large-v3-turbo-ct2` |
|
||||||
|
| API Key | `anything` (valeur quelconque) |
|
||||||
|
|
||||||
|
### Paramètres TTS
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| Engine | `OpenAI` |
|
||||||
|
| URL | `http://192.168.1.11:8100/v1` |
|
||||||
|
| Model | `tts-1` (Piper) ou `tts-1-hd` (XTTS) |
|
||||||
|
| Voice | `alloy` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Build CTranslate2 ROCm (speaches)
|
||||||
|
|
||||||
|
### Pourquoi un build personnalisé ?
|
||||||
|
|
||||||
|
L'image officielle speaches ne publie pas d'image ROCm. Il faut builder CTranslate2 depuis les sources avec :
|
||||||
|
- Support MIOpen (équivalent ROCm de cuDNN)
|
||||||
|
- Architecture gfx1100 (RX 7800 XT)
|
||||||
|
|
||||||
|
### Procédure de build
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Cloner le repo
|
||||||
|
cd ~
|
||||||
|
git clone https://github.com/speaches-ai/speaches.git
|
||||||
|
cd speaches
|
||||||
|
|
||||||
|
# 2. Modifier le Dockerfile pour gfx1100
|
||||||
|
cd src
|
||||||
|
sed -i 's/gfx1101/gfx1100/g' Dockerfile.rocm-ct2
|
||||||
|
|
||||||
|
# 3. Build (~50 min la première fois)
|
||||||
|
docker build -f Dockerfile.rocm-ct2 -t speaches:rocm-ct2 .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Architecture GPU
|
||||||
|
|
||||||
|
Vérifier votre architecture :
|
||||||
|
```bash
|
||||||
|
docker run --device /dev/kfd --device /dev/dri \
|
||||||
|
-e HSA_OVERRIDE_GFX_VERSION=11.0.0 speaches:rocm-ct2 \
|
||||||
|
/opt/rocm-6.3.4/bin/rocminfo | grep -E "gfx|Name"
|
||||||
|
```
|
||||||
|
|
||||||
|
Cartes courantes :
|
||||||
|
- RX 7800 XT : `gfx1100`
|
||||||
|
- RX 7900 XTX : `gfx1100`
|
||||||
|
- RX 7700 XT : `gfx1101`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dépannage audio
|
||||||
|
|
||||||
|
### Erreur : "float16 not supported on CPU backend"
|
||||||
|
|
||||||
|
**Solution** : Changer `WHISPER__COMPUTE_TYPE` :
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
- WHISPER__COMPUTE_TYPE=int8 # ou float32
|
||||||
|
```
|
||||||
|
|
||||||
|
### Erreur : "Unable to find group render"
|
||||||
|
|
||||||
|
**Solution** : Utiliser les GID numériques :
|
||||||
|
```yaml
|
||||||
|
group_add:
|
||||||
|
- "44" # video
|
||||||
|
- "991" # render
|
||||||
|
```
|
||||||
|
|
||||||
|
### Erreur : "hipErrorInvalidDeviceFunction"
|
||||||
|
|
||||||
|
**Cause** : Mauvaise architecture GPU dans le build
|
||||||
|
**Solution** : Rebuilder avec la bonne valeur gfx (voir section Build)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Performance attendue
|
||||||
|
|
||||||
|
| Composant | Mode | Latence | Notes |
|
||||||
|
|-----------|------|---------|-------|
|
||||||
|
| STT | CPU (int8) | ~10s pour 5s audio | Utilisation 100% CPU |
|
||||||
|
| STT | GPU (ROCm) | ~1s pour 5s audio | Objectif après rebuild |
|
||||||
|
| TTS Piper | CPU | ~300ms | Léger, utilisable |
|
||||||
|
| TTS XTTS | GPU | ~500ms-2s | Qualité supérieure |
|
||||||
@@ -0,0 +1,192 @@
|
|||||||
|
# ⚙️ Variables d'Environnement
|
||||||
|
|
||||||
|
## Fichier `.env`
|
||||||
|
|
||||||
|
Ce fichier contient toutes les variables sensibles et de configuration. **Ne jamais le commiter !**
|
||||||
|
|
||||||
|
### Template
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# EFFI SERVER - Variables d'environnement
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# 1. OPEN WEBUI
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
WEBUI_SECRET_KEY=votre_cle_secrete_longue_et_aleatoire
|
||||||
|
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# 2. OLLAMA / PC GAMING
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
OLLAMA_HOST=192.168.1.11
|
||||||
|
PC_GAMING_MAC=XX:XX:XX:XX:XX:XX
|
||||||
|
BROADCAST_IP=192.168.1.255
|
||||||
|
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# 3. COUCHDB (Obsidian LiveSync)
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
COUCHDB_USER=master
|
||||||
|
COUCHDB_PASSWORD=votre_mot_de_passe_securise
|
||||||
|
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
# 4. N8N (Automatisation)
|
||||||
|
# ═══════════════════════════════════════════════════════════
|
||||||
|
N8N_USER=master
|
||||||
|
N8N_PASSWORD=votre_mot_de_passe_securise
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description des variables
|
||||||
|
|
||||||
|
### WEBUI_SECRET_KEY
|
||||||
|
|
||||||
|
**Utilisé par** : Open WebUI
|
||||||
|
|
||||||
|
**Description** : Clé secrète pour la gestion des sessions et le chiffrement.
|
||||||
|
|
||||||
|
**Génération** :
|
||||||
|
```bash
|
||||||
|
# Linux
|
||||||
|
openssl rand -hex 32
|
||||||
|
|
||||||
|
# ou
|
||||||
|
python3 -c "import secrets; print(secrets.token_hex(32))"
|
||||||
|
```
|
||||||
|
|
||||||
|
### OLLAMA_HOST
|
||||||
|
|
||||||
|
**Utilisé par** : wol-proxy
|
||||||
|
|
||||||
|
**Description** : IP du PC Gaming où tourne Ollama.
|
||||||
|
|
||||||
|
**Exemple** : `192.168.1.11`
|
||||||
|
|
||||||
|
### PC_GAMING_MAC
|
||||||
|
|
||||||
|
**Utilisé par** : wol-proxy
|
||||||
|
|
||||||
|
**Description** : Adresse MAC du PC Gaming pour le Wake-on-LAN.
|
||||||
|
|
||||||
|
**Format** : `XX:XX:XX:XX:XX:XX`
|
||||||
|
|
||||||
|
**Trouver l'adresse MAC** :
|
||||||
|
```bash
|
||||||
|
# Sur le PC Gaming
|
||||||
|
ip link show
|
||||||
|
# ou
|
||||||
|
ifconfig | grep ether
|
||||||
|
```
|
||||||
|
|
||||||
|
### BROADCAST_IP
|
||||||
|
|
||||||
|
**Utilisé par** : wol-proxy
|
||||||
|
|
||||||
|
**Description** : Adresse de broadcast du réseau local.
|
||||||
|
|
||||||
|
**Standard** : `192.168.1.255` (pour un réseau 192.168.1.0/24)
|
||||||
|
|
||||||
|
### COUCHDB_USER / COUCHDB_PASSWORD
|
||||||
|
|
||||||
|
**Utilisés par** : CouchDB
|
||||||
|
|
||||||
|
**Description** : Identifiants administrateur pour CouchDB.
|
||||||
|
|
||||||
|
**Note** : L'utilisateur par défaut dans les exemples est `master`.
|
||||||
|
|
||||||
|
### N8N_USER / N8N_PASSWORD
|
||||||
|
|
||||||
|
**Utilisés par** : n8n
|
||||||
|
|
||||||
|
**Description** : Identifiants pour l'accès à l'interface n8n (Basic Auth).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Variables système
|
||||||
|
|
||||||
|
### TZ (TimeZone)
|
||||||
|
|
||||||
|
**Valeur par défaut** : `Europe/Paris`
|
||||||
|
|
||||||
|
**Utilisée par** : Tous les services
|
||||||
|
|
||||||
|
### HSA_OVERRIDE_GFX_VERSION
|
||||||
|
|
||||||
|
**Valeur** : `11.0.0`
|
||||||
|
|
||||||
|
**Utilisée par** : Services ROCm (speaches, openedai-speech)
|
||||||
|
|
||||||
|
**Description** : Force la version GFX pour la compatibilité ROCm.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Configuration réseau
|
||||||
|
|
||||||
|
### Ports utilisés
|
||||||
|
|
||||||
|
| Service | Port | Protocole | Description |
|
||||||
|
|---------|------|-----------|-------------|
|
||||||
|
| Open WebUI | 3000 | TCP | Interface web |
|
||||||
|
| wol-proxy | 3011 | TCP | Proxy Ollama |
|
||||||
|
| Obsidian | 3100 | TCP | Interface Obsidian web |
|
||||||
|
| Qdrant HTTP | 6333 | TCP | API REST |
|
||||||
|
| Qdrant gRPC | 6334 | TCP | API gRPC |
|
||||||
|
| n8n | 5678 | TCP | Interface workflow |
|
||||||
|
| CouchDB | 5984 | TCP | Base de données |
|
||||||
|
| mcpo | 8000 | TCP | Proxy MCP |
|
||||||
|
| speaches | 8200 | TCP | STT API |
|
||||||
|
| openedai-speech | 8100 | TCP | TTS API |
|
||||||
|
| pipelines | 9099 | TCP | Middleware |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sécurité
|
||||||
|
|
||||||
|
### Bonnes pratiques
|
||||||
|
|
||||||
|
1. **Mots de passe** : Utiliser des mots de passe forts (>16 caractères, variété)
|
||||||
|
2. **Réseau** : Ne jamais exposer les ports directement sur Internet
|
||||||
|
3. **VPN** : Utiliser WireGuard ou Tailscale pour l'accès externe
|
||||||
|
4. **Backup** : Sauvegarder régulièrement le fichier `.env`
|
||||||
|
5. **Permissions** : Limiter l'accès au fichier `.env` (chmod 600)
|
||||||
|
|
||||||
|
### Commandes de sécurité
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Permissions restrictives
|
||||||
|
chmod 600 ~/effi/.env
|
||||||
|
|
||||||
|
# Vérifier les permissions
|
||||||
|
ls -la ~/effi/.env
|
||||||
|
|
||||||
|
# Backup chiffré
|
||||||
|
gpg -c ~/effi/.env
|
||||||
|
cp ~/effi/.env.gpg ~/backups/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dépannage environnement
|
||||||
|
|
||||||
|
### Variable non prise en compte
|
||||||
|
|
||||||
|
**Cause** : Le conteneur doit être recréé (pas juste redémarré)
|
||||||
|
|
||||||
|
**Solution** :
|
||||||
|
```bash
|
||||||
|
docker compose down
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Erreur "variable is not set"
|
||||||
|
|
||||||
|
**Cause** : Variable manquante dans le `.env`
|
||||||
|
|
||||||
|
**Solution** : Vérifier que toutes les variables requises sont définies
|
||||||
|
|
||||||
|
### Caractères spéciaux dans les mots de passe
|
||||||
|
|
||||||
|
**Attention** : Certains caractères peuvent poser problème dans les URLs (%, @, #, etc.)
|
||||||
|
|
||||||
|
**Solution** : Utiliser des mots de passe avec caractères alphanumériques uniquement, ou encoder les caractères spéciaux.
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
# 🔗 Intégration MCP et n8n
|
||||||
|
|
||||||
|
## Vue d'ensemble
|
||||||
|
|
||||||
|
Effi s'intègre avec plusieurs outils externes via :
|
||||||
|
- **MCP** (Model Context Protocol) : Protocole d'outils pour l'IA
|
||||||
|
- **n8n** : Plateforme d'automatisation de workflows
|
||||||
|
- **CouchDB** : Synchronisation Obsidian LiveSync
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## MCPO - Proxy MCP
|
||||||
|
|
||||||
|
### Rôle
|
||||||
|
|
||||||
|
MCPO fait le pont entre OpenWebUI et les outils MCP (Obsidian, système de fichiers, etc.).
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
**Fichier : `~/effi/mcpo-config/config.json`**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"mcpServers": {}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Au démarrage, créer ce fichier s'il n'existe pas :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat > ~/effi/mcpo-config/config.json << 'EOF'
|
||||||
|
{"mcpServers": {}}
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
### Accès
|
||||||
|
|
||||||
|
- URL : `http://192.168.1.27:8000`
|
||||||
|
- Port : 8000
|
||||||
|
|
||||||
|
### Dépannage
|
||||||
|
|
||||||
|
**Problème : mcpo redémarre en boucle**
|
||||||
|
|
||||||
|
**Cause** : Config `mcpo-config/config.json` vide ou inexistant
|
||||||
|
|
||||||
|
**Solution** :
|
||||||
|
```bash
|
||||||
|
cat > ~/effi/mcpo-config/config.json << 'EOF'
|
||||||
|
{"mcpServers": {}}
|
||||||
|
EOF
|
||||||
|
docker compose restart mcpo
|
||||||
|
```
|
||||||
|
|
||||||
|
**Problème : Processus zombies**
|
||||||
|
|
||||||
|
**Symptômes** : `[mcpo] <defunct>` dans `ps aux`
|
||||||
|
|
||||||
|
**Solution** :
|
||||||
|
```bash
|
||||||
|
docker restart mcpo
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## n8n - Automatisation
|
||||||
|
|
||||||
|
### Rôle
|
||||||
|
|
||||||
|
n8n permet de créer des workflows d'automatisation déclenchés par Effi ou des événements externes.
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
**Variables d'environnement (dans `.env`) :**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
N8N_USER=master
|
||||||
|
N8N_PASSWORD=mot_de_passe_securise
|
||||||
|
```
|
||||||
|
|
||||||
|
### Accès
|
||||||
|
|
||||||
|
- URL : `http://192.168.1.27:5678`
|
||||||
|
- Authentification : Basic Auth
|
||||||
|
|
||||||
|
### Cas d'usage
|
||||||
|
|
||||||
|
#### Exemple 1 : Webhook depuis Effi
|
||||||
|
|
||||||
|
1. Créer un workflow dans n8n avec un nœud **Webhook**
|
||||||
|
2. Configurer l'URL du webhook dans OpenWebUI
|
||||||
|
3. Effi peut déclencher des actions via ce webhook
|
||||||
|
|
||||||
|
#### Exemple 2 : Intégration Home Assistant (futur)
|
||||||
|
|
||||||
|
```
|
||||||
|
[Commande vocale Effi]
|
||||||
|
→ OpenWebUI
|
||||||
|
→ n8n (webhook)
|
||||||
|
→ API Home Assistant
|
||||||
|
→ Action domotique
|
||||||
|
```
|
||||||
|
|
||||||
|
### Sauvegarde des workflows
|
||||||
|
|
||||||
|
Les workflows sont stockés dans `~/effi/n8n-data/`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## CouchDB - Obsidian LiveSync
|
||||||
|
|
||||||
|
### Rôle
|
||||||
|
|
||||||
|
CouchDB sert de backend de synchronisation pour Obsidian LiveSync, permettant d'accéder aux notes depuis plusieurs appareils.
|
||||||
|
|
||||||
|
### Initialisation (premier démarrage)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Créer les bases système
|
||||||
|
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
|
||||||
|
|
||||||
|
# Créer la base pour Obsidian
|
||||||
|
curl -X PUT http://master:MOT_DE_PASSE@192.168.1.27:5984/obsidian-livesync
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration Obsidian
|
||||||
|
|
||||||
|
Dans Obsidian (desktop ou mobile) :
|
||||||
|
|
||||||
|
1. Installer le plugin **Self-hosted LiveSync**
|
||||||
|
2. Configuration :
|
||||||
|
- **URL** : `http://192.168.1.27:5984`
|
||||||
|
- **Database** : `obsidian-livesync`
|
||||||
|
- **Username** : `master`
|
||||||
|
- **Password** : [mot de passe CouchDB]
|
||||||
|
3. Activer la synchronisation
|
||||||
|
|
||||||
|
### Accès
|
||||||
|
|
||||||
|
- URL : `http://192.168.1.27:5984`
|
||||||
|
- Interface Fauxton : `http://192.168.1.27:5984/_utils`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Pipelines - Middleware mem0
|
||||||
|
|
||||||
|
### Rôle
|
||||||
|
|
||||||
|
Le service pipelines est un middleware pour OpenWebUI permettant d'utiliser des pipelines personnalisés, notamment mem0 pour la mémoire avancée.
|
||||||
|
|
||||||
|
### Accès
|
||||||
|
|
||||||
|
- URL : `http://192.168.1.27:9099`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Intégrations futures
|
||||||
|
|
||||||
|
### Home Assistant
|
||||||
|
|
||||||
|
Voir le document dans les notes d'archive pour les idées d'intégration complète avec Home Assistant.
|
||||||
|
|
||||||
|
### Nextcloud
|
||||||
|
|
||||||
|
Intégration possible pour :
|
||||||
|
- Sauvegarde automatique des conversations
|
||||||
|
- Accès aux fichiers pour le RAG
|
||||||
|
- Synchronisation des tâches
|
||||||
@@ -0,0 +1,262 @@
|
|||||||
|
# 🧠 Configuration Mémoire Persistante
|
||||||
|
|
||||||
|
## Vue d'ensemble
|
||||||
|
|
||||||
|
Effi utilise deux mécanismes de mémoire complémentaires :
|
||||||
|
|
||||||
|
1. **Auto Memory** : Extraction automatique des faits importants des conversations
|
||||||
|
2. **Memory Injection Filter** : Injection des souvenirs dans le contexte des conversations
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Architecture de la mémoire
|
||||||
|
|
||||||
|
```
|
||||||
|
Conversation utilisateur
|
||||||
|
↓
|
||||||
|
[Auto Memory] → Analyse avec qwen2.5:3b → Extraction de faits
|
||||||
|
↓
|
||||||
|
Stockage SQLite (webui.db)
|
||||||
|
↓
|
||||||
|
[Memory Injection] ← Récupération des souvenirs pertinents
|
||||||
|
↓
|
||||||
|
Injection dans le contexte LLM
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Auto Memory (Extraction)
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
1. **Admin Panel → Functions → Discover**
|
||||||
|
2. Rechercher **"Auto Memory"** par **nokodo**
|
||||||
|
3. Cliquer sur **Install**
|
||||||
|
|
||||||
|
### Configuration des Valves
|
||||||
|
|
||||||
|
**Admin Panel → Functions → Auto Memory → ⚙️ (Settings)**
|
||||||
|
|
||||||
|
| Paramètre | Valeur | Description |
|
||||||
|
|-----------|--------|-------------|
|
||||||
|
| OpenAI API URL | `http://192.168.1.11:3011/v1` | URL Ollama via wol-proxy |
|
||||||
|
| Model | `qwen2.5:3b` | LLM léger pour analyse |
|
||||||
|
| API Key | `toto` | Valeur quelconque |
|
||||||
|
| Messages To Consider | `10` | Nombre de messages analysés |
|
||||||
|
| Related Memories N | `5` | Souvenirs liés à considérer |
|
||||||
|
| Minimum Memory Similarity | `0.7` | Seuil de similarité |
|
||||||
|
| Override Memory Context | `OFF` | Ne pas écraser le contexte |
|
||||||
|
| Debug Mode | `OFF` | Mettre ON pour diagnostic |
|
||||||
|
|
||||||
|
### Activation globale
|
||||||
|
|
||||||
|
**Admin Panel → Functions → Auto Memory → ⋯ → Toggle Global** → **ON**
|
||||||
|
|
||||||
|
### Patch du code (JSON markdown)
|
||||||
|
|
||||||
|
Le filtre original a un problème avec les réponses JSON formatées en markdown. Appliquer ce patch :
|
||||||
|
|
||||||
|
**Admin Panel → Functions → Auto Memory → ⋯ → Edit**
|
||||||
|
|
||||||
|
Chercher : `text_response = response.choices[0].message.content`
|
||||||
|
|
||||||
|
Remplacer le bloc `if response_model:` par :
|
||||||
|
|
||||||
|
```python
|
||||||
|
if response_model:
|
||||||
|
try:
|
||||||
|
cleaned = re.sub(r'```(?:json)?\s*', '', text_response)
|
||||||
|
cleaned = re.sub(r'```\s*', '', cleaned).strip()
|
||||||
|
match = re.search(r'\{.*\}', cleaned, re.DOTALL)
|
||||||
|
if match:
|
||||||
|
cleaned = match.group(0)
|
||||||
|
return response_model.model_validate_json(cleaned)
|
||||||
|
except ValidationError as e:
|
||||||
|
self.log(f"response model validation error: {e}", level="warning")
|
||||||
|
raise
|
||||||
|
return text_response
|
||||||
|
```
|
||||||
|
|
||||||
|
Chercher aussi `UNIFIED_SYSTEM_PROMPT` et ajouter au début :
|
||||||
|
|
||||||
|
```python
|
||||||
|
UNIFIED_SYSTEM_PROMPT = """IMPORTANT: Respond with ONLY valid JSON. No markdown formatting, no code blocks, no explanation text. Start your response directly with { and end with }. """ + UNIFIED_SYSTEM_PROMPT
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Memory Injection Filter (Restitution)
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
1. **Admin Panel → Functions → Discover**
|
||||||
|
2. Rechercher **"Memory Injection Filter"** par **Raphael**
|
||||||
|
3. Cliquer sur **Install**
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
**Admin Panel → Functions → Memory Injection Filter → ⚙️**
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| PREPENDING_TEXT | `Voici les souvenirs à long terme de l'utilisateur :` |
|
||||||
|
| SHOW_MEMORY_COUNT_EMITTER | `ON` |
|
||||||
|
|
||||||
|
### Activation globale
|
||||||
|
|
||||||
|
**Admin Panel → Functions → Memory Injection Filter → ⋯ → Toggle Global** → **ON**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Vérification du fonctionnement
|
||||||
|
|
||||||
|
### Test d'enregistrement
|
||||||
|
|
||||||
|
Dans un chat avec Effi :
|
||||||
|
```
|
||||||
|
Je collectionne les vinyles des années 80
|
||||||
|
```
|
||||||
|
|
||||||
|
Dans le terminal (vérification SQLite) :
|
||||||
|
```bash
|
||||||
|
sudo docker cp open-webui:/app/backend/data/webui.db /tmp/webui.db
|
||||||
|
sqlite3 /tmp/webui.db "SELECT content, datetime(created_at, 'unixepoch') FROM memory ORDER BY created_at DESC LIMIT 5;"
|
||||||
|
```
|
||||||
|
|
||||||
|
→ Le souvenir doit apparaître dans la base.
|
||||||
|
|
||||||
|
### Test de restitution entre sessions
|
||||||
|
|
||||||
|
Ouvrir un **nouveau chat** :
|
||||||
|
```
|
||||||
|
Qu'est-ce que tu sais sur mes hobbies ?
|
||||||
|
```
|
||||||
|
|
||||||
|
→ Effi doit mentionner les vinyles sans que tu l'aies redit.
|
||||||
|
|
||||||
|
### Vérification des logs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker logs open-webui --tail 50 | grep -iE "memory|saved|added"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Gestion des souvenirs
|
||||||
|
|
||||||
|
### Via l'interface
|
||||||
|
|
||||||
|
**Profil → Settings → Personalization → Memory**
|
||||||
|
|
||||||
|
- Voir tous les souvenirs
|
||||||
|
- Supprimer individuellement (icône 🗑️)
|
||||||
|
- Rechercher dans les souvenirs
|
||||||
|
|
||||||
|
### Via SQLite (avancé)
|
||||||
|
|
||||||
|
**Lister les souvenirs :**
|
||||||
|
```bash
|
||||||
|
sudo docker cp open-webui:/app/backend/data/webui.db /tmp/webui.db
|
||||||
|
sqlite3 /tmp/webui.db "SELECT id, content, datetime(created_at, 'unixepoch') as date FROM memory ORDER BY created_at DESC;"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Supprimer un souvenir :**
|
||||||
|
```bash
|
||||||
|
sqlite3 /tmp/webui.db "DELETE FROM memory WHERE id = 123;"
|
||||||
|
sudo docker cp /tmp/webui.db open-webui:/app/backend/data/webui.db
|
||||||
|
```
|
||||||
|
|
||||||
|
**Rechercher par mot-clé :**
|
||||||
|
```bash
|
||||||
|
sqlite3 /tmp/webui.db "SELECT * FROM memory WHERE content LIKE '%vinyle%';"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Bonnes pratiques
|
||||||
|
|
||||||
|
### Qualité des souvenirs
|
||||||
|
|
||||||
|
- **Courts et factuels** : Moins de 15 mots par souvenir
|
||||||
|
- **Spécifiques** : "Aime le rock" ❌ → "Collectionne vinyles années 80" ✅
|
||||||
|
- **Quantité** : Viser 30-50 souvenirs max pour ne pas surcharger le contexte
|
||||||
|
|
||||||
|
### Maintenance
|
||||||
|
|
||||||
|
- **Nettoyage trimestriel** : Supprimer les souvenirs obsolètes
|
||||||
|
- **Vérification** : Tester la restitution régulièrement
|
||||||
|
- **Backup** : Sauvegarder `webui.db` avant toute modification manuelle
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Dépannage
|
||||||
|
|
||||||
|
### Les souvenirs ne s'enregistrent pas
|
||||||
|
|
||||||
|
**Vérifications :**
|
||||||
|
1. Auto Memory est-il activé globalement ?
|
||||||
|
2. La valve Debug Mode est-elle ON ? (voir les logs)
|
||||||
|
3. Le modèle qwen2.5:3b est-il bien téléchargé sur Ollama ?
|
||||||
|
4. L'URL Ollama dans les valves est-elle correcte ?
|
||||||
|
|
||||||
|
**Commandes diagnostic :**
|
||||||
|
```bash
|
||||||
|
# Vérifier qu'Ollama répond
|
||||||
|
curl http://192.168.1.11:3011/v1/models
|
||||||
|
|
||||||
|
# Voir les logs détaillés
|
||||||
|
docker logs open-webui --tail 100 | grep -i auto.memory
|
||||||
|
```
|
||||||
|
|
||||||
|
### Les souvenirs ne sont pas injectés
|
||||||
|
|
||||||
|
**Vérifications :**
|
||||||
|
1. Memory Injection Filter est-il activé globalement ?
|
||||||
|
2. La variable PREPENDING_TEXT est-elle configurée ?
|
||||||
|
3. Y a-t-il des souvenirs dans la base ? (vérifier avec SQLite)
|
||||||
|
|
||||||
|
### Doublons de souvenirs
|
||||||
|
|
||||||
|
**Cause** : L'extraction n'est pas dédupliquée automatiquement.
|
||||||
|
**Solution** : Nettoyage manuel périodique via l'interface.
|
||||||
|
|
||||||
|
### Performance lente
|
||||||
|
|
||||||
|
**Cause** : Trop de souvenirs (>100) ralentissent la recherche.
|
||||||
|
**Solution** :
|
||||||
|
- Augmenter `Minimum Memory Similarity` (ex: 0.8)
|
||||||
|
- Réduire `Related Memories N` (ex: 3)
|
||||||
|
- Nettoyer les souvenirs anciens
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Stockage technique
|
||||||
|
|
||||||
|
### Emplacement
|
||||||
|
|
||||||
|
```
|
||||||
|
Conteneur : open-webui
|
||||||
|
Chemin : /app/backend/data/webui.db
|
||||||
|
Host : volume Docker open-webui-data
|
||||||
|
```
|
||||||
|
|
||||||
|
### Structure de la table `memory`
|
||||||
|
|
||||||
|
| Colonne | Type | Description |
|
||||||
|
|---------|------|-------------|
|
||||||
|
| id | INTEGER | ID auto-incrémenté |
|
||||||
|
| content | TEXT | Texte du souvenir |
|
||||||
|
| created_at | INTEGER | Timestamp Unix |
|
||||||
|
| updated_at | INTEGER | Timestamp Unix |
|
||||||
|
| user_id | TEXT | ID utilisateur |
|
||||||
|
|
||||||
|
### Backup de la mémoire
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Sauvegarde
|
||||||
|
docker cp open-webui:/app/backend/data/webui.db ~/backups/webui-$(date +%Y%m%d).db
|
||||||
|
|
||||||
|
# Restauration
|
||||||
|
docker cp ~/backups/webui-20260101.db open-webui:/app/backend/data/webui.db
|
||||||
|
docker restart open-webui
|
||||||
|
```
|
||||||
@@ -0,0 +1,335 @@
|
|||||||
|
# 📦 Guide d'Installation
|
||||||
|
|
||||||
|
## Vue d'ensemble
|
||||||
|
|
||||||
|
Ce guide décrit l'installation complète de l'infrastructure Effi, du serveur Ubuntu au premier démarrage des services.
|
||||||
|
|
||||||
|
**Temps estimé** : 2-3 heures
|
||||||
|
**Difficulté** : Intermédiaire
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prérequis
|
||||||
|
|
||||||
|
### Matériel
|
||||||
|
|
||||||
|
**effi-server (serveur principal)** :
|
||||||
|
- CPU : Intel J5040 ou équivalent (4 cœurs)
|
||||||
|
- RAM : 8 GB minimum
|
||||||
|
- Stockage : 50 GB SSD minimum
|
||||||
|
- OS : Ubuntu Server 22.04 LTS
|
||||||
|
|
||||||
|
**folzo-Corp (PC Gaming)** :
|
||||||
|
- CPU : AMD Ryzen 5 ou supérieur
|
||||||
|
- RAM : 32 GB recommandé
|
||||||
|
- GPU : AMD RX 7800 XT (16 GB VRAM)
|
||||||
|
- OS : Bazzite (Fedora) ou Ubuntu 22.04
|
||||||
|
|
||||||
|
### Logiciels requis
|
||||||
|
|
||||||
|
**Sur effi-server** :
|
||||||
|
- Docker Engine 24.x+
|
||||||
|
- Docker Compose v2+
|
||||||
|
- curl, git
|
||||||
|
|
||||||
|
**Sur folzo-Corp** :
|
||||||
|
- Ollama
|
||||||
|
- ROCm 6.3.4 (pour AMD GPU)
|
||||||
|
- Docker Engine
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 1 : Préparation du serveur (effi-server)
|
||||||
|
|
||||||
|
### 1.1 Installation de Docker
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Mettre à jour le système
|
||||||
|
sudo apt update && sudo apt upgrade -y
|
||||||
|
|
||||||
|
# Installer les dépendances
|
||||||
|
sudo apt install -y ca-certificates curl gnupg lsb-release
|
||||||
|
|
||||||
|
# Ajouter la clé GPG officielle de Docker
|
||||||
|
sudo mkdir -p /etc/apt/keyrings
|
||||||
|
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||||
|
|
||||||
|
# Ajouter le repository Docker
|
||||||
|
echo \
|
||||||
|
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
|
||||||
|
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
|
||||||
|
# Installer Docker
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||||
|
|
||||||
|
# Vérifier l'installation
|
||||||
|
sudo docker --version
|
||||||
|
sudo docker compose version
|
||||||
|
|
||||||
|
# Ajouter l'utilisateur au groupe docker (déconnexion/reconnexion nécessaire)
|
||||||
|
sudo usermod -aG docker $USER
|
||||||
|
```
|
||||||
|
|
||||||
|
### 1.2 Création de la structure de dossiers
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Créer le dossier principal
|
||||||
|
mkdir -p ~/effi
|
||||||
|
cd ~/effi
|
||||||
|
|
||||||
|
# Créer les sous-dossiers
|
||||||
|
mkdir -p mcpo-config
|
||||||
|
mkdir -p qdrant-storage
|
||||||
|
mkdir -p couchdb-data
|
||||||
|
mkdir -p n8n-data
|
||||||
|
mkdir -p wol-proxy
|
||||||
|
mkdir -p tts-voices
|
||||||
|
mkdir -p tts-config
|
||||||
|
mkdir -p obsidian-vault
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 2 : Configuration du PC Gaming (folzo-Corp)
|
||||||
|
|
||||||
|
### 2.1 Installation d'Ollama
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Installer Ollama
|
||||||
|
curl -fsSL https://ollama.com/install.sh | sh
|
||||||
|
|
||||||
|
# Vérifier l'installation
|
||||||
|
ollama --version
|
||||||
|
|
||||||
|
# Télécharger les modèles nécessaires
|
||||||
|
ollama pull qwen2.5:14b
|
||||||
|
ollama pull qwen2.5:3b
|
||||||
|
ollama pull bge-m3
|
||||||
|
|
||||||
|
# Vérifier les modèles installés
|
||||||
|
ollama list
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.2 Configuration de Ollama pour le réseau
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Créer le fichier de service systemd
|
||||||
|
sudo systemctl edit ollama.service
|
||||||
|
```
|
||||||
|
|
||||||
|
Ajouter :
|
||||||
|
```ini
|
||||||
|
[Service]
|
||||||
|
Environment="OLLAMA_HOST=0.0.0.0:11434"
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Redémarrer Ollama
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl restart ollama
|
||||||
|
|
||||||
|
# Vérifier que Ollama écoute sur toutes les interfaces
|
||||||
|
sudo ss -tlnp | grep 11434
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.3 Installation de ROCm (pour AMD GPU)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Sur Bazzite/Fedora
|
||||||
|
sudo dnf install -y rocm-dev rocm-smi
|
||||||
|
|
||||||
|
# Vérifier l'installation
|
||||||
|
rocm-smi --showproductname
|
||||||
|
rocminfo | grep gfx
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2.4 Configuration des services Docker sur folzo-Corp
|
||||||
|
|
||||||
|
Créer les dossiers :
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/speaches
|
||||||
|
mkdir -p ~/openedai-speech/tts-voices
|
||||||
|
mkdir -p ~/openedai-speech/tts-config
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 3 : Configuration de la mémoire persistante
|
||||||
|
|
||||||
|
Voir le guide détaillé dans [Configuration Mémoire](./memoire.md).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 4 : Premier démarrage
|
||||||
|
|
||||||
|
### 4.1 Configuration du fichier .env
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/effi
|
||||||
|
cp .env.example .env
|
||||||
|
nano .env
|
||||||
|
```
|
||||||
|
|
||||||
|
Remplir toutes les variables :
|
||||||
|
- `WEBUI_SECRET_KEY` : Générer une clé aléatoire
|
||||||
|
- `OLLAMA_HOST` : IP de folzo-Corp
|
||||||
|
- `PC_GAMING_MAC` : Adresse MAC de folzo-Corp
|
||||||
|
- `COUCHDB_USER/PASSWORD` : Identifiants CouchDB
|
||||||
|
- `N8N_USER/PASSWORD` : Identifiants n8n
|
||||||
|
|
||||||
|
### 4.2 Initialisation de CouchDB
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Démarrer uniquement CouchDB
|
||||||
|
docker compose up -d couchdb
|
||||||
|
|
||||||
|
# Attendre 10 secondes
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# Créer les bases nécessaires
|
||||||
|
curl -X PUT http://master:VOTRE_MOT_DE_PASSE@192.168.1.27:5984/_users
|
||||||
|
curl -X PUT http://master:VOTRE_MOT_DE_PASSE@192.168.1.27:5984/_replicator
|
||||||
|
curl -X PUT http://master:VOTRE_MOT_DE_PASSE@192.168.1.27:5984/obsidian-livesync
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4.3 Démarrage complet
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Démarrer tous les services
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# Vérifier l'état
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
# Voir les logs
|
||||||
|
docker compose logs -f
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 5 : Configuration STT/TTS sur folzo-Corp
|
||||||
|
|
||||||
|
### 5.1 Build de speaches (ROCm)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~
|
||||||
|
git clone https://github.com/speaches-ai/speaches.git
|
||||||
|
cd speaches/src
|
||||||
|
|
||||||
|
# Modifier pour gfx1100
|
||||||
|
sed -i 's/gfx1101/gfx1100/g' Dockerfile.rocm-ct2
|
||||||
|
|
||||||
|
# Build (prend ~50 min)
|
||||||
|
docker build -f Dockerfile.rocm-ct2 -t speaches:rocm-ct2 .
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.2 Téléchargement des voix TTS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/openedai-speech/tts-voices
|
||||||
|
|
||||||
|
# Voix française Piper
|
||||||
|
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/upmc/medium/fr_FR-upmc-medium.onnx
|
||||||
|
wget https://huggingface.co/rhasspy/piper-voices/resolve/main/fr/fr_FR/upmc/medium/fr_FR-upmc-medium.onnx.json
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
mkdir -p ../tts-config
|
||||||
|
cat > ../tts-config/config.yaml << 'EOF'
|
||||||
|
tts-1:
|
||||||
|
alloy:
|
||||||
|
model: voices/fr_FR-upmc-medium.onnx
|
||||||
|
speaker: 0
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5.3 Démarrage des services audio
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/speaches
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
cd ~/openedai-speech
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 6 : Vérification finale
|
||||||
|
|
||||||
|
### 6.1 Test des services
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Test OpenWebUI
|
||||||
|
curl http://192.168.1.27:3000
|
||||||
|
|
||||||
|
# Test Ollama
|
||||||
|
curl http://192.168.1.11:11434/api/tags
|
||||||
|
|
||||||
|
# Test STT
|
||||||
|
curl http://192.168.1.11:8200/v1/models
|
||||||
|
|
||||||
|
# Test TTS
|
||||||
|
curl http://192.168.1.11:8100/v1/models
|
||||||
|
|
||||||
|
# Test CouchDB
|
||||||
|
curl http://192.168.1.27:5984
|
||||||
|
|
||||||
|
# Test n8n
|
||||||
|
curl http://192.168.1.27:5678
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 Accès aux interfaces
|
||||||
|
|
||||||
|
| Service | URL |
|
||||||
|
|---------|-----|
|
||||||
|
| Open WebUI | http://192.168.1.27:3000 |
|
||||||
|
| n8n | http://192.168.1.27:5678 |
|
||||||
|
| CouchDB | http://192.168.1.27:5984/_utils |
|
||||||
|
| Qdrant | http://192.168.1.27:6333 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Prochaines étapes
|
||||||
|
|
||||||
|
Après l'installation, suivre le guide de [Première Configuration](./premiere-config.md) pour :
|
||||||
|
- Créer le compte admin
|
||||||
|
- Configurer les connexions
|
||||||
|
- Installer les filtres de mémoire
|
||||||
|
- Tester le pipeline vocal
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dépannage initial
|
||||||
|
|
||||||
|
### Les conteneurs ne démarrent pas
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Voir les logs d'erreur
|
||||||
|
docker compose logs [nom-du-service]
|
||||||
|
|
||||||
|
# Vérifier les ports utilisés
|
||||||
|
sudo ss -tlnp
|
||||||
|
|
||||||
|
# Vérifier les variables d'environnement
|
||||||
|
docker compose config
|
||||||
|
```
|
||||||
|
|
||||||
|
### Erreur de permissions
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Fixer les permissions des volumes
|
||||||
|
sudo chown -R $USER:$USER ~/effi/*-data
|
||||||
|
sudo chown -R $USER:$USER ~/effi/*-storage
|
||||||
|
```
|
||||||
|
|
||||||
|
### Wake-on-LAN ne fonctionne pas
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Vérifier que wol-proxy est configuré
|
||||||
|
docker logs wol-proxy
|
||||||
|
|
||||||
|
# Tester le WoL manuellement
|
||||||
|
sudo apt install wakeonlan
|
||||||
|
wakeonlan XX:XX:XX:XX:XX:XX # MAC de folzo-Corp
|
||||||
|
```
|
||||||
@@ -0,0 +1,323 @@
|
|||||||
|
# ⚙️ Guide de Première Configuration
|
||||||
|
|
||||||
|
## Vue d'ensemble
|
||||||
|
|
||||||
|
Ce guide couvre la configuration initiale d'OpenWebUI après l'installation, de la création du compte à la mise en place de la mémoire persistante.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 1 : Premier accès à OpenWebUI
|
||||||
|
|
||||||
|
### 1.1 Créer le compte administrateur
|
||||||
|
|
||||||
|
1. Ouvrir `http://192.168.1.27:3000` dans un navigateur
|
||||||
|
2. Cliquer sur "Sign up"
|
||||||
|
3. Créer un compte avec :
|
||||||
|
- **Nom** : Folzo (ou votre nom)
|
||||||
|
- **Email** : votre email
|
||||||
|
- **Mot de passe** : mot de passe fort
|
||||||
|
|
||||||
|
**Note** : Le premier compte créé devient automatiquement administrateur.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 2 : Configuration des connexions
|
||||||
|
|
||||||
|
### 2.1 Connexion Ollama
|
||||||
|
|
||||||
|
**Admin Panel → Settings → Connections**
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| Ollama API URL | `http://192.168.1.27:3011` |
|
||||||
|
| Verify Ollama API | ✅ Cocher |
|
||||||
|
|
||||||
|
Cliquer sur **Save** puis **Verify**.
|
||||||
|
|
||||||
|
### 2.2 Configuration Audio
|
||||||
|
|
||||||
|
**Admin Panel → Settings → Audio**
|
||||||
|
|
||||||
|
#### Paramètres STT (Speech-to-Text)
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| STT Engine | `OpenAI` |
|
||||||
|
| STT OpenAI API URL | `http://192.168.1.11:8200/v1` |
|
||||||
|
| STT Model | `deepdml/faster-whisper-large-v3-turbo-ct2` |
|
||||||
|
| STT API Key | `anything` |
|
||||||
|
|
||||||
|
#### Paramètres TTS (Text-to-Speech)
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| TTS Engine | `OpenAI` |
|
||||||
|
| TTS OpenAI API URL | `http://192.168.1.11:8100/v1` |
|
||||||
|
| TTS Model | `tts-1` (Piper) ou `tts-1-hd` (XTTS) |
|
||||||
|
| TTS Voice | `alloy` |
|
||||||
|
|
||||||
|
Cliquer sur **Save**.
|
||||||
|
|
||||||
|
### 2.3 Configuration RAG (Documents)
|
||||||
|
|
||||||
|
**Admin Panel → Settings → Documents**
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| Embedding Model Engine | `Ollama` |
|
||||||
|
| Ollama Base URL | `http://192.168.1.27:3011` |
|
||||||
|
| Embedding Model | `bge-m3:latest` |
|
||||||
|
| Vector Database | `qdrant` |
|
||||||
|
| Qdrant URL | `http://qdrant:6333` |
|
||||||
|
|
||||||
|
Cliquer sur **Save**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 3 : Création du modèle Effi
|
||||||
|
|
||||||
|
### 3.1 Créer le modèle personnalisé
|
||||||
|
|
||||||
|
**Admin Panel → Models → + New Model**
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| Model Name | `Effi` |
|
||||||
|
| Base Model | `qwen2.5:14b` |
|
||||||
|
|
||||||
|
Dans le champ **System Prompt**, coller :
|
||||||
|
|
||||||
|
```
|
||||||
|
Tu es Effi, l'assistante IA locale de Folzo (Open WebUI + Ollama).
|
||||||
|
|
||||||
|
## Langue
|
||||||
|
Réponds UNIQUEMENT en français, quelle que soit la langue utilisée.
|
||||||
|
|
||||||
|
## Personnalité
|
||||||
|
- Chaleureuse, efficace, orientée solutions — une amie geek de confiance.
|
||||||
|
- Humour fin : 0 à 1 vanne max par réponse, jamais forcée.
|
||||||
|
- Ton conversationnel IRL, phrases courtes, pas de pavés.
|
||||||
|
|
||||||
|
## Priorités
|
||||||
|
1. Répondre à la demande directement et clairement.
|
||||||
|
2. Ajouter un conseil ou alternative si pertinent.
|
||||||
|
3. Si ambigu → 1 à 3 questions courtes avant de proposer une solution.
|
||||||
|
|
||||||
|
## Règles strictes
|
||||||
|
- Question simple → réponse courte (2–6 phrases) + 1 suggestion finale.
|
||||||
|
- Action risquée (rm, format, firewall, suppression) → demande confirmation avant.
|
||||||
|
- Ne sur-parle pas, pas de répétitions inutiles.
|
||||||
|
|
||||||
|
## Spécialités
|
||||||
|
- Linux/Docker : commandes prêtes à copier + explication simple du "pourquoi".
|
||||||
|
- Débogage : étape par étape, checks rapides d'abord.
|
||||||
|
- Écriture : corrige en gardant le style de Folzo.
|
||||||
|
|
||||||
|
## Prise de notes
|
||||||
|
Folzo utilise Obsidian. Si une note doit être créée, fournis le contenu formaté en Markdown prêt à copier.
|
||||||
|
|
||||||
|
## Mémoire
|
||||||
|
N'invente pas de souvenirs. Les infos sur Folzo sont injectées automatiquement ci-dessous.
|
||||||
|
<memory_user_context></memory_user_context>
|
||||||
|
```
|
||||||
|
|
||||||
|
Cliquer sur **Save**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 4 : Installation des filtres de mémoire
|
||||||
|
|
||||||
|
### 4.1 Installation d'Auto Memory
|
||||||
|
|
||||||
|
**Admin Panel → Functions → Discover**
|
||||||
|
|
||||||
|
1. Rechercher **"Auto Memory"** par **nokodo**
|
||||||
|
2. Cliquer sur **Install**
|
||||||
|
|
||||||
|
### 4.2 Configuration d'Auto Memory
|
||||||
|
|
||||||
|
**Admin Panel → Functions → Auto Memory → ⚙️ (Settings)**
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| OpenAI API URL | `http://192.168.1.27:3011/v1` |
|
||||||
|
| Model | `qwen2.5:3b` |
|
||||||
|
| API Key | `toto` |
|
||||||
|
| Messages To Consider | `10` |
|
||||||
|
| Related Memories N | `5` |
|
||||||
|
| Minimum Memory Similarity | `0.7` |
|
||||||
|
| Override Memory Context | `OFF` |
|
||||||
|
| Debug Mode | `OFF` |
|
||||||
|
|
||||||
|
**Activation** : Admin Panel → Functions → Auto Memory → ⋯ → Toggle Global → **ON**
|
||||||
|
|
||||||
|
### 4.3 Patch du code Auto Memory
|
||||||
|
|
||||||
|
Le filtre a besoin d'un patch pour gérer correctement les réponses JSON.
|
||||||
|
|
||||||
|
**Admin Panel → Functions → Auto Memory → ⋯ → Edit**
|
||||||
|
|
||||||
|
1. Chercher : `text_response = response.choices[0].message.content`
|
||||||
|
2. Remplacer le bloc `if response_model:` par :
|
||||||
|
|
||||||
|
```python
|
||||||
|
if response_model:
|
||||||
|
try:
|
||||||
|
cleaned = re.sub(r'```(?:json)?\s*', '', text_response)
|
||||||
|
cleaned = re.sub(r'```\s*', '', cleaned).strip()
|
||||||
|
match = re.search(r'\{.*\}', cleaned, re.DOTALL)
|
||||||
|
if match:
|
||||||
|
cleaned = match.group(0)
|
||||||
|
return response_model.model_validate_json(cleaned)
|
||||||
|
except ValidationError as e:
|
||||||
|
self.log(f"response model validation error: {e}", level="warning")
|
||||||
|
raise
|
||||||
|
return text_response
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Chercher `UNIFIED_SYSTEM_PROMPT` et ajouter au début :
|
||||||
|
|
||||||
|
```python
|
||||||
|
UNIFIED_SYSTEM_PROMPT = """IMPORTANT: Respond with ONLY valid JSON. No markdown formatting, no code blocks, no explanation text. Start your response directly with { and end with }. """ + UNIFIED_SYSTEM_PROMPT
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Cliquer sur **Save**
|
||||||
|
|
||||||
|
### 4.4 Installation de Memory Injection Filter
|
||||||
|
|
||||||
|
**Admin Panel → Functions → Discover**
|
||||||
|
|
||||||
|
1. Rechercher **"Memory Injection Filter"** par **Raphael**
|
||||||
|
2. Cliquer sur **Install**
|
||||||
|
|
||||||
|
### 4.5 Configuration de Memory Injection
|
||||||
|
|
||||||
|
**Admin Panel → Functions → Memory Injection Filter → ⚙️**
|
||||||
|
|
||||||
|
| Paramètre | Valeur |
|
||||||
|
|-----------|--------|
|
||||||
|
| PREPENDING_TEXT | `Voici les souvenirs à long terme de l'utilisateur :` |
|
||||||
|
| SHOW_MEMORY_COUNT_EMITTER | `ON` |
|
||||||
|
|
||||||
|
**Activation** : Admin Panel → Functions → Memory Injection Filter → ⋯ → Toggle Global → **ON**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 5 : Tests de fonctionnement
|
||||||
|
|
||||||
|
### 5.1 Test de conversation basique
|
||||||
|
|
||||||
|
1. Créer un nouveau chat
|
||||||
|
2. Sélectionner le modèle **Effi**
|
||||||
|
3. Envoyer : `Bonjour Effi, comment vas-tu ?`
|
||||||
|
|
||||||
|
→ Effi devrait répondre en français avec sa personnalité configurée.
|
||||||
|
|
||||||
|
### 5.2 Test de mémoire
|
||||||
|
|
||||||
|
**Test d'enregistrement :**
|
||||||
|
```
|
||||||
|
Je collectionne les vinyles des années 80
|
||||||
|
```
|
||||||
|
|
||||||
|
Vérifier dans la base SQLite :
|
||||||
|
```bash
|
||||||
|
docker cp open-webui:/app/backend/data/webui.db /tmp/webui.db
|
||||||
|
sqlite3 /tmp/webui.db "SELECT content FROM memory ORDER BY created_at DESC LIMIT 3;"
|
||||||
|
```
|
||||||
|
|
||||||
|
→ Le souvenir devrait apparaître.
|
||||||
|
|
||||||
|
**Test de restitution :**
|
||||||
|
1. Créer un **nouveau chat** (important !)
|
||||||
|
2. Demander : `Qu'est-ce que tu sais sur mes hobbies ?`
|
||||||
|
|
||||||
|
→ Effi devrait mentionner les vinyles sans que vous l'ayez redit.
|
||||||
|
|
||||||
|
### 5.3 Test audio (si configuré)
|
||||||
|
|
||||||
|
**Test STT :**
|
||||||
|
- Cliquer sur l'icône micro dans OpenWebUI
|
||||||
|
- Parler : "Bonjour Effi"
|
||||||
|
- Vérifier que le texte est transcrit
|
||||||
|
|
||||||
|
**Test TTS :**
|
||||||
|
- Activer la lecture vocale dans les paramètres du chat
|
||||||
|
- Envoyer un message
|
||||||
|
- Vérifier que la réponse est lue à voix haute
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 6 : Configuration Obsidian LiveSync
|
||||||
|
|
||||||
|
### 6.1 Préparer CouchDB
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Vérifier que CouchDB fonctionne
|
||||||
|
curl http://192.168.1.27:5984
|
||||||
|
|
||||||
|
# Les bases devraient déjà être créées lors de l'installation
|
||||||
|
# Si ce n'est pas le cas :
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6.2 Configurer Obsidian
|
||||||
|
|
||||||
|
Dans l'application Obsidian :
|
||||||
|
|
||||||
|
1. **Paramètres → Communauté → Parcourir**
|
||||||
|
2. Installer le plugin **Self-hosted LiveSync**
|
||||||
|
3. Ouvrir les paramètres du plugin
|
||||||
|
4. Configurer :
|
||||||
|
- **URI** : `http://192.168.1.27:5984`
|
||||||
|
- **Database** : `obsidian-livesync`
|
||||||
|
- **Username** : `master`
|
||||||
|
- **Password** : [votre mot de passe CouchDB]
|
||||||
|
5. Cliquer sur **Test**
|
||||||
|
6. Si OK, cliquer sur **Apply**
|
||||||
|
7. Activer la synchronisation
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Étape 7 : Optimisations
|
||||||
|
|
||||||
|
### 7.1 Activer les mémoires globales
|
||||||
|
|
||||||
|
**Admin Panel → Settings → General**
|
||||||
|
|
||||||
|
- **Memories** : ✅ ON
|
||||||
|
- **Memory Mode** : `User` ou `Global`
|
||||||
|
|
||||||
|
### 7.2 Configuration des modèles par défaut
|
||||||
|
|
||||||
|
**Admin Panel → Settings → Interface**
|
||||||
|
|
||||||
|
- **Default Model** : `Effi`
|
||||||
|
- **Default Language** : `fr-FR`
|
||||||
|
|
||||||
|
### 7.3 Personnalisation de l'interface
|
||||||
|
|
||||||
|
**Admin Panel → Settings → Interface**
|
||||||
|
|
||||||
|
- Changer le thème (clair/sombre)
|
||||||
|
- Configurer les raccourcis
|
||||||
|
- Personnaliser le logo et les couleurs
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Félicitations !
|
||||||
|
|
||||||
|
Effi est maintenant complètement configuré et prêt à l'emploi !
|
||||||
|
|
||||||
|
### Prochaines étapes suggérées :
|
||||||
|
|
||||||
|
1. **Explorer n8n** : Créer des workflows d'automatisation
|
||||||
|
2. **Configurer le RAG** : Uploader des documents pour enrichir les réponses
|
||||||
|
3. **Personnaliser davantage** : Ajuster le system prompt selon vos préférences
|
||||||
|
4. **Documentation** : Noter vos configurations dans Obsidian
|
||||||
|
|
||||||
|
### En cas de problème :
|
||||||
|
|
||||||
|
Consulter la section [Dépannage](../04-depannage/) pour les erreurs courantes et leurs solutions.
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
# 🔧 Dépannage - Index
|
||||||
|
|
||||||
|
## Vue d'ensemble
|
||||||
|
|
||||||
|
Cette section regroupe les problèmes courants rencontrés avec Effi et leurs solutions.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Problèmes par catégorie
|
||||||
|
|
||||||
|
### 🖥️ [GPU AMD ROCm](./rocm-amd-gpu.md)
|
||||||
|
- `hipErrorInvalidDeviceFunction`
|
||||||
|
- `float16 not supported on CPU backend`
|
||||||
|
- Build CTranslate2 pour gfx1100
|
||||||
|
- ROCm non détecté
|
||||||
|
|
||||||
|
### 🌐 [Réseau et Ports](./reseau-et-ports.md)
|
||||||
|
- Conflits de ports
|
||||||
|
- Wake-on-LAN non fonctionnel
|
||||||
|
- Interface réseau qui tombe
|
||||||
|
- Erreurs de connexion entre machines
|
||||||
|
|
||||||
|
### 💾 Mémoire et Stockage
|
||||||
|
- Souvenirs qui ne s'enregistrent pas
|
||||||
|
- Souvenirs non injectés
|
||||||
|
- Erreurs SQLite
|
||||||
|
- Base CouchDB inaccessible
|
||||||
|
|
||||||
|
### 🐳 Docker
|
||||||
|
- Conteneurs qui redémarrent en boucle
|
||||||
|
- Erreurs de permissions
|
||||||
|
- Volumes non persistants
|
||||||
|
- Images qui ne buildent pas
|
||||||
|
|
||||||
|
### 🎤 Audio
|
||||||
|
- STT qui ne répond pas
|
||||||
|
- TTS silencieux
|
||||||
|
- Latence excessive
|
||||||
|
- Erreurs de transcription
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Diagnostic rapide
|
||||||
|
|
||||||
|
### Commandes de base
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Vérifier l'état des conteneurs
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
# Voir les logs d'un service
|
||||||
|
docker compose logs [service]
|
||||||
|
|
||||||
|
# Vérifier l'utilisation des ressources
|
||||||
|
docker stats
|
||||||
|
|
||||||
|
# Tester les connexions réseau
|
||||||
|
curl http://192.168.1.27:3000 # OpenWebUI
|
||||||
|
curl http://192.168.1.11:11434/api/tags # Ollama
|
||||||
|
curl http://192.168.1.11:8200/v1/models # STT
|
||||||
|
curl http://192.168.1.11:8100/v1/models # TTS
|
||||||
|
```
|
||||||
|
|
||||||
|
### Logs importants
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Logs OpenWebUI (problèmes généraux)
|
||||||
|
docker logs open-webui --tail 100
|
||||||
|
|
||||||
|
# Logs avec filtre mémoire
|
||||||
|
docker logs open-webui --tail 50 | grep -iE "memory|saved|added"
|
||||||
|
|
||||||
|
# Logs speaches (STT)
|
||||||
|
docker logs speaches-stt
|
||||||
|
|
||||||
|
# Logs wol-proxy
|
||||||
|
docker logs wol-proxy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Checklist de diagnostic
|
||||||
|
|
||||||
|
### Problème : Effi ne répond pas
|
||||||
|
|
||||||
|
- [ ] OpenWebUI est-il démarré ? `docker ps | grep open-webui`
|
||||||
|
- [ ] Ollama est-il accessible ? `curl http://192.168.1.11:11434/api/tags`
|
||||||
|
- [ ] Le PC Gaming est-il allumé ?
|
||||||
|
- [ ] Le wol-proxy fonctionne-t-il ? `docker logs wol-proxy`
|
||||||
|
|
||||||
|
### Problème : La mémoire ne fonctionne pas
|
||||||
|
|
||||||
|
- [ ] Auto Memory est-il activé globalement ?
|
||||||
|
- [ ] Memory Injection est-il activé globalement ?
|
||||||
|
- [ ] Le modèle qwen2.5:3b est-il disponible ?
|
||||||
|
- [ ] Y a-t-il des erreurs dans les logs ? `docker logs open-webui | grep -i memory`
|
||||||
|
|
||||||
|
### Problème : L'audio ne fonctionne pas
|
||||||
|
|
||||||
|
- [ ] speaches est-il démarré ? `docker ps | grep speaches`
|
||||||
|
- [ ] openedai-speech est-il démarré ?
|
||||||
|
- [ ] Les URLs dans OpenWebUI sont-elles correctes ?
|
||||||
|
- [ ] Test manuel : `curl http://192.168.1.11:8200/v1/models`
|
||||||
|
|
||||||
|
### Problème : ROCm/GPU
|
||||||
|
|
||||||
|
- [ ] ROCm est-il installé ? `rocm-smi --showproductname`
|
||||||
|
- [ ] La carte est-elle détectée ? `rocminfo | grep gfx`
|
||||||
|
- [ ] Les conteneurs utilisent-ils les bons devices ?
|
||||||
|
- [ ] L'architecture gfx est-elle correcte ?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ressources externes
|
||||||
|
|
||||||
|
- [Documentation OpenWebUI](https://docs.openwebui.com/)
|
||||||
|
- [Documentation Ollama](https://github.com/ollama/ollama/blob/main/docs/README.md)
|
||||||
|
- [Documentation ROCm AMD](https://docs.amd.com)
|
||||||
|
- [Documentation Qdrant](https://qdrant.tech/documentation/)
|
||||||
@@ -0,0 +1,256 @@
|
|||||||
|
# 🌐 Dépannage Réseau et Ports
|
||||||
|
|
||||||
|
## Conflits de ports
|
||||||
|
|
||||||
|
### Symptôme : `bind: address already in use`
|
||||||
|
|
||||||
|
**Erreur :**
|
||||||
|
```
|
||||||
|
Error starting userland proxy: listen tcp 0.0.0.0:8200: bind: address already in use
|
||||||
|
```
|
||||||
|
|
||||||
|
**Diagnostic :**
|
||||||
|
```bash
|
||||||
|
# Trouver quel processus utilise le port
|
||||||
|
sudo ss -tlnp | grep 8200
|
||||||
|
# ou
|
||||||
|
sudo lsof -i :8200
|
||||||
|
|
||||||
|
# Voir tous les ports utilisés
|
||||||
|
sudo ss -tlnp
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solutions :**
|
||||||
|
|
||||||
|
1. **Changer le port dans docker-compose.yml :**
|
||||||
|
```yaml
|
||||||
|
ports:
|
||||||
|
- "8201:8000" # Au lieu de 8200:8000
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Ou arrêter le processus existant :**
|
||||||
|
```bash
|
||||||
|
sudo kill -9 <PID>
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Wake-on-LAN (WOL) non fonctionnel
|
||||||
|
|
||||||
|
### Diagnostic
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Vérifier que wol-proxy est configuré
|
||||||
|
docker logs wol-proxy | tail -20
|
||||||
|
|
||||||
|
# Tester le WoL manuellement
|
||||||
|
sudo apt install wakeonlan
|
||||||
|
wakeonlan XX:XX:XX:XX:XX:XX # MAC de folzo-Corp
|
||||||
|
|
||||||
|
# Vérifier que la carte réseau supporte WoL
|
||||||
|
ethtool enp3s0 | grep -i wake
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration wol-proxy
|
||||||
|
|
||||||
|
**Vérifier les variables dans `.env` :**
|
||||||
|
```bash
|
||||||
|
OLLAMA_HOST=192.168.1.11
|
||||||
|
PC_GAMING_MAC=XX:XX:XX:XX:XX:XX
|
||||||
|
BROADCAST_IP=192.168.1.255
|
||||||
|
```
|
||||||
|
|
||||||
|
### Activer WoL sur le PC Gaming (folzo-Corp)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Sur Bazzite/Fedora
|
||||||
|
sudo ethtool -s enp3s0 wol g
|
||||||
|
|
||||||
|
# Rendre permanent
|
||||||
|
echo 'ACTION=="add", SUBSYSTEM=="net", NAME=="enp3s0", RUN+="/usr/sbin/ethtool -s enp3s0 wol g"' | \
|
||||||
|
sudo tee /etc/udev/rules.d/99-wol.rules
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Interface réseau qui tombe (effi-server)
|
||||||
|
|
||||||
|
### Symptôme : effi-server inaccessible après reboot
|
||||||
|
|
||||||
|
**Cause :** Problème de carte réseau Intel i225/i226 avec power saving
|
||||||
|
|
||||||
|
**Solution immédiate :**
|
||||||
|
```bash
|
||||||
|
sudo systemctl restart NetworkManager
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solution permanente :**
|
||||||
|
```bash
|
||||||
|
# Désactiver le power saving
|
||||||
|
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
|
||||||
|
|
||||||
|
# Recharger les règles
|
||||||
|
sudo udevadm control --reload-rules
|
||||||
|
sudo udevadm trigger
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Conflit DHCP - Deux machines avec même IP
|
||||||
|
|
||||||
|
### Symptôme : `conflict detected for IP address`
|
||||||
|
|
||||||
|
**Diagnostic :**
|
||||||
|
```bash
|
||||||
|
# Sur effi-server
|
||||||
|
ip addr show
|
||||||
|
# Vérifier si l'IP est correcte
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solution temporaire :**
|
||||||
|
```bash
|
||||||
|
# Renouveler le bail DHCP
|
||||||
|
sudo nmcli device disconnect enp6s0
|
||||||
|
sudo nmcli device connect enp6s0
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solution permanente :**
|
||||||
|
- Configurer des réservations DHCP par MAC sur le routeur
|
||||||
|
- Ou configurer des IPs statiques
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Erreurs de connexion entre machines
|
||||||
|
|
||||||
|
### Ollama inaccessible depuis effi-server
|
||||||
|
|
||||||
|
**Diagnostic :**
|
||||||
|
```bash
|
||||||
|
# Depuis effi-server
|
||||||
|
curl http://192.168.1.11:11434/api/tags
|
||||||
|
|
||||||
|
# Vérifier que Ollama écoute sur 0.0.0.0
|
||||||
|
# Sur folzo-Corp :
|
||||||
|
sudo ss -tlnp | grep 11434
|
||||||
|
# Devrait afficher 0.0.0.0:11434, pas 127.0.0.1:11434
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solution :** Configurer Ollama pour écouter sur toutes les interfaces :
|
||||||
|
```bash
|
||||||
|
# Sur folzo-Corp
|
||||||
|
sudo systemctl edit ollama.service
|
||||||
|
```
|
||||||
|
|
||||||
|
Ajouter :
|
||||||
|
```ini
|
||||||
|
[Service]
|
||||||
|
Environment="OLLAMA_HOST=0.0.0.0:11434"
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl daemon-reload
|
||||||
|
sudo systemctl restart ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Firewall et pare-feu
|
||||||
|
|
||||||
|
### Ouvrir les ports sur folzo-Corp (Fedora/Bazzite)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Ouvrir les ports pour STT et TTS
|
||||||
|
sudo firewall-cmd --add-port=8200/tcp --permanent # speaches
|
||||||
|
sudo firewall-cmd --add-port=8100/tcp --permanent # openedai-speech
|
||||||
|
sudo firewall-cmd --add-port=11434/tcp --permanent # Ollama
|
||||||
|
sudo firewall-cmd --reload
|
||||||
|
```
|
||||||
|
|
||||||
|
### Ouvrir les ports sur effi-server (Ubuntu)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Avec UFW
|
||||||
|
sudo ufw allow 3000/tcp # OpenWebUI
|
||||||
|
sudo ufw allow 5678/tcp # n8n
|
||||||
|
sudo ufw allow 5984/tcp # CouchDB
|
||||||
|
sudo ufw allow 6333/tcp # Qdrant
|
||||||
|
sudo ufw allow 8000/tcp # mcpo
|
||||||
|
sudo ufw reload
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Erreur 500 / Connection refused
|
||||||
|
|
||||||
|
### OpenWebUI : "Server Connection Error"
|
||||||
|
|
||||||
|
**Diagnostic :**
|
||||||
|
```bash
|
||||||
|
# Voir les logs
|
||||||
|
docker logs open-webui | grep -i "error\|connection"
|
||||||
|
|
||||||
|
# Vérifier si Ollama répond
|
||||||
|
curl http://192.168.1.27:3011/v1/models
|
||||||
|
```
|
||||||
|
|
||||||
|
**Causes possibles :**
|
||||||
|
1. PC Gaming éteint → WoL devrait le réveiller
|
||||||
|
2. wol-proxy mal configuré
|
||||||
|
3. Ollama planté sur folzo-Corp
|
||||||
|
|
||||||
|
**Solutions :**
|
||||||
|
```bash
|
||||||
|
# Redémarrer wol-proxy
|
||||||
|
docker restart wol-proxy
|
||||||
|
|
||||||
|
# Sur folzo-Corp, vérifier Ollama
|
||||||
|
sudo systemctl status ollama
|
||||||
|
sudo systemctl restart ollama
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Latence réseau élevée
|
||||||
|
|
||||||
|
### Test de connectivité
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Ping entre les machines
|
||||||
|
ping 192.168.1.11
|
||||||
|
|
||||||
|
# Test de bande passante
|
||||||
|
iperf3 -s # Sur serveur
|
||||||
|
iperf3 -c 192.168.1.27 # Sur client
|
||||||
|
|
||||||
|
# Vérifier les erreurs réseau
|
||||||
|
ifconfig | grep -i error
|
||||||
|
```
|
||||||
|
|
||||||
|
### Optimisations
|
||||||
|
|
||||||
|
1. **Utiliser des IPs fixes** : Éviter les délais DHCP
|
||||||
|
2. **Câblage Ethernet** : Préférer le filaire au WiFi
|
||||||
|
3. **MTU** : Vérifier la taille des paquets
|
||||||
|
```bash
|
||||||
|
ping -M do -s 1472 192.168.1.11
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Tableau des ports utilisés
|
||||||
|
|
||||||
|
| Port | Service | Machine | Protocole |
|
||||||
|
|------|---------|---------|-----------|
|
||||||
|
| 3000 | Open WebUI | effi-server | TCP |
|
||||||
|
| 3011 | wol-proxy | effi-server | TCP |
|
||||||
|
| 3100 | Obsidian | effi-server | TCP |
|
||||||
|
| 5678 | n8n | effi-server | TCP |
|
||||||
|
| 5984 | CouchDB | effi-server | TCP |
|
||||||
|
| 6333 | Qdrant HTTP | effi-server | TCP |
|
||||||
|
| 6334 | Qdrant gRPC | effi-server | TCP |
|
||||||
|
| 8000 | mcpo | effi-server | TCP |
|
||||||
|
| 8100 | openedai-speech | folzo-Corp | TCP |
|
||||||
|
| 8200 | speaches | folzo-Corp | TCP |
|
||||||
|
| 9099 | pipelines | effi-server | TCP |
|
||||||
|
| 11434 | Ollama | folzo-Corp | TCP |
|
||||||
@@ -0,0 +1,213 @@
|
|||||||
|
# 🎮 Dépannage GPU AMD ROCm
|
||||||
|
|
||||||
|
## Erreurs courantes
|
||||||
|
|
||||||
|
### `hipErrorInvalidDeviceFunction`
|
||||||
|
|
||||||
|
**Symptôme :**
|
||||||
|
```
|
||||||
|
RuntimeError: parallel_for failed: hipErrorInvalidDeviceFunction: invalid device function
|
||||||
|
```
|
||||||
|
|
||||||
|
**Cause :** Le build ROCm a été compilé pour une mauvaise architecture GPU.
|
||||||
|
|
||||||
|
**Solution :**
|
||||||
|
1. Vérifier l'architecture de votre GPU :
|
||||||
|
```bash
|
||||||
|
rocminfo | grep gfx
|
||||||
|
# ou
|
||||||
|
docker run --device /dev/kfd --device /dev/dri \
|
||||||
|
-e HSA_OVERRIDE_GFX_VERSION=11.0.0 rocm/dev-ubuntu-24.04:6.3.4-complete \
|
||||||
|
/opt/rocm-6.3.4/bin/rocminfo | grep -E "gfx|Name"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Modifier le Dockerfile pour votre architecture :
|
||||||
|
```bash
|
||||||
|
cd ~/speaches/src
|
||||||
|
sed -i 's/gfx1101/gfx1100/g' Dockerfile.rocm-ct2
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Rebuilder l'image :
|
||||||
|
```bash
|
||||||
|
docker build -f Dockerfile.rocm-ct2 -t speaches:rocm-ct2 .
|
||||||
|
```
|
||||||
|
|
||||||
|
**Architectures courantes :**
|
||||||
|
- RX 7800 XT / 7900 XTX : `gfx1100`
|
||||||
|
- RX 7700 XT : `gfx1101`
|
||||||
|
- RX 6000 series : `gfx1030`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `float16 not supported on CPU backend`
|
||||||
|
|
||||||
|
**Symptôme :**
|
||||||
|
```
|
||||||
|
ValueError: float16 not supported on CPU backend
|
||||||
|
```
|
||||||
|
|
||||||
|
**Cause :** Whisper essaie d'utiliser float16 sur CPU (mode fallback).
|
||||||
|
|
||||||
|
**Solution :** Changer le compute type :
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
- WHISPER__COMPUTE_TYPE=int8 # ou float32
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `Conv1D on GPU currently requires the cuDNN library`
|
||||||
|
|
||||||
|
**Symptôme :**
|
||||||
|
```
|
||||||
|
RuntimeError: Conv1D on GPU currently requires the cuDNN library which is not integrated in this build
|
||||||
|
```
|
||||||
|
|
||||||
|
**Cause :** CTranslate2 ROCm compilé sans support MIOpen (équivalent cuDNN).
|
||||||
|
|
||||||
|
**Solution :** Ajouter MIOpen dans le Dockerfile :
|
||||||
|
```dockerfile
|
||||||
|
# Dans Dockerfile.rocm-ct2
|
||||||
|
RUN cmake ... \
|
||||||
|
-DWITH_CUDNN=ON \
|
||||||
|
-DCUDnn_LIBRARY=/opt/rocm-6.3.4/lib/libMIOpen.so
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### `Unable to find group render`
|
||||||
|
|
||||||
|
**Symptôme :**
|
||||||
|
```
|
||||||
|
Unable to find group render: no matching entries in group file
|
||||||
|
```
|
||||||
|
|
||||||
|
**Cause :** Les noms de groupes ne sont pas reconnus dans le conteneur.
|
||||||
|
|
||||||
|
**Solution :** Utiliser les GID numériques :
|
||||||
|
```yaml
|
||||||
|
group_add:
|
||||||
|
- "44" # GID video
|
||||||
|
- "991" # GID render
|
||||||
|
```
|
||||||
|
|
||||||
|
**Trouver les GID :**
|
||||||
|
```bash
|
||||||
|
cat /etc/group | grep -E "video|render"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### ROCm non détecté
|
||||||
|
|
||||||
|
**Symptôme :** `rocm-smi` ne trouve pas de GPU
|
||||||
|
|
||||||
|
**Diagnostic :**
|
||||||
|
```bash
|
||||||
|
# Vérifier que le kernel voit le GPU
|
||||||
|
lspci | grep -i vga
|
||||||
|
|
||||||
|
# Vérifier les modules kernel
|
||||||
|
lsmod | grep amdgpu
|
||||||
|
|
||||||
|
# Vérifier les devices
|
||||||
|
ls -la /dev/kfd /dev/dri
|
||||||
|
```
|
||||||
|
|
||||||
|
**Solutions :**
|
||||||
|
|
||||||
|
1. **Installer ROCm :**
|
||||||
|
```bash
|
||||||
|
# Sur Fedora/Bazzite
|
||||||
|
sudo dnf install -y rocm-dev rocm-smi
|
||||||
|
|
||||||
|
# Sur Ubuntu
|
||||||
|
sudo apt install -y rocm-dev
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Ajouter l'utilisateur au groupe video :**
|
||||||
|
```bash
|
||||||
|
sudo usermod -aG video $USER
|
||||||
|
sudo usermod -aG render $USER
|
||||||
|
# Déconnexion/reconnexion nécessaire
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Vérifier les permissions :**
|
||||||
|
```bash
|
||||||
|
ls -la /dev/kfd
|
||||||
|
# Doit être accessible au groupe video
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Faible performance GPU
|
||||||
|
|
||||||
|
**Symptôme :** La transcription prend toujours 10s+ malgré ROCm
|
||||||
|
|
||||||
|
**Diagnostic :**
|
||||||
|
```bash
|
||||||
|
# Vérifier l'utilisation GPU
|
||||||
|
rocm-smi
|
||||||
|
|
||||||
|
# Voir si ROCm est vraiment utilisé
|
||||||
|
docker logs speaches-stt | grep -i "rocm\|cuda\|gpu"
|
||||||
|
|
||||||
|
# Vérifier les variables d'environnement
|
||||||
|
docker inspect speaches-stt | grep -i env
|
||||||
|
```
|
||||||
|
|
||||||
|
**Causes possibles :**
|
||||||
|
1. Mode CPU activé malgré ROCm
|
||||||
|
2. Conflit avec Ollama qui utilise tout le GPU
|
||||||
|
3. Modèle trop gros
|
||||||
|
|
||||||
|
**Solutions :**
|
||||||
|
```yaml
|
||||||
|
# Forcer le device GPU
|
||||||
|
environment:
|
||||||
|
- WHISPER__DEVICE=cuda # ou auto
|
||||||
|
|
||||||
|
# Réduire la charge GPU d'Ollama
|
||||||
|
# Dans Ollama, utiliser moins de couches GPU
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Build CTranslate2 ROCm complet
|
||||||
|
|
||||||
|
### Procédure détaillée
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Cloner le repo speaches
|
||||||
|
cd ~
|
||||||
|
git clone https://github.com/speaches-ai/speaches.git
|
||||||
|
cd speaches/src
|
||||||
|
|
||||||
|
# 2. Vérifier l'architecture GPU
|
||||||
|
rocminfo | grep gfx
|
||||||
|
|
||||||
|
# 3. Modifier le Dockerfile pour votre architecture
|
||||||
|
# Remplacer gfx1101 par votre architecture (ex: gfx1100)
|
||||||
|
sed -i 's/gfx1101/gfx1100/g' Dockerfile.rocm-ct2
|
||||||
|
|
||||||
|
# 4. Vérifier que MIOpen est activé
|
||||||
|
grep -i miopen Dockerfile.rocm-ct2
|
||||||
|
# Devrait contenir : -DWITH_CUDNN=ON
|
||||||
|
|
||||||
|
# 5. Build (prend 30-60 min)
|
||||||
|
docker build -f Dockerfile.rocm-ct2 -t speaches:rocm-ct2 .
|
||||||
|
|
||||||
|
# 6. Tester
|
||||||
|
docker run --rm --device /dev/kfd --device /dev/dri \
|
||||||
|
-e HSA_OVERRIDE_GFX_VERSION=11.0.0 \
|
||||||
|
speaches:rocm-ct2 \
|
||||||
|
python3 -c "import torch; print(torch.cuda.is_available())"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Ressources
|
||||||
|
|
||||||
|
- [CTranslate2 ROCm Fork](https://github.com/arlo-phoenix/CTranslate2-rocm)
|
||||||
|
- [AMD ROCm Documentation](https://docs.amd.com)
|
||||||
|
- [ROCm GPU Support List](https://rocm.docs.amd.com/en/latest/release/gpu_os_support.html)
|
||||||
@@ -0,0 +1,185 @@
|
|||||||
|
# 📓 Journal Historique
|
||||||
|
|
||||||
|
## Chronologie du projet Effi
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-02-19 : Installation de la stack initiale
|
||||||
|
|
||||||
|
**Machine :** effi-server (192.168.1.27)
|
||||||
|
|
||||||
|
**Services installés :**
|
||||||
|
- ✅ Open WebUI (port 3000)
|
||||||
|
- ✅ WOL Proxy (port 3011)
|
||||||
|
- ✅ Qdrant (port 6333)
|
||||||
|
- ✅ CouchDB (port 5984)
|
||||||
|
- ✅ n8n (port 5678)
|
||||||
|
- ✅ mcpo (port 8000)
|
||||||
|
|
||||||
|
**Statut :** Infrastructure opérationnelle
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-02-21 : Configuration ROCm et Whisper
|
||||||
|
|
||||||
|
**Machine :** folzo-Corp (192.168.1.11)
|
||||||
|
|
||||||
|
**Réalisations :**
|
||||||
|
- Installation ROCm sur Bazzite
|
||||||
|
- Recherche d'images Docker AMD
|
||||||
|
- Choix du modèle `bofenghuang/whisper-large-v3-french`
|
||||||
|
- Configuration OpenWebUI pour pointer vers STT
|
||||||
|
|
||||||
|
**Notes :** Projet de faire tourner Whisper sur GPU AMD
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2026-02-23 : Intégration MCP Obsidian
|
||||||
|
|
||||||
|
**Réalisations :**
|
||||||
|
- Intégration MCP Obsidian fonctionnelle
|
||||||
|
- Tests de synchronisation
|
||||||
|
- Configuration des outils MCP
|
||||||
|
|
||||||
|
**Projets futurs identifiés :**
|
||||||
|
- Intégration Home Assistant
|
||||||
|
- Workflows n8n pour domotique
|
||||||
|
- Commandes vocales
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mars 2026 : Migration et optimisations
|
||||||
|
|
||||||
|
### Migration STT/TTS vers folzo-Corp
|
||||||
|
|
||||||
|
**Motivation :** Réduire la charge CPU sur effi-server
|
||||||
|
|
||||||
|
**Actions :**
|
||||||
|
- Migration de openedai-speech vers folzo-Corp
|
||||||
|
- Build CTranslate2 ROCm pour speaches
|
||||||
|
- Configuration group_add avec GID numériques (44, 991)
|
||||||
|
- Firewall ports ouverts sur folzo-Corp
|
||||||
|
|
||||||
|
### Build CTranslate2 ROCm
|
||||||
|
|
||||||
|
**Problème rencontré :**
|
||||||
|
- `gfx1101` (dans Dockerfile) incompatible avec RX 7800 XT (`gfx1100`)
|
||||||
|
- `hipErrorInvalidDeviceFunction`
|
||||||
|
|
||||||
|
**Solution :**
|
||||||
|
```bash
|
||||||
|
sed -i 's/gfx1101/gfx1100/g' Dockerfile.rocm-ct2
|
||||||
|
docker build -f Dockerfile.rocm-ct2 -t speaches:rocm-ct2 .
|
||||||
|
```
|
||||||
|
|
||||||
|
**Statut :** Rebuild ROCm en cours, fonctionnement en CPU (int8) temporairement
|
||||||
|
|
||||||
|
### Configuration mémoire persistante
|
||||||
|
|
||||||
|
**Installation :**
|
||||||
|
- Filtre "Auto Memory" par nokodo
|
||||||
|
- Filtre "Memory Injection Filter" par Raphael
|
||||||
|
- Patch du code pour gestion JSON markdown
|
||||||
|
- Tests d'enregistrement et restitution réussis
|
||||||
|
|
||||||
|
### Problèmes résolus
|
||||||
|
|
||||||
|
1. **wol-proxy** : Build local depuis code Python maison
|
||||||
|
2. **Interface réseau** : Fix NetworkManager + udev rules
|
||||||
|
3. **Whisper** : Correction repo HuggingFace
|
||||||
|
4. **speaches** : Suppression PRELOAD_MODELS, utilisation speaches-init
|
||||||
|
5. **openedai-speech** : group_add avec GID numériques
|
||||||
|
6. **CTranslate2** : WHISPER__COMPUTE_TYPE=int8 en CPU
|
||||||
|
7. **mcpo** : Création config.json vide
|
||||||
|
8. **Open WebUI** : Ajout restart: unless-stopped à tous les services
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Avril 2026 : Documentation et organisation
|
||||||
|
|
||||||
|
**Actions :**
|
||||||
|
- Réorganisation complète de la documentation
|
||||||
|
- Création dépôt Git sur Gitea
|
||||||
|
- Structuration en sections logiques
|
||||||
|
- Fusion et nettoyage des notes dispersées
|
||||||
|
|
||||||
|
**Structure créée :**
|
||||||
|
```
|
||||||
|
effi/
|
||||||
|
├── README.md
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── .env.example
|
||||||
|
├── .gitignore
|
||||||
|
└── docs/
|
||||||
|
├── 01-architecture/
|
||||||
|
├── 02-configuration/
|
||||||
|
├── 03-guides/
|
||||||
|
├── 04-depannage/
|
||||||
|
└── 05-journal/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## État actuel (Avril 2026)
|
||||||
|
|
||||||
|
### Services opérationnels
|
||||||
|
|
||||||
|
| Service | Hôte | État |
|
||||||
|
|---------|------|------|
|
||||||
|
| Open WebUI | effi-server | ✅ Fonctionnel |
|
||||||
|
| Ollama | folzo-Corp | ✅ qwen2.5:14b |
|
||||||
|
| Qdrant | effi-server | ✅ Running |
|
||||||
|
| CouchDB | effi-server | ✅ Running |
|
||||||
|
| n8n | effi-server | ✅ Running |
|
||||||
|
| speaches | folzo-Corp | ✅ CPU (GPU pending) |
|
||||||
|
| openedai-speech | folzo-Corp | ✅ ROCm gfx1100 |
|
||||||
|
| wol-proxy | effi-server | ✅ Fonctionnel |
|
||||||
|
| mcpo | effi-server | ✅ Running |
|
||||||
|
| pipelines | effi-server | ✅ Running |
|
||||||
|
|
||||||
|
### Fonctionnalités actives
|
||||||
|
|
||||||
|
- ✅ Chat textuel avec mémoire persistante
|
||||||
|
- ✅ RAG avec Qdrant
|
||||||
|
- ✅ STT (Whisper CPU, ~10s/phrase)
|
||||||
|
- ✅ TTS (Piper FR, ~300ms)
|
||||||
|
- ✅ Sync Obsidian LiveSync
|
||||||
|
- ✅ Wake-on-LAN automatique
|
||||||
|
|
||||||
|
### En cours / À venir
|
||||||
|
|
||||||
|
- 🔧 Finaliser build speaches ROCm gfx1100
|
||||||
|
- 🔧 Configurer RAG avec fichiers Nextcloud
|
||||||
|
- 🔧 Workflows n8n avancés
|
||||||
|
- 🔧 Intégration Home Assistant
|
||||||
|
- 🔧 Voice control complet
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Leçons apprises
|
||||||
|
|
||||||
|
### Ce qui a bien fonctionné
|
||||||
|
|
||||||
|
1. **Architecture multi-machines** : Séparation logique CPU/GPU
|
||||||
|
2. **Docker Compose** : Gestion simplifiée des services
|
||||||
|
3. **Mémoire persistante** : Filtres OpenWebUI efficaces
|
||||||
|
4. **Wake-on-LAN** : Solution élégante pour économie d'énergie
|
||||||
|
|
||||||
|
### Difficultés rencontrées
|
||||||
|
|
||||||
|
1. **ROCm AMD** : Complexité du build, documentation dispersée
|
||||||
|
2. **Groupes Docker** : Nécessité d'utiliser GID vs noms
|
||||||
|
3. **Networking** : Conflits DHCP, interfaces qui tombent
|
||||||
|
4. **Documentation** : Notes dispersées, doublons
|
||||||
|
|
||||||
|
### Bonnes pratiques identifiées
|
||||||
|
|
||||||
|
1. Toujours utiliser `restart: unless-stopped`
|
||||||
|
2. Documenter les erreurs ET les solutions
|
||||||
|
3. Versionner les configurations
|
||||||
|
4. Sauvegarder avant toute modification majeure
|
||||||
|
5. Utiliser des IPs fixes ou réservations DHCP
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
*Dernière mise à jour : Avril 2026*
|
||||||
Reference in New Issue
Block a user