"""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()