Spaces:
Runtime error
Runtime error
added persist directory for ChromaDB
Browse files
app.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
import streamlit as st
|
2 |
from openai import OpenAI
|
3 |
import glob
|
4 |
-
|
5 |
from langchain_community.vectorstores import Chroma
|
6 |
from langchain_core.output_parsers import StrOutputParser
|
7 |
from langchain_core.runnables import RunnablePassthrough
|
@@ -27,29 +27,60 @@ OPENAI_API_KEY = st.secrets["OPENAI_API_KEY"]
|
|
27 |
# docs.append(loader.load()[0])
|
28 |
|
29 |
# Config
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
with st.sidebar:
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
|
|
|
|
|
|
|
|
37 |
text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
|
38 |
splits = text_splitter.split_documents(docs)
|
39 |
-
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())
|
|
|
|
|
|
|
40 |
else:
|
41 |
-
vectorstore = Chroma.from_documents(documents=docs, embedding=OpenAIEmbeddings())
|
42 |
|
43 |
|
44 |
prompt_template ="""
|
45 |
-
|
|
|
|
|
|
|
46 |
Du weißt nichts über Krankheiten wie 'tumorbedingte Fatigue', 'Multiple Sklerose', 'Hashimoto-Thyreoditis' oder 'Krebs'.
|
47 |
Werden Fragen zu diesen Erkrankungen gestellt, beantworte sie mit "Dazu fehlen mir Informationen".
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
Du gibst keine Ratschläge zur Diagnose, Behandlung oder Therapie.
|
49 |
Wenn du die Antwort nicht weißt, sag einfach, dass du es nicht weißt.
|
|
|
|
|
|
|
50 |
Antworte immer in ganzen Sätzen und verwende korrekte Grammatik und Rechtschreibung. Antworte nur auf Deutsch.
|
51 |
Antworte kurz mit maximal fünf Sätzen außer es wird von dir eine ausführlichere Antwort verlangt.
|
52 |
-
Verwende zur Beantwortung der Frage nur den
|
53 |
|
54 |
Frage: {question}
|
55 |
Kontext: {context}
|
|
|
1 |
import streamlit as st
|
2 |
from openai import OpenAI
|
3 |
import glob
|
4 |
+
import pickle
|
5 |
from langchain_community.vectorstores import Chroma
|
6 |
from langchain_core.output_parsers import StrOutputParser
|
7 |
from langchain_core.runnables import RunnablePassthrough
|
|
|
27 |
# docs.append(loader.load()[0])
|
28 |
|
29 |
# Config
|
30 |
+
|
31 |
+
# Default
|
32 |
+
def_model = "gpt-3.5-turbo"
|
33 |
+
def_temperature = 0.0
|
34 |
+
def_k = 3
|
35 |
+
def_chunk_size = 500
|
36 |
+
def_chunk_overlap = 0
|
37 |
+
directory = "./chroma_db"
|
38 |
+
|
39 |
+
st. set_page_config(initial_sidebar_state="collapsed")
|
40 |
+
|
41 |
with st.sidebar:
|
42 |
+
if st.toggle("Experimental"):
|
43 |
+
disabled = False
|
44 |
+
else:
|
45 |
+
disabled = True
|
46 |
+
model = st.selectbox("Model name", [def_model], disabled=True)
|
47 |
+
temperature = st.number_input("Temperature", value=def_temperature, min_value=0.0, step=0.2, max_value=1.0, placeholder=def_temperature, disabled=disabled)
|
48 |
+
k = st.number_input("Number of documents to include", value=def_k, min_value=1, step=1, placeholder=def_k, disabled=disabled)
|
49 |
+
if st.toggle("Splitting", value=True, disabled=disabled):
|
50 |
+
chunk_size = st.number_input("Chunk size", value=def_chunk_size, step=250, placeholder=def_chunk_size, disabled=disabled) # Defines the chunks in amount of tokens in which the files are split. Also defines the amount of tokens that are feeded into the context.
|
51 |
+
chunk_overlap = st.number_input("Chunk overlap", value=def_chunk_overlap, step=10, placeholder=def_chunk_overlap, disabled=disabled)
|
52 |
text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
|
53 |
splits = text_splitter.split_documents(docs)
|
54 |
+
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings(), persist_directory=directory)
|
55 |
+
if chunk_size != def_chunk_size | chunk_overlap != def_chunk_overlap:
|
56 |
+
splits = text_splitter.split_documents(docs)
|
57 |
+
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())
|
58 |
else:
|
59 |
+
vectorstore = Chroma.from_documents(documents=docs, embedding=OpenAIEmbeddings(), persist_directory=f"{directory}/complete")
|
60 |
|
61 |
|
62 |
prompt_template ="""
|
63 |
+
###
|
64 |
+
Wenn du gefragt wirst wer du bist: Du heißt "Volker". Du bist ein Assistent für die Beantwortung von Fragen zu Long-Covid (Post-Covid synonym verwenden).
|
65 |
+
|
66 |
+
###
|
67 |
Du weißt nichts über Krankheiten wie 'tumorbedingte Fatigue', 'Multiple Sklerose', 'Hashimoto-Thyreoditis' oder 'Krebs'.
|
68 |
Werden Fragen zu diesen Erkrankungen gestellt, beantworte sie mit "Dazu fehlen mir Informationen".
|
69 |
+
|
70 |
+
###
|
71 |
+
Du beantwortest keine Fragen zu 'Tod', 'Suizid', 'Selbstverletzung', oder anderen potenziell schädigenden Themen.
|
72 |
+
Werden Fragen zum 'Tod' gestellt, verweise auf den behandelnden Arzt.
|
73 |
+
Bei Fragen zu Suizid verweise auf die Telefonseelsorge: 0800 1110111
|
74 |
+
|
75 |
+
###
|
76 |
Du gibst keine Ratschläge zur Diagnose, Behandlung oder Therapie.
|
77 |
Wenn du die Antwort nicht weißt, sag einfach, dass du es nicht weißt.
|
78 |
+
|
79 |
+
###
|
80 |
+
Wenn du allgemeine unspezifische Fragen gestellt bekommst, antworte oberflächlich und frage nach einer präziseren Fragestellung.
|
81 |
Antworte immer in ganzen Sätzen und verwende korrekte Grammatik und Rechtschreibung. Antworte nur auf Deutsch.
|
82 |
Antworte kurz mit maximal fünf Sätzen außer es wird von dir eine ausführlichere Antwort verlangt.
|
83 |
+
Verwende zur Beantwortung der Frage nur den vorhandenen Kontext.
|
84 |
|
85 |
Frage: {question}
|
86 |
Kontext: {context}
|