MedicalSearchModel / interface.py
EmmaScharfmann
push to huggingface space
c33bcd6
import gradio as gr
from similarity import compute_similarity
from custom_css import CUSTOM_CSS_FOR_INTERFACE
from default_values import DEFAULT_DOCUMENTS, DEFAULT_QUESTION
def build_interface():
"""Build and return the Gradio interface"""
with gr.Blocks(css=CUSTOM_CSS_FOR_INTERFACE, theme=gr.themes.Soft()) as demo:
with gr.Column(elem_id="title"):
gr.HTML("<h1>🔍 Smart Medical Search</h1>")
gr.HTML("<h2> Ask questions, get instant answers from your documents</h2>")
with gr.Row():
with gr.Column(scale=1):
with gr.Group(elem_classes="input-section"):
reference_input = gr.Textbox(
label="📌 Enter your question about your medical documents:",
placeholder="Enter your question here...",
value=DEFAULT_QUESTION,
lines=3,
max_lines=5
)
gr.HTML("""<h3> 🔍 Your medical documents:</h3>""")
comparison_container = gr.Column()
with comparison_container:
comparison_inputs = []
for i in range(15):
value = DEFAULT_DOCUMENTS[i] if i < len(DEFAULT_DOCUMENTS) else ""
comparison_box = gr.Textbox(
label=f"Sentence {i + 1}",
placeholder="Enter a document to search...",
value=value,
lines=2,
elem_classes="comparison-box",
visible=True if i < 5 else False
)
comparison_inputs.append(comparison_box)
add_btn = gr.Button("➕ Add another document", elem_classes="add-btn", size="md")
visible_count = gr.State(5)
add_btn.click(
fn=_add_comparison_box,
inputs=[visible_count],
outputs=[visible_count] + comparison_inputs
)
submit_btn = gr.Button("Search for the answer in your documents", variant="primary", elem_id="calc-btn", size="lg")
with gr.Column(scale=1):
output = gr.HTML(label="Similarity Scores")
submit_btn.click(
fn=compute_similarity,
inputs=[reference_input] + comparison_inputs,
outputs=output
)
return demo
def _add_comparison_box(count: int) -> list[int]:
"""Check whether new boxes can be added."""
if count < 15:
new_count = count + 1
visibility = [gr.update(visible=True) if i < new_count else gr.update(visible=False)
for i in range(15)]
return [new_count] + visibility
else:
return [count] + [gr.update() for _ in range(15)]