Sarath0x8f commited on
Commit
c078cac
·
verified ·
1 Parent(s): 3d8afc7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -41
app.py CHANGED
@@ -6,7 +6,7 @@ from llama_index.llms.huggingface_api import HuggingFaceInferenceAPI
6
  import os
7
  from dotenv import load_dotenv
8
  import gradio as gr
9
- import markdowm as md
10
  import base64
11
 
12
  # Load environment variables
@@ -26,36 +26,21 @@ embed_models = [
26
  "BAAI/bge-large-en"
27
  ]
28
 
29
- # Global variables
30
  selected_llm_model_name = llm_models[0]
31
  selected_embed_model_name = embed_models[0]
32
  vector_index = None
33
 
34
- # Initialize the parser
35
  parser = LlamaParse(api_key=os.getenv("LLAMA_INDEX_API"), result_type='markdown')
36
- file_extractor = {
37
- '.pdf': parser,
38
- '.docx': parser,
39
- '.doc': parser,
40
- '.txt': parser,
41
- '.csv': parser,
42
- '.xlsx': parser,
43
- '.pptx': parser,
44
- '.html': parser,
45
- '.jpg': parser,
46
- '.jpeg': parser,
47
- '.png': parser,
48
- '.webp': parser,
49
- '.svg': parser,
50
- }
51
 
52
  def load_files(file_path: str, embed_model_name: str):
 
53
  try:
54
- global vector_index
55
  document = SimpleDirectoryReader(input_files=[file_path], file_extractor=file_extractor).load_data()
56
  embed_model = HuggingFaceEmbedding(model_name=embed_model_name)
57
  vector_index = VectorStoreIndex.from_documents(document, embed_model=embed_model)
58
- print(f"Parsing done for {file_path}")
59
  filename = os.path.basename(file_path)
60
  return f"Ready to give response on {filename}"
61
  except Exception as e:
@@ -80,31 +65,46 @@ def respond(message, history):
80
  )
81
  if vector_index is not None:
82
  query_engine = vector_index.as_query_engine(llm=llm)
83
- bot_message = query_engine.query(message)
84
- print(f"\n{datetime.now()}:{selected_llm_model_name}:: {message} --> {str(bot_message)}\n")
85
- return f"{selected_llm_model_name}:\n{str(bot_message)}"
 
86
  else:
87
- return "Please upload a file."
88
  except Exception as e:
89
- return f"An error occurred: {e}"
90
 
91
  def encode_image(image_path):
92
  with open(image_path, "rb") as image_file:
93
  return base64.b64encode(image_file.read()).decode('utf-8')
94
 
 
95
  github_logo_encoded = encode_image("Images/github-logo.png")
96
  linkedin_logo_encoded = encode_image("Images/linkedin-logo.png")
97
  website_logo_encoded = encode_image("Images/ai-logo.png")
98
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  with gr.Blocks(theme=gr.themes.Soft(font=[gr.themes.GoogleFont("Roboto Mono")]), css='footer {visibility: hidden}') as demo:
100
  gr.Markdown("# DocBot")
101
  with gr.Tabs():
102
  with gr.TabItem("Intro"):
103
- gr.Markdown(md.description)
104
 
105
  with gr.TabItem("DocBot"):
106
  with gr.Accordion("=== IMPORTANT: READ ME FIRST ===", open=False):
107
- guid = gr.Markdown(md.guide)
 
108
  with gr.Row():
109
  with gr.Column(scale=1):
110
  file_input = gr.File(file_count="single", type='filepath', label="Step-1: Upload document")
@@ -114,20 +114,24 @@ with gr.Blocks(theme=gr.themes.Soft(font=[gr.themes.GoogleFont("Roboto Mono")]),
114
  clear = gr.ClearButton()
115
  output = gr.Text(label='Vector Index')
116
  llm_model_dropdown = gr.Dropdown(llm_models, label="Step-3: Select LLM", interactive=True)
117
- model_selected_output = gr.Text(label="Model selected") # FIXED OUTPUT COMPONENT
 
118
  with gr.Column(scale=3):
119
- gr.ChatInterface(
120
- fn=respond,
121
- chatbot=gr.Chatbot(height=500),
122
- theme="soft",
123
- textbox=gr.Textbox(placeholder="Step-4: Ask me questions on the uploaded document!", container=False)
124
- )
125
- gr.HTML(md.footer.format(github_logo_encoded, linkedin_logo_encoded, website_logo_encoded))
126
-
127
- # Event bindings
128
- llm_model_dropdown.change(fn=set_llm_model, inputs=llm_model_dropdown, outputs=model_selected_output)
129
- btn.click(fn=load_files, inputs=[file_input, embed_model_dropdown], outputs=output)
130
- clear.click(lambda: [None] * 3, outputs=[file_input, embed_model_dropdown, output])
 
 
 
131
 
132
  if __name__ == "__main__":
133
- demo.launch(share=True)
 
6
  import os
7
  from dotenv import load_dotenv
8
  import gradio as gr
9
+ import markdown as md
10
  import base64
11
 
12
  # Load environment variables
 
26
  "BAAI/bge-large-en"
27
  ]
