import gradio as gr from src.chatbot import chatbot, keyword_search from gradio_calendar import Calendar from datetime import datetime legislature_periods = [ "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" ] with gr.Blocks() as App: with gr.Tab("ChatBot"): # Apply RAG using chatbut function from local file ChatBot.py db_inputs = gr.Dropdown(choices=legislature_periods, value="All", multiselect=True, label="If empty all Legislaturperioden are selected", show_label=True) print(db_inputs) gr.ChatInterface(chatbot, title="PoliticsToYou", description= "This chatbot uses the infomation of speeches of the german parliament (since 2021) \ to get insight on the view points of the german parties and the debate of the parliament.", #examples=["Wie steht die CDU zur Cannabislegalisierung?","Was waren die wichtigsten Themen in der aktuellen Legislaturperiode?"], #change to meaningful examples cache_examples=False, #true increases the loading time additional_inputs = db_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", minimum=1, maximum=100, step=1, value=10) party_dopdown = gr.Dropdown(value='All', choices=['All','CDU/CSU','SPD','FDP','GrĂ¼ne','not found','DIE LINKE.','PDS','KPD'], label='Party') # change choices to all possible options 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], ) if __name__ == "__main__": App.launch(share=False) #t rue not supported on hf spaces