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