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