la04 commited on
Commit
43fb58d
·
verified ·
1 Parent(s): f8d2995

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +69 -0
app.py ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from huggingface_hub import InferenceClient
3
+ from langchain.document_loaders import TextLoader
4
+ from langchain.indexes import VectorstoreIndexCreator
5
+ from langchain.embeddings import OpenAIEmbeddings
6
+ from langchain.vectorstores import FAISS
7
+ from langchain.chains import RetrievalQA
8
+
9
+ # Initialisiere den HuggingFace InferenceClient
10
+ client = InferenceClient("HuggingFaceH4/zephyr-7b-beta")
11
+
12
+ # Funktion, um die Dokumente zu laden und den Vektorstore zu erstellen
13
+ def create_vectorstore_from_file(file):
14
+ loader = TextLoader(file.name)
15
+ documents = loader.load()
16
+
17
+ # Erstelle den Vektorstore mit FAISS und OpenAI Embeddings
18
+ embeddings = OpenAIEmbeddings()
19
+ index_creator = VectorstoreIndexCreator(vectorstore_cls=FAISS)
20
+ index = index_creator.from_documents(documents, embeddings)
21
+
22
+ # Rückgabe des erstellten Index
23
+ return index
24
+
25
+ # Funktion, um basierend auf einem geladenen Dokument und einer Frage zu antworten
26
+ def respond_with_document(message, history, system_message, max_tokens, temperature, top_p, file):
27
+ # Lade das Dokument und erstelle den Vektorstore
28
+ index = create_vectorstore_from_file(file)
29
+
30
+ # Hole den Retriever aus dem Index
31
+ retriever = index.as_retriever()
32
+
33
+ # Definiere die QA-Kette mit dem Retriever
34
+ qa_chain = RetrievalQA.from_chain_type(
35
+ llm=client,
36
+ chain_type="stuff",
37
+ retriever=retriever,
38
+ verbose=True
39
+ )
40
+
41
+ # Erstelle eine Liste von Nachrichten für den Kontext
42
+ messages = [{"role": "system", "content": system_message}]
43
+ for val in history:
44
+ if val[0]:
45
+ messages.append({"role": "user", "content": val[0]})
46
+ if val[1]:
47
+ messages.append({"role": "assistant", "content": val[1]})
48
+
49
+ # Sende die Frage und bekomme die Antwort
50
+ response = qa_chain.run(message)
51
+
52
+ return response
53
+
54
+ # Gradio-Interface
55
+ demo = gr.Interface(
56
+ fn=respond_with_document,
57
+ inputs=[
58
+ gr.Textbox(label="User Message", placeholder="Ask a question"),
59
+ gr.File(label="Upload Document", type="file"), # Ermöglicht das Hochladen eines Dokuments
60
+ gr.Textbox(value="You are a helpful assistant.", label="System Message"),
61
+ gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="Max Tokens"),
62
+ gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="Temperature"),
63
+ gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (nucleus sampling)"),
64
+ ],
65
+ outputs=gr.Textbox(label="Bot Response")
66
+ )
67
+
68
+ if __name__ == "__main__":
69
+ demo.launch()