Files
odysseus/tests/test_agent_search_dedupe.py
T

82 lines
2.8 KiB
Python

from src.agent_loop import (
_is_tool_preamble,
_memory_list_summary_from_tool_output,
_session_list_summary_from_tool_output,
_web_search_queries_overlap,
_web_search_query_from_block,
)
from src.tool_types import ToolBlock
def test_near_duplicate_web_search_queries_are_detected():
assert _web_search_queries_overlap(
"latest Python release version",
"Python 3.14 release python.org latest version",
)
def test_distinct_web_search_topics_are_not_collapsed():
assert not _web_search_queries_overlap(
"latest Python release",
"how to install Python on Arch Linux",
)
def test_different_explicit_versions_are_not_collapsed():
assert not _web_search_queries_overlap(
"Python 3.13 release notes",
"Python 3.14 release notes",
)
def test_web_search_query_extractor_accepts_json_and_plain_blocks():
assert _web_search_query_from_block(
ToolBlock("web_search", '{"query":"latest Python release"}')
) == "latest Python release"
assert _web_search_query_from_block(
ToolBlock("web_search", "latest Python release")
) == "latest Python release"
def test_tool_preamble_is_separate_from_a_substantive_tool_round_answer():
assert _is_tool_preamble("I'll fetch the official Python documentation now.")
assert _is_tool_preamble("Let me check the source.")
assert not _is_tool_preamble(
"I'll check the source, then compare the supported versions and explain the difference. "
"The answer depends on the installed runtime."
)
def test_broad_memory_listing_keeps_bounded_reviewable_items():
raw = (
"Found 257 memory entries:\n\n"
"- [fact] `a1` — private detail\n"
"- [fact] `a2` — another detail\n"
"- [preference] `b1` — hidden preference\n"
)
summary = _memory_list_summary_from_tool_output(raw)
assert summary.startswith("Memory: 257 saved entries (fact 2, preference 1).")
assert "- [fact a1](#memory-a1) — private detail" in summary
assert "- [preference b1](#memory-b1) — hidden preference" in summary
assert "...and 254 more saved memories." in summary
def test_compact_memory_listing_is_already_a_complete_summary():
raw = "Memory: 257 saved entries (contact 9, fact 98, preference 63)."
assert _memory_list_summary_from_tool_output(raw) == raw
def test_session_listing_is_bounded_for_terminal_router():
raw = "Found 20 session(s), sorted most-recent first:\n" + "\n".join(
f"- session {index}" for index in range(20)
)
summary = _session_list_summary_from_tool_output(raw)
assert summary.startswith("Found 20 session(s)")
assert sum(line.startswith("- session ") for line in summary.splitlines()) == 12
assert "...and more sessions" in summary
assert "session 19" not in summary