End session
This commit is contained in:
74
DEPLOYMENT_NOTES.md
Normal file
74
DEPLOYMENT_NOTES.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# Deployment Notes
|
||||
|
||||
## Stack Reelle
|
||||
|
||||
Le deploiement utilise sur le serveur n'est pas celui d'un `docker-compose.yml` versionne dans ce repo.
|
||||
|
||||
La stack reelle comprend notamment:
|
||||
- `tutor-backend`
|
||||
- `tutor-frontend`
|
||||
- `tutor-postgres`
|
||||
- `tutor-redis`
|
||||
- `nginx`
|
||||
|
||||
## Routage Nginx
|
||||
|
||||
Pour `prof.open-squared.tech`, la conf partagee pendant la session est:
|
||||
|
||||
- `location /api/` -> `http://tutor-backend:8000/`
|
||||
- `location /` -> `http://tutor-frontend:3000/`
|
||||
|
||||
Consequence:
|
||||
- le frontend doit appeler l'API via `/api`
|
||||
- nginx supprime le prefixe `/api/` avant d'envoyer au backend
|
||||
- `GET /api/students` devient `GET /students` cote FastAPI
|
||||
|
||||
## Incidents Rencontres
|
||||
|
||||
### 1. Bouton "Creer un eleve" casse
|
||||
|
||||
Cause:
|
||||
- le frontend recevait une page HTML d'erreur au lieu d'un JSON
|
||||
- `JSON.parse` echouait
|
||||
|
||||
Diagnostic final:
|
||||
- nginx renvoyait `502 Bad Gateway`
|
||||
- `tutor-backend` etait indisponible
|
||||
|
||||
### 2. Backend qui ne demarre plus
|
||||
|
||||
Cause:
|
||||
- ajout de la route `/transcribe`
|
||||
- FastAPI exige `python-multipart` pour les uploads `multipart/form-data`
|
||||
|
||||
Resolution:
|
||||
- ajouter `python-multipart` dans `backend/requirements.txt`
|
||||
- rebuild du conteneur backend
|
||||
|
||||
### 3. Micro automatique instable dans Firefox
|
||||
|
||||
Cause:
|
||||
- la premiere approche de detection audio etait trop fragile dans Firefox
|
||||
|
||||
Resolution:
|
||||
- simplification et renforcement de la capture audio
|
||||
- relance automatique du segment d'ecoute apres la reponse du prof
|
||||
|
||||
## Commandes Utiles Cote Serveur
|
||||
|
||||
Quelques commandes utiles deja identifiees:
|
||||
|
||||
```bash
|
||||
docker logs tutor-backend
|
||||
docker compose up -d --build tutor-backend
|
||||
curl -i https://prof.open-squared.tech/api/health
|
||||
curl -i https://prof.open-squared.tech/api/students
|
||||
```
|
||||
|
||||
## Ameliorations Possibles
|
||||
|
||||
- Servir le frontend compile plutot que Vite en production
|
||||
- Supprimer le bruit HMR/WebSocket en production
|
||||
- Ajouter une page ou section admin de diagnostic micro/API
|
||||
- Documenter la stack serveur hors repo dans un espace partage dedie
|
||||
|
||||
56
MEMORY.md
Normal file
56
MEMORY.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# 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 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
|
||||
|
||||
- Le frontend charge les voix du navigateur via `speechSynthesis.getVoices()`.
|
||||
- Une liste de voix est proposee dans l'interface.
|
||||
- Les voix francaises sont priorisees dans le tri.
|
||||
|
||||
## 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`.
|
||||
|
||||
## Fichiers Touchés Pendant Cette Session
|
||||
|
||||
- `frontend/src/App.jsx`
|
||||
- `frontend/vite.config.js`
|
||||
- `backend/app/main.py`
|
||||
- `backend/app/services.py`
|
||||
- `backend/requirements.txt`
|
||||
|
||||
@@ -4,7 +4,7 @@ const API_BASE = '/api'
|
||||
const AUTO_STOP_SILENCE_MS = 2500
|
||||
const SPEECH_START_THRESHOLD = 0.02
|
||||
const SILENCE_THRESHOLD = 0.012
|
||||
const DEBUG_AUDIO = true
|
||||
const DEBUG_AUDIO = false
|
||||
|
||||
async function parseApiResponse(res) {
|
||||
const contentType = res.headers.get('content-type') || ''
|
||||
|
||||
Reference in New Issue
Block a user