Spaces:
Sleeping
Sleeping
| 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() |