8.1 KiB
Résumé d'Implémentation - UIChangeDetector
Tâche Complétée
Tâche 15.1 : Créer module de détection de dérive
Fichiers Créés
1. geniusia2/core/ui_change_detector.py
Module principal implémentant la classe UIChangeDetector avec les fonctionnalités suivantes :
Méthodes Principales
-
detect_ui_change(current_embedding, stored_embeddings, task_id)- Détecte les changements visuels en comparant les embeddings
- Seuil de similarité : 70% (configurable)
- Retourne : (changement_détecté, similarité_max)
-
calculate_delta(predicted_bbox, actual_bbox)- Calcule les deltas en pixels entre bbox prédite et réelle
- Retourne : delta_x, delta_y, delta_width, delta_height, delta_center, max_delta
-
should_trigger_retraining(deltas, similarity)- Décide si le ré-entraînement est nécessaire
- Critères : delta > 10 pixels OU similarité < 70%
-
trigger_retraining(task_id, reason, metadata)- Déclenche le ré-entraînement et enregistre l'événement
- Journalise dans le logger chiffré
-
check_and_trigger_retraining(...)- Vérification complète combinant détection visuelle et position
- Déclenche automatiquement le ré-entraînement si nécessaire
-
get_change_history(task_id, limit)- Retourne l'historique des changements détectés
- Filtrage par tâche optionnel
-
get_stats()- Statistiques globales sur les changements détectés
2. geniusia2/core/learning_manager.py (Modifications)
Intégration du UIChangeDetector dans le LearningManager :
Nouvelles Méthodes
-
check_ui_changes(task_id, current_embedding, predicted_bbox, actual_bbox)- Vérifie les changements UI pour une tâche
- Met à jour automatiquement les embeddings si ré-entraînement déclenché
- Sauvegarde le profil mis à jour
-
monitor_execution_drift(task_id, predicted_action, actual_action)- Surveille la dérive entre action prédite et action réelle
- Retourne True si ré-entraînement déclenché
-
get_ui_change_stats()- Retourne les statistiques du détecteur de changements
Modifications d'Initialisation
- Ajout de
self.ui_change_detectordans__init__ - Import de
UIChangeDetectoravec TYPE_CHECKING pour éviter les dépendances circulaires
3. test_ui_change_detector_simple.py
Test complet et autonome vérifiant :
- Détection de changements visuels (UI stable vs changée)
- Calcul de deltas de position (petite vs grande différence)
- Décisions de ré-entraînement (3 scénarios)
- Déclenchement de ré-entraînement
- Vérification complète avec déclenchement automatique
- Statistiques et historique
- Filtrage de l'historique
- Effacement de l'historique
Résultat : ✓ Tous les 14 tests réussis
4. geniusia2/core/UI_CHANGE_DETECTOR_README.md
Documentation complète incluant :
- Vue d'ensemble et fonctionnalités
- Exemples d'utilisation
- Configuration des seuils
- Intégration avec LearningManager
- Cas d'usage pratiques
- Architecture et journalisation
- Bonnes pratiques et limitations
Exigences Satisfaites
Exigence 4.1
✓ Calcul du delta entre emplacement prédit et réel d'un élément UI
Exigence 4.2
✓ Déclenchement du ré-entraînement si delta > 10 pixels
Exigence 6.5
✓ Détection de changements UI (similarité d'embedding < 70%)
Configuration
Les seuils sont configurables via core/config.py :
CONFIG = {
"thresholds": {
"ui_change_similarity": 0.70, # Seuil de similarité (70%)
"bbox_delta_pixels": 10 # Seuil de delta position (10 pixels)
}
}
Intégration dans le Workflow
1. Mode Shadow
Le détecteur n'est pas actif (pas de prédictions à comparer)
2. Mode Assisté
- Après chaque validation/correction utilisateur
- Compare la prédiction avec l'action réelle
- Déclenche le ré-entraînement si dérive détectée
3. Mode Autopilot
- Surveillance continue après chaque action automatisée
- Détection proactive des changements UI
- Rétrogradation automatique au mode Assisté si dérive importante
Flux de Détection
Action Prédite
↓
Action Réelle (validée/détectée)
↓
UIChangeDetector.check_and_trigger_retraining()
↓
├─→ Détection Visuelle (embeddings)
│ └─→ Similarité < 70% ? → Changement UI
│
├─→ Détection Position (bbox)
│ └─→ Delta > 10px ? → Dérive Position
│
└─→ Décision Ré-entraînement
├─→ OUI → trigger_retraining()
│ ├─→ Logger l'événement
│ ├─→ Ajouter nouvel embedding
│ ├─→ Mettre à jour FAISS
│ └─→ Sauvegarder profil
│
└─→ NON → Continuer normalement
Journalisation
Tous les événements sont enregistrés dans le logger chiffré :
ui_change_detector_initialized: Initialisationui_change_detected: Changement UI détectéui_stable: UI stablebbox_delta_calculated: Delta calculéretraining_decision: Décision priseretraining_triggered: Ré-entraînement déclenchéui_change_retraining: Mise à jour suite à changement
Tests et Validation
Test Unitaire
python3 test_ui_change_detector_simple.py
Résultats :
- 14 tests exécutés
- 14 tests réussis ✓
- 0 échecs
Diagnostics
# Aucune erreur de syntaxe, type ou lint
✓ geniusia2/core/ui_change_detector.py
✓ geniusia2/core/learning_manager.py
Utilisation Pratique
Exemple 1 : Vérification Manuelle
from core.ui_change_detector import UIChangeDetector
from core.embeddings_manager import EmbeddingsManager
from core.logger import Logger
from core.config import CONFIG
# Initialiser
logger = Logger(log_dir="data/logs")
embeddings_mgr = EmbeddingsManager(logger=logger)
detector = UIChangeDetector(embeddings_mgr, logger, CONFIG)
# Vérifier un changement
result = detector.check_and_trigger_retraining(
task_id="ouvrir_facture",
current_embedding=current_emb,
stored_embeddings=task.embeddings,
predicted_bbox=(100, 200, 50, 30),
actual_bbox=(105, 203, 50, 30)
)
if result['retraining_triggered']:
print("Ré-entraînement nécessaire!")
Exemple 2 : Intégration LearningManager
# Dans l'orchestrateur, après une action
result = learning_manager.check_ui_changes(
task_id=current_task_id,
current_embedding=detected_element.embedding,
predicted_bbox=predicted_bbox,
actual_bbox=detected_bbox
)
if result['retraining_triggered']:
# Notifier l'utilisateur
gui.show_notification(
"Changement UI détecté - Ré-entraînement en cours",
type="warning"
)
Points Techniques Importants
1. TYPE_CHECKING pour Imports
Utilisation de TYPE_CHECKING pour éviter les imports circulaires :
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from .embeddings_manager import EmbeddingsManager
from .logger import Logger
2. Similarité Cosinus
Conversion de la similarité cosinus de [-1, 1] vers [0, 1] :
similarity = (cosine_similarity + 1.0) / 2.0
3. Vecteurs Aléatoires
Les vecteurs aléatoires en haute dimension (512-d) ont naturellement une similarité modérée (~0.5-0.9). Pour les tests, utiliser des vecteurs construits spécifiquement.
4. Historique Limité
L'historique est stocké en mémoire. Utiliser limit et clear_history() pour gérer la mémoire.
Prochaines Étapes
Le module est maintenant prêt pour :
- Intégration dans l'orchestrateur (tâche 8)
- Tests d'intégration avec le système complet
- Ajustement des seuils selon les cas d'usage réels
- Ajout de métriques de performance
Statut Final
✅ Tâche 15.1 : COMPLÉTÉE ✅ Tâche 15 : COMPLÉTÉE
Tous les critères d'acceptation sont satisfaits :
- ✓ Classe UIChangeDetector implémentée dans core/
- ✓ Méthode detect_ui_change() avec seuil 70%
- ✓ Méthode calculate_delta() pour delta pixels
- ✓ Méthode trigger_retraining() si delta > 10 pixels
- ✓ Intégration dans learning_manager pour surveillance continue
- ✓ Exigences 4.1, 4.2, 6.5 satisfaites