Milvus-Client / app.py
ruslanmv's picture
Update app.py
3ef4133 verified
import gradio as gr
import requests
from io import BytesIO
import pypdf
import os
# **IMPORTANT:** Set your Hugging Face Space URL here or as an environment variable
space_url = os.environ.get("SPACE_URL", "https://ruslanmv-milvus-server.hf.space") # Your Milvus Server Space URL
rag_url = space_url + "/rag"
insert_url = space_url + "/insert"
# Function to extract text from a PDF file (no changes needed here)
def extract_text_from_pdf(pdf_file):
pdf_stream = BytesIO(pdf_file)
reader = pypdf.PdfReader(pdf_stream)
text = ""
for page in reader.pages:
text += page.extract_text()
return text
# Function to handle PDF upload and insertion into Milvus
def upload_and_index_pdf(pdf_file, server_url):
try:
# Check if pdf_file is a file path (string) or a file object
if isinstance(pdf_file, str):
files = {'file': (pdf_file, open(pdf_file, 'rb'), 'application/pdf')}
else:
files = {'file': (pdf_file.name, pdf_file, 'application/pdf')}
response = requests.post(insert_url, files=files, timeout=600)
response.raise_for_status()
return "PDF uploaded and indexed successfully!"
except requests.exceptions.RequestException as e:
return f"Error during PDF upload: {e}"
except Exception as e:
return f"An unexpected error occurred: {e}"
# Function to perform RAG query
def perform_rag_query(question, server_url):
try:
response = requests.post(rag_url, json={"question": question}, timeout=300)
response.raise_for_status()
results = response.json().get("result", [])
return "\n".join(results)
except requests.exceptions.RequestException as e:
return f"Error during RAG query: {e}"
except Exception as e:
return f"An unexpected error occurred: {e}"
# Example questions
example_questions = [
"What are the enabling technologies for GPT?",
"Explain the potential applications of GPT.",
"What are some emerging challenges with GPT technology?",
"Describe the future directions for GPT research."
]
# Gradio interface setup
with gr.Blocks() as demo:
gr.Markdown(
"""
# Milvus PDF Search Client
Upload a PDF to index it in Milvus, then ask questions about its content.
"""
)
with gr.Row():
with gr.Column():
pdf_input = gr.File(label="Upload PDF", type="filepath") # Changed type to "filepath"
server_url_input = gr.Textbox(
label="Milvus Server URL",
value=space_url,
placeholder="Enter your Milvus Server URL"
)
upload_button = gr.Button("Upload and Index PDF")
with gr.Column():
upload_output = gr.Textbox(label="Upload Status")
with gr.Row():
with gr.Column():
question_input = gr.Textbox(label="Ask a question about the PDF")
query_button = gr.Button("Ask")
# Example questions
gr.Examples(
examples=example_questions,
inputs=question_input,
label="Example Questions",
)
with gr.Column():
answer_output = gr.Textbox(label="Answer")
# Load and index the default PDF on startup (if it exists)
if os.path.exists("transformers.pdf"):
print("transformers.pdf exists")
upload_and_index_pdf("transformers.pdf", space_url)
upload_output.value = "Default PDF (transformers.pdf) indexed on startup!" # Update status
else:
print("transformers.pdf does not exist")
upload_button.click(
fn=upload_and_index_pdf,
inputs=[pdf_input, server_url_input],
outputs=upload_output,
)
query_button.click(
fn=perform_rag_query,
inputs=[question_input, server_url_input],
outputs=answer_output,
)
demo.launch()