74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
import uuid
|
|
|
|
from ielts_be.configs.constants import GPTModels, TemperatureSettings
|
|
from ielts_be.helpers import ExercisesHelper
|
|
from ielts_be.services import ILLMService
|
|
|
|
|
|
class FillBlanks:
|
|
|
|
def __init__(self, llm: ILLMService):
|
|
self._llm = llm
|
|
|
|
async def gen_summary_fill_blanks_exercise(
|
|
self, text: str, quantity: int, start_id, difficulty, num_random_words: int = 1
|
|
):
|
|
messages = [
|
|
{
|
|
"role": "system",
|
|
"content": (
|
|
'You are a helpful assistant designed to output JSON on this format: { "summary": "summary" }'
|
|
)
|
|
},
|
|
{
|
|
"role": "user",
|
|
"content": f'Summarize this text: "{text}"'
|
|
|
|
}
|
|
]
|
|
|
|
response = await self._llm.prediction(
|
|
GPTModels.GPT_4_O, messages, ["summary"], TemperatureSettings.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": (
|
|
f'Select {quantity} {difficulty} CEFR level difficulty words, it must be words and not expressions, '
|
|
f'from this:\n{response["summary"]}'
|
|
)
|
|
}
|
|
]
|
|
|
|
words_response = await self._llm.prediction(
|
|
GPTModels.GPT_4_O, messages, ["words"], TemperatureSettings.GEN_QUESTION_TEMPERATURE
|
|
)
|
|
|
|
response["words"] = words_response["words"]
|
|
replaced_summary = ExercisesHelper.replace_first_occurrences_with_placeholders(
|
|
response["summary"], response["words"], start_id
|
|
)
|
|
options_words = ExercisesHelper.add_random_words_and_shuffle(response["words"], num_random_words)
|
|
solutions = ExercisesHelper.fillblanks_build_solutions_array(response["words"], start_id)
|
|
|
|
return {
|
|
"allowRepetition": True,
|
|
"id": str(uuid.uuid4()),
|
|
"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."
|
|
),
|
|
"solutions": solutions,
|
|
"text": replaced_summary,
|
|
"type": "fillBlanks",
|
|
"words": options_words
|
|
}
|