thlinhares commited on
Commit
205385f
·
verified ·
1 Parent(s): 55ec1eb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -9
app.py CHANGED
@@ -4,6 +4,7 @@ import google.generativeai as genai
4
  import re
5
  import os
6
  import logging
 
7
  from typing import Dict, List, Tuple
8
  from datetime import datetime
9
 
@@ -27,6 +28,21 @@ if not GOOGLE_API_KEY:
27
  genai.configure(api_key=GOOGLE_API_KEY)
28
  logger.info("API Gemini configurada com sucesso")
29
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  def extract_legal_representatives(contract_text: str) -> Dict:
31
  """
32
  Extrai representantes legais e suas participações do contrato social
@@ -60,16 +76,29 @@ def extract_legal_representatives(contract_text: str) -> Dict:
60
  try:
61
  logger.debug("Enviando prompt para o modelo")
62
  response = model.generate_content(prompt.format(contract_text=contract_text))
63
- logger.info(f"Resposta recebida do modelo com sucesso: {str(response)}")
64
- except Exception as e:
65
- logger.error(f"Erro ao gerar conteúdo: {str(e)}")
66
- raise
67
-
68
- try:
69
- # Processar e estruturar a resposta
70
- result = eval(response.text) # Converte string JSON para dicionário Python
 
 
 
 
 
71
  logger.info(f"Análise concluída. Encontrados {len(result.get('socios', []))} sócios e {len(result.get('administradores', []))} administradores")
72
  return result
 
 
 
 
 
 
 
 
73
  except Exception as e:
74
  logger.error(f"Erro ao processar resposta do modelo: {str(e)}")
75
  return {
@@ -87,7 +116,9 @@ def format_output(analysis_result: Dict) -> str:
87
 
88
  output += "SÓCIOS:\n"
89
  for socio in analysis_result.get("socios", []):
90
- output += f"- {socio['nome']}: {socio['participacao']}%\n"
 
 
91
 
92
  output += "\nADMINISTRADORES:\n"
93
  for admin in analysis_result.get("administradores", []):
 
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
 
 
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
 
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 {
 
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", []):