- 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>
245 lines
7.6 KiB
Markdown
245 lines
7.6 KiB
Markdown
# Prochaine Session - Guide de Reprise
|
|
|
|
**Date de cette note**: 22 Novembre 2024
|
|
**Status actuel**: Phase 2 - Task 2.8 COMPLÉTÉE ✅
|
|
|
|
## Résumé Rapide
|
|
|
|
✅ **CLIP Embedders sont fonctionnels et testés**
|
|
|
|
Les embedders CLIP (ViT-B-32, 512D) fonctionnent correctement pour:
|
|
- Embedding de texte
|
|
- Embedding d'image
|
|
- Similarité cosinus
|
|
- Batch processing (manuel)
|
|
|
|
## Prochaine Task: 2.9 - Intégrer CLIP dans StateEmbeddingBuilder
|
|
|
|
### Objectif
|
|
|
|
Remplacer les vecteurs aléatoires actuels dans `StateEmbeddingBuilder` par de vrais embeddings CLIP.
|
|
|
|
### Fichiers à Modifier
|
|
|
|
1. **`rpa_vision_v3/core/embedding/state_embedding_builder.py`**
|
|
- Ajouter support pour CLIP embedders
|
|
- Adapter pour la structure actuelle de ScreenState
|
|
- Gérer conversion PIL.Image pour screenshots
|
|
|
|
### Approche Recommandée
|
|
|
|
#### Option 1: Adapter le StateEmbeddingBuilder Existant
|
|
|
|
Modifier le fichier actuel pour:
|
|
1. Accepter un CLIPEmbedder en paramètre
|
|
2. Utiliser `embed_text()` et `embed_image()` au lieu de vecteurs aléatoires
|
|
3. Gérer la conversion des chemins de fichiers en PIL.Image
|
|
|
|
#### Option 2: Créer une Version Simplifiée
|
|
|
|
Créer un nouveau fichier `simple_state_embedding_builder.py` qui:
|
|
1. Prend un ScreenState simple (avec `screenshot_path`, `window_title`, `ui_elements`)
|
|
2. Utilise directement le CLIPEmbedder
|
|
3. Retourne un StateEmbedding avec vecteur fusionné
|
|
|
|
**Recommandation**: Option 2 pour avancer rapidement, puis migrer vers Option 1.
|
|
|
|
### Code de Démarrage
|
|
|
|
```python
|
|
# rpa_vision_v3/core/embedding/simple_state_embedding_builder.py
|
|
|
|
from typing import Optional
|
|
from pathlib import Path
|
|
import numpy as np
|
|
from PIL import Image
|
|
|
|
from .clip_embedder import CLIPEmbedder, create_clip_embedder
|
|
from .fusion_engine import FusionEngine
|
|
from ..models.state_embedding import StateEmbedding
|
|
|
|
class SimpleStateEmbeddingBuilder:
|
|
"""Version simplifiée du StateEmbeddingBuilder avec CLIP."""
|
|
|
|
def __init__(self,
|
|
clip_embedder: Optional[CLIPEmbedder] = None,
|
|
fusion_engine: Optional[FusionEngine] = None):
|
|
self.clip_embedder = clip_embedder or create_clip_embedder()
|
|
self.fusion_engine = fusion_engine or FusionEngine()
|
|
|
|
def build_embedding(self, screen_state) -> StateEmbedding:
|
|
"""Construire un State Embedding depuis un ScreenState."""
|
|
|
|
embeddings = {}
|
|
|
|
# 1. Image embedding
|
|
if screen_state.screenshot_path:
|
|
img = Image.open(screen_state.screenshot_path)
|
|
embeddings["image"] = self.clip_embedder.embed_image(img)
|
|
|
|
# 2. Title embedding
|
|
if screen_state.window_title:
|
|
embeddings["title"] = self.clip_embedder.embed_text(screen_state.window_title)
|
|
|
|
# 3. Text embedding (from UI elements)
|
|
texts = [el.label for el in screen_state.ui_elements if el.label]
|
|
if texts:
|
|
combined_text = " ".join(texts[:10]) # Limit to 10
|
|
embeddings["text"] = self.clip_embedder.embed_text(combined_text)
|
|
|
|
# 4. UI embedding (from UI element types/roles)
|
|
ui_descriptions = [f"{el.type} {el.role}" for el in screen_state.ui_elements[:20]]
|
|
if ui_descriptions:
|
|
ui_text = " ".join(ui_descriptions)
|
|
embeddings["ui"] = self.clip_embedder.embed_text(ui_text)
|
|
|
|
# Fusion
|
|
return self.fusion_engine.create_state_embedding(
|
|
embedding_id=f"state_{screen_state.timestamp}",
|
|
embeddings=embeddings,
|
|
metadata={"window_title": screen_state.window_title}
|
|
)
|
|
```
|
|
|
|
### Test à Créer
|
|
|
|
```python
|
|
# rpa_vision_v3/examples/test_simple_state_embedding.py
|
|
|
|
from core.embedding.simple_state_embedding_builder import SimpleStateEmbeddingBuilder
|
|
from core.models.screen_state import ScreenState
|
|
from core.models.ui_element import UIElement, UIElementEmbeddings, VisualFeatures
|
|
|
|
# Créer un ScreenState de test
|
|
screen_state = ScreenState(
|
|
timestamp=1700000000.0,
|
|
window_title="Test App",
|
|
screenshot_path="examples/test_synthetic_ui.png",
|
|
ui_elements=[
|
|
UIElement(
|
|
element_id="btn1",
|
|
type="button",
|
|
role="primary_action",
|
|
bbox=(50, 50, 150, 90),
|
|
center=(100, 70),
|
|
label="Login",
|
|
label_confidence=0.9,
|
|
embeddings=UIElementEmbeddings(),
|
|
visual_features=VisualFeatures(
|
|
dominant_color="#0066cc",
|
|
has_icon=False,
|
|
shape="rounded_rectangle",
|
|
size_category="medium"
|
|
),
|
|
confidence=0.9
|
|
)
|
|
],
|
|
screen_size=(800, 600)
|
|
)
|
|
|
|
# Construire l'embedding
|
|
builder = SimpleStateEmbeddingBuilder()
|
|
state_embedding = builder.build_embedding(screen_state)
|
|
|
|
print(f"✓ State Embedding: {state_embedding.fused_vector.shape}")
|
|
print(f"✓ Components: {list(state_embedding.component_vectors.keys())}")
|
|
```
|
|
|
|
## Commandes Rapides
|
|
|
|
```bash
|
|
# Activer venv
|
|
source geniusia2/venv/bin/activate
|
|
|
|
# Tester CLIP
|
|
bash rpa_vision_v3/test_clip.sh
|
|
|
|
# Lancer tests unitaires
|
|
cd rpa_vision_v3
|
|
pytest tests/
|
|
|
|
# Voir les tasks
|
|
cat rpa_vision_v3/docs/specs/tasks.md
|
|
```
|
|
|
|
## Fichiers Importants
|
|
|
|
### Documentation
|
|
- `rpa_vision_v3/PHASE2_CLIP_COMPLETE.md` - Status Phase 2
|
|
- `rpa_vision_v3/SESSION_22NOV_CLIP.md` - Notes de session
|
|
- `rpa_vision_v3/docs/specs/tasks.md` - Task list complète
|
|
|
|
### Code Core
|
|
- `rpa_vision_v3/core/embedding/clip_embedder.py` - CLIP embedder (geniusia2)
|
|
- `rpa_vision_v3/core/embedding/fusion_engine.py` - Fusion multi-modale
|
|
- `rpa_vision_v3/core/embedding/state_embedding_builder.py` - À adapter
|
|
|
|
### Tests
|
|
- `rpa_vision_v3/examples/test_clip_simple.py` - Test CLIP ✅
|
|
- `rpa_vision_v3/test_clip.sh` - Script de test rapide
|
|
|
|
## Problèmes Connus
|
|
|
|
### 1. Structure ScreenState
|
|
|
|
Le ScreenState actuel a une structure à 4 niveaux (raw, perception, semantic, context) mais nos tests utilisent une structure simplifiée. Il faudra:
|
|
- Soit adapter les tests pour la structure complète
|
|
- Soit créer une version simplifiée pour les tests
|
|
|
|
### 2. Interface CLIP
|
|
|
|
Le CLIP embedder de geniusia2 a une interface légèrement différente:
|
|
- Pas de `embed_batch_texts()` → utiliser list comprehension
|
|
- Pas de `get_similarity()` → utiliser `np.dot()`
|
|
- Pas de `embedding_dim` → utiliser `get_dimension()`
|
|
- Accepte seulement PIL.Image, pas de chemins
|
|
|
|
### 3. Dépendances
|
|
|
|
Utiliser le venv de geniusia2 pour avoir toutes les dépendances:
|
|
```bash
|
|
source geniusia2/venv/bin/activate
|
|
```
|
|
|
|
## Métriques de Succès pour Task 2.9
|
|
|
|
✅ Task 2.9 sera complétée quand:
|
|
1. StateEmbeddingBuilder utilise de vrais CLIP embedders
|
|
2. Un test démontre la génération d'embeddings réels
|
|
3. La similarité entre états similaires est élevée (>0.8)
|
|
4. La similarité entre états différents est faible (<0.6)
|
|
|
|
## Après Task 2.9
|
|
|
|
### Phase 3: Détection UI Sémantique
|
|
- Intégrer VLM pour détection
|
|
- Classifier types et rôles
|
|
- Générer embeddings duaux
|
|
|
|
### Phase 3.5: Optimisation Asynchrone
|
|
- Batch processing optimisé
|
|
- Caching des embeddings
|
|
- Utilisation GPU
|
|
|
|
### Phase 4: Workflow Graphs
|
|
- Construction de graphes
|
|
- Matching de ScreenStates
|
|
- Détection de patterns
|
|
|
|
## Questions à Résoudre
|
|
|
|
1. **Structure de données**: Utiliser la structure ScreenState complète ou simplifiée?
|
|
2. **Batch processing**: Implémenter maintenant ou plus tard?
|
|
3. **Caching**: Ajouter un cache d'embeddings dès maintenant?
|
|
4. **GPU**: Tester avec GPU ou rester sur CPU pour l'instant?
|
|
|
|
## Ressources
|
|
|
|
- [OpenCLIP Docs](https://github.com/mlfoundations/open_clip)
|
|
- [FAISS Docs](https://github.com/facebookresearch/faiss)
|
|
- [Spec Workflow Graph](.kiro/specs/workflow-graph-implementation/)
|
|
|
|
---
|
|
|
|
**Prêt à continuer ?** Commencez par Task 2.9 ! 🚀
|