from fastapi import APIRouter, Depends, Query from sqlalchemy.orm import Session from app.core.database import get_db from app.core.security import ApiPrincipal, require_api_key from app.modules.ai_memory.constants import AIMemoryResponseKey, AIMemoryStatus from app.modules.ai_memory.schemas import AIMemoryRecallRequest from app.modules.ai_memory.service import AIMemoryService router = APIRouter(dependencies=[Depends(require_api_key)]) @router.get("/memory") def list_memory( scope: str | None = None, subject: str | None = None, status: str = AIMemoryStatus.ACTIVE, limit: int = Query(default=100, ge=1, le=500), db: Session = Depends(get_db), ) -> dict: return { AIMemoryResponseKey.ITEMS: AIMemoryService(db).list_entries( scope=scope, subject=subject, status_filter=status, limit=limit, ) } @router.post("/memory/recall") def recall_memory( payload: AIMemoryRecallRequest, db: Session = Depends(get_db), principal: ApiPrincipal = Depends(require_api_key), ) -> dict: items = AIMemoryService(db).recall( query=payload.query, scope=payload.scope, subject=payload.subject, limit=payload.limit, actor=principal.actor, ) return {AIMemoryResponseKey.ITEMS: items}