File size: 1,648 Bytes
06ce7ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""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))