import httpx from core_domain import ( MemoryCreateContract, MemoryItemContract, MemorySearchRequestContract, MemorySearchResultContract, ) class MemoryClientError(Exception): pass class MemoryClient: def __init__(self, *, base_url: str, timeout_seconds: float = 10.0) -> None: self.base_url = base_url.rstrip("/") self.timeout_seconds = timeout_seconds def create_memory(self, payload: MemoryCreateContract) -> MemoryItemContract: try: with httpx.Client(timeout=self.timeout_seconds) as client: response = client.post( f"{self.base_url}/memories", json=payload.model_dump(mode="json")) response.raise_for_status() return MemoryItemContract.model_validate(response.json()) except httpx.HTTPError as exc: raise MemoryClientError(f"memory-service create request failed: {exc}") from exc def search_memories( self, payload: MemorySearchRequestContract) -> list[MemorySearchResultContract]: try: with httpx.Client(timeout=self.timeout_seconds) as client: response = client.post( f"{self.base_url}/memories/search", json=payload.model_dump(mode="json")) response.raise_for_status() return [ MemorySearchResultContract.model_validate(item) for item in response.json() ] except httpx.HTTPError as exc: raise MemoryClientError(f"memory-service search request failed: {exc}") from exc