File size: 3,368 Bytes
5ed6f3b
9b5b26a
 
 
c19d193
6aae614
b8ae322
9b5b26a
 
b8ae322
572dfbb
9e8f79d
aa4cf9c
 
e27cd26
aa4cf9c
 
b8ae322
aa4cf9c
 
 
 
 
 
 
 
 
 
572dfbb
aa4cf9c
 
572dfbb
aa4cf9c
572dfbb
aa4cf9c
 
572dfbb
aa4cf9c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
572dfbb
b8ae322
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1ce23aa
5ed6f3b
b8ae322
5ed6f3b
b8ae322
 
 
 
5ed6f3b
 
b8ae322
 
5ed6f3b
 
 
 
b8ae322
8c01ffb
9206cbc
572dfbb
8c01ffb
 
 
 
 
 
861422e
1ce23aa
8fe992b
b8ae322
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
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

# Below is an example of a tool that does nothing. Amaze us with your creativity!

@tool
def generate_keywords(topic: str, num_keywords: int = 5) -> str:
    """Generates relevant keywords based on the given topic
    Args:
        topic: The main topic or subject to generate keywords for
        num_keywords: Number of keywords to generate (default: 5)
    """
    # Basic word transformations and common patterns
    prefixes = ['best', 'top', 'how to', 'why', 'what is']
    suffixes = ['guide', 'tutorial', 'examples', 'tips', 'basics']
    related_terms = {
        'programming': ['coding', 'development', 'software', 'algorithms', 'debugging'],
        'business': ['marketing', 'strategy', 'management', 'startup', 'planning'],
        'technology': ['tech', 'innovation', 'digital', 'software', 'hardware'],
        'education': ['learning', 'teaching', 'study', 'course', 'training'],
        'health': ['wellness', 'fitness', 'nutrition', 'medical', 'healthcare']
    }
    
    # Clean and normalize the input topic
    topic = topic.lower().strip()
    
    keywords = set()
    
    # Add the original topic
    keywords.add(topic)
    
    # Add prefix + topic combinations
    for prefix in prefixes:
        keywords.add(f"{prefix} {topic}")
    
    # Add topic + suffix combinations
    for suffix in suffixes:
        keywords.add(f"{topic} {suffix}")
    
    # Add related terms if the topic matches any category
    for category, terms in related_terms.items():
        if topic in terms or category in topic:
            keywords.update(terms)
    
    # Select the most relevant keywords
    final_keywords = list(keywords)[:num_keywords]
    
    # Format the output
    return "\n".join([
        "Generated keywords:",
        "----------------",
        *[f"- {keyword}" for keyword in final_keywords]
    ])


@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)}"


final_answer = FinalAnswerTool()
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
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, generate_keywords], # 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()