# 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.*