ENCOA-312

This commit is contained in:
Carlos-Mesquita
2025-01-13 21:03:34 +00:00
parent b32e38156c
commit e1b23ae561
7 changed files with 69 additions and 32 deletions

View File

@@ -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]