Files
memory-gateway/memory_gateway/api_v1.py
2026-05-05 16:18:31 +08:00

116 lines
3.5 KiB
Python

"""Generic Memory Gateway v1 HTTP API."""
from __future__ import annotations
from typing import Optional
from fastapi import APIRouter, Depends, Query
from .schemas import (
AccessContext,
CommitSessionRequest,
CreateUserRequest,
EpisodeAppendRequest,
MemoryFeedbackRequest,
MemoryPatchRequest,
MemorySearchRequest,
MemoryUpsertRequest,
)
from .server_auth import verify_api_key_compat
from .services import service
router = APIRouter(prefix="/v1", tags=["memory-v1"], dependencies=[Depends(verify_api_key_compat)])
@router.post("/users")
async def create_user(request: CreateUserRequest):
return service.create_user(request)
@router.get("/users/{user_id}")
async def get_user(user_id: str):
return service.get_user(user_id)
@router.post("/memory/search")
async def search_memory(request: MemorySearchRequest):
return await service.search_memory_with_openviking(request)
@router.post("/memory")
async def upsert_memory(request: MemoryUpsertRequest):
return service.upsert_memory(request)
@router.get("/memory/{memory_id}")
async def get_memory(
memory_id: str,
user_id: str = Query(...),
agent_id: Optional[str] = Query(default=None),
workspace_id: Optional[str] = Query(default=None),
session_id: Optional[str] = Query(default=None),
):
return service.get_memory(memory_id, AccessContext(user_id=user_id, agent_id=agent_id, workspace_id=workspace_id, session_id=session_id))
@router.patch("/memory/{memory_id}")
async def patch_memory(
memory_id: str,
patch: MemoryPatchRequest,
user_id: str = Query(...),
agent_id: Optional[str] = Query(default=None),
workspace_id: Optional[str] = Query(default=None),
session_id: Optional[str] = Query(default=None),
):
return service.patch_memory(memory_id, AccessContext(user_id=user_id, agent_id=agent_id, workspace_id=workspace_id, session_id=session_id), patch)
@router.delete("/memory/{memory_id}")
async def delete_memory(
memory_id: str,
user_id: str = Query(...),
agent_id: Optional[str] = Query(default=None),
workspace_id: Optional[str] = Query(default=None),
session_id: Optional[str] = Query(default=None),
):
return service.delete_memory(memory_id, AccessContext(user_id=user_id, agent_id=agent_id, workspace_id=workspace_id, session_id=session_id))
@router.post("/episodes")
async def append_episode(request: EpisodeAppendRequest):
return service.append_episode(request)
@router.post("/sessions/{session_id}/commit")
async def commit_session(session_id: str, request: CommitSessionRequest):
return service.commit_session(session_id, request)
@router.get("/users/{user_id}/profile")
async def get_profile(user_id: str):
return service.get_profile(user_id)
@router.post("/memory/{memory_id}/feedback")
async def memory_feedback(memory_id: str, request: MemoryFeedbackRequest):
return service.add_feedback(memory_id, request)
@router.get("/namespaces")
async def list_namespaces(
user_id: str = Query(...),
agent_id: Optional[str] = Query(default=None),
workspace_id: Optional[str] = Query(default=None),
session_id: Optional[str] = Query(default=None),
):
return service.list_namespaces(AccessContext(user_id=user_id, agent_id=agent_id, workspace_id=workspace_id, session_id=session_id))
@router.get("/audit")
async def list_audit(limit: int = Query(default=100, ge=1, le=1000)):
return service.list_audit(limit)
@router.get("/evermemos/health")
async def evermemos_health():
return service.evermemos_health()