Skip to content

Latest commit

 

History

History
72 lines (59 loc) · 3.41 KB

architecture.md

File metadata and controls

72 lines (59 loc) · 3.41 KB

Architecture générale Igora

graph LR;
    Appli_1--> Igora[Igora \n endpoint];
    Appli_2--> Igora;

   LibreOffice(LibreOffice)--> Igora;
    Firefox(Firefox extension) --> Igora;
    ChatApp(Chat Apps\n- BigAgi)--> Igora;
    Appli_3--> Igora;
    Appli_4--> Igora;
    etc[... autres applis métier]--> Igora;
    Igora --> Middlewares[Igora \n Middlewares];
    Middlewares --> LLMs(Customized LLMs)
    LLMs --> Local(Local LLMs\n- node-llama-cpp\n- llama-cpp-python)
    LLMs --> Decentralized(Decentralized LLMs\n- Petals, private IPFS swarm\n- Custom Solutions)
    LLMs --> bigAI[Bigs AI services\n- OpenAi / Gork / Replicate...]
    LLMs --> Gorq[Gorq LPU]
    User -->Appli_1 & Appli_2 & Appli_3 & Appli_4 & Firefox & ChatApp & etc & LibreOffice


Loading

Igora Middlewares (igora-reloaded)

graph TD;
Igora --> Middlewares
Middlewares[Igora Middlewares] --> Authentification[Authentification\n- annuaire\n- habilitation\n- sécurisation\n- verif absence données sensibles]
Middlewares --> Historique[Historique des conversations\n- interapplicatif\n- par utilisateur\n- par service?]
Middlewares --> RAG[RAG¹\n- Code Général des Imôts\n- Documents métiers...]
Middlewares --> Agents[Agents / Equipe de LLM\n- Microsoft Autogen\n- Crewai]


Loading

¹ RAG : génération augmentée de récupération (retrieval-augmented generation)

Task Management

  • synchronisation des tâches basée sur Yjs / Crdt à la façon d'un Kanban
  • Yjs permet de synchroniser (via websocket) des objets javascripts "todos", "prepared", "doing", "done"
  • chaque client peut modifier et écouter ces différents objets
  • Yjs Awareness permet de connaître la présence des différents acteurs connectés
  • Worker est un Worker LLM dont le rôle est d'executer l'inférence LLM (représenté par Customized LLMs sur le premier diagram). Le système peut utiliser plusieurs workers indépendants

non-stream task

sequenceDiagram;
    Worker ->>YjsAwareness: Annonce as state"ready"
    Client ->>YjsAwareness: Annonce
    Client ->>Yjs-Todo: create Task with Task_id in "Todo"
    Broker ->>Yjs-Todo: read "Todo" and get new Task
    Broker ->>YjsAwareness: Check Available Worker
    Broker ->>Worker: Change worker state as "working" with Task_id
    Broker ->>Yjs-Prepared: Move Task with Task_id from "Todo" to "Prepared"
    Worker ->>Yjs-Prepared: Get Task with Task_id
    Worker ->>Yjs-Doing: Move Task with Task_id from "Prepared" to "Doing" and Work on it, update its data
    Note right of Worker: Worker process Task with Task_id
    Worker ->>Yjs-Done: Move Task with Task_id from "Doing" to "Done"
    Worker ->>YjsAwareness: Annonce as state"ready"
    Client ->>Yjs-Done: Retrieve Result of the Task execution

Loading

stream task

Stream task works as "non-stream task" but worker put each chunk of result in "Doing" task and client get it inthere