Guide de démarrage
Simmetric Chat est une plateforme de chat IA local-first et capable de fonctionner hors connexion (air-gap) : elle fonctionne sans accès aux services cloud externes, avec un LLM local (Ollama), des embeddings locaux (Xenova) et une base vectorielle local…
Simmetric Chat est une plateforme de chat IA local-first et capable de fonctionner hors connexion (air-gap) : elle fonctionne sans accès aux services cloud externes, avec un LLM local (Ollama), des embeddings locaux (Xenova) et une base vectorielle locale (LanceDB). Elle peut toutefois utiliser des fournisseurs cloud (OpenAI, Anthropic, OpenRouter) et une base vectorielle distante (Qdrant) lorsqu'ils sont configurés.
Prérequis
- Node.js ≥ 24 et pnpm 11.24.0 (le gestionnaire du monorepo ; `corepack enable && corepack prepare [email protected] --activate`)
- PostgreSQL 16 (base de données principale)
- Ollama (optionnel mais recommandé pour le LLM local) - https://ollama.com
- Docker + Docker Compose (pour le déploiement conteneurisé, voir 09 - Deployment)
Vérification :
node -v && pnpm -v && psql --versionInstallation (développement local)
git clone <repo> simmetric-chat
cd simmetric-chat
pnpm installLe monorepo utilise pnpm workspaces + Turborepo. Les packages sont dans packages/ : shared, server, frontend, collector, widget, plus l'application desktop src-tauri/.
Variables d'environnement
Tous les packages lisent le `.env` à la racine du dépôt (le fichier de configuration runtime unique ; l'ancien niveau de .env par package a été supprimé : précédence process.env > .env racine > valeurs par défaut du code). Créez le fichier minimal :
cp .env.example .envSecrets obligatoires (JWT_SECRET, COLLECTOR_SECRET) et clé widget :
JWT_SECRET=$(openssl rand -hex 32)
COLLECTOR_SECRET=$(openssl rand -hex 32)
WIDGET_API_KEY=$(openssl rand -hex 32)
DATABASE_URL=postgresql://simmetricchat:simmetricchat@localhost:5432/simmetricchat
LLM_PROVIDER=ollama
LLM_MODEL=gemma4:latest
OLLAMA_BASE_URL=http://localhost:11434WIDGET_API_KEY est requise par le service widget (son propre schéma Zod fait sortir le processus sans elle) ; le serveur l'enregistre comme clé API du compte widget-service au démarrage (idempotent). Optionnels en développement : API_KEY_HMAC_SECRET (les clés API sk- restent inutilisables tant qu'il n'est pas défini) et ENCRYPTION_KEY (repli scryptSync(JWT_SECRET) ; requis en production). LICENSE_KEY absent = build Community.
Tableau complet des variables d'environnement : 03 - Configuration.
Base de données
Créez la base PostgreSQL (ex. docker compose -f docker/docker-compose.infra.yml up -d postgres), puis générez le client Prisma, appliquez les migrations et le seed :
pnpm db:generate # génère le client Prisma (+ correctif symlink Prisma 7/pnpm)
pnpm --filter server db:migrate # applique les migrations (interactif)
pnpm --filter server db:seed # rôles par défaut (Admin, Superuser, User), permissions, config, templatesAlternative au seed manuel : sur une base vide, le frontend affiche l'assistant de configuration en 4 étapes (admin, fournisseur LLM, base vectorielle) - ou le serveur auto-seede l'admin de bootstrap (SEED_BOOTSTRAP_ADMIN=true par défaut, configurable via SEED_ADMIN_USERNAME / SEED_ADMIN_PASSWORD / SEED_ADMIN_EMAIL, valeurs par défaut admin / admin123 / [email protected] avec mustChangePassword=true). L'auto- enregistrement est désactivé par défaut (ALLOW_REGISTRATION=false) : un admin crée les utilisateurs depuis Settings ou via POST /api/auth/admin-register.
Démarrage en développement
Une seule commande lance tous les services via Turborepo :
pnpm devPorts par défaut :
| Service | Port | Description |
|---|---|---|
| frontend | 5173 | SPA Vite (React 19), proxy /api → server |
| server | 3000 | API Express + Swagger sur /api-docs |
| collector | 3210 | Microservice d'ingestion de documents |
| widget | 3211 | Service widget embarquable (Preact) |
Ouvrez http://localhost:5173, connectez-vous avec admin / admin123, changez le mot de passe.
Si Ollama n'est pas en cours d'exécution, les conversations échouent avec une erreur de
connexion. Téléchargez un modèle avec ollama pull gemma4:latest && ollama serve, ouconfigurez un fournisseur cloud dans Settings → Providers.
Visite rapide de l'interface
- Sidebar - groupes filtrés par rôle : Overview (dashboard), Chat (chat, projects, workspaces), Knowledge (documents, base de connaissances, uploads), Platform (widgets, marketplace, analytics - admin), System (journal d'événements, SSO - admin/enterprise). Les entrées suivent les 13 sections de menu RBAC.
- Chat - streaming token par token, sélection de modèle par conversation (
Cmd+Kpalette), comparaison côte à côte (Cmd+Shift+M), citations RAG, commande/model. - Documents - upload par glisser-déposer (PDF, DOCX, XLSX, PPTX, TXT, MD, CSV, images avec OCR), statut
pending → processing → completed → failed. - Settings - 5 onglets principaux (Profil, Fournisseurs LLM, Apparence, Sécurité, Avancé) imbriquant les sous-sections : Providers, LLM & Embedding, Vector DB, API Keys, Roles, Users, MCP Connections, Maintenance, Backups, DLP, Widget (page dédiée), OCR, etc.
- Maintenance - réindexation RAG en un clic après un changement de modèle d'embedding.
Premiers pas recommandés
- Configurez un fournisseur - Settings → Providers : ajoutez Ollama (local) ou OpenAI/Anthropic.
- Créez un workspace et un projet - les documents et conversations sont limités au workspace.
- Chargez un document - Documents → upload ; attendez le statut
completed. - Discutez - ouvrez une conversation dans le workspace et posez des questions sur le document (RAG hybride).
- (Admin) Explorez le marketplace - installez un serveur MCP pour étendre l'agent avec des outils.
Prochaines étapes
- Comprendre le fonctionnement interne : 02 - Architecture
- Toutes les variables d'environnement et feature flags : 03 - Configuration
- Intégrer la chat sur votre site : 06 - Widget Integration