from adam.web_search import ( SearchResult, WebPageReader, WebReadError, format_search_context, search_query_from_request, should_read_links, should_search, ) def test_explicit_and_current_requests_trigger_web_search() -> None: assert should_search("Search the web for Sonic character facts") assert should_search("What are the latest Ollama release notes?") assert not should_search("Explain how LoRA training works") def test_search_context_keeps_titles_snippets_and_links() -> None: context = format_search_context([ SearchResult("Example", "https://example.com", "Useful reference."), ]) assert "Example" in context assert "Useful reference." in context assert "https://example.com" in context def test_search_request_is_removed_from_the_actual_search_query() -> None: assert search_query_from_request("Search the web for Dandy's World character ideas") == ( "Dandy's World character ideas" ) def test_read_intent_requires_explicit_reading_language() -> None: assert should_read_links("Search the web and read the three best result links") assert should_read_links("Read https://example.com and summarize it") assert not should_read_links("Search the web for Undertale character ideas") def test_private_network_links_are_blocked() -> None: try: WebPageReader._validate_public_url("http://127.0.0.1:11434/api/tags") except WebReadError: pass else: raise AssertionError("Expected private URL to be blocked")