Update app.py
Browse files
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 |
-
|
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,
|
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 |
-
#
|
291 |
-
|
292 |
-
|
|
|
293 |
print("db neu aufbauen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1")
|
|
|
294 |
PREPROCESSED_SPLITS, SPLIT_TO_ORIGINAL_MAPPING = document_loading_splitting()
|
295 |
if PREPROCESSED_SPLITS:
|
296 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
|
298 |
#kein Bild hochgeladen -> auf Text antworten...
|
299 |
status = "Antwort der Vektordatenbank"
|
300 |
-
results, status = generate_text(prompt, chatbot, history,
|
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=[]
|