116 lines
3.5 KiB
Python
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()
|