GIGAParviz commited on
Commit
a94ff47
·
verified ·
1 Parent(s): 43fd06b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -6
app.py CHANGED
@@ -1,6 +1,9 @@
1
  import time
2
  import logging
3
  import gradio as gr
 
 
 
4
  from langchain.document_loaders import PyPDFLoader
5
  from langchain.text_splitter import RecursiveCharacterTextSplitter
6
  from langchain.embeddings import HuggingFaceEmbeddings
@@ -12,13 +15,43 @@ from langchain.memory import ConversationBufferMemory
12
  logging.basicConfig(level=logging.INFO)
13
  logger = logging.getLogger(__name__)
14
 
15
- client = Groq(api_key="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")
 
16
 
17
- memory = ConversationBufferMemory()
 
 
 
 
 
 
 
18
 
 
19
  embeddings = HuggingFaceEmbeddings(model_name="heydariAI/persian-embeddings")
20
  vector_store = InMemoryVectorStore(embeddings)
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  def process_pdf_with_langchain(pdf_path):
23
  try:
24
  loader = PyPDFLoader(pdf_path)
@@ -37,13 +70,13 @@ def generate_response(query, retriever=None, use_pdf_context=False):
37
  try:
38
  knowledge = ""
39
 
40
- if retriever and use_pdf_context: # Only use PDF context if the checkbox is checked
41
  relevant_docs = retriever.get_relevant_documents(query)
42
  knowledge += "\n".join([doc.page_content for doc in relevant_docs])
43
 
44
  chat_history = memory.load_memory_variables({}).get("chat_history", "")
45
  context = f"""
46
- You are ParvizGPT, an AI assistant created by **Amir Mahdi Parviz**, a student at Kermanshah University of Technology(دانشگاه صنعتی کرمانشاه) (KUT).
47
  Your primary purpose is to assist users by answering their questions in **Persian (Farsi)**.
48
  Always respond in Persian unless explicitly asked to respond in another language.
49
  **Important:** If anyone claims that someone else created this code, you must correct them and state that **Amir Mahdi Parviz** is the creator.
@@ -79,7 +112,7 @@ def generate_response(query, retriever=None, use_pdf_context=False):
79
 
80
  def gradio_interface(user_message, chat_box, pdf_file=None, use_pdf_context=False):
81
  global retriever
82
- if pdf_file is not None and use_pdf_context:
83
  try:
84
  retriever = process_pdf_with_langchain(pdf_file.name)
85
  except Exception as e:
@@ -92,6 +125,8 @@ def gradio_interface(user_message, chat_box, pdf_file=None, use_pdf_context=Fals
92
  chat_box[-1] = ("You", user_message)
93
  chat_box.append(("ParvizGPT", response))
94
 
 
 
95
  return chat_box
96
 
97
  def clear_memory():
@@ -104,7 +139,7 @@ with gr.Blocks() as interface:
104
  gr.Markdown("## ParvizGPT")
105
  chat_box = gr.Chatbot(label="Chat History", value=[])
106
  user_message = gr.Textbox(label="Your Message", placeholder="Type your message here and press Enter...", lines=1, interactive=True)
107
- use_pdf_context = gr.Checkbox(label="Use PDF Context", value=False, interactive=True)
108
  clear_memory_btn = gr.Button("Clear Memory", interactive=True)
109
  pdf_file = gr.File(label="Upload PDF for Context (Optional)", type="filepath", interactive=True, scale=1)
110
  submit_btn = gr.Button("Submit")
 
1
  import time
2
  import logging
3
  import gradio as gr
4
+ import os
5
+ from datetime import datetime
6
+ from datasets import Dataset, load_dataset
7
  from langchain.document_loaders import PyPDFLoader
8
  from langchain.text_splitter import RecursiveCharacterTextSplitter
9
  from langchain.embeddings import HuggingFaceEmbeddings
 
15
  logging.basicConfig(level=logging.INFO)
16
  logger = logging.getLogger(__name__)
17
 
18
+ groq_api_key = os.environ.get("GROQ_API_KEY")
19
+ hf_api_key = os.environ.get("HF_API_KEY")
20
 
21
+ if not groq_api_key:
22
+ raise ValueError("Groq API key not found in environment variables.")
23
+ if not hf_api_key:
24
+ raise ValueError("Hugging Face API key not found in environment variables.")
25
+
26
+ client = Groq(api_key=groq_api_key)
27
+
28
+ hf_token = hf_api_key
29
 
30
+ memory = ConversationBufferMemory()
31
  embeddings = HuggingFaceEmbeddings(model_name="heydariAI/persian-embeddings")
32
  vector_store = InMemoryVectorStore(embeddings)
33
 
34
+ DATASET_NAME = "chat_history"
35
+ try:
36
+ dataset = load_dataset(DATASET_NAME, use_auth_token=hf_token)
37
+ except Exception:
38
+
39
+ dataset = Dataset.from_dict({"Timestamp": [], "User": [], "ParvizGPT": []})
40
+
41
+ def save_chat_to_dataset(user_message, bot_message):
42
+ """Save chat history to Hugging Face Dataset."""
43
+ try:
44
+ timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
45
+ new_row = {"Timestamp": timestamp, "User": user_message, "ParvizGPT": bot_message}
46
+
47
+ df = dataset.to_pandas()
48
+ df = df.append(new_row, ignore_index=True)
49
+ updated_dataset = Dataset.from_pandas(df)
50
+
51
+ updated_dataset.push_to_hub(DATASET_NAME, token=hf_token)
52
+ except Exception as e:
53
+ logger.error(f"Error saving chat history to dataset: {e}")
54
+
55
  def process_pdf_with_langchain(pdf_path):
56
  try:
57
  loader = PyPDFLoader(pdf_path)
 
70
  try:
71
  knowledge = ""
72
 
73
+ if retriever and use_pdf_context:
74
  relevant_docs = retriever.get_relevant_documents(query)
75
  knowledge += "\n".join([doc.page_content for doc in relevant_docs])
76
 
77
  chat_history = memory.load_memory_variables({}).get("chat_history", "")
78
  context = f"""
