GabrielGD commited on
Commit
30e9015
·
verified ·
1 Parent(s): d23e366

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -6
app.py CHANGED
@@ -1,4 +1,3 @@
1
- # app.py
2
  import gradio as gr
3
  import requests
4
  import os
@@ -15,6 +14,7 @@ import pytesseract
15
  import cv2
16
  import numpy as np
17
  from datetime import datetime
 
18
 
19
  # Carrega variáveis de ambiente de um arquivo .env (opcional para dev local)
20
  load_dotenv()
@@ -30,12 +30,15 @@ GEMINI_API_URL = f"https://generativelanguage.googleapis.com/v1beta/models/gemin
30
  # Configurações da aplicação
31
  CONFIG = {
32
  "max_retry_attempts": 3,
33
- "retry_delay": 2,
34
  "timeout": 60,
35
  "temperatura": 0.2,
36
  "max_tokens": 4096
37
  }
38
 
 
 
 
39
  # Banco de dicas contextuais
40
  DICAS_OAB = {
41
  "Endereçamento": "Em relações de consumo, prefira o foro do domicílio do autor (art. 101, I, CDC).",
@@ -45,8 +48,9 @@ DICAS_OAB = {
45
  "Custas": "Inclua 'Requer a juntada da guia de custas devidamente recolhida'."
46
  }
47
 
48
- # Histórico de correções
49
  HISTORICO = []
 
50
 
51
  def preprocess_image_for_ocr(img):
52
  try:
@@ -300,7 +304,8 @@ def gerar_caso_ficticio():
300
  headers = {"Content-Type": "application/json"}
301
  for tentativa in range(CONFIG["max_retry_attempts"]):
302
  try:
303
- response = requests.post(GEMINI_API_URL, headers=headers, data=json.dumps(payload), timeout=CONFIG["timeout"])
 
304
  if response.status_code != 200:
305
  response_data = response.json()
306
  error_msg = response_data.get("error", {}).get("message", "Erro desconhecido")
@@ -340,6 +345,12 @@ def corrigir_peticao(caso, peticao_texto=None, peticao_arquivo=None, modo_treina
340
  peticao_conteudo = peticao_texto or ""
341
  if not peticao_conteudo.strip():
342
  return "⚠️ Forneça uma petição."
 
 
 
 
 
 
343
  prompt = estruturar_prompt_correcao(caso, peticao_conteudo, modo_treinamento)
344
  payload = {
345
  "contents": [{"parts": [{"text": prompt}]}],
@@ -348,7 +359,8 @@ def corrigir_peticao(caso, peticao_texto=None, peticao_arquivo=None, modo_treina
348
  headers = {"Content-Type": "application/json"}
349
  for tentativa in range(CONFIG["max_retry_attempts"]):
350
  try:
351
- response = requests.post(GEMINI_API_URL, headers=headers, data=json.dumps(payload), timeout=CONFIG["timeout"])
 
352
  if response.status_code != 200:
353
  response_data = response.json()
354
  error_msg = response_data.get("error", {}).get("message", "Erro desconhecido")
@@ -375,6 +387,7 @@ def corrigir_peticao(caso, peticao_texto=None, peticao_arquivo=None, modo_treina
375
  "peticao": peticao_conteudo,
376
  "correcao_completa": correção_completa
377
  })
 
378
  return correção_formatada
379
  except requests.Timeout:
380
  if tentativa < CONFIG["max_retry_attempts"] - 1:
@@ -546,6 +559,7 @@ def comparar_peticao_melhorada(caso, peticao_texto, correcao):
546
  def interface_gradio():
547
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
548
  gr.Markdown("# 📝 Corretor Avançado de Petições Iniciais (Critérios OAB)")
 
549
  with gr.Row():
550
  with gr.Column(scale=1):
551
  gr.Markdown("""
@@ -671,6 +685,5 @@ def interface_gradio():
671
 
672
  return demo
673
 
674
- # No Hugging Face, não usamos if __name__ == "__main__":
675
  app = interface_gradio()
676
  app.launch()
 
 
1
  import gradio as gr
2
  import requests
3
  import os
 
14
  import cv2
15
  import numpy as np
16
  from datetime import datetime
17
+ from ratelimiter import RateLimiter
18
 
19
  # Carrega variáveis de ambiente de um arquivo .env (opcional para dev local)
20
  load_dotenv()
 
30
  # Configurações da aplicação
31
  CONFIG = {
32
  "max_retry_attempts": 3,
33
+ "retry_delay": 10, # Aumentado para 10 segundos para respeitar limites
34
  "timeout": 60,
35
  "temperatura": 0.2,
36
  "max_tokens": 4096
37
  }
38
 
39
+ # Limite de 60 requisições por minuto (ajuste conforme seu limite real)
40
+ rate_limiter = RateLimiter(max_calls=60, period=60)
41
+
42
  # Banco de dicas contextuais
43
  DICAS_OAB = {
44
  "Endereçamento": "Em relações de consumo, prefira o foro do domicílio do autor (art. 101, I, CDC).",
 
48
  "Custas": "Inclua 'Requer a juntada da guia de custas devidamente recolhida'."
49
  }
50
 
51
+ # Histórico de correções e cache
52
  HISTORICO = []
53
+ CORRECAO_CACHE = {}
54
 
55
  def preprocess_image_for_ocr(img):
56
  try:
 
304
  headers = {"Content-Type": "application/json"}
305
  for tentativa in range(CONFIG["max_retry_attempts"]):
306
  try:
307
+ with rate_limiter:
308
+ response = requests.post(GEMINI_API_URL, headers=headers, data=json.dumps(payload), timeout=CONFIG["timeout"])
309
  if response.status_code != 200:
310
  response_data = response.json()
311
  error_msg = response_data.get("error", {}).get("message", "Erro desconhecido")
 
345
  peticao_conteudo = peticao_texto or ""
346
  if not peticao_conteudo.strip():
347
  return "⚠️ Forneça uma petição."
348
+
349
+ # Chave única para o cache
350
+ cache_key = f"{caso[:50]}|{peticao_conteudo[:50]}|{modo_treinamento}"
351
+ if cache_key in CORRECAO_CACHE:
352
+ return CORRECAO_CACHE[cache_key]
353
+
354
  prompt = estruturar_prompt_correcao(caso, peticao_conteudo, modo_treinamento)
355
  payload = {
356
  "contents": [{"parts": [{"text": prompt}]}],
 
359
  headers = {"Content-Type": "application/json"}
360
  for tentativa in range(CONFIG["max_retry_attempts"]):
361
  try:
362
+ with rate_limiter:
363
+ response = requests.post(GEMINI_API_URL, headers=headers, data=json.dumps(payload), timeout=CONFIG["timeout"])
364
  if response.status_code != 200:
365
  response_data = response.json()
366
  error_msg = response_data.get("error", {}).get("message", "Erro desconhecido")
 
387
  "peticao": peticao_conteudo,
388
  "correcao_completa": correção_completa
389
  })
390
+ CORRECAO_CACHE[cache_key] = correção_formatada # Armazena no cache
391
  return correção_formatada
392
  except requests.Timeout:
393
  if tentativa < CONFIG["max_retry_attempts"] - 1:
 
559
  def interface_gradio():
560
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
561
  gr.Markdown("# 📝 Corretor Avançado de Petições Iniciais (Critérios OAB)")
562
+ gr.Markdown("⚠️ Nota: Devido a limites de cota da API, pode haver atrasos ou erros se muitas requisições forem feitas rapidamente.")
563
  with gr.Row():
564
  with gr.Column(scale=1):
565
  gr.Markdown("""
 
685
 
686
  return demo
687
 
 
688
  app = interface_gradio()
689
  app.launch()