cevheri's picture
chore: format, improve logging, remove deprecated code
bcd6d73
from datetime import datetime
from app.mapper.base_mapper import BaseMapper
from app.model.chat_model import ChatCompletion, ChatMessageModel
from app.schema.chat_schema import ChatCompletionResponse, ChatCompletionRequest, ChatMessageResponse, ChoiceResponse
from loguru import logger
def to_message_schema(model: ChatMessageModel) -> ChatMessageResponse:
"""Convert ChatMessageModel to ChatMessageResponse schema."""
return ChatMessageResponse(
message_id=model.message_id,
role=model.role,
content=model.content,
figure=model.figure,
created_date=model.created_date,
)
class ChatMapper(BaseMapper[ChatCompletion, ChatCompletionResponse]):
"""Mapper for converting between ChatCompletion model and schema objects."""
def to_schema(self, model: ChatCompletion, convert_last_message: bool = False) -> ChatCompletionResponse:
"""Convert ChatCompletion model to ChatCompletionResponse schema."""
# Convert datetime to Unix timestamp
created_timestamp = int(model.created_date.timestamp()) if model.created_date else int(datetime.now().timestamp())
choices = []
if convert_last_message:
last_message = model.messages[-1]
choices.append(ChoiceResponse(index=0, message=to_message_schema(last_message), finish_reason="stop"))
else:
index = 0
for message in model.messages:
choices.append(ChoiceResponse(index=index, message=to_message_schema(message), finish_reason="stop"))
index += 1
return ChatCompletionResponse(completion_id=model.completion_id, model=model.model, created=created_timestamp, choices=choices)
def to_model(self, schema: ChatCompletionRequest) -> ChatCompletion:
"""Convert ChatCompletionRequest schema to ChatCompletion model."""
# Convert messages to ChatMessage objects
messages = []
if schema.messages:
for msg in schema.messages:
messages.append(ChatMessageModel(role=msg.role, content=msg.content, figure=None, message_id=None))
try:
return ChatCompletion(completion_id=schema.completion_id, model=schema.model, messages=messages, stream=schema.stream)
except Exception as e:
logger.error(f"Error converting ChatCompletionRequest to ChatCompletion: {e}")
raise