Code source de mirza.entrypoint

"""
Point d'entree en ligne de commande et demarrage du serveur Mirza.

Fournit l'analyse des arguments, l'initialisation des configurations et le
demarrage, en mode console interactive ou en serveur reseau.
"""

import argparse
import os
import sys
import threading

from .config import AppConfig
from .core.memoryManager import MemoryManager
from .pipeline.conversationOrchestrator import ConversationOrchestrator
from .server.widgetServer import WidgetServer


[docs] def runCli() -> None: """ Point d'entree CLI principal du backend Mirza. Returns ------- None """ parser = argparse.ArgumentParser(description="Assistant Vocal Mirza - Backend Haute Performance & Widget Server") parser.add_argument( "--server", action="store_true", help="Demarre le serveur WebSocket et l'API REST pour le widget macOS desktop", ) parser.add_argument( "--host", type=str, default="0.0.0.0", help="Adresse d'ecoute du serveur (defaut: 0.0.0.0 pour reseau local LAN)", ) parser.add_argument( "--port", type=int, default=8765, help="Port d'ecoute du serveur widget (defaut: 8765)", ) parser.add_argument( "--ssl", action="store_true", help="Active le chiffrement SSL/HTTPS (requis pour l'acces au micro smartphone depuis iOS/Android)", ) parser.add_argument( "--turns", type=int, default=10, help="Nombre maximum de tours de conversation en mode console (defaut: 10)", ) parser.add_argument( "--benchmark", action="store_true", help="Affiche le diagnostic complet de memoire unifiee et quitte", ) parser.add_argument( "--purge", action="store_true", help="Purge la memoire GPU Metal et quitte", ) parser.add_argument( "--agent", action="store_true", help="Active le mode agentique smolagents par defaut au demarrage", ) parser.add_argument( "--text-only", action="store_true", help="Desactive le prechargement STT et TTS pour economiser ~1.1 Go de RAM", ) parser.add_argument( "--tts", type=str, default=None, choices=["edge_tts", "kokoro", "melo", "melotts"], help="Fournisseur TTS a utiliser (edge_tts, kokoro, melo)", ) parser.add_argument( "--config", type=str, default=None, help="Chemin vers le fichier de configuration YAML centralise (defaut: config.yaml)", ) parser.add_argument( "--profile", type=str, default=None, help="Profil d'assistant actif au demarrage (ex: assistant, medical)", ) args = parser.parse_args() if args.purge: MemoryManager.purgeMemory(force=True) print("[Systeme] Purge de memoire executee avec succes.") sys.exit(0) if args.benchmark: snap = MemoryManager.getMemorySnapshot() print("=" * 65) print(" DIAGNOSTIC DE MEMOIRE UNIFIEE (APPLE SILICON M4)") print("=" * 65) print(f"1. Processus Python (RSS) : {snap['processRssGb']:.2f} Go ({snap['processRssMb']:.1f} Mo)") print(f"2. VRAM Metal Active : {snap['vramActiveGb']:.2f} Go (Pic: {snap['vramPeakGb']:.2f} Go)") print(f"3. RAM Globale Mac : {snap['systemUsedGb']:.2f} Go / {snap['systemTotalGb']:.2f} Go") print(f"4. Swap SSD Utilise : {snap['swapUsedGb']:.2f} Go") print("=" * 65) sys.exit(0) config = AppConfig.load(configPath=args.config, profile=args.profile) activeProf = config.getAssistantProfile() print(f"[Profil Assistant] Profil actif : {config.activeAssistantProfile} — {activeProf.label}") ttsProvider = args.tts or os.getenv("MIRZA_TTS") if ttsProvider: config.tts.provider = ttsProvider orchestrator = ConversationOrchestrator(config=config, textOnly=args.text_only) if args.agent: orchestrator.setAgentMode(True) print("[Mode Agentique] Mode agentique smolagents active par defaut.") if args.server: server = WidgetServer( orchestrator=orchestrator, host=args.host, port=args.port, enableSsl=args.ssl, ) # Chargement en arriere-plan : le serveur HTTP demarre immediatement. def loadModelsBackground(): """ Charge les modeles hors du fil principal. Returns ------- None """ orchestrator.loadModels() modelThread = threading.Thread(target=loadModelsBackground, daemon=True) modelThread.start() server.run() else: try: orchestrator.loadModels() orchestrator.startSession(maxTurns=args.turns) finally: orchestrator.shutdown()
if __name__ == "__main__": runCli()