""" Modèles de données pour la GUI Définit les structures de données utilisées par l'interface """ from dataclasses import dataclass from datetime import datetime from typing import Optional @dataclass class GUIState: """ État de la GUI. Attributes: mode: Mode actuel ('shadow', 'assist', 'copilot', 'auto') is_running: Indique si le système est en cours d'exécution actions_count: Nombre d'actions observées patterns_count: Nombre de patterns détectés workflows_count: Nombre de workflows appris finetuning_status: Statut du fine-tuning (None, 'collecting', 'training', 'completed') finetuning_progress: Progression du fine-tuning (0-100 ou None) """ mode: str = "shadow" is_running: bool = False actions_count: int = 0 patterns_count: int = 0 workflows_count: int = 0 finetuning_status: Optional[str] = None finetuning_progress: Optional[int] = None def to_dict(self) -> dict: """ Convertit l'état en dictionnaire. Returns: Dictionnaire représentant l'état """ return { 'mode': self.mode, 'is_running': self.is_running, 'actions_count': self.actions_count, 'patterns_count': self.patterns_count, 'workflows_count': self.workflows_count, 'finetuning_status': self.finetuning_status, 'finetuning_progress': self.finetuning_progress } @classmethod def from_dict(cls, data: dict) -> 'GUIState': """ Crée un GUIState à partir d'un dictionnaire. Args: data: Dictionnaire contenant les données Returns: Instance de GUIState """ return cls( mode=data.get('mode', 'shadow'), is_running=data.get('is_running', False), actions_count=data.get('actions_count', 0), patterns_count=data.get('patterns_count', 0), workflows_count=data.get('workflows_count', 0), finetuning_status=data.get('finetuning_status'), finetuning_progress=data.get('finetuning_progress') ) if __name__ == "__main__": """Tests des modèles de données""" print("Test des modèles de données") print("=" * 50) # Test 1: Création d'un GUIState par défaut print("\n1. Test GUIState par défaut:") state = GUIState() print(f" Mode: {state.mode}") print(f" Running: {state.is_running}") print(f" Actions: {state.actions_count}") # Test 2: Création avec paramètres print("\n2. Test GUIState avec paramètres:") state2 = GUIState( mode="assist", is_running=True, actions_count=12, patterns_count=2, workflows_count=1, finetuning_status="collecting", finetuning_progress=50 ) print(f" Mode: {state2.mode}") print(f" Running: {state2.is_running}") print(f" Actions: {state2.actions_count}") print(f" Patterns: {state2.patterns_count}") print(f" Workflows: {state2.workflows_count}") print(f" Fine-tuning: {state2.finetuning_status} ({state2.finetuning_progress}%)") # Test 3: Conversion en dictionnaire print("\n3. Test to_dict:") data = state2.to_dict() print(f" {data}") # Test 4: Création depuis dictionnaire print("\n4. Test from_dict:") state3 = GUIState.from_dict(data) print(f" Mode: {state3.mode}") print(f" Actions: {state3.actions_count}") # Test 5: Modification de l'état print("\n5. Test modification:") state.mode = "auto" state.is_running = True state.actions_count = 25 print(f" Mode: {state.mode}") print(f" Running: {state.is_running}") print(f" Actions: {state.actions_count}") print("\n✅ Tous les tests passent!")