import gradio as gr from src.chatbot import chatbot, keyword_search #from gradio_calendar import Calendar #from datetime import datetime # Define important variables legislature_periods = [ "All", "20. Legislaturperiode", "19. Legislaturperiode", "18. Legislaturperiode", "17. Legislaturperiode", "16. Legislaturperiode", "15. Legislaturperiode", "14. Legislaturperiode", "13. Legislaturperiode", "12. Legislaturperiode", "11. Legislaturperiode", "10. Legislaturperiode", "9. Legislaturperiode", "8. Legislaturperiode", "7. Legislaturperiode", "6. Legislaturperiode", "5. Legislaturperiode", "4. Legislaturperiode", "3. Legislaturperiode", "2. Legislaturperiode", "1. Legislaturperiode" ] partys = ['All','CDU/CSU','SPD','AfD','Grüne','FDP','DIE LINKE.','GB/BHE','DRP', 'WAV', 'NR', 'BP', 'FU', 'SSW', 'KPD', 'DA', 'FVP','DP','Z', 'PDS','Fraktionslos', 'Gast','not found', 'Gast'] with gr.Blocks() as App: with gr.Tab("ChatBot"): with gr.Blocks(): # Apply RAG using chatbut function from local file ChatBot.py db_inputs = gr.Dropdown(choices=legislature_periods, value="All", multiselect=True, label="Legislature", info="Select a combination of legislatures as basis for the chatbot's replies", show_label=True) prompt_language = gr.Dropdown(choices=["DE", "EN"], value="DE",label="Language", info="Choose output language", multiselect=False) gr.ChatInterface(chatbot, title="PoliticsToYou", description= "Ask anything about your favorite political topic from any legislature period", #examples=["Wie steht die CDU zur Cannabislegalisierung?", "Wie steht die FDP zur Rente?", "Was wird für die Rechte von LGBTQ getan?", "Sollen wir Waffen an die Ukraine liefern"], cache_examples=False, #true increases loading time additional_inputs = [db_inputs, prompt_language], additional_inputs_accordion="Additional inputs" ) with gr.Tab("KeywordSearch"): with gr.Blocks() as Block: # Keyword Input keyword_box = gr.Textbox(label='keyword') #Additional Input (hidden) with gr.Accordion('Detailed filters', open=False): # Row orientation with gr.Row() as additional_input: n_slider = gr.Slider(label="Number of Results",info="Other filters reduces the returned results", minimum=1, maximum=100, step=1, value=10) party_dopdown = gr.Dropdown(value='All', choices=partys, label='Party') # ToDo: Add date or legislature filter as input #start_date = Calendar(value="1949-01-01", type="datetime", label="Select start date", info="Click the calendar icon to bring up the calendar.", interactive=True) #end_date = Calendar(value=datetime.today().strftime('%Y-%m-%d'), type="datetime", label="Select end date", info="Click the calendar icon to bring up the calendar.", interactive=True) search_btn = gr.Button('Search') with gr.Column(visible=False) as output_col: results_df = gr.Dataframe(label='Results', interactive=False) # Download results from keyword search with gr.Accordion('Would you like to download your results?', open=False) as download_row: with gr.Row(): ftype_dropdown = gr.Dropdown(choices=["csv","excel","json"], label="Format") export_btn = gr.Button('Export') file = gr.File(file_types=[".xlsx", ".csv", ".json"], visible=False) # Keyword Search on click def search(keyword, n, party): # ToDo: Include party and timedate return { output_col: gr.Column(visible=True), results_df: keyword_search(query=keyword, n=n, party_filter=party), } search_btn.click( fn=search, inputs=[keyword_box, n_slider, party_dopdown], outputs=[output_col, results_df], ) # Export data to a downloadable format def export(df, keyword, ftype=None): if ftype == "csv": file = f'{keyword}.csv' df.to_csv(file, index = False) return gr.File(value=file,visible=True) elif ftype == "json": file = f'{keyword}.json' df.to_json(file, index = True) return gr.File(value=file,visible=True) else: file = f'{keyword}.xlsx' df.to_excel(file, index = True) return gr.File(value=file,visible=True) export_btn.click( fn=export, inputs=[results_df, keyword_box, ftype_dropdown], outputs=[file], ) with gr.Tab("About"): gr.Markdown("""

Welcome to Politics2you - your playground for investigating the heart of politics in Germany.

Would you like to gain insights into political debates or reveal party positions on specific topics from any legislature?

Enjoy your journey!

Looking forward to your feedback! tomklotz@gmx.net

Further improvements & Ideas:

""") if __name__ == "__main__": App.launch(share=False) # true not supported on hf spaces