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()