""" Manual memory distillation endpoints. POST /distill/short — roll session logs → MEMORY_SHORT.md (no LLM) POST /distill/mid — summarize short → MEMORY_MID.md (LLM) POST /distill/long — integrate mid → MEMORY_LONG.md (LLM) POST /distill/all — run all three in sequence """ from fastapi import APIRouter from memory_distiller import distill_short, distill_mid, distill_long import scheduler router = APIRouter(prefix="/distill") @router.get("/status") async def distill_status() -> dict: """Show auto-distillation schedule and next run times.""" from config import settings return { "enabled": settings.auto_distill, "jobs": scheduler.status(), "config": { "short": settings.auto_distill_short, "mid": settings.auto_distill_mid, "long": settings.auto_distill_long, }, } @router.post("/short") async def do_distill_short() -> dict: return {"ok": True, **distill_short()} @router.post("/mid") async def do_distill_mid() -> dict: result = await distill_mid() return {"ok": "error" not in result, **result} @router.post("/long") async def do_distill_long() -> dict: result = await distill_long() return {"ok": "error" not in result, **result} @router.post("/all") async def do_distill_all() -> dict: short_result = distill_short() mid_result = await distill_mid() if "error" in mid_result: return {"ok": False, "short": short_result, "mid": mid_result} long_result = await distill_long() return { "ok": "error" not in long_result, "short": short_result, "mid": mid_result, "long": long_result, }