RAG / app.py
oluinioluwa814's picture
Update app.py
b434dd2 verified
import gradio as gr
from rag_pipeline import RAGPipeline
from generator import QuestionGenerator
from utils import load_text
from pathlib import Path
# Initialize pipeline and generator
rag = RAGPipeline(db_dir="./chroma_store")
gen = QuestionGenerator()
# Ensure data folder exists
DATA_DIR = Path("./data")
DATA_DIR.mkdir(exist_ok=True)
# Load a sample document at startup (optional)
sample_doc_path = DATA_DIR / "sample_doc.txt"
if sample_doc_path.exists():
text = load_text(sample_doc_path)
rag.add_document(text, doc_id="sample_doc")
# Functions for Gradio interface
def upload_file(file):
text = load_text(file.name)
rag.add_document(text, doc_id=file.name)
return f"Document '{file.name}' added successfully."
def ask_question(query, top_k=3):
retrieved_docs = rag.retrieve(query, top_k=top_k)
if not retrieved_docs:
context = "No relevant documents found."
else:
context = "\n".join(retrieved_docs)
answer = gen.generate(context, query)
return answer
# Gradio UI
with gr.Blocks(title="RAG Question Generator") as demo:
gr.Markdown("## Upload Documents")
with gr.Row():
file_upload = gr.File(label="Upload TXT / PDF / DOCX", file_types=[".txt", ".pdf", ".docx"])
upload_btn = gr.Button("Upload")
upload_status = gr.Textbox(label="Status", interactive=False)
upload_btn.click(fn=upload_file, inputs=file_upload, outputs=upload_status)
gr.Markdown("## Ask Questions")
query_input = gr.Textbox(label="Your Question")
top_k_slider = gr.Slider(1, 10, value=3, step=1, label="Number of retrieved chunks (top_k)")
ask_btn = gr.Button("Ask")
answer_output = gr.Textbox(label="Generated Answer", interactive=False)
ask_btn.click(fn=ask_question, inputs=[query_input, top_k_slider], outputs=answer_output)
demo.launch(share=True)