|
import os |
|
import gradio as gr |
|
from langchain-community.vectorstores import Chroma |
|
from transformers import pipeline |
|
from sentence_transformers import SentenceTransformer |
|
import langchain.chains.LLMChain |
|
import langchain_core.prompts.PromptTemplate |
|
from langchain_huggingface import HuggingFacePipeline |
|
|
|
|
|
|
|
ANTI_BOT_PW = os.getenv("CORRECT_VALIDATE") |
|
PATH_WORK = "." |
|
CHROMA_DIR = "/chroma/kkg" |
|
CHROMA_PDF = './chroma/kkg/pdf' |
|
CHROMA_WORD = './chroma/kkg/word' |
|
CHROMA_EXCEL = './chroma/kkg/excel' |
|
|
|
|
|
hf_token = os.getenv("HF_READ") |
|
os.environ["HUGGINGFACEHUB_API_TOKEN"] = os.getenv("HF_READ") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vektordatenbank = None |
|
retriever = None |
|
|
|
|
|
|
|
|
|
file_path_download = "" |
|
|
|
|
|
|
|
|
|
|
|
|
|
def get_rag_response(question): |
|
|
|
docs = chroma_db.search(question, top_k=5) |
|
passages = [doc['text'] for doc in docs] |
|
links = [doc.get('url', 'No URL available') for doc in docs] |
|
|
|
|
|
context = " ".join(passages) |
|
qa_input = {"question": question, "context": context} |
|
answer = qa_pipeline(qa_input)['answer'] |
|
|
|
|
|
response = { |
|
"answer": answer, |
|
"documents": [{"link": link, "passage": passage} for link, passage in zip(links, passages)] |
|
} |
|
|
|
return response |
|
|
|
|
|
|
|
|
|
|
|
def generate_auswahl(prompt_in, file, file_history, chatbot, history, 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): |
|
global vektordatenbank, retriever |
|
|
|
|
|
if (validate and not prompt_in == "" and not prompt_in == None): |
|
|
|
|
|
neu_file = file_history |
|
|
|
|
|
prompt = normalise_prompt(prompt_in) |
|
|
|
|
|
if vektordatenbank == None: |
|
print("db neu aufbauen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1") |
|
splits = document_loading_splitting() |
|
vektordatenbank, retriever = document_storage_chroma(splits) |
|
|
|
|
|
status = "Antwort der KI ..." |
|
if (file == None and file_history == None): |
|
result, status = generate_text(prompt, chatbot, history,vektordatenbank, top_p=0.6, temperature=0.5, max_new_tokens=4048, max_context_length_tokens=2048, repetition_penalty=1.3, top_k=3) |
|
history = history + [[prompt, result]] |
|
else: |
|
|
|
|
|
if (file != None): |
|
|
|
neu_file = file |
|
|
|
|
|
result = generate_text_zu_doc(neu_file, prompt, k, rag_option, chatbot, history, vektordatenbank) |
|
|
|
|
|
if (file != None): |
|
history = history + [[(file,), None],[prompt, result]] |
|
else: |
|
history = history + [[prompt, result]] |
|
|
|
chatbot[-1][1] = "" |
|
for character in result: |
|
chatbot[-1][1] += character |
|
time.sleep(0.03) |
|
yield chatbot, history, None, neu_file, status |
|
if shared_state.interrupted: |
|
shared_state.recover() |
|
try: |
|
yield chatbot, history, None, neu_file, "Stop: Success" |
|
except: |
|
pass |
|
else: |
|
return chatbot, history, None, file_history, "Erst validieren oder einen Prompt eingeben!" |
|
|
|
|
|
|
|
|
|
|
|
def user (user_input, history): |
|
return "", history + [[user_input, None]] |
|
|
|
with gr.Blocks() as chatbot: |
|
chat_interface = gr.Chatbot() |
|
msg = gr.Textbox() |
|
clear = gr.Button("Löschen") |
|
|
|
|
|
msg.submit(user, [msg, chat_interface], [msg, chat_interface], queue = False). then(chatbot_response, [msg, chat_interface], [chat_interface, chat_interface]) |
|
|
|
clear.click(lambda: None, None, chat_interface, queue=False) |
|
|
|
chatbot.launch() |