- 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>
5.9 KiB
🔍 Diagnostic - Screenshots Manquants
Date: 7 janvier 2026 Problème: Les screenshots ne sont pas stockés après l'upload
📊 Situation Actuelle
✅ Ce qui Fonctionne
- Upload réussi : Session uploadée avec succès (HTTP 200)
- Déchiffrement OK : Le mot de passe de chiffrement est synchronisé
- JSON sauvegardé :
/opt/rpa_vision_v3/data/training/sessions/2026-01-07/session_sess_20260107T182507_3a3709d4.json - Screen states créés : 8+ fichiers dans
/opt/rpa_vision_v3/data/training/screen_states/2026-01-07/
❌ Le Problème
Screenshots manquants :
- Le JSON référence 16 screenshots :
"relative_path": "shots/shot_0001.png"àshot_0016.png - Le répertoire
/opt/rpa_vision_v3/data/screenshots/existe mais est VIDE - Aucun fichier
.pngtrouvé dans/opt/rpa_vision_v3/data/
🔍 Analyse du Flux
Flux Actuel (api_upload.py)
1. Réception ZIP chiffré → /data/training/uploads/sess_*.enc
2. Déchiffrement → /data/training/uploads/sess_*.zip
3. Extraction ZIP → /data/training/sessions/sess_*/
├── sess_*/sess_*.json
└── sess_*/shots/shot_*.png ← Screenshots ici temporairement
4. Chargement RawSession depuis JSON
5. StorageManager.save_raw_session() → /data/training/sessions/2026-01-07/session_*.json
⚠️ Ne copie QUE le JSON, PAS les screenshots
6. Nettoyage ? → Répertoire d'extraction supprimé ?
Résultat
- Le JSON est sauvegardé avec organisation par date ✅
- Les screenshots restent dans le répertoire d'extraction temporaire ❌
- Le répertoire d'extraction est probablement nettoyé après ❌
- Perte des screenshots ❌
🔧 Solutions Possibles
Solution 1 : Modifier StorageManager pour Copier les Screenshots
Avantage : Solution propre, centralisée Inconvénient : Nécessite modification du code core
Implémentation :
# Dans StorageManager.save_raw_session()
def save_raw_session(self, session: RawSession, session_id: str, screenshots_dir: Optional[Path] = None):
# Sauvegarder JSON (existant)
date_path = self._get_date_path("sessions")
json_path = date_path / f"session_{session_id}.json"
# ... save JSON ...
# NOUVEAU : Copier les screenshots
if screenshots_dir and screenshots_dir.exists():
screenshots_dest = self.base_path / "screenshots" / session_id
screenshots_dest.mkdir(parents=True, exist_ok=True)
for screenshot in session.screenshots:
src = screenshots_dir / screenshot.relative_path
if src.exists():
dest = screenshots_dest / src.name
shutil.copy2(src, dest)
# Mettre à jour le chemin relatif dans session
screenshot.relative_path = f"{session_id}/{src.name}"
Solution 2 : Modifier api_upload.py pour Copier Avant StorageManager
Avantage : Pas de modification du core Inconvénient : Logique dupliquée
Implémentation :
# Dans api_upload.py après extraction
extract_dir = SESSIONS_DIR / session_id
with zipfile.ZipFile(zip_path, 'r') as zf:
zf.extractall(extract_dir)
# NOUVEAU : Copier screenshots vers /data/screenshots
screenshots_src = extract_dir / session_id / "shots"
if screenshots_src.exists():
screenshots_dest = Path("data/screenshots") / session_id
screenshots_dest.mkdir(parents=True, exist_ok=True)
shutil.copytree(screenshots_src, screenshots_dest, dirs_exist_ok=True)
Solution 3 : Ne PAS Supprimer le Répertoire d'Extraction
Avantage : Simple, pas de code à changer Inconvénient : Duplication des données, espace disque
Implémentation :
- Conserver le répertoire
/data/training/sessions/sess_*/ - Les screen_states référencent déjà le bon chemin relatif
- Mettre à jour les chemins dans le JSON si nécessaire
🎯 Recommandation pour le POC/MVP
Pour la démo investisseurs (court terme) : → Solution 3 : Ne pas nettoyer le répertoire d'extraction
Avantages :
- Aucune modification de code nécessaire
- Rapide à implémenter
- Screenshots accessibles immédiatement
- Réversible
Actions :
- Vérifier si le nettoyage est déjà désactivé
- Si actif, commenter le code de nettoyage dans api_upload.py
- Tester avec une nouvelle session
Pour la production (moyen terme) : → Solution 1 : Modifier StorageManager proprement
📝 Vérifications à Faire
-
Vérifier si le répertoire d'extraction existe :
find /opt/rpa_vision_v3/data/training/sessions -type d -name "sess_*" -
Si oui, vérifier les screenshots :
find /opt/rpa_vision_v3/data/training/sessions/sess_* -name "*.png" -
Si non, modifier le code pour les préserver
🔍 Tests de Validation
Après correction, vérifier :
# 1. Lancer l'agent et capturer une session
cd /home/dom/ai/rpa_vision_v3/agent_v0 && ./run.sh
# 2. Vérifier que les screenshots sont sauvegardés
ls -lh /opt/rpa_vision_v3/data/screenshots/sess_*/shots/
# OU (selon solution choisie)
ls -lh /opt/rpa_vision_v3/data/training/sessions/sess_*/shots/
# 3. Vérifier la cohérence JSON <> fichiers
python3 -c "
import json
with open('/opt/rpa_vision_v3/data/training/sessions/2026-01-07/session_*.json') as f:
session = json.load(f)
print(f\"Screenshots dans JSON: {len(session['screenshots'])}\")
"
# Compter les fichiers PNG réels
find /opt/rpa_vision_v3/data -name 'shot_*.png' | wc -l
💡 Impact pour la Démo
Critique pour :
- ✅ Démonstration visuelle du système
- ✅ Validation de la capture complète
- ✅ Analyse UI/UX par les investisseurs
- ✅ Preuve de fonctionnement end-to-end
Sans screenshots :
- ❌ Impossible de montrer ce que l'agent a capturé
- ❌ Pas de validation visuelle des workflows
- ❌ Moins convaincant pour les investisseurs
🚀 Prochaine Étape
Choisir une solution et l'implémenter avant la démo.