from abc import ABC, abstractmethod import random from typing import Dict, Optional from fastapi import UploadFile from app.configs.constants import EducationalContent class ILevelService(ABC): @abstractmethod async def generate_exercises(self, dto): pass @abstractmethod async def get_level_exam( self, number_of_exercises: int = 25, min_timer: int = 25, diagnostic: bool = False ) -> Dict: pass @abstractmethod async def get_level_utas(self): pass @abstractmethod async def get_custom_level(self, data: Dict): pass @abstractmethod async def upload_level(self, upload: UploadFile) -> Dict: pass @abstractmethod async def gen_multiple_choice( self, mc_variant: str, quantity: int, start_id: int = 1 #, *, utas: bool = False, all_exams=None ): pass @abstractmethod async def gen_blank_space_text_utas( self, quantity: int, start_id: int, size: int, topic: str ): pass @abstractmethod async def gen_reading_passage_utas( self, start_id, mc_quantity: int, topic: Optional[str] #sa_quantity: int, ): pass