Add memory system session context API
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
import asyncio
|
||||
|
||||
from memory_system_api.schemas import MessageIngestRequest, SearchRequest
|
||||
from memory_system_api.schemas import MessageIngestRequest, SearchRequest, SessionContextRequest
|
||||
from memory_system_api.service import MemorySystemService
|
||||
|
||||
|
||||
@ -44,6 +44,19 @@ class FakeOpenViking:
|
||||
await asyncio.sleep(0.01)
|
||||
return {"items": [{"source": "openviking-search"}]}
|
||||
|
||||
async def get_session_context(self, user_key: str, session_id: str) -> dict:
|
||||
self.calls.append(("get_session_context", user_key, session_id))
|
||||
return {
|
||||
"status": "ok",
|
||||
"result": {
|
||||
"latest_archive_overview": "# Working Memory\nUser likes coffee.",
|
||||
"pre_archive_abstracts": [],
|
||||
"messages": [],
|
||||
"estimatedTokens": 42,
|
||||
"stats": {"totalArchives": 1},
|
||||
},
|
||||
}
|
||||
|
||||
async def commit_session(self, user_key: str, session_id: str) -> dict:
|
||||
self.calls.append(("commit_session", user_key, session_id))
|
||||
return {"status": "ok", "result": {"task_id": "task-1", "archive_uri": "archive-1"}}
|
||||
@ -203,6 +216,43 @@ def test_search_returns_compact_items_and_backend_diagnostics_without_duplicate_
|
||||
assert not _has_key(response.backends["everos"].result, "original_data")
|
||||
|
||||
|
||||
def test_session_context_combines_openviking_context_and_everos_search_items():
|
||||
openviking = FakeOpenViking()
|
||||
everos = FakeEverOSVerbose()
|
||||
service = MemorySystemService(openviking=openviking, everos=everos)
|
||||
|
||||
response = asyncio.run(
|
||||
service.get_session_context(
|
||||
"sess-1",
|
||||
SessionContextRequest(user_id="tom", user_key="tom-key", query="我喜欢喝什么?", limit=5),
|
||||
)
|
||||
)
|
||||
|
||||
assert response.status == "success"
|
||||
assert response.context == {
|
||||
"latest_archive_overview": "# Working Memory\nUser likes coffee.",
|
||||
"pre_archive_abstracts": [],
|
||||
"messages": [],
|
||||
"estimatedTokens": 42,
|
||||
"stats": {"totalArchives": 1},
|
||||
}
|
||||
assert response.items == [
|
||||
{
|
||||
"source_backend": "everos",
|
||||
"memory_type": "episode",
|
||||
"id": "episode-1",
|
||||
"user_id": "tom",
|
||||
"session_id": "sess-1",
|
||||
"timestamp": "2026-05-22T07:50:51.750000Z",
|
||||
"summary": "userB 在对话中表示自己喜欢拿铁。",
|
||||
"score": 0.72,
|
||||
}
|
||||
]
|
||||
assert ("credential_for_user", "tom", "tom-key", "sess-1") in openviking.calls
|
||||
assert ("get_session_context", "key-tom", "sess-1") in openviking.calls
|
||||
assert ("search", "tom", "sess-1", "我喜欢喝什么?", "hybrid", 5) in everos.calls
|
||||
|
||||
|
||||
def _has_key(value, key: str) -> bool:
|
||||
if isinstance(value, dict):
|
||||
return key in value or any(_has_key(item, key) for item in value.values())
|
||||
|
||||
Reference in New Issue
Block a user