Version 2.0.21
🚀 Nouvelles fonctionnalités
- 🏗️ Nouvelle architecture à deux services : séparation du monoservice Odin en deux services indépendants — Odin (orchestration, base de données, file d'attente) et Zeus_Parser (analyse de documents, vision/OCR). Si Zeus_Parser tombe, Odin continue et les tâches restent dans la queue. Scaling indépendant de chaque service.
- 🦀 Traitement de documents recodé en Rust : remplacement complet du pipeline Python (PyPDF2, Gotenberg, LibreOffice) par un binaire Rust natif unique.
- PDF : parsing streaming page par page via TmsPDF (lib Rust), au lieu de charger tout le fichier en RAM
- Docx / Pptx : lecture directe du XML dans le zip, sans subprocess ni LibreOffice
- Zéro subprocess, mémoire déterministe (ownership & borrowing Rust), multi-threading natif via Rayon
- Gotenberg et LibreOffice sont complètement éliminés
- 📨 Communication inter-services via Redis : remplacement des appels HTTPS par une messagerie Redis persistante.
- File de réparation persistante : les tâches échouées sont automatiquement re-traitées
- Reprise automatique sans intervention manuelle
- Découplage total : Odin publie, Zeus_Parser consomme à son rythme
- Traçabilité par tâche : endpoint dédié pour consulter les logs d'un taskId spécifique
⚡ Performance
- 🚀 Gain x3 à x20 sur le temps d'analyse : sur un dataset de 70 documents (~100 pages, ~30 images par document) :
- v1 Python : ~14 secondes par document
- v2 Rust : ~4s (PDF), ~1s (docx & pptx)
- 📊 Benchmarks détaillés :
- PDF 30 pages : 4s → 1s (x4)
- PDF 120 pages : 13s → 4,5s (x3)
- PDF 2000 pages : 3 min → 35s (x5)
🛡️ Stabilité
- 💪 Zéro OOMKill : sous la même charge et infrastructure (3 CPU, 3 Go RAM), la v1 crashait (OOMKill Kubernetes) tandis que la v2 reste stable sans aucun crash.
- 🔄 Concurrence contrôlée : remplacement du parallélisme statique (fixé en dur, sans backpressure) par des files d'attente avec concurrence maîtrisée sur les accès DB et le traitement de documents séparément.
- 🧹 Élimination des fuites mémoire : plus de subprocess Python ni d'instances LibreOffice. La mémoire est libérée de manière déterministe grâce au modèle d'ownership Rust.
💡 Améliorations
- 📊 Extraction des tableaux améliorée : le parser PDF Rust offre une extraction plus fidèle des pages complexes avec tableaux (colonnes, structure préservée), corrigeant les erreurs constatées en sortie LLM/RAG sur les versions précédentes.
- 🤖 Qualité LLM/RAG améliorée : les erreurs de réponses incorrectes ou incohérentes du LLM causées par des données d'entrée corrompues ne se reproduisent plus sur les PDFs de test.