TestGen / app.py
vladyslav
Example version of testing
074b318
raw
history blame
3.98 kB
import json
import os
import gradio as gr
MODELS = {
"GPT-4o": "gpt-4o",
"Gemini 1.5 Pro": "gemini-1.5-pro",
"Claude 3.5 Sonnet": "claude-3-5-sonnet-20241022"
}
MODELS_PATH = {
"GPT-4o": "gpt_4o",
"Gemini 1.5 Pro": "gemini_1_5_pro",
"Claude 3.5 Sonnet": "claude_3_5_sonnet"
}
BOOKS = {
"Іван Нечуйлевицький - Кайдашева Сім'я": "nechuy-levytskyy-ivan-semenovych-kaydasheva-simia.json",
}
questions_data = []
current_question_index = 0
answers_log = [] # Log for saving answers
def load_questions(model, book):
global questions_data, current_question_index
current_question_index = 0
answers_log.clear()
if not model or not book:
return "Будь ласка, оберіть модель і книгу.", []
model_path = MODELS_PATH[model]
book_filename = BOOKS[book]
file_path = os.path.join("questions", model_path, book_filename)
if not os.path.exists(file_path):
return f"Файл за шляхом {file_path} не знайдено.", []
with open(file_path, "r", encoding="utf-8") as file:
questions_data = json.load(file)
if questions_data:
first_question = questions_data[current_question_index]
question_text = f"**Питання:** {first_question['question']}"
answers = [answer['answer'] for answer in first_question['answers']]
return question_text, answers
else:
return "У файлі немає питань.", []
def get_next_question(selected_answer):
global current_question_index, answers_log
# Writing answer in log
answers_log.append({
"selected": selected_answer,
"isCorrect": any(answer['answer'] == selected_answer and answer['isCorrect'] for answer in questions_data[current_question_index]['answers'])
})
# Move to the next question
current_question_index += 1
if current_question_index < len(questions_data):
next_question = questions_data[current_question_index]
question_text = f"**Питання:** {next_question['question']}"
answers = [answer['answer'] for answer in next_question['answers']]
return question_text, gr.update(choices=answers, interactive=True), gr.update(visible=True)
else:
# All questions are completed — summarizing
correct_answers_count = sum(1 for answer in answers_log if answer['isCorrect'])
total_questions = len(questions_data)
summary = f"# Усі питання пройдено.\n\n**Ви відповіли правильно на {correct_answers_count} з {total_questions} питань.**"
return summary, gr.update(visible=False), gr.update(visible=False)
with gr.Blocks() as demo:
with gr.Column():
gr.Markdown("# Оберіть модель та книгу, щоб завантажити питання")
model_radio = gr.Radio(list(MODELS.keys()), label="Оберіть модель")
book_radio = gr.Radio(list(BOOKS.keys()), label="Оберіть книгу")
load_button = gr.Button("Завантажити питання")
question_output = gr.Markdown(label="Питання")
answer_radio = gr.Radio([], label="Варіанти відповіді", interactive=True)
next_button = gr.Button("Наступне питання", visible=False)
def update_question(model, book):
question, answers = load_questions(model, book)
return question, gr.update(choices=answers, interactive=True), gr.update(visible=True)
load_button.click(
update_question,
inputs=[model_radio, book_radio],
outputs=[question_output, answer_radio, next_button]
)
next_button.click(
get_next_question,
inputs=[answer_radio],
outputs=[question_output, answer_radio, next_button]
)
if __name__ == "__main__":
demo.launch()