Spaces:
Sleeping
Sleeping
ChemLab Virtual (Virtual Labo Chimique)
Application web (Vite/React/TypeScript) de laboratoire de chimie virtuel: tu ajoutes des substances sur un plan de travail (canvas Fabric.js), tu observes le resultat et tu peux sauvegarder/exporter tes experiences. Les observations sont generees par IA via Groq (avec fallback automatique entre plusieurs modeles).
Fonctionnalites
- Page d'accueil + acces au labo (
/et/lab) - Inventaire de substances (categorie, etat, niveau de danger, recherche)
- Plan de travail interactif (Fabric.js): ajout, deplacement, suppression, reset, plein ecran, export PNG/SVG, notes texte
- Gestion de workspaces: multi-experiences, favoris, renommage, import/export JSON, undo/redo (Ctrl+Z / Ctrl+Y)
- Observations: journal des resultats + export CSV
- Temperature: reglage utilise par l'IA pour contextualiser les resultats
- IA pedagogique: resultat d'experience +
Cas d'usage:+ suggestions de melanges a explorer (une seule reponse texte, contraintes de forme)
Stack technique
- Vite (serveur dev sur
http://localhost:8080) - React 18 + TypeScript
- TailwindCSS + shadcn-ui (Radix)
- Fabric.js (canvas)
- Groq API (OpenAI-compatible) pour l'IA
Demarrage (local)
Prerequis: Node.js (recommande: >= 18).
npm install
npm run dev
Scripts utiles:
npm run dev: serveur de dev (Vite)npm run build: build de productionnpm run preview: preview du buildnpm run lint: lint ESLint
Configuration IA (Groq)
- Copier
.env.examplevers.env - Renseigner
GROQ_API_KEY - (Optionnel) definir
GROQ_MODELS(liste ordonnee, separee par des virgules)
Variables:
GROQ_API_KEY: cle Groq (ne pas committer)GROQ_MODELS: liste de modeles a tester dans l'ordre (fallback automatique)
Exemple:
GROQ_API_KEY=...
GROQ_MODELS=llama-3.3-70b-versatile,openai/gpt-oss-120b,openai/gpt-oss-20b,llama-3.1-8b-instant,openai/gpt-oss-safeguard-20b
Notes:
- La cle n'est jamais envoyee au navigateur: le front appelle
POST /api/ai/mix, et le serveur Vite effectue l'appel Groq. - Les modeles contenant
safeguardsont automatiquement exclus de la generation (ils renvoient souvent des refus ou du reasoning sans contenu). Ils peuvent rester dansGROQ_MODELSsans bloquer la generation.
Endpoints (dev/preview)
Ces routes existent uniquement via le middleware Vite (pas en hebergement 100% statique):
GET /api/ai/ping: verifie que le serveur voit la cle et affiche la liste des modeles utilisesPOST /api/ai/mix: genere une observation IA
En production statique, il faut fournir un backend equivalent (Cloudflare Workers, Netlify Functions, serveur Node, etc.) et router /api/ai/* vers ce backend.
Depannage (IA)
Si les observations IA ne se generent pas:
- Verifier
GET /api/ai/ping(presence de la cle, liste des modeles utilises) - Redemarrer le serveur apres changement de
.env - En cas de quota/rate limit, le fallback passe au modele suivant automatiquement (si
GROQ_MODELScontient plusieurs modeles)
Structure du code (principaux fichiers)
src/pages/Index.tsx: landing pagesrc/pages/Lab.tsx: orchestration du labo (workspaces, temperature, observations, IA)src/components/lab/FabricLabCanvas.tsx: canvas + interactions + detection de melangesrc/data/substances.ts: catalogues de substancessrc/data/experimentTemplates.ts: templates d'experiencesserver/aiMixMiddleware.ts: proxy IA (Groq) + fallback multi-modeles
Stockage / sauvegarde
- Les workspaces sont sauvegardes dans
localStorage(navigateur) et peuvent etre exportes/importes en JSON.
Limitations connues
- La “reaction” est une generation textuelle IA (pas un moteur de chimie deterministe).
- L'export video time-lapse depend du support navigateur (MediaRecorder) et reste experimental.