Spaces:
Configuration error
Configuration error
File size: 2,400 Bytes
a97ced3 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | # 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} |