Spaces:
Running
Running
import gradio as gr | |
from utils import ( | |
authenticate, | |
split_documents, | |
build_vectorstore, | |
retrieve_context, | |
retrieve_context_approx, | |
build_prompt, | |
ask_gemini, | |
load_documents_gradio, # Import the new function | |
) | |
client = authenticate() | |
store = {"value": None} | |
def upload_and_process(files): | |
if files is None: | |
return "Please upload a file!" | |
raw_docs = load_documents_gradio(files) | |
chunks = split_documents(raw_docs) | |
store["value"] = build_vectorstore(chunks) | |
return "Document processed successfully! You can now ask questions." | |
def handle_question(query): | |
if store["value"] is None: | |
return "Please upload and process a document first." | |
if store["value"]["chunks"] <= 50: | |
top_chunks = retrieve_context(query, store["value"]) | |
else: | |
top_chunks = retrieve_context_approx(query, store["value"]) | |
prompt = build_prompt(top_chunks, query) | |
answer = ask_gemini(prompt, client) | |
return f"### My Insights :\n\n{answer.strip()}" | |
with gr.Blocks() as demo: | |
gr.Markdown("## Ask Questions from Your Uploaded Documents") | |
file_input = gr.File(label="Upload Your File", file_types=['.pdf', '.txt', '.docx', '.csv', '.json', '.pptx', '.xml', '.xlsx'], file_count='multiple') | |
process_btn = gr.Button("Process Document") | |
status = gr.Textbox(label="Processing Status") | |
question = gr.Textbox(label="Ask a Question") | |
answer = gr.Markdown() | |
process_btn.click(upload_and_process, inputs=file_input, outputs=status) | |
question.submit(handle_question, inputs=question, outputs=answer) | |
demo.launch(share=True) # Or demo.deploy(hf_space="your-username/your-space-name") |