import os os.system("pip install 'smolagents[openai]'") from smolagents import CodeAgent, DuckDuckGoSearchTool, HfApiModel, load_tool, tool, OpenAIServerModel import requests import yaml from tools.final_answer import FinalAnswerTool from Gradio_UI import GradioUI @tool def search_duckduckgo(query: str, num_results: int = 3) -> str: """Performs a web search using DuckDuckGo and returns multiple relevant results. Args: query: The search term. num_results: Number of search results to return (default: 3). Returns: A formatted list of search results including title, summary, and link. """ search_tool = DuckDuckGoSearchTool() results = search_tool(query) print("DEBUG - Raw results from DuckDuckGo:\n", results) if not results or "## Search Results" not in results: return f"No relevant results found for '{query}'." result_lines = results.split("\n") parsed_results = [] for i in range(len(result_lines)): if result_lines[i].startswith("[") and len(parsed_results) < num_results: try: title_end = result_lines[i].index("]") # Find the end of the title title = result_lines[i][1:title_end] # Extract title link = result_lines[i][title_end+2:].strip() # Extract link if link.endswith(")"): link = link[:-1] # Ensure the link is valid if not link.startswith("http"): continue # Skip invalid links summary = result_lines[i+1].strip() if i+1 < len(result_lines) else "No summary available." # Correct Markdown format formatted_result = f"šŸ”Ž **[{title}]({link})**\nšŸ“Œ {summary}" parsed_results.append(formatted_result) except Exception as e: print(f"Error parsing result: {e}") continue # Skip problematic entries if not parsed_results: return f"No valid results found for '{query}'." return "\n\n".join(parsed_results) # Return formatted results model = OpenAIServerModel( max_tokens=2096, temperature=0.5, model_id="gpt-4", api_key=os.getenv("OPENAI_API_KEY"), custom_role_conversions=None, ) # Import tool from Hub HF_API_KEY = os.getenv("HF_TOKEN") with open("prompts.yaml", 'r') as stream: prompt_templates = yaml.safe_load(stream) final_answer = FinalAnswerTool() agent = CodeAgent( model=model, tools=[final_answer, search_duckduckgo], ## add your tools here (don't remove final answer) max_steps=6, verbosity_level=1, grammar=None, planning_interval=None, name=None, description=None, prompt_templates=prompt_templates ) GradioUI(agent).launch()