File size: 4,229 Bytes
9b5b26a
 
 
 
c19d193
6aae614
eaeeeac
8fe992b
9b5b26a
 
e2e8a9e
9b5b26a
60c90d6
 
 
 
 
 
 
 
 
 
 
94842a1
60c90d6
 
 
 
 
 
 
94842a1
 
104fa12
 
94842a1
104fa12
60c90d6
 
 
 
 
9b5b26a
60c90d6
 
 
 
9b5b26a
60c90d6
 
 
cf3e24b
60c90d6
 
 
 
 
9b5b26a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eaeeeac
60c90d6
eaeeeac
 
da8fb65
60c90d6
 
eaeeeac
 
60c90d6
 
eaeeeac
 
b7dc4be
 
 
 
eaeeeac
 
e2e8a9e
eaeeeac
 
 
 
 
 
60c90d6
8c01ffb
6aae614
ae7a494
 
e223412
ae7a494
e121372
bf6d34c
 
8bf2c92
fe328e0
13d500a
8c01ffb
 
9b5b26a
 
8c01ffb
861422e
 
9b5b26a
8c01ffb
8fe992b
eaeeeac
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from bs4 import BeautifulSoup 

from Gradio_UI import GradioUI


@tool
def get_weather(city: str) -> str:
    """Get current weather for a city using reliable weather services.
    
    Args:
        city: The name of the city to get weather for (e.g., 'Moscow', 'London')
        
    Returns:
        Current weather information in Celsius
    """
    try:
       
        url = f"https://wttr.in/{city}?format=%C+%t+%h+%w&m&lang=en"
        response = requests.get(url, timeout=10)
        
        if response.status_code == 200 and response.text.strip():
            data = response.text.strip()
           
            if '°F' in data:
                data = data.replace('°F', '°C')
            return f"Weather in city: {city}:\n{data}"
        return f"Data about weather in city {city} temporary unavailable."
            
    except Exception as e:
        return f"Error: {str(e)}"


@tool
def web_search(query: str) -> str:
    """Search the web for information using DuckDuckGo.
    
    Args:
        query: The search query to look up
        
    Returns:
        Search results from DuckDuckGo
    """
    try:
        search_tool = DuckDuckGoSearchTool()
        results = search_tool(query)
        if not results or "No results found." in results:
            return f"No results for query: '{query}'. Try again."
        return f"Search results:'{query}':\n\n{results}"
    except Exception as e:
        return f"Search error: {str(e)}"


@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """A tool that fetches the current local time in a specified timezone.
    Args:
        timezone: A string representing a valid timezone (e.g., 'America/New_York').
    """
    try:
        # Create timezone object
        tz = pytz.timezone(timezone)
        # Get current time in that timezone
        local_time = datetime.datetime.now(tz).strftime("%Y-%m-%d %H:%M:%S")
        return f"The current local time in {timezone} is: {local_time}"
    except Exception as e:
        return f"Error fetching time for timezone '{timezone}': {str(e)}"

@tool
def get_horoscope(zodiac_sign: str, day: str = 'today') -> str:
    """
    Get horoscope from API for specified zodiac sign.
    
    Args:
        zodiac_sign: Zodiac sign in English - 'aries','taurus','gemini','cancer','leo','virgo','libra','scorpio','sagittarius','capricorn','aquarius','pisces'
        day: Day - 'today', 'tomorrow', 'yesterday'
                
    Returns:
        Horoscope text
    """
    dic = {'aries': 1, 'taurus': 2, 'gemini': 3,
           'cancer': 4, 'leo': 5, 'virgo': 6,
           'libra': 7, 'scorpio': 8, 'sagittarius': 9,
           'capricorn': 10, 'aquarius': 11, 'pisces': 12}
    url = (
        "https://www.horoscope.com/us/horoscopes/general/"
        f"horoscope-general-daily-{day}.aspx?sign={dic[zodiac_sign]}"
    )
    soup = BeautifulSoup(requests.get(url).content,
                         "html.parser")

    # print(soup.find("div", class_="main-horoscope").p.text)
    return soup.find("div", class_="main-horoscope").p.text
        

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="Qwen/Qwen2.5-Coder-7B-Instruct"

model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id=model_id,# 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, get_weather, web_search, get_current_time_in_timezone, get_horoscope], ## 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()