43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
"""API для работы с памятью (MEMORY.md)"""
|
||
from __future__ import annotations
|
||
import os
|
||
from pathlib import Path
|
||
from fastapi import APIRouter, HTTPException
|
||
from pydantic import BaseModel, Field
|
||
|
||
router = APIRouter(prefix="/api/v1/memory", tags=["memory"])
|
||
|
||
HERMES_HOME = Path(os.environ.get("HERMES_HOME", Path.home() / ".hermes"))
|
||
|
||
class MemoryEntry(BaseModel):
|
||
key: str
|
||
value: str
|
||
|
||
@router.get("/{key}")
|
||
def get_memory(key: str):
|
||
path = HERMES_HOME / "memories" / "MEMORY.md"
|
||
if not path.exists():
|
||
return {"key": key, "value": None, "found": False}
|
||
content = path.read_text(encoding="utf-8")
|
||
# Поиск секции ключа
|
||
for line in content.split("\n"):
|
||
if key.lower() in line.lower():
|
||
return {"key": key, "value": line.strip(), "found": True, "source": str(path)}
|
||
return {"key": key, "value": None, "found": False}
|
||
|
||
@router.put("/{key}")
|
||
def set_memory(key: str, entry: MemoryEntry):
|
||
path = HERMES_HOME / "memories" / "MEMORY.md"
|
||
path.parent.mkdir(parents=True, exist_ok=True)
|
||
content = path.read_text(encoding="utf-8") if path.exists() else ""
|
||
content += f"\n{entry.value}"
|
||
path.write_text(content, encoding="utf-8")
|
||
return {"status": "saved"}
|
||
|
||
@router.get("")
|
||
def list_memory(limit: int = 20):
|
||
path = HERMES_HOME / "memories" / "MEMORY.md"
|
||
if not path.exists():
|
||
return {"entries": []}
|
||
lines = [l.strip() for l in path.read_text(encoding="utf-8").split("\n") if l.strip() and not l.startswith("#")]
|
||
return {"entries": [{"line": l} for l in lines[:limit]], "total": len(lines)}
|