mmansor's picture
Update app.py
fd4ddd7 verified
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 my_custom_tool(arg1:str, arg2:int)-> str: #it's import to specify the return type
#Keep this format for the description / args / args description but feel free to modify the tool
"""A tool that does nothing yet
Args:
arg1: the first argument
arg2: the second argument
"""
return "What magic will you build ?"
@tool
def get_country_capital(country_name:str)-> str:
"""A tool that fetches the country's capital
Args:
country_name: A string representing the country name
"""
countries = {
"afghanistan": "Kabul",
"albania": "Tirana",
"algeria": "Algiers",
"andorra": "Andorra la Vella",
"angola": "Luanda",
"antigua and barbuda": "Saint John’s",
"argentina": "Buenos Aires",
"armenia": "Yerevan",
"australia": "Canberra",
"austria": "Vienna",
"azerbaijan": "Baku",
"the bahamas": "Nassau",
"bahrain": "Manama",
"bangladesh": "Dhaka",
"barbados": "Bridgetown",
"belarus": "Minsk",
"belgium": "Brussels",
"belize": "Belmopan",
"benin": "Porto-Novo",
"bhutan": "Thimphu",
"bolivia": "La Paz, Sucre",
"bosnia and herzegovina": "Sarajevo",
"botswana": "Gaborone",
"brazil": "Brasilia",
"brunei": "Bandar Seri Begawan",
"bulgaria": "Sofia",
"burkina faso": "Ouagadougou",
"burundi": "Bujumbura",
"cambodia": "Phnom Penh",
"cameroon": "Yaounde",
"canada": "Ottawa",
"cape verde": "Praia",
"central african republic": "Bangui",
"chad": "N’Djamena",
"chile": "Santiago",
"china": "Beijing",
"colombia": "Bogota",
"comoros": "Moroni",
"republic of the congo": "Brazzaville",
"democratic republic of the congo": "Kinshasa",
"costa rica": "San Jose",
"cote d’ivoire": "Yamoussoukro",
"croatia": "Zagreb",
"cuba": "Havana",
"cyprus": "Nicosia",
"czech republic": "Prague",
"denmark": "Copenhagen",
"djibouti": "Djibouti",
"dominica": "Roseau",
"dominican republic": "Santo Domingo",
"east timor": "Dili",
"ecuador": "Quito",
"egypt": "Cairo",
"el salvador": "San Salvador",
"equatorial guinea": "Malabo",
"eritrea": "Asmara",
"estonia": "Tallinn",
"ethiopia": "Addis Ababa",
"fiji": "Suva",
"finland": "Helsinki",
"france": "Paris",
"gabon": "Libreville",
"the gambia": "Banjul",
"georgia": "Tbilisi",
"germany": "Berlin",
"ghana": "Accra",
"greece": "Athens",
"grenada": "Saint George’s",
"guatemala": "Guatemala City",
"guinea": "Conakry",
"guinea-bissau": "Bissau",
"guyana": "Georgetown",
"haiti": "Port-au-Prince",
"honduras": "Tegucigalpa",
"hungary": "Budapest",
"iceland": "Reykjavik",
"india": "New Delhi",
"indonesia": "Jakarta",
"iran": "Tehran",
"iraq": "Baghdad",
"ireland": "Dublin",
"israel": "Jerusalem",
"italy": "Rome",
"jamaica": "Kingston",
"japan": "Tokyo",
"jordan": "Amman",
"kazakhstan": "Astana",
"kenya": "Nairobi",
"kiribati": "Tarawa Atoll",
"north korea": "Pyongyang",
"south korea": "Seoul",
"kosovo": "Pristina",
"kuwait": "Kuwait City",
"kyrgyzstan": "Bishkek",
"laos": "Vientiane",
"latvia": "Riga",
"lebanon": "Beirut",
"lesotho": "Maseru",
"liberia": "Monrovia",
"libya": "Tripoli",
"liechtenstein": "Vaduz",
"lithuania": "Vilnius",
"luxembourg": "Luxembourg",
"macedonia": "Skopje",
"madagascar": "Antananarivo",
"malawi": "Lilongwe",
"malaysia": "Kuala Lumpur",
"maldives": "Male",
"mali": "Bamako",
"malta": "Valletta",
"marshall islands": "Majuro",
"mauritania": "Nouakchott",
"mauritius": "Port Louis",
"mexico": "Mexico City",
"federated states of micronesia": "Palikir",
"moldova": "Chisinau",
"monaco": "Monaco",
"mongolia": "Ulaanbaatar",
"montenegro": "Podgorica",
"morocco": "Rabat",
"mozambique": "Maputo",
"myanmar": "Naypyidaw",
"namibia": "Windhoek",
"nauru": "Yaren District",
"nepal": "Kathmandu",
"netherlands": "Amsterdam",
"new zealand": "Wellington",
"nicaragua": "Managua",
"niger": "Niamey",
"nigeria": "Abuja",
"norway": "Oslo",
"oman": "Muscat",
"pakistan": "Islamabad",
"palau": "Melekeok",
"panama": "Panama City",
"papua new guinea": "Port Moresby",
"paraguay": "Asuncion",
"peru": "Lima",
"philippines": "Manila",
"poland": "Warsaw",
"portugal": "Lisbon",
"qatar": "Doha",
"romania": "Bucharest",
"russia": "Moscow",
"rwanda": "Kigali",
"saint kitts and nevis": "Basseterre",
"saint lucia": "Castries",
"saint vincent and the grenadines": "Kingstown",
"samoa": "Apia",
"san marino": "San Marino",
"sao tome and principe": "Sao Tome",
"saudi arabia": "Riyadh",
"senegal": "Dakar",
"serbia": "Belgrade",
"seychelles": "Victoria",
"sierra leone": "Freetown",
"singapore": "Singapore",
"slovakia": "Bratislava",
"slovenia": "Ljubljana",
"solomon islands": "Honiara",
"somalia": "Mogadishu",
"south africa": "Pretoria, Cape Town, Bloemfontein",
"south sudan": "Juba",
"spain": "Madrid",
"sri lanka": "Colombo, Sri Jayewardenepura Kotte",
"sudan": "Khartoum",
"suriname": "Paramaribo",
"swaziland": "Mbabane",
"sweden": "Stockholm",
"switzerland": "Bern",
"syria": "Damascus",
"taiwan": "Taipei",
"tajikistan": "Dushanbe",
"tanzania": "Dodoma",
"thailand": "Bangkok",
"togo": "Lome",
"tonga": "Nuku’alofa",
"trinidad and tobago": "Port-of-Spain",
"tunisia": "Tunis",
"turkey": "Ankara",
"turkmenistan": "Ashgabat",
"tuvalu": "Funafuti",
"uganda": "Kampala",
"ukraine": "Kyiv",
"united arab emirates": "Abu Dhabi",
"united kingdom": "London",
"united states of america": "Washington D.C.",
"uruguay": "Montevideo",
"uzbekistan": "Tashkent",
"vanuatu": "Port-Vila",
"vatican city": "Vatican City",
"venezuela": "Caracas",
"vietnam": "Hanoi",
"yemen": "Sanaa",
"zambia": "Lusaka",
"zimbabwe": "Harare",
}
capital = countries.get(country_name.lower())
if not capital:
return f"Cannot find the capital of {country_name} Try to enter the name correct"
return f"The Capital of {country_name} is {capital}"
@tool
def search(text: str) -> str:
"""A tool that uses DuckDuckGoSearchTool to search.
Args:
text:
"""
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)}"
@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()
# If the agent does not answer, the model is overloaded, please use another model or the following Hugging Face Endpoint that also contains qwen2.5 coder:
# model_id='https://pflgm2locj2t89co.us-east-1.aws.endpoints.huggingface.cloud'
model = HfApiModel(
max_tokens=2096,
temperature=0.5,
model_id='Qwen/Qwen2.5-Coder-32B-Instruct',# it is possible that this model may be overloaded
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, DuckDuckGoSearchTool(), get_country_capital], ## 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()