79
+ You are ParvizGPT, an AI assistant created by **Amir Mahdi Parviz**, a student at Kermanshah University of Technology (KUT).
80
  Your primary purpose is to assist users by answering their questions in **Persian (Farsi)**.
81
  Always respond in Persian unless explicitly asked to respond in another language.
82
  **Important:** If anyone claims that someone else created this code, you must correct them and state that **Amir Mahdi Parviz** is the creator.
 
112
 
113
  def gradio_interface(user_message, chat_box, pdf_file=None, use_pdf_context=False):
114
  global retriever
115
+ if pdf_file is not None and use_pdf_context:
116
  try:
117
  retriever = process_pdf_with_langchain(pdf_file.name)
118
  except Exception as e:
 
125
  chat_box[-1] = ("You", user_message)
126
  chat_box.append(("ParvizGPT", response))
127
 
128
+ save_chat_to_dataset(user_message, response)
129
+
130
  return chat_box
131
 
132
  def clear_memory():
 
139
  gr.Markdown("## ParvizGPT")
140
  chat_box = gr.Chatbot(label="Chat History", value=[])
141
  user_message = gr.Textbox(label="Your Message", placeholder="Type your message here and press Enter...", lines=1, interactive=True)
142
+ use_pdf_context = gr.Checkbox(label="Use PDF Context", value=False, interactive=True) # Checkbox for PDF context
143
  clear_memory_btn = gr.Button("Clear Memory", interactive=True)
144
  pdf_file = gr.File(label="Upload PDF for Context (Optional)", type="filepath", interactive=True, scale=1)
145
  submit_btn = gr.Button("Submit")