Spaces:
Sleeping
Sleeping
File size: 2,917 Bytes
ad60877 8fe13b9 d56149c 9b5b26a c19d193 6aae614 9b5b26a ad60877 9b5b26a ad60877 9b5b26a ad60877 9b5b26a ad60877 8c01ffb ad60877 8c01ffb ad60877 ae7a494 ad60877 ae7a494 ad60877 8c01ffb ad60877 8c01ffb 9b5b26a ad60877 8c01ffb d56149c 7ccc2ac 9b5b26a 8c01ffb 8fe992b ad60877 8c01ffb 861422e 8fe992b 9b5b26a 8c01ffb |
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 |
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() |