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("

🔍 Smart Medical Search

") gr.HTML("

Ask questions, get instant answers from your documents

") 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("""

🔍 Your medical documents:

""") 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)]