#!/usr/bin/env python import sys import json import gradio as gr import plotly.graph_objects as go import logging from crew import SurpriseTravelCrew, AddressSummaryCrew def filter_map(text_list, lat, lon): fig = go.Figure(go.Scattermapbox( lat=lat, lon=lon, mode='markers', marker=go.scattermapbox.Marker( size=11 ), hovertext=text_list )) fig.update_layout( mapbox_style="open-street-map", hovermode='closest', mapbox=dict( bearing=0, center=go.layout.mapbox.Center( lat=lat[1], lon=lon[1] ), pitch=0, zoom=10 ), ) return fig def run(origin, destination, age, trip_duration, children, budget): # Replace with your inputs, it will automatically interpolate any tasks and agents information logger.info(f"Origin: {origin}, Destination: {destination}, Age: {age}, Duration: {trip_duration}, Children: {children}, Daily Budget: {budget}") inputs = { 'origin': origin, 'destination': destination, 'age': age, 'trip_duration': trip_duration, 'children': children, 'budget': budget } result = SurpriseTravelCrew().crew().kickoff(inputs=inputs) inputs_for_address = { 'text': str(result) } addresses = AddressSummaryCrew().crew().kickoff(inputs=inputs_for_address) json_addresses = None if addresses.json_dict: json_addresses = addresses.json_dict if not json_addresses: try: json_addresses = json.loads(addresses.raw) except json.JSONDecodeError as e: print ("Error loading Crew Output for addresses") return (result, None) fig = filter_map(json_addresses["name"], json_addresses["lat"], json_addresses["lon"]) return (result, fig) logger = logging.getLogger() logger.setLevel(logging.INFO) demo = gr.Interface( title="Plan your itinerary with the help of AI", description="Use this app to create a detailed itinerary on how to explore a new place. Itinerary is customized to your taste.", fn=run, inputs=["text", "text", gr.Slider(value=30, minimum=15, maximum=90, step=5), gr.Slider(value=5, minimum=1, maximum=14, step=1), gr.Checkbox(), gr.Slider(value=100, minimum=20, maximum=1000, step=20)], outputs=[ gr.Textbox(label="Complete Itinerary", show_copy_button=True, autoscroll=False), gr.Plot(label="Venues on a Map. Please verify with a Navigation System before going") ] ) demo.launch()