File size: 2,627 Bytes
bd93d27
acf6933
bd93d27
96e69eb
 
 
 
 
 
 
 
 
 
 
e866dc3
96e69eb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e866dc3
c88d08b
 
acf6933
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import streamlit as st
from mental_health_raqa import mh_assistant

#---------------------------------#
import pandas as pd
import os 
from langchain.document_loaders.csv_loader import CSVLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.embeddings import CacheBackedEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.storage import LocalFileStore
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
from langchain.callbacks import StdOutCallbackHandler

def create_index():
    # load the data
    dir = os.path.dirname(__file__)    
    df_path = dir + '/data/Mental_Health_FAQ.csv'
    loader = CSVLoader(file_path = df_path)
    data = loader.load()
    
    # create the embeddings model
    embeddings_model = OpenAIEmbeddings()

    # create the cache backed embeddings in vector store
    store = LocalFileStore("./cache")
    cached_embeder = CacheBackedEmbeddings.from_bytes_store(
        embeddings_model, store, namespace=embeddings_model.model
    )
    vector_store = FAISS.from_documents(data, embeddings_model)

    return vector_store.as_retriever()

def setup(openai_key):
     # Set the API key for OpenAI
    os.environ["OPENAI_API_KEY"] = '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'
    retriver = create_index()
    llm = ChatOpenAI(model="gpt-4")
    return retriver, llm


def mh_assistant(openai_key,query):

    # Setup
    retriever,llm = setup(openai_key)
    # Create the QA chain
    handler = StdOutCallbackHandler()

    qa_with_sources_chain = RetrievalQA.from_chain_type(
        llm=llm,
        retriever=retriever,
        callbacks=[handler],
        return_source_documents=True
    )

    # Ask a question
    res = qa_with_sources_chain({"query":query})
    return (res['result'])
# (mh_assistant("sadfs",'what is mental health?'))

#---------------------------------#
st.title('Mental Health Assistant :broken_heart:')

# Create a text input box for the OpenAI key
openai_key = st.text_input('Enter your OpenAI Key', type='password')
key_submit = st.button('Submit')
# Display the key when the user presses the 'Submit' button
if key_submit and openai_key:
    query = st.text_input('Enter your query', type='default')
    if query:
        try:
            with st.spinner('Processing your query...'):
                response = mh_assistant(openai_key,query)
                st.write(response)
        except Exception as e:
            st.error(f'An error occurred: {e}',icon=':no_entry_sign:')
elif key_submit and not openai_key:
    st.error('Please enter your OpenAI key',icon="🚨")