Spaces:
Build error
Build error
Refactor main_v2.py to remove unused tools and agents, replacing them with the new SmartSearchTool for improved search functionality. Update prompt template loading to use the modified YAML file. Clean up imports and enhance overall code organization for better maintainability.
a3a55bb
unverified
import logging | |
import re | |
from smolagents import Tool | |
from smolagents.default_tools import DuckDuckGoSearchTool, WikipediaSearchTool | |
logger = logging.getLogger(__name__) | |
class SmartSearchTool(Tool): | |
name = "smart_search" | |
description = """A smart search tool that first performs a web search and then, if a Wikipedia article is found, | |
uses Wikipedia search for more reliable information.""" | |
inputs = {"query": {"type": "string", "description": "The search query to find information"}} | |
output_type = "string" | |
def __init__(self): | |
super().__init__() | |
self.web_search_tool = DuckDuckGoSearchTool(max_results=1) | |
self.wiki_tool = WikipediaSearchTool( | |
user_agent="SmartSearchTool ([email protected])", | |
language="en", | |
# content_type="summary", | |
content_type="text", | |
extract_format="WIKI" | |
) | |
def forward(self, query: str) -> str: | |
logger.info(f"Starting smart search for query: {query}") | |
# First perform a web search with a single result | |
web_result = self.web_search_tool.forward(query) | |
logger.info(f"Web search result: {web_result[:100]}...") | |
# Check if the result contains a Wikipedia link | |
if "wikipedia.org" in web_result.lower(): | |
logger.info("Wikipedia link found in web search results") | |
# Extract the Wikipedia page title from the URL using regex | |
wiki_match = re.search(r'wikipedia\.org/wiki/([^)\s]+)', web_result) | |
if wiki_match: | |
wiki_title = wiki_match.group(1) | |
logger.info(f"Extracted Wikipedia title: {wiki_title}") | |
# Use Wikipedia search for more reliable information | |
wiki_result = self.wiki_tool.forward(wiki_title) | |
logger.info(f"Wikipedia search result: {wiki_result[:100]}...") | |
if wiki_result and "No Wikipedia page found" not in wiki_result: | |
logger.info("Successfully retrieved Wikipedia content") | |
return f"Web search result:\n{web_result}\n\nWikipedia result:\n{wiki_result}" | |
else: | |
logger.warning("Wikipedia search failed or returned no results") | |
else: | |
logger.warning("Could not extract Wikipedia title from URL") | |
# If no Wikipedia link was found or Wikipedia search failed, return the web search result | |
logger.info("Returning web search result only") | |
return f"Web search result:\n{web_result}" | |