"""Routes for analyze/store.""" import time import logging import os from typing import Dict, Any from fastapi import APIRouter, HTTPException from pydantic import BaseModel from api.deps import get_logger import requests from memory.episodic_db import EpisodicDB from api.deps import is_remote_brain_only, load_config router = APIRouter() logger = get_logger("kapo.brain.analyze") class AnalyzeRequest(BaseModel): request_id: str payload: Dict[str, Any] auth_token: str | None = None timestamp: float | None = None @router.post("/analyze") async def analyze(req: AnalyzeRequest): """????? ??????? ?? ??????? ??????? (Episodic).""" try: if not is_remote_brain_only(): db = EpisodicDB() db.insert_experience( task=req.payload.get("task", "unknown"), plan=req.payload.get("plan", {}), tools_used=req.payload.get("tools_used", {}), result=req.payload.get("result", {}), success=1 if req.payload.get("success") else 0, ) else: try: hub = load_config().get("LOCAL_HUB_URL") or os.getenv("LOCAL_HUB_URL") if hub: requests.post(f"{hub}/memory/store", json={"request_id": req.request_id, "payload": req.payload}, timeout=10) except Exception: logger.warning("Local hub store failed") return {"status": "stored", "timestamp": time.time()} except Exception as exc: logger.exception("Analyze failed") raise HTTPException(status_code=500, detail=str(exc))