Spaces:
Sleeping
Sleeping
import gradio as gr | |
from huggingface_hub import InferenceClient | |
from langchain.document_loaders import TextLoader | |
from langchain.indexes import VectorstoreIndexCreator | |
from langchain.embeddings import OpenAIEmbeddings | |
from langchain.vectorstores import FAISS | |
from langchain.chains import RetrievalQA | |
# Initialisiere den HuggingFace InferenceClient | |
client = InferenceClient("HuggingFaceH4/zephyr-7b-beta") | |
# Funktion, um die Dokumente zu laden und den Vektorstore zu erstellen | |
def create_vectorstore_from_file(file): | |
loader = TextLoader(file.name) | |
documents = loader.load() | |
# Erstelle den Vektorstore mit FAISS und OpenAI Embeddings | |
embeddings = OpenAIEmbeddings() | |
index_creator = VectorstoreIndexCreator(vectorstore_cls=FAISS) | |
index = index_creator.from_documents(documents, embeddings) | |
# Rückgabe des erstellten Index | |
return index | |
# Funktion, um basierend auf einem geladenen Dokument und einer Frage zu antworten | |
def respond_with_document(message, history, system_message, max_tokens, temperature, top_p, file): | |
# Lade das Dokument und erstelle den Vektorstore | |
index = create_vectorstore_from_file(file) | |
# Hole den Retriever aus dem Index | |
retriever = index.as_retriever() | |
# Definiere die QA-Kette mit dem Retriever | |
qa_chain = RetrievalQA.from_chain_type( | |
llm=client, | |
chain_type="stuff", | |
retriever=retriever, | |
verbose=True | |
) | |
# Erstelle eine Liste von Nachrichten für den Kontext | |
messages = [{"role": "system", "content": system_message}] | |
for val in history: | |
if val[0]: | |
messages.append({"role": "user", "content": val[0]}) | |
if val[1]: | |
messages.append({"role": "assistant", "content": val[1]}) | |
# Sende die Frage und bekomme die Antwort | |
response = qa_chain.run(message) | |
return response | |
# Gradio-Interface | |
demo = gr.Interface( | |
fn=respond_with_document, | |
inputs=[ | |
gr.Textbox(label="User Message", placeholder="Ask a question"), | |
gr.File(label="Upload Document", type="file"), # Ermöglicht das Hochladen eines Dokuments | |
gr.Textbox(value="You are a helpful assistant.", label="System Message"), | |
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max Tokens"), | |
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"), | |
gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"), | |
], | |
outputs=gr.Textbox(label="Bot Response") | |
) | |
if __name__ == "__main__": | |
demo.launch() | |