00 — Dossier technique

Un moteur, une coquille,
un widget vocal.

L'architecture réellement en service : 21 professeurs, 93 cours, 22 spécialités, 0 séances enregistrées.

Architecture
NAVIGATEURinterface Next.js:8300+ widget vocalMOTEUR NODE:8200 · API RESTproxy WS /ws/plexauth · séancesclé de servicePERSONAPLEX127.0.0.1:8998MYSQLMAMP · 8889JSONWSSQL
Professeurs
21
Cours
93
Spécialités
22
Séances
0
01

Interface Next.js (port 8300)

Interface de pages et d’API proxy : aucune base de données côté Next.js. Les pages de catalogue sont rendues à partir de l’API du moteur ; le navigateur passe par le proxy vocal du moteur.

ui/src/app            pages (accueil, cours, classe, atelier, pédagogie, dossier)
ui/src/lib/store.ts   catalogue : API moteur -> forme attendue par les pages
ui/src/lib/engine.ts  fetch serveur + clé de service (X-Service-Key)
ui/src/app/api/seance enregistrement des séances vocales (côté serveur)
02

Moteur myVirtualTeacher (port 8200)

Node.js sans framework + MySQL. Il détient les données (professeurs, cours, connaissances, séances), l'authentification, l'API REST et le proxy WebSocket vers PersonaPlex. Il sert aussi l'application PWA d'origine.

server/index.js       HTTP/HTTPS, fichiers, proxy WS /ws/plex
server/router.js      API REST + clé de service pour l'interface
server/db.js          MySQL (MAMP, 127.0.0.1:8889)
public/widget/        widget vocal réutilisable
data/schema.sql       professors · courses · knowledge · sessions
03

Widget vocal : Ogg/Opus et proxy

Pour le mode anglais full duplex, le navigateur capture le micro, encode en Opus (WebCodecs) et encapsule les paquets en Ogg. Le flux transite par le proxy du moteur ; les autres langues utilisent un échange tour par tour.

public/widget/mvt-voice.js   start() · stop() · toggleMute()
public/js/oggopus.js         mux / demux Ogg/Opus (CRC32, OpusHead)
public/js/audio.js           capture + encodage/décodage WebCodecs
public/js/plex.js            client WS, file d'attente avant "prêt"
→ wss://…:8200/ws/plex?text_prompt=…&voice=…
04

PersonaPlex (port 8998)

PersonaPlex fournit le mode anglais full duplex. Les conversations dans les autres langues passent par le chat du moteur et une synthèse vocale disponible.

WS   /ws/plex                 anglais full duplex (Ogg/Opus)
POST /api/ollama/chat          conversation tour par tour
voix par professeur   Thomas Leroy : NATM2 · Nadia Bensalem : NATF3 · Mei Lin : NATF4 · Beatriz Almeida : VARF3 · Giulia Romano : VARF2 · Jonas Weber : NATM2 · Lena Fischer : NATF0 · Diego Ramirez : NATM1 · Lucia Fernandez : NATF3 · Lucas Moreau : NATM3 · Camille Rousseau : NATF1 · Emily Carter : VARF0 · James O'Connell : NATM0 · Ji-woo Park : NATF0 · Yuki Tanaka : NATF2 · Anna Volkova : VARF4 · Mohamed Nassim MEZIANI : VARM2 · Karim Hadj : VARM0 · Sarah Bennett : NATF2
prompt de rôle        /api/persona/:profId/:courseId
05

PWA et hors ligne

Le service worker ne précharge pas les pages de navigation. Il peut mettre en cache certaines ressources statiques déjà consultées ; les API et les fichiers de build Next.js restent hors cache. L’accès hors ligne au catalogue n’est donc pas garanti.

manifest.webmanifest   installation depuis la barre d'adresse
sw.js                  coquille en cache, API en réseau
/_next/*               jamais mis en cache
06

Limite connue et suite

PersonaPlex laisse des threads tourner après quelques séances et finit par ne plus répondre : un superviseur le redémarre (environ 45 s de rechargement). La suite : redémarrage piloté par le moteur, édition complète dans l'interface, progression de l'élève.

tools/plex-watchdog.sh     redémarre si CPU > 150 % au repos
tools/start-personaplex.sh lancement hors ligne (poids en cache)
tools/dev.sh               moteur + interface
Essayer une séanceOuvrir l'administrationmoteur : https://api.academy.2mn.info · voix : https://api.academy.2mn.info
Dossier technique · Sheherazade Academy