thlinhares commited on
Commit
2cf132d
·
verified ·
1 Parent(s): 4cc6b62

Delete app_old.py

Browse files
Files changed (1) hide show
  1. app_old.py +0 -173
app_old.py DELETED
@@ -1,173 +0,0 @@
1
- import gradio as gr
2
- from docling.document_converter import DocumentConverter
3
- import google.generativeai as genai
4
- import re
5
- import os
6
- import logging
7
- import json
8
- from typing import Dict, List, Tuple
9
- from datetime import datetime
10
-
11
- # Configuração de logging
12
- logging.basicConfig(
13
- level=logging.INFO,
14
- format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
15
- handlers=[
16
- logging.FileHandler(f'contract_analyzer_{datetime.now().strftime("%Y%m%d")}.log'),
17
- logging.StreamHandler()
18
- ]
19
- )
20
- logger = logging.getLogger(__name__)
21
-
22
- # Configuração da API do Gemini
23
- GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
24
- if not GOOGLE_API_KEY:
25
- logger.error("GOOGLE_API_KEY não encontrada nas variáveis de ambiente")
26
- raise ValueError("GOOGLE_API_KEY não configurada")
27
-
28
- genai.configure(api_key=GOOGLE_API_KEY)
29
- logger.info("API Gemini configurada com sucesso")
30
-
31
- def extract_json_from_response(response_text: str) -> str:
32
- """
33
- Extrai o conteúdo JSON da resposta do Gemini, removendo marcadores de código.
34
- """
35
- # Remove marcadores de código ```json e ``` se presentes
36
- json_content = response_text.strip()
37
- if json_content.startswith('```'):
38
- # Remove a primeira linha (```json)
39
- json_content = json_content.split('\n', 1)[1]
40
- if json_content.endswith('```'):
41
- # Remove a última linha (```)
42
- json_content = json_content.rsplit('\n', 1)[0]
43
-
44
- return json_content.strip()
45
-
46
- def extract_legal_representatives(contract_text: str) -> Dict:
47
- """
48
- Extrai representantes legais e suas participações do contrato social
49
- usando o Google Gemini.
50
- """
51
- logger.info("Iniciando extração de representantes legais")
52
-
53
- # Configurar o modelo
54
- try:
55
- model = genai.GenerativeModel('gemini-pro')
56
- logger.debug("Modelo Gemini-pro inicializado")
57
- except Exception as e:
58
- logger.error(f"Erro ao inicializar modelo Gemini: {str(e)}")
59
- raise
60
-
61
- # Prompt para extrair informações específicas
62
- prompt = """
63
- Analise o seguinte contrato social e extraia:
64
- 1. Todos os sócios e seus percentuais de participação
65
- 2. Todos os administradores mencionados
66
-
67
- Formate a resposta como um dicionário JSON com as seguintes chaves:
68
- - "socios": lista de dicionários com "nome" e "participacao"
69
- - "administradores": lista de nomes
70
-
71
- Contrato Social:
72
- {contract_text}
73
- """
74
-
75
- # Gerar resposta
76
- try:
77
- logger.debug("Enviando prompt para o modelo")
78
- response = model.generate_content(prompt.format(contract_text=contract_text))
79
- logger.info("Resposta recebida do modelo com sucesso")
80
-
81
- # Extrair o texto da resposta
82
- response_text = response.text
83
- logger.debug(f"Resposta bruta: {response_text}")
84
-
85
- # Extrair e processar o JSON
86
- json_content = extract_json_from_response(response_text)
87
- logger.debug(f"JSON extraído: {json_content}")
88
-
89
- # Converter para dicionário Python
90
- result = json.loads(json_content)
91
-
92
- logger.info(f"Análise concluída. Encontrados {len(result.get('socios', []))} sócios e {len(result.get('administradores', []))} administradores")
93
- return result
94
-
95
- except json.JSONDecodeError as e:
96
- logger.error(f"Erro ao decodificar JSON: {str(e)}")
97
- return {
98
- "socios": [],
99
- "administradores": [],
100
- "erro": f"Erro ao processar JSON da resposta: {str(e)}"
101
- }
102
- except Exception as e:
103
- logger.error(f"Erro ao processar resposta do modelo: {str(e)}")
104
- return {
105
- "socios": [],
106
- "administradores": [],
107
- "erro": f"Erro ao processar o contrato: {str(e)}"
108
- }
109
-
110
- def format_output(analysis_result: Dict) -> str:
111
- """
112
- Formata o resultado da análise para exibição.
113
- """
114
- logger.debug("Formatando resultado da análise")
115
- output = "ANÁLISE DO CONTRATO SOCIAL\n\n"
116
-
117
- output += "SÓCIOS:\n"
118
- for socio in analysis_result.get("socios", []):
119
- participacao = socio.get('participacao', 'Não especificada')
120
- participacao_str = f"{participacao}%" if participacao is not None else "Participação não especificada"
121
- output += f"- {socio['nome']}: {participacao_str}\n"
122
-
123
- output += "\nADMINISTRADORES:\n"
124
- for admin in analysis_result.get("administradores", []):
125
- output += f"- {admin}\n"
126
-
127
- if "erro" in analysis_result:
128
- logger.warning(f"Erro encontrado no resultado: {analysis_result['erro']}")
129
- output += f"\nERRO: {analysis_result['erro']}"
130
-
131
- return output
132
-
133
- def analyze_contract(file):
134
- logger.info(f"Iniciando análise do arquivo: {file.name}")
135
-
136
- try:
137
- converter = DocumentConverter()
138
- result = converter.convert(file.name)
139
- document_text = result.document.export_to_markdown()
140
- logger.info("Conversão do documento concluída com sucesso")
141
-
142
- # Extrair representantes legais
143
- analysis_result = extract_legal_representatives(document_text)
144
- logger.info("Extração de representantes legais concluída")
145
-
146
- return document_text, format_output(analysis_result)
147
-
148
- except Exception as e:
149
- logger.error(f"Erro durante análise do contrato: {str(e)}")
150
- return "", f"Erro ao processar o arquivo: {str(e)}"
151
-
152
- # Criar interface Gradio
153
- try:
154
- logger.info("Iniciando configuração da interface Gradio")
155
- iface = gr.Interface(
156
- fn=analyze_contract,
157
- inputs="file",
158
- outputs=[
159
- gr.Textbox(label="Texto do contrato"),
160
- gr.Textbox(label="Resultado da Análise")
161
- ],
162
- title="Analisador de Contratos Sociais",
163
- description="Este aplicativo analisa contratos sociais para identificar sócios, administradores e suas participações.",
164
- )
165
- logger.info("Interface Gradio configurada com sucesso")
166
- except Exception as e:
167
- logger.error(f"Erro ao configurar interface Gradio: {str(e)}")
168
- raise
169
-
170
- # Configuração para deploy no Hugging Face Spaces
171
- if __name__ == "__main__":
172
- logger.info("Iniciando aplicação")
173
- iface.launch()