- Route virtuelle :3012 -> instance active (8080 Q4_K_M / 8081 IQ4_XS), etat persiste
- Alias modele qwen3.8-27b : reecriture id reel <-> alias (v1/models, chat, completions,
embeddings, streaming SSE) -> switch transparent pour tous les harnais
- UI de gestion :3017 (statut, Activer, Tester) en page unique sans dependance ajoutee
- Fail-fast 503 (20s) si instance active arreteee, sans spam WOL
- Add SearXNG service on port 6060 (replaces old port 11112)
- Add Valkey for rate limiting (5/min, 60/hour, 500/day)
- Add Nginx reverse proxy with X-Real-IP and X-Forwarded-For headers
- Configure JSON format and French locale
- Add rate limiting configuration in limiter.toml
- Add Valkey configuration in valkey.conf
OpenFox looks for max_model_len in /v1/models response to determine
context window size. This commit:
- Adds max_model_len field to Jean models
- Adds max_model_len field to Ollama models
- Removes dead code after return statement
- Add context_length and context_window fields at model root level
- Keep them in meta for backward compatibility
- This should allow OpenFox to properly detect max context size
The function was accidentally truncated when adding get_jean_context_lengths().
This caused TypeError: 'NoneType' object is not iterable in list_models().
- Add get_jean_context_lengths() to fetch n_ctx from Jean /v1/models
- Add preset_ctx_map with known CTX values for each preset
- Add context_length to Jean model metadata in /v1/models
- Add context_length to Ollama model metadata from details.context_length
- This allows OpenFox to know the max tokens each model can handle
- Add OLLAMA_KEEP_ALIVE_MINUTES config (default: 5)
- schedule_ollama_unload(): delays Ollama unload when switching to Jean
- cancel_ollama_unload(): cancels timer if returning to Ollama
- Ollama models stay in VRAM for X minutes after last use
- Timer resets on each Ollama request
- stop_jean(): stops Jean service to free VRAM before Ollama use
- start_jean(): starts Jean service when switching back from Ollama
- unload_ollama(): forces Ollama to unload models before Jean use
- ensure_vram_for_backend(): orchestrates VRAM switching
- Tracks active backend state to avoid unnecessary switches
- Configurable timeouts via environment variables
- Prevents VRAM contention between Jean and Ollama
- jean-router interroge /api/presets pour lister dynamiquement les presets Jean
- Support Ollama via /api/tags pour les modèles vision
- Switch automatique de preset quand nécessaire
- Expose /v1/models avec tous les modèles disponibles
- Route les requêtes vers Jean ou Ollama selon le modèle demandé
- Nouveaux presets Jean automatiquement visibles dans OpenWebUI
Architecture:
open-webui → LiteLLM:4000 → jean-router:3014
├→ jean-proxy:3012 → Jean (.11:8080)
└→ wol-proxy:3011 → Ollama (.11:11434)
- Switched from large-v3 (1.56B) to distil-large-v3 (~756M) — 2x faster transcription
- Increased CPU threads from 4 to 8 (Ryzen 5800X3D has 8c/16t)
- French language quality preserved (~5% accuracy tradeoff for 2x speed)
- Expected pipeline latency: 4-5s total (down from ~15s)
- All models now route through single jean-proxy:3012 → orchestrator:8080
- Removed jean-proxy-moe (no longer needed with auto-switch orchestrator)
- Added qwen3.6-moe and qwen3.6-moe-reason model routes
- Updated architecture comments
LiteLLM expose l'API OpenAI /v1/* pas l'API Ollama /api/*. open-webui
doit etre branche via la section 'OpenAI API' (env OPENAI_API_BASE_URL +
OPENAI_API_KEY), pas via 'Ollama'. L'override ajoute ces vars a open-webui,
force-recreate pour propager. Confirme en prod: HTTP 200 sur :4000/v1/models
depuis le conteneur open-webui. Les 4 modeles Qwen3.6 remontent dans le chat.
Contrainte VRAM: RX 7800 XT 16Go ne peut pas co-heberger Qwen3.6-27B
(14.6 Go) + llama3.1-8b (5 Go). Ollama commente, on expose 3 profils
du meme modele Qwen3.6 via le toggle chat_template_kwargs.enable_thinking:
- qwen3.6-reason / qwen3.6-27b : raisonnement ON (taches complexes)
- qwen3.6-fast / qwen3.6 : raisonnement OFF (chat rapide ~400ms TTFT)
drop_params=false pour passer chat_template_kwargs a Jean.
Teste en prod: qwen3.6-fast repond BONJOUR en 400ms, MTP 3/3 acceptes.
Architecture (voir docs/ARCHITECTURE-LITELLM.md):
open-webui -> LiteLLM:4000
|- qwen3.6-27b -> jean-proxy:3012 -> Jean (.11:8080)
|- llama3.1-8b -> wol-proxy:3011 -> Ollama (.11:11434)
Nouveaux fichiers:
- wol-proxy/ (versionne l'app.py de prod deja en place)
- jean-proxy/ (clone du wol-proxy avec HEALTH_PATH=/health + retry post-WoL
pour services qui mettent du temps a demarrer apres WoL, ex: Jean qui
charge 14 Go en VRAM)
- litellm/config.yaml (routing par nom de modele, drop_params=true)
- docker-compose.litellm.yml (override ADDITIF: ajoute uniquement jean-proxy
et litellm, ne redemarre PAS open-webui/wol-proxy/hermes)
Teste en prod sur .27: Jean + Ollama repondent via LiteLLM:4000 avec
path-through de chat_template_kwargs.enable_thinking (raisonnement Qwen3.6
desactivable par requete). Zero impact hermes-webui/wol-proxy.
Basculer open-webui reste une etape manuelle (step 3 de la doc).
- Server API (/api/items/) does not expose note CRUD, only sync protocol
- Clipper API is the only way to read/write notes remotely
- Requires Joplin desktop open + Web Clipper enabled
- Added ping() function to check connectivity
- Valves: joplin_url, joplin_api_token
- Tool with Valves (leantime_url, leantime_api_key)
- 14 functions: projects, tickets, comments, users, timesheets, status labels
- JSON-RPC 2.0 client matching Leantime API
- Activate/deactivate per conversation in Open WebUI
- Added Valves (Pydantic) pattern for ocr_url configuration via wheel icon
- Inspired by Kreuzberg tool: multi-level file search (exact, substring, word matches)
- Support for multi-file OCR with extract_text_from_images
- Added search_files function for pattern matching
- effi-ocr runs on port 8301 (Tesseract with preprocessing)
- Original prompt kept for reference (200+ lines, too verbose)
- New optimized prompt: ~40 lines, -75% tokens
- Added table for tools usage (Kreuzberg, web_search, sub-agent, etc.)
- Optimized version includes explicit Kreuzberg usage for OCR
- README: add Tool OpenWebUI section with current features
- README: update Historique with Tool section
- Tool doc: add Limitations and Future Improvements sections
Future improvements noted:
- Support historique (données N dernières minutes)
- Filtres par période
- Graphiques et alertes automatisées
Permet à Effi de:
- get_all_stats() - Stats de tous les systèmes
- get_system_stats('folzocorp') - Stats d'un système
- check_alerts() - Vérifier les alertes
- get_gpu_status('folzocorp') - Status GPU AMD
- can_run_comfyui() - Vérifier si ComfyUI peut tourner
- Fix bug where old history entries were counted as recent activity
- Added recent_threshold parameter (default 300s)
- is_recent_history() now checks timestamp of last history item
- Add full architecture diagram with all machines (FolzoCorp, EffiServer, NAS)
- Document all services on each machine with ports and roles
- Add memory management section (auto-unload scripts)
- Add project structure tree
- Update technologies list
- Add documentation links
- Monitors VRAM, queue status, and history
- Restarts ComfyUI container after timeout if RAM > 5GB and VRAM < 1%
- More effective at freeing RAM than model unloading alone
- Corriger extraction VRAM via API correcte
- Ajouter gestion signaux propre
- Ajouter TimeoutStopSec pour arrêt propre
- Ajouter service restart Beszel au réveil