Spaces:
Runtime error
Runtime error
File size: 6,760 Bytes
f3d0f1e d0fd192 85df319 a3f5633 85df319 c98215f 85df319 a3f5633 f3d0f1e d0fd192 33014c1 d0fd192 f3d0f1e 33014c1 85df319 33014c1 85df319 33014c1 d0fd192 a3f5633 b5a209d 33014c1 85df319 33014c1 85df319 33014c1 0d7e513 33014c1 85df319 33014c1 b5a209d d0fd192 b5a209d d0fd192 33014c1 f3d0f1e d0fd192 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 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
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("""<h1>Welcome to <strong>Politics2you</strong> - your playground for investigating the heart of politics in Germany.</h1>
<p>Would you like to gain insights into political debates or reveal party positions on specific topics from any legislature?</p>
<ul>
<li>You can use the ChatBot to ask all your questions or search for related speech content in the Keyword Search section.</li>
</ul>
<p>Enjoy your journey! </p>
<p>Looking forward to your feedback! <a href="mailto:[email protected]">[email protected]</a></p>
<h2>Further improvements & Ideas:</h2>
<ul>
<li>Experiment with different LLMs and Templates</li>
<li>Include chat history in RAG</li>
<li>Add a date or legislature filter to KeywordSearch</li>
<li>Exclude short document splits when creating the vectorstore</li>
<li>Improve inference time</li>
<li>Add analytic tools for party manifestos</li>
<li>Expand the scope to different countries</li>
</ul>
""")
if __name__ == "__main__":
App.launch(share=False) # true not supported on hf spaces
|