ENCOA-312
This commit is contained in:
@@ -8,12 +8,12 @@ import random
|
||||
|
||||
from ielts_be.configs.constants import EducationalContent
|
||||
from ielts_be.dtos.level import LevelExercisesDTO
|
||||
from ielts_be.helpers import DifficultyHelper
|
||||
from ielts_be.repositories import IDocumentStore
|
||||
from ielts_be.services import (
|
||||
ILevelService, ILLMService, IReadingService,
|
||||
IWritingService, IListeningService, ISpeakingService
|
||||
)
|
||||
from ielts_be.utils import pick_difficulty
|
||||
from .exercises import MultipleChoice, BlankSpace, PassageUtas, FillBlanks
|
||||
from .full_exams import CustomLevelModule, LevelUtas
|
||||
from .upload import UploadLevelModule
|
||||
@@ -51,8 +51,7 @@ class LevelService(ILevelService):
|
||||
async def upload_level(self, upload: UploadFile, solutions: Optional[UploadFile] = None) -> Dict:
|
||||
return await self._upload_module.generate_level_from_file(upload, solutions)
|
||||
|
||||
async def _generate_exercise(self, req_exercise, start_id, difficulties):
|
||||
difficulty = pick_difficulty(req_exercise.difficulty, difficulties)
|
||||
async def _generate_exercise(self, req_exercise, start_id, difficulty):
|
||||
if req_exercise.type == "mcBlank":
|
||||
questions = await self._mc.gen_multiple_choice("blank_space", req_exercise.quantity, difficulty, start_id)
|
||||
questions["variant"] = "mcBlank"
|
||||
@@ -95,16 +94,21 @@ class LevelService(ILevelService):
|
||||
return exercise
|
||||
|
||||
async def generate_exercises(self, dto: LevelExercisesDTO):
|
||||
start_ids = []
|
||||
current_id = 1
|
||||
tasks = []
|
||||
|
||||
distributor = DifficultyHelper(dto.difficulty)
|
||||
|
||||
none_count = sum(1 for ex in dto.exercises if ex.difficulty is None)
|
||||
distributor.distribute_for_count(none_count)
|
||||
|
||||
for req_exercise in dto.exercises:
|
||||
start_ids.append(current_id)
|
||||
difficulty = distributor.pick_difficulty(req_exercise.difficulty)
|
||||
tasks.append(
|
||||
self._generate_exercise(req_exercise, current_id, difficulty)
|
||||
)
|
||||
current_id += req_exercise.quantity
|
||||
|
||||
tasks = [
|
||||
self._generate_exercise(req_exercise, start_id, dto.difficulty)
|
||||
for req_exercise, start_id in zip(dto.exercises, start_ids)
|
||||
]
|
||||
questions = await gather(*tasks)
|
||||
questions = [{'id': str(uuid4()), **exercise} for exercise in questions]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user