Add exercises for utas level.
This commit is contained in:
@@ -1153,3 +1153,241 @@ def gen_multiple_choice_blank_space_utas(quantity: int, start_id: int, all_exams
|
|||||||
"questions": fix_exercise_ids(question, start_id)["questions"],
|
"questions": fix_exercise_ids(question, start_id)["questions"],
|
||||||
"type": "multipleChoice",
|
"type": "multipleChoice",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def gen_multiple_choice_underlined_utas(quantity: int, start_id: int):
|
||||||
|
json_format = {
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"id": "9",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"id": "A",
|
||||||
|
"text": "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B",
|
||||||
|
"text": "b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "C",
|
||||||
|
"text": "c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "D",
|
||||||
|
"text": "d"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prompt": "prompt",
|
||||||
|
"solution": "A",
|
||||||
|
"variant": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
gen_multiple_choice_for_text = 'Generate ' + str(quantity) + (' multiple choice questions of 4 options for an english '
|
||||||
|
'level exam, some easy questions, some intermediate '
|
||||||
|
'questions and some advanced questions.Ensure that '
|
||||||
|
'the questions cover a range of topics such as verb '
|
||||||
|
'tense, subject-verb agreement, pronoun usage, '
|
||||||
|
'sentence structure, and punctuation. Make sure '
|
||||||
|
'every question only has 1 correct answer.')
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": 'You are a helpful assistant designed to output JSON on this format: ' + str(json_format)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": gen_multiple_choice_for_text
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": (
|
||||||
|
'The type of multiple choice is the prompt has wrong words or group of words and the options are to '
|
||||||
|
'find the wrong word or group of words that are underlined in the prompt. \nExample:\n'
|
||||||
|
'Prompt: "I <u>complain</u> about my boss <u>all the time</u>, but my colleagues <u>thinks</u> the boss <u>is</u> nice."\n'
|
||||||
|
'Options:\na: "complain"\nb: "all the time"\nc: "thinks"\nd: "is"')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
token_count = count_total_tokens(messages)
|
||||||
|
question = make_openai_call(GPT_4_O, messages, token_count,
|
||||||
|
["questions"],
|
||||||
|
GEN_QUESTION_TEMPERATURE)
|
||||||
|
|
||||||
|
if len(question["questions"]) != quantity:
|
||||||
|
return gen_multiple_choice_level(quantity, start_id)
|
||||||
|
else:
|
||||||
|
return {
|
||||||
|
"id": str(uuid.uuid4()),
|
||||||
|
"prompt": "Select the appropriate option.",
|
||||||
|
"questions": fix_exercise_ids(question, start_id)["questions"],
|
||||||
|
"type": "multipleChoice",
|
||||||
|
}
|
||||||
|
|
||||||
|
def gen_blank_space_text_utas(quantity: int, start_id: int, size: int, topic=random.choice(mti_topics)):
|
||||||
|
json_format = {
|
||||||
|
"question": {
|
||||||
|
"words": [
|
||||||
|
{
|
||||||
|
"id": "1",
|
||||||
|
"text": "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "2",
|
||||||
|
"text": "b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "3",
|
||||||
|
"text": "c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "4",
|
||||||
|
"text": "d"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"text": "text"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gen_text = 'Generate a text of at least ' + str(size) + ' words about the topic ' + topic + '.'
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": 'You are a helpful assistant designed to output JSON on this format: ' + str(json_format)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": gen_text
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": (
|
||||||
|
'From the generated text choose ' + str(quantity) + ' words (cannot be sequential words) to replace '
|
||||||
|
'once with {{id}} where id starts on ' + str(start_id) + ' and is '
|
||||||
|
'incremented for each word. The ids must be ordered throughout the text and the words must be '
|
||||||
|
'replaced only once. Put the removed words and respective ids on the words array of the json in the correct order.')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
token_count = count_total_tokens(messages)
|
||||||
|
question = make_openai_call(GPT_4_O, messages, token_count,
|
||||||
|
["question"],
|
||||||
|
GEN_QUESTION_TEMPERATURE)
|
||||||
|
|
||||||
|
return {
|
||||||
|
"id": str(uuid.uuid4()),
|
||||||
|
"prompt": "Select the appropriate option.",
|
||||||
|
"questions": question["question"],
|
||||||
|
"type": "blankSpace"
|
||||||
|
}
|
||||||
|
|
||||||
|
def gen_reading_passage_utas(start_id, sa_quantity: int, mc_quantity: int, topic=random.choice(mti_topics)):
|
||||||
|
|
||||||
|
passage = generate_reading_passage(QuestionType.READING_PASSAGE_1, topic)
|
||||||
|
exercises = gen_reading_exercises_utas(passage["text"], start_id, sa_quantity, mc_quantity)
|
||||||
|
if contains_empty_dict(exercises):
|
||||||
|
return gen_reading_passage_utas(start_id, sa_quantity, mc_quantity, topic)
|
||||||
|
return {
|
||||||
|
"exercises": exercises,
|
||||||
|
"text": {
|
||||||
|
"content": passage["text"],
|
||||||
|
"title": passage["title"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def gen_reading_exercises_utas(passage: str, start_id: int, sa_quantity: int, mc_quantity: int):
|
||||||
|
exercises = []
|
||||||
|
|
||||||
|
sa_questions = gen_short_answer_utas(passage, start_id, sa_quantity)
|
||||||
|
exercises.append(sa_questions)
|
||||||
|
mc_questions = gen_text_multiple_choice_utas(passage, start_id+sa_quantity, mc_quantity)
|
||||||
|
exercises.append(mc_questions)
|
||||||
|
|
||||||
|
return exercises
|
||||||
|
|
||||||
|
def gen_short_answer_utas(text: str, start_id: int, sa_quantity: int):
|
||||||
|
json_format = {"questions": [{"id": 1, "question": "question", "possible_answers": ["answer_1", "answer_2"]}]}
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": 'You are a helpful assistant designed to output JSON on this format: ' + str(json_format)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": (
|
||||||
|
'Generate ' + str(sa_quantity) + ' short answer questions, and the possible answers, must have '
|
||||||
|
'maximum 3 words per answer, about this text:\n"' + text + '"')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": 'The id starts at ' + str(start_id) + '.'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
token_count = count_total_tokens(messages)
|
||||||
|
return make_openai_call(GPT_4_O, messages, token_count,
|
||||||
|
["questions"],
|
||||||
|
GEN_QUESTION_TEMPERATURE)
|
||||||
|
def gen_text_multiple_choice_utas(text: str, start_id: int, mc_quantity: int):
|
||||||
|
json_format = {
|
||||||
|
"questions": [
|
||||||
|
{
|
||||||
|
"id": "9",
|
||||||
|
"options": [
|
||||||
|
{
|
||||||
|
"id": "A",
|
||||||
|
"text": "a"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "B",
|
||||||
|
"text": "b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "C",
|
||||||
|
"text": "c"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "D",
|
||||||
|
"text": "d"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"prompt": "prompt",
|
||||||
|
"solution": "A",
|
||||||
|
"variant": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": 'You are a helpful assistant designed to output JSON on this format: ' + str(json_format)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": 'Generate ' + str(mc_quantity) + ' multiple choice questions of 4 options for this text:\n' + text
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": 'Make sure every question only has 1 correct answer.'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
token_count = count_total_tokens(messages)
|
||||||
|
question = make_openai_call(GPT_4_O, messages, token_count,
|
||||||
|
["questions"],
|
||||||
|
GEN_QUESTION_TEMPERATURE)
|
||||||
|
|
||||||
|
if len(question["questions"]) != mc_quantity:
|
||||||
|
return gen_multiple_choice_level(mc_quantity, start_id)
|
||||||
|
else:
|
||||||
|
return {
|
||||||
|
"id": str(uuid.uuid4()),
|
||||||
|
"prompt": "Select the appropriate option.",
|
||||||
|
"questions": fix_exercise_ids(question, start_id)["questions"],
|
||||||
|
"type": "multipleChoice",
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user