File size: 3,159 Bytes
2743222
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
80
81
82
83
84
85
86
87
88
89
90
91
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_community.vectorstores import Pinecone
from langchain_text_splitters import CharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.document_loaders import HuggingFaceDatasetLoader
from langchain_pinecone import PineconeVectorStore
from pinecone import Pinecone, ServerlessSpec
from langchain_pinecone import PineconeVectorStore
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
from langchain import hub
from langchain_core.runnables import RunnablePassthrough
import os
import gradio as gr

from dotenv import load_dotenv
load_dotenv()


dataset_name = "Pijush2023/Yale_Psychilogy"
page_content_column = 'Biography'
loader = HuggingFaceDatasetLoader(dataset_name, page_content_column)
data = loader.load()

text_splitter = CharacterTextSplitter(chunk_size=300, chunk_overlap=50)
documents = text_splitter.split_documents(data)


embeddings=OpenAIEmbeddings(api_key=os.environ['OPENAI_API_KEY'])
# Instantiate chat model
chat_model= ChatOpenAI(api_key=os.environ['OPENAI_API_KEY'], temperature=0.5, model='gpt-3.5-turbo-0125')

# pip install pinecone-client
pc = Pinecone(api_key=os.environ['PINECONE_API_KEY'])

index_name = "medical"

if index_name not in pc.list_indexes().names():
  pc.create_index(
      name=index_name,
      dimension=1536,
      metric='cosine',
      spec=ServerlessSpec(
          cloud='aws',
          region='us-east-1'
      )
  )

vectorstore = PineconeVectorStore(index_name=index_name, embedding=embeddings)
vectorstore.add_documents(documents)

query = "who is the best doctor for depression?"
vectorstore.similarity_search(query,k=1)

retriever = vectorstore.as_retriever(search_kwargs={'k':1})
docs = retriever.invoke("who is the best doctors for depression ?")

prompt=hub.pull("rlm/rag-prompt")

rag_chain=(
    {"context":retriever , "question" : RunnablePassthrough()}
    | prompt
    | chat_model
    | StrOutputParser()
)

query="depression"
rag_chain.invoke(query)

def generate_answer(message, history):
    return rag_chain.invoke(message)

# Set up chat bot interface
answer_bot = gr.ChatInterface(
                            generate_answer,
                            chatbot=gr.Chatbot(height=300),
                            textbox=gr.Textbox(placeholder="Ask me a question about Doctor on Psychiatry", container=False, scale=7),
                            title="Psychiatry Doctor Chat-Bot",
                            description="This is a chat bot related to top School in United States about Psychiatry",
                            theme="soft",
                            examples=["depression", "Mental-Stress", "Bipolar Disorder", "Eating Disorders" , "etc....."],
                            cache_examples=False,
                            retry_btn=None,
                            undo_btn=None,
                            clear_btn=None,
                            submit_btn="Ask"
                        )

answer_bot.launch()