Venezuela / agent.py
Yofran23's picture
Upload agent.py
8e3f576 verified
Raw
History Blame Contribute Delete
3.44 kB
import os
import shutil
import time
from pathlib import Path
import ai_processor as ai
import database as db
# Configuración de carpetas
BASE_DIR = Path(os.path.dirname(os.path.abspath(__file__)))
INPUT_DIR = BASE_DIR / "input_files"
PROCESSED_DIR = BASE_DIR / "procesados"
FAILED_DIR = BASE_DIR / "fallidos"
def setup_dirs():
"""Crea las carpetas necesarias si no existen."""
for d in [INPUT_DIR, PROCESSED_DIR, FAILED_DIR]:
d.mkdir(parents=True, exist_ok=True)
# Inicializar DB si no está inicializada
db.init_db()
print(f"Directorios listos: {INPUT_DIR.name}/, {PROCESSED_DIR.name}/, {FAILED_DIR.name}/")
def procesar_archivo(file_path: Path):
"""Procesa un archivo individual y lo envía a la base de datos."""
print(f"\nProcesando: {file_path.name}")
res = ai.extraer_lista(str(file_path))
if not res.get("procesable"):
print(f"Error al procesar {file_path.name}: {res.get('error', 'Causa desconocida')}")
# Mover a fallidos
dest = FAILED_DIR / file_path.name
shutil.move(str(file_path), str(dest))
return False
personas = res.get("personas", [])
if not personas:
print(f"No se detectaron personas legibles en {file_path.name}.")
dest = FAILED_DIR / file_path.name
shutil.move(str(file_path), str(dest))
return False
print(f"Se extrajeron {len(personas)} persona(s). Guardando en base de datos...")
# Agregar a la DB
resultado_db = db.agregar_personas_bulk(
personas,
hospital_default="Lista Automatizada",
fuente="agente_automatico",
saltar_duplicados=True
)
agregados = resultado_db.get("agregados", 0)
omitidos = resultado_db.get("omitidos", 0)
print(f"Resultados: {agregados} agregados, {omitidos} omitidos (duplicados).")
# Mover a procesados
dest = PROCESSED_DIR / file_path.name
try:
shutil.move(str(file_path), str(dest))
print(f"Archivo movido a {PROCESSED_DIR.name}/")
except Exception as e:
print(f"Error al mover el archivo: {e}")
return True
def correr_agente(modo_continuo=False):
setup_dirs()
print("Agente de extraccion iniciado.")
while True:
archivos = []
for ext in ai.TIPOS_IMAGEN | ai.TIPOS_PDF | ai.TIPOS_EXCEL:
archivos.extend(INPUT_DIR.glob(f"*{ext}"))
archivos.extend(INPUT_DIR.glob(f"*{ext.upper()}"))
archivos = list(set(archivos)) # Eliminar duplicados si hay cruce
if archivos:
print(f"\nEncontrados {len(archivos)} archivo(s) para procesar.")
for file_path in archivos:
procesar_archivo(file_path)
time.sleep(2) # Pausa breve para evitar rate limits si usa la API gratuita
if not modo_continuo:
print("\nProcesamiento por lotes finalizado.")
break
print("\nEsperando nuevos archivos en 'input_files/'... (Presiona Ctrl+C para salir)")
time.sleep(10)
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description="Agente automático de procesamiento de listas")
parser.add_argument("--continuo", action="store_true", help="Mantener el agente ejecutándose esperando archivos nuevos.")
args = parser.parse_args()
correr_agente(modo_continuo=args.continuo)