luanpoppe commited on
Commit
3d09051
·
1 Parent(s): 6876423

feat: adicionando mais testes

Browse files
_utils/gerar_documento_utils/contextual_retriever.py CHANGED
@@ -53,7 +53,7 @@ class ContextualRetriever:
53
  self.claude_api_key = os.environ.get("CLAUDE_API_KEY", "")
54
  self.claude_client = AsyncAnthropic(api_key=self.claude_api_key)
55
 
56
- async def llm_call_uma_lista_de_chunks(
57
  self,
58
  lista_com_20_chunks: List[DocumentChunk],
59
  resumo_auxiliar,
@@ -120,13 +120,13 @@ class ContextualRetriever:
120
  self.lista_contador.append(0)
121
  print("contador: ", len(self.lista_contador))
122
 
123
- result = await self.llm_call_uma_lista_de_chunks(
124
  lista_com_20_chunks, response_auxiliar_summary, axiom_instance
125
  )
126
 
127
  lista_chunks: List[ContextualizedChunk] = []
128
- for index, chunk in enumerate(lista_com_20_chunks):
129
- try:
130
  lista_chunks.append(
131
  ContextualizedChunk(
132
  contextual_summary=result[index][2],
@@ -139,12 +139,11 @@ class ContextualRetriever:
139
  context=result[index][1],
140
  )
141
  )
142
- except BaseException as e:
143
- print(
144
- f"ERRO EM UMA LISTA COM 20 CHUNKS CONTEXTUALS {index + 1}: {result} ------- {e}"
145
- )
146
 
147
- axiom_instance.send_axiom(f"UMA LISTA COM 20 CHUNKS: {lista_chunks}")
148
  return lista_chunks
149
 
150
  async def contextualize_all_chunks(
@@ -161,20 +160,23 @@ class ContextualRetriever:
161
  )
162
  )
163
 
164
- def processa_uma_lista_de_20_chunks(lista_com_20_chunks: List[DocumentChunk]):
165
- coroutine = self.contextualize_uma_lista_de_20_chunks(
166
- lista_com_20_chunks, response_auxiliar_summary, axiom_instance
167
- )
168
- return tg.create_task(coroutine)
169
-
170
  async with asyncio.TaskGroup() as tg:
 
 
 
 
 
 
 
 
 
171
  tasks = [
172
  processa_uma_lista_de_20_chunks(lista_com_20_chunks)
173
  for lista_com_20_chunks in lista_de_listas_cada_com_20_chunks
174
  ]
175
 
176
  # contextualized_chunks = [task.result() for task in tasks]
177
- contextualized_chunks = []
178
  for task in tasks:
179
  contextualized_chunks = contextualized_chunks + task.result()
180
 
 
53
  self.claude_api_key = os.environ.get("CLAUDE_API_KEY", "")
54
  self.claude_client = AsyncAnthropic(api_key=self.claude_api_key)
55
 
56
+ async def llm_call_uma_lista_de_20_chunks(
57
  self,
58
  lista_com_20_chunks: List[DocumentChunk],
59
  resumo_auxiliar,
 
120
  self.lista_contador.append(0)
121
  print("contador: ", len(self.lista_contador))
122
 
123
+ result = await self.llm_call_uma_lista_de_20_chunks(
124
  lista_com_20_chunks, response_auxiliar_summary, axiom_instance
125
  )
126
 
127
  lista_chunks: List[ContextualizedChunk] = []
128
+ try:
129
+ for index, chunk in enumerate(lista_com_20_chunks):
130
  lista_chunks.append(
131
  ContextualizedChunk(
132
  contextual_summary=result[index][2],
 
139
  context=result[index][1],
140
  )
141
  )
142
+ except BaseException as e:
143
+ axiom_instance.send_axiom(
144
+ f"ERRO EM UMA LISTA COM 20 CHUNKS CONTEXTUALS --------- lista: {lista_com_20_chunks} ------------ resultado da llm_call_uma_lista_de_20_chunks: {result} ------- erro: {e}"
145
+ )
146
 
 
147
  return lista_chunks
148
 
149
  async def contextualize_all_chunks(
 
160
  )
161
  )
162
 
 
 
 
 
 
 
163
  async with asyncio.TaskGroup() as tg:
164
+
165
+ def processa_uma_lista_de_20_chunks(
166
+ lista_com_20_chunks: List[DocumentChunk],
167
+ ):
168
+ coroutine = self.contextualize_uma_lista_de_20_chunks(
169
+ lista_com_20_chunks, response_auxiliar_summary, axiom_instance
170
+ )
171
+ return tg.create_task(coroutine)
172
+
173
  tasks = [
174
  processa_uma_lista_de_20_chunks(lista_com_20_chunks)
175
  for lista_com_20_chunks in lista_de_listas_cada_com_20_chunks
176
  ]
177
 
178
  # contextualized_chunks = [task.result() for task in tasks]
179
+ contextualized_chunks: List[ContextualizedChunk] = []
180
  for task in tasks:
