File size: 7,093 Bytes
f37ed53 9b5b26a c19d193 6aae614 9b5b26a f37ed53 9b5b26a f37ed53 9b5b26a 8c01ffb f37ed53 8c01ffb f37ed53 ae7a494 f37ed53 ae7a494 e121372 f37ed53 13d500a 8c01ffb 9b5b26a 8c01ffb 861422e f37ed53 8c01ffb 8fe992b f37ed53 8c01ffb 861422e 8fe992b f37ed53 |
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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
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
import random
import os
# Set Hugging Face API key (ensure this is handled securely in production)
# os.environ["HF_API_KEY"] = "HF_TOKEN"
@tool
def my_custom_tool(arg1: str, arg2: int) -> str:
"""A tool that does nothing yet
Args:
arg1: the first argument
arg2: the second argument
"""
return "What magic will you build ?"
@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:
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)}"
# --- Creative Tool 1: Random Creative & Smart Prompt Generator ---
@tool
def creative_prompt_generator(category: str = "any") -> str:
"""
Generates a random, creative, and smart prompt for storytelling, art, or brainstorming.
Args:
category: The creative domain for the prompt (e.g., 'story', 'art', 'startup', 'game', 'science', 'any').
"""
prompts = {
"story": [
"Write a short story where the main character wakes up in a world where everyone speaks in rhymes.",
"Describe a day in the life of a detective who can hear people's thoughts, but only in a foreign language.",
"Imagine a city where dreams and reality merge every midnight. What happens tonight?"
],
"art": [
"Draw or describe a landscape where gravity works sideways.",
"Create an artwork inspired by the concept of 'time as a river'.",
"Design a futuristic vehicle powered by a mysterious, glowing crystal."
],
"startup": [
"Pitch a startup that helps people swap skills instead of money.",
"Invent a wearable device that translates animal sounds into human language.",
"Describe a mobile app that helps users find lost memories."
],
"game": [
"Design a board game where alliances change every round based on a secret code.",
"Invent a video game where the main character can only move when music plays.",
"Describe the rules for a card game inspired by quantum mechanics."
],
"science": [
"Propose an experiment to test if plants can communicate through sound.",
"Imagine a new element discovered on a distant planet. What are its properties?",
"Describe a futuristic city powered entirely by algae."
],
"any": [
"Invent a new holiday and describe how people celebrate it.",
"Describe a world where pets are the teachers and humans are the students.",
"Imagine a conversation between a cloud and a mountain."
]
}
all_categories = list(prompts.keys())
chosen_category = category.lower() if category.lower() in prompts else "any"
prompt = random.choice(prompts[chosen_category])
return f"Creative Prompt [{chosen_category.capitalize()}]: {prompt}"
# --- Creative Tool 2: Health Tip Generator Based on Symptoms ---
@tool
def health_tip(symptoms: str) -> str:
"""
Provides a general health tip based on the described symptoms.
Args:
symptoms: A brief description of the symptoms (e.g., 'headache and fatigue').
"""
# Simple keyword-based matching for demonstration (not medical advice!)
tips = [
(["headache", "migraine"], "Stay hydrated, rest in a quiet and dark room, and avoid screen time. If headaches persist or worsen, consult a healthcare professional."),
(["fatigue", "tired", "exhausted"], "Ensure you get enough sleep, eat nutritious meals, and take short breaks during work. Persistent fatigue should be discussed with a doctor."),
(["cough", "sore throat"], "Drink warm fluids, avoid irritants, and rest your voice. If symptoms last more than a week, seek medical advice."),
(["fever", "temperature"], "Stay hydrated, rest, and monitor your temperature. If the fever is high or lasts more than 2 days, consult a healthcare provider."),
(["stomach", "nausea", "vomit"], "Eat light, bland foods, avoid dehydration, and rest. If symptoms are severe or persistent, seek medical attention."),
(["anxiety", "stress", "nervous"], "Practice deep breathing, mindfulness, and take regular breaks. Reach out for support if needed."),
(["back pain", "muscle ache"], "Apply a warm compress, gently stretch, and avoid heavy lifting. See a doctor if pain is severe or persistent.")
]
symptoms_lower = symptoms.lower()
for keywords, tip in tips:
if any(word in symptoms_lower for word in keywords):
return f"Health Tip: {tip}\n\n(Always consult a healthcare professional for serious or persistent symptoms.)"
return (
"Health Tip: Maintain a balanced diet, stay hydrated, get enough rest, and consult a healthcare professional if symptoms persist or worsen.\n\n"
"(This is not medical advice. For emergencies or serious symptoms, seek professional help immediately.)"
)
# --- Creative Tool 3: Daily Motivation Quote ---
@tool
def get_motivation_quote() -> str:
"""Returns a random motivational quote.
Args:
None
"""
quotes = [
"Believe you can and you're halfway there. – Theodore Roosevelt",
"The only way to do great work is to love what you do. – Steve Jobs",
"You are never too old to set another goal or to dream a new dream. – C.S. Lewis",
"Success is not final, failure is not fatal: It is the courage to continue that counts. – Winston Churchill",
"What you get by achieving your goals is not as important as what you become by achieving your goals. – Zig Ziglar"
]
return random.choice(quotes)
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,
my_custom_tool,
get_current_time_in_timezone,
creative_prompt_generator,
health_tip,
get_motivation_quote,
image_generation_tool
],
max_steps=6,
verbosity_level=1,
grammar=None,
planning_interval=None,
name=None,
description=None,
prompt_templates=prompt_templates
)
GradioUI(agent).launch()
|