À propos du projet

Lexos est un moteur de traitement de documents IA piloté par événements, conçu autour de modèles de langage auto-hébergés. Il associe une passerelle Go à haute concurrence à des workers Python asynchrones pour exécuter la synthèse de documents, la génération augmentée par récupération (RAG) et la transcription vocale, sans bloquer le traitement des requêtes HTTP ni dépendre d'API IA externes. Principales capacités décrites dans le README : Auto-hébergé et axé sur la confidentialité : l'analyse de documents, les embeddings, la récupération vectorielle, la transcription et l'inférence LLM s'exécutent tous dans l'environnement Docker auto-hébergé, sans nécessiter d'API IA externes. Traitement asynchrone : les clients reçoivent immédiatement une réponse 202 Accepted avec un identifiant de tâche, tandis que le travail intensif en CPU se poursuit en arrière-plan. Diffusion de réponses en temps réel : les événements serveur (Server-Sent Events) diffusent les réponses générées, jeton par jeton, du worker Python, via Redis Pub/Sub et la passerelle Go, jusqu'au navigateur. Stockage d'objets compatible S3 : MinIO pour le développement et Cloudflare R2 pour la production, utilisant la même configuration client compatible S3. Traitement adressé par contenu : des empreintes SHA-256 combinent le contenu source, l'opération et les paramètres pour réutiliser les artefacts terminés et supprimer les traitements dupliqués concurrents. Récupération multilingue : embeddings multilingues, découpage en segments tenant compte du tokenizer et recherche de similarité cosinus FAISS pour récupérer des preuves pertinentes dans les langues prises en charge. Tests automatisés isolés : les gestionnaires Go utilisent des interfaces Redis et de stockage injectées par dépendance, tandis que les tests Python simulent les modèles, le stockage et les opérations réseau avec Pytest et pytest-mock. Architecture : un frontend Next.js fournit des flux de travail pour la transcription, la synthèse et les questions-réponses, avec interrogation TanStack Query et rendu SSE. La passerelle Go + Echo gère l'ingestion, la validation, les téléversements en streaming vers le stockage d'objets, la répartition des tâches, la suppression des doublons et le proxy SSE. Redis agit comme courtier, stockage d'état des tâches, cache de traitement et couche de verrouillage distribué. Le worker Python interroge les files et exécute trois pipelines : Distiller pour la synthèse via un pipeline Map-Reduce avec Qwen3 0.6B, Gleaner pour la RAG utilisant les embeddings FastEmbed et les index FAISS, et Scriber pour la transcription audio via Faster-Whisper. Déploiement : conçu pour un petit VPS uniquement CPU, environ 4 vCPU et 8 Go de RAM, avec un budget mémoire d'environ 2 Go pour le worker IA. Les modèles GGUF quantifiés Q4_K_M, le chargement mappé en mémoire, les embeddings basés sur ONNX, les index FAISS IndexFlatIP par document, la concurrence séquentielle des workers et l'état externalisé maintiennent une utilisation des ressources prévisible. Exécution : Docker et Docker Compose sont des prérequis ; clonez le dépôt et exécutez docker-compose up --build -d. Le démarrage initial peut prendre plusieurs minutes pendant le téléchargement et la mise en cache des fichiers de modèle. Le stockage de production utilise la même surface de configuration S3 avec un endpoint R2 et S3_REGION=auto, et des règles de cycle de vie peuvent être appliquées avec Wrangler. Les objets bruts expirent après un jour et les objets de cache après huit jours, tandis que les métadonnées de cache Redis restent réutilisables pendant sept jours. Tests : les tests de la passerelle Go utilisent des simulations Testify pour le comportement des gestionnaires, les empreintes, les hits de cache, la récupération de verrous obsolètes et l'accès au stockage ; les tests Python valident la propriété du cache, l'indexation sensible au tokenizer, le nettoyage du streaming, le routage des workers, la réutilisation des artefacts et la récupération après erreur ; le CI frontend exécute la vérification de types TypeScript, ESLint et une construction Next.js de production. Licence : MIT.