181
  contextualized_chunks = contextualized_chunks + task.result()
182
 
_utils/gerar_documento_utils/tests/fixtures/lista_com_20_chunks.py CHANGED
The diff for this file is too large to render. See raw diff
 
_utils/gerar_documento_utils/tests/fixtures/mock_llm_call_uma_lista_de_20_chunks.py ADDED
@@ -0,0 +1,255 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ mock_llm_call_uma_lista_de_20_chunks_sucesso = [
2
+ [
3
+ 0,
4
+ "APELAÇÃO CRIMINAL",
5
+ "Este chunk apresenta os dados iniciais do processo de Apelação Criminal, incluindo o número, classe, órgão julgador, partes envolvidas (Estado da Bahia, Defensor Dativo, e Adenilton da Conceição Samuel), e os assuntos tratados (Honorários Advocatícios, Crimes de Trânsito). Ele se encaixa na descrição do resumo do processo, que trata da apelação do Estado da Bahia sobre os honorários do defensor dativo em um caso de crimes de trânsito.",
6
+ ],
7
+ [
8
+ 76915042,
9
+ "APELAÇÃO CRIMINAL",
10
+ "Este chunk lista uma série de intimações, sentenças, certidões e outros documentos relacionados ao processo, abrangendo um período de tempo considerável. Ele demonstra o andamento processual, desde a intimação da sentença até as alegações finais e a interposição da apelação, conforme descrito no resumo do processo.",
11
+ ],
12
+ [
13
+ 76827506,
14
+ "APELAÇÃO CRIMINAL",
15
+ "Este chunk apresenta o pronunciamento do Desembargador Relator Nartir Dantas Weber, que trata do recurso de apelação interposto pelo Estado da Bahia. Ele destaca que a controvérsia se refere a honorários advocatícios e que a intervenção do Ministério Público pode não ser necessária, alinhando-se com a questão central do processo: a responsabilidade do Estado pelo pagamento dos honorários.",
16
+ ],
17
+ [
18
+ 76747604,
19
+ "APELAÇÃO CRIMINAL",
20
+ "Este chunk é uma certidão de publicação no Diário de Justiça Eletrônico (DJe) referente ao processo, informando a disponibilização de um acórdão, decisão ou despacho. Ele se relaciona com o resumo do processo, que menciona as movimentações processuais e a publicação de decisões.",
21
+ ],
22
+ [
23
+ 76648181,
24
+ "APELAÇÃO CRIMINAL",
25
+ "Este chunk é uma certidão de publicação no DJe, informando sobre a disponibilização de um despacho. Ele menciona o artigo 224, § 2º, do CPC, que trata da contagem de prazos processuais, e se encaixa na descrição do resumo do processo, que acompanha as movimentações processuais.",
26
+ ],
27
+ [
28
+ 76647593,
29
+ "APELAÇÃO CRIMINAL",
30
+ "Este chunk é uma certidão de triagem inicial realizada pela Diretoria de Distribuição do 2º Grau, que verifica a regularidade dos dados cadastrais do processo. Ele se relaciona com o resumo do processo, que descreve o andamento processual e as etapas de análise dos documentos.",
31
+ ],
32
+ [
33
+ 76647591,
34
+ "APELAÇÃO CRIMINAL",
35
+ "Este chunk é uma certidão de triagem inicial, confirmando a conferência dos dados cadastrais do processo e identificando alterações necessárias. Ele se encaixa na descrição do resumo do processo, que acompanha as movimentações processuais e as etapas de análise dos documentos.",
36
+ ],
37
+ [
38
+ 76647590,
39
+ "APELAÇÃO CRIMINAL",
40
+ "Este chunk é um despacho do Juiz de Direito Leandro Ferreira de Moraes, intimando o advogado Ailton Silva Dantas para apresentar as contrarrazões ao recurso de apelação. Ele se encaixa no resumo do processo, que menciona a intimação do apelado para apresentar contrarrazões.",
41
+ ],
42
+ [
43
+ 76647588,
44
+ "APELAÇÃO CRIMINAL",
45
+ "Este chunk é uma certidão que atesta que o advogado Ailton Silva Dantas, apesar de devidamente intimado, permaneceu inerte, não apresentando as contrarrazões recursais. Ele se relaciona com o resumo do processo, que menciona a inércia do apelado após a intimação.",
46
+ ],
47
+ [
48
+ 76647583,
49
+ "APELAÇÃO CRIMINAL",
50
+ "Este chunk contém um comprovante de comunicação à Justiça Eleitoral sobre a condenação criminal de Adenilton da Conceição Samuel, mencionando os artigos 303 e 306 da Lei 9.503/97. Ele se encaixa no resumo do processo, que descreve os crimes pelos quais o réu foi condenado.",
51
+ ],
52
+ [
53
+ 76647583,
54
+ "APELAÇÃO CRIMINAL",
55
+ "Este chunk é a continuação da certidão, que informa o envio do ofício ao CEDEP (Centro de Documentação e Estatística Policial) sobre a condenação criminal de Adenilton da Conceição Samuel. Ele se relaciona com o resumo do processo, que descreve os crimes pelos quais o réu foi condenado e as comunicações oficiais.",
56
+ ],
57
+ [
58
+ 76647582,
59
+ "APELAÇÃO CRIMINAL",
60
+ "Este chunk é a continuação do ofício de comunicação da condenação criminal de Adenilton da Conceição Samuel ao CEDEP, detalhando a pena imposta. Ele se relaciona com o resumo do processo, que descreve os crimes pelos quais o réu foi condenado e as comunicações oficiais.",
61
+ ],
62
+ [
63
+ 76647579,
64
+ "APELAÇÃO CRIMINAL",
65
+ "Este chunk é uma certidão de trânsito em julgado da sentença condenatória para o Ministério Público em 21/08/2023 e para a defesa em 19/12/2023. Ele se encaixa no resumo do processo, que menciona o trânsito em julgado da sentença.",
66
+ ],
67
+ [
68
+ 76647578,
69
+ "APELAÇÃO CRIMINAL",
70
+ "Este chunk é uma certidão de intimação de Adenilton da Conceição Samuel sobre a sentença proferida. Ele se relaciona com o resumo do processo, que descreve as etapas processuais, incluindo as intimações.",
71
+ ],
72
+ [
73
+ 76647575,
74
+ "APELAÇÃO CRIMINAL",
75
+ "Este chunk é uma intimação judicial para o advogado Ailton Silva Dantas apresentar contrarrazões recursais. Ele se encaixa no resumo do processo, que menciona a intimação do apelado para apresentar contrarrazões.",
76
+ ],
77
+ [
78
+ 76647575,
79
+ "APELAÇÃO CRIMINAL",
80
+ "Este chunk é uma decisão do juiz Leandro Ferreira de Moraes que recebe o recurso de apelação interposto pela Procuradoria Geral do Estado da Bahia, com efeito suspensivo, e determina a intimação do apelado para apresentar contrarrazões. Ele se encaixa no resumo do processo, que descreve as etapas processuais, incluindo a decisão sobre o recurso.",
81
+ ],
82
+ [
83
+ 76647572,
84
+ "APELAÇÃO CRIMINAL",
85
+ "Este chunk é uma certidão que atesta a tempestividade da interposição do recurso de apelação. Ele se relaciona com o resumo do processo, que descreve a interposição do recurso pelo Estado da Bahia.",
86
+ ],
87
+ [
88
+ 76647571,
89
+ "APELAÇÃO CRIMINAL",
90
+ "Este chunk apresenta as razões do recurso de apelação interposto pelo Estado da Bahia, argumentando sobre o cabimento do recurso e a ilegitimidade do Estado para recorrer. Ele se encaixa no resumo do processo, que descreve os argumentos do Estado na apelação.",
91
+ ],
92
+ [
93
+ 76647571,
94
+ "APELAÇÃO CRIMINAL",
95
+ "Este chunk continua as razões do recurso, detalhando a preliminar de inobservância do Tema Repetitivo 984 do STJ, que trata da ausência de obrigatoriedade de observância da tabela da OAB para fixação de honorários de defensor dativo. Ele se relaciona com o resumo do processo, que menciona a alegação do Estado sobre o Tema Repetitivo 984.",
96
+ ],
97
+ [
98
+ 76647571,
99
+ "APELAÇÃO CRIMINAL",
100
+ "Este chunk continua a discussão sobre o Tema Repetitivo 984 do STJ, apresentando a ementa do julgado e os argumentos do Estado sobre a fixação dos honorários de defensor dativo. Ele se relaciona com o resumo do processo, que menciona a alegação do Estado sobre o Tema Repetitivo 984.",
101
+ ],
102
+ ]
103
+
104
+ mock_llm_call_uma_lista_de_20_chunks_sucesso_com_menos_itens = [
105
+ [
106
+ 0,
107
+ "APELAÇÃO CRIMINAL",
108
+ "Este chunk apresenta os dados iniciais do processo de Apelação Criminal, incluindo o número, classe, órgão julgador, partes envolvidas (Estado da Bahia, Defensor Dativo, e Adenilton da Conceição Samuel), e os assuntos tratados (Honorários Advocatícios, Crimes de Trânsito). Ele se encaixa na descrição do resumo do processo, que trata da apelação do Estado da Bahia sobre os honorários do defensor dativo em um caso de crimes de trânsito.",
109
+ ],
110
+ [
111
+ 76915042,
112
+ "APELAÇÃO CRIMINAL",
113
+ "Este chunk lista uma série de intimações, sentenças, certidões e outros documentos relacionados ao processo, abrangendo um período de tempo considerável. Ele demonstra o andamento processual, desde a intimação da sentença até as alegações finais e a interposição da apelação, conforme descrito no resumo do processo.",
114
+ ],
115
+ [
116
+ 76827506,
117
+ "APELAÇÃO CRIMINAL",
118
+ "Este chunk apresenta o pronunciamento do Desembargador Relator Nartir Dantas Weber, que trata do recurso de apelação interposto pelo Estado da Bahia. Ele destaca que a controvérsia se refere a honorários advocatícios e que a intervenção do Ministério Público pode não ser necessária, alinhando-se com a questão central do processo: a responsabilidade do Estado pelo pagamento dos honorários.",
119
+ ],
120
+ [
121
+ 76747604,
122
+ "APELAÇÃO CRIMINAL",
123
+ "Este chunk é uma certidão de publicação no Diário de Justiça Eletrônico (DJe) referente ao processo, informando a disponibilização de um acórdão, decisão ou despacho. Ele se relaciona com o resumo do processo, que menciona as movimentações processuais e a publicação de decisões.",
124
+ ],
125
+ [
126
+ 76648181,
127
+ "APELAÇÃO CRIMINAL",
128
+ "Este chunk é uma certidão de publicação no DJe, informando sobre a disponibilização de um despacho. Ele menciona o artigo 224, § 2º, do CPC, que trata da contagem de prazos processuais, e se encaixa na descrição do resumo do processo, que acompanha as movimentações processuais.",
129
+ ],
130
+ [
131
+ 76647593,
132
+ "APELAÇÃO CRIMINAL",
133
+ "Este chunk é uma certidão de triagem inicial realizada pela Diretoria de Distribuição do 2º Grau, que verifica a regularidade dos dados cadastrais do processo. Ele se relaciona com o resumo do processo, que descreve o andamento processual e as etapas de análise dos documentos.",
134
+ ],
135
+ [
136
+ 76647591,
137
+ "APELAÇÃO CRIMINAL",
138
+ "Este chunk é uma certidão de triagem inicial, confirmando a conferência dos dados cadastrais do processo e identificando alterações necessárias. Ele se encaixa na descrição do resumo do processo, que acompanha as movimentações processuais e as etapas de análise dos documentos.",
139
+ ],
140
+ ]
141
+
142
+ mock_llm_call_uma_lista_de_20_chunks_falha = [[""]]
143
+
144
+ mock_llm_call_uma_lista_de_20_chunks_falha_mais_de_20_chunks = [
145
+ [
146
+ 0,
147
+ "APELAÇÃO CRIMINAL",
148
+ "Este chunk apresenta os dados iniciais do processo de Apelação Criminal, incluindo o número, classe, órgão julgador, partes envolvidas (Estado da Bahia, Defensor Dativo, e Adenilton da Conceição Samuel), e os assuntos tratados (Honorários Advocatícios, Crimes de Trânsito). Ele se encaixa na descrição do resumo do processo, que trata da apelação do Estado da Bahia sobre os honorários do defensor dativo em um caso de crimes de trânsito.",
149
+ ],
150
+ [
151
+ 76915042,
152
+ "APELAÇÃO CRIMINAL",
153
+ "Este chunk lista uma série de intimações, sentenças, certidões e outros documentos relacionados ao processo, abrangendo um período de tempo considerável. Ele demonstra o andamento processual, desde a intimação da sentença até as alegações finais e a interposição da apelação, conforme descrito no resumo do processo.",
154
+ ],
155
+ [
156
+ 76827506,
157
+ "APELAÇÃO CRIMINAL",
158
+ "Este chunk apresenta o pronunciamento do Desembargador Relator Nartir Dantas Weber, que trata do recurso de apelação interposto pelo Estado da Bahia. Ele destaca que a controvérsia se refere a honorários advocatícios e que a intervenção do Ministério Público pode não ser necessária, alinhando-se com a questão central do processo: a responsabilidade do Estado pelo pagamento dos honorários.",
159
+ ],
160
+ [
161
+ 76747604,
162
+ "APELAÇÃO CRIMINAL",
163
+ "Este chunk é uma certidão de publicação no Diário de Justiça Eletrônico (DJe) referente ao processo, informando a disponibilização de um acórdão, decisão ou despacho. Ele se relaciona com o resumo do processo, que menciona as movimentações processuais e a publicação de decisões.",
164
+ ],
165
+ [
166
+ 76648181,
167
+ "APELAÇÃO CRIMINAL",
168
+ "Este chunk é uma certidão de publicação no DJe, informando sobre a disponibilização de um despacho. Ele menciona o artigo 224, § 2º, do CPC, que trata da contagem de prazos processuais, e se encaixa na descrição do resumo do processo, que acompanha as movimentações processuais.",
169
+ ],
170
+ [
171
+ 76647593,
172
+ "APELAÇÃO CRIMINAL",
173
+ "Este chunk é uma certidão de triagem inicial realizada pela Diretoria de Distribuição do 2º Grau, que verifica a regularidade dos dados cadastrais do processo. Ele se relaciona com o resumo do processo, que descreve o andamento processual e as etapas de análise dos documentos.",
174
+ ],
175
+ [
176
+ 76647591,
177
+ "APELAÇÃO CRIMINAL",
178
+ "Este chunk é uma certidão de triagem inicial, confirmando a conferência dos dados cadastrais do processo e identificando alterações necessárias. Ele se encaixa na descrição do resumo do processo, que acompanha as movimentações processuais e as etapas de análise dos documentos.",
179
+ ],
180
+ [
181
+ 76647590,
182
+ "APELAÇÃO CRIMINAL",
183
+ "Este chunk é um despacho do Juiz de Direito Leandro Ferreira de Moraes, intimando o advogado Ailton Silva Dantas para apresentar as contrarrazões ao recurso de apelação. Ele se encaixa no resumo do processo, que menciona a intimação do apelado para apresentar contrarrazões.",
184
+ ],
185
+ [
186
+ 76647588,
187
+ "APELAÇÃO CRIMINAL",
188
+ "Este chunk é uma certidão que atesta que o advogado Ailton Silva Dantas, apesar de devidamente intimado, permaneceu inerte, não apresentando as contrarrazões recursais. Ele se relaciona com o resumo do processo, que menciona a inércia do apelado após a intimação.",
189
+ ],
190
+ [
191
+ 76647583,
192
+ "APELAÇÃO CRIMINAL",
193
+ "Este chunk contém um comprovante de comunicação à Justiça Eleitoral sobre a condenação criminal de Adenilton da Conceição Samuel, mencionando os artigos 303 e 306 da Lei 9.503/97. Ele se encaixa no resumo do processo, que descreve os crimes pelos quais o réu foi condenado.",
194
+ ],
195
+ [
196
+ 76647583,
197
+ "APELAÇÃO CRIMINAL",
198
+ "Este chunk é a continuação da certidão, que informa o envio do ofício ao CEDEP (Centro de Documentação e Estatística Policial) sobre a condenação criminal de Adenilton da Conceição Samuel. Ele se relaciona com o resumo do processo, que descreve os crimes pelos quais o réu foi condenado e as comunicações oficiais.",
199
+ ],
200
+ [
201
+ 76647582,
202
+ "APELAÇÃO CRIMINAL",
203
+ "Este chunk é a continuação do ofício de comunicação da condenação criminal de Adenilton da Conceição Samuel ao CEDEP, detalhando a pena imposta. Ele se relaciona com o resumo do processo, que descreve os crimes pelos quais o réu foi condenado e as comunicações oficiais.",
204
+ ],
205
+ [
206
+ 76647579,
207
+ "APELAÇÃO CRIMINAL",
208
+ "Este chunk é uma certidão de trânsito em julgado da sentença condenatória para o Ministério Público em 21/08/2023 e para a defesa em 19/12/2023. Ele se encaixa no resumo do processo, que menciona o trânsito em julgado da sentença.",
209
+ ],
210
+ [
211
+ 76647578,
212
+ "APELAÇÃO CRIMINAL",
213
+ "Este chunk é uma certidão de intimação de Adenilton da Conceição Samuel sobre a sentença proferida. Ele se relaciona com o resumo do processo, que descreve as etapas processuais, incluindo as intimações.",
214
+ ],
215
+ [
216
+ 76647575,
217
+ "APELAÇÃO CRIMINAL",
218
+ "Este chunk é uma intimação judicial para o advogado Ailton Silva Dantas apresentar contrarrazões recursais. Ele se encaixa no resumo do processo, que menciona a intimação do apelado para apresentar contrarrazões.",
219
+ ],
220
+ [
221
+ 76647575,
222
+ "APELAÇÃO CRIMINAL",
223
+ "Este chunk é uma decisão do juiz Leandro Ferreira de Moraes que recebe o recurso de apelação interposto pela Procuradoria Geral do Estado da Bahia, com efeito suspensivo, e determina a intimação do apelado para apresentar contrarrazões. Ele se encaixa no resumo do processo, que descreve as etapas processuais, incluindo a decisão sobre o recurso.",
224
+ ],
225
+ [
226
+ 76647572,
227
+ "APELAÇÃO CRIMINAL",
228
+ "Este chunk é uma certidão que atesta a tempestividade da interposição do recurso de apelação. Ele se relaciona com o resumo do processo, que descreve a interposição do recurso pelo Estado da Bahia.",
229
+ ],
230
+ [
231
+ 76647571,
232
+ "APELAÇÃO CRIMINAL",
233
+ "Este chunk apresenta as razões do recurso de apelação interposto pelo Estado da Bahia, argumentando sobre o cabimento do recurso e a ilegitimidade do Estado para recorrer. Ele se encaixa no resumo do processo, que descreve os argumentos do Estado na apelação.",
234
+ ],
235
+ [
236
+ 76647571,
237
+ "APELAÇÃO CRIMINAL",
238
+ "Este chunk continua as razões do recurso, detalhando a preliminar de inobservância do Tema Repetitivo 984 do STJ, que trata da ausência de obrigatoriedade de observância da tabela da OAB para fixação de honorários de defensor dativo. Ele se relaciona com o resumo do processo, que menciona a alegação do Estado sobre o Tema Repetitivo 984.",
239
+ ],
240
+ [
241
+ 76647571,
242
+ "APELAÇÃO CRIMINAL",
243
+ "Este chunk continua a discussão sobre o Tema Repetitivo 984 do STJ, apresentando a ementa do julgado e os argumentos do Estado sobre a fixação dos honorários de defensor dativo. Ele se relaciona com o resumo do processo, que menciona a alegação do Estado sobre o Tema Repetitivo 984.",
244
+ ],
245
+ [
246
+ 76647571,
247
+ "APELAÇÃO CRIMINAL",
248
+ "Este chunk continua a discussão sobre o Tema Repetitivo 984 do STJ, apresentando a ementa do julgado e os argumentos do Estado sobre a fixação dos honorários de defensor dativo. Ele se relaciona com o resumo do processo, que menciona a alegação do Estado sobre o Tema Repetitivo 984.",
249
+ ],
250
+ [
251
+ 76647571,
252
+ "APELAÇÃO CRIMINAL",
253
+ "Este chunk continua a discussão sobre o Tema Repetitivo 984 do STJ, apresentando a ementa do julgado e os argumentos do Estado sobre a fixação dos honorários de defensor dativo. Ele se relaciona com o resumo do processo, que menciona a alegação do Estado sobre o Tema Repetitivo 984.",
254
+ ],
255
+ ]
_utils/gerar_documento_utils/tests/test_contextual_retriever_inside.py CHANGED
@@ -3,6 +3,7 @@ from _utils.gerar_documento_utils.contextual_retriever import (
3
  ContextualRetriever,
4
  ContextualRetrieverUtils,
5
  )
 