28
 
29
+ # Global state
30
  selected_llm_model_name = llm_models[0]
31
  selected_embed_model_name = embed_models[0]
32
  vector_index = None
33
 
34
+ # Parser setup
35
  parser = LlamaParse(api_key=os.getenv("LLAMA_INDEX_API"), result_type='markdown')
36
+ file_extractor = {ext: parser for ext in ['.pdf', '.docx', '.doc', '.txt', '.csv', '.xlsx', '.pptx', '.html', '.jpg', '.jpeg', '.png', '.webp', '.svg']}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
 
38
  def load_files(file_path: str, embed_model_name: str):
39
+ global vector_index
40
  try:
 
41
  document = SimpleDirectoryReader(input_files=[file_path], file_extractor=file_extractor).load_data()
42
  embed_model = HuggingFaceEmbedding(model_name=embed_model_name)
43
  vector_index = VectorStoreIndex.from_documents(document, embed_model=embed_model)
 
44
  filename = os.path.basename(file_path)
45
  return f"Ready to give response on {filename}"
46
  except Exception as e:
 
65
  )
66
  if vector_index is not None:
67
  query_engine = vector_index.as_query_engine(llm=llm)
68
+ bot_message = str(query_engine.query(message))
69
+ history.append((message, bot_message))
70
+ print(f"\n{datetime.now()}:{selected_llm_model_name}:: {message} --> {bot_message}\n")
71
+ return bot_message, history
72
  else:
73
+ return "Please upload a file first.", history
74
  except Exception as e:
75
+ return f"An error occurred: {e}", history
76
 
77
  def encode_image(image_path):
78
  with open(image_path, "rb") as image_file:
79
  return base64.b64encode(image_file.read()).decode('utf-8')
80
 
81
+ # Encoded logos
82
  github_logo_encoded = encode_image("Images/github-logo.png")
83
  linkedin_logo_encoded = encode_image("Images/linkedin-logo.png")
84
  website_logo_encoded = encode_image("Images/ai-logo.png")
85
 
86
+ # Markdown placeholders
87
+ description = "### Welcome to **DocBot** - Ask Questions Based on Your Uploaded Documents"
88
+ guide = "> Step 1: Upload\n> Step 2: Select Embedding\n> Step 3: Select LLM\n> Step 4: Ask Questions"
89
+ footer = """
90
+ <center>
91
+ <a href="https://github.com" target="_blank"><img src="data:image/png;base64,{}" height="30"/></a>&nbsp;
92
+ <a href="https://linkedin.com" target="_blank"><img src="data:image/png;base64,{}" height="30"/></a>&nbsp;
93
+ <a href="https://yourwebsite.com" target="_blank"><img src="data:image/png;base64,{}" height="30"/></a>
94
+ </center>
95
+ """.format(github_logo_encoded, linkedin_logo_encoded, website_logo_encoded)
96
+
97
+ # Gradio UI
98
  with gr.Blocks(theme=gr.themes.Soft(font=[gr.themes.GoogleFont("Roboto Mono")]), css='footer {visibility: hidden}') as demo:
99
  gr.Markdown("# DocBot")
100
  with gr.Tabs():
101
  with gr.TabItem("Intro"):
102
+ gr.Markdown(description)
103
 
104
  with gr.TabItem("DocBot"):
105
  with gr.Accordion("=== IMPORTANT: READ ME FIRST ===", open=False):
106
+ gr.Markdown(guide)
107
+
108
  with gr.Row():
109
  with gr.Column(scale=1):
110
  file_input = gr.File(file_count="single", type='filepath', label="Step-1: Upload document")
 
114
  clear = gr.ClearButton()
115
  output = gr.Text(label='Vector Index')
116
  llm_model_dropdown = gr.Dropdown(llm_models, label="Step-3: Select LLM", interactive=True)
117
+ model_selected_output = gr.Text(label="Model selected")
118
+
119
  with gr.Column(scale=3):
120
+ chatbot_ui = gr.Chatbot(height=500)
121
+ message = gr.Textbox(placeholder="Step-4: Ask me questions on the uploaded document!", container=False)
122
+ submit_btn = gr.Button("Send")
123
+
124
+ # Bind logic
125
+ llm_model_dropdown.change(fn=set_llm_model, inputs=llm_model_dropdown, outputs=model_selected_output)
126
+ btn.click(fn=load_files, inputs=[file_input, embed_model_dropdown], outputs=output)
127
+ clear.click(lambda: [None] * 3, outputs=[file_input, embed_model_dropdown, output])
128
+
129
+ # Chat logic
130
+ state = gr.State([])
131
+ submit_btn.click(fn=respond, inputs=[message, state], outputs=[chatbot_ui, state])
132
+ message.submit(fn=respond, inputs=[message, state], outputs=[chatbot_ui, state])
133
+
134
+ gr.HTML(footer)
135
 
136
  if __name__ == "__main__":
137
+ demo.launch(share=True)