File size: 5,822 Bytes
4e93adb
 
 
4cd3056
ca8a144
 
408e821
ca8a144
408e821
4e93adb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4d3bceb
4e93adb
4d3bceb
4e93adb
 
 
 
 
 
 
 
 
 
 
4cd3056
e4d76bf
4e93adb
7dc6d22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1fd7b67
 
 
 
 
ca8a144
1fd7b67
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ca8a144
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4e93adb
 
 
4dcf767
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
from rest_framework.views import APIView
import tempfile, os
from rest_framework.response import Response

from _utils.resumo_completo_cursor import get_llm_summary_answer_by_cursor_complete
from _utils.resumo_simples_cursor import get_llm_summary_answer_by_cursor
from _utils.utils import DEFAULT_SYSTEM_PROMPT
from .serializer import ResumoCursorCompeltoSerializer, ResumoPDFSerializer, ResumoCursorSerializer
from _utils.main import get_llm_answer_summary, get_llm_answer_summary_with_embedding
from setup.environment import default_model
from rest_framework.parsers import MultiPartParser
from drf_spectacular.utils import extend_schema


class ResumoView(APIView):
  parser_classes = [MultiPartParser]

  @extend_schema(
    request=ResumoPDFSerializer,
  )
  def post(self, request):
    serializer = ResumoPDFSerializer(data=request.data)
    if serializer.is_valid(raise_exception=True):
        listaPDFs = []
        data = serializer.validated_data
        model = serializer.validated_data.get("model", default_model)
        print('serializer.validated_data: ', serializer.validated_data)

        for file in serializer.validated_data['files']:
            print("file: ", file)
            file.seek(0)
            with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as temp_file: # Create a temporary file to save the uploaded PDF
                for chunk in file.chunks(): # Write the uploaded file content to the temporary file
                    temp_file.write(chunk)
                temp_file_path = temp_file.name  # Get the path of the temporary file
                listaPDFs.append(temp_file_path)
            # print('listaPDFs: ', listaPDFs)

        system_prompt = data.get("system_prompt", DEFAULT_SYSTEM_PROMPT)
        resposta_llm = get_llm_answer_summary(system_prompt, data["user_message"], listaPDFs, model=model, isIterativeRefinement=data["iterative_refinement"])

        for file in listaPDFs:
            os.remove(file)

        return Response({"resposta": resposta_llm})

class ResumoEmbeddingView(APIView):
  parser_classes = [MultiPartParser]

  @extend_schema(
    request=ResumoPDFSerializer,
  )
  def post(self, request):
    serializer = ResumoPDFSerializer(data=request.data)
    if serializer.is_valid(raise_exception=True):
        listaPDFs = []
        data = serializer.validated_data
        model = serializer.validated_data.get("model", default_model)
        print('serializer.validated_data: ', serializer.validated_data)

        for file in serializer.validated_data['files']:
            file.seek(0)
            with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as temp_file: # Create a temporary file to save the uploaded PDF
                for chunk in file.chunks(): # Write the uploaded file content to the temporary file
                    temp_file.write(chunk)
                temp_file_path = temp_file.name  # Get the path of the temporary file
                listaPDFs.append(temp_file_path)
        print('listaPDFs: ', listaPDFs)

        system_prompt = data.get("system_prompt", DEFAULT_SYSTEM_PROMPT)
        resposta_llm = get_llm_answer_summary_with_embedding(system_prompt, data["user_message"], listaPDFs, model=model, isIterativeRefinement=data["iterative_refinement"])

        for file in listaPDFs:
            os.remove(file)

        return Response({"resposta": resposta_llm})

class ResumoSimplesCursorView(APIView):
  parser_classes = [MultiPartParser]

  @extend_schema(
    request=ResumoCursorSerializer,
  )
  def post(self, request):
    serializer = ResumoCursorSerializer(data=request.data)
    if serializer.is_valid(raise_exception=True):
        listaPDFs = []
        data = serializer.validated_data
        print('\nserializer.validated_data: ', serializer.validated_data)

        for file in serializer.validated_data['files']:
            file.seek(0)
            with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as temp_file: # Create a temporary file to save the uploaded PDF
                for chunk in file.chunks(): # Write the uploaded file content to the temporary file
                    temp_file.write(chunk)
                temp_file_path = temp_file.name  # Get the path of the temporary file
                listaPDFs.append(temp_file_path)
        print('listaPDFs: ', listaPDFs)

        resposta_llm = get_llm_summary_answer_by_cursor(data, listaPDFs)

        for file in listaPDFs:
            os.remove(file)

        return Response({"resposta": resposta_llm})

class ResumoSimplesCursorCompletoView(APIView):
  parser_classes = [MultiPartParser]

  @extend_schema(
    request=ResumoCursorCompeltoSerializer,
  )
  def post(self, request):
    serializer = ResumoCursorCompeltoSerializer(data=request.data)
    if serializer.is_valid(raise_exception=True):
        print('\n\n\n')
        print('serializer.validated_data: ', serializer.validated_data)
        print('\n\n\n')
        listaPDFs = []
        data = serializer.validated_data
        print('\nserializer.validated_data: ', serializer.validated_data)

        for file in serializer.validated_data['files']:
            file.seek(0)
            with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as temp_file: # Create a temporary file to save the uploaded PDF
                for chunk in file.chunks(): # Write the uploaded file content to the temporary file
                    temp_file.write(chunk)
                temp_file_path = temp_file.name  # Get the path of the temporary file
                listaPDFs.append(temp_file_path)
        print('listaPDFs: ', listaPDFs)

        resposta_llm = get_llm_summary_answer_by_cursor_complete(data, listaPDFs)

        for file in listaPDFs:
            os.remove(file)

        return Response({"resposta": resposta_llm})