File size: 3,361 Bytes
9b5b26a
 
 
 
c19d193
6aae614
8fe992b
9b5b26a
 
0f64069
0c8074e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2495726
 
 
 
 
 
 
0c8074e
2495726
0c8074e
 
 
 
2495726
0c8074e
2495726
0c8074e
 
2495726
0c8074e
 
 
 
2495726
0c8074e
2495726
 
 
 
 
 
 
0c8074e
2495726
0c8074e
2495726
 
 
 
 
0c8074e
2495726
0c8074e
2495726
0c8074e
 
 
 
 
8c01ffb
 
6aae614
ae7a494
 
 
 
e121372
bf6d34c
 
29ec968
fe328e0
13d500a
8c01ffb
 
9b5b26a
 
8c01ffb
861422e
 
9b5b26a
8c01ffb
8fe992b
d2f6a24
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool

from Gradio_UI import GradioUI

#!pip install duckduckgo-search --upgrade

from duckduckgo_search import DDGS

# Custom search tool class
class CustomDuckDuckGoSearchTool:
    def __call__(self, query: str, max_results: int = 5):
        try:
            with DDGS() as ddgs:
                results = []
                for r in ddgs.text(query):
                    results.append(r)
                    if len(results) >= max_results:
                        break
            return results
        except Exception as e:
            return f"Search error: {str(e)}"

# Dummy placeholder for `visit_webpage` tool
class VisitWebpageTool:
    def __call__(self, url: str):
        return f"Pretending to visit: {url}"

# Final answer tool to format and return the final response
class FinalAnswerTool:
    def __call__(self, results):
        formatted_answer = "Final Answer:\n"
        for result in results:
            formatted_answer += f"- {str(result)}\n"
        return formatted_answer

# Dummy model
class DummyModel:
    def call(self, input_text):
        return f"Model processing: {input_text}"

# Modified ToolCallingAgent to use FinalAnswerTool
class ToolCallingAgent:
    def __init__(self, tools, model, final_answer_tool, max_steps=10):
        self.tools = tools
        self.model = model
        self.final_answer_tool = final_answer_tool
        self.max_steps = max_steps

    def run(self, query):
        print(f"Running agent with query: {query}")
        tool_outputs = []
        for tool in self.tools:
            output = tool(query)
            print("Tool output:", output)
            tool_outputs.append(output)
        # Use the final answer tool to format the collected outputs
        final_result = self.final_answer_tool(tool_outputs)
        print(final_result)
        return final_result

# Initialize tools and model
model = DummyModel()
search_tool = CustomDuckDuckGoSearchTool()
visit_webpage = VisitWebpageTool()
final_answer = FinalAnswerTool()

# Initialize the agent
web_agent = ToolCallingAgent(
    tools=[search_tool, visit_webpage],
    model=model,
    final_answer_tool=final_answer,
    max_steps=10
)

# Example usage
web_agent.run("Latest AI tools")


final_answer = FinalAnswerTool()

# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder:
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud' 

model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',# it is possible that this model may be overloaded
custom_role_conversions=None,
)


# Import tool from Hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)
    
agent = CodeAgent(
    model=model,
    tools=[final_answer], ## 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()