File size: 9,896 Bytes
dfe9e56 a47f513 dfe9e56 5f69961 dfe9e56 5f69961 dfe9e56 cbe7caa dfe9e56 1cd8ba0 4254347 fe49b5b 504ca89 fe49b5b dfe9e56 2106941 dfe9e56 601cb00 dfe9e56 bb7e596 dfe9e56 a716f6b a96e5fc f1fc998 762bec7 2106941 a96e5fc fe49b5b 2106941 a716f6b 2106941 a716f6b dfe9e56 da604d4 2106941 dfe9e56 3b13a53 dfe9e56 5f69961 |
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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
import gradio as gr
import re
import os
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_together import Together
from langchain.chains.llm import LLMChain
from langchain.prompts import PromptTemplate
from langchain_community.document_loaders import TextLoader
token = os.environ['token']
reduce_template = """ A seguir está uma lista de resumos: {docs}
Primeiro, identifique as pessoas ou entidades envolvidas no processo para entender o contexto.
Em seguida, explique por que cada parte está envolvida.
Analise os resumos, destacando os principais pontos de cada um.
Com base nos pontos destacados, elabore um texto único que inclua todas as informações.
Não omita nenhum nome relatado.
Não invente nada que não esteja nos resumos.
Inclua as partes principais do texto jurídico: o relatório (resumo do caso), a fundamentação (razões da decisão) e a decisão (veredito final).
Use uma linguagem clara e simples para que todos possam entender, sem termos jurídicos complicados.
Isso não é uma explicação do caso, e sim uma reescrita com palavras simples e sem jargões jurídicos, faça com que um adolescente de 14 anos entenda.
Faça um Texto único Final como se estivesse explicando para um adolescente de 14 anos:"""
sem_resumir_template = """Com base nos documentos fornecidos: {docs}
Primeiramente, faça uma leitura atenta para entender a essência de cada documento. Identifique as pessoas, entidades e os principais elementos envolvidos, fornecendo uma visão clara do contexto.
Explique detalhadamente o papel de cada parte envolvida, oferecendo insights sobre suas motivações e a relevância de suas ações ou posições dentro do caso.
Analise os documentos com profundidade, destacando não apenas os pontos cruciais, mas também detalhes significativos que contribuem para a compreensão completa do caso.
Construa um texto abrangente que integre todas as informações relevantes. Evite omitir detalhes importantes que foram mencionados nos documentos, mantendo a fidelidade ao conteúdo original.
Assegure-se de incluir todos os aspectos fundamentais do texto jurídico: o relatório (que resume o caso), a fundamentação (que explica as razões da decisão) e a decisão (o veredito final), preservando a riqueza de detalhes.
Adote uma linguagem clara e acessível, evitando jargões jurídicos sem simplificar excessivamente o conteúdo, de modo que seja compreensível para um público amplo, incluindo adolescentes.
O objetivo é criar um texto informativo e rico em detalhes, que esclareça o caso de forma íntegra e educativa, como se estivesse apresentando a alguém com escolaridade básica, um adolescente de 14 anos não especializado na área jurídica."""
integro_template="""Trechos de um processo judicial: {docs}
Estamos mergulhando em alguns trechos de um processo judicial e queremos que você transforme essas informações em um texto claro e contínuo, adequado para alguém com educação básica. Para isso, siga os passos abaixo, mas ao invés de separar cada etapa, integre todas as informações em um único texto coeso. Use palavras simples e evite jargões jurídicos, mantendo a seriedade e estrutura do contexto legal. Aqui está o que você precisa fazer, resumido em um único processo:
- **Identifique as partes envolvidas no processo**, explicando de forma simples quem são e por que estão envolvidas.
- **Analise os trechos fornecidos**, destacando os pontos mais importantes de forma que fiquem claros para todos.
- **Elabore um texto único que inclua**:
- Uma descrição clara do caso, incluindo o que aconteceu e quem está envolvido (Relatório).
- As razões por trás da decisão tomada pelo juiz, simplificadas (Fundamentação).
- O resultado final do caso, de maneira simplificada (Decisão).
O objetivo é criar um texto único e fluido que englobe todas essas informações de maneira compreensível para qualquer pessoa, mesmo aquelas com apenas a educação básica. Certifique-se de não adicionar informações novas e de não omitir nenhum nome mencionado nos trechos.
"""
resumo_template="""Sentenças do Caso: {docs}
Este documento contém uma série de sentenças relacionados a um caso jurídico. Primeiramente, vamos identificar as partes envolvidas e compreender suas motivações. Em seguida, sintetizaremos os aspectos cruciais de cada resumo, preservando os detalhes essenciais e o contexto.
Partes Envolvidas e Contexto:
Identifique claramente quem são as pessoas ou entidades principais do caso e por que elas estão envolvidas, fornecendo um breve contexto.
Análise e Síntese:
Consolide os resumos examinando os pontos principais e as evidências apresentadas. Destaque elementos chave que são comuns ou significativos em toda a documentação.
Texto Unificado:
Com base nos elementos destacados, redija um resumo que combine todas as informações essenciais. Este deve incluir:
1. Relatório: um resumo do caso, apresentando os fatos principais.
2. Fundamentação: as razões principais que suportam a decisão, explicando o raciocínio por trás das conclusões.
3. Decisão: o veredito final ou as conclusões do caso.
Lembre-se de manter a objetividade, sem adicionar informações não presentes nos originais. Evite jargões jurídicos complexos, mas mantenha a precisão dos termos quando necessário para a compreensão do caso. O objetivo é criar um resumo claro, direto e informativo.
Instruções Finais:
Reveja o texto para garantir que seja compreensível e que não omita informações críticas. O resumo final deve permitir a qualquer pessoa entender os aspectos fundamentais do caso jurídico sem necessidade de consulta aos textos originais.
"""
model_used = "Qwen/Qwen1.5-4B-Chat"
def clean_text(text):
text = text.replace('\xa0', ' ')
text = re.sub(r'\s+', ' ', text)
text = re.sub(r'\(#.*?\)', '', text)
return text
def greet(uploaded_file, template_choice):
loader = TextLoader(uploaded_file.name)
docs = loader.load()
for doc in docs:
doc.page_content = clean_text(doc.page_content)
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=3000,
chunk_overlap=300,
separators=["\n\n", "\n", " ", ""]
)
if template_choice == "Template 2":
#prompt_template = PromptTemplate.from_template(integro_template)
qwen_prompt = """Trechos de um processo judicial: {docs}
Estamos mergulhando em alguns trechos de um processo judicial e queremos que você transforme essas informações em um texto claro e contínuo, adequado para alguém com educação básica. Para isso, siga os passos abaixo, mas ao invés de separar cada etapa, integre todas as informações em um único texto coeso. Use palavras simples e evite jargões jurídicos, mantendo a seriedade e estrutura do contexto legal. Aqui está o que você precisa fazer, resumido em um único processo:
- **Identifique as partes envolvidas no processo**, explicando de forma simples quem são e por que estão envolvidas.
- **Analise os trechos fornecidos**, destacando os pontos mais importantes de forma que fiquem claros para todos.
- **Elabore um texto único que inclua**:
- Uma descrição clara do caso, incluindo o que aconteceu e quem está envolvido (Relatório).
- As razões por trás da decisão tomada pelo juiz, simplificadas (Fundamentação).
- O resultado final do caso, de maneira simplificada (Decisão).
O objetivo é criar um texto único e fluido que englobe todas essas informações de maneira compreensível para qualquer pessoa, mesmo aquelas com apenas a educação básica. Certifique-se de não adicionar informações novas e de não omitir nenhum nome mencionado nos trechos.
"""
qwen_system_message = "Você é um ajudante que recebe textos jurídicos em português e retorna textos em linguagem simplificada também em português."
prompt_template=f'''<|im_start|>system
{qwen_system_message}<|im_end|>
<|im_start|>user
{qwen_prompt}<|im_end|>
<|im_start|>assistant
'''
llm = Together(
model=model_used,
temperature=0.5,
max_tokens=10000,
top_k=60,
together_api_key=token
)
elif template_choice == "Template 1 (menos resumido)":
prompt_template = PromptTemplate.from_template(sem_resumir_template)
llm = Together(
model=model_used,
temperature=0.5,
max_tokens=10000,
top_k=60,
together_api_key=token
)
elif template_choice == "Template 3 (Resumo Apenas)":
prompt_template = PromptTemplate.from_template(resumo_template)
llm = Together(
model=model_used,
temperature=0,
max_tokens=10000,
top_k=60,
together_api_key=token
)
else:
prompt_template = PromptTemplate.from_template(reduce_template)
llm = Together(
model=model_used,
temperature=0.5,
max_tokens=10000,
top_k=60,
together_api_key=token
)
integro_chain = LLMChain(llm=llm, prompt=prompt_template)
split_docs = text_splitter.split_documents(docs)
return integro_chain.invoke(split_docs)['text']
iface = gr.Interface(
fn=greet,
inputs=[gr.File(file_types=['txt'], show_label=True),
gr.Radio(["Template 1 (mais resumido)", "Template 1 (menos resumido)", "Template 2", "Template 3 (Resumo Apenas)"], label="Escolha o Template")],
outputs=["text"],
description="Esta ferramenta simplifica textos jurídicos para uma linguagem mais acessível. Escolha um template e carregue um arquivo .txt com o texto que deseja processar.",
)
iface.launch(share=True) |