"""Memory Gateway v2 workflow API.""" from __future__ import annotations from typing import Optional from fastapi import APIRouter, Depends, Query from .schemas_v2 import ( BackendRefStatus, BackendType, CommitJobView, CommitRequest, CommitResponse, FeedbackRequest, FeedbackResponse, IngestRequest, IngestResponse, MemoryRefType, MemoryRefView, OutboxProcessResponse, RetrieveRequest, RetrieveResponse, ) from .server_auth import verify_api_key_compat from .services_v2 import v2_service router = APIRouter(prefix="/v2", tags=["memory-v2"], dependencies=[Depends(verify_api_key_compat)]) @router.post("/conversations/ingest", response_model=IngestResponse) async def ingest_conversation(request: IngestRequest): return await v2_service.ingest_conversation_turn(request) @router.post("/conversations/{session_id}/commit", response_model=CommitResponse) async def commit_conversation(session_id: str, request: CommitRequest): return await v2_service.commit_session(session_id, request) @router.get("/jobs/{job_id}", response_model=CommitJobView) async def get_commit_job(job_id: str): return v2_service.get_commit_job_view(job_id) @router.post("/context/retrieve", response_model=RetrieveResponse) async def retrieve_context(request: RetrieveRequest): return await v2_service.retrieve_context(request) @router.get("/memory/refs", response_model=list[MemoryRefView]) async def list_memory_refs( workspace_id: Optional[str] = Query(default=None), user_id: Optional[str] = Query(default=None), agent_id: Optional[str] = Query(default=None), session_id: Optional[str] = Query(default=None), namespace: Optional[str] = Query(default=None), backend_type: Optional[BackendType] = Query(default=None), ref_type: Optional[MemoryRefType] = Query(default=None), status: Optional[BackendRefStatus] = Query(default=None), limit: int = Query(default=100, ge=1, le=1000), ): return v2_service.list_memory_refs( workspace_id=workspace_id, user_id=user_id, agent_id=agent_id, session_id=session_id, namespace=namespace, backend_type=backend_type, ref_type=ref_type, status=status, limit=limit, ) @router.post("/memory/feedback", response_model=FeedbackResponse) async def memory_feedback(request: FeedbackRequest): return await v2_service.record_memory_feedback(request) @router.post("/admin/outbox/process", response_model=OutboxProcessResponse, tags=["memory-v2-admin"]) async def process_outbox( limit: int = Query(default=100, ge=1, le=1000), worker_id: Optional[str] = Query(default=None), lease_seconds: int = Query(default=300, ge=1, le=3600), ): return await v2_service.process_pending_outbox_events_summary( limit=limit, worker_id=worker_id, lease_seconds=lease_seconds, )