| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- 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.")
|