deci-core-api / session.py
Denisijcu's picture
Upload 2 files
4ad96d9 verified
import uuid
from fastapi import APIRouter, HTTPException
from qdrant_client import QdrantClient
from app.api.schemas.telemetry import TelemetryPayload
from app.core.engine import DECI_Engine
router = APIRouter()
engine = DECI_Engine()
# Conexión al Vault (deci_vault es el nombre del servicio en tu docker-compose)
try:
vault = QdrantClient(host="localhost", port=6333) # Usa "deci_vault" si corre dentro de Docker
except Exception:
vault = None
@router.post("/analyze")
async def analyze_session(payload: TelemetryPayload):
"""
Analiza la sesión y, si es humana, guarda la firma en el Cognitive DNA Vault.
"""
try:
if not payload.events:
raise HTTPException(status_code=400, detail="No telemetry events provided")
result = engine.process_session(payload.events)
# --- LÓGICA DE PERSISTENCIA (El "Plus" de hoy) ---
if result.get("is_human") and vault:
# Creamos el vector de 128 dimensiones
vector = [0.0] * 128
# Mapeamos las métricas clave de Claude
vector[0] = result["score"]
vector[1] = result["breakdown"]["entropy"]
vector[2] = result["breakdown"]["cv"]
vector[3] = result["breakdown"].get("burst", 0.0)
vault.upsert(
collection_name="cognitive_dna",
points=[{
"id": str(uuid.uuid4()),
"vector": vector,
"payload": {
"user": "Denis",
"session_id": payload.session_id,
"verdict": result["verdict"]
}
}]
)
return {
"session_id": payload.session_id,
"analysis": result,
"vault_synced": result.get("is_human", False)
}
except Exception as e:
print(f"🚨 [SESSION_ERROR]: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))