import uuid from app.configs.constants import GPTModels, TemperatureSettings from app.helpers import ExercisesHelper from app.services.abc 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} 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 }