File size: 3,091 Bytes
014f597
1d0b9d1
89c9126
 
 
44e58a6
 
 
89c9126
 
6bdfadb
b139634
6bdfadb
 
44e58a6
6bdfadb
89c9126
6bdfadb
44e58a6
 
 
 
 
 
 
 
 
 
 
 
89c9126
 
6bdfadb
89c9126
 
 
 
b139634
89c9126
1d0b9d1
89c9126
 
014f597
 
6bdfadb
89c9126
 
 
 
 
 
 
 
 
6bdfadb
 
 
 
 
 
44e58a6
6bdfadb
 
b139634
6bdfadb
 
 
 
 
b139634
44e58a6
b139634
 
 
6bdfadb
89c9126
b139634
 
 
89c9126
 
 
1d0b9d1
89c9126
 
87a229b
1d0b9d1
014f597
1d0b9d1
014f597
1d0b9d1
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
88
89
90
91
import gradio as gr

# Local modules
import tools
from utils.constants import (
    DRIVER_NAMES,
    CONSTRUCTOR_NAMES,
    CURRENT_YEAR
)

iface_driver_championship_standings = gr.Interface(
    fn=tools.driver_championship_standings,
    inputs=[
        gr.Number(label="Calendar year", value=CURRENT_YEAR, minimum=1950, maximum=CURRENT_YEAR),
        gr.Dropdown(label="Driver", choices=DRIVER_NAMES)
    ],
    outputs="text",
    title="Driver Championship Standings",
    description="Get the driver championship standings"
)

iface_constructor_championship_standings = gr.Interface(
    fn=tools.constructor_championship_standings,
    inputs=[
        gr.Number(label="Calendar year", value=CURRENT_YEAR, minimum=1950, maximum=CURRENT_YEAR),
        gr.Dropdown(label="Constructor", choices=CONSTRUCTOR_NAMES)
    ],
    outputs="text",
    title="Constructor Championship Standings",
    description="Get the constructor championship standings"
)

iface_event_info = gr.Interface(
    fn=tools.get_event_info,
    inputs=[
        gr.Number(label="Calendar year", value=CURRENT_YEAR, minimum=1950, maximum=CURRENT_YEAR),
        gr.Textbox(label="Grand Prix", placeholder="Ex: Monaco", info="The name of the GP/country/location (Fuzzy matching supported)"),
        gr.Radio(["human", "LLM"], label="Display format", value="human")
    ],
    outputs="text",
    title="Event Info",
    description="Get the Grand Prix event info for a specific race week"
)

iface_season_calendar = gr.Interface(
    fn=tools.get_season_calendar,
    inputs=[
        gr.Number(label="Calendar year", value=CURRENT_YEAR, minimum=1950, maximum=CURRENT_YEAR),
    ],
    outputs="text",
    title="Season Calendar",
    description="Get the season calendar information for the given year"
)

iface_track_visualization = gr.Interface(
    fn=tools.track_visualization,
    inputs=[
        gr.Number(label="Calendar year", value=CURRENT_YEAR, minimum=1950, maximum=CURRENT_YEAR),
        gr.Textbox(label="Grand Prix", placeholder="Ex: Monaco", info="The name of the GP/country/location (Fuzzy matching supported)"),
        gr.Radio(["speed", "corners", "gear"], label="Visualization type", value="speed"),
        gr.Dropdown(DRIVER_NAMES)
    ],
    outputs="image",
    title="Track Visualizations",
    description="Get the track visualization for the given Grand Prix"
)


named_interfaces = {
    "Driver Championship Standings": iface_driver_championship_standings,
    "Constructor Championship Standings": iface_constructor_championship_standings,
    "Event Info": iface_event_info,
    "Season Calendar": iface_season_calendar,
    "Track Visualizations": iface_track_visualization
}

# Tab names and interfaces
tab_names = list(named_interfaces.keys())
interface_list = list(named_interfaces.values())


# Combine all the interfaces into a single TabbedInterface
gradio_server = gr.TabbedInterface(
    interface_list,
    tab_names=tab_names,
    title="Formula 1 MCP server"
)

# Launch the interface and MCP server
if __name__ == "__main__":
    gradio_server.launch(mcp_server=True)