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,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.
|
||||
Reference in New Issue
Block a user