thananchayan's picture
fix-modify create vector store method
0e86d83
Raw
History Blame Contribute Delete
2.55 kB
import os
from dotenv import load_dotenv
import shutil
import uuid
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
# Load environment variables
load_dotenv()
# Chroma database directory
DB_DIRECTORY = "chroma_db"
####################################
# Create Vector Store
####################################
def create_vector_store(pdf_path):
global vector_db
loader = PyPDFLoader(pdf_path)
documents = loader.load()
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
chunks = splitter.split_documents(documents)
embeddings = HuggingFaceEmbeddings(
model_name="sentence-transformers/all-MiniLM-L6-v2"
)
vector_db = Chroma.from_documents(
documents=chunks,
embedding=embeddings,
collection_name=str(uuid.uuid4())
)
return vector_db
####################################
# Create RAG Chain
####################################
def get_chain():
global vector_db
# Check whether a PDF has been uploaded
if vector_db is None:
raise Exception(
"No vector database found. Please upload a PDF first."
)
# Retriever
retriever = vector_db.as_retriever(
search_kwargs={"k": 3}
)
# Gemini LLM
llm = ChatGoogleGenerativeAI(
model="gemini-2.5-flash",
google_api_key=os.getenv("GOOGLE_API_KEY"),
temperature=0.2
)
# Prompt
prompt = ChatPromptTemplate.from_template(
"""
You are a helpful AI assistant.
Answer ONLY using the information provided in the context.
If the answer cannot be found in the context, reply exactly:
"I could not find the answer in the uploaded document."
Context:
{context}
Question:
{question}
Answer:
"""
)
# Build chain
chain = (
{
"context": retriever,
"question": lambda x: x
}
| prompt
| llm
| StrOutputParser()
)
return chain
####################################
# Ask Question
####################################
def ask_question(question):
chain = get_chain()
response = chain.invoke(question)
return response