File size: 3,214 Bytes
6d2e5d8
9b5b26a
 
c19d193
6aae614
9b5b26a
 
6d2e5d8
 
9b5b26a
6d2e5d8
 
 
 
9b5b26a
6d2e5d8
 
 
 
 
9b5b26a
6d2e5d8
 
9b5b26a
 
 
6d2e5d8
 
 
9b5b26a
6d2e5d8
 
 
 
9b5b26a
 
 
 
 
 
6d2e5d8
 
8c01ffb
3622d4c
 
 
6d2e5d8
 
3622d4c
6d2e5d8
 
 
 
3622d4c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6d2e5d8
 
3622d4c
 
6d2e5d8
3622d4c
 
 
8c01ffb
ae7a494
6d2e5d8
 
ae7a494
6d2e5d8
e121372
3622d4c
 
6d2e5d8
3622d4c
13d500a
8c01ffb
6d2e5d8
9b5b26a
8c01ffb
6d2e5d8
 
861422e
6d2e5d8
 
8c01ffb
8fe992b
6d2e5d8
 
 
 
 
 
 
8c01ffb
 
 
 
 
 
6d2e5d8
8fe992b
 
6d2e5d8
3622d4c
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
from smolagents import CodeAgent, HfApiModel, load_tool, tool
import datetime
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from Gradio_UI import GradioUI


# A simple example tool that currently does nothing but shows how to define a tool.
@tool
def my_custom_tool(arg1: str, arg2: int) -> str:
    """
    A placeholder tool that returns a fun message.
    
    Args:
        arg1: The first argument as a string.
        arg2: The second argument as an integer.
    
    Returns:
        A string message.
    """
    return "What magic will you build with this tool?"


@tool
def get_current_time_in_timezone(timezone: str) -> str:
    """
    Returns the current local time in the specified timezone.
    
    Args:
        timezone: A valid timezone string (e.g., 'America/New_York').
    
    Returns:
        A formatted string with the current local time or an error message.
    """
    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: could not fetch time for timezone '{timezone}'. Details: {e}"


@tool
def emoji_summarizer(text: str) -> str:
    """
    Summarizes the input text using emojis representing key ideas.
    
    Args:
        text: Input text string.
    
    Returns:
        A string of emojis or a default emoji if no matches are found.
    """
    mapping = {
        "happy": "😊",
        "sad": "😢",
        "fire": "🔥",
        "love": "❤️",
        "party": "🎉",
        "work": "💼",
        "sleep": "😴",
        "money": "💰",
        "music": "🎵",
        "food": "🍔",
        "travel": "✈️",
        "error": "❌",
        "question": "❓",
    }

    # Basic tokenization: lowercase and split on whitespace
    words = text.lower().split()
    emojis = [mapping[word] for word in words if word in mapping]

    if not emojis:
        return "🤔 (no matching emojis found)"
    return "".join(emojis)


# Initialize the final answer tool
final_answer = FinalAnswerTool()

# Initialize the language model (make sure model_id is correct and accessible)
model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    custom_role_conversions=None,
)

# Load the text-to-image generation tool from the Hugging Face hub
image_generation_tool = load_tool("agents-course/text-to-image", trust_remote_code=True)

# Load prompt templates from YAML file (make sure 'prompts.yaml' is present and valid)
with open("prompts.yaml", "r") as stream:
    prompt_templates = yaml.safe_load(stream)

# Initialize the code agent with all desired tools
agent = CodeAgent(
    model=model,
    tools=[
        final_answer,
        emoji_summarizer,
        image_generation_tool,
        my_custom_tool,
        get_current_time_in_timezone,
    ],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name=None,
    description=None,
    prompt_templates=prompt_templates,
)

# Launch the Gradio UI to interact with the agent
GradioUI(agent).launch()