hyde_rag / app.py
Vivek Vaddina
♻️ Refactor to improve model performance
92f1a38 unverified
raw
history blame
4.05 kB
import sys
import string
import gradio as gr
from src.main import ask
from src.utils import empty_cache
from src.config import log
def ask_wrapper(
pdfs,
query,
model_combo_key,
fast_extract,
n_variants,
top_k_per_variant,
top_k_retrieve,
temperature,
):
resp = ask.callback(
pdfs,
query,
model_combo_key,
fast_extract,
n_variants,
top_k_per_variant,
top_k_retrieve,
temperature,
)
return f"## Final Answer:\n\n{resp}\n"
def reset(pdfs):
"""
Reset text input and empty cache
"""
log.warning("emptying cache")
empty_cache()
return ""
# Enable the button only when both fields are nonempty
def _enable_submit_if_filled(pdfs, query):
status = bool(pdfs) and bool(len(query.strip(string.punctuation + " ")) > 10)
return gr.update(interactive=status)
def disable_button():
return gr.update(interactive=False, value="Processing...")
def enable_button():
return gr.update(interactive=True, value="Submit")
with gr.Blocks(title="RAG with HYDE") as demo:
gr.Markdown("# RAG with HYDE")
with gr.Row():
pdf_input = gr.File(
label="upload PDF(s)",
file_types=[".pdf"],
file_count="multiple",
)
query = gr.Textbox(label="Question (Enter at least 10 valid characters)")
with gr.Accordion("Advanced Settings", open=False):
gr.Markdown(
"*These parameters have sensible defaults but can be customized if needed*"
)
with gr.Row():
_default_combo = "linux" if sys.platform == "linux" else "mac"
model_combo_key = gr.Dropdown(
label="Model Combo Key",
choices=[_default_combo, "HF-mid"],
value=_default_combo,
)
fast_extract = gr.Checkbox(
value=False, label="Use PyMuPDF to extract content in markdown"
)
n_variants = gr.Number(
value=3, minimum=1, maximum=5, label="no. of query variants"
)
with gr.Row():
top_k_per_variant = gr.Number(
value=5,
minimum=2,
maximum=10,
label="top `k` hits per query variant for RRF",
)
top_k_retrieve = gr.Number(
value=3,
minimum=1,
maximum=5,
label="top `k` chunks to retrieve after RRF",
)
temperature = gr.Slider(
value=0.7, minimum=0.1, maximum=1.0, step=0.1, label="temperature"
)
gr.Markdown(
"### *Please be patient after hitting the submit button* esp. for the first question after uploading new document(s)"
)
submit_btn = gr.Button("Submit", variant="primary", interactive=False)
answer = gr.Markdown(label="## Answer")
pdf_input.change(
_enable_submit_if_filled, [pdf_input, query], submit_btn, queue=False
)
query.change(_enable_submit_if_filled, [pdf_input, query], submit_btn, queue=False)
submit_btn.click(fn=disable_button, outputs=submit_btn).then(
fn=ask_wrapper,
inputs=[
pdf_input,
query,
model_combo_key,
fast_extract,
n_variants,
top_k_per_variant,
top_k_retrieve,
temperature,
],
outputs=answer,
).then(fn=enable_button, outputs=submit_btn)
query.submit(fn=disable_button, outputs=submit_btn).then(
fn=ask_wrapper,
inputs=[
pdf_input,
query,
model_combo_key,
fast_extract,
n_variants,
top_k_per_variant,
top_k_retrieve,
temperature,
],
outputs=answer,
).then(fn=enable_button, outputs=submit_btn)
pdf_input.change(reset, pdf_input, query)
demo.load(reset, pdf_input, query)
if __name__ == "__main__":
demo.launch()