File size: 4,092 Bytes
f440f03 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | """Tests for conversational memory retrieval."""
from maris_core.memory_context import ConversationMemoryStore
def test_memory_store_retrieves_relevant_session_context() -> None:
store = ConversationMemoryStore()
store.remember_message("session-a", "user", "Man vajag Python API klientu ar retry loģiku.")
store.remember_message("session-a", "assistant", "Iepriekš sagatavoju API klienta struktūru.")
store.remember_message("session-b", "assistant", "Nesaistīts mūzikas ieteikums.")
matches = store.retrieve_relevant_context("session-a", "Uztaisi retry API klientu Pythonā")
assert matches
assert "API klient" in matches[0].content
assert all("mūzikas" not in match.content for match in matches[:2])
def test_memory_store_persists_sessions_to_disk(tmp_path) -> None:
storage_path = tmp_path / "memory.json"
store = ConversationMemoryStore(storage_path=str(storage_path))
store.remember_message("session-persist", "user", "Saglabā šo sarunas faktu.")
reloaded = ConversationMemoryStore(storage_path=str(storage_path))
matches = reloaded.retrieve_relevant_context("session-persist", "sarunas faktu")
assert storage_path.exists()
assert matches
assert matches[0].content == "Saglabā šo sarunas faktu."
def test_memory_store_summarizes_recent_session_backbone() -> None:
store = ConversationMemoryStore()
store.remember_message(
"session-s", "user", "Mēs plānojam incident response procesu visai komandai."
)
store.remember_message(
"session-s",
"assistant",
"Prioritātes bija alerting ownership, eskalācija un postmortem disciplīna.",
)
summary = store.summarize_session("session-s")
assert summary
assert any("incident response" in item.lower() for item in summary)
assert any("prioritātes" in item.lower() for item in summary)
def test_memory_store_summarizes_user_focus_with_goal_labels() -> None:
store = ConversationMemoryStore()
store.remember_message(
"session-focus",
"user",
"Es gribu uzbūvēt AI asistentu, kas atceras manu iepriekšējo kontekstu.",
)
store.remember_message(
"session-focus",
"user",
"Man svarīgi, lai atbildes paliek uzticamas un pamatotas ar faktiem.",
)
summary = store.summarize_user_focus("session-focus", query="Kā panākt uzticamu AI atmiņu?")
assert summary
assert any(item.startswith("Mērķis:") for item in summary)
assert any(item.startswith("Priekšroka:") for item in summary)
assert any("ai asistentu" in item.lower() for item in summary)
def test_memory_store_summarizes_active_threads() -> None:
store = ConversationMemoryStore()
store.remember_message(
"session-thread",
"user",
"Kā man uzbūvēt uzticamu AI asistentu ar ilgtermiņa atmiņu?",
)
store.remember_message(
"session-thread",
"user",
"Turpinām ar nākamajiem 3 soļiem un prioritātēm.",
)
summary = store.summarize_active_threads(
"session-thread",
query="Kādi ir nākamie soļi uzticamam AI asistentam?",
)
assert summary
assert any(item.startswith("Atvērtais jautājums:") for item in summary)
assert any(item.startswith("Aktīvais virziens:") for item in summary)
assert any("nākamajiem 3 soļiem" in item.lower() for item in summary)
def test_memory_store_continuation_query_recalls_recent_session_context() -> None:
store = ConversationMemoryStore()
store.remember_message(
"session-continuation",
"user",
"Mēs būvējam core assistant ar memory recall un tool grounding.",
)
store.remember_message(
"session-continuation",
"assistant",
"Līdz šim prioritātes bija hallucination samazināšana un stabilāka tool lietošana.",
)
matches = store.retrieve_relevant_context("session-continuation", "Turpinām šo pašu virzienu.")
assert matches
assert any("hallucination" in match.content.lower() for match in matches)
|