from typing import Any, Optional from smolagents.tools import Tool import requests import markdownify import smolagents import pokebase as pb class GetPokemonInfoTool(Tool): name = "get_pokemon_info" description = """" Retrieves complete information on a given Pokemon. Use this to get information for a pokemon. It will return a python object where you can then find the following object properties, eacho one is described as name, description and type: Name Description Type id The identifier for this resource. integer name The name for this resource. string base_experience The base experience gained for defeating this Pokémon. integer height The height of this Pokémon in decimetres. integer is_default Set for exactly one Pokémon used as the default for each species. boolean order Order for sorting. Almost national order, except families are grouped together. integer weight The weight of this Pokémon in hectograms. integer abilities A list of abilities this Pokémon could potentially have. list PokemonAbility forms A list of forms this Pokémon can take on. list NamedAPIResource (PokemonForm) game_indices A list of game indices relevent to Pokémon item by generation. list VersionGameIndex held_items A list of items this Pokémon may be holding when encountered. list PokemonHeldItem location_area_encounters A link to a list of location areas, as well as encounter details pertaining to specific versions. string moves A list of moves along with learn methods and level details pertaining to specific version groups. list PokemonMove past_types A list of details showing types this pokémon had in previous generations list PokemonTypePast sprites A set of sprites used to depict this Pokémon in the game. A visual representation of the various sprites can be found at PokeAPI/sprites PokemonSprites cries A set of cries used to depict this Pokémon in the game. A visual representation of the various cries can be found at PokeAPI/cries PokemonCries species The species this Pokémon belongs to. NamedAPIResource (PokemonSpecies) stats A list of base stat values for this Pokémon. list PokemonStat types A list of details showing types this Pokémon has. list PokemonType """ #All info gathered from pokeapi v2 official documentation inputs = {'name': {'type': 'string', 'description': 'The name of the pokemon.'}} output_type = "object" def __init__(self, *args, **kwargs): super().__init__() try: import pokebase as pb except ImportError as e: raise ImportError( "You must install package `pokebase` to run this tool: for instance run `pip install pokebase`." ) from e def forward(self, name: str) -> object: try: pokemon = pb.APIResource('pokemon', name) except requests.exceptions.Timeout: return "The request timed out. Please try again later." except RequestException as e: return "Error fetching contents from the pokemon remote API." except Exception as e: return f"An unexpected error occurred: {str(e)}" return pokemon