from map_search import query_data import gradio as gr from gradio.themes.base import Base import pandas as pd import plotly.graph_objects as go def query_data_with_map(question): if question: # Assuming query_data returns a tuple: (list_of_arrays, text_from_gemini) list_of_arrays, text_from_gemini = query_data(question) # Convert list_of_arrays to a DataFrame df = pd.DataFrame(list_of_arrays, columns=['title', 'chalet_title', 'final_price', 'unit_custom_title', 'lat', 'lng']) text_list = [(row['title'], row['unit_custom_title'], row['chalet_title'], row['final_price']) for index, row in df.iterrows()] fig = go.Figure(go.Scattermapbox( customdata=text_list, lat=df['lat'].tolist(), lon=df['lng'].tolist(), mode='markers', marker=go.scattermapbox.Marker( size=6 ), hoverinfo="text", hovertemplate=( 'Title: %{customdata[0]}
' 'Unit Custom Title: %{customdata[1]}
' 'Chalet Title: %{customdata[2]}
' 'Final Price: SAR %{customdata[3]}' ) )) else: # Create an empty map fig = go.Figure(go.Scattermapbox( lat=[], lon=[], mode='markers', marker=go.scattermapbox.Marker( size=20 ) )) text_from_gemini = "" fig.update_layout( mapbox_style="open-street-map", hovermode='closest', mapbox=dict( bearing=0, center=go.layout.mapbox.Center( lat=24.7136, # Latitude for Riyadh lon=46.6753 # Longitude for Riyadh ), pitch=0, zoom=10 ) ) return fig, text_from_gemini with gr.Blocks(theme=Base(), title="Riyadh Entertainment Map powered by Smart Search System using Vector Search + RAG") as demo: gr.Markdown( """ # Smart Search System using Atlas Vector Search + RAG Architecture """) textbox = gr.Textbox(label="Enter your query here", lines=1) with gr.Row(): button = gr.Button("Search", variant="primary") with gr.Column(): output1 = gr.Plot(label="Map Output") output2 = gr.Textbox(lines=1, max_lines=10, label="Output generated by chaining Atlas Vector Search to Langchain's `load_qa_chain` + Gemini flash 1.5 LLM:") # Load the empty map when the app starts demo.load(query_data_with_map, inputs=[textbox], outputs=[output1, output2]) # Call query_data_with_map function upon clicking the Submit button button.click(query_data_with_map, textbox, outputs=[output1, output2]) demo.launch(share=True)