| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- from fastapi import Request, HTTPException, Depends
- from fastapi.responses import JSONResponse
- from httpx import get
- from models.chat import ChatCompletionRequest
- from models.user import User
- from services.openai_service.openai_service import generate_completion
- from services.logging_service import log_llm_response, structured_logger, LogLevel
- from auth.security import get_current_user
- import logging
- from fastapi import APIRouter
- from config.messages import SuccessResponse
- logger = logging.getLogger(__name__)
- chat_router = APIRouter()
- @chat_router.post("/completions")
- async def chat_completions(request_data: ChatCompletionRequest, request: Request, current_user: User = Depends(get_current_user)):
- """Get chat completions from OpenAI"""
- # Uses session_token (which is the antiAbuseToken) as an identifier for logging
- session_identifier = request.session.get("antiAbuseToken", "unknown_session")
-
- logger.info(f"Chat completion request from user {current_user.email}")
-
- structured_logger.log_chat_event(
- f"Chat completion request from user {current_user.email}",
- LogLevel.INFO,
- {
- "user_id": current_user.id,
- "user_email": current_user.email,
- "session_identifier": session_identifier,
- "messages_count": len(request_data.messages),
- "user_agent": request.headers.get("user-agent", "unknown"),
- "request_user": request_data.user
- },
- user_id=current_user.id,
- user_email=current_user.email
- )
- try:
- openai_response = await generate_completion(
- request_data.messages,
- session_identifier,
- current_user.name,
- current_user.email
- )
-
- structured_logger.log_chat_event(
- f"Chat completion generated successfully",
- LogLevel.INFO,
- {
- "user_id": current_user.id,
- "user_email": current_user.email,
- "session_identifier": session_identifier,
- "response_length": len(openai_response),
- "messages_processed": len(request_data.messages)
- },
- user_id=current_user.id,
- user_email=current_user.email
- )
-
- # Legacy logging function
- log_llm_response(request_data.user, openai_response)
-
- logger.info(f"Chat completion successful for user {current_user.email}")
- return JSONResponse({"response": openai_response, "message": SuccessResponse.CHAT_RESPONSE_SUCCESS})
-
- except HTTPException as e:
- logger.error(f"HTTP error in chat completion for user {current_user.email}: {e.detail}")
- structured_logger.log_chat_event(
- f"Chat completion HTTP error",
- LogLevel.ERROR,
- {
- "user_id": current_user.id,
- "user_email": current_user.email,
- "session_identifier": session_identifier,
- "status_code": e.status_code,
- "error_detail": e.detail
- },
- user_id=current_user.id,
- user_email=current_user.email
- )
- raise
-
- except Exception as e:
- error_msg = f"Unexpected error in /api/chat/completions for user {current_user.email}: {e}"
- logger.error(error_msg)
-
- structured_logger.log_chat_event(
- f"Chat completion unexpected error",
- LogLevel.ERROR,
- {
- "user_id": current_user.id,
- "user_email": current_user.email,
- "session_identifier": session_identifier,
- "error": str(e),
- "error_type": type(e).__name__,
- "messages_count": len(request_data.messages)
- },
- user_id=current_user.id,
- user_email=current_user.email
- )
-
- raise HTTPException(status_code=500, detail="Error interno del servidor al procesar el chat.")
|