mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-10-10 03:28:14 +00:00
Merge 00c02db176 into ac21804982
This commit is contained in:
commit
76f1dea4c3
2 changed files with 31 additions and 1 deletions
|
|
@ -130,10 +130,12 @@ class SupermemoryTools:
|
|||
) -> str:
|
||||
"""Add (remember) memories/details/information about the user or other facts or entities. Run when explicitly asked or when the user mentions any information generalizable beyond the context of the current conversation."""
|
||||
try:
|
||||
# No custom_id: each remembered fact is its own document. A shared id would
|
||||
# make every call update one document, replacing the previous memory and
|
||||
# colliding with the conversation transcript saved under connection.custom_id.
|
||||
response = await self._client.add(
|
||||
content=memory,
|
||||
container_tag=self._connection.container_tag,
|
||||
custom_id=self._connection.custom_id,
|
||||
)
|
||||
result: MemoryAddResult = {
|
||||
"success": True,
|
||||
|
|
|
|||
|
|
@ -47,3 +47,31 @@ class TestSupermemoryTools:
|
|||
conn = _make_conn(conversation_id="conv-123")
|
||||
tools = SupermemoryTools(conn)
|
||||
assert tools._connection.custom_id == "conversation_conv-123"
|
||||
|
||||
|
||||
class _RecordingClient:
|
||||
def __init__(self) -> None:
|
||||
self.add_calls: list[dict] = []
|
||||
|
||||
async def add(self, **kwargs):
|
||||
self.add_calls.append(kwargs)
|
||||
return {"id": f"doc-{len(self.add_calls)}", "status": "queued"}
|
||||
|
||||
|
||||
class TestAddMemoryDocumentIdentity:
|
||||
@pytest.mark.asyncio
|
||||
async def test_add_memory_does_not_reuse_conversation_document_id(self) -> None:
|
||||
conn = _make_conn(conversation_id="conv-123")
|
||||
tools = SupermemoryTools(conn)
|
||||
client = _RecordingClient()
|
||||
tools._client = client
|
||||
|
||||
await tools.add_memory("The user likes green tea.")
|
||||
await tools.add_memory("The user lives in Lisbon.")
|
||||
|
||||
assert len(client.add_calls) == 2
|
||||
# A shared custom_id makes Supermemory treat every call as an update of one
|
||||
# document, so the second memory replaces the first and both collide with the
|
||||
# conversation transcript saved under the same id.
|
||||
assert all(call.get("custom_id") != conn.custom_id for call in client.add_calls)
|
||||
assert all(call["container_tag"] == "msft_agent_chat" for call in client.add_calls)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue