|
import gradio as gr |
|
import random |
|
from datasets import load_dataset |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
truth_data = load_dataset("commonsense-index-dev/commonsense-candidates", "iter6-0520-error", split="train") |
|
|
|
qa_dataset = {} |
|
for item in truth_data: |
|
qa_dataset[item["id"]] = { |
|
"question": item["task"], |
|
"choices": item["choices"], |
|
"answer": item["answer"] |
|
} |
|
|
|
def get_random_question(): |
|
question_id = random.choice(list(qa_dataset.keys())) |
|
question_data = qa_dataset[question_id] |
|
return question_id, question_data["question"], question_data["choices"] |
|
|
|
def get_question_by_id(question_id): |
|
if question_id in qa_dataset: |
|
question_data = qa_dataset[question_id] |
|
return question_id, question_data["question"], question_data["choices"] |
|
else: |
|
return None, "Invalid question ID", [] |
|
|
|
def check_answer(question_id, choice): |
|
correct_answer = qa_dataset[question_id]["answer"] |
|
return "Correct!" if choice == correct_answer else f"Incorrect. The correct answer is {correct_answer}." |
|
|
|
def load_question(question_id=None): |
|
if question_id: |
|
question_id, question, choices = get_question_by_id(question_id) |
|
else: |
|
question_id, question, choices = get_random_question() |
|
|
|
question = f"## {question}" |
|
choices_markdown = "\n".join(choices) |
|
return question_id, question, choices_markdown, gr.update(visible=True), gr.update(value="", visible=True) |
|
|
|
def show_buttons(choices_markdown): |
|
choices = choices_markdown.split("\n") |
|
visibility = [gr.update(visible=False)] * 10 |
|
for i in range(len(choices)): |
|
visibility[i] = gr.update(visible=True, value=choices[i]) |
|
return visibility |
|
|
|
with gr.Blocks() as app: |
|
gr.Markdown("# Multiple Choice QA Dataset Viewer") |
|
|
|
question_id_input = gr.Textbox(label="Enter Question ID", placeholder="leave empty for random sampling") |
|
random_button = gr.Button("Retrieve or Random Sample") |
|
question_display = gr.Markdown(visible=True) |
|
choices_markdown = gr.Markdown(visible=False) |
|
choice_buttons = [gr.Button(visible=False) for _ in range(10)] |
|
result_display = gr.Markdown(visible=True) |
|
|
|
question_id = gr.State() |
|
|
|
question_id_input.submit(fn=load_question, inputs=question_id_input, outputs=[question_id, question_display, choices_markdown, result_display]) |
|
random_button.click(fn=load_question, outputs=[question_id, question_display, choices_markdown, result_display]) |
|
choices_markdown.change(fn=show_buttons, inputs=choices_markdown, outputs=choice_buttons) |
|
|
|
for i, button in enumerate(choice_buttons): |
|
button.click(fn=check_answer, inputs=[question_id, button], outputs=result_display) |
|
|
|
app.launch() |