DiJeZet / tools /zet.py
grg's picture
Adding zet tools : terminus_to_routes and create map link
4ec2830
raw
history blame
3.07 kB
from typing import Any, Optional, List
from smolagents import tool
from smolagents.tools import Tool
import duckduckgo_search
@tool
def create_link_to_public_transport_map(routes: List[str]) -> str:
"""A tool that create a link for a map with public transport routes. It can be used to display a route on a map.
Args:
routes: list of routes to display on the map
"""
try:
return f"https://ntrd.top/?routes="+"&routes=".join(routes)
except Exception as e:
return f"Error fetching link to maps for route '{routes}'"
@tool
def terminus_to_routes(terminus: str) -> List[str]:
"""
A tool that fetches the route numbers for a given terminus but works only for trams not for buses.
Example: terminus_to_routes('ZAPADNI KOLODVOR') -> [1]; terminus_to_routes('ZAPRUDE') -> [8, 14]
Args:
terminus: the terminus to search for
"""
terminus_to_route_map = {
'ZAPADNI KOLODVOR': [1],
'BORONGAJ': [1, 9, 17, 32],
'ČRNOMEREC': [2, 6, 11, 31],
'SAVIŠĆE': [2, 3, 33],
'LJUBLJANICA': [3, 9, 12, 34],
'SAVSKI MOST': [4, 7, 31],
'DUBEC': [4, 11, 34],
'PREČKO': [5, 17, 32],
'PARK MAKSIMIR': [5],
'SOPOT': [6],
'DUBRAVA': [7, 12],
'MIHALJEVAC': [8, 14, 15, 33],
'ZAPRUĐE': [8, 14],
'ŽITNJAK': [13],
'KVATERNIKOV TRG': [13],
'GRAČANSKO DOLJE': [15]
}
routes = terminus_to_route_map.get(terminus.upper(), None)
if routes:
return routes
else:
return f"No routes found for terminus '{terminus}'. Available terminus: {list(terminus_to_route_map.keys())}"
# class TerminusToRoutes(Tool):
# name = "terminus_to_route"
# description = "A tool that fetches the route numbers for a given terminus but works only for trams not for buses. Example: 'ZAPADNI KOLODVOR' -> [1]; 'ZAPRUDE' -> [8, 14]"
# inputs = {'terminus': {'type': 'string', 'description': 'The terminus to search for.'}}
# output_type = "list"
#
# def __init__(self):
# super().__init__()
# self.terminus_to_route_map = {
# 'ZAPADNI KOLODVOR': [1],
# 'BORONGAJ': [1, 9, 17, 32],
# 'ČRNOMEREC': [2, 6, 11, 31],
# 'SAVIŠĆE': [2, 3, 33],
# 'LJUBLJANICA': [3, 9, 12, 34],
# 'SAVSKI MOST': [4, 7, 31],
# 'DUBEC': [4, 11, 34],
# 'PREČKO': [5, 17, 32],
# 'PARK MAKSIMIR': [5],
# 'SOPOT': [6],
# 'DUBRAVA': [7, 12],
# 'MIHALJEVAC': [8, 14, 15, 33],
# 'ZAPRUĐE': [8, 14],
# 'ŽITNJAK': [13],
# 'KVATERNIKOV TRG': [13],
# 'GRAČANSKO DOLJE': [15]
# }
#
# def forward(self, terminus: str) -> str:
# routes = self.terminus_to_route_map.get(terminus.upper())
# if routes:
# return routes
# else:
# return f"No routes found for terminus '{terminus}'. Available terminus: {list(self.terminus_to_route_map.keys())}"