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=[]
|