Spaces:
Sleeping
Sleeping
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 | |