Spaces:
Sleeping
Sleeping
luanpoppe
commited on
Commit
·
a1c6081
1
Parent(s):
903083d
fix: converter texto final markdown para HTML
Browse files- _utils/resumo_completo_cursor.py +8 -3
- _utils/utils.py +12 -0
- tests/fixtures/resposta_final_como_markdown.py +1 -0
- tests/test_utils.py +26 -0
_utils/resumo_completo_cursor.py
CHANGED
@@ -18,6 +18,8 @@ from _utils.models.gerar_relatorio import (
|
|
18 |
)
|
19 |
import markdown
|
20 |
|
|
|
|
|
21 |
def reciprocal_rank_fusion(result_lists, weights=None):
|
22 |
"""Combine multiple ranked lists using reciprocal rank fusion"""
|
23 |
fused_scores = {}
|
@@ -122,22 +124,25 @@ async def get_llm_summary_answer_by_cursor_complete(
|
|
122 |
x["source"]["text"] = x["source"]["text"][0:200]
|
123 |
x["source"]["context"] = x["source"]["context"][0:200]
|
124 |
|
|
|
|
|
|
|
125 |
if isBubble:
|
126 |
print("COMEÇANDO A REQUISIÇÃO FINAL PARA O BUBBLE")
|
127 |
enviar_resposta_final(
|
128 |
serializer["doc_id"],
|
129 |
serializer["form_response_id"],
|
130 |
serializer["version"],
|
131 |
-
|
132 |
False,
|
133 |
)
|
134 |
print("TERMINOU A REQUISIÇÃO FINAL PARA O BUBBLE")
|
135 |
|
136 |
return {
|
137 |
-
"texto_completo":
|
138 |
"resultado": structured_summaries,
|
139 |
"parametros-utilizados": gerar_resposta_compilada(serializer),
|
140 |
}
|
141 |
except Exception as e:
|
142 |
custom_exception_handler_wihout_api_handler(e, serializer)
|
143 |
-
raise
|
|
|
18 |
)
|
19 |
import markdown
|
20 |
|
21 |
+
from _utils.utils import convert_markdown_to_HTML
|
22 |
+
|
23 |
def reciprocal_rank_fusion(result_lists, weights=None):
|
24 |
"""Combine multiple ranked lists using reciprocal rank fusion"""
|
25 |
fused_scores = {}
|
|
|
124 |
x["source"]["text"] = x["source"]["text"][0:200]
|
125 |
x["source"]["context"] = x["source"]["context"][0:200]
|
126 |
|
127 |
+
texto_completo_como_html = convert_markdown_to_HTML(texto_completo)
|
128 |
+
print("\ntexto_completo_como_html", texto_completo_como_html)
|
129 |
+
|
130 |
if isBubble:
|
131 |
print("COMEÇANDO A REQUISIÇÃO FINAL PARA O BUBBLE")
|
132 |
enviar_resposta_final(
|
133 |
serializer["doc_id"],
|
134 |
serializer["form_response_id"],
|
135 |
serializer["version"],
|
136 |
+
texto_completo_como_html,
|
137 |
False,
|
138 |
)
|
139 |
print("TERMINOU A REQUISIÇÃO FINAL PARA O BUBBLE")
|
140 |
|
141 |
return {
|
142 |
+
"texto_completo": texto_completo_como_html,
|
143 |
"resultado": structured_summaries,
|
144 |
"parametros-utilizados": gerar_resposta_compilada(serializer),
|
145 |
}
|
146 |
except Exception as e:
|
147 |
custom_exception_handler_wihout_api_handler(e, serializer)
|
148 |
+
raise
|
_utils/utils.py
CHANGED
@@ -14,6 +14,7 @@ from typing import List
|
|
14 |
import numpy as np
|
15 |
import openai
|
16 |
import pandas as pd
|
|
|
17 |
|
18 |
os.environ["LANGCHAIN_TRACING_V2"]="true"
|
19 |
os.environ["LANGCHAIN_ENDPOINT"]="https://api.smith.langchain.com"
|
@@ -192,3 +193,14 @@ Do not pass in the response part of the instructions that you received
|
|
192 |
Generate the response with at least 10000 characteres
|
193 |
The content to be summarized is as follows:
|
194 |
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
import numpy as np
|
15 |
import openai
|
16 |
import pandas as pd
|
17 |
+
import markdown
|
18 |
|
19 |
os.environ["LANGCHAIN_TRACING_V2"]="true"
|
20 |
os.environ["LANGCHAIN_ENDPOINT"]="https://api.smith.langchain.com"
|
|
|
193 |
Generate the response with at least 10000 characteres
|
194 |
The content to be summarized is as follows:
|
195 |
"""
|
196 |
+
|
197 |
+
|
198 |
+
def convert_markdown_to_HTML(text: str):
|
199 |
+
texto_inicial = (
|
200 |
+
text.replace("```", "")
|
201 |
+
.replace("<diagnostico_processual>", "")
|
202 |
+
.replace("</diagnostico_processual>", "")
|
203 |
+
.replace("xml", "")
|
204 |
+
)
|
205 |
+
html = markdown.markdown(texto_inicial)
|
206 |
+
return html
|
tests/fixtures/resposta_final_como_markdown.py
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
resposta_final_como_markdown = '\n\n```\n<diagnostico_processual>\n**I. Introdução**\n*DIAGNÓSTICO PROCESSUAL*\nProcesso n.º 8139525-37.2023.8.05.0001\nJuizado Especial da Fazenda Pública - TJBA\nO presente caso trata de embargos de declaração opostos por ADEILTON RODRIGUES DALMEIDA contra a sentença proferida nos autos da ação que move em face do MUNICÍPIO DE SALVADOR, visando à restituição de valores pagos a título de Imposto sobre Transmissão de Bens Imóveis (ITIV), alegândo cobrança indevida.\nO Embargante alega omissão na sentença quanto ao pedido de devolução em dobro dos valores cobrados indevidamente e quanto ao pedido de indenização por danos morais.\nII. Análise dos Pressupostos Formais\nOs embargos de declaração foram interpostos tempestivamente, conforme se depreende da análise da data da publicação da sentença e da data da interposição dos embargos, respeitando o prazo de 5 (cinco) dias úteis previsto no artigo 1.023 do Código de Processo Civil.\nQuanto à adequação do objeto, verifica-se que o Embargante aponta omissão na sentença, o que se enquadra nas hipóteses de cabimento dos embargos de declaração, conforme o artigo 1.022, II, do CPC.\nIII. Exame de Mérito\nO Embargante sustenta que a sentença é omissa, pois não se manifestou sobre o pedido de devolução em dobro dos valores cobrados indevidamente e sobre o pedido de indenização por danos morais.\nAnalisando a sentença (IDs 451455254 e 451552279), constata-se que, de fato, o magistrado *a quo* julgou procedente o pedido de restituição do valor pago a maior a título de ITIV, mas silenciou quanto aos demais pedidos formulados na inicial, quais sejam, a devolução em dobro e a indenização por danos morais.\nA omissão configura um vício sanável por meio dos embargos de declaração, pois o juiz tem o dever de se manifestar sobre todos os pedidos formulados pelas partes, ainda que para indeferi-los. A ausência de manifestação impede a compreensão integral da decisão e dificulta o exercício do direito de recurso.\nNão se vislumbra, no caso, tentativa de rediscussão do mérito, mas sim a busca por um pronunciamento judicial sobre questões que não foram devidamente apreciadas na sentença.\nIV. Jurisprudência Aplicável\nA jurisprudência é pacífica no sentido de que a omissão é causa para o acolhimento dos embargos de declaração. O Superior Tribunal de Justiça (STJ) tem reiteradamente decidido que o juiz deve se manifestar sobre todos os pedidos formulados pelas partes, sob pena de omissão.\n"PROCESSUAL CIVIL. EMBARGOS DE DECLARAÇÃO. OMISSÃO. OCORRÊNCIA.\n1. Os embargos de declaração são cabíveis quando houver obscuridade, contradição, omissão ou erro material no julgado (art. 1.022 do CPC/2015).\n2. Verificada a omissão no acórdão embargado, impõe-se o acolhimento dos embargos para que seja suprido o vício." (EDcl no AgInt no AREsp 1688454/SP, Rel. Ministro OG FERNANDES, SEGUNDA TURMA, julgado em 24/08/2020, DJe 31/08/2020)\nV. **Conclusão e Sugestão de Decisão**\nDiante do exposto, sugere-se o acolhimento parcial dos embargos de declaração, para sanar a omissão apontada, complementando a sentença para que o magistrado se manifeste expressamente sobre os pedidos de devolução em dobro dos valores cobrados indevidamente e de indenização por danos morais.\nNo mérito, quanto ao pedido de devolução em dobro, considerando a ausência de comprovação de má-fé por parte do Município, o pedido pode ser indeferido, determinando-se a devolução simples do valor pago a maior, devidamente corrigido.\nQuanto ao pedido de indenização por danos morais, é necessário analisar se a cobrança indevida do ITIV gerou algum abalo moral ao Embargante, além do mero dissabor. A jurisprudência tem entendido que a simples cobrança indevida de tributo não gera, por si só, dano moral indenizável, sendo necessária a comprovação de um prejuízo extraordinário. Caso não haja comprovação de tal prejuízo, o pedido pode ser indeferido.\nVI. Observações Adicionais\nConsiderando que o acolhimento dos embargos de declaração implica a modificação da sentença, ainda que para indeferir os pedidos omissos, entende-se desnecessária a manifestação da parte contrária, uma vez que a decisão final não lhe será mais prejudicial do que a decisão original.\n</diagnostico_processual>\n```\n'
|
tests/test_utils.py
ADDED
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import pytest
|
2 |
+
import os
|
3 |
+
from _utils.splitters.Splitter_class import Splitter
|
4 |
+
from _utils.models.gerar_relatorio import (
|
5 |
+
DocumentChunk,
|
6 |
+
)
|
7 |
+
from _utils.utils import convert_markdown_to_HTML
|
8 |
+
from tests.fixtures.resposta_final_como_markdown import resposta_final_como_markdown
|
9 |
+
|
10 |
+
|
11 |
+
class TestUtils:
|
12 |
+
@pytest.mark.asyncio
|
13 |
+
async def test_convert_markdown_to_HTML(self, monkeypatch):
|
14 |
+
resultado = convert_markdown_to_HTML(resposta_final_como_markdown)
|
15 |
+
print("\n\nresultado", resultado)
|
16 |
+
|
17 |
+
# assert isinstance(result_chunks, list)
|
18 |
+
# assert isinstance(result_strings, list)
|
19 |
+
# assert len(result_chunks) > 0
|
20 |
+
# assert len(result_strings) > 0
|
21 |
+
# assert all(isinstance(item, str) for item in result_strings)
|
22 |
+
# assert all(isinstance(item, DocumentChunk) for item in result_chunks)
|
23 |
+
# assert all(
|
24 |
+
# (chunk_size - 100) < len(item.content) < (chunk_size + 100)
|
25 |
+
# for item in result_chunks
|
26 |
+
# )
|