memory_client.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import httpx
  2. from core_domain import (
  3. MemoryCreateContract,
  4. MemoryItemContract,
  5. MemorySearchRequestContract,
  6. MemorySearchResultContract,
  7. )
  8. class MemoryClientError(Exception):
  9. pass
  10. class MemoryClient:
  11. def __init__(self, *, base_url: str, timeout_seconds: float = 10.0) -> None:
  12. self.base_url = base_url.rstrip("/")
  13. self.timeout_seconds = timeout_seconds
  14. def create_memory(self, payload: MemoryCreateContract) -> MemoryItemContract:
  15. try:
  16. with httpx.Client(timeout=self.timeout_seconds) as client:
  17. response = client.post(
  18. f"{self.base_url}/memories",
  19. json=payload.model_dump(mode="json"),
  20. )
  21. response.raise_for_status()
  22. return MemoryItemContract.model_validate(response.json())
  23. except httpx.HTTPError as exc:
  24. raise MemoryClientError(f"memory-service create request failed: {exc}") from exc
  25. def search_memories(
  26. self,
  27. payload: MemorySearchRequestContract,
  28. ) -> list[MemorySearchResultContract]:
  29. try:
  30. with httpx.Client(timeout=self.timeout_seconds) as client:
  31. response = client.post(
  32. f"{self.base_url}/memories/search",
  33. json=payload.model_dump(mode="json"),
  34. )
  35. response.raise_for_status()
  36. return [
  37. MemorySearchResultContract.model_validate(item)
  38. for item in response.json()
  39. ]
  40. except httpx.HTTPError as exc:
  41. raise MemoryClientError(f"memory-service search request failed: {exc}") from exc