from langchain_community.embeddings.sentence_transformer import ( SentenceTransformerEmbeddings, ) from langchain.retrievers import ParentDocumentRetriever from langchain_community.vectorstores import Chroma from langchain_text_splitters import CharacterTextSplitter, RecursiveCharacterTextSplitter import pickle from langchain_community.llms import HuggingFaceEndpoint from dotenv import load_dotenv, find_dotenv import os from langchain.chains import ConversationalRetrievalChain from langchain.chains import LLMChain from langchain.chains.conversational_retrieval.prompts import CONDENSE_QUESTION_PROMPT from langchain.chains.question_answering import load_qa_chain from langchain import PromptTemplate from transformers import pipeline # Please ensure you have a .env file available with 'HUGGINGFACEHUB_API_TOKEN' load_dotenv(find_dotenv()) HUGGINGFACEHUB_API_TOKEN = os.environ["HUGGINGFACEHUB_API_TOKEN"] repo_id ="mistralai/Mistral-7B-Instruct-v0.2" def choose_model2(model): global repo_id if model == "Venilla Model": repo_id="mistralai/Mistral-7B-Instruct-v0.2" print("model chooosed from recomm",repo_id) else: repo_id="GRMenon/mental-health-mistral-7b-instructv0.2-finetuned-V2" print("model chooosed from recomm",repo_id) llm = HuggingFaceEndpoint( repo_id=repo_id, max_length=512, temperature=0.5, token=HUGGINGFACEHUB_API_TOKEN ) persist_directory="Data/chroma" #chroma_client = chromadb.PersistentClient(persist_directory=persist_directory) embedding_function = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2") vectors = Chroma(persist_directory = persist_directory, embedding_function = embedding_function, collection_name="split_parents") retriever = vectors.as_retriever() #(k=6) #prompt="you are a mental health therapist, talking to a person with who is facing some mental health issues. Following is the user feeling {question}" prompt = """You're a Mental Health Specialist. Support those with Depressive Disorder. Your task is to provide mental health advice. Listen compassionately, respond helpfully. For casual talk, be friendly. For facts, use context. Following is the user feeling {question}. If unsure, say, 'Out of my knowledge.' Always stay direct. If you cannot find the answer from the pieces of context, just say that you don't know, don't try to make up an answer. PLEASE GIVE THE RESPONSE IN THE FORM OF BULLET POINTS. ---------------- {context}""" prompt = PromptTemplate(input_variables=['question'],template=prompt) chain1 = LLMChain(llm=llm, prompt=prompt, verbose=True) doc_chain = load_qa_chain(llm, chain_type="stuff") chain = ConversationalRetrievalChain( retriever=retriever, question_generator=chain1, combine_docs_chain=doc_chain, verbose=True, ) def recommend2(query): chat_history = [] # query = "I feel sad" result = chain.invoke({"question": query, "chat_history": chat_history}) print("---------------\nSummary from the chat agent:",query) # print("this is the result from vector database:",vectors.similarity_search(query)) # print("this is the response from recommendation agent:", result["answer"]) return result["answer"] def is_depressed(human_inputs): '''' returns wether according to human inputs the person is depressed or not ''' # Implement Classification # all_user_inputs = ''.join(human_inputs) pipe = pipeline('sentiment-analysis') status = pipe(human_inputs) return 'Is depressed' if status[0]["label"] == "NEGATIVE" else 'Not Depressed' # return status[0]["label"] # print(recommend2("i am feeling sad"))