- 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>
196 lines
5.9 KiB
Markdown
196 lines
5.9 KiB
Markdown
# 🔍 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
|
|
|
|
1. **Upload réussi** : Session uploadée avec succès (HTTP 200)
|
|
2. **Déchiffrement OK** : Le mot de passe de chiffrement est synchronisé
|
|
3. **JSON sauvegardé** : `/opt/rpa_vision_v3/data/training/sessions/2026-01-07/session_sess_20260107T182507_3a3709d4.json`
|
|
4. **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 `.png` trouvé 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** :
|
|
```python
|
|
# 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** :
|
|
```python
|
|
# 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** :
|
|
1. Vérifier si le nettoyage est déjà désactivé
|
|
2. Si actif, commenter le code de nettoyage dans api_upload.py
|
|
3. Tester avec une nouvelle session
|
|
|
|
**Pour la production (moyen terme)** :
|
|
→ **Solution 1** : Modifier StorageManager proprement
|
|
|
|
---
|
|
|
|
## 📝 Vérifications à Faire
|
|
|
|
1. **Vérifier si le répertoire d'extraction existe** :
|
|
```bash
|
|
find /opt/rpa_vision_v3/data/training/sessions -type d -name "sess_*"
|
|
```
|
|
|
|
2. **Si oui, vérifier les screenshots** :
|
|
```bash
|
|
find /opt/rpa_vision_v3/data/training/sessions/sess_* -name "*.png"
|
|
```
|
|
|
|
3. **Si non, modifier le code pour les préserver**
|
|
|
|
---
|
|
|
|
## 🔍 Tests de Validation
|
|
|
|
Après correction, vérifier :
|
|
|
|
```bash
|
|
# 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.
|