from math import log from fastapi import Request, HTTPException, Depends from fastapi.responses import JSONResponse from models.schemas import ChatCompletionRequest from services.openai_service import generate_completion from services.logging_service import log_llm_response from auth.security import protect_chat_api, generate_anti_abuse_token import logging logger = logging.getLogger(__name__) async def init_chat(request: Request): """Initialize chat and get anti-abuse token""" if request.client: logger.info(f"App initialized from client: {request.client.host}") current_token = request.session.get("antiAbuseToken") if not current_token: new_token = generate_anti_abuse_token() request.session["antiAbuseToken"] = new_token logger.info(f"Generated new antiAbuseToken for session: {new_token}") return JSONResponse({"chatToken": new_token}) else: return JSONResponse({"chatToken": current_token}) async def chat_completions(request_data: ChatCompletionRequest, request: Request): """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") try: openai_response = await generate_completion(request_data.messages, session_identifier) log_llm_response(request_data.user, openai_response) return JSONResponse({"response": openai_response}) except HTTPException as e: raise e except Exception as e: logger.error(f"Unexpected error in /api/chat/completions: {e}") raise HTTPException(status_code=500, detail="Error interno del servidor al procesar el chat.")