quizgeneration / quiz_generation.py
muhh-b's picture
Update quiz_generation.py
e9a5b96
raw
history blame
3.35 kB
import re
import os
from apiclient import discovery
from oauth2client import client, file, tools
import bardapi
import streamlit
SCOPES = "https://www.googleapis.com/auth/forms.body"
DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1"
NEW_FORM = {
"info": {
"title": "Quiz"
}
}
def generate_quiz_questions(prompt):
# Set your Bard API key as an environment variable
os.environ['_BARD_API_KEY'] = st.secrets["bard_api_key"]
prompt_suffix = ". Each generated question has to begin with '๐Ÿ”น', each choice has to begin with '๐Ÿ”ธ', and each correct answer has to begin with 'โœ”๏ธ'."
# Send API requests and get responses
response = bardapi.core.Bard().get_answer(prompt + prompt_suffix)
quiz = response["content"]
return quiz
def generate_quiz_url(prompt_text, form_service):
# Generate quiz questions based on the transcribed text
text = generate_quiz_questions(prompt_text)
# Questions, choices, and correct answers
questions = re.findall(r"๐Ÿ”น (.*?)\n", text)
choices = re.findall(r"๐Ÿ”ธ (.*?)\n", text)
answers = re.findall(r"โœ”๏ธ (.*?)\n", text)
# Remove the '**' from the questions list (they are not part of the question), choices, and correct answers
questions = [question.replace('**', '') for question in questions]
answers = [answer.replace('**', '') for answer in answers]
questions_list = []
# Fill the questions_list variable
for i, question in enumerate(questions):
choices_for_question = choices[i * 4:(i + 1) * 4]
correct_answer = answers[i] if i < len(answers) else ""
question_dict = {
"question": question,
"choices": choices_for_question,
"correct_answer": correct_answer
}
questions_list.append(question_dict)
# Create the initial form
result = form_service.forms().create(body=NEW_FORM).execute()
# Add the questions to the form
question_requests = []
for index, question in enumerate(questions_list):
new_question = {
"createItem": {
"item": {
"title": question["question"],
"questionItem": {
"question": {
"required": True,
"choiceQuestion": {
"type": "RADIO",
"options": [
{"value": choice} for choice in question["choices"]
],
"shuffle": True
}
}
}
},
"location": {
"index": index
}
}
}
question_requests.append(new_question)
NEW_QUESTIONS = {
"requests": question_requests
}
question_setting = form_service.forms().batchUpdate(formId=result["formId"], body=NEW_QUESTIONS).execute()
# Retrieve the updated form result
get_result = form_service.forms().get(formId=result["formId"]).execute()
# Get the form ID
form_id = get_result["formId"]
# Construct the quiz link using the form ID
form_url = result["responderUri"]
return form_url