v200 : Introduction Architecture v200

, par Bertrand Degoy

La v200 introduit une architecture RAG entièrement refondue, centrée sur la modularité, la performance et la robustesse. Elle s’appuie sur l’écriture de services dédiés pour les modèles et les index, un daemon Pyro5 pour l’accès rapide aux index en mémoire, et une API interne unifiée permettant d’abstraire totalement les backends.
L’ensemble garantit un moteur RAG totalement indépendant de toute bibliothèque (LlamaIndex, LangChain ...) .
Cette version fournit ainsi une base industrielle, stable et extensible pour un pipeline RAG totalement propriétaire.


La v200 constitue une réarchitecture complète du pipeline RAG, conçue pour offrir une modularité stricte, une indépendance vis‑à‑vis de LlamaIndex ou de toute autre bibliothèque, et une performance accrue grâce à un daemon gérant les index en mémoire persistante. Elle introduit une séparation nette des responsabilités, une normalisation des API internes, et un modèle d’exécution cohérent pour tous les types d’index et de modèles.

1. Objectif : Modularité systémique

1.1. Modularité des modèles

La v200 définit des services dédiés pour les modèles :

  • services/llm/

  • services/embeddings/

Chaque service expose une API normalisée :

  • generate()

  • astream()

  • embed()

Cette abstraction permet de remplacer un modèle (OpenAI, Ollama, HF, local) sans impact sur le reste du pipeline.

1.2. Modularité des index

Les index sont encapsulés dans des backends interchangeables :

  • FaissBackend

  • LlamaIndexBackend

  • DummyBackend

Tous implémentent une API unifiée :

  • retrieve(query, top_k)

  • query(query)

  • astream(query)

  • ping()

Cette normalisation garantit que le RAG ne dépend plus du type d’index sous‑jacent.

PNG - 2.1 Mo

1.3. Rapidité via daemon Pyro5

La v200 introduit un daemon Pyro5 :

  • chargé de maintenir les index en mémoire,

  • exposant une API RPC homogène,

  • permettant un accès rapide depuis n’importe quel worker.

Le client est minimal :

IndexesManager → IndexService → RemoteIndexBackend


Un mécanisme de **fallback local** assure la continuité de service en cas d’indisponibilité du daemon.

### **1.4. Couche interne de normalisation** Une couche interne (`internal/`) garantit :

- la normalisation des résultats des backends, - la conversion des formats hétérogènes en structures standardisées, - la cohérence des données consommées par RagRuntime.

Tous les résultats sont convertis en dictionnaires homogènes :

```python { "text": "...", "score": None, "metadata": {} }

2. Objectif : RAGEngine indépendant d'API externes

2.1. Suppression des dépendances structurelles

La v200 élimine toute dépendance directe à LlamaIndex ( ou autre) dans le moteur RAG :

  • plus de QueryEngine,

  • plus de Node, Document, Response,

  • plus de formats étrangers.

Par exemple, LlamaIndex est encapsulé dans LlamaIndexBackend, qui expose l’API unifiée. Dans l'état actuel du développement, il existe une adaptation à FAISS.

2.2. RAGEngine basé sur une API interne stable

Le moteur RAG (RagRuntime) ne dépend plus :

  • du type d’index,

  • du type de modèle,

  • de LlamaIndex ou FAISS.

Il consomme uniquement l’API unifiée :

  • retrieve()

  • query()

  • astream()

2.3. Normalisation systématique des résultats

Les résultats bruts des backends (souvent des chaînes de caractères) sont systématiquement convertis en objets structurés avant traitement par RagRuntime.

Cela garantit :

  • la stabilité du pipeline,

  • la compatibilité avec les hooks,

  • l’absence d’erreurs liées à des formats hétérogènes.

2.4. Fallback local cohérent

En cas d’indisponibilité du daemon :

IndexService.connect()
    → RemoteIndexBackend (si daemon disponible)
    → LocalIndexBackend (si daemon indisponible)

LocalIndexBackend est un proxy thread‑safe, totalement indépendant du type d’index.

Synthèse

La v200 est une architecture RAG :

  • modulaire, grâce à des services dédiés pour les modèles et les index,

  • performante, via un daemon Pyro5 servant les index en mémoire,

  • normalisée, grâce à une API interne unifiée pour tous les backends,

  • résiliente, via un fallback local automatique,

  • indépendante de LlamaIndex, grâce à l’encapsulation complète dans LlamaIndexBackend,

  • stable, grâce à une couche de normalisation systématique pour RagRuntime.

Elle constitue une base industrielle, cohérente, et extensible pour un pipeline RAG moderne.