Merged in release/async (pull request #45)

Fixed grading ENCOA-274

Approved-by: Tiago Ribeiro
This commit is contained in:
carlos.mesquita
2024-12-14 12:25:45 +00:00
committed by Tiago Ribeiro
6 changed files with 17 additions and 14 deletions

View File

@@ -27,6 +27,7 @@ RUN apt update && apt install -y \
texlive-xetex \ texlive-xetex \
pandoc \ pandoc \
librsvg2-bin \ librsvg2-bin \
curl \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - \ RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - \

View File

@@ -23,7 +23,6 @@ async def grade_writing_task(
return await grade_controller.grade_writing_task(task, data, background_tasks) return await grade_controller.grade_writing_task(task, data, background_tasks)
@grade_router.post( @grade_router.post(
'/speaking/{task}', '/speaking/{task}',
dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))] dependencies=[Depends(Authorized([IsAuthenticatedViaBearerToken]))]

View File

@@ -106,6 +106,7 @@ class FilePaths:
FIREBASE_LISTENING_AUDIO_FILES_PATH = 'listening_recordings/' FIREBASE_LISTENING_AUDIO_FILES_PATH = 'listening_recordings/'
VIDEO_FILES_PATH = 'download-video/' VIDEO_FILES_PATH = 'download-video/'
FIREBASE_SPEAKING_VIDEO_FILES_PATH = 'speaking_videos/' FIREBASE_SPEAKING_VIDEO_FILES_PATH = 'speaking_videos/'
WRITING_ATTACHMENTS = 'writing_attachments/'
class TemperatureSettings: class TemperatureSettings:

View File

@@ -25,9 +25,6 @@ class GradeController(IGradeController):
self, self,
task: int, dto: WritingGradeTaskDTO, background_tasks: BackgroundTasks task: int, dto: WritingGradeTaskDTO, background_tasks: BackgroundTasks
): ):
if task == 1 and dto.type == "academic" and dto.attachment is None:
raise HTTPException(status_code=400, detail="Academic writing task requires a picture!")
await self._evaluation_service.create_evaluation( await self._evaluation_service.create_evaluation(
dto.userId, dto.sessionId, dto.exerciseId, EvaluationType.WRITING, task dto.userId, dto.sessionId, dto.exerciseId, EvaluationType.WRITING, task
) )

View File

@@ -9,4 +9,4 @@ class WritingGradeTaskDTO(BaseModel):
exerciseId: str exerciseId: str
question: str question: str
answer: str answer: str
attachment: Optional[str] attachment: Optional[str] = None

View File

@@ -1,8 +1,9 @@
import asyncio import asyncio
import os
from typing import Dict, Optional from typing import Dict, Optional
from uuid import uuid4 from uuid import uuid4
from ielts_be.configs.constants import GPTModels, TemperatureSettings from ielts_be.configs.constants import GPTModels, TemperatureSettings, FilePaths
from ielts_be.helpers import TextHelper, ExercisesHelper, FileHelper from ielts_be.helpers import TextHelper, ExercisesHelper, FileHelper
from ielts_be.repositories import IFileStorage from ielts_be.repositories import IFileStorage
from ielts_be.services import ILLMService, IAIDetectorService from ielts_be.services import ILLMService, IAIDetectorService
@@ -54,19 +55,23 @@ class GradeWriting:
}) })
else: else:
uuid = str(uuid4()) uuid = str(uuid4())
name = attachment.split('/')[-1] name = attachment.split('%2F')[-1].split('?')[0]
os.makedirs(f'./tmp/{uuid}/', exist_ok=True)
out_path = f'./tmp/{uuid}/{name}' out_path = f'./tmp/{uuid}/{name}'
path = await self._file_storage.download_firebase_file(attachment, out_path) path = await self._file_storage.download_firebase_file(f'{FilePaths.WRITING_ATTACHMENTS}{name}', out_path)
b64_image = await FileHelper.encode_image(path)
messages.append( messages.append(
{ {
"role": "user", "role": "user",
"content": { "content": [{
"type": "image_url", "type": "image_url",
"image_url": { "image_url": {
"url": f"data:image/{name.split('.')[-1]};base64,{FileHelper.encode_image(path)}" "url": f"data:image/{name.split('.')[-1]};base64,{b64_image}"
} }
}]
} }
}) )
FileHelper.remove_directory(f'./tmp/{uuid}')
temperature = ( temperature = (
TemperatureSettings.GRADING_TEMPERATURE TemperatureSettings.GRADING_TEMPERATURE