Simple-RAG / src /streamlit_app.py
mohamedamgad2002's picture
Upload 5 files
97ea681 verified
#import streamlit
import streamlit as st
import os
from dotenv import load_dotenv
# import pinecone
from pinecone import Pinecone, ServerlessSpec
# import langchain
from langchain_pinecone import PineconeVectorStore
from langchain_google_genai import ChatGoogleGenerativeAI, GoogleGenerativeAIEmbeddings
from langchain_core.messages import HumanMessage, SystemMessage, AIMessage
load_dotenv()
st.title("Chatbot")
# initialize pinecone database
pc = Pinecone(api_key=os.environ.get("PINECONE_API_KEY"))
# initialize pinecone database
index_name = os.environ.get("PINECONE_INDEX_NAME") # change if desired
index = pc.Index(index_name)
# initialize embeddings model + vector store
embeddings = GoogleGenerativeAIEmbeddings(model="models/gemini-embedding-001")
vector_store = PineconeVectorStore(index=index, embedding=embeddings)
# initialize chat history
if "messages" not in st.session_state:
st.session_state.messages = []
st.session_state.messages.append(SystemMessage("You are an assistant for question-answering tasks. "))
# display chat messages from history on app rerun
for message in st.session_state.messages:
if isinstance(message, HumanMessage):
with st.chat_message("user"):
st.markdown(message.content)
elif isinstance(message, AIMessage):
with st.chat_message("assistant"):
st.markdown(message.content)
# create the bar where we can type messages
prompt = st.chat_input("How are you?")
# did the user submit a prompt?
if prompt:
# add the message from the user (prompt) to the screen with streamlit
with st.chat_message("user"):
st.markdown(prompt)
st.session_state.messages.append(HumanMessage(prompt))
# initialize the llm
llm = ChatGoogleGenerativeAI(
model="gemini-2.5-flash",
temperature=1
)
# creating and invoking the retriever
retriever = vector_store.as_retriever(
search_type="similarity_score_threshold",
search_kwargs={"k": 3, "score_threshold": 0.5},
)
docs = retriever.invoke(prompt)
docs_text = "".join(d.page_content for d in docs)
# creating the system prompt
system_prompt = """You are an assistant for question-answering tasks.
Use the following pieces of retrieved context to answer the question.
If you don't know the answer, just say that you don't know.
Use three sentences maximum and keep the answer concise.
Context: {context}:"""
# Populate the system prompt with the retrieved context
system_prompt_fmt = system_prompt.format(context=docs_text)
print("-- SYS PROMPT --")
print(system_prompt_fmt)
# adding the system prompt to the message history
st.session_state.messages.append(SystemMessage(system_prompt_fmt))
# invoking the llm
result = llm.invoke(st.session_state.messages).content
# adding the response from the llm to the screen (and chat)
with st.chat_message("assistant"):
st.markdown(result)
st.session_state.messages.append(AIMessage(result))