Spaces:
Running
Running
File size: 5,939 Bytes
f3d0f1e 85df319 a3f5633 85df319 c98215f 85df319 a3f5633 f3d0f1e 85df319 f3d0f1e 85df319 f3d0f1e 33014c1 f3d0f1e 33014c1 85df319 33014c1 85df319 33014c1 a3f5633 b5a209d 33014c1 85df319 33014c1 85df319 33014c1 0d7e513 33014c1 85df319 33014c1 b5a209d a3f5633 b5a209d 33014c1 f3d0f1e 85df319 f3d0f1e |
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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
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"):
# 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=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("""**Motivation:**
The idea of this project is a combination of my curiosity in LLM application and my affection for speech data, that I developed during my bachelor thesis on measuring populism in text data.
I would like to allow people to discover interesting discussions, opinions and positions that were communicated in the german parliament thoughout the years.
**Development status:**
Chatbot: Users can interact with the chatbot asking questions about anything that can be answered by speeches. Furthermore they can select any legislature as a basis for the chatbot's reply.
Keyword
""")
if __name__ == "__main__":
App.launch(share=False) #t rue not supported on hf spaces
|