QuizBot / app.py
Sarathrsk03's picture
Update app.py
600304b verified
import gradio as gr
import llmConnect
import csv
from dotenv import load_dotenv
import os
def generate_questions(topic):
llmConnect.addToDataset(topic)
def readDataset():
with open('dataset.csv', 'r') as file:
data = list(csv.reader(file))
return data
def getFirstQuestion(topic):
generate_questions(topic)
data = readDataset()
question = data[0][1]
answers = data[0][2:6]
return question, gr.update("answer",choices=answers)
def nextQuestion(question_no):
data = readDataset()
if question_no < len(data):
question = data[question_no][1]
answers = data[question_no][2:6]
return question, gr.update("answer",choices=answers)
return "Quiz completed!", gr.update("answer",choices=["Quiz completed"])
with gr.Blocks() as demo:
# Initialize states
user_answers = gr.State([])
question_no = gr.State(0)
with gr.Row():
with gr.Column():
topic = gr.Textbox(
label="Topic",
placeholder="Enter the topic you want to generate questions for"
)
submit = gr.Button(value="Generate Questions")
with gr.Column():
question = gr.Textbox(label="Question", elem_id="question")
answer = gr.Dropdown(
label="Answer",
interactive=True,
elem_id="answer",
multiselect=False,
allow_custom_value=False,
filterable=False
)
def handle_next(ans, answers, q_no):
# Store the answer
answers.append(ans)
# Increment question number
next_q_no = q_no + 1
# Get next question
question, new_answers = nextQuestion(next_q_no)
return question, new_answers, answers, next_q_no
next = gr.Button(value="Next Question")
next.click(
handle_next,
inputs=[answer, user_answers, question_no],
outputs=[question, answer, user_answers, question_no]
)
submit.click(
getFirstQuestion,
inputs=[topic],
outputs=[question, answer]
)
with gr.Column():
score = gr.Textbox(
label="Score",
placeholder="Your score will be displayed here"
)
def calculate_score(answers):
data = readDataset()
correct_answers = []
for i in range(len(data)):
correct_answers.append(data[i][1+int(data[i][6])])
score = sum(1 for a, c in zip(answers, correct_answers) if a == c)
return f"Your score: {score}/{len(answers)}"
submit_score = gr.Button(value="Submit")
submit_score.click(
calculate_score,
inputs=[user_answers],
outputs=[score]
)
with gr.Row():
with gr.Column():
report = gr.Textbox(
label="Report",
placeholder="Your report will be displayed here"
)
def generate_report(answers):
data = readDataset()
report = []
for i in range(len(answers)):
question = data[i][1]
user_answer = answers[i]
correct_answer = data[i][1+int(data[i][6])]
report.append(f"Q{i+1}: {question}\nYour answer: {user_answer}\nCorrect answer: {correct_answer}\n")
return "\n".join(report)
reportGen = gr.Button(value="Generate Report")
reportGen.click(
generate_report,
inputs=[user_answers],
outputs=[report]
)
demo.launch()