Spaces:
Sleeping
Sleeping
File size: 2,874 Bytes
b52eac0 |
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 |
import os
import json
import google.generativeai as genai
from typing import Dict
import logging
from .base_analyzer import BaseAnalyzer
logger = logging.getLogger(__name__)
class GeminiAnalyzer(BaseAnalyzer):
def __init__(self):
self.api_key = os.getenv("GOOGLE_API_KEY")
if not self.api_key:
logger.error("GOOGLE_API_KEY não encontrada nas variáveis de ambiente")
raise ValueError("GOOGLE_API_KEY não configurada")
genai.configure(api_key=self.api_key)
logger.info("API Gemini configurada com sucesso")
def _extract_json_from_response(self, response_text: str) -> str:
json_content = response_text.strip()
if json_content.startswith('```'):
json_content = json_content.split('\n', 1)[1]
if json_content.endswith('```'):
json_content = json_content.rsplit('\n', 1)[0]
return json_content.strip()
def analyze(self, text: str) -> Dict:
logger.info("Iniciando extração de representantes legais com Gemini")
try:
model = genai.GenerativeModel('gemini-pro')
prompt = """
Analise o seguinte contrato social e extraia:
1. Todos os sócios e seus percentuais de participação
2. Todos os administradores mencionados
Formate a resposta como um dicionário JSON com as seguintes chaves:
- "socios": lista de dicionários com "nome" e "participacao"
- "administradores": lista de nomes
Contrato Social:
{contract_text}
"""
response = model.generate_content(prompt.format(contract_text=text))
json_content = self._extract_json_from_response(response.text)
result = json.loads(json_content)
return result
except Exception as e:
logger.error(f"Erro na análise Gemini: {str(e)}")
return {
"socios": [],
"administradores": [],
"erro": str(e)
}
def format_output(self, analysis_result: Dict) -> str:
output = "ANÁLISE DO CONTRATO SOCIAL (Gemini)\n\n"
output += "SÓCIOS:\n"
for socio in analysis_result.get("socios", []):
participacao = socio.get('participacao', 'Não especificada')
participacao_str = f"{participacao}%" if participacao is not None else "Participação não especificada"
output += f"- {socio['nome']}: {participacao_str}\n"
output += "\nADMINISTRADORES:\n"
for admin in analysis_result.get("administradores", []):
output += f"- {admin}\n"
if "erro" in analysis_result:
output += f"\nERRO: {analysis_result['erro']}"
return output |