File size: 4,203 Bytes
74885f3
 
 
 
 
6f2f043
69a1575
74885f3
 
 
 
 
 
 
 
 
d69b94f
74885f3
d69b94f
 
 
 
e9a5b96
d69b94f
 
 
 
 
 
 
e9a5b96
74885f3
 
 
 
 
 
 
 
 
 
d69b94f
74885f3
d69b94f
 
 
 
 
 
 
 
 
74885f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
698e07f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import re
import os
from apiclient import discovery
from oauth2client import client, file, tools
import bardapi
import streamlit as st

SCOPES = "https://www.googleapis.com/auth/forms.body"
DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1"

NEW_FORM = {
    "info": {
        "title": "Quiz"
    }
}

# Function to generate quiz questions based on a given prompt
def generate_quiz_questions(prompt):
    '''Generates quiz questions based on a given prompt using the Bard API.
    
    Args:
        prompt (str): The prompt for generating quiz questions.
    
    Returns:
        str: The generated quiz questions in a formatted text.
    '''
    # Visit https://bard.google.com/
    # F12 for console
    # Session: Application β†’ Cookies β†’ Copy the value of __Secure-1PSID cookie.
    # Set your __Secure-1PSID value to key
    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

# Function to generate the quiz URL based on the transcribed text
def generate_quiz_url(prompt_text, form_service):
    '''Generates the quiz URL based on the transcribed text and form service.
    
    Args:
        prompt_text (str): The transcribed text used for generating quiz questions.
        form_service (googleapiclient.discovery.Resource): The form service object for creating the form.
    
    Returns:
        str: The URL of the generated quiz form.
    '''
    # 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