ENCOA-274 and patch to the Dockerfile, in some merge the firebase tools were left out

This commit is contained in:
Carlos-Mesquita
2024-12-11 15:23:00 +00:00
parent 0222c339fe
commit 196f9e9c3e
9 changed files with 36 additions and 23 deletions

View File

@@ -29,6 +29,11 @@ RUN apt update && apt install -y \
librsvg2-bin \ librsvg2-bin \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y nodejs
RUN npm install -g firebase-tools
RUN pip install --no-cache-dir -r /app/requirements.txt RUN pip install --no-cache-dir -r /app/requirements.txt
EXPOSE 8000 EXPOSE 8000

View File

@@ -94,7 +94,7 @@ class DependencyInjector:
) )
self._container.writing_service = providers.Factory( self._container.writing_service = providers.Factory(
WritingService, llm=self._container.llm, ai_detector=self._container.ai_detector WritingService, llm=self._container.llm, ai_detector=self._container.ai_detector, file_storage=self._container.firebase_instance
) )
with open('ielts_be/services/impl/exam/level/mc_variants.json', 'r') as file: with open('ielts_be/services/impl/exam/level/mc_variants.json', 'r') as file:

View File

@@ -15,5 +15,4 @@ class WritingController(IWritingController):
async def get_writing_task_academic_question(self, task: int, attachment: UploadFile, difficulty: str): async def get_writing_task_academic_question(self, task: int, attachment: UploadFile, difficulty: str):
if attachment.content_type not in ['image/jpeg', 'image/png']: if attachment.content_type not in ['image/jpeg', 'image/png']:
raise HTTPException(status_code=400, detail="Invalid file type. Only JPEG and PNG allowed.") raise HTTPException(status_code=400, detail="Invalid file type. Only JPEG and PNG allowed.")
return await self._service.get_writing_task_academic_question(task, attachment, difficulty) return await self._service.get_writing_task_academic_question(task, attachment, difficulty)

View File

@@ -7,6 +7,7 @@ class UserController(IUserController):
def __init__(self, user_service: IUserService): def __init__(self, user_service: IUserService):
self._service = user_service self._service = user_service
print(self._service)
async def batch_import(self, batch: BatchUsersDTO): async def batch_import(self, batch: BatchUsersDTO):
return await self._service.batch_users(batch) return await self._service.batch_users(batch)

View File

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

View File

@@ -55,10 +55,8 @@ class WritingService(IWritingService):
*(await get_writing_args_academic(task, file)) *(await get_writing_args_academic(task, file))
] ]
llm_model = GPTModels.GPT_3_5_TURBO if task == 1 else GPTModels.GPT_4_O
response = await self._llm.prediction( response = await self._llm.prediction(
llm_model, GPTModels.GPT_4_O,
messages, messages,
["prompt"], ["prompt"],
TemperatureSettings.GEN_QUESTION_TEMPERATURE TemperatureSettings.GEN_QUESTION_TEMPERATURE

View File

@@ -25,6 +25,9 @@ async def get_writing_args_academic(task: int, attachment: UploadFile) -> List[D
if task == 2: if task == 2:
raise NotImplemented("Task 2 academic isn't implemented yet, current implementation still uses General Task 2 prompts.") raise NotImplemented("Task 2 academic isn't implemented yet, current implementation still uses General Task 2 prompts.")
attachment_bytes = await attachment.read()
messages = [ messages = [
{ {
"role": "user", "role": "user",
@@ -32,17 +35,19 @@ async def get_writing_args_academic(task: int, attachment: UploadFile) -> List[D
}, },
{ {
"role": "user", "role": "user",
"content": writing_args[str(task)]["instructions"] "content": [
{
"type": "text",
"text": writing_args[str(task)]["instructions"],
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/{attachment.filename.split('.')[-1]};base64,{b64encode(attachment_bytes).decode('utf-8')}"
}
}
]
} }
] ]
if task == 1:
attachment_bytes = await attachment.read()
messages.append({
"type": "image_url",
"image_url": {
"url": f"data:image/{attachment.filename.split('.')[-1]};base64,{b64encode(attachment_bytes).decode('utf-8')}"
}
})
return messages return messages

View File

@@ -57,14 +57,17 @@ class GradeWriting:
name = attachment.split('/')[-1] name = attachment.split('/')[-1]
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(attachment, out_path)
messages.append({ messages.append(
"type": "image_url", {
"image_url": { "role": "user",
"url": f"data:image/{name.split('.')[-1]};base64,{FileHelper.encode_image(path)}" "content": {
"type": "image_url",
"image_url": {
"url": f"data:image/{name.split('.')[-1]};base64,{FileHelper.encode_image(path)}"
}
} }
}) })
llm_model = GPTModels.GPT_3_5_TURBO if task == 1 else GPTModels.GPT_4_O
temperature = ( temperature = (
TemperatureSettings.GRADING_TEMPERATURE TemperatureSettings.GRADING_TEMPERATURE
if task == 1 else if task == 1 else
@@ -72,7 +75,7 @@ class GradeWriting:
) )
evaluation_promise = self._llm.prediction( evaluation_promise = self._llm.prediction(
llm_model, GPTModels.GPT_4_O,
messages, messages,
["comment"], ["comment"],
temperature temperature

View File

@@ -93,7 +93,10 @@ class OpenAI(ILLMService):
def _count_total_tokens(messages): def _count_total_tokens(messages):
total_tokens = 0 total_tokens = 0
for message in messages: for message in messages:
total_tokens += count_tokens(message["content"])["n_tokens"] # Skip when content isn't text
message_content = message.get("content", None)
if message_content is not None and isinstance(message_content, str):
total_tokens += count_tokens(message["content"])["n_tokens"]
return total_tokens return total_tokens
@staticmethod @staticmethod