Files
rpa_vision_v3/demo_workflow_naming.py
Dom a27b74cf22 v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution
- Frontend v4 accessible sur réseau local (192.168.1.40)
- Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard)
- Ollama GPU fonctionnel
- Self-healing interactif
- Dashboard confiance

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:23:51 +01:00

381 lines
13 KiB
Python

#!/usr/bin/env python3
"""
Démonstration du système de nommage intelligent des workflows
Ce script montre comment utiliser les nouvelles fonctionnalités de nommage
intelligent et de capture enrichie de l'Agent V0.
"""
import sys
import os
import time
import tempfile
from datetime import datetime
# Add agent_v0 to path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'agent_v0'))
from agent_v0.enhanced_raw_session import EnhancedRawSession
from agent_v0.workflow_namer import WorkflowNamer
from agent_v0.ui_dialogs import show_workflow_name_dialog
def demo_basic_naming():
"""Démonstration du nommage de base"""
print("=== Démonstration du Nommage de Base ===")
namer = WorkflowNamer()
# Créer une session de test
session = EnhancedRawSession.create_enhanced(
user_id="demo_user",
user_label="Utilisateur Démo",
workflow_name="Session_Demo"
)
# Simuler des interactions avec un CRM
print("Simulation d'interactions CRM...")
# Clic sur un bouton "Nouveau Client"
session.add_enhanced_mouse_click_event(
button="left",
pos=[150, 100],
window_title="CRM Pro - Gestion Clients",
app_name="CRM_Pro",
screenshot_id="shot_001",
element_type="button",
element_text="Nouveau Client",
confidence=0.95
)
# Saisie du nom du client
session.add_enhanced_key_event(
keys=["Jean", "space", "Dupont"],
window_title="CRM Pro - Nouveau Client",
app_name="CRM_Pro",
screenshot_id="shot_002",
text_content="Jean Dupont",
input_method="typing",
confidence=0.9
)
# Saisie de l'email
session.add_enhanced_key_event(
keys=["jean.dupont@email.com"],
window_title="CRM Pro - Nouveau Client",
app_name="CRM_Pro",
screenshot_id="shot_003",
text_content="jean.dupont@email.com",
input_method="typing",
confidence=0.9
)
# Clic sur "Sauvegarder"
session.add_enhanced_mouse_click_event(
button="left",
pos=[200, 400],
window_title="CRM Pro - Nouveau Client",
app_name="CRM_Pro",
screenshot_id="shot_004",
element_type="button",
element_text="Sauvegarder",
confidence=0.95
)
# Générer un nom intelligent
print("Génération du nom intelligent...")
intelligent_name = session.generate_intelligent_name()
print(f"Nom généré : {intelligent_name}")
# Analyser la session
analysis = session.analyze_session()
print(f"Type de workflow : {analysis.workflow_type}")
print(f"Application principale : {analysis.primary_application}")
print(f"Score de complexité : {analysis.complexity_score:.2f}")
# Évaluer la qualité
quality_score = session.get_workflow_quality_score()
suggestions = session.get_workflow_suggestions()
print(f"Score de qualité : {quality_score:.1%}")
print("Suggestions d'amélioration :")
for suggestion in suggestions:
print(f"{suggestion}")
return session
def demo_different_workflow_types():
"""Démonstration de différents types de workflows"""
print("\n=== Démonstration des Types de Workflows ===")
workflows = []
# 1. Workflow de connexion
print("\n1. Workflow de Connexion")
login_session = EnhancedRawSession.create_enhanced(
user_id="demo_user",
workflow_name="Demo_Login"
)
login_session.add_enhanced_mouse_click_event(
button="left", pos=[100, 200],
window_title="Gmail - Sign In", app_name="Chrome",
screenshot_id="login_001", element_type="input",
element_text="Email", confidence=0.9
)
login_session.add_enhanced_key_event(
keys=["user@example.com"], window_title="Gmail - Sign In",
app_name="Chrome", screenshot_id="login_002",
text_content="user@example.com", input_method="typing"
)
login_session.add_enhanced_mouse_click_event(
button="left", pos=[100, 250],
window_title="Gmail - Sign In", app_name="Chrome",
screenshot_id="login_003", element_type="input",
element_text="Password", confidence=0.9
)
login_name = login_session.generate_intelligent_name()
print(f"Nom généré : {login_name}")
workflows.append(("Connexion", login_session))
# 2. Workflow de navigation
print("\n2. Workflow de Navigation")
nav_session = EnhancedRawSession.create_enhanced(
user_id="demo_user",
workflow_name="Demo_Navigation"
)
# Plusieurs clics de navigation
for i, section in enumerate(["Dashboard", "Reports", "Settings", "Profile"]):
nav_session.add_enhanced_mouse_click_event(
button="left", pos=[50 + i*100, 50],
window_title=f"App - {section}", app_name="WebApp",
screenshot_id=f"nav_{i:03d}", element_type="link",
element_text=section, confidence=0.8
)
nav_name = nav_session.generate_intelligent_name()
print(f"Nom généré : {nav_name}")
workflows.append(("Navigation", nav_session))
# 3. Workflow de recherche
print("\n3. Workflow de Recherche")
search_session = EnhancedRawSession.create_enhanced(
user_id="demo_user",
workflow_name="Demo_Search"
)
search_session.add_enhanced_mouse_click_event(
button="left", pos=[300, 50],
window_title="Google", app_name="Chrome",
screenshot_id="search_001", element_type="input",
element_text="Search", confidence=0.9
)
search_session.add_enhanced_key_event(
keys=["Python", "space", "tutorial"],
window_title="Google", app_name="Chrome",
screenshot_id="search_002", text_content="Python tutorial",
input_method="typing"
)
search_name = search_session.generate_intelligent_name()
print(f"Nom généré : {search_name}")
workflows.append(("Recherche", search_session))
return workflows
def demo_quality_assessment():
"""Démonstration de l'évaluation de qualité"""
print("\n=== Démonstration de l'Évaluation de Qualité ===")
# Workflow de haute qualité
print("\n1. Workflow de Haute Qualité")
high_quality = EnhancedRawSession.create_enhanced(
user_id="demo_user",
workflow_name="High_Quality_Demo"
)
# Nombreuses interactions variées
for i in range(5):
high_quality.add_enhanced_mouse_click_event(
button="left", pos=[100 + i*50, 100 + i*30],
window_title="Complex App - Form", app_name="ComplexApp",
screenshot_id=f"hq_{i:03d}", element_type="input",
element_text=f"Field {i+1}", confidence=0.9
)
high_quality.add_enhanced_key_event(
keys=[f"Value_{i+1}"], window_title="Complex App - Form",
app_name="ComplexApp", screenshot_id=f"hq_key_{i:03d}",
text_content=f"Value_{i+1}", input_method="typing"
)
hq_score = high_quality.get_workflow_quality_score()
hq_suggestions = high_quality.get_workflow_suggestions()
print(f"Score de qualité : {hq_score:.1%}")
print("Suggestions :")
for suggestion in hq_suggestions:
print(f"{suggestion}")
# Workflow de basse qualité
print("\n2. Workflow de Basse Qualité")
low_quality = EnhancedRawSession.create_enhanced(
user_id="demo_user",
workflow_name="Low_Quality_Demo"
)
# Une seule interaction simple
low_quality.add_enhanced_mouse_click_event(
button="left", pos=[100, 100],
window_title="Simple App", app_name="SimpleApp",
screenshot_id="lq_001", element_type="button",
element_text="Click", confidence=0.5
)
lq_score = low_quality.get_workflow_quality_score()
lq_suggestions = low_quality.get_workflow_suggestions()
print(f"Score de qualité : {lq_score:.1%}")
print("Suggestions :")
for suggestion in lq_suggestions:
print(f"{suggestion}")
def demo_serialization():
"""Démonstration de la sérialisation enrichie"""
print("\n=== Démonstration de la Sérialisation ===")
session = EnhancedRawSession.create_enhanced(
user_id="demo_user",
workflow_name="Serialization_Demo"
)
# Ajouter quelques événements
session.add_enhanced_mouse_click_event(
button="left", pos=[100, 200],
window_title="Test App", app_name="TestApp",
screenshot_id="ser_001", element_type="button",
element_text="Test Button", confidence=0.9
)
# Fermer avec analyse
session.close_with_analysis()
# Sauvegarder dans un dossier temporaire
with tempfile.TemporaryDirectory() as temp_dir:
json_path = session.save_enhanced_json(temp_dir)
print(f"Session sauvegardée : {json_path}")
# Lire et afficher le contenu
import json
with open(json_path, 'r', encoding='utf-8') as f:
data = json.load(f)
print(f"Clés principales : {list(data.keys())}")
if 'workflow_metadata' in data:
metadata = data['workflow_metadata']
print(f"Nom du workflow : {metadata.get('workflow_name')}")
print(f"Type : {metadata.get('workflow_type')}")
print(f"Application : {metadata.get('primary_application')}")
print(f"Score de complexité : {metadata.get('complexity_score', 0):.2f}")
print(f"Nombre d'événements : {len(data.get('events', []))}")
print(f"Nombre d'événements enrichis : {len(data.get('enhanced_events', []))}")
print(f"Score de qualité : {data.get('quality_score', 0):.1%}")
def demo_ui_integration():
"""Démonstration de l'intégration UI (si Qt disponible)"""
print("\n=== Démonstration de l'Intégration UI ===")
try:
from PyQt5.QtWidgets import QApplication
# Vérifier si Qt est disponible
app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)
print("Qt5 disponible - démonstration des dialogues")
# Simuler des noms existants
existing_names = [
"Saisie_Client_CRM",
"Navigation_Dashboard_Admin",
"Recherche_Produits_Catalogue"
]
print("Noms existants :")
for name in existing_names:
print(f"{name}")
print("\nPour tester le dialogue interactif, décommentez le code suivant :")
print("# result = show_workflow_name_dialog('Nouveau_Workflow_Demo', existing_names)")
print("# print(f'Nom sélectionné : {result}')")
# Démonstration non-interactive
# result = show_workflow_name_dialog("Nouveau_Workflow_Demo", existing_names)
# print(f"Nom sélectionné : {result}")
except ImportError:
print("Qt5 non disponible - utilisation des fallbacks")
print("Les dialogues utiliseront des interfaces texte simplifiées")
def main():
"""Fonction principale de démonstration"""
print("Démonstration du Système de Nommage Intelligent des Workflows")
print("=" * 70)
try:
# Démonstrations principales
session = demo_basic_naming()
workflows = demo_different_workflow_types()
demo_quality_assessment()
demo_serialization()
demo_ui_integration()
# Résumé final
print("\n" + "=" * 70)
print("Résumé de la Démonstration")
print("=" * 70)
print(f"✓ Session de base créée : {session.session_id}")
print(f"{len(workflows)} types de workflows démontrés")
print("✓ Évaluation de qualité testée")
print("✓ Sérialisation enrichie validée")
print("✓ Intégration UI vérifiée")
print("\nFonctionnalités démontrées :")
print(" • Génération automatique de noms intelligents")
print(" • Détection de types de workflows")
print(" • Analyse de qualité avec suggestions")
print(" • Sérialisation enrichie avec métadonnées")
print(" • Compatibilité avec l'interface utilisateur")
print("\nPour utiliser le système :")
print(" 1. Remplacez TrayApp par EnhancedTrayApp")
print(" 2. Les dialogues de nommage s'ouvriront automatiquement")
print(" 3. Les workflows seront organisés avec des noms descriptifs")
print(" 4. Consultez le guide : agent_v0/WORKFLOW_NAMING_GUIDE.md")
return 0
except Exception as e:
print(f"Erreur lors de la démonstration : {e}")
import traceback
traceback.print_exc()
return 1
if __name__ == "__main__":
sys.exit(main())