Spaces:
Sleeping
Sleeping
| from typing import Optional | |
| from smolagents import CodeAgent, HfApiModel, tool | |
| import os | |
| from datetime import datetime | |
| import googlemaps | |
| import gradio as gr | |
| # Define tool for calculating travel duration | |
| def get_travel_duration(start_location: str, destination_location: str, transportation_mode: Optional[str] = None) -> str: | |
| """Gets the travel time between two places. | |
| Args: | |
| start_location: the place from which you start your ride | |
| destination_location: the place of arrival | |
| transportation_mode: The transportation mode, in 'driving', 'walking', 'bicycling'. Defaults to 'driving'. | |
| """ | |
| gmaps = googlemaps.Client(os.getenv("GMAPS_API_KEY")) | |
| if transportation_mode is None: | |
| transportation_mode = "driving" | |
| try: | |
| directions_result = gmaps.directions( | |
| start_location, | |
| destination_location, | |
| mode=transportation_mode, | |
| departure_time=datetime(2025, 6, 6, 11, 0), # At 11, date far in the future | |
| ) | |
| if len(directions_result) == 0: | |
| return "No way found between these places with the required transportation mode." | |
| return directions_result[0]["legs"][0]["duration"]["text"] | |
| except Exception as e: | |
| print(e) | |
| return str(e) | |
| # Create the AI agent | |
| agent = CodeAgent(tools=[get_travel_duration], model=HfApiModel(), additional_authorized_imports=["datetime"]) | |
| # Define Gradio interface | |
| def generate_itinerary(city: str, transportation_mode: str) -> str: | |
| query = f"Can you give me a nice one-day trip around {city} with a few locations and the times? Could be in the city or outside, but should fit in one day. I'm travelling only with {transportation_mode}." | |
| return agent.run(query) | |
| description_md = """ | |
| Plan your perfect one-day trip with our travel itinerary generator. Simply input your desired city and select transportation mode, and receive a curated schedule of sightseeing spots tailored for a seamless journey. | |
| """ | |
| # Create Gradio UI | |
| iface = gr.Interface( | |
| fn=generate_itinerary, | |
| inputs=[ | |
| gr.Textbox(lines=1, placeholder="Enter the city/place", label="City"), | |
| gr.Dropdown(["driving", "walking", "bicycling"], label="Transportation Mode", value="driving") | |
| ], | |
| outputs="text", | |
| title="One Day Guide", | |
| description=description_md | |
| ) | |
| # Launch Gradio UI | |
| iface.launch(share = True) | |