Skip to content

Commit 7ae4623

Browse files
Yang Jingclaude
authored andcommitted
Fix model validation and set_memory_mode API compatibility
- Make createdBy, createdAt, updatedAt optional on Character and Memory models (API doesn't always return these fields) - Fix set_memory_mode to fetch character name before updating (API requires name in PUT body) - Bump version to 0.2.1 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent dc174f5 commit 7ae4623

4 files changed

Lines changed: 11 additions & 9 deletions

File tree

hippodid/async_client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,8 @@ async def clone_character(
540540
)
541541

542542
async def set_memory_mode(self, character_id: str, mode: str) -> Character:
543-
return await self.update_character(character_id, memory_mode=mode)
543+
char = await self.get_character(character_id)
544+
return await self.update_character(character_id, name=char.name, memory_mode=mode)
544545

545546
# ═════════════════════════════════════════════════════════════════════════
546547
# Ask / RAG Chat

hippodid/client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,8 @@ def clone_character(
568568

569569
def set_memory_mode(self, character_id: str, mode: str) -> Character:
570570
"""Set memory ingestion mode: EXTRACTED, VERBATIM, or HYBRID."""
571-
return self.update_character(character_id, memory_mode=mode)
571+
char = self.get_character(character_id)
572+
return self.update_character(character_id, name=char.name, memory_mode=mode)
572573

573574
# ═════════════════════════════════════════════════════════════════════════
574575
# Ask / RAG Chat

hippodid/models.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,15 @@ class Character(BaseModel):
6161
description: Optional[str] = None
6262
external_id: Optional[str] = Field(None, alias="externalId")
6363
visibility: str = "PRIVATE"
64-
created_by: str = Field(alias="createdBy")
64+
created_by: Optional[str] = Field(None, alias="createdBy")
6565
profile: CharacterProfile = Field(default_factory=CharacterProfile)
6666
aliases: List[Alias] = Field(default_factory=list)
6767
categories: List[Category] = Field(default_factory=list)
6868
agent_config: Optional[AgentConfig] = Field(None, alias="agentConfig")
6969
memory_mode: str = Field("EXTRACTED", alias="memoryMode")
7070
memory_count: int = Field(0, alias="memoryCount")
71-
created_at: datetime = Field(alias="createdAt")
72-
updated_at: datetime = Field(alias="updatedAt")
71+
created_at: Optional[datetime] = Field(None, alias="createdAt")
72+
updated_at: Optional[datetime] = Field(None, alias="updatedAt")
7373

7474
model_config = {"populate_by_name": True}
7575

@@ -80,15 +80,15 @@ class Character(BaseModel):
8080
class Memory(BaseModel):
8181
id: str
8282
character_id: str = Field(alias="characterId")
83-
created_by: str = Field(alias="createdBy")
83+
created_by: Optional[str] = Field(None, alias="createdBy")
8484
content: str
8585
category: str
8686
salience: float
8787
content_hash: str = Field("", alias="contentHash")
8888
visibility: str = "PRIVATE"
8989
state: str = "ACTIVE"
90-
created_at: datetime = Field(alias="createdAt")
91-
updated_at: datetime = Field(alias="updatedAt")
90+
created_at: Optional[datetime] = Field(None, alias="createdAt")
91+
updated_at: Optional[datetime] = Field(None, alias="updatedAt")
9292

9393
model_config = {"populate_by_name": True}
9494

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44

55
[project]
66
name = "hippodid"
7-
version = "0.2.0"
7+
version = "0.2.1"
88
description = "Python SDK for the HippoDid character memory API"
99
readme = "README.md"
1010
license = "MIT"

0 commit comments

Comments
 (0)