Module Serveur et Réseau (mirza.server)¶
Le module mirza.server expose la plateforme via un serveur HTTP/WebSocket sécurisé
et gère la diffusion temps réel des événements vers les clients connectés.
Vue d’Ensemble du Serveur¶
Endpoint |
Méthode |
Description |
|---|---|---|
|
WebSocket |
Canal bidirectionnel principal — JSON + binaire ArrayBuffer |
|
GET |
Sert |
|
GET |
Fichiers statiques JS, CSS, icônes du widget |
Mode |
Description |
|---|---|
|
HTTP sur le port 8000 (développement local) |
|
HTTPS/WSS avec TLS auto-signé sur le port 8443 |
Diffuseur d’Événements (EventBroadcaster)¶
Important
EventBroadcaster.broadcastEvent() est thread-safe : il peut être appelé depuis
n’importe quel thread Python (LLM, TTS, orchestrateur) et utilise
asyncio.run_coroutine_threadsafe() pour injecter les messages dans la boucle ASGI.
Module de diffusion et multiplexage temps reel des evenements WebSocket. Fournit une passerelle thread-safe pour envoyer des messages asynchrones depuis des threads de calcul MLX.
- class mirza.server.eventBroadcaster.EventBroadcaster[source]¶
Bases :
objectDiffuseur d’evenements temps reel thread-safe pour les clients connectes en WebSocket.
Maintient le registre en memoire de toutes les connexions actives et offre des primitives permettant aux threads d’inference (LLM, STT, TTS) d’emettre des evenements JSON vers la boucle d’evenements asynchrone FastAPI sans risque de blocage.
- activeConnections¶
Ensemble des instances WebSocket actives connectees au serveur.
- Type:
set[Any]
- eventLoop¶
Reference vers la boucle d’evenements asyncio principale.
- Type:
- setEventLoop(loop)[source]¶
Associe la boucle d’evenements asynchrone principale de FastAPI au diffuseur.
- Paramètres:
loop (
asyncio.AbstractEventLoop) – Boucle d’evenements asyncio en cours d’execution.- Type renvoyé:
None
- registerConnection(websocket)[source]¶
Enregistre une nouvelle connexion client WebSocket active dans le registre.
- Paramètres:
websocket (
Any) – Instance de la socket cliente connectee (FastAPI / Starlette WebSocket).- Type renvoyé:
None
- unregisterConnection(websocket)[source]¶
Supprime une connexion client deconnectee du registre.
- Paramètres:
websocket (
Any) – Instance de la socket cliente a retirer.- Type renvoyé:
None
- broadcastEvent(eventName, payload)[source]¶
Envoie un message JSON formate a tous les clients widgets et terminaux connectes.
Cette methode est thread-safe : si elle est appelee depuis un thread de travail (worker thread TTS ou thread d’inference MLX), elle planifie la coroutine d’envoi sur la boucle principale via asyncio.run_coroutine_threadsafe.
Serveur FastAPI et Passerelle WebSocket (WidgetServer)¶
Serveur ASGI FastAPI et passerelle WebSocket pour l’interface HUD React de Mirza.
Expose les routes REST pour les metriques, la memoire et le KV Cache, distribue les fichiers statiques du widget React compile, et maintient le canal WebSocket bidirectionnel pour le micro-streaming binaire et le routage multi-clients.
- class mirza.server.widgetServer.WidgetServer(orchestrator, host='0.0.0.0', port=8765, enableSsl=False)[source]¶
Bases :
objectServeur Web unifie distribuant le widget interactif React et l’API WebSocket.
Gere les liaisons full-duplex pour le streaming audio mobile, la telemetrie, et la gestion des certificats SSL/TLS sur reseau local et Tailscale.
- Paramètres:
- orchestrator¶
Orchestrateur de conversation utilise par l’application.
- Type:
ConversationOrchestrator
- broadcaster¶
Diffuseur d’evenements temps reel de l’application.
- Type:
EventBroadcaster
- app¶
Application ASGI exposee par le serveur.
- Type:
FastAPI
- mirza.server.widgetServer.createWidgetApp(orchestrator, broadcaster)[source]¶
Instancie et configure l’application FastAPI et les routes WebSocket de Mirza.
- Paramètres:
orchestrator (
ConversationOrchestrator) – Orchestrateur central gerant VAD, ASR, LLM et TTS.broadcaster (
EventBroadcaster) – Diffuseur d’evenements temps reel pour les clients connectes.
- Renvoie:
Application ASGI configuree prete a etre servie par Uvicorn.
- Type renvoyé:
FastAPI
- mirza.server.widgetServer.getLocalIp()[source]¶
Detecte l’adresse IP locale de la machine hote sur le reseau local (LAN/Wi-Fi).
- Renvoie:
Adresse IPv4 locale (ex: « 192.168.1.42 »), ou « 127.0.0.1 » en cas d’echec.
- Type renvoyé:
- mirza.server.widgetServer.getTailscaleInfo()[source]¶
Detecte l’adresse IP Tailscale IPv4 et le nom DNS de la machine.
- Renvoie:
(adresse IPv4 Tailscale, nom DNS MagicDNS). None quand le service est inactif.
- Type renvoyé:
tuple[str | None,str | None]
- mirza.server.widgetServer.getTailscaleIp()[source]¶
Detecte l’adresse IP Tailscale IPv4 de la machine.
- Renvoie:
Adresse IPv4 Tailscale si le service est actif et connecte, None sinon.
- Type renvoyé:
str | None
Gestionnaire de Certificats TLS (SslManager)¶
Note
SslManager génère un certificat auto-signé X.509 valable 1 an au premier démarrage
et le réutilise lors des démarrages suivants. Il dépose les fichiers cert.pem et key.pem
dans le répertoire courant de l’application.
Module de generation et gestion automatique des certificats SSL/TLS pour l’acces HTTPS sur reseau local. Permet a Safari iOS et Android Chrome d’autoriser l’acces au microphone du smartphone.
- class mirza.server.sslManager.SslManager[source]¶
Bases :
objectGestionnaire de certificats SSL auto-signes pour HTTPS/WSS sur reseau local.
- static ensureCertificates(certsDir='certs', localIp='127.0.0.1', additionalIps=None)[source]¶
Verifie l’existence des certificats SSL et les genere si necessaire.
Ajoute les extensions SAN (Subject Alternative Name) pour localhost, l’adresse IP locale du Mac et le reseau Tailscale.
- Paramètres:
- Renvoie:
Chemins des fichiers (certPath, keyPath).
- Type renvoyé:
tuple[str,str]