File size: 3,201 Bytes
488b328
 
1c19586
488b328
1c19586
 
99bcc63
488b328
1c19586
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
488b328
2582114
488b328
1c19586
488b328
 
 
 
2582114
 
 
488b328
99bcc63
1c19586
 
 
 
 
 
 
 
 
 
8663a63
1c19586
8663a63
 
 
 
 
 
 
1c19586
 
488b328
1c19586
 
488b328
 
 
c94993c
488b328
99bcc63
 
 
 
 
1c19586
 
99bcc63
1c19586
488b328
62eb936
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env python
import sys
import json
import gradio as gr
import plotly.graph_objects as go
import logging
from crew import TravelCrew, 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 = TravelCrew().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:
            # Try with different format of result data generated with ```json and ending with ```
            try:
                json_addresses = json.loads(addresses.raw[8:-4])
            except json.JSONDecodeError as e:
                logger.error("Error loading Crew Output for addresses")
                logger.info(addresses.raw)
                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. Powered by Sambanova Cloud.",
    fn=run,
    inputs=[gr.Textbox(label="Origin"), gr.Textbox(label="Destination"),
            gr.Slider(label="Your age?", value=30, minimum=15, maximum=90, step=5),
            gr.Slider(label="How many days are you travelling?", value=5, minimum=1, maximum=14, step=1),
            gr.Checkbox(label="Check if children are travelling with you"),
            gr.Slider(label="Total budget of trip in USD", show_label=True, value=1000, minimum=500, maximum=10000, step=500)],
    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 traveling.")
    ]
)
demo.launch()