from typing import Any, Dict, cast from setup.easy_imports import ( Response, AsyncAPIView, APIView, MultiPartParser, extend_schema, ) from datetime import datetime from _utils.handle_files import handle_pdf_files_from_serializer, remove_pdf_temp_files from _utils.resumo_completo_cursor import ( get_llm_summary_answer_by_cursor_complete, ) from _utils.gerar_relatorio_modelo_usuario.prompts import prompt_auxiliar_inicio from .serializer import ( GerarDocumentoComPDFProprioSerializer, GerarDocumentoSerializer, ) import asyncio class GerarDocumentoView(AsyncAPIView): # parser_classes = [MultiPartParser] serializer = {} @extend_schema( request=GerarDocumentoSerializer, ) async def post(self, request): print(f"\n\nDATA E HORA DA REQUISIÇÃO: {datetime.now()}") print('request.data: ', request.data) serializer = GerarDocumentoSerializer(data=request.data) if serializer.is_valid(raise_exception=True): if not serializer.validated_data: raise ValueError("Erro no validated_data") async def proccess_data_after_response(): # await asyncio.sleep(0) data = cast(Dict[str, Any], serializer.validated_data) print("\ndata: ", data) self.serializer = data # data["prompt_auxiliar"] = ( # prompt_auxiliar_inicio + "\n" + data["prompt_auxiliar"] # ) # listaPDFs = handle_pdf_files_from_serializer(data["files"]) listaPDFs = [l["link_arquivo"] for l in data["files"]] print("\n\nlistaPDFs: ", listaPDFs) resposta_llm = await get_llm_summary_answer_by_cursor_complete( data, listaPDFs, True ) print("\n\nresposta_llm: ", resposta_llm) # remove_pdf_temp_files(listaPDFs) # print("PRÓXIMA LINHA ENVIA A RESPOSTA A QUEM FEZ A REQUISIÇÃO") # asyncio.create_task(proccess_data_after_response()) loop = asyncio.get_running_loop() loop.run_in_executor(None, lambda: asyncio.run(proccess_data_after_response())) return Response({"resposta": "Requisição está sendo processada em segundo plano"}) class GerarDocumentoComPDFProprioView(AsyncAPIView): parser_classes = [MultiPartParser] serializer = {} @extend_schema( request=GerarDocumentoComPDFProprioSerializer, ) async def post(self, request): print(f"\n\nDATA E HORA DA REQUISIÇÃO: {datetime.now()}") serializer = GerarDocumentoComPDFProprioSerializer(data=request.data) if serializer.is_valid(raise_exception=True): data = cast(Dict[str, Any], serializer.validated_data) print("\n\ndata: ", data) self.serializer = data listaPDFs = handle_pdf_files_from_serializer(data["files"]) resposta_llm = await get_llm_summary_answer_by_cursor_complete( data, listaPDFs ) print("\n\nresposta_llm: ", resposta_llm) remove_pdf_temp_files(listaPDFs) print("PRÓXIMA LINHA ENVIA A RESPOSTA A QUEM FEZ A REQUISIÇÃO") return Response({"resposta": resposta_llm})