chat.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from math import log
  2. from fastapi import Request, HTTPException, Depends
  3. from fastapi.responses import JSONResponse
  4. from models.schemas import ChatCompletionRequest
  5. from services.openai_service import generate_completion
  6. from services.logging_service import log_llm_response
  7. from auth.security import protect_chat_api, generate_anti_abuse_token
  8. import logging
  9. logger = logging.getLogger(__name__)
  10. async def init_chat(request: Request):
  11. """Initialize chat and get anti-abuse token"""
  12. if request.client:
  13. logger.info(f"App initialized from client: {request.client.host}")
  14. current_token = request.session.get("antiAbuseToken")
  15. if not current_token:
  16. new_token = generate_anti_abuse_token()
  17. request.session["antiAbuseToken"] = new_token
  18. logger.info(f"Generated new antiAbuseToken for session: {new_token}")
  19. return JSONResponse({"chatToken": new_token})
  20. else:
  21. return JSONResponse({"chatToken": current_token})
  22. async def chat_completions(request_data: ChatCompletionRequest, request: Request):
  23. """Get chat completions from OpenAI"""
  24. # Uses session_token (which is the antiAbuseToken) as an identifier for logging
  25. session_identifier = request.session.get("antiAbuseToken", "unknown_session")
  26. try:
  27. openai_response = await generate_completion(request_data.messages, session_identifier)
  28. log_llm_response(request_data.user, openai_response)
  29. return JSONResponse({"response": openai_response})
  30. except HTTPException as e:
  31. raise e
  32. except Exception as e:
  33. logger.error(f"Unexpected error in /api/chat/completions: {e}")
  34. raise HTTPException(status_code=500, detail="Error interno del servidor al procesar el chat.")