Files
open-school/MEMORY.md
2026-04-25 19:54:39 +02:00

4.9 KiB

Memoire Projet

Contexte

Ce projet est un POC de professeur virtuel pour enfants, avec:

  • frontend React + Vite
  • backend FastAPI
  • PostgreSQL pour les donnees eleve
  • Redis present dans la stack
  • integration OpenAI pour reponses texte et transcription audio

Points Importants

  • Le frontend appelle l'API via le prefixe /api.
  • Le backend expose une route POST /transcribe pour la transcription audio.
  • La route /transcribe utilise UploadFile, donc python-multipart est requis dans le backend.
  • Le backend a un socle d'authentification avec comptes users, roles student, teacher, maintenance.
  • Le compte admin/prof initial est seede depuis .env via ADMIN_USERNAME et ADMIN_PASSWORD.
  • Le login pose un cookie HTTP-only professeur_top_session et renvoie aussi un token bearer.
  • Le vrai docker-compose.yml de production n'est pas dans ce repo. Il est situe un niveau au-dessus sur le serveur.
  • La conf nginx reelle route:
    • /api/ vers tutor-backend:8000
    • / vers tutor-frontend:3000

Dictée Vocale

  • L'ancien bouton de dictee marchait en mode manuel avec MediaRecorder.start() puis stop().
  • Le mode actuel est un mode mains libres:
    • activation via un clic utilisateur
    • enregistrement automatique
    • detection du silence
    • transcription automatique
    • envoi automatique du message
  • Firefox s'est montre capricieux avec la mesure temps reel via AnalyserNode.
  • La solution retenue s'appuie sur un traitement plus direct du flux audio pour determiner le niveau sonore.
  • L'ecoute se rearme automatiquement apres:
    • la transcription/envoi du message eleve
    • la fin de lecture vocale du professeur

Voix du Professeur

  • L'ancien systeme de voix navigateur a ete remplace par une vraie TTS OpenAI.
  • Le backend expose maintenant:
    • GET /tts/profiles pour lister les profils de voix
    • POST /tts pour generer un MP3 a partir d'un texte et d'un profile_id
  • Les profils actuels sont:
    • rigolote
    • petillante
    • douce
    • sobre
  • Chaque profil TTS definit:
    • une voix OpenAI
    • une vitesse
    • des instructions de style vocal
  • Le frontend ne depend plus de speechSynthesis pour la voix sortante.
  • Le choix de voix est memorise dans localStorage avec la cle professeur-top-tts-profile.
  • La lecture audio se fait via un blob MP3 retourne par le backend.
  • Le mode micro auto doit continuer a se re-armer apres la fin de lecture du MP3.

Identite Produit

  • Le personnage et le nom visibles dans le frontend ont ete renommes de ProfAmi vers Professeur TOP.
  • Le nouvel avatar image est stocke dans:
    • frontend/src/assets/professeur-top.png
  • Le composant avatar React utilise maintenant l'image raster au lieu du visage CSS/SVG precedent.
  • Le backend a aussi ete aligne dans le prompt systeme et le message de debut de session avec le nom Professeur TOP.

Notes de Session 2026-04-24 21:58:39 +02:00

  • Repo clone dans c:\DataS\OpenSquared\OpenSchool\ProfTop.
  • safe.directory Git ajoute globalement pour ce dossier a cause d'un mismatch d'ownership Windows.
  • Image utilisateur face.png integree dans le frontend sous frontend/src/assets/professeur-top.png.
  • Libelles assistant remplaces par Professeur TOP dans l'UI.
  • README mis a jour pour refleter la TTS OpenAI au lieu de la voix navigateur.
  • Le frontend n'a pas encore ete verifie par build local car frontend/node_modules est absent.
  • Lors d'un prochain demarrage, penser a installer les dependances frontend avant validation finale.
  • La TTS OpenAI suppose une OPENAI_API_KEY valide cote backend.

Points de Vigilance

  • Les erreurs WebSocket Vite/HMR sur wss://prof.open-squared.tech/... sont du bruit de dev tant que le frontend tourne via Vite derriere nginx.
  • Ces erreurs ne sont pas la cause principale si /api/* renvoie des 502 ou si le micro se comporte mal.
  • En cas de 502 sur /api/*, verifier d'abord docker logs tutor-backend.
  • Pour tester l'auth locale actuelle: .env contient ADMIN_USERNAME=admin et ADMIN_PASSWORD=admin; a changer avant tout usage partage.

Plan de Dev Acces Eleve / Admin

  1. Socle comptes et roles: table users, hash password, seed admin depuis .env, login, session courante.
  2. Separation UI: LoginPage, StudentApp, AdminApp, composants partages.
  3. Conversation persistante: endpoints de lecture messages, puis sessions et rattachement des messages/tentatives.
  4. UI eleve sans scroll: Professeur TOP en haut, log de seance a gauche, derniere instruction au centre, saisie/micro en bas.
  5. Dashboard prof/admin: creation eleves/comptes, rapports, historique seances, conversation complete, stats de reussite.

Fichiers Touchés Pendant Cette Session

  • frontend/src/App.jsx
  • frontend/src/styles.css
  • frontend/src/assets/professeur-top.png
  • frontend/vite.config.js
  • backend/app/main.py
  • backend/app/schemas.py
  • backend/app/services.py
  • backend/requirements.txt
  • README.md
  • MEMORY.md