alexkueck commited on
Commit
30ffe0e
1 Parent(s): bf476c2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -13
app.py CHANGED
@@ -4,6 +4,7 @@ import gradio as gr
4
  import time
5
  import re
6
  import io
 
7
  #from PIL import Image, ImageDraw, ImageOps, ImageFont
8
  #import base64
9
  import tempfile
@@ -32,6 +33,7 @@ from transformers import pipeline
32
  from huggingface_hub import InferenceApi
33
  from utils import *
34
  from beschreibungen import *
 
35
 
36
 
37
  #Konstanten
@@ -94,11 +96,7 @@ DOCS_DIR = "chroma/kkg"
94
  ###############################################
95
  #globale Variablen
96
  ##############################################
97
- #nur bei ersten Anfrage splitten der Dokumente - um die Vektordatenbank entsprechend zu füllen
98
- #splittet = False
99
- #DB für Vektorstore
100
- vektordatenbank = None
101
- retriever = None
102
 
103
  #############################################
104
  # Allgemeine Konstanten
@@ -213,7 +211,7 @@ def reset_textbox():
213
 
214
  ####################################################
215
  #aus einem Text-Prompt die Antwort von KI bekommen
216
- def generate_text (prompt, chatbot, history, vektordatenbank, retriever, top_p=0.6, temperature=0.2, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3, top_k=35):
217
  if (prompt == ""):
218
  raise gr.Error("Prompt ist erforderlich.")
219
 
@@ -271,13 +269,21 @@ def generate_text (prompt, chatbot, history, vektordatenbank, retriever, top_p=0
271
  raise gr.Error(e)
272
  return result, False
273
 
 
 
 
 
 
274
 
 
 
 
 
 
275
 
276
  ##############################################################
277
  #Eingaben der GUI verarbeiten
278
  def generate_auswahl(prompt_in, file, file_history, chatbot, history, anzahl_docs=4, top_p=0.6, temperature=0.5, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3,top_k=5, validate=False):
279
- global vektordatenbank, retriever
280
-
281
  #nur wenn man sich validiert hat, kann die Anwendung los legen
282
  if (validate and not prompt_in == "" and not prompt_in == None):
283
  # Vektorstore initialisieren
@@ -287,17 +293,25 @@ def generate_auswahl(prompt_in, file, file_history, chatbot, history, anzahl_doc
287
  #prompt normalisieren bevor er an die KIs geht
288
  prompt = preprocess_text(prompt_in)
289
 
290
- #muss nur einmal ausgeführt werden...
291
- #?????????????????????????????????????????????? Nicht passend zum Promt???????????????????????????
292
- if not vektordatenbank or not SPLIT_TO_ORIGINAL_MAPPING:
 
293
  print("db neu aufbauen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1")
 
294
  PREPROCESSED_SPLITS, SPLIT_TO_ORIGINAL_MAPPING = document_loading_splitting()
295
  if PREPROCESSED_SPLITS:
296
- vektordatenbank, retriever = document_storage_chroma(PREPROCESSED_SPLITS)
 
 
 
 
 
 
297
 
298
  #kein Bild hochgeladen -> auf Text antworten...
299
  status = "Antwort der Vektordatenbank"
300
- results, status = generate_text(prompt, chatbot, history,vektordatenbank, retriever, top_p=0.6, temperature=0.5, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3, top_k=3)
301
 
302
  #in results sind die preprocessed Splits enthalten, dargestellt werden sollen die orginalen:
303
  relevant_docs_org=[]
 
4
  import time
5
  import re
6
  import io
7
+ import pickle
8
  #from PIL import Image, ImageDraw, ImageOps, ImageFont
9
  #import base64
10
  import tempfile
 
33
  from huggingface_hub import InferenceApi
34
  from utils import *
35
  from beschreibungen import *
36
+
37
 
38
 
39
  #Konstanten
 
96
  ###############################################
97
  #globale Variablen
98
  ##############################################
99
+
 
 
 
 
100
 
101
  #############################################
102
  # Allgemeine Konstanten
 
211
 
212
  ####################################################
213
  #aus einem Text-Prompt die Antwort von KI bekommen
214
+ def generate_text (prompt, chatbot, history, retriever, top_p=0.6, temperature=0.2, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3, top_k=35):
215
  if (prompt == ""):
216
  raise gr.Error("Prompt ist erforderlich.")
217
 
 
269
  raise gr.Error(e)
270
  return result, False
271
 
272
+ ########################################################
273
+ #Vektorstore speichern - bzw. laden
274
+ def save_vectorstore(vectorstore, filename="vectorstore.pkl"):
275
+ with open(filename, "wb") as f:
276
+ pickle.dump(vectorstore, f)
277
 
278
+ def load_vectorstore(filename="vectorstore.pkl"):
279
+ if os.path.exists(filename):
280
+ with open(filename, "rb") as f:
281
+ return pickle.load(f)
282
+ return None
283
 
284
  ##############################################################
285
  #Eingaben der GUI verarbeiten
286
  def generate_auswahl(prompt_in, file, file_history, chatbot, history, anzahl_docs=4, top_p=0.6, temperature=0.5, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3,top_k=5, validate=False):
 
 
287
  #nur wenn man sich validiert hat, kann die Anwendung los legen
288
  if (validate and not prompt_in == "" and not prompt_in == None):
289
  # Vektorstore initialisieren
 
293
  #prompt normalisieren bevor er an die KIs geht
294
  prompt = preprocess_text(prompt_in)
295
 
296
+ # Versuchen, den Vektorstore zu laden - nur wenn Dateien neu hochgeladen werden, werden die Splits neu erstellt
297
+ vektordatenbank = load_vectorstore()
298
+
299
+ if vektordatenbank is None:
300
  print("db neu aufbauen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1")
301
+ #Splits zu allen Dokumenten in den Verzeichnissen erstellen
302
  PREPROCESSED_SPLITS, SPLIT_TO_ORIGINAL_MAPPING = document_loading_splitting()
303
  if PREPROCESSED_SPLITS:
304
+ #Vektordatenbank zu den Splits erstellen
305
+ vektordatenbank = document_storage_chroma(PREPROCESSED_SPLITS)
306
+ # Speichern des Vektorstores
307
+ save_vectorstore(vektordatenbank)
308
+
309
+ #Retriever erstellen, um die relevanten Slpits zu einem Prompt zu suchen.... (retrieven)
310
+ retriever = vektordatenbank.as_retriever(search_kwargs = {"k": ANZAHL_DOCS})
311
 
312
  #kein Bild hochgeladen -> auf Text antworten...
313
  status = "Antwort der Vektordatenbank"
314
+ results, status = generate_text(prompt, chatbot, history, retriever, top_p=0.6, temperature=0.5, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3, top_k=3)
315
 
316
  #in results sind die preprocessed Splits enthalten, dargestellt werden sollen die orginalen:
317
  relevant_docs_org=[]