asif-coder commited on
Commit
3013d37
·
verified ·
1 Parent(s): 993a1d0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -15
app.py CHANGED
@@ -2,18 +2,16 @@ import os
2
  import gradio as gr
3
  from groq import Groq
4
 
5
- from langchain_text_splitters import RecursiveCharacterTextSplitter
6
  from langchain_community.document_loaders import PyPDFLoader
7
  from langchain_community.vectorstores import FAISS
8
  from langchain_community.embeddings import HuggingFaceEmbeddings
9
 
10
 
11
  # ------------------------------
12
- # ENVIRONMENT
13
  # ------------------------------
14
 
15
- # GROQ_API_KEY = os.environ.get("GROQ_API_KEY")
16
-
17
  client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
18
 
19
  vector_db = None
@@ -29,7 +27,7 @@ embedding_model = HuggingFaceEmbeddings(
29
 
30
 
31
  # ------------------------------
32
- # DOCUMENT PROCESSING
33
  # ------------------------------
34
 
35
  def build_knowledge_base(files):
@@ -37,17 +35,20 @@ def build_knowledge_base(files):
37
  global vector_db
38
 
39
  if not files:
40
- return "Upload at least one PDF."
41
 
42
  all_docs = []
43
 
44
  for file in files:
45
 
46
- loader = PyPDFLoader(file.name)
 
 
 
47
  pages = loader.load()
48
 
49
  for page in pages:
50
- page.metadata["source"] = os.path.basename(file.name)
51
  page.metadata["page"] = page.metadata.get("page", 0)
52
 
53
  all_docs.extend(pages)
@@ -64,7 +65,7 @@ def build_knowledge_base(files):
64
  embedding_model
65
  )
66
 
67
- return f"Knowledge base ready with {len(chunks)} chunks."
68
 
69
 
70
  # ------------------------------
@@ -97,7 +98,7 @@ def ask_question(question):
97
  global vector_db
98
 
99
  if vector_db is None:
100
- yield "Please upload documents first."
101
  return
102
 
103
  docs = vector_db.similarity_search(question, k=5)
@@ -134,6 +135,7 @@ Answer:
134
  if chunk.choices[0].delta.content:
135
 
136
  token = chunk.choices[0].delta.content
 
137
  response += token
138
 
139
  yield response
@@ -147,16 +149,14 @@ Answer:
147
 
148
 
149
  # ------------------------------
150
- # PROFESSIONAL UI
151
  # ------------------------------
152
 
153
  with gr.Blocks(theme=gr.themes.Soft()) as app:
154
 
155
  gr.Markdown("# 📚 AI Knowledge Base Assistant")
156
 
157
- gr.Markdown(
158
- "Upload documents and ask questions about them."
159
- )
160
 
161
  with gr.Row():
162
 
@@ -178,7 +178,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as app:
178
  gr.Markdown("## Ask Questions")
179
 
180
  question = gr.Textbox(
181
- placeholder="Ask a question about the documents..."
182
  )
183
 
184
  ask_btn = gr.Button("Ask AI")
 
2
  import gradio as gr
3
  from groq import Groq
4
 
5
+ from langchain.text_splitter import RecursiveCharacterTextSplitter
6
  from langchain_community.document_loaders import PyPDFLoader
7
  from langchain_community.vectorstores import FAISS
8
  from langchain_community.embeddings import HuggingFaceEmbeddings
9
 
10
 
11
  # ------------------------------
12
+ # API KEY
13
  # ------------------------------
14
 
 
 
15
  client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
16
 
17
  vector_db = None
 
27
 
28
 
29
  # ------------------------------
30
+ # BUILD KNOWLEDGE BASE
31
  # ------------------------------
32
 
33
  def build_knowledge_base(files):
 
35
  global vector_db
36
 
37
  if not files:
38
+ return "Please upload at least one PDF."
39
 
40
  all_docs = []
41
 
42
  for file in files:
43
 
44
+ file_path = file.name
45
+
46
+ loader = PyPDFLoader(file_path)
47
+
48
  pages = loader.load()
49
 
50
  for page in pages:
51
+ page.metadata["source"] = os.path.basename(file_path)
52
  page.metadata["page"] = page.metadata.get("page", 0)
53
 
54
  all_docs.extend(pages)
 
65
  embedding_model
66
  )
67
 
68
+ return f"Knowledge base created with {len(chunks)} chunks."
69
 
70
 
71
  # ------------------------------
 
98
  global vector_db
99
 
100
  if vector_db is None:
101
+ yield "Please upload and build the knowledge base first."
102
  return
103
 
104
  docs = vector_db.similarity_search(question, k=5)
 
135
  if chunk.choices[0].delta.content:
136
 
137
  token = chunk.choices[0].delta.content
138
+
139
  response += token
140
 
141
  yield response
 
149
 
150
 
151
  # ------------------------------
152
+ # UI
153
  # ------------------------------
154
 
155
  with gr.Blocks(theme=gr.themes.Soft()) as app:
156
 
157
  gr.Markdown("# 📚 AI Knowledge Base Assistant")
158
 
159
+ gr.Markdown("Upload PDFs and ask questions about them.")
 
 
160
 
161
  with gr.Row():
162
 
 
178
  gr.Markdown("## Ask Questions")
179
 
180
  question = gr.Textbox(
181
+ placeholder="Ask something about the documents..."
182
  )
183
 
184
  ask_btn = gr.Button("Ask AI")