Spaces:
Running
Running
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 | |