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() |