zamal/Deepseek-R1-vs-LLama3
4
1import os2from dotenv import load_dotenv3from langchain_community.document_loaders import UnstructuredPDFLoader4from langchain_text_splitters import RecursiveCharacterTextSplitter5from langchain_huggingface import HuggingFaceEmbeddings6from langchain_chroma import Chroma7from langchain_groq import ChatGroq8from langchain.chains import RetrievalQA9 10# Load environment variables11load_dotenv()12GROQ_API_KEY = os.getenv("GROQ_API_KEY")13os.environ["GROQ_API_KEY"] = GROQ_API_KEY14 15working_dir = os.path.dirname(os.path.abspath(__file__))16 17# Initialize the embedding model18embedding = HuggingFaceEmbeddings()19 20# Initialize the DeepSeek-R1 70B model21deepseek_llm = ChatGroq(22 model="deepseek-r1-distill-llama-70b",23 temperature=024)25 26# Initialize the Llama-3 70B model27llama3_llm = ChatGroq(28 model="llama-3.3-70b-versatile",29 temperature=030)31 32def process_document_to_chromadb(file_name):33 """Processes a PDF document and stores embeddings in ChromaDB."""34 loader = UnstructuredPDFLoader(os.path.join(working_dir, file_name))35 documents = loader.load()36 text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=200)37 texts = text_splitter.split_documents(documents)38 vectordb = Chroma.from_documents(39 documents=texts,40 embedding=embedding,41 persist_directory=os.path.join(working_dir, "doc_vectorstore")42 )43 return "Document successfully processed and stored."44 45def answer_question(user_question):46 """Retrieves answers from stored documents using DeepSeek-R1 and Llama-3."""47 vectordb = Chroma(48 persist_directory=os.path.join(working_dir, "doc_vectorstore"),49 embedding_function=embedding50 )51 retriever = vectordb.as_retriever()52 53 # DeepSeek-R1 response54 qa_chain_deepseek = RetrievalQA.from_chain_type(55 llm=deepseek_llm,56 chain_type="stuff",57 retriever=retriever,58 return_source_documents=True59 )60 response_deepseek = qa_chain_deepseek.invoke({"query": user_question})61 answer_deepseek = response_deepseek["result"]62 63 # Llama-3 response64 qa_chain_llama3 = RetrievalQA.from_chain_type(65 llm=llama3_llm,66 chain_type="stuff",67 retriever=retriever,68 return_source_documents=True69 )70 response_llama3 = qa_chain_llama3.invoke({"query": user_question})71 answer_llama3 = response_llama3["result"]72 73 return {"answer_deepseek": answer_deepseek, "answer_llama3": answer_llama3}74 