# 🔄 ImplĂ©mentation de la DĂ©tection de Workflows **Date** : 19 Novembre 2025 **Objectif** : ImplĂ©menter la dĂ©tection de workflows complets au lieu de micro-patterns ## ✅ Ce qui a Ă©tĂ© fait ### 1. SessionManager (`geniusia2/core/session_manager.py`) **RĂŽle** : Segmenter les actions en sessions basĂ©es sur le temps et le contexte. **FonctionnalitĂ©s** : - ✅ DĂ©tection automatique de dĂ©but/fin de session - ✅ Timeout configurable (5 minutes par dĂ©faut) - ✅ DĂ©tection de changement de fenĂȘtre - ✅ Historique des sessions - ✅ Callback `on_session_completed` - ✅ Statistiques (durĂ©e moyenne, actions par session) **Classe `Session`** : ```python @dataclass class Session: session_id: str start_time: datetime end_time: Optional[datetime] actions: List[Dict[str, Any]] window: Optional[str] ``` **MĂ©thodes principales** : - `add_action(action)` : Ajoute une action Ă  la session courante - `should_start_new_session(action)` : DĂ©termine si nouvelle session nĂ©cessaire - `finalize_current_session()` : Finalise la session courante - `get_recent_sessions(n)` : Retourne les N sessions rĂ©centes - `get_stats()` : Statistiques des sessions ### 2. WorkflowDetector (`geniusia2/core/workflow_detector.py`) **RĂŽle** : DĂ©tecter les workflows rĂ©pĂ©tĂ©s en analysant les sessions. **FonctionnalitĂ©s** : - ✅ Analyse de sessions pour dĂ©tecter des similaritĂ©s - ✅ Seuil de rĂ©pĂ©tition configurable (3 par dĂ©faut) - ✅ Seuil de similaritĂ© configurable (75% par dĂ©faut) - ✅ CrĂ©ation de workflows Ă  partir de sessions similaires - ✅ Callback `on_workflow_detected` - ✅ Mise Ă  jour des workflows existants **Classe `Workflow`** : ```python @dataclass class Workflow: workflow_id: str name: str steps: List[WorkflowStep] repetitions: int confidence: float last_seen: datetime ``` **Classe `WorkflowStep`** : ```python @dataclass class WorkflowStep: step_id: int action_type: str target_description: str position: tuple window: str embedding: Optional[np.ndarray] screenshot: Optional[np.ndarray] ``` **MĂ©thodes principales** : - `analyze_sessions(sessions)` : Analyse les sessions pour dĂ©tecter des workflows - `_calculate_session_similarity(sessions)` : Calcule la similaritĂ© entre sessions - `_compare_two_sessions(s1, s2)` : Compare deux sessions - `_create_workflow_from_sessions(sessions)` : CrĂ©e un workflow - `get_workflows()` : Retourne tous les workflows dĂ©tectĂ©s - `get_stats()` : Statistiques des workflows ### 3. IntĂ©gration dans EventCapture **Modifications dans `geniusia2/core/event_capture.py`** : ```python # Initialisation self.session_manager = SessionManager(logger, self.config) self.workflow_detector = WorkflowDetector(logger, self.config) # Connexion des callbacks self.session_manager.on_session_completed = self._on_session_completed self.workflow_detector.on_workflow_detected = self._on_workflow_detected ``` **Nouveaux callbacks** : - `_on_session_completed(session)` : AppelĂ© quand une session est terminĂ©e - `_on_workflow_detected(workflow)` : AppelĂ© quand un workflow est dĂ©tectĂ© **Nouvelles mĂ©thodes publiques** : - `capture_event(action)` : Capture un Ă©vĂ©nement manuellement (pour tests) - `get_workflows()` : Retourne les workflows dĂ©tectĂ©s - `get_sessions(count)` : Retourne les sessions rĂ©centes - `get_workflow_stats()` : Statistiques complĂštes - `force_finalize_session()` : Force la finalisation de la session ## 🔄 Flux de DĂ©tection ``` 1. Utilisateur effectue des actions ↓ 2. EventCapture capture les Ă©vĂ©nements ↓ 3. SessionManager segmente en sessions ├─ Timeout (5 min) → Nouvelle session ├─ Changement fenĂȘtre → Nouvelle session └─ Session terminĂ©e → Callback ↓ 4. WorkflowDetector analyse les sessions ├─ Compare les 3+ derniĂšres sessions ├─ Calcule la similaritĂ© (75% minimum) └─ Si similaires → Workflow dĂ©tectĂ© ↓ 5. Workflow créé/mis Ă  jour ├─ GĂ©nĂ©ration d'un nom descriptif ├─ CrĂ©ation des Ă©tapes (WorkflowStep) └─ Callback → Notification ``` ## 📊 Algorithme de DĂ©tection ### SimilaritĂ© entre Sessions ```python def _compare_two_sessions(session1, session2): # 1. VĂ©rifier la longueur (tolĂ©rance de 2 actions) if abs(len(actions1) - len(actions2)) > 2: return 0.0 # 2. Comparer action par action for i in range(min_len): # Type d'action identique → +1 point if action1.type == action2.type: matches += 1 # MĂȘme fenĂȘtre → +0.5 point bonus if action1.window == action2.window: matches += 0.5 # 3. Score normalisĂ© (0-1) return matches / (min_len * 1.5) ``` ### DĂ©tection de Workflow ```python def analyze_sessions(sessions): # 1. Prendre N sessions consĂ©cutives (N = min_repetitions) for i in range(len(sessions) - N + 1): session_group = sessions[i:i + N] # 2. Calculer similaritĂ© moyenne similarity = calculate_session_similarity(session_group) # 3. Si similaritĂ© >= 75% → Workflow ! if similarity >= 0.75: workflow = create_workflow_from_sessions(session_group) # 4. VĂ©rifier si workflow existe dĂ©jĂ  existing = find_existing_workflow(workflow) if existing: # Mettre Ă  jour existing.repetitions += 1 existing.confidence += 0.05 else: # Nouveau workflow workflows.append(workflow) on_workflow_detected(workflow) ``` ## 🎯 Configuration Dans `config.py`, ajouter : ```python "workflow": { # Timeout de session (secondes) "session_timeout": 300, # 5 minutes # Nombre minimum de rĂ©pĂ©titions pour dĂ©tecter un workflow "min_repetitions": 3, # Seuil de similaritĂ© pour considĂ©rer deux sessions comme identiques "similarity_threshold": 0.75 # 75% } ``` ## đŸ§Ș Tests ### Test Basique ```python from core.event_capture import EventCapture from core.config import get_config # Initialiser config = get_config() event_capture = EventCapture( logger=logger, pattern_threshold=3, config=config ) # Simuler des actions rĂ©pĂ©tĂ©es for i in range(3): # Session 1 event_capture.capture_event({ "action_type": "click", "position": (100, 50), "window": "Desktop", "timestamp": datetime.now() }) event_capture.capture_event({ "action_type": "type", "text": "office", "window": "Desktop", "timestamp": datetime.now() }) # Finaliser la session event_capture.force_finalize_session() # VĂ©rifier les workflows workflows = event_capture.get_workflows() print(f"Workflows dĂ©tectĂ©s: {len(workflows)}") ``` ### Test Complet Voir `test_workflow_suggestion.py` pour un test complet avec : - CrĂ©ation de 3 sessions similaires - DĂ©tection automatique de workflow - Suggestion basĂ©e sur le dĂ©but d'un workflow ## 📈 Avantages ### Avant (Micro-Patterns) - ❌ DĂ©tecte seulement les clics rĂ©pĂ©tĂ©s - ❌ Inutilisable en pratique - ❌ Ne correspond pas Ă  l'usage rĂ©el ### AprĂšs (Macro-Workflows) - ✅ DĂ©tecte les workflows complets - ✅ Utilisable en pratique - ✅ Correspond Ă  l'usage rĂ©el - ✅ Vrai RPA Vision ! ## 🚀 Prochaines Étapes ### Court Terme 1. ✅ ~~CrĂ©er SessionManager~~ **Fait !** 2. ✅ ~~CrĂ©er WorkflowDetector~~ **Fait !** 3. ✅ ~~IntĂ©grer dans EventCapture~~ **Fait !** 4. 🔄 **Tester avec workflow rĂ©el** (OnlyOffice) 5. 🔄 **Ajuster les seuils** si nĂ©cessaire ### Moyen Terme 6. IntĂ©grer dans SuggestionManager 7. Afficher suggestions de workflow dans la GUI 8. Permettre l'exĂ©cution de workflows complets ### Long Terme 9. Apprentissage des variations de workflows 10. Workflows conditionnels (if/else) 11. Workflows avec boucles ## 📝 Exemple Concret ### ScĂ©nario : Ouvrir OnlyOffice **Jour 1 - 10h00** : ``` Session 1: 1. Clic sur lanceur (100, 50) 2. Type "office" 3. Clic sur OnlyOffice (150, 100) 4. Clic "Nouveau document" (200, 150) ``` **Jour 2 - 14h30** : ``` Session 2: 1. Clic sur lanceur (100, 50) 2. Type "office" 3. Clic sur OnlyOffice (150, 100) 4. Clic "Nouveau document" (200, 150) ``` **Jour 3 - 16h00** : ``` Session 3: 1. Clic sur lanceur (100, 50) 2. Type "office" 3. Clic sur OnlyOffice (150, 100) 4. Clic "Nouveau document" (200, 150) ``` **RĂ©sultat** : ``` 🎉 Workflow dĂ©tectĂ© ! Nom: "Click → Type → Click (+ 1 Ă©tapes)" RĂ©pĂ©titions: 3x Confiance: 80% Étapes: 4 ``` **Jour 4 - Suggestion** : ``` Utilisateur fait: 1. Clic sur lanceur 2. Type "office" SystĂšme dĂ©tecte: "Tu es au dĂ©but du workflow 'Ouvrir OnlyOffice'" Suggestion: "Je peux continuer ce workflow pour toi ?" [Oui] [Non] [Corriger] ``` ## ✅ Checklist d'ImplĂ©mentation - [x] CrĂ©er `SessionManager` - [x] CrĂ©er `WorkflowDetector` - [x] Ajouter imports dans `EventCapture` - [x] Connecter les callbacks - [x] Ajouter mĂ©thodes publiques - [x] Corriger les appels de mĂ©thodes - [x] Ajouter `capture_event()` pour tests - [ ] Tester avec workflow rĂ©el - [ ] Ajuster les seuils - [ ] IntĂ©grer dans SuggestionManager - [ ] Ajouter GUI pour workflows ## 🎊 Conclusion Le systĂšme de dĂ©tection de workflows est maintenant **implĂ©mentĂ©** ! **CapacitĂ©s** : - ✅ Segmentation en sessions - ✅ DĂ©tection de workflows rĂ©pĂ©tĂ©s - ✅ Callbacks pour notifications - ✅ Statistiques complĂštes **PrĂȘt pour les tests ! 🚀** --- **ImplĂ©mentĂ© le 19 Novembre 2025**