GIGAParviz commited on
Commit
17ae6bf
·
verified ·
1 Parent(s): 2d937e2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +10 -6
app.py CHANGED
@@ -8,7 +8,6 @@ from langchain.document_loaders import PyPDFLoader
8
  from langchain.text_splitter import RecursiveCharacterTextSplitter
9
  from langchain.embeddings import HuggingFaceEmbeddings
10
  from langchain.vectorstores import FAISS
11
- from langchain_core.vectorstores import InMemoryVectorStore
12
  from groq import Groq
13
  from langchain.memory import ConversationBufferMemory
14
 
@@ -28,7 +27,6 @@ client = Groq(api_key=groq_api_key)
28
  hf_token = hf_api_key
29
 
30
  embeddings = HuggingFaceEmbeddings(model_name="heydariAI/persian-embeddings")
31
- vector_store = InMemoryVectorStore(embeddings)
32
 
33
  DATASET_NAME = "chat_history"
34
  try:
@@ -51,13 +49,17 @@ def save_chat_to_dataset(user_message, bot_message):
51
  logger.error(f"Error saving chat history to dataset: {e}")
52
 
53
  def process_pdf_with_langchain(pdf_path):
 
54
  try:
 
55
  loader = PyPDFLoader(pdf_path)
56
  documents = loader.load()
 
57
  text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
58
  split_documents = text_splitter.split_documents(documents)
59
-
60
  vectorstore = FAISS.from_documents(split_documents, embeddings)
 
61
  retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
62
  return retriever
63
  except Exception as e:
@@ -65,6 +67,7 @@ def process_pdf_with_langchain(pdf_path):
65
  raise
66
 
67
  def generate_response(query, memory, retriever=None, use_pdf_context=False):
 
68
  try:
69
  knowledge = ""
70
 
@@ -88,7 +91,6 @@ def generate_response(query, memory, retriever=None, use_pdf_context=False):
88
  context += f"\n\nYou: {query}\nParvizGPT:"
89
 
90
  response = "در حال پردازش..."
91
-
92
  retries = 3
93
  for attempt in range(retries):
94
  try:
@@ -109,7 +111,9 @@ def generate_response(query, memory, retriever=None, use_pdf_context=False):
109
  return f"Error: {e}", memory
110
 
111
  def gradio_interface(user_message, chat_box, memory, pdf_file=None, use_pdf_context=False):
 
112
  global retriever
 
113
  if pdf_file is not None and use_pdf_context:
114
  try:
115
  retriever = process_pdf_with_langchain(pdf_file.name)
@@ -117,7 +121,6 @@ def gradio_interface(user_message, chat_box, memory, pdf_file=None, use_pdf_cont
117
  return chat_box + [("Error", f"Error processing PDF: {e}")], memory
118
 
119
  chat_box.append(("ParvizGPT", "در حال پردازش..."))
120
-
121
  response, memory = generate_response(user_message, memory, retriever=retriever, use_pdf_context=use_pdf_context)
122
 
123
  chat_box[-1] = ("You", user_message)
@@ -128,6 +131,7 @@ def gradio_interface(user_message, chat_box, memory, pdf_file=None, use_pdf_cont
128
  return chat_box, memory
129
 
130
  def clear_memory(memory):
 
131
  memory.clear()
132
  return [], memory
133
 
@@ -137,7 +141,7 @@ with gr.Blocks() as interface:
137
  gr.Markdown("## ParvizGPT")
138
  chat_box = gr.Chatbot(label="Chat History", value=[])
139
  user_message = gr.Textbox(label="Your Message", placeholder="Type your message here and press Enter...", lines=1, interactive=True)
140
- use_pdf_context = gr.Checkbox(label="Use PDF Context", value=False, interactive=True) # Checkbox for PDF context
141
  clear_memory_btn = gr.Button("Clear Memory", interactive=True)
142
  pdf_file = gr.File(label="Upload PDF for Context (Optional)", type="filepath", interactive=True, scale=1)
143
  submit_btn = gr.Button("Submit")
 
8
  from langchain.text_splitter import RecursiveCharacterTextSplitter
9
  from langchain.embeddings import HuggingFaceEmbeddings
10
  from langchain.vectorstores import FAISS
 
11
  from groq import Groq
12
  from langchain.memory import ConversationBufferMemory
13
 
 
27
  hf_token = hf_api_key
28
 
29
  embeddings = HuggingFaceEmbeddings(model_name="heydariAI/persian-embeddings")
 
30
 
31
  DATASET_NAME = "chat_history"
32
  try:
 
49
  logger.error(f"Error saving chat history to dataset: {e}")
50
 
51
  def process_pdf_with_langchain(pdf_path):
52
+ """Process a PDF file and create a FAISS retriever."""
53
  try:
54
+ # Load the PDF
55
  loader = PyPDFLoader(pdf_path)
56
  documents = loader.load()
57
+
58
  text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
59
  split_documents = text_splitter.split_documents(documents)
60
+
61
  vectorstore = FAISS.from_documents(split_documents, embeddings)
62
+
63
  retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
64
  return retriever
65
  except Exception as e:
 
67
  raise
68
 
69
  def generate_response(query, memory, retriever=None, use_pdf_context=False):
70
+ """Generate a response using the Groq model and retrieved PDF context."""
71
  try:
72
  knowledge = ""
73
 
 
91
  context += f"\n\nYou: {query}\nParvizGPT:"
92
 
93
  response = "در حال پردازش..."
 
94
  retries = 3
95
  for attempt in range(retries):
96
  try:
 
111
  return f"Error: {e}", memory
112
 
113
  def gradio_interface(user_message, chat_box, memory, pdf_file=None, use_pdf_context=False):
114
+ """Handle the Gradio interface interactions."""
115
  global retriever
116
+
117
  if pdf_file is not None and use_pdf_context:
118
  try:
119
  retriever = process_pdf_with_langchain(pdf_file.name)
 
121
  return chat_box + [("Error", f"Error processing PDF: {e}")], memory
122
 
123
  chat_box.append(("ParvizGPT", "در حال پردازش..."))
 
124
  response, memory = generate_response(user_message, memory, retriever=retriever, use_pdf_context=use_pdf_context)
125
 
126
  chat_box[-1] = ("You", user_message)
 
131
  return chat_box, memory
132
 
133
  def clear_memory(memory):
134
+ """Clear the conversation memory."""
135
  memory.clear()
136
  return [], memory
137
 
 
141
  gr.Markdown("## ParvizGPT")
142
  chat_box = gr.Chatbot(label="Chat History", value=[])
143
  user_message = gr.Textbox(label="Your Message", placeholder="Type your message here and press Enter...", lines=1, interactive=True)
144
+ use_pdf_context = gr.Checkbox(label="Use PDF Context", value=False, interactive=True)
145
  clear_memory_btn = gr.Button("Clear Memory", interactive=True)
146
  pdf_file = gr.File(label="Upload PDF for Context (Optional)", type="filepath", interactive=True, scale=1)
147
  submit_btn = gr.Button("Submit")