docs: Add complete project history from Perplexity archives

- Synthesize 8 Perplexity conversation files into comprehensive history
- Document technology choices: AFFiNE → SiYuan → Obsidian
- Detail encountered problems and solutions (MCP, TTS, STT, etc.)
- Current validated configuration with qwen3.5:9b
- Prioritized TODO list for next phases
- Key learnings and recommendations
This commit is contained in:
Folzo
2026-04-05 09:28:17 +02:00
parent ac176c2731
commit f90ae76b0c
+609
View File
@@ -0,0 +1,609 @@
# Historique Complet du Projet Effi
> **Document de synthèse** - Reprise de l'ensemble des conversations Perplexity sur le projet Effi
> **Date de création** : Avril 2026
> **Projet** : Effi - Assistante IA Personnelle Locale
---
## Table des Matières
1. [Origine du Projet](#origine-du-projet)
2. [Evolution de l'Infrastructure](#evolution-de-linfrastructure)
3. [Choix Technologiques Successifs](#choix-technologiques-successifs)
4. [Problèmes Rencontrés et Solutions](#problèmes-rencontrés-et-solutions)
5. [Configuration Actuelle Validée](#configuration-actuelle-validée)
6. [Besoins Identifiés et Priorisés](#besoins-identifiés-et-priorisés)
7. [Apprentissages Clés](#apprentissages-clés)
---
## Origine du Projet
### Vision Initiale (Février 2026)
Effi est né de la volonté de créer une **assistante IA personnelle 100% self-hosted**, en remplacement des solutions cloud (ChatGPT, Claude, etc.). Les objectifs initiaux étaient :
- **Interface** : Open WebUI comme orchestrateur central
- **Inférence LLM** : Ollama sur PC gaming (RX 7800 XT)
- **Prise de notes** : Base de connaissances persistante
- **Mémoire** : Retient les informations importantes entre sessions
- **Autonomie** : Capable de créer des notes spontanément
### Cahier des Charges v2.0
```yaml
Objectifs:
- Gérer automatiquement une base de connaissances personnelle
- Connaître parfaitement Folzo et son contexte (vie pro + perso)
- Prendre des initiatives autonomes (noter, corriger, enrichir, résumer)
- Recherche intelligente dans la mémoire avec compréhension sémantique
- Accessible partout (desktop + mobile) via reverse proxy sécurisé
Infrastructure:
PC Gaming: AMD Ryzen 5800X3D, 32GB RAM, AMD Radeon 7800XT 16GB VRAM
NAS Synology: Hébergement applications, reverse proxy configuré
```
---
## Evolution de l'Infrastructure
### Architecture Actuelle Validée
```
┌─────────────────────────────────────────────────────────────────┐
│ FRONTEND │
│ Open WebUI (effi-server:3000) │
│ ├─ Interface chat Effi │
│ ├─ Memory manuelle │
│ └─ RAG Qdrant │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ INFÉRENCE LLM │
│ WOL Proxy (effi-server:3011) │
│ └─► Ollama (folzo-Corp:11434) │
│ ├─ qwen3.5:9b (principal, 32K context) │
│ ├─ bge-m3 (embeddings) │
│ └─ RX 7800 XT 16GB VRAM │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ SERVICES COMPLÉMENTAIRES │
│ ├─ speaches-stt:8200 (Whisper large-v3-turbo) │
│ ├─ openedai-speech:8100 (TTS XTTS) │
│ ├─ qdrant:6333 (Vector DB RAG) │
│ ├─ n8n:5678 (Workflows automation) │
│ └─ Joplin Server (à venir) │
└─────────────────────────────────────────────────────────────────┘
```
### Historique des Changements d'Infrastructure
| Date | Changement | Motivation |
|------|------------|------------|
| Fév 2026 | Migration AFFiNE → SiYuan | AFFiNE trop SaaS-oriented, problèmes MCP |
| Fév 2026 | SiYuan → Obsidian | Besoin de Markdown pur, meilleur écosystème |
| Fév 2026 | Test mcpo + Obsidian | Tentative d'intégration MCP (échouée) |
| Mars 2026 | Suppression CouchDB | Simplification infrastructure |
| Mars 2026 | Suppression pipelines | Remplacement par solution mémoire manuelle |
| Avr 2026 | Suppression mcpo/obsidian | Trop complexe, pas assez fiable |
---
## Choix Technologiques Successifs
### 1. Application de Notes
#### AFFiNE (Testé → Abandonné)
**Pourquoi testé :**
- Interface moderne Notion-like
- MCP natif streamable-http
- Self-hosted avec Docker
**Pourquoi abandonné :**
- Format propriétaire (pas du Markdown pur)
- MCP self-hosted expérimental/non supporté officiellement
- Orienté SaaS, freemium agressif
- Problèmes de token d'accès en v0.26
**Citation Perplexity :**
> *"AFFiNE est conçu pour vendre son SaaS, le self-hosting est toléré mais pas prioritaire, et les fonctionnalités IA/API sont intentionnellement bridées pour pousser vers l'abonnement cloud."*
#### SiYuan (Utilisé temporairement)
**Points positifs :**
- Single container Docker (simple)
- Block-based editing puissant
- API REST complète
- MCP server disponible
**Points négatifs :**
- Stockage en `.sy` (JSON), pas Markdown natif
- Sync complexe
- Interface moins intuitive qu'Obsidian
**Citation Perplexity :**
> *"SiYuan est conçu exactement pour ce que tu veux faire : self-host-first par design."*
#### Obsidian (Choix Final)
**Pourquoi retenu :**
- ✅ Fichiers Markdown purs (futur-proof)
- ✅ Apps mobiles natives (iOS/Android)
- ✅ Écosystème plugins IA mature
- ✅ LiveSync + CouchDB pour sync self-hosted
- ✅ Graph view pour visualiser connexions
**Configuration :**
```yaml
Vault: /home/folzo/obsidian-vault
Sync: LiveSync plugin + CouchDB (futur)
MCP: obsidian-local-rest-api (abandonné)
```
### 2. Modèles LLM Testés
| Modèle | Statut | VRAM | Performances | Notes |
|--------|--------|------|--------------|-------|
| Ministral 14B | Testé | ~9GB | Rapide | Bon pour démarrer |
| qwen2.5:14b | Testé | ~9GB | Très bon | Meilleur function calling |
| qwen2.5:32b | Testé | ~15GB | Excellent | Trop lourd pour usage quotidien |
| **qwen3.5:9b** | **Retenu** | **~6GB** | **53 tokens/sec** | **Sweet spot vitesse/qualité** |
**Configuration qwen3.5:9b validée :**
```bash
ollama run qwen3.5:9b-instruct-q4_K_M
# Context: 32K tokens
# Temperature: 0.7
# Performance: ~53 tokens/sec sur RX 7800 XT
```
### 3. Solutions de Mémoire
#### Approche 1 : Open WebUI Memory Native
- Fonctionne mais très basique
- Snippets courts uniquement
- Pas de mémoire conversationnelle long terme
#### Approche 2 : mem0 + Qdrant (Testé → Abandonné)
- Installation complexe
- Nécessite pipeline Python
- Très lent (ajoute 5-10s par requête)
- Bugs de parsing avec Ollama
**Citation Perplexity :**
> *"mem0 semble ajouter une latence significative à chaque requête. Avec qwen2.5:14b sur une 7800 XT, l'expérience utilisateur devient frustrante."*
#### Approche 3 : Solution Manuelle (Retenue)
- Memory native Open WebUI (snippets importants)
- Prompt système enrichi
- RAG sur documents pertinents
- Plus rapide et prévisible
### 4. Speech-to-Text (STT)
#### Solutions Testées
**speaches + Whisper**
- Modèle : faster-whisper-large-v3-turbo
- Fonctionnement : CPU (int8) sur effi-server
- Performance : ~10-13s pour 5s d'audio
- Problème : Non optimisé GPU
**Tentative ROCm GPU (Échouée)**
- CTranslate2-rocm nécessite compilation
- Dockerfile complexe avec conflits clang
- Build échoué sur erreurs de compilation
**Citation Perplexity :**
> *"Le build CTranslate2-rocm est un processus complexe qui nécessite une configuration spécifique pour gfx1101 (RX 7800 XT). Les images précompilées ne sont pas disponibles."*
### 5. Text-to-Speech (TTS)
#### Configuration Validée
```yaml
Service: openedai-speech
Engine: XTTS v2 (tts-1-hd)
Voix: nova (clonée depuis WAV)
Hôte: folzo-Corp (192.168.1.11:8100)
GPU: ROCm activé
```
**Problème initial :**
- openedai-speech sur effi-server (Intel J5040) → CPU 100%
- Migration vers folzo-Corp nécessaire
**Configuration Open WebUI :**
```yaml
Admin Panel → Settings → Audio:
TTS Engine: OpenAI
TTS URL: http://192.168.1.11:8100/v1
TTS Model: tts-1-hd
TTS Voice: nova
```
---
## Problèmes Rencontrés et Solutions
### Problème 1 : MCP Obsidian - Connexion Refusée
**Symptôme :**
```
ERROR:mcp-obsidian:Request failed: HTTPSConnectionPool(host='127.0.0.1', port=27124)
```
**Cause :**
- `mcp-obsidian` a l'host hardcodé à `127.0.0.1` dans le code source
- Variable `OBSIDIAN_HOST` ignorée (bug connu)
**Tentatives :**
1. Configuration avec npx → Échec (npx non dispo dans container)
2. Patch du code source dans cache uvx → Fonctionne temporairement
3. Script de patch au démarrage → Échec (cache volatile)
**Solution finale :**
Abandon de MCP Obsidian, passage à une solution plus simple avec Joplin.
**Citations Perplexity :**
> *"Le patch dans `/root/.cache/uv/` disparaîtra au prochain restart du container car c'est un volume éphémère."*
> *"La variable `OBSIDIAN_HOST` est simplement ignorée par ce package — c'est un bug confirmé, pas un problème de config."*
### Problème 2 : Pipeline Vocal Lent
**Diagnostic :**
Le pipeline vocal empilait 4 processus lourds séquentiels :
| Composant | Modèle | CPU/GPU | VRAM |
|-----------|--------|---------|------|
| STT (speaches) | large-v3 | CPU 100% | — |
| LLM principal | qwen2.5:14b | GPU | ~8.5 GB |
| TTS (openedai-speech) | XTTS v2 | GPU | ~4 GB |
| mem0 mémoire | qwen2.5:14b | GPU | (séquentiel) |
**Fix #1 - STT :** `large-v3` → `large-v3-turbo`
- Même précision, 5x plus rapide
- `deepdml/faster-whisper-large-v3-turbo-ct2`
**Fix #2 - TTS :** XTTS → Piper (option)
- Libère 4 GB VRAM
- CPU uniquement, très rapide
**Fix #3 - Mémoire :** qwen2.5:14b → qwen2.5:3b
- Pour mémoire uniquement
- Libère 6 GB VRAM
### Problème 3 : Build ROCm Whisper Échoué
**Erreurs rencontrées :**
1. `clang++` non trouvé → Installation manuelle requise
2. Conflits libopencl-clang → Versions incompatibles
3. `gfx1101` vs `gfx1100` → Architecture GPU incorrecte
**Statut :** Abandonné temporairement, Whisper fonctionne en CPU.
### Problème 4 : Configurations Réseau
**Conflit DHCP :**
```
conflict detected for IP address 192.168.1.11 with host 5C:87:9C:65:95:23
```
**Solution :** Réservations DHCP par MAC sur le routeur.
**Interface réseau effi-server :**
- Carte Realtek RTL8111 qui plantait
- Fix : `ethtool -s enp6s0 wol g`
### Problème 5 : Gestion des Permissions Synology
**Problème :**
Les containers Docker sur Synology ont des problèmes de permissions avec les volumes.
**Solution :**
```bash
# Récupérer PUID/PGID
id Master
# → uid=1026(Master) gid=100(users)
# Appliquer permissions
chmod -R 777 /volume2/docker-REC/siyuan
chown -R 1026:100 /volume2/docker-REC/siyuan
```
---
## Configuration Actuelle Validée
### Services Docker (effi-server)
```yaml
version: "3.8"
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://192.168.1.11:3011
- WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY}
- ENABLE_RAG=true
- RAG_EMBEDDING_MODEL=bge-m3:latest
- RAG_EMBEDDING_ENGINE=ollama
- RAG_OLLAMA_BASE_URL=http://192.168.1.11:11434
volumes:
- ./open-webui-data:/app/backend/data
restart: unless-stopped
qdrant:
image: qdrant/qdrant
container_name: qdrant
ports:
- "6333:6333"
volumes:
- ./qdrant-data:/qdrant/storage
restart: unless-stopped
n8n:
image: n8nio/n8n
container_name: n8n
ports:
- "5678:5678"
volumes:
- ./n8n-data:/home/node/.n8n
environment:
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
restart: unless-stopped
# Services TTS/STT sur folzo-Corp (voir docker-compose séparé)
```
### Configuration Open WebUI
**Modèle Principal :**
```yaml
Nom: Effi (qwen3.5:9b)
Modèle de base: qwen3.5:9b-instruct-q4_K_M
Context Length: 32768
Temperature: 0.7
Top P: 0.9
```
**Capabilities activées :**
- ✅ Mémoire (snippets manuels)
- ✅ Chat History
- ✅ Base de connaissances (Qdrant)
- ✅ Vision (pour captures d'écran)
- ✅ Téléversement fichier
- ✅ Recherche Web (DuckDuckGo)
**Prompt Système Effi (v2.0) :**
```
Tu es Effi, l'assistante IA locale de Folzo.
PERSONNALITÉ :
- Joyeuse et décontractée, comme une pote qui t'aide
- Geek assumée (cinéma, jeux, tech) mais sans jargon inutile
- Humour fin : 0 à 1 vanne max par réponse, jamais forcée
RÈGLES STRICTES :
1. Réponds D'ABORD à la demande, clairement et directement
2. Phrases courtes, ton conversation IRL
3. Max 2-3 phrases d'intro si question simple
4. Termine par une ouverture non forcée
5. Action risquée (rm, firewall) → demande confirmation
6. Conserve le style d'écriture de Folzo (dysorthographie)
SPÉCIALITÉS :
- Débogage : raisonnement étape par étape
- Linux/Docker : commandes prêtes à copier
- Aide écriture : corrige sans lisser
MÉMOIRE :
N'invente pas de souvenirs. Utilise les snippets mémoire fournis.
```
### Mémoire Configurée (Snippets)
```yaml
- "Préférence: Réponds en français, concis et précis, avec étapes actionnables."
- "Préférence: Je suis dyslexique et dysorthographique ; corrige sans lisser mon style."
- "Contexte: Je suis Folzo, geek et père de famille, en reconversion vers l'IT."
- "Contexte: Mon PC gamer (Fedora, RX 7800 XT 16GB, 5800X3D, 32GB RAM) exécute Ollama."
- "Contrainte: Je privilégie l'auto-hébergement et l'open-source."
- "Objectif: Améliorer mon assistante locale (mémoire, prompt, réglages, RAG)."
```
### Services sur folzo-Corp
**docker-compose.yml :**
```yaml
services:
speaches-stt:
image: speaches:latest
container_name: speaches-stt
ports:
- "8200:8000"
environment:
- WHISPER__MODEL=deepdml/faster-whisper-large-v3-turbo-ct2
- WHISPER__LANGUAGE=fr
- WHISPER__COMPUTE_TYPE=int8
- WHISPER__DEVICE=cpu # En attendant ROCm
restart: unless-stopped
openedai-speech:
image: ghcr.io/matatonic/openedai-speech
container_name: openedai-speech
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
restart: unless-stopped
```
---
## Besoins Identifiés et Priorisés
### Phase 1 : Réparations (Courte durée)
#### 1.1 Réparer TTS (Openedai-Speech)
**Statut :** ⚠️ À faire
**Problème :** Connection refused sur port 8100 depuis effi-server
**Impact :** Pipeline vocal incomplet
**Solution :** Vérifier firewall, configuration réseau Docker
#### 1.2 Optimiser Whisper (STT)
**Statut :** ⚠️ À faire
**Problème :** Fonctionne en CPU (lent)
**Impact :** Latence ~10s pour transcription
**Solution :** Compiler CTranslate2-ROCm ou alternative
### Phase 2 : Grands Projets (Moyenne durée)
#### 2.1 Intégrer Joplin avec OpenWebUI
**Statut :** 📋 Planifié
**Objectif :** RAG sur notes Joplin
**Avantage :** Joplin Server déjà installé sur NAS
**Approche :** Joplin Web Clipper API ou plugin
#### 2.2 Génération d'Images (ComfyUI)
**Statut :** 📋 Planifié
**Matériel :** RX 7800 XT 16GB parfait pour Stable Diffusion
**Besoin :** Interface simple pour génération images
**Solution :** ComfyUI avec workflows préconfigurés
### Phase 3 : Optimisations (Longue durée)
#### 3.1 Optimiser Web Search
**Statut :** 🔧 En cours
**Actuel :** DDGS (DuckDuckGo) avec 5 résultats
**Améliorations possibles :**
- Augmenter nombre de résultats
- Ajouter SearxNG self-hosted
- Optimiser prompts pour recherche
#### 3.2 Réparer Home Assistant
**Statut :** 🔧 En cours
**Problème :** Très lent sur chaque requête
**Cause :** Timeout ou configuration incorrecte
#### 3.3 Web Scraping
**Statut :** 📋 Planifié
**Besoin :** Extraire contenu web pour RAG
**Solutions :** crawl4ai, firecrawl, ou tool Python custom
#### 3.4 Calendrier
**Statut :** 📋 Planifié
**Besoin :** Accès calendrier pour agenda/rdv
**Approche :** CalDAV (Nextcloud) ou Google Calendar API
---
## Apprentissages Clés
### Ce qui Fonctionne Bien
1. **qwen3.5:9b avec 32K context**
- Performance excellente (53 tokens/sec)
- Qualité de raisonnement supérieure à Ministral
- Contexte long permet RAG efficace
2. **Solution mémoire manuelle**
- Plus rapide que mem0
- Prévisible et contrôlable
- Moins de dépendances
3. **Sub Agent Tool**
- Permet délégation de tâches complexes
- Fonctionne bien avec qwen3.5
- Architecture extensible
4. **Infrastructure split (NAS + PC gaming)**
- Économie d'énergie (WOL)
- Répartition charge optimale
- PC éteint quand pas utilisé
### Ce qu'il Faut Éviter
1. **mem0-mcp**
- Trop lent pour usage quotidien
- Complexité inutile
- Bugs de parsing Ollama
2. **mcpo + Obsidian**
- Trop fragile (hardcode, patch nécessaire)
- Maintenance complexe
- Peu fiable à long terme
3. **AFFiNE**
- Orienté SaaS, pas self-host
- MCP non supporté officiellement
- Lock-in format propriétaire
4. **Build ROCm complexe**
- Très chronophage
- Fragile (dépendances clang)
- Pas de packages précompilés
### Recommandations pour la Suite
1. **Prioriser la stabilité** sur les nouvelles features
2. **Documenter chaque changement** (comme ce fichier)
3. **Tester avant de migrer** (sandbox si possible)
4. **Préférer les solutions simples** moins "sexy" mais fiables
5. **Garder des backups** avant chaque modification majeure
---
## Ressources et Liens
### Documentation Projet Effi
- Configuration complète : `/docs/CONFIGURATION-RECAP-GITEA.md`
- Top 30 optimisations : `/docs/04-depannage/openwebui-optimisation-top30.md`
- TODO priorisé : `/.opencode/TODO-NEXT-THREAD.md`
- Prompt reprise : `/.opencode/PROMPT-REPRISE.md`
### Archives
- Conversations Perplexity : `/archive/Perplexity/`
- Notes originales : `/archive/notes-originales/`
### Infrastructure
- **effi-server** : 192.168.1.27 (Intel J5040, 8GB RAM)
- **folzo-Corp** : 192.168.1.11 (5800X3D, RX 7800 XT 16GB)
- **Gitea** : https://gitea.folzocorp.fr/Folzo/effi
---
## Conclusion
Le projet Effi a connu une évolution significative depuis février 2026. Des choix initiaux parfois trop ambitieux (AFFiNE, mem0, MCP complexe), l'architecture s'est progressivement simplifiée vers une solution plus robuste et maintenable.
**La configuration actuelle est stable et performante**, avec qwen3.5:9b comme modèle principal et une infrastructure épurée. Les prochaines étapes se concentrent sur l'ajout de fonctionnalités (Joplin, ComfyUI) plutôt que sur la réparation de problèmes existants.
**Leçon principale :** En self-hosting, la simplicité et la stabilité priment sur les fonctionnalités avancées complexes.
---
*Document généré le 5 avril 2026 à partir des archives Perplexity du projet Effi.*