Thiloid commited on
Commit
464d1ab
·
verified ·
1 Parent(s): 4539f1a

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +139 -0
  2. requirements.txt +8 -0
app.py ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import chromadb
2
+ import os
3
+ import gradio as gr
4
+ import json
5
+ from huggingface_hub import InferenceClient
6
+
7
+ path = '/Users/thiloid/Desktop/Avah/chroma'
8
+ if not os.path.exists(path):
9
+ path = "/home/user/app/chroma"
10
+
11
+ print(path)
12
+
13
+ client = chromadb.PersistentClient(path=path)
14
+ print(client.heartbeat())
15
+ print(client.get_version())
16
+ print(client.list_collections())
17
+
18
+ from chromadb.utils import embedding_functions
19
+ default_ef = embedding_functions.DefaultEmbeddingFunction()
20
+ sentence_transformer_ef = embedding_functions.SentenceTransformerEmbeddingFunction(model_name="T-Systems-onsite/cross-en-de-roberta-sentence-transformer")
21
+
22
+ collection = client.get_collection(name="chromatsc", embedding_function=sentence_transformer_ef)
23
+
24
+ client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1")
25
+
26
+
27
+
28
+ def format_prompt(message, history):
29
+ prompt = ""
30
+ if history:
31
+ user_prompt, bot_response = history[-1]
32
+ prompt += f"[INST] {user_prompt} [/INST] {bot_response}</s> "
33
+ prompt += f"[INST] {message} [/INST]"
34
+ return prompt
35
+
36
+
37
+ def response(prompt, history, selected_option, temperature=0.9, max_new_tokens=700, top_p=0.95, repetition_penalty=1.0):
38
+ temperature = float(temperature)
39
+ if temperature < 1e-2: temperature = 1e-2
40
+ top_p = float(top_p)
41
+ generate_kwargs = dict(
42
+ temperature=temperature,
43
+ max_new_tokens=max_new_tokens,
44
+ top_p=top_p,
45
+ repetition_penalty=repetition_penalty,
46
+ do_sample=True,
47
+ seed=42,
48
+ )
49
+ if selected_option == "Keine These ausgewählt":
50
+ selected_option = "Die Frage bezieht sich auf keine These speziell und ist somit allgemeiner zu behandeln."
51
+ search_prompt = format_prompt(prompt, history)
52
+ else:
53
+ search_prompt = selected_option
54
+ selected_option = "Die Nutzer Frage bezieht sich auf folgende Wahl-O-Mat These: " + selected_option
55
+ addon = ""
56
+ results=collection.query(
57
+ query_texts=[search_prompt],
58
+ n_results=8
59
+ )
60
+
61
+ dists = ["<br><small>(relevance: " + str(round((1 - d) * 100) / 100) + ";" for d in results['distances'][0]]
62
+ results = results['documents'][0]
63
+ combination = zip(results, dists)
64
+ combination = [' '.join(triplets) for triplets in combination]
65
+ print(results)
66
+ if len(results) > 1:
67
+ addon = "Bitte berücksichtige bei deiner Antwort ausschießlich folgende Auszüge aus unserer Wahlhilfe Datenbank, sofern sie für die Antwort erforderlich sind. Beantworte die Frage knapp und präzise. Ignoriere unpassende Datenbank-Auszüge OHNE sie zu kommentieren, zu erwähnen oder aufzulisten:\n" + "\n".join(results)
68
+ system = "Du heißt Avah und bist ein deutschsprachiges KI-basiertes Wahlhilfe Beratungssystem zum Wahl-O-Maten für die Bundestagswahl 2021, an welchem insgesamt 38 Parteien teilgenommen haben. Du beinhaltest aber nur Informationen zu den 6 Hauptparteien. Du nimmst selber keine eigene politische Postion ein!" + addon + "\n\nUser-Anliegen:"
69
+
70
+ formatted_prompt = format_prompt(system + "\n" + selected_option + "\n" + prompt, history)
71
+ stream = client.text_generation(formatted_prompt, **generate_kwargs, stream=True, details=True, return_full_text=False)
72
+ output = ""
73
+ for response in stream:
74
+ output += response.token.text
75
+ return output
76
+
77
+
78
+ dropdown_options = ["Keine These ausgewählt",
79
+ 'Auf allen Autobahnen soll ein generelles Tempolimit gelten.',
80
+ 'Deutschland soll seine Verteidigungsausgaben erhöhen.',
81
+ 'Bei Bundestagswahlen sollen auch Jugendliche ab 16 Jahren wählen dürfen.',
82
+ 'Die Förderung von Windenergie soll beendet werden.',
83
+ 'Die Möglichkeiten der Vermieterinnen und Vermieter, Wohnungsmieten zu erhöhen, sollen gesetzlich stärker begrenzt werden.',
84
+ 'Impfstoffe gegen Covid-19 sollen weiterhin durch Patente geschützt sein.',
85
+ 'Der für das Jahr 2038 geplante Ausstieg aus der Kohleverstromung soll vorgezogen werden.',
86
+ 'Alle Erwerbstätigen sollen in der gesetzlichen Rentenversicherung versichert sein müssen.',
87
+ 'Das Recht anerkannter Flüchtlinge auf Familiennachzug soll abgeschafft werden.',
88
+ 'Auf den Umsatz, der in Deutschland mit digitalen Dienstleistungen erzielt wird, soll eine nationale Steuer erhoben werden.',
89
+ 'Die traditionelle Familie aus Vater, Mutter und Kindern soll stärker als andere Lebensgemeinschaften gefördert werden.',
90
+ 'Spenden von Unternehmen an Parteien sollen weiterhin erlaubt sein.',
91
+ 'Studentinnen und Studenten sollen BAföG unabhängig vom Einkommen ihrer Eltern erhalten.',
92
+ 'In Deutschland soll es generell möglich sein, neben der deutschen eine zweite Staatsbürgerschaft zu haben.',
93
+ 'Bundesbehörden sollen in ihren Veröffentlichungen unterschiedliche Geschlechtsidentitäten sprachlich berücksichtigen.',
94
+ 'Die Ostsee-Pipeline "Nord Stream 2", die Gas von Russland nach Deutschland transportiert, soll wie geplant in Betrieb gehen dürfen.',
95
+ 'Der Solidaritätszuschlag soll vollständig abgeschafft werden.',
96
+ 'Das Tragen eines Kopftuchs soll Beamtinnen im Dienst generell erlaubt sein.',
97
+ 'Die Zulassung von neuen Autos mit Verbrennungsmotor soll auch langfristig möglich sein.',
98
+ 'Der Bund soll mehr Zuständigkeiten in der Schulpolitik erhalten.',
99
+ 'Der Bund soll Projekte zur Bekämpfung des Antisemitismus stärker finanziell unterstützen.',
100
+ 'Chinesische Firmen sollen keine Aufträge für den Ausbau der Kommunikationsinfrastruktur in Deutschland erhalten dürfen.',
101
+ 'Der Staat soll weiterhin für Religionsgemeinschaften die Kirchensteuer einziehen.',
102
+ 'Der kontrollierte Verkauf von Cannabis soll generell erlaubt sein.',
103
+ 'Deutschland soll aus der Europäischen Union austreten.',
104
+ 'Die Landeslisten der Parteien für die Wahlen zum Deutschen Bundestag sollen abwechselnd mit Frauen und Männern besetzt werden müssen.',
105
+ 'Stationäre Behandlungen im Krankenhaus sollen weiterhin über eine Fallpauschale abgerechnet werden.',
106
+ 'Auf hohe Vermögen soll wieder eine Steuer erhoben werden.',
107
+ 'Bei der Videoüberwachung öffentlicher Plätze soll Gesichtserkennungssoftware eingesetzt werden dürfen.',
108
+ 'Auch Ehepaare ohne Kinder sollen weiterhin steuerlich begünstigt werden.',
109
+ 'Ökologische Landwirtschaft soll stärker gefördert werden als konventionelle Landwirtschaft.',
110
+ 'Islamische Verbände sollen als Religionsgemeinschaften staatlich anerkannt werden können.',
111
+ 'Der staatlich festgelegte Preis für den Ausstoß von CO2 beim Heizen und Autofahren soll stärker steigen als geplant.',
112
+ 'Die Schuldenbremse im Grundgesetz soll beibehalten werden.',
113
+ 'Asyl soll weiterhin nur politisch Verfolgten gewährt werden.',
114
+ 'Der gesetzliche Mindestlohn soll spätestens im Jahr 2022 auf mindestens 12 Euro erhöht werden.',
115
+ 'Der Flugverkehr soll höher besteuert werden.',
116
+ 'Unternehmen sollen selbst entscheiden, ob sie ihren Beschäftigten das Arbeiten im Homeoffice erlauben.']
117
+
118
+ with gr.Blocks(title="test") as demo:
119
+ chatbot = gr.Chatbot(value=[[None, "Hallo mein Name ist AVAH (Artificial Voting Advice Helper), deine interaktive Hilfe zum Wahl-O-Maten für die Bundestagswahl 2021. Wenn du Fragen zu Thesen der Wahlhilfe hast, wähle gerne die besagt These aus. Ansonsten kannst du mir auch unabhängig von bestimmten Thesen Fragen stellen."]], render_markdown=True)
120
+ dropdown = gr.Dropdown(choices=dropdown_options, label="Wähle eine These aus wenn du willst",value="Keine These ausgewählt")
121
+ textbox = gr.Textbox(label="Deine Frage")
122
+
123
+ def combined_response(prompt, history, dropdown_value):
124
+ answer = response(prompt, history, dropdown_value)
125
+ return history + [[prompt, answer]]
126
+
127
+ submit_button = gr.Button("Submit")
128
+
129
+ submit_button.click(
130
+ combined_response,
131
+ inputs=[textbox, chatbot, dropdown],
132
+ outputs=chatbot,
133
+ )
134
+
135
+ demo.launch()
136
+
137
+ print("Interface up and running!")
138
+
139
+
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ streamlit
2
+ pandas
3
+ fasttext
4
+ numpy
5
+ nltk
6
+ scikit-learn
7
+ tqdm
8
+ pickle5