Spaces:
Running
Running
luanpoppe
commited on
Commit
·
3d09051
1
Parent(s):
6876423
feat: adicionando mais testes
Browse files- _utils/gerar_documento_utils/contextual_retriever.py +18 -16
- _utils/gerar_documento_utils/tests/fixtures/lista_com_20_chunks.py +0 -0
- _utils/gerar_documento_utils/tests/fixtures/mock_llm_call_uma_lista_de_20_chunks.py +255 -0
- _utils/gerar_documento_utils/tests/test_contextual_retriever_inside.py +186 -5
- tests/gerar_relatorio_modelo_usuario/test_contextual_retriever.py +3 -3
_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
|
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.
|
124 |
lista_com_20_chunks, response_auxiliar_summary, axiom_instance
|
125 |
)
|
126 |
|
127 |
lista_chunks: List[ContextualizedChunk] = []
|
128 |
-
|
129 |
-
|
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 |
-
|
143 |
-
|
144 |
-
|
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.
|
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
|
190 |
self,
|
191 |
):
|
192 |
-
resultado = await self.context_retrieval.
|
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
|
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.
|
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
|
84 |
-
resultado = await self.context_retrieval.
|
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.
|
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)
|