6
  from _utils.models.gerar_documento import RetrievalConfig
7
  from _utils.models.gerar_documento import (
8
  ContextualizedChunk,
@@ -20,6 +21,7 @@ from .fixtures.resposta_llm_com_20_chunks import (
20
  )
21
  from .fixtures.lista_com_20_chunks import lista_com_20_chunks_fixture
22
  from .fixtures.resumo_auxiliar import resumo_auxiliar_fixture
 
23
 
24
 
25
  config = RetrievalConfig(
@@ -94,7 +96,7 @@ class TestContextualRetrieverUtils:
94
  # mock_agpt_answer,
95
  # )
96
 
97
- # resultado = await self.context_retrieval.llm_call_uma_lista_de_chunks(
98
  # cenario_01_lista_com_20_chunks, cenario_01_resumo_auxiliar
99
  # )
100
  # assert all(len(item) == 3 for item in resultado)
@@ -186,18 +188,25 @@ class TestContextuRetriever:
186
  axiom.generate_new_uuid()
187
 
188
  @pytest.mark.asyncio
189
- async def test_llm_call_uma_lista_de_chunks_success(
190
  self,
191
  ):
192
- resultado = await self.context_retrieval.llm_call_uma_lista_de_chunks(
193
  lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
194
  )
195
 
196
  print("resultado: ", resultado)
197
  assert resultado
 
 
 
 
 
 
 
198
 
199
  @pytest.mark.asyncio
200
- async def test_llm_call_uma_lista_de_chunks_falha_01(self, monkeypatch):
201
  monkeypatch.setattr(
202
  self.context_retrieval.contextual_retriever_utils,
203
  "get_all_document_ids_and_contents",
@@ -212,9 +221,181 @@ class TestContextuRetriever:
212
  mock_agemini_answer,
213
  )
214
 
215
- resultado = await self.context_retrieval.llm_call_uma_lista_de_chunks(
216
  lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
217
  )
218
 
219
  print("resultado: ", resultado)
220
  assert resultado == [[""]]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  ContextualRetriever,
4
  ContextualRetrieverUtils,
5
  )
6
+ from _utils.gerar_documento_utils.llm_calls import agemini_answer
7
  from _utils.models.gerar_documento import RetrievalConfig
8
  from _utils.models.gerar_documento import (
9
  ContextualizedChunk,
 
21
  )
22
  from .fixtures.lista_com_20_chunks import lista_com_20_chunks_fixture
23
  from .fixtures.resumo_auxiliar import resumo_auxiliar_fixture
24
+ from .fixtures import mock_llm_call_uma_lista_de_20_chunks
25
 
26
 
27
  config = RetrievalConfig(
 
96
  # mock_agpt_answer,
97
  # )
98
 
99
+ # resultado = await self.context_retrieval.llm_call_uma_lista_de_20_chunks(
100
  # cenario_01_lista_com_20_chunks, cenario_01_resumo_auxiliar
101
  # )
102
  # assert all(len(item) == 3 for item in resultado)
 
188
  axiom.generate_new_uuid()
189
 
190
  @pytest.mark.asyncio
191
+ async def test_llm_call_uma_lista_de_20_chunks_success(
192
  self,
193
  ):
194
+ resultado = await self.context_retrieval.llm_call_uma_lista_de_20_chunks(
195
  lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
196
  )
197
 
198
  print("resultado: ", resultado)
199
  assert resultado
200
+ assert len(resultado) == 20
201
+ for r in resultado:
202
+ assert isinstance(r[0], int)
203
+ assert isinstance(r[1], str)
204
+ assert isinstance(r[2], str)
205
+ assert len(r[1]) > 0
206
+ assert len(r[2]) > 0
207
 
208
  @pytest.mark.asyncio
209
+ async def test_llm_call_uma_lista_de_20_chunks_falha_01(self, monkeypatch):
210
  monkeypatch.setattr(
211
  self.context_retrieval.contextual_retriever_utils,
212
  "get_all_document_ids_and_contents",
 
221
  mock_agemini_answer,
222
  )
223
 
224
+ resultado = await self.context_retrieval.llm_call_uma_lista_de_20_chunks(
225
  lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
226
  )
227
 
228
  print("resultado: ", resultado)
229
  assert resultado == [[""]]
230
+
231
+ @pytest.mark.asyncio
232
+ async def test_llm_call_uma_lista_de_20_chunks_falha_02(self, monkeypatch):
233
+ count = 0
234
+
235
+ async def mock_agemini_answer(prompt, modelo):
236
+ nonlocal count
237
+ if count < 3:
238
+ count += 1
239
+ return "texto incorreto"
240
+ count += 1
241
+ return await agemini_answer(prompt, modelo)
242
+
243
+ monkeypatch.setattr(
244
+ "_utils.gerar_documento_utils.contextual_retriever.agemini_answer",
245
+ mock_agemini_answer,
246
+ )
247
+
248
+ resultado = await self.context_retrieval.llm_call_uma_lista_de_20_chunks(
249
+ lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
250
+ )
251
+
252
+ print("resultado: ", resultado)
253
+ assert resultado
254
+ assert len(resultado) == 20
255
+ for r in resultado:
256
+ assert isinstance(r[0], int)
257
+ assert isinstance(r[1], str)
258
+ assert isinstance(r[2], str)
259
+ assert len(r[1]) > 0
260
+ assert len(r[2]) > 0
261
+
262
+ @pytest.mark.asyncio
263
+ async def test_llm_call_uma_lista_de_20_chunks_falha_03(self, monkeypatch):
264
+ async def mock_agemini_answer(prompt, modelo):
265
+ return "texto incorreto"
266
+
267
+ monkeypatch.setattr(
268
+ "_utils.gerar_documento_utils.contextual_retriever.agemini_answer",
269
+ mock_agemini_answer,
270
+ )
271
+
272
+ resultado = await self.context_retrieval.llm_call_uma_lista_de_20_chunks(
273
+ lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
274
+ )
275
+
276
+ print("resultado: ", resultado)
277
+ assert resultado == [[""]]
278
+
279
+ @pytest.mark.asyncio
280
+ async def test_llm_call_uma_lista_de_20_chunks_falha_04(self, monkeypatch):
281
+ async def mock_agemini_answer(prompt, modelo):
282
+ raise Exception("Erro simulado")
283
+
284
+ monkeypatch.setattr(
285
+ "_utils.gerar_documento_utils.contextual_retriever.agemini_answer",
286
+ mock_agemini_answer,
287
+ )
288
+
289
+ resultado = await self.context_retrieval.llm_call_uma_lista_de_20_chunks(
290
+ lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
291
+ )
292
+
293
+ print("resultado: ", resultado)
294
+ assert resultado == [[""]]
295
+
296
+ @pytest.mark.asyncio
297
+ async def test_contextualize_uma_lista_de_20_chunks_success(self, monkeypatch):
298
+ async def mock_llm_call_uma_lista_de_20_chunks_function(p1, p2, p3):
299
+ return (
300
+ mock_llm_call_uma_lista_de_20_chunks.mock_llm_call_uma_lista_de_20_chunks_sucesso
301
+ )
302
+
303
+ monkeypatch.setattr(
304
+ self.context_retrieval,
305
+ "llm_call_uma_lista_de_20_chunks",
306
+ mock_llm_call_uma_lista_de_20_chunks_function,
307
+ )
308
+ resultado = await self.context_retrieval.contextualize_uma_lista_de_20_chunks(
309
+ lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
310
+ )
311
+
312
+ print("resultado: ", resultado)
313
+ assert resultado
314
+ assert len(resultado) == 20
315
+ for r in resultado:
316
+ assert isinstance(r, ContextualizedChunk)
317
+ assert len(r.contextual_summary) > 0
318
+ assert len(r.chunk_id) > 0
319
+ assert len(r.context) > 0
320
+ assert len(r.content) > 0
321
+
322
+ @pytest.mark.asyncio
323
+ async def test_contextualize_uma_lista_de_20_chunks_success_com_menos_chunks(
324
+ self, monkeypatch
325
+ ):
326
+ mock = (
327
+ mock_llm_call_uma_lista_de_20_chunks.mock_llm_call_uma_lista_de_20_chunks_sucesso_com_menos_itens
328
+ )
329
+
330
+ async def mock_llm_call_uma_lista_de_20_chunks_function(p1, p2, p3):
331
+ return mock
332
+
333
+ monkeypatch.setattr(
334
+ self.context_retrieval,
335
+ "llm_call_uma_lista_de_20_chunks",
336
+ mock_llm_call_uma_lista_de_20_chunks_function,
337
+ )
338
+ resultado = await self.context_retrieval.contextualize_uma_lista_de_20_chunks(
339
+ lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
340
+ )
341
+
342
+ print("resultado: ", resultado)
343
+ assert resultado
344
+ assert len(resultado) == len(mock)
345
+ for r in resultado:
346
+ assert isinstance(r, ContextualizedChunk)
347
+ assert len(r.contextual_summary) > 0
348
+ assert len(r.chunk_id) > 0
349
+ assert len(r.context) > 0
350
+ assert len(r.content) > 0
351
+
352
+ @pytest.mark.asyncio
353
+ async def test_contextualize_uma_lista_de_20_chunks_success_com_mais_chunks(
354
+ self, monkeypatch
355
+ ):
356
+ mock = (
357
+ mock_llm_call_uma_lista_de_20_chunks.mock_llm_call_uma_lista_de_20_chunks_falha_mais_de_20_chunks
358
+ )
359
+
360
+ async def mock_llm_call_uma_lista_de_20_chunks_function(p1, p2, p3):
361
+ return mock
362
+
363
+ monkeypatch.setattr(
364
+ self.context_retrieval,
365
+ "llm_call_uma_lista_de_20_chunks",
366
+ mock_llm_call_uma_lista_de_20_chunks_function,
367
+ )
368
+ resultado = await self.context_retrieval.contextualize_uma_lista_de_20_chunks(
369
+ lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
370
+ )
371
+
372
+ print("resultado: ", resultado)
373
+ assert resultado
374
+ assert len(resultado) == 20
375
+ for r in resultado:
376
+ assert isinstance(r, ContextualizedChunk)
377
+ assert len(r.contextual_summary) > 0
378
+ assert len(r.chunk_id) > 0
379
+ assert len(r.context) > 0
380
+ assert len(r.content) > 0
381
+
382
+ @pytest.mark.asyncio
383
+ async def test_contextualize_uma_lista_de_20_chunks_falha(self, monkeypatch):
384
+ mock = (
385
+ mock_llm_call_uma_lista_de_20_chunks.mock_llm_call_uma_lista_de_20_chunks_falha
386
+ )
387
+
388
+ async def mock_llm_call_uma_lista_de_20_chunks_function(p1, p2, p3):
389
+ return mock
390
+
391
+ monkeypatch.setattr(
392
+ self.context_retrieval,
393
+ "llm_call_uma_lista_de_20_chunks",
394
+ mock_llm_call_uma_lista_de_20_chunks_function,
395
+ )
396
+ resultado = await self.context_retrieval.contextualize_uma_lista_de_20_chunks(
397
+ lista_com_20_chunks_fixture, resumo_auxiliar_fixture, self.axiom
398
+ )
399
+
400
+ print("resultado: ", resultado)
401
+ assert resultado == []
tests/gerar_relatorio_modelo_usuario/test_contextual_retriever.py CHANGED
@@ -80,8 +80,8 @@ class TestContextualRetriever:
80
  print('\n\nresultado[0]', resultado[0])
81
 
82
  @pytest.mark.asyncio
83
- async def test_llm_call_uma_lista_de_chunks(self):
84
- resultado = await self.context_retrieval.llm_call_uma_lista_de_chunks(
85
  cenario_01_lista_com_20_chunks, cenario_01_resumo_auxiliar
86
  )
87
  print("resultado: ", resultado)
@@ -171,7 +171,7 @@ class TestContextualRetriever:
171
  mock_agpt_answer,
172
  )
173
 
174
- resultado = await self.context_retrieval.llm_call_uma_lista_de_chunks(
175
  cenario_01_lista_com_20_chunks, cenario_01_resumo_auxiliar
176
  )
177
  assert all(len(item) == 3 for item in resultado)
 
80
  print('\n\nresultado[0]', resultado[0])
81
 
82
  @pytest.mark.asyncio
83
+ async def test_llm_call_uma_lista_de_20_chunks(self):
84
+ resultado = await self.context_retrieval.llm_call_uma_lista_de_20_chunks(
85
  cenario_01_lista_com_20_chunks, cenario_01_resumo_auxiliar
86
  )
87
  print("resultado: ", resultado)
 
171
  mock_agpt_answer,
172
  )
173
 
174
+ resultado = await self.context_retrieval.llm_call_uma_lista_de_20_chunks(
175
  cenario_01_lista_com_20_chunks, cenario_01_resumo_auxiliar
176
  )
177
  assert all(len(item) == 3 for item in resultado)