Mp3 uploading is now done on next, now doing concurrent reading and listening exercise calls with ayncio's gather to openai, should be faster
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import asyncio
|
||||
from logging import getLogger
|
||||
|
||||
from fastapi import UploadFile
|
||||
@@ -77,55 +78,63 @@ class ReadingService(IReadingService):
|
||||
TemperatureSettings.GEN_QUESTION_TEMPERATURE
|
||||
)
|
||||
|
||||
async def _generate_single_exercise(self, req_exercise, text: str, start_id: int, difficulty: str) -> dict:
|
||||
if req_exercise.type == "fillBlanks":
|
||||
question = await self._fill_blanks.gen_summary_fill_blanks_exercise(
|
||||
text, req_exercise.quantity, start_id, difficulty, req_exercise.num_random_words
|
||||
)
|
||||
self._logger.info(f"Added fill blanks: {question}")
|
||||
return question
|
||||
|
||||
elif req_exercise.type == "trueFalse":
|
||||
question = await self._true_false.gen_true_false_not_given_exercise(
|
||||
text, req_exercise.quantity, start_id, difficulty
|
||||
)
|
||||
self._logger.info(f"Added trueFalse: {question}")
|
||||
return question
|
||||
|
||||
elif req_exercise.type == "writeBlanks":
|
||||
question = await self._write_blanks.gen_write_blanks_exercise(
|
||||
text, req_exercise.quantity, start_id, difficulty, req_exercise.max_words
|
||||
)
|
||||
|
||||
if ExercisesHelper.answer_word_limit_ok(question):
|
||||
self._logger.info(f"Added write blanks: {question}")
|
||||
return question
|
||||
else:
|
||||
self._logger.info("Did not add write blanks because it did not respect word limit")
|
||||
return {}
|
||||
|
||||
elif req_exercise.type == "paragraphMatch":
|
||||
question = await self._paragraph_match.gen_paragraph_match_exercise(
|
||||
text, req_exercise.quantity, start_id
|
||||
)
|
||||
self._logger.info(f"Added paragraph match: {question}")
|
||||
return question
|
||||
|
||||
elif req_exercise.type == "ideaMatch":
|
||||
question = await self._idea_match.gen_idea_match_exercise(
|
||||
text, req_exercise.quantity, start_id
|
||||
)
|
||||
question["variant"] = "ideaMatch"
|
||||
self._logger.info(f"Added idea match: {question}")
|
||||
return question
|
||||
|
||||
async def generate_reading_exercises(self, dto: ReadingDTO):
|
||||
exercises = []
|
||||
exercise_tasks = []
|
||||
start_id = 1
|
||||
|
||||
for req_exercise in dto.exercises:
|
||||
if req_exercise.type == "fillBlanks":
|
||||
question = await self._fill_blanks.gen_summary_fill_blanks_exercise(
|
||||
dto.text, req_exercise.quantity, start_id, dto.difficulty, req_exercise.num_random_words
|
||||
exercise_tasks.append(
|
||||
self._generate_single_exercise(
|
||||
req_exercise,
|
||||
dto.text,
|
||||
start_id,
|
||||
dto.difficulty
|
||||
)
|
||||
exercises.append(question)
|
||||
self._logger.info(f"Added fill blanks: {question}")
|
||||
|
||||
elif req_exercise.type == "trueFalse":
|
||||
question = await self._true_false.gen_true_false_not_given_exercise(
|
||||
dto.text, req_exercise.quantity, start_id, dto.difficulty
|
||||
)
|
||||
exercises.append(question)
|
||||
self._logger.info(f"Added trueFalse: {question}")
|
||||
|
||||
elif req_exercise.type == "writeBlanks":
|
||||
question = await self._write_blanks.gen_write_blanks_exercise(
|
||||
dto.text, req_exercise.quantity, start_id, dto.difficulty, req_exercise.max_words
|
||||
)
|
||||
|
||||
if ExercisesHelper.answer_word_limit_ok(question):
|
||||
exercises.append(question)
|
||||
self._logger.info(f"Added write blanks: {question}")
|
||||
else:
|
||||
exercises.append({})
|
||||
self._logger.info("Did not add write blanks because it did not respect word limit")
|
||||
|
||||
elif req_exercise.type == "paragraphMatch":
|
||||
|
||||
question = await self._paragraph_match.gen_paragraph_match_exercise(
|
||||
dto.text, req_exercise.quantity, start_id
|
||||
)
|
||||
exercises.append(question)
|
||||
self._logger.info(f"Added paragraph match: {question}")
|
||||
|
||||
elif req_exercise.type == "ideaMatch":
|
||||
|
||||
question = await self._idea_match.gen_idea_match_exercise(
|
||||
dto.text, req_exercise.quantity, start_id
|
||||
)
|
||||
question["variant"] = "ideaMatch"
|
||||
exercises.append(question)
|
||||
self._logger.info(f"Added idea match: {question}")
|
||||
|
||||
start_id = start_id + req_exercise.quantity
|
||||
)
|
||||
start_id += req_exercise.quantity
|
||||
|
||||
return {
|
||||
"exercises": exercises
|
||||
"exercises": await asyncio.gather(*exercise_tasks)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user