From ef98a16b702d8995902eeea5e28d4dd54bb12186 Mon Sep 17 00:00:00 2001 From: Folzo Date: Sat, 4 Apr 2026 11:17:34 +0200 Subject: [PATCH] =?UTF-8?q?Ajout:=20Notice=20d'installation=20compl=C3=A8t?= =?UTF-8?q?e=20pour=20r=C3=A9f=C3=A9rence=20future?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/NOTICE_INSTALLATION.md | 841 ++++++++++++++++++++++++++++++++++++ 1 file changed, 841 insertions(+) create mode 100644 docs/NOTICE_INSTALLATION.md diff --git a/docs/NOTICE_INSTALLATION.md b/docs/NOTICE_INSTALLATION.md new file mode 100644 index 0000000..f6bcd47 --- /dev/null +++ b/docs/NOTICE_INSTALLATION.md @@ -0,0 +1,841 @@ +# πŸ“‹ Notice d'Installation - Effi (Infrastructure IA Self-Hosted) + +> **Date de crΓ©ation** : Avril 2026 +> **Auteur** : Folzo +> **Version** : 1.0 + +--- + +## 🎯 Architecture + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ EFFI-SERVER (192.168.1.27) β”‚ +β”‚ Ubuntu Server 22.04+ / Intel J5040 / 8GB RAM β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ Open WebUI β”‚ β”‚ Qdrant β”‚ β”‚ CouchDB β”‚ β”‚ +β”‚ β”‚ Port 3000 β”‚ β”‚ Port 6333 β”‚ β”‚ Port 5984 β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”‚ β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ wol-proxy β”‚ β”‚ mcpo β”‚ β”‚ n8n β”‚ β”‚ +β”‚ β”‚ Port 3011 β”‚ β”‚ Port 8000 β”‚ β”‚ Port 5678 β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ + β”‚ Wake-on-LAN + Proxy + β–Ό +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ FOLZO-CORP (192.168.1.11) β”‚ +β”‚ Fedora / Ryzen 5800X3D / RX 7800 XT 16GB β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ Ollama (LLM) β”‚ β”‚ +β”‚ β”‚ Port 11434 β”‚ β”‚ +β”‚ β”‚ ModΓ¨les : qwen2.5:14b, bge-m3, etc. β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +--- + +## πŸ“¦ Phase 1 : PrΓ©paration du Serveur (effi-server) + +### 1.1 Installation de Ubuntu Server + +**PrΓ©requis matΓ©riels :** +- CPU : Intel J5040 ou Γ©quivalent (4 cΕ“urs min) +- RAM : 8 GB minimum +- Stockage : 100 GB SSD +- RΓ©seau : Ethernet filaire + +**Installation :** +1. TΓ©lΓ©charger Ubuntu Server 22.04 LTS +2. CrΓ©er une clΓ© USB bootable +3. Installer avec les options par dΓ©faut +4. CrΓ©er un utilisateur `effi` avec droits sudo +5. Configurer une IP statique : `192.168.1.27` + +### 1.2 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 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 +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 + +# Ajouter l'utilisateur au groupe docker +sudo usermod -aG docker $USER + +# VΓ©rifier l'installation +docker --version +docker compose version + +# DΓ©connexion/reconnexion nΓ©cessaire +exit +# Reconnectez-vous en SSH +``` + +### 1.3 CrΓ©ation de la structure + +```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 +mkdir -p mem0-data +``` + +### 1.4 Fichier docker-compose.yml + +CrΓ©er `~/effi/docker-compose.yml` : + +```yaml +# ═══════════════════════════════════════════════════════════ +# 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 + environment: + - PUID=1000 + - PGID=1000 + - TZ=Europe/Paris + ports: + - "3100:3001" + volumes: + - ./obsidian-vault:/config + shm_size: "1gb" + networks: + - effi-net + +networks: + effi-net: + driver: bridge + +volumes: + open-webui-data: + pipelines-data: + whisper-cache: +``` + +### 1.5 Configuration des variables d'environnement + +CrΓ©er `~/effi/.env` : + +```bash +# ═══════════════════════════════════════════════════════════ +# EFFI SERVER - Variables d'environnement +# ═══════════════════════════════════════════════════════════ + +# OpenWebUI +WEBUI_SECRET_KEY=changez_moi_par_une_cle_longue_et_aleatoire + +# Ollama / PC Gaming +OLLAMA_HOST=192.168.1.11 +PC_GAMING_MAC=XX:XX:XX:XX:XX:XX +BROADCAST_IP=192.168.1.255 + +# CouchDB (Obsidian LiveSync) +COUCHDB_USER=master +COUCHDB_PASSWORD=mot_de_passe_securise + +# n8n (Automatisation) +N8N_USER=master +N8N_PASSWORD=mot_de_passe_securise +``` + +**GΓ©nΓ©rer une clΓ© secrΓ¨te :** +```bash +openssl rand -hex 32 +``` + +### 1.6 CrΓ©ation du wol-proxy + +CrΓ©er `~/effi/wol-proxy/app.py` : + +```python +#!/usr/bin/env python3 +import socket +import struct +import subprocess +import time +import os +from flask import Flask, request, Response +import requests + +app = Flask(__name__) + +TARGET_HOST = os.getenv('TARGET_HOST', '192.168.1.11') +TARGET_PORT = int(os.getenv('TARGET_PORT', '11434')) +TARGET_MAC = os.getenv('TARGET_MAC', '00:00:00:00:00:00') +LISTEN_PORT = int(os.getenv('LISTEN_PORT', '3011')) +WAKE_TIMEOUT = int(os.getenv('WAKE_TIMEOUT', '60')) +CHECK_INTERVAL = int(os.getenv('CHECK_INTERVAL', '5')) +BROADCAST_IP = os.getenv('BROADCAST_IP', '192.168.1.255') + +def send_wol_packet(mac_address): + """Envoie un magic packet Wake-on-LAN""" + mac_bytes = bytes.fromhex(mac_address.replace(':', '').replace('-', '')) + magic_packet = b'\xff' * 6 + mac_bytes * 16 + + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + sock.sendto(magic_packet, (BROADCAST_IP, 9)) + sock.close() + print(f"Magic packet envoyΓ© Γ  {mac_address}") + +def is_target_awake(): + """VΓ©rifie si Ollama rΓ©pond""" + try: + response = requests.get(f"http://{TARGET_HOST}:{TARGET_PORT}/api/tags", timeout=5) + return response.status_code == 200 + except: + return False + +def wake_target(): + """RΓ©veille le PC Gaming si nΓ©cessaire""" + if is_target_awake(): + return True + + print(f"{TARGET_HOST} ne rΓ©pond pas, envoi WOL...") + send_wol_packet(TARGET_MAC) + + # Attendre que le PC dΓ©marre + for i in range(0, WAKE_TIMEOUT, CHECK_INTERVAL): + time.sleep(CHECK_INTERVAL) + if is_target_awake(): + print(f"{TARGET_HOST} est rΓ©veillΓ©!") + return True + print(f"Attente... {i+CHECK_INTERVAL}s/{WAKE_TIMEOUT}s") + + return False + +@app.route('/', defaults={'path': ''}, methods=['GET', 'POST', 'PUT', 'DELETE']) +@app.route('/', methods=['GET', 'POST', 'PUT', 'DELETE']) +def proxy(path): + """Proxy vers Ollama avec WOL""" + if not wake_target(): + return Response("Target unavailable after WOL timeout", status=503) + + # Proxy la requΓͺte + url = f"http://{TARGET_HOST}:{TARGET_PORT}/{path}" + + try: + resp = requests.request( + method=request.method, + url=url, + headers={key: value for key, value in request.headers if key != 'Host'}, + data=request.get_data(), + cookies=request.cookies, + allow_redirects=False, + timeout=300 + ) + + excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection'] + headers = [(name, value) for name, value in resp.raw.headers.items() + if name.lower() not in excluded_headers] + + return Response(resp.content, resp.status_code, headers) + except Exception as e: + return Response(f"Proxy error: {str(e)}", status=502) + +if __name__ == '__main__': + print(f"WOL Proxy dΓ©marrΓ© sur le port {LISTEN_PORT}") + print(f"Cible: {TARGET_HOST}:{TARGET_PORT} (MAC: {TARGET_MAC})") + app.run(host='0.0.0.0', port=LISTEN_PORT, threaded=True) +``` + +CrΓ©er `~/effi/wol-proxy/Dockerfile` : + +```dockerfile +FROM python:3.11-slim + +WORKDIR /app + +RUN pip install flask requests + +COPY app.py . + +EXPOSE 3011 + +CMD ["python", "app.py"] +``` + +### 1.7 Configuration mcpo + +CrΓ©er `~/effi/mcpo-config/config.json` : + +```json +{ + "mcpServers": {} +} +``` + +CrΓ©er `~/effi/mcpo-patch.sh` : + +```bash +#!/bin/sh +# Patch pour mcpo - installe les dΓ©pendances si nΓ©cessaire +pip install mcpo 2>/dev/null || true +exec mcpo "$@" +``` + +```bash +chmod +x ~/effi/mcpo-patch.sh +``` + +### 1.8 Initialisation de CouchDB + +```bash +# DΓ©marrer uniquement CouchDB +cd ~/effi +docker compose up -d couchdb + +# Attendre 10 secondes +sleep 10 + +# CrΓ©er les bases nΓ©cessaires +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 +``` + +### 1.9 DΓ©marrage complet + +```bash +cd ~/effi +docker compose up -d + +# VΓ©rifier l'Γ©tat +docker compose ps +``` + +--- + +## πŸ’» Phase 2 : Configuration du PC Gaming (folzo-Corp) + +### 2.1 Installation de Fedora + +1. TΓ©lΓ©charger Fedora Workstation ou Server +2. CrΓ©er une clΓ© USB bootable +3. Installer avec les options par dΓ©faut +4. Configurer IP statique : `192.168.1.11` + +### 2.2 Installation d'Ollama + +```bash +# Installer Ollama +curl -fsSL https://ollama.com/install.sh | sh + +# VΓ©rifier l'installation +ollama --version +``` + +### 2.3 Configuration du service Ollama + +CrΓ©er le fichier de service systemd : + +```bash +sudo tee /etc/systemd/system/ollama.service > /dev/null << 'EOF' +[Unit] +Description=Ollama Service +After=network-online.target + +[Service] +Type=simple +User=ollama +Group=ollama +ExecStart=/usr/local/bin/ollama serve +Restart=always +RestartSec=3 +Environment="HOME=/usr/share/ollama" +Environment="OLLAMA_HOST=0.0.0.0:11434" + +[Install] +WantedBy=multi-user.target +EOF +``` + +Configurer les permissions : + +```bash +# CrΓ©er l'utilisateur ollama +sudo useradd -r -s /bin/false ollama 2>/dev/null || echo "Utilisateur existe dΓ©jΓ " + +# CrΓ©er le rΓ©pertoire home +sudo mkdir -p /usr/share/ollama +sudo chown -R ollama:ollama /usr/share/ollama + +# Recharger systemd +sudo systemctl daemon-reload +sudo systemctl enable ollama +sudo systemctl start ollama + +# VΓ©rifier +sudo systemctl status ollama +``` + +### 2.4 TΓ©lΓ©chargement des modΓ¨les + +```bash +# ModΓ¨le principal pour Effi +ollama pull qwen2.5:14b + +# ModΓ¨le pour les embeddings (RAG) +ollama pull bge-m3 + +# ModΓ¨le lΓ©ger pour les filtres +ollama pull qwen2.5:3b + +# VΓ©rifier +ollama list +``` + +### 2.5 Configuration Wake-on-LAN + +```bash +# VΓ©rifier que la carte supporte WOL +sudo ethtool enp6s0 | grep -i wake + +# Si WOL n'est pas activΓ©, crΓ©er le script +sudo tee /etc/NetworkManager/dispatcher.d/99-wol > /dev/null << 'EOF' +#!/bin/bash +if [ "$1" = "enp6s0" ] && [ "$2" = "up" ]; then + /sbin/ethtool -s $1 wol g +fi +EOF + +sudo chmod +x /etc/NetworkManager/dispatcher.d/99-wol + +# Activer maintenant +sudo ethtool -s enp6s0 wol g +``` + +### 2.6 Test de connectivitΓ© + +```bash +# VΓ©rifier qu'Ollama Γ©coute sur toutes les interfaces +sudo ss -tlnp | grep 11434 + +# Doit afficher : 0.0.0.0:11434 (pas 127.0.0.1:11434) +``` + +--- + +## βš™οΈ Phase 3 : Configuration OpenWebUI + +### 3.1 Premier accΓ¨s + +1. Ouvrir `http://192.168.1.27:3000` +2. CrΓ©er un compte (le premier devient admin) +3. Se connecter + +### 3.2 Configuration des connexions + +**Admin Panel β†’ Settings β†’ Connections** + +- **Ollama URL** : `http://192.168.1.27:3011` + +### 3.3 Configuration Audio + +**Admin Panel β†’ Settings β†’ Audio** + +**STT :** +- Engine : `OpenAI` +- URL : `http://192.168.1.11:8200/v1` +- Model : `Systran/faster-whisper-large-v3` + +**TTS :** +- Engine : `OpenAI` +- URL : `http://192.168.1.11:8100/v1` +- Model : `tts-1` + +### 3.4 CrΓ©ation du modΓ¨le Effi + +**Admin Panel β†’ Models β†’ + New Model** + +- **Name** : `Effi` +- **Base Model** : `qwen2.5:14b` +- **System Prompt** : Voir ci-dessous + +**System Prompt :** +``` +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. + +## MΓ©moire +N'invente pas de souvenirs. Les infos sur Folzo sont injectΓ©es automatiquement ci-dessous. + +``` + +--- + +## πŸ”§ Phase 4 : Configuration MΓ©moire Persistante + +### 4.1 Installation d'Auto Memory + +1. **Admin Panel β†’ Functions β†’ Discover** +2. Rechercher "Auto Memory" par nokodo +3. Installer + +**Configuration des Valves :** +- 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` + +**Activation :** Toggle Global β†’ ON + +### 4.2 Installation de Memory Injection + +1. **Admin Panel β†’ Functions β†’ Discover** +2. Rechercher "Memory Injection Filter" par Raphael +3. Installer + +**Configuration :** +- PREPENDING_TEXT : `Voici les souvenirs Γ  long terme de l'utilisateur :` +- SHOW_MEMORY_COUNT_EMITTER : `ON` + +**Activation :** Toggle Global β†’ ON + +### 4.3 Patch du code Auto Memory + +**Admin Panel β†’ Functions β†’ Auto Memory β†’ Edit** + +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 +``` + +--- + +## βœ… Phase 5 : VΓ©rifications Finales + +### 5.1 Test de conversation + +1. CrΓ©er un nouveau chat avec Effi +2. Dire : "Je m'appelle Folzo et j'habite Γ  Paris" +3. CrΓ©er un autre chat +4. Demander : "Comment je m'appelle ?" +5. **RΓ©sultat attendu** : Effi rΓ©pond "Folzo" + +### 5.2 Test WOL + +1. Γ‰teindre folzo-Corp +2. Envoyer un message dans OpenWebUI +3. Le wol-proxy doit rΓ©veiller le PC automatiquement +4. Attendre 30-60 secondes +5. Effi rΓ©pond + +### 5.3 Test audio (si configurΓ©) + +1. Activer le micro dans OpenWebUI +2. Parler : "Bonjour Effi" +3. VΓ©rifier la transcription + +--- + +## πŸ› οΈ DΓ©pannage + +### Ollama inaccessible + +```bash +# Sur folzo-Corp +sudo systemctl status ollama +sudo systemctl restart ollama +sudo ss -tlnp | grep 11434 +``` + +### Wake-on-LAN ne marche pas + +```bash +# Sur folzo-Corp +sudo ethtool enp6s0 | grep -i wake +# Doit afficher : Wake-on: g +``` + +### Services Docker en erreur + +```bash +# Sur effi-server +cd ~/effi +docker compose ps +docker compose logs [service] +docker compose restart [service] +``` + +### Reset complet + +```bash +# Sur effi-server +cd ~/effi +docker compose down +docker compose up -d +``` + +--- + +## πŸ“š Ressources + +- **DΓ©pΓ΄t Gitea** : https://gitea.folzocorp.fr/Folzo/effi +- **Documentation** : Voir dossier `docs/` dans le dΓ©pΓ΄t +- **Scripts utilitaires** : Voir dossier `scripts/` dans le dΓ©pΓ΄t + +--- + +**FΓ©licitations ! Effi est opΓ©rationnelle !** πŸš€