memory.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from datetime import datetime
  2. from typing import TYPE_CHECKING
  3. from pydantic import BaseModel, Field
  4. from core_domain import (
  5. MemoryItemContract,
  6. MemoryScopeType,
  7. MemorySearchResultContract,
  8. MemoryStatus,
  9. )
  10. from core_shared import JSONValue
  11. if TYPE_CHECKING:
  12. from app.db.models import MemoryItem
  13. class MemoryCreateRequest(BaseModel):
  14. tenant_id: str
  15. scope_type: MemoryScopeType
  16. scope_id: str
  17. memory_type: str = "fact"
  18. content_text: str
  19. content_json: dict[str, JSONValue] | None = None
  20. metadata_json: dict[str, JSONValue] = Field(default_factory=dict)
  21. owner_agent_id: str | None = None
  22. user_id: str | None = None
  23. session_id: str | None = None
  24. source_ref: str | None = None
  25. importance_score: int = Field(default=0, ge=0, le=100)
  26. expires_time: datetime | None = None
  27. class MemoryStatusUpdateRequest(BaseModel):
  28. tenant_id: str
  29. status: MemoryStatus
  30. class MemorySearchRequest(BaseModel):
  31. tenant_id: str
  32. query: str
  33. scope_type: MemoryScopeType | None = None
  34. scope_id: str | None = None
  35. owner_agent_id: str | None = None
  36. user_id: str | None = None
  37. session_id: str | None = None
  38. limit: int = Field(default=8, ge=1, le=100)
  39. class MemoryResponse(MemoryItemContract):
  40. @classmethod
  41. def from_entity(cls, entity: "MemoryItem") -> "MemoryResponse":
  42. return cls.model_validate(entity, from_attributes=True)
  43. class MemorySearchResultResponse(MemorySearchResultContract):
  44. item: MemoryResponse
  45. @classmethod
  46. def from_entity(cls, entity: "MemoryItem", score: float) -> "MemorySearchResultResponse":
  47. return cls(item=MemoryResponse.from_entity(entity), score=score)