Assistant RH intelligent — application desktop cross-platform (Tauri v2 · Rust · React)
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…).
| 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 |
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
| 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) |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/envnvm install 20 && nvm use 20cargo install tauri-cli --version "^2"
# ou via npm :
npm install -g @tauri-apps/cli@^2Qdrant 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.
Linux (Debian/Ubuntu)
sudo apt update && sudo apt install -y \
libwebkit2gtk-4.1-dev libgtk-3-dev \
libayatana-appindicator3-dev librsvg2-dev \
patchelf build-essentialmacOS — xcode-select --install
Windows — aucune dépendance supplémentaire (WebView2 inclus avec Windows 10/11).
git clone https://github.com/<votre-org>/demeter.git
cd demeter
cd frontend && npm install && cd ..
cargo tauri devL'interface s'ouvre automatiquement.
Le serveur Rust écoute sur http://localhost:45678.
cd frontend && npm install && npm run build && cd ..
cargo tauri buildLes installateurs sont générés dans src-tauri/target/release/bundle/ :
- Linux :
.deb+.AppImage - macOS :
.dmg - Windows :
.msi+.exe
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
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.
| 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) |
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.
| OS | Chemin |
|---|---|
| Linux | ~/.local/share/Demeter/ |
| macOS | ~/Library/Application Support/Demeter/ |
| Windows | %APPDATA%\Demeter\ |
conversations.db— SQLite des conversationsprompts.yml— configuration des espaces
- Lancez Qdrant (
http://localhost:6333par défaut) - Ouvrez Ingestion RAG (⌘R / Ctrl+R)
- Créez ou sélectionnez une collection Qdrant
- Déposez vos fichiers PDF, DOCX, TXT ou Markdown
- 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 sontchunk_size = 2048etchunk_overlap = 0.
Un indicateur en temps réel (vert/rouge) dans la modale RAG signale l'état de la connexion Qdrant.
Demeter supporte plusieurs formats de visualisation directement dans le chat :
- ECharts — blocs
```echartsavec JSON de configuration - SVG natif — blocs
```svgrendus 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
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é.
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 typecheckAGPL-3.0 — © 2026 Pierre Couget — ktulu.analog@gmail.com
