from datetime import datetime
from _utils.custom_exception_handler import custom_exception_handler_without_api_handler
from _utils.gerar_documento import gerar_documento
from _utils.gerar_documento_utils.GerarDocumento import (
GerarDocumento,
GerarDocumentoUtils,
)
from _utils.langchain_utils.Prompt_class import Prompt
from _utils.utils import convert_markdown_to_HTML
from setup.logging import Axiom
from setup.easy_imports import (
Response,
AsyncAPIView,
extend_schema,
)
from simple_llm.serializer import SimpleLLMSerializer
class SimpleLLMView(AsyncAPIView):
# parser_classes = [MultiPartParser]
serializer = {}
axiom_instance = Axiom()
@extend_schema(
request=SimpleLLMSerializer,
)
async def post(self, request):
try:
self.axiom_instance.generate_new_uuid()
print(f"\n\nDATA E HORA DA REQUISIÇÃO: {datetime.now()}")
self.axiom_instance.send_axiom(
f"COMEÇOU NOVA REQUISIÇÃO - request.data: {request.data}"
)
serializer = SimpleLLMSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
obj = serializer.get_obj() # type: ignore
if not serializer.validated_data:
raise ValueError("Erro no validated_data")
self.serializer = obj
listaPDFs = [l.link_arquivo for l in obj.files]
self.axiom_instance.send_axiom(f"listaPDFs: {listaPDFs}")
summarizer = GerarDocumentoUtils(self.axiom_instance)
prompt_instance = Prompt()
prompt = prompt_instance.create_and_invoke_prompt(
obj.prompt,
dynamic_dict={"context": obj.user_text},
)
resposta_llm = (
await summarizer.checar_se_resposta_vazia_do_documento_final(
obj.llm_ultimas_requests, prompt.to_string()
)
)
self.axiom_instance.send_axiom(f"resposta_llm: {resposta_llm}")
texto_completo_como_html = convert_markdown_to_HTML(
resposta_llm
).replace("resposta_segunda_etapa:", "
")
self.axiom_instance.send_axiom(
f"texto_completo_como_html: {texto_completo_como_html}"
)
return Response({"resposta": texto_completo_como_html})
except Exception as e:
custom_exception_handler_without_api_handler(
e, serializer, self.axiom_instance
)
raise