|
|
|
|
|
import gradio as gr |
|
|
import logging |
|
|
|
|
|
from app.ui.common import log_dropdown_choice |
|
|
from app.ui.diagnoser_tab import build_diagnoser_tab |
|
|
from app.ui.distractors_tab import build_distractors_tab |
|
|
from app.ui.learning_objectives_tab import build_learning_objectives_tab |
|
|
from app.ui.prompts_tab import build_prompts_tab |
|
|
from app.ui.test_set_tab import build_test_set_tab |
|
|
from app.ui.write_fluster_tab import build_write_fluster_tab |
|
|
from chains.diagnoser.runner import run_diagnoser |
|
|
from chains.distractors.runner import run_distractors |
|
|
from chains.exercises.run_fluster_with_diagnosis import run_fluster_with_diagnosis |
|
|
from chains.exercises.runner_without import run_fluster_no_diagnosis |
|
|
from chains.learning_objectives_generator.runner import run_learning_objectives_generator |
|
|
from utils.auth import login as auth_login |
|
|
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with gr.Blocks() as interface: |
|
|
|
|
|
with gr.Column(visible=True, elem_id="login_page") as login_container: |
|
|
gr.Markdown("## 🔒 Please Login") |
|
|
password_input = gr.Textbox( |
|
|
label="Enter Password", |
|
|
type="password", |
|
|
placeholder="hunter2", |
|
|
container=True |
|
|
) |
|
|
login_button = gr.Button("Login") |
|
|
login_error = gr.Markdown(value="") |
|
|
|
|
|
|
|
|
with gr.Column(visible=False, elem_id="main_app") as app_container: |
|
|
|
|
|
|
|
|
|
|
|
with gr.Row(): |
|
|
with gr.Column(scale=3): |
|
|
gr.Markdown("") |
|
|
with gr.Column(scale=5): |
|
|
standardized_format_display = gr.Textbox( |
|
|
info="", |
|
|
label="", |
|
|
show_label=False, |
|
|
show_copy_button=True, |
|
|
placeholder="will show most recent reformatting result", |
|
|
lines=1, |
|
|
max_lines=10, |
|
|
interactive=False, |
|
|
container=False |
|
|
) |
|
|
|
|
|
gr.Markdown("## Pick the tab for your task of choice") |
|
|
|
|
|
with gr.Tabs(): |
|
|
|
|
|
(model_choice_diagnose, |
|
|
exercise_format_diagnose, |
|
|
sampling_count_diagnose, |
|
|
diagnoser_input, |
|
|
diagnoser_button, |
|
|
diagnoser_responses |
|
|
) = build_diagnoser_tab() |
|
|
|
|
|
|
|
|
(model_choice_distractors_1, |
|
|
model_choice_distractors_2, |
|
|
model_choice_distractors_3, |
|
|
exercise_format_distractors, |
|
|
sampling_count_distractors, |
|
|
distractors_input, |
|
|
distractors_button, |
|
|
distractors_responses, |
|
|
intermediate_distractors_specification, |
|
|
final_distractors_specification, |
|
|
) = build_distractors_tab() |
|
|
|
|
|
|
|
|
|
|
|
(model_choice_LO_1, |
|
|
model_choice_LO_2, |
|
|
text_format, |
|
|
studytext_input, |
|
|
learning_objectives_button, |
|
|
[LO_box_0, LO_box_1, LO_box_2, LO_box_3] |
|
|
) = build_learning_objectives_tab() |
|
|
|
|
|
|
|
|
(model_choice_fluster_1, |
|
|
model_choice_fluster_2, |
|
|
include_diagnosis, |
|
|
exercises_input, |
|
|
write_fluster_button, |
|
|
[fluster_box_0, fluster_box_1, fluster_box_2, fluster_box_3], |
|
|
diagnosis_box_1, |
|
|
diagnosis_box_3, |
|
|
fixes_box_1, |
|
|
fixes_box_3 |
|
|
) = build_write_fluster_tab() |
|
|
|
|
|
|
|
|
with gr.Tab("", visible=True): |
|
|
pass |
|
|
with gr.Tab("", visible=True): |
|
|
pass |
|
|
with gr.Tab("", visible=True): |
|
|
pass |
|
|
with gr.Tab("", visible=True): |
|
|
pass |
|
|
with gr.Tab("", visible=True): |
|
|
pass |
|
|
with gr.Tab("", visible=True): |
|
|
pass |
|
|
|
|
|
|
|
|
(pipeline_choice, |
|
|
search_field_prompts, |
|
|
) = build_prompts_tab() |
|
|
|
|
|
|
|
|
(subset_choice, |
|
|
search_field_test_set, |
|
|
) = build_test_set_tab() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
login_button.click( |
|
|
fn=auth_login, |
|
|
inputs=[password_input], |
|
|
outputs=[login_container, app_container, login_error] |
|
|
) |
|
|
|
|
|
diagnoser_button.click( |
|
|
fn=run_diagnoser, |
|
|
inputs=[diagnoser_input, model_choice_diagnose, exercise_format_diagnose, sampling_count_diagnose], |
|
|
outputs=diagnoser_responses + [standardized_format_display], |
|
|
) |
|
|
|
|
|
distractors_button.click( |
|
|
fn=run_distractors, |
|
|
inputs=[ |
|
|
distractors_input, |
|
|
model_choice_distractors_1, |
|
|
model_choice_distractors_2, |
|
|
model_choice_distractors_3, |
|
|
exercise_format_distractors, |
|
|
sampling_count_distractors, |
|
|
intermediate_distractors_specification, |
|
|
final_distractors_specification, |
|
|
], |
|
|
outputs=distractors_responses + [standardized_format_display], |
|
|
) |
|
|
|
|
|
learning_objectives_button.click( |
|
|
fn=run_learning_objectives_generator, |
|
|
inputs=[studytext_input, model_choice_LO_1, model_choice_LO_2, text_format], |
|
|
outputs=[LO_box_0, LO_box_1, LO_box_2, LO_box_3, standardized_format_display], |
|
|
queue=True, |
|
|
api_name=None, |
|
|
|
|
|
) |
|
|
|
|
|
async def fluster_pipeline_dispatch( |
|
|
user_input: str, |
|
|
model_1: str, |
|
|
model_2: str, |
|
|
include_diagnosis: bool |
|
|
): |
|
|
if not include_diagnosis: |
|
|
generator = run_fluster_no_diagnosis(user_input, model_1, model_2) |
|
|
final_results = ["", "", "", ""] |
|
|
async for results in generator: |
|
|
final_results = results |
|
|
return (*final_results, "", "", "", "") |
|
|
else: |
|
|
return await run_fluster_with_diagnosis(user_input, model_1, model_2) |
|
|
|
|
|
|
|
|
write_fluster_button.click( |
|
|
fn=fluster_pipeline_dispatch, |
|
|
inputs=[ |
|
|
exercises_input, |
|
|
model_choice_fluster_1, |
|
|
model_choice_fluster_2, |
|
|
include_diagnosis |
|
|
], |
|
|
outputs=[ |
|
|
fluster_box_0, |
|
|
fluster_box_1, |
|
|
fluster_box_2, |
|
|
fluster_box_3, |
|
|
diagnosis_box_1, |
|
|
diagnosis_box_3, |
|
|
fixes_box_1, |
|
|
fixes_box_3 |
|
|
], |
|
|
queue=True |
|
|
) |
|
|
|
|
|
pipeline_choice.change(fn=log_dropdown_choice, inputs=pipeline_choice, outputs=[]) |
|
|
subset_choice.change(fn=log_dropdown_choice, inputs=subset_choice, outputs=[]) |
|
|
|
|
|
|
|
|
interface.launch() |
|
|
|