Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Demeter

Assistant RH intelligent — application desktop cross-platform (Tauri v2 · Rust · React)

CI License: AGPL v3 Tauri Rust

Demeter est un assistant IA spécialisé en ressources humaines (fonction publique d'État dans sa configuration actuelle, mais vous pouvez modifier les prompts pour l'adapter à vos besoins), fonctionnant entièrement en local sans service externe — aucun Docker, aucun cloud requis. Le backend Rust/Axum est embarqué dans l'application Tauri v2 et pilote un LLM via n'importe quelle API compatible OpenAI (Albert API, OpenAI, Mistral, Ollama…).

Interface Demeter


Fonctionnalités

Capacité Détail
💬 Chat IA multi-espaces Demeter RH, Recrutement, Congés, Fiches de paie, Formations
📚 RAG (Qdrant) Ingestion PDF/DOCX, recherche sémantique + reranking ; stockage vectoriel via Qdrant local ou distant
🔌 MCP Connexion à des serveurs MCP externes (HTTP Streamable 2025-03-26)
🌐 Recherche web Serveur MCP dédié — activé à la demande via le bouton « Web » ; alias et statut visibles en info-bulle
📄 Génération Word Export .docx depuis le chat en un clic
📊 Graphiques ECharts Blocs ```echarts rendus interactivement
🖼️ Graphiques SVG natifs Blocs ```svg rendus inline avec zoom, copie et téléchargement
📐 Diagrammes Mermaid Flowcharts, séquences, Gantt…
Formules KaTeX Rendu LaTeX inline ($…$) et bloc ($$…$$)
💾 Persistance locale Conversations en SQLite — aucun compte requis
🖥️ Cross-platform Linux · macOS · Windows

Architecture

demeter/
├── frontend/                   ← React 18 + TypeScript + Vite
│   └── src/
│       ├── App.tsx             ← UI principale & gestion de l'état
│       ├── DialogContext.tsx   ← Contexte des dialogues
│       ├── components/
│       │   ├── MarkdownComponents.tsx   ← Rendu Markdown + ECharts + Mermaid + SVG
│       │   ├── IngestionModal.tsx       ← Interface RAG (Qdrant)
│       │   ├── ArtifactsPanel.tsx       ← Panneau Word/artefacts
│       │   ├── PromptsEditorModal.tsx   ← Éditeur d'espaces & prompts
│       │   └── Message.tsx             ← Rendu d'un message
│       ├── hooks/              ← Hooks React (streaming, MCP…)
│       └── utils/              ← docx, text, mermaid-sanitizer, artifacts
│
└── src-tauri/                  ← Backend Rust + config Tauri
    └── src/
        ├── api.rs              ← Endpoints Axum (chat, RAG, MCP, search…)
        ├── db.rs               ← SQLite via tokio-rusqlite
        ├── models.rs           ← Types Serde (Chat, Conversation, Chunk…)
        ├── rag.rs              ← Pipeline RAG Qdrant (retrieve → rerank → inject)
        ├── mcp.rs              ← Client MCP HTTP Streamable
        ├── extract.rs          ← Extraction texte PDF (lopdf) et DOCX (zip+XML)
        ├── spaces.rs           ← Lecture/écriture prompts.yml
        └── lib.rs              ← Setup Tauri + démarrage serveur HTTP

Stack technique

Couche Technologie
Desktop shell Tauri v2
Backend Rust · Axum · tokio
Base de données SQLite via tokio-rusqlite
Stockage vectoriel Qdrant local ou distant
HTTP client reqwest (rustls, HTTP/2)
Frontend React 18 · TypeScript · Vite
Rendu react-markdown · KaTeX · Mermaid · ECharts · SVG natif
Documents docx (génération Word)

Prérequis

Rust ≥ 1.77

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

Node.js ≥ 18

nvm install 20 && nvm use 20

Tauri CLI v2

cargo install tauri-cli --version "^2"
# ou via npm :
npm install -g @tauri-apps/cli@^2

Qdrant

Qdrant est le moteur de recherche vectorielle utilisé par Demeter pour le RAG. Installez-le localement :

# Docker (recommandé)
docker run -d -p 6333:6333 -p 6334:6334 \
  -v $(pwd)/qdrant_storage:/qdrant/storage \
  qdrant/qdrant

# ou binaire natif — voir https://qdrant.tech/documentation/guides/installation/

L'URL par défaut est http://localhost:6333. Vous pouvez pointer vers une instance distante via le champ URL Qdrant dans les paramètres ou la variable d'environnement QDRANT_URL.

Dépendances système

Linux (Debian/Ubuntu)

sudo apt update && sudo apt install -y \
  libwebkit2gtk-4.1-dev libgtk-3-dev \
  libayatana-appindicator3-dev librsvg2-dev \
  patchelf build-essential

macOSxcode-select --install

Windows — aucune dépendance supplémentaire (WebView2 inclus avec Windows 10/11).


Démarrage rapide

git clone https://github.com/<votre-org>/demeter.git
cd demeter

cd frontend && npm install && cd ..
cargo tauri dev

L'interface s'ouvre automatiquement. Le serveur Rust écoute sur http://localhost:45678.

Build production

cd frontend && npm install && npm run build && cd ..
cargo tauri build

Les installateurs sont générés dans src-tauri/target/release/bundle/ :

  • Linux : .deb + .AppImage
  • macOS : .dmg
  • Windows : .msi + .exe

Configuration

Connexion au LLM

Au premier lancement, ouvrez Paramètres (⌘, / Ctrl+,) et renseignez :

  • Endpoint — URL de l'API compatible OpenAI
    ex. https://albert.api.etalab.gouv.fr/v1
  • Clé API — votre token Bearer
  • Modèle — identifiant du modèle
    ex. meta-llama/Llama-3.1-8B-Instruct

Connexion Qdrant

Dans les Paramètres, section RAG :

  • Clé API Qdrant — laissez vide si votre instance n'est pas sécurisée ; entrez une clé admin brute ou un JWT pour les instances protégées
  • URL Qdrant — laissez vide pour utiliser http://localhost:6333 (défaut), ou saisissez l'URL de votre instance distante

Si votre clé Qdrant est un JWT (commence par eyJ), vous pouvez également configurer des tokens par collection pour un accès granulaire en lecture/écriture.

Variables d'environnement

Variable Défaut Description
QDRANT_URL http://localhost:6333 URL de l'instance Qdrant
QDRANT_API_KEY (vide) Clé d'accès Qdrant (admin ou JWT)
EMBEDDING_MODEL BAAI/bge-m3 Modèle d'embedding Albert
EMBEDDING_DIM 1024 Dimension des vecteurs
RERANK_MODEL BAAI/bge-reranker-v2-m3 Modèle de reranking
RAG_TOP_K 20 Chunks récupérés avant reranking
RAG_TOP_RERANK 5 Chunks conservés après reranking
RAG_MIN_SCORE 0.15 Score minimum (filtre qualité)
RUST_LOG demeter=info Niveau de log (debug, info, warn)

Espaces & Prompts

Les espaces sont configurés dans src-tauri/prompts.yml (embarqué dans le binaire, copié au premier lancement dans le répertoire de données utilisateur). L'éditeur intégré (Espaces → ⌘E / Ctrl+E) permet de les modifier sans toucher au YAML.


Données persistées

OS Chemin
Linux ~/.local/share/Demeter/
macOS ~/Library/Application Support/Demeter/
Windows %APPDATA%\Demeter\
  • conversations.db — SQLite des conversations
  • prompts.yml — configuration des espaces

RAG — Ingestion de documents

  1. Lancez Qdrant (http://localhost:6333 par défaut)
  2. Ouvrez Ingestion RAG (⌘R / Ctrl+R)
  3. Créez ou sélectionnez une collection Qdrant
  4. Déposez vos fichiers PDF, DOCX, TXT ou Markdown
  5. Activez le RAG dans une conversation via le bouton 📚

Pipeline : extraction texte → chunking → embeddings (Albert) → stockage Qdrant → reranking (BGE) → injection contexte.

Note : les valeurs de chunk sont exprimées en caractères (et non en tokens).
Les valeurs par défaut sont chunk_size = 2048 et chunk_overlap = 0.

Un indicateur en temps réel (vert/rouge) dans la modale RAG signale l'état de la connexion Qdrant.


Rendu graphique

Demeter supporte plusieurs formats de visualisation directement dans le chat :

  • ECharts — blocs ```echarts avec JSON de configuration
  • SVG natif — blocs ```svg rendus inline avec barre d'outils (copie presse-papier, téléchargement .svg)
  • Mermaid — flowcharts, diagrammes de séquence, Gantt, etc.
  • KaTeX — formules mathématiques inline et bloc

MCP — Outils externes

Demeter supporte le Model Context Protocol en transport HTTP Streamable (spec 2025-03-26), compatible avec mcp.data.gouv.fr et tout serveur FastMCP stateless.

Ajoutez des serveurs MCP dans les paramètres. Chaque serveur peut recevoir un alias affiché dans l'interface. Les outils disponibles sont découverts automatiquement et les statuts de connexion sont visibles en info-bulle au survol des boutons MCP et Web.

Le bouton Web active un serveur MCP dédié à la recherche web (configurable séparément) ; il n'est inclus dans les appels que lorsqu'il est allumé.


Contribution

Les contributions sont les bienvenues ! Consultez CONTRIBUTING.md pour les détails.

# Fork → branche
git checkout -b feat/ma-fonctionnalite

# Vérifications avant PR
cargo fmt && cargo clippy
cd frontend && npm run typecheck

Licence

AGPL-3.0 — © 2026 Pierre Cougetktulu.analog@gmail.com

About

Assistant IA souverain multiplateforme intégrant Albert, les API compatibles OpenAI, le RAG avec Qdrant et les serveurs MCP.

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages