MedicalChat / app.py
jk2951's picture
Initial commit
4a1402a
Raw
History Blame Contribute Delete
2.42 kB
from flask import Flask, render_template, request
from dotenv import load_dotenv
import os
from langchain_pinecone import PineconeVectorStore
from langchain_huggingface import HuggingFaceEndpoint, ChatHuggingFace
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from src.helper import download_hugging_face_embeddings
from src.prompt import system_prompt # FIXED import
# ------------------ Flask setup ------------------
app = Flask(__name__)
load_dotenv()
# ------------------ Environment variables ------------------
PINECONE_API_KEY = os.getenv("PINECONE_API_KEY")
HUGGINGFACE_API_KEY = os.getenv("HUGGINGFACE_API_KEY")
if not PINECONE_API_KEY or not HUGGINGFACE_API_KEY:
raise EnvironmentError("Missing API keys in .env file")
# ------------------ Embeddings ------------------
embeddings = download_hugging_face_embeddings()
# ------------------ Pinecone Vector Store ------------------
index_name = "medical-chatbot"
vectorstore = PineconeVectorStore.from_existing_index(
index_name=index_name,
embedding=embeddings
)
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": 3}
)
# ------------------ LLM ------------------
llm_endpoint = HuggingFaceEndpoint(
repo_id="mistralai/Mistral-7B-Instruct-v0.2",
task="text-generation",
max_new_tokens=512,
do_sample=False,
repetition_penalty=1.03,
huggingfacehub_api_token=HUGGINGFACE_API_KEY,
)
llm = ChatHuggingFace(llm=llm_endpoint)
# ------------------ Prompt ------------------
prompt = ChatPromptTemplate.from_messages(
[
("system", system_prompt),
("human", "{question}"),
]
)
# ------------------ LCEL RAG CHAIN ------------------
rag_chain = (
{
"context": retriever,
"question": RunnablePassthrough(),
}
| prompt
| llm
| StrOutputParser()
)
# ------------------ Routes ------------------
@app.route("/")
def index():
return render_template("chat.html")
@app.route("/get", methods=["POST"])
def chat():
user_input = request.form["msg"]
print("User:", user_input)
response = rag_chain.invoke(user_input)
print("Bot:", response)
return response
# ------------------ Run app ------------------
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8080, debug=True)