File size: 3,007 Bytes
95fed7b
9b5b26a
 
 
c19d193
6aae614
95fed7b
8fe992b
95fed7b
9b5b26a
95fed7b
 
 
 
9b5b26a
95fed7b
 
9b5b26a
95fed7b
 
9b5b26a
95fed7b
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
 
95fed7b
 
 
9b5b26a
95fed7b
9b5b26a
 
 
 
 
 
 
8c01ffb
95fed7b
6aae614
ae7a494
95fed7b
e121372
95fed7b
 
 
 
13d500a
8c01ffb
95fed7b
9b5b26a
8c01ffb
95fed7b
861422e
 
95fed7b
 
8c01ffb
8fe992b
95fed7b
 
 
 
 
 
 
8c01ffb
 
 
 
95fed7b
 
 
8fe992b
 
95fed7b
 
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
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  # Ensure this exists in your project

# ✅ A creative motivational message tool
@tool
def my_custom_tool(name: str, mood_level: int) -> str:
    """
    A tool that generates a motivational message based on the user's name and mood level.

    Args:
        name: The name of the person.
        mood_level: An integer between 1 and 10 indicating the mood (1=low, 10=high).
    """
    if not 1 <= mood_level <= 10:
        return "Please enter a mood level between 1 and 10."

    messages = {
        "low": f"Hey {name}, every step you take matters. Keep going—you’ve got this. 🌱",
        "medium": f"{name}, you’re doing great! Trust the process and stay consistent. 💪",
        "high": f"🔥 {name}, you’re on fire today! Keep shining and inspiring others. 🚀"
    }

    if mood_level <= 3:
        return messages["low"]
    elif mood_level <= 7:
        return messages["medium"]
    else:
        return messages["high"]

# ✅ A tool that returns the current time in any valid timezone
@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., 'Africa/Addis_Ababa').
    """
    try:
        tz = pytz.timezone(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)}"

# ✅ Required final answer tool
final_answer = FinalAnswerTool()

# ✅ Define the model (Qwen may be overloaded, switch if needed)
model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    custom_role_conversions=None,
)

# ✅ Load tool from smol-agents tool hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

# ✅ Load system prompts from YAML
with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)

# ✅ Create the code agent with tools
agent = CodeAgent(
    model=model,
    tools=[
        final_answer,                 # Required final output handler
        my_custom_tool,              # Motivational tool
        get_current_time_in_timezone,  # Timezone-aware clock
        image_generation_tool,       # Optional image generation tool
        DuckDuckGoSearchTool(),      # Optional web search tool
    ],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name="MotivatorAgent",
    description="An agent that motivates, informs, and creates visuals.",
    prompt_templates=prompt_templates,
)

# ✅ Launch the UI
GradioUI(agent).launch()