from smolagents import CodeAgent,DuckDuckGoSearchTool, HfApiModel,load_tool,tool, LiteLLMModel import datetime import requests import pytz import yaml from tools.final_answer import FinalAnswerTool import os import pokebase as pb from Gradio_UI import GradioUI # Below is an example of a tool that does nothing. Amaze us with your creativity ! @tool def my_cutom_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_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 = LiteLLMModel( api_key = os.environ["HF_TOKEN"], max_tokens=2096, temperature=0.5, model_id= os.environ['MODEL'],# it is possible that this model may be overloaded custom_role_conversions=None, ) @tool def get_pokemon_information(pokemon_name: str) -> dict: """ This tool gives information about a pokemon. Just pass the name of the pokemon as an argument in the string format. The information given is: - Moves - Abilities - Types - Pokémon Evolution Chains - base_experience - stats - weight - height Use this tool to get the information about a pokemon else use the web search tool. Args: pokemon_name: The name of the pokemon. Returns: dict: A dictionary conaining The information about the pokemon like moves, abilities, types, evolution chains, base experience, stats, weight, height, sprites """ if type(pokemon_name) != str: return "Please pass the pokemon name as a string" client = pb pokemon = client.pokemon(pokemon_name) if pokemon is None: return "Please pass a valid pokemon name" evolution_number = client.pokemon_species(pokemon_name).evolution_chain.id e_chain = client.evolution_chain(evolution_number).chain e2 = "none" e3 = "none" e1 = e_chain.species.name if len(e_chain.evolves_to)>0: e2 = e_chain.evolves_to[0].species.name if len(e_chain.evolves_to[0].evolves_to)>0: e3 = e_chain.evolves_to[0].evolves_to[0].species.name chain_str = f"Evolution chain is: {e1} -> {e2} -> {e3}" pokemon_info = { "moves": str([move.name for move in pb.move(pokemon_name).results[:10]]), "types": str([type.type.name for type in pokemon.types]), "stats": str({ stats.stat.name: pokemon.stats[i].base_stat for i, stats in enumerate(pokemon.stats)}), "expierience": pokemon.base_experience, "species": pokemon.species, "weight": pokemon.weight, "height": pokemon.height, "abilities": str([ability.ability for ability in pokemon.abilities]), "evolution_chain": chain_str } return pokemon_info web_search_tool = DuckDuckGoSearchTool() # Import tool from Hub with open("prompts.yaml", 'r') as stream: prompt_templates = yaml.safe_load(stream) agent = CodeAgent( model=model, tools=[final_answer, get_pokemon_information, web_search_tool], ## 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()