Update reading fill the blanks.
This commit is contained in:
@@ -173,7 +173,6 @@ topics = [
|
|||||||
"Space Exploration",
|
"Space Exploration",
|
||||||
"Artificial Intelligence",
|
"Artificial Intelligence",
|
||||||
"Climate Change",
|
"Climate Change",
|
||||||
"World Religions",
|
|
||||||
"The Human Brain",
|
"The Human Brain",
|
||||||
"Renewable Energy",
|
"Renewable Energy",
|
||||||
"Cultural Diversity",
|
"Cultural Diversity",
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ def gen_reading_passage_1(topic, req_exercises, difficulty):
|
|||||||
|
|
||||||
number_of_exercises_q = divide_number_into_parts(TOTAL_READING_PASSAGE_1_EXERCISES, len(req_exercises))
|
number_of_exercises_q = divide_number_into_parts(TOTAL_READING_PASSAGE_1_EXERCISES, len(req_exercises))
|
||||||
|
|
||||||
passage = generate_reading_passage(QuestionType.READING_PASSAGE_1, topic)
|
passage = generate_reading_passage_1_text(topic)
|
||||||
if passage == "":
|
if passage == "":
|
||||||
return gen_reading_passage_1(topic, req_exercises, difficulty)
|
return gen_reading_passage_1(topic, req_exercises, difficulty)
|
||||||
start_id = 1
|
start_id = 1
|
||||||
@@ -45,7 +45,7 @@ def gen_reading_passage_2(topic, req_exercises, difficulty):
|
|||||||
|
|
||||||
number_of_exercises_q = divide_number_into_parts(TOTAL_READING_PASSAGE_2_EXERCISES, len(req_exercises))
|
number_of_exercises_q = divide_number_into_parts(TOTAL_READING_PASSAGE_2_EXERCISES, len(req_exercises))
|
||||||
|
|
||||||
passage = generate_reading_passage(QuestionType.READING_PASSAGE_2, topic)
|
passage = generate_reading_passage_2_text(topic)
|
||||||
if passage == "":
|
if passage == "":
|
||||||
return gen_reading_passage_2(topic, req_exercises, difficulty)
|
return gen_reading_passage_2(topic, req_exercises, difficulty)
|
||||||
start_id = 14
|
start_id = 14
|
||||||
@@ -68,7 +68,7 @@ def gen_reading_passage_3(topic, req_exercises, difficulty):
|
|||||||
|
|
||||||
number_of_exercises_q = divide_number_into_parts(TOTAL_READING_PASSAGE_3_EXERCISES, len(req_exercises))
|
number_of_exercises_q = divide_number_into_parts(TOTAL_READING_PASSAGE_3_EXERCISES, len(req_exercises))
|
||||||
|
|
||||||
passage = generate_reading_passage(QuestionType.READING_PASSAGE_3, topic)
|
passage = generate_reading_passage_3_text(topic)
|
||||||
if passage == "":
|
if passage == "":
|
||||||
return gen_reading_passage_3(topic, req_exercises, difficulty)
|
return gen_reading_passage_3(topic, req_exercises, difficulty)
|
||||||
start_id = 27
|
start_id = 27
|
||||||
@@ -145,7 +145,12 @@ def add_random_words_and_shuffle(word_array, num_random_words):
|
|||||||
|
|
||||||
random.shuffle(combined_array)
|
random.shuffle(combined_array)
|
||||||
|
|
||||||
return combined_array
|
result = []
|
||||||
|
for i, word in enumerate(combined_array):
|
||||||
|
letter = chr(65 + i) # chr(65) is 'A'
|
||||||
|
result.append({"letter": letter, "word": word})
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def fillblanks_build_solutions_array(words, start_id):
|
def fillblanks_build_solutions_array(words, start_id):
|
||||||
@@ -260,7 +265,8 @@ def get_perfect_answer(question: str, size: int):
|
|||||||
token_count = count_total_tokens(messages)
|
token_count = count_total_tokens(messages)
|
||||||
return make_openai_call(GPT_4_O, messages, token_count, GEN_TEXT_FIELDS, GEN_QUESTION_TEMPERATURE)
|
return make_openai_call(GPT_4_O, messages, token_count, GEN_TEXT_FIELDS, GEN_QUESTION_TEMPERATURE)
|
||||||
|
|
||||||
def generate_reading_passage(type: QuestionType, topic: str):
|
|
||||||
|
def generate_reading_passage_1_text(topic: str):
|
||||||
messages = [
|
messages = [
|
||||||
{
|
{
|
||||||
"role": "system",
|
"role": "system",
|
||||||
@@ -271,7 +277,7 @@ def generate_reading_passage(type: QuestionType, topic: str):
|
|||||||
{
|
{
|
||||||
"role": "user",
|
"role": "user",
|
||||||
"content": (
|
"content": (
|
||||||
'Generate an extensive text for IELTS ' + type.value + ', of at least 1500 words, on the topic '
|
'Generate an extensive text for IELTS Reading Passage 1, of at least 800 words, on the topic '
|
||||||
'of "' + topic + '". The passage should offer '
|
'of "' + topic + '". The passage should offer '
|
||||||
'a substantial amount of information, '
|
'a substantial amount of information, '
|
||||||
'analysis, or narrative relevant to the chosen '
|
'analysis, or narrative relevant to the chosen '
|
||||||
@@ -282,7 +288,75 @@ def generate_reading_passage(type: QuestionType, topic: str):
|
|||||||
'Make sure that the generated text does not '
|
'Make sure that the generated text does not '
|
||||||
'contain forbidden subjects in muslim countries.')
|
'contain forbidden subjects in muslim countries.')
|
||||||
|
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": ('The generated text should be fairly easy to understand.')
|
||||||
|
},
|
||||||
|
]
|
||||||
|
token_count = count_total_tokens(messages)
|
||||||
|
return make_openai_call(GPT_4_O, messages, token_count, GEN_TEXT_FIELDS, GEN_QUESTION_TEMPERATURE)
|
||||||
|
|
||||||
|
|
||||||
|
def generate_reading_passage_2_text(topic: str):
|
||||||
|
messages = [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": (
|
||||||
|
'You are a helpful assistant designed to output JSON on this format: '
|
||||||
|
'{"title": "title of the text", "text": "generated text"}')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": (
|
||||||
|
'Generate an extensive text for IELTS Reading Passage 2, of at least 800 words, on the topic '
|
||||||
|
'of "' + topic + '". The passage should offer '
|
||||||
|
'a substantial amount of information, '
|
||||||
|
'analysis, or narrative relevant to the chosen '
|
||||||
|
'subject matter. This text passage aims to '
|
||||||
|
'serve as the primary reading section of an '
|
||||||
|
'IELTS test, providing an in-depth and '
|
||||||
|
'comprehensive exploration of the topic. '
|
||||||
|
'Make sure that the generated text does not '
|
||||||
|
'contain forbidden subjects in muslim countries.')
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": ('The generated text should be fairly hard to understand.')
|
||||||
|
},
|
||||||
|
]
|
||||||
|
token_count = count_total_tokens(messages)
|
||||||
|
return make_openai_call(GPT_4_O, messages, token_count, GEN_TEXT_FIELDS, GEN_QUESTION_TEMPERATURE)
|
||||||
|
|
||||||
|
def generate_reading_passage_3_text(topic: str):
|
||||||
|
messages = [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": (
|
||||||
|
'You are a helpful assistant designed to output JSON on this format: '
|
||||||
|
'{"title": "title of the text", "text": "generated text"}')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": (
|
||||||
|
'Generate an extensive text for IELTS Reading Passage 3, of at least 800 words, on the topic '
|
||||||
|
'of "' + topic + '". The passage should offer '
|
||||||
|
'a substantial amount of information, '
|
||||||
|
'analysis, or narrative relevant to the chosen '
|
||||||
|
'subject matter. This text passage aims to '
|
||||||
|
'serve as the primary reading section of an '
|
||||||
|
'IELTS test, providing an in-depth and '
|
||||||
|
'comprehensive exploration of the topic. '
|
||||||
|
'Make sure that the generated text does not '
|
||||||
|
'contain forbidden subjects in muslim countries.')
|
||||||
|
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": ('The generated text should be very hard to understand and include different points, theories, '
|
||||||
|
'subtle differences of opinions from people over the specified topic .')
|
||||||
|
},
|
||||||
]
|
]
|
||||||
token_count = count_total_tokens(messages)
|
token_count = count_total_tokens(messages)
|
||||||
return make_openai_call(GPT_4_O, messages, token_count, GEN_TEXT_FIELDS, GEN_QUESTION_TEMPERATURE)
|
return make_openai_call(GPT_4_O, messages, token_count, GEN_TEXT_FIELDS, GEN_QUESTION_TEMPERATURE)
|
||||||
@@ -595,18 +669,12 @@ def gen_summary_fill_blanks_exercise(text: str, quantity: int, start_id, difficu
|
|||||||
"role": "system",
|
"role": "system",
|
||||||
"content": (
|
"content": (
|
||||||
'You are a helpful assistant designed to output JSON on this format: '
|
'You are a helpful assistant designed to output JSON on this format: '
|
||||||
'{ "summary": "summary", "words": ["word_1", "word_2"] }')
|
'{ "summary": "summary" }')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"role": "user",
|
"role": "user",
|
||||||
"content": ('Summarize this text: "'+ text + '"')
|
"content": ('Summarize this text: "'+ text + '"')
|
||||||
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"role": "user",
|
|
||||||
"content": ('Select ' + str(quantity) + ' ' + difficulty + ' difficulty words, it must be words and not '
|
|
||||||
'expressions, from the summary.')
|
|
||||||
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
token_count = count_total_tokens(messages)
|
token_count = count_total_tokens(messages)
|
||||||
@@ -615,14 +683,34 @@ def gen_summary_fill_blanks_exercise(text: str, quantity: int, start_id, difficu
|
|||||||
["summary"],
|
["summary"],
|
||||||
GEN_QUESTION_TEMPERATURE)
|
GEN_QUESTION_TEMPERATURE)
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": (
|
||||||
|
'You are a helpful assistant designed to output JSON on this format: '
|
||||||
|
'{"words": ["word_1", "word_2"] }')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": ('Select ' + str(quantity) + ' ' + difficulty + ' difficulty words, it must be words and not '
|
||||||
|
'expressions, from this:\n' + response["summary"])
|
||||||
|
|
||||||
|
}
|
||||||
|
]
|
||||||
|
token_count = count_total_tokens(messages)
|
||||||
|
|
||||||
|
words_response = make_openai_call(GPT_4_O, messages, token_count,
|
||||||
|
["summary"],
|
||||||
|
GEN_QUESTION_TEMPERATURE)
|
||||||
|
response["words"] = words_response["words"]
|
||||||
replaced_summary = replace_first_occurrences_with_placeholders(response["summary"], response["words"], start_id)
|
replaced_summary = replace_first_occurrences_with_placeholders(response["summary"], response["words"], start_id)
|
||||||
options_words = add_random_words_and_shuffle(response["words"], 5)
|
options_words = add_random_words_and_shuffle(response["words"], 1)
|
||||||
solutions = fillblanks_build_solutions_array(response["words"], start_id)
|
solutions = fillblanks_build_solutions_array(response["words"], start_id)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"allowRepetition": True,
|
"allowRepetition": True,
|
||||||
"id": str(uuid.uuid4()),
|
"id": str(uuid.uuid4()),
|
||||||
"prompt": "Complete the summary below. Click a blank to select the corresponding word(s) for it.\\nThere are "
|
"prompt": "Complete the summary below. Write the letter of the corresponding word(s) for it.\\nThere are "
|
||||||
"more words than spaces so you will not use them all. You may use any of the words more than once.",
|
"more words than spaces so you will not use them all. You may use any of the words more than once.",
|
||||||
"solutions": solutions,
|
"solutions": solutions,
|
||||||
"text": replaced_summary,
|
"text": replaced_summary,
|
||||||
@@ -1334,7 +1422,7 @@ def gen_blank_space_text_utas(quantity: int, start_id: int, size: int, topic=ran
|
|||||||
|
|
||||||
def gen_reading_passage_utas(start_id, sa_quantity: int, mc_quantity: int, topic=random.choice(mti_topics)):
|
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)
|
passage = generate_reading_passage_1_text(topic)
|
||||||
short_answer = gen_short_answer_utas(passage["text"], start_id, sa_quantity)
|
short_answer = gen_short_answer_utas(passage["text"], start_id, sa_quantity)
|
||||||
mc_exercises = gen_text_multiple_choice_utas(passage["text"], start_id+sa_quantity, mc_quantity)
|
mc_exercises = gen_text_multiple_choice_utas(passage["text"], start_id+sa_quantity, mc_quantity)
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user