Spaces:
Sleeping
Sleeping
File size: 2,184 Bytes
4f0811d 72e83b2 4f0811d 02b8481 d8a22fb dca455a 4f0811d dd2b131 4f0811d dd2b131 4f0811d dca455a dd2b131 dca455a 4f0811d dca455a 4f0811d dd2b131 b329506 4f0811d dd2b131 dca455a 4f0811d dd2b131 dca455a 4f0811d d8a22fb dd2b131 4f0811d d8a22fb dca455a d8a22fb dca455a d8a22fb |
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 |
import os
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.document_loaders import PyMuPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import ConversationalRetrievalChain
from langchain.memory import ConversationBufferMemory
from langchain.llms import HuggingFaceHub
from langchain.chains import ConversationalRetrievalChain
from langchain.chains.question_answering import load_qa_chain
from langchain.llms import HuggingFaceHub
from langchain.memory import ConversationBufferMemory
# Constants
CHROMA_DB_PATH = "chroma_db"
SENTENCE_TRANSFORMER_MODEL = "sentence-transformers/all-MiniLM-L6-v2"
LLM_MODEL = "HuggingFaceH4/zephyr-7b-beta"
# Initialize vector store
def initialize_vector_store():
embeddings = HuggingFaceEmbeddings(model_name=SENTENCE_TRANSFORMER_MODEL)
return Chroma(persist_directory=CHROMA_DB_PATH, embedding_function=embeddings)
vector_store = initialize_vector_store()
def ingest_pdf(pdf_path):
"""Loads, splits, and stores PDF content in a vector database."""
loader = PyMuPDFLoader(pdf_path)
documents = loader.load()
# Split text into smaller chunks
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
split_docs = text_splitter.split_documents(documents)
# Re-initialize vector store to ensure persistence
vector_store.add_documents(split_docs)
vector_store.persist()
def process_query_with_memory(query, chat_memory):
"""Processes user queries while maintaining conversational memory."""
retriever = vector_store.as_retriever()
# Initialize LLM
llm = HuggingFaceHub(repo_id=LLM_MODEL, model_kwargs={"max_new_tokens": 500})
# Load QA Chain
qa_chain = load_qa_chain(llm, chain_type="stuff")
# Create Conversational Retrieval Chain correctly
conversation_chain = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=retriever,
memory=chat_memory,
combine_docs_chain=qa_chain
)
return conversation_chain.run({"question": query, "chat_history": chat_memory.memory if chat_memory else []})
|