# Guide d'Intégration de la GUI Améliorée ## 🎯 Objectif Ce guide explique comment intégrer la nouvelle GUI améliorée dans votre application GeniusIA v2. ## ✅ Composants Disponibles ### Composants Principaux - **ImprovedGUI** : Interface principale avec LogsPanel et statistiques - **HumanLogger** : Générateur de messages lisibles - **GUISignals** : Système de signaux Qt pour communication - **InteractiveDialog** : Dialogues avec timeout - **OrchestratorGUIBridge** : Pont Orchestrator ↔ GUI ### Modèles de Données - **GUIState** : État de la GUI - **LogMessage** : Messages de log ## 🚀 Méthode 1 : Intégration Automatique (Recommandée) ### Utilisation Simple ```python from PyQt5.QtWidgets import QApplication from geniusia2.core import Orchestrator from geniusia2.gui import setup_gui_for_orchestrator # Créer l'application Qt app = QApplication(sys.argv) # Créer l'Orchestrator orchestrator = Orchestrator() # Configurer la GUI automatiquement bridge = setup_gui_for_orchestrator(orchestrator) bridge.show() # Maintenant l'orchestrator peut logger vers la GUI orchestrator.log_to_gui("👀", "Système démarré", "success") orchestrator.update_gui_stats(actions_count=0, patterns_count=0) # Lancer l'application sys.exit(app.exec_()) ``` ### Avantages - ✅ Configuration automatique - ✅ Connexion bidirectionnelle Orchestrator ↔ GUI - ✅ Méthodes helper ajoutées à l'Orchestrator - ✅ Gestion des signaux automatique ## 🔧 Méthode 2 : Intégration Manuelle ### Étape 1 : Créer la GUI ```python from PyQt5.QtWidgets import QApplication from geniusia2.gui import ImprovedGUI app = QApplication(sys.argv) gui = ImprovedGUI(orchestrator) gui.show() ``` ### Étape 2 : Connecter les Signaux ```python from geniusia2.gui import add_gui_logging_to_orchestrator # Ajouter le logging GUI à l'orchestrator add_gui_logging_to_orchestrator(orchestrator, gui.signals) # Connecter les boutons de contrôle gui.start_requested.connect(orchestrator.start) gui.stop_requested.connect(orchestrator.stop) gui.pause_requested.connect(orchestrator.pause) ``` ### Étape 3 : Utiliser dans l'Orchestrator ```python class Orchestrator: def on_action_observed(self, action): # Logger vers la GUI self.log_to_gui("👀", f"Action dans {action.window}", "info") # Mettre à jour les stats self.update_gui_stats( actions_count=self.actions_count, patterns_count=self.patterns_count, workflows_count=self.workflows_count ) def on_pattern_detected(self, pattern): self.log_to_gui("🎯", "Pattern détecté !", "success") def on_mode_change(self, new_mode): self.change_mode_gui(new_mode) self.log_to_gui("✅", f"Mode {new_mode} activé", "success") ``` ## 📝 Méthodes Disponibles dans l'Orchestrator Après l'intégration, ces méthodes sont disponibles : ### log_to_gui(emoji, message, level) ```python # Envoyer un log à la GUI orchestrator.log_to_gui("👀", "Message", "info") orchestrator.log_to_gui("✅", "Succès", "success") orchestrator.log_to_gui("⚠️", "Attention", "warning") orchestrator.log_to_gui("❌", "Erreur", "error") ``` ### update_gui_stats(**stats) ```python # Mettre à jour les statistiques orchestrator.update_gui_stats( actions_count=12, patterns_count=2, workflows_count=1, finetuning_status='collecting', finetuning_progress=8 ) ``` ### change_mode_gui(mode) ```python # Changer le mode affiché orchestrator.change_mode_gui("shadow") # 👀 Observation orchestrator.change_mode_gui("assist") # 💡 Suggestions orchestrator.change_mode_gui("copilot") # 🤝 Copilote orchestrator.change_mode_gui("auto") # 🤖 Autonome ``` ## 💬 Utiliser les Dialogues Interactifs ### Dialogue Simple ```python from geniusia2.gui import InteractiveDialog def on_accept(): print("Utilisateur a accepté") orchestrator.change_mode("assist") def on_reject(): print("Utilisateur a refusé") # Afficher un dialogue dialog = InteractiveDialog.show_dialog( "J'ai une idée !", "Voulez-vous que je vous suggère des actions ?", on_accept, on_reject, timeout_seconds=10 ) ``` ### Dialogue via Signaux ```python # Utiliser le signal show_dialog orchestrator.gui_signals.emit_dialog( "Confirmation", "Voulez-vous continuer ?", on_accept, on_reject ) ``` ## 📊 Exemples d'Utilisation ### Exemple 1 : Observer une Action ```python def on_action_observed(self, action): # Incrémenter le compteur self.actions_count += 1 # Logger message = self.human_logger.log_observation( action.type, action.window ) self.log_to_gui("👀", message, "info") # Mettre à jour les stats self.update_gui_stats(actions_count=self.actions_count) ``` ### Exemple 2 : Détecter un Pattern ```python def on_pattern_detected(self, pattern): # Incrémenter le compteur self.patterns_count += 1 # Logger message = self.human_logger.log_pattern_detected( pattern.repetitions, pattern.task_name ) self.log_to_gui("🎯", message, "success") # Mettre à jour les stats self.update_gui_stats( actions_count=self.actions_count, patterns_count=self.patterns_count ) # Demander confirmation pour changer de mode def switch_to_assist(): self.change_mode("assist") self.change_mode_gui("assist") self.log_to_gui("✅", "Mode Suggestions activé", "success") InteractiveDialog.show_dialog( "Pattern détecté !", f"J'ai remarqué que vous faites souvent:\n\"{pattern.task_name}\"\n\n" "Voulez-vous que je vous suggère cette action ?", switch_to_assist, lambda: None, timeout_seconds=10 ) ``` ### Exemple 3 : Fine-tuning ```python def on_finetuning_start(self, num_examples): message = self.human_logger.log_finetuning_started(num_examples) self.log_to_gui("🧠", message, "info") self.update_gui_stats( finetuning_status='training', finetuning_progress=None ) def on_finetuning_complete(self, duration): message = self.human_logger.log_finetuning_completed(duration) self.log_to_gui("✅", message, "success") self.update_gui_stats( finetuning_status='completed', finetuning_progress=None ) ``` ### Exemple 4 : Gestion d'Erreurs ```python def on_error(self, error_type, context=None): message = self.human_logger.log_error(error_type, context) self.log_to_gui("❌", message, "error") ``` ## 🔄 Modifier main.py ### Avant (MinimalGUI) ```python from geniusia2.gui import MinimalGUI gui = MinimalGUI(orchestrator) gui.show() ``` ### Après (ImprovedGUI) ```python from geniusia2.gui import setup_gui_for_orchestrator bridge = setup_gui_for_orchestrator(orchestrator) bridge.show() ``` ## 🧪 Tester l'Intégration ### Test Simple ```python # test_integration_gui.py from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import QTimer import sys from geniusia2.core import Orchestrator from geniusia2.gui import setup_gui_for_orchestrator app = QApplication(sys.argv) # Créer et configurer orchestrator = Orchestrator() bridge = setup_gui_for_orchestrator(orchestrator) bridge.show() # Tester après 1 seconde def test(): orchestrator.log_to_gui("👀", "Test de log", "info") orchestrator.update_gui_stats(actions_count=5) orchestrator.change_mode_gui("assist") QTimer.singleShot(1000, test) sys.exit(app.exec_()) ``` ## 📋 Checklist d'Intégration - [ ] Importer `setup_gui_for_orchestrator` - [ ] Créer l'application Qt - [ ] Configurer le bridge - [ ] Afficher la GUI - [ ] Tester `log_to_gui()` - [ ] Tester `update_gui_stats()` - [ ] Tester `change_mode_gui()` - [ ] Tester les boutons de contrôle - [ ] Tester le system tray - [ ] Tester les dialogues interactifs ## 🐛 Dépannage ### La GUI ne s'affiche pas ```python # Vérifier que l'application Qt est créée app = QApplication(sys.argv) # ... créer la GUI ... sys.exit(app.exec_()) # Important ! ``` ### Les logs n'apparaissent pas ```python # Vérifier que le bridge est configuré bridge = setup_gui_for_orchestrator(orchestrator) # Vérifier que la méthode existe if hasattr(orchestrator, 'log_to_gui'): orchestrator.log_to_gui("✅", "Test", "info") ``` ### Les statistiques ne se mettent pas à jour ```python # Utiliser un dictionnaire complet orchestrator.update_gui_stats( actions_count=0, patterns_count=0, workflows_count=0 ) ``` ## 📚 Ressources - **test_improved_gui.py** : Exemple complet avec simulation - **GUI_AMELIOREE_PRETE.md** : Guide détaillé de la GUI - **RESUME_GUI_COMPLETE.md** : Résumé des fonctionnalités ## ✨ Conseils 1. **Utilisez HumanLogger** pour générer des messages lisibles 2. **Mettez à jour les stats régulièrement** pour une GUI réactive 3. **Utilisez les dialogues** pour les confirmations importantes 4. **Testez le system tray** sur Ubuntu 5. **Gérez les erreurs** avec des messages clairs --- **Bonne intégration ! 🚀**