Spaces:
Configuration error
Configuration error
| # core/visualizations.py | |
| """ | |
| Visualisations pour Lucie – arbre de connaissances (vis.js) et cerveau 3D (Three.js). | |
| Utilise les données de ChromaDB (vector_memory). | |
| """ | |
| import json | |
| import logging | |
| from typing import Dict, List, Any | |
| logger = logging.getLogger("lucie.visualizations") | |
| def generate_knowledge_graph(vector_memory, limit: int = 50) -> Dict: | |
| """ | |
| Génère les données pour vis.js à partir des épisodes de ChromaDB. | |
| Retourne un dict avec 'nodes' et 'edges'. | |
| """ | |
| nodes = [] | |
| edges = [] | |
| try: | |
| # Récupérer les épisodes | |
| episodes = vector_memory.search("*", n=limit, min_score=0.0) | |
| for idx, ep in enumerate(episodes): | |
| node_id = f"node_{idx}" | |
| label = ep.get("metadata", {}).get("source", "unknown")[:20] | |
| nodes.append({ | |
| "id": node_id, | |
| "label": label, | |
| "title": ep["text"][:100], | |
| "score": ep.get("similarity", 0.0), | |
| "group": ep.get("metadata", {}).get("method", "other") | |
| }) | |
| # Lien avec le précédent (simple graphe linéaire pour l'exemple) | |
| if idx > 0: | |
| edges.append({ | |
| "from": f"node_{idx-1}", | |
| "to": node_id, | |
| "value": ep.get("similarity", 0.5) | |
| }) | |
| except Exception as e: | |
| logger.error(f"Erreur génération graphe: {e}") | |
| return {"nodes": nodes, "edges": edges} | |
| def generate_brain_state(vector_memory) -> Dict: | |
| """ | |
| Génère l'état du cerveau 3D (couleur, intensité, particules) basé sur la progression. | |
| Retourne un dict avec 'color', 'intensity', 'particles'. | |
| """ | |
| try: | |
| stats = vector_memory.stats() if vector_memory else {} | |
| count = stats.get("count", 0) | |
| # Progression simple (0-100) | |
| progress = min(100, count * 2) # 2% par épisode, max 100 | |
| # Couleur de 0 (bleu) à 1 (rouge) selon progression | |
| color = (progress / 100.0, 0.3, 1.0 - progress / 100.0) | |
| return { | |
| "color": color, | |
| "intensity": 0.5 + progress / 200.0, | |
| "particles": min(500, count * 10), | |
| "progress": progress | |
| } | |
| except Exception as e: | |
| logger.error(f"Erreur génération cerveau: {e}") | |
| return {"color": (0.2, 0.5, 0.8), "intensity": 0.5, "particles": 100, "progress": 0} |