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}
|