Application prototype d'intelligence artificielle open-source pour les professions du Droit. Conçue par l'Association DataRing
Vos clés. Vos données. Votre infrastructure.
- Le problème
- Ce que Louis fait
- Le manifeste
- Architecture
- Démarrage
- Configuration
- État réel des fonctionnalités
- Stack technique
- Roadmap
- Sécurité
- Contribuer
- Licence
Les outils d'IA juridique grand public posent un dilemme inacceptable pour la profession du droit : pour bénéficier des modèles les plus capables, il faut envoyer les pièces de ses clients chez un éditeur de SaaS, le plus souvent américain, dont les engagements de confidentialité s'arrêtent là où commencent ses obligations de coopération avec une autorité étrangère.
L'alternative — renoncer à l'IA — n'est pas tenable. Les délais compressent, les volumes documentaires explosent, les confrères équipés vont plus vite.
Le droit est l'art de rendre a chacun le sien, l'outillage du droit doit rester nôtre. L'outil du droit s'est éloigné de l'avocat, du juriste, de l'institution : Hébergé ailleurs calculé ailleurs, régi par d'autres droits. Et a force de "prêt a emploi", la création intellectuelle se délègue par fragments à des machines opérées par d'autres>
Louis est une réponse à cette dépossession : une application web open source conçue pour les professions du droit, auto-hébergeable, agnostique de fournisseur distribuée sous licence GNU AGPL 3.0 or later.
Louis ne vend pas d'IA juridique, n'est pas un produit mais un prototype de solutions libres dans le bac a sable d'intérêt général Data Ring : Un objet de travail collectif mis a disposition pour être éprouvé, critiqué, approprié.
Le Lab IA de Data Ring est un bac a sable, un espace ouvert où l'on essaie, où l'on rate , où l'on recommence où l'on apprend ensemble à habiter techniquement la Technologie. La souveraineté en droit ne se décrète pas elle s'arbitre: Regagner pour créer, pour retrouver la maitrise de ses propres worflows, agents, sa propre forme d'exercice.
C'est un objet de travail mis à l'épreuve : la numérotation v0.1 dit explicitement que le code est en exploration, que l'architecture peut évoluer, que les interfaces ne sont pas stabilisées: C'est une activité de recherche et de logiciel libre sans conterpartie commerciale ni engagement juridique ou opérationnel.
Vous orchestrez sous votre contrôle vos propres fournisseurs d'IA et vos propres sources juridiques. Aucun appel ne transite par DataRing. Aucune donnée n'est partagée avec qui que ce soit hors de votre infrastructure. le deployeur de louis est responsable de traitement unique. Vous decidez.
Louis n'est pas un assistant conversationnel de plus. C'est un orchestrateur : une architecture où plusieurs agents IA — chacun spécialisé (recherche, rédaction, vérification, citation) — coopèrent sous le pilotage d'un agent maître pour produire une réponse tracée de bout en bout.
┌─ Orchestrateur ────────────────────────────────────────┐
│ Décide qui fait quoi, synthétise, contrôle │
└──┬─────────────────────────────────────────────────────┘
│
├─▶ Agent Recherche (Perplexity, Albert, …)
├─▶ Agent Légifrance (DataRing MCP — verbatim sourcé)
├─▶ Agent Rédaction (Mistral, GPT, Claude…)
├─▶ Agent Relecteur (anti-hallucination · déontologie)
└─▶ Agent Citateur (vérifie chaque référence)
Chaque agent utilise votre clé, sur le modèle de votre choix. La hiérarchie est déclarée dans un fichier de configuration lisible, versionnable, auditable. Chaque réponse est accompagnée du journal des agents qui y ont contribué — un véritable « audit trail » opposable.
État actuel (v0.1) : un seul agent (
default-chat) tourne derrière l'orchestrateur. La couche d'abstraction est en place ; les agents spécialisés arrivent en v0.2.
Posez une question en français à n'importe lequel des grands modèles (Mistral, Anthropic, OpenAI, Albert/Etalab, Scaleway, OVH, ou un modèle auto-hébergé via Ollama / vLLM). Louis enchaîne automatiquement les appels aux outils dont le modèle a besoin : recherche dans Légifrance via PISTE, recherche de société dans Pappers, recherche sémantique dans vos propres documents (RAG pgvector).
Vous : Que dit la jurisprudence sur la rupture brutale d'une
relation commerciale établie depuis 8 ans dans le BtoB ?
Louis : [appelle legifrance_search avec query="rupture brutale
relation commerciale L442-1"]
[appelle search_documents pour vérifier vos précédents]
Le régime applicable est l'article L. 442-1, II du Code
de commerce. La durée du préavis raisonnable s'apprécie
au regard de l'ancienneté (Cass. com. 6 sept. 2011…
Quand Louis cite une jurisprudence ou un article de votre dossier, le DocPanel s'ouvre sur la droite. Le PDF s'affiche sans toolbar navigateur. Les DOCX sont rendus en HTML structuré ou en PDF Gotenberg pour préserver la mise en page Word exacte.
Demandez « rédige une mise en demeure pour... » : Louis appelle
generate_document, produit un DOCX propre (titres typés, listes,
tableaux, sauts de page), génère un PDF de preview, et le persiste
dans votre stockage S3.
Pour les retouches, Louis utilise edit_document avec un format
::before / ::after / ::reason rendu côté UI comme une carte
accept/reject.
Pour la due diligence, importez N documents et définissez M colonnes
(« Date de signature », « Loi applicable », « Clause de non-concurrence ? »).
Louis remplit la grille N×M en parallèle avec generateText({ output: Output.object }) du AI SDK et un schéma Zod par colonne.
Sauvegardez les prompts récurrents du cabinet (résumé d'arrêt, analyse de clause, comparaison de contrats, note de synthèse, due diligence rapide). Cinq workflows par défaut sont importables au premier login.
Chaque réponse incrémente un compteur de tokens et un coût en €/$ par modèle. La pill du chat affiche en temps réel le coût du mois. Aucune surprise en fin de période.
Au sens du droit et au sens de le technique
-
Vos clés, pas les nôtres. Louis fonctionne en Bring Your Own Key. Vous branchez vos comptes Mistral, Scaleway, OVH, Anthropic, OpenAI, Albert ou un modèle auto-hébergé. Vous choisissez votre fournisseur Aucun appel IA ne transite par DataRing.
-
Vos connecteurs sous vos accés, pas les nôtres. PISTE (Légifrance), Pappers — vous configurez vos accès, vos quotas, vos contrats. Louis orchestre, n'intermédie pas.
-
Vos données, chez vous sur votre infra . PostgreSQL local, pgvector local, fichiers chiffrés sur votre stockage (S3 compatible : MinIO, Scaleway, OVH, AWS). Docker Compose en une commande.
-
Open-source AGPL-3.0. Code lisible, modifiable, auditable. Toute amélioration apportée à une instance publique de Louis doit revenir à la communauté. Il n'y aura jamais de version « premium » cachée du moteur.
-
Souverain par défaut. Les fournisseurs européens sont en première ligne dans l'interface ; les fournisseurs américains restent disponibles mais explicitement étiquetés. Vous choisissez où va chaque requête. Le choix vous appartient selon votre approche par les risques et envionnement de travail
-
Autonomie creative. Vous experimentez, vous etes acteur ou auteurs de vos propres outils selon differents niveaux d'autonomie, soit: A. llm externe sous votre propre cle, pour des usages non couverts par le secret professionel, ou pour lequel un accord de sous traitance RGPD DPA est conclu et documenté, vous maitrisez vos prompts et vos workflows mais pas le modele B. llm souverain en API, vos clé, vos données transitent par un prestataire UE sous DPA. le Risque d'extraterritorialité (Cloud Act FISA 702) est minimisé sans etre nul, il depends de la chaine capitalistique et infrastructurelle du prestataire a examiner au cas par cas. Vous orchestrez sur un socle juridiquement europeen. C. llm hebergé en open weight: vous executez un modele (qwen, llamma, etc...) sur votre propre infrastructure, aucune donnee ne quitte votre perimetre. Vous devenez auteur de vos propres outils.
Louis permet de tester et de combiner ces 3 voies par usage.
┌──────────────────────────────────────────────────────┐
│ Navigateur │
│ └─ Next.js 16 — App Router · Server Components │
└──────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────┐
│ Louis (votre serveur) │
│ ├─ PostgreSQL + pgvector RAG, sessions, audit log │
│ ├─ Redis cache, rate-limit │
│ ├─ Object storage vos documents (chiffrés) │
│ ├─ Gotenberg DOCX → PDF fidèle │
│ └─ MCP gateway connecteurs juridiques │
└──────────────────────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────────┐ ┌─────────────────────────┐
│ Fournisseurs IA │ │ Connecteurs juridiques │
│ (vos clés) │ │ (vos accès) │
│ │ │ │
│ Mistral · Albert │ │ PISTE · Légifrance │
│ Scaleway · OVH │ │ Pappers │
│ Anthropic · OpenAI │ │ + serveurs MCP custom │
└─────────────────────┘ └─────────────────────────┘
Pour le détail des flux et le modèle de données, voir
docs/architecture/overview.md
et docs/architecture/data-model.md.
| Composant | Version minimale | Vérification |
|---|---|---|
| Node.js | 24 LTS | node -v |
| Docker | 24 + Compose v2 | docker compose version |
| Disque libre | ~5 Go (images Docker + pgvector + dépendances) | df -h . |
| Clé Mistral | requise pour le RAG (les embeddings sont fournis uniquement par Mistral en v0.1) | console.mistral.ai |
Pour les autres modèles (Anthropic, OpenAI, Scaleway, OVH, Albert), les clés sont optionnelles et configurables une fois Louis lancé.
1. Cloner et préparer les secrets
git clone https://github.com/Association-DataRing/Louis.git
cd louis
cp .env.example .env
# Deux secrets cryptographiques sont obligatoires.
# Générés une fois, jamais partagés, jamais committés.
echo "AUTH_SECRET=$(openssl rand -base64 32)" >> .env
echo "ENCRYPTION_KEY=$(openssl rand -base64 32)" >> .env
⚠️ La rotation deENCRYPTION_KEYinvalide toutes les clés provider stockées. À choisir une bonne fois, et à versionner dans votre gestionnaire de secrets (Vault, AWS Secrets Manager, Scaleway KMS).
2. Lancer l'infrastructure locale
docker compose up -dQuatre conteneurs démarrent :
| Service | Rôle | Port hôte |
|---|---|---|
louis-postgres |
PostgreSQL 16 + extension pgvector | 5433 |
louis-redis |
Cache, rate-limit | 6379 |
louis-minio |
Stockage objet S3-compatible (dev) | 9000 / 9001 |
louis-gotenberg |
LibreOffice headless pour DOCX → PDF | 3001 |
3. Installer les dépendances applicatives
npm installSi vous modifiez
package.jsonplus tard, régénérez le lockfile avecnpm install --include=optionalpour ne pas casser la CI Linux (cf.CONTRIBUTING.md).
4. Initialiser le schéma de base et créer un admin
npm run db:setup
# Génère un mot de passe admin fort (≥ 12 caractères).
# Le seed refuse les passwords triviaux.
ADMIN_PW="$(openssl rand -base64 16)"
echo "Admin password : $ADMIN_PW"
ADMIN_EMAIL=admin@louis.local \
ADMIN_PASSWORD="$ADMIN_PW" \
npm run db:seed5. Démarrer Louis
npm run dev # mode développement (http://localhost:3000)
# ou
npm run build && npm start # mode productionConnectez-vous avec admin@louis.local et le mot de passe affiché à
l'étape 4.
| Test | Commande | Attendu |
|---|---|---|
| Liveness | curl http://localhost:3000/api/health |
{"status":"ok",...} |
| Readiness | curl http://localhost:3000/api/ready |
{"status":"ready",...} (503 si Postgres ou Redis down) |
| Login | naviguer sur /login, taper les credentials |
redirection /dashboard |
| Palette globale | dans l'app, presser ⌘K (macOS) ou Ctrl+K |
ouverture de la palette de navigation |
Pour une instance avec workflows importés + projet exemple + arborescence documents :
ADMIN_PASSWORD="$(openssl rand -base64 16)" npm run demoUne fois connecté, allez sur Settings → Providers pour ajouter vos
clés API. Chaque clé est chiffrée AES-256-GCM (IV de 12 octets aléatoire
par chiffré, tag d'authentification 16 octets, clé dérivée
de ENCRYPTION_KEY via scrypt).
Sept types de providers sont supportés :
| Provider | Souveraineté | Embeddings | Note |
|---|---|---|---|
| Mistral | 🇫🇷 FR | ✅ | Recommandé. Le seul à fournir aussi les embeddings du RAG en v0.1. |
| Scaleway | 🇫🇷 FR | — | OpenAI-compatible. |
| OVHcloud | 🇫🇷 FR | — | Endpoints AI par modèle. |
| Albert (Etalab) | 🇫🇷 FR | — | Modèles souverains de l'État français. |
| Anthropic | 🇺🇸 US | — | Claude. SDK natif. |
| OpenAI | 🇺🇸 US | — | GPT. SDK natif. |
| OpenAI-compatible | varie | varie | Ollama, vLLM, llama.cpp, ou tout endpoint compatible. |
Badge FR / UE / US affiché partout dans l'interface : sidebar, header, sélecteur de modèle.
Settings → Connecteurs permet de brancher PISTE (api.gouv.fr) et
Pappers. Vous configurez vos propres client_id / client_secret
PISTE et votre clé Pappers ; Louis se charge de la rotation des tokens
OAuth et de l'invalidation au 401.
Louis est MCP-native. Vous pouvez connecter vos propres serveurs Model Context Protocol par utilisateur via Settings → MCP. Les tools exposés deviennent disponibles automatiquement dans les conversations.
Voir docs/configuration/providers.md
et docs/configuration/connectors.md
pour la référence complète.
Alpha. Louis se lance, s'installe et exécute les fonctionnalités 🟢 ci-dessous. Quelques zones sont 🟡 partielles ou ⚪ planifiées. La source de vérité à jour est
docs/feature-status.md.
- Chat streaming multi-tour, multi-provider, persistance Postgres
- Tool calling : Légifrance (via PISTE), Pappers, recherche RAG dans vos documents (pgvector)
- DocPanel side-by-side — PDF natif sans toolbar parasite, DOCX rendu fidèle via Gotenberg
- Cmd+K — palette de commandes globale (conversations, projets, documents, workflows, navigation)
- Export Markdown et PDF d'une conversation
- Upload PDF / DOCX / texte jusqu'à 25 Mo, extraction serveur, cap à 500 000 caractères
- Hiérarchie de dossiers, versioning v1/v2/v3, projets clients, move-to-project depuis chat / conversation / document
- Analyses tabulaires style Excel — N colonnes prompts × M
documents,
generateText({ output })+ Zod, traitement asynchrone vianext/server::after - Workflows — bibliothèque de prompts cabinet réutilisables, 5 workflows par défaut importables
- Suivi des coûts par modèle (€/$), mensuel + all-time
- Génération de documents —
generate_document(DOCX + PDF preview Gotenberg) avec schéma typé,edit_documentavec tracked edits accept/reject - BYOK chiffré — clés AES-256-GCM, badges souveraineté FR/UE/US
- Connecteurs juridiques — PISTE OAuth (Légifrance), Pappers
- MCP-native — serveurs MCP custom par utilisateur
- Multi-utilisateur — NextAuth v5 Credentials + RBAC admin/member
- Journal d'audit append-only sur les opérations sensibles (auth, users, providers, connecteurs, documents, cabinet)
- Docker Compose une commande
- Sécurité — rate-limit Redis, headers HTTP OWASP, audit log, SSL Postgres strict, sanitization filenames
- Smoke tests Playwright (11 routes principales) + unit tests Vitest (15 tests sur crypto et rate-limit)
- Citations cliquables avec surlignage de la cible (propagation
targetTextok, UX du highlight à valider par type de PDF)
- Sub-APIs PISTE étendues : Judilibre (Cour de cassation), JADE (Conseil d'État), INPI, BODACC
- Project sharing par email entre membres du cabinet
- Internationalisation anglaise
- Veille juridique automatisée — surveillance Légifrance / JADE / BODACC
- Mode SecNumCloud-ready — checklist et configuration documentée
- CSP nonces (durcissement script-src)
- Framework : Next.js 16 — App Router, Server Components, React
Compiler, output
standalone - UI : shadcn/ui · Tailwind CSS v4 · Tabler Icons · EB Garamond (heading) + Geist Sans (body)
- Base de données : PostgreSQL 16 + pgvector · Drizzle ORM
- Auth : NextAuth v5 — Credentials, sessions JWT signées
- IA : Vercel AI SDK v6, multi-providers
- Cache et rate-limit : Redis 7
- Génération PDF fidèle : Gotenberg (LibreOffice headless HTTP)
- Tests : Vitest (unit) + Playwright (E2E smoke)
- Déploiement : Docker Compose · Node.js 24 LTS · image multi-stage Alpine, user non-root, healthcheck interne
| Milestone | Date cible | Statut |
|---|---|---|
| v0.1 — Fondation publique · orchestrateur mono-agent | 2026-Q2 | 🟡 En cours |
| v0.1.x — Sub-APIs PISTE étendues + sécurité durcie | 2026-Q3 | ⚪ À venir |
| v0.2 — Orchestrateur multi-agents (recherche, rédaction, relecteur, citateur) + pipelines métier | 2026-Q4 | ⚪ À venir |
| v0.3 — i18n, project sharing, config pipeline YAML déclarative | 2027-Q1 | ⚪ À venir |
| v1.0 — Production-ready, documentation complète | 2027 | ⚪ À venir |
Louis est attentif a la protection (clés API providers, identifiants PISTE/Pappers, hash de mots de passe) et est destiné à un environnement de travail soumis au secret professionnel. Il est par construction non garanti et deliberement modeste.
- Politique de divulgation responsable :
SECURITY.md - Modèle de menace :
docs/security/threat-model.md - Rotation des secrets :
docs/security/secret-rotation.md - Sauvegardes chiffrées :
docs/admin/backups.md
Signaler une vulnérabilité : contact@data-ring.net.
Louis est encore jeune. Les contributions code externes seront formellement ouvertes à partir de la v0.2, le temps que les fondations se stabilisent. D'ici là :
- ⭐ Mettre une étoile au dépôt si l'idée vous intéresse
- 💬 Ouvrir une issue pour discuter d'un cas d'usage, d'un connecteur juridique manquant, ou d'une question d'architecture
- 📣 Partager le projet
- Documenter et faire remonter les retours d'experience sur contact@data-ring.net
Voir CONTRIBUTING.md,
CODE_OF_CONDUCT.md et
GOVERNANCE.md.
Louis est porté par l'association DataRing, au sein de son bac a sable Lab IA, avec l'equipe de benevoles passionnes : -France Charruyer, Avocat en Innovation, Technologies avancees et Cybersecurite, -Frederic Ollivier Docteur en Informatique, RSSI et Tech lead Auditor, -Clement GINER , ingenierie IA, developpeur
Les dépendances tierces et leurs licences sont documentées dans
NOTICE.md.
AGPL-3.0-or-later — toute amélioration apportée à une instance publique de Louis doit revenir à la communauté.
« Justitia est constans et perpetua voluntas jus suum cuique tribuendi. »
— Ulpien, Digeste 1.1.10.