# Copia este archivo a `.env` en la raiz del repositorio. # ── OpenAI ──────────────────────────────────────────────── # API key usada para extracción y normalización. # El modelo del extractor lo elige el usuario en la app (ej. gpt-4o, gpt-5.4). # El normalizador siempre usa gpt-4o-mini (fijado en docker-compose). EXTRACTOR_API_KEY=sk-... EXTRACTOR_MODEL=gpt-4o EXTRACTOR_TIMEOUT_S=120 # ── Procesamiento de imagenes ───────────────────────────── # DPI mas bajo = mas rapido; 150 es suficiente para la mayoria de documentos. PDF_DPI=150 PDF_THREAD_COUNT=4 # ── Concurrencia ────────────────────────────────────────── # Cuantas llamadas LLM simultáneas por worker ARQ WORKER_CONCURRENCY=25 # Cuántas réplicas del worker levantar WORKER_REPLICAS=2 # ── Rate limiting OpenAI ────────────────────────────────── # Ajusta según tu tier de OpenAI (estos son los valores tier-1 de gpt-4o) OPENAI_RPM_LIMIT=500 OPENAI_TPM_LIMIT=800000 # ── Cola de tareas (Redis + ARQ) ───────────────────────── # ASYNC_QUEUE=false (default) → procesa documentos sincronamente, sin Redis. # ASYNC_QUEUE=true → encola en Redis/ARQ para procesamiento distribuido # (requiere el servicio `worker` y `redis` corriendo via docker-compose). ASYNC_QUEUE=false # Solo necesario cuando ASYNC_QUEUE=true. Se levanta via docker-compose. REDIS_URL=redis://redis:6379/0 # ── Carpeta de documentos ───────────────────────────────── # Ruta local que Docker monta como /data dentro de los contenedores. IPS_DOCUMENT_ROOT=./data # ── Servicio de conteo (count-api) ──────────────────────── # OCR_DPI: resolución para Tesseract. # 300 = alta calidad (recomendado para documentos escaneados de baja calidad) # 150 = 4× más rápido, suficiente para la mayoría de facturas digitales # Para procesar MILES de archivos se recomienda OCR_DPI=150 OCR_DPI=150 OCR_LANG=spa # OCR_POOL_SIZE y SYNC_PROCESS_CONCURRENCY: igualar al número de núcleos de CPU. # Ejemplo: máquina con 8 núcleos → OCR_POOL_SIZE=8, SYNC_PROCESS_CONCURRENCY=8 # El frontend envía BATCH_CONCURRENCY=6 requests simultáneos × SYNC_PROCESS_CONCURRENCY archivos c/u. OCR_POOL_SIZE=8 SYNC_MAX_FILES=50 SYNC_PROCESS_CONCURRENCY=8 # Memoria para el contenedor count-api. Con 8 workers Tesseract se necesitan ~3 GB. COUNT_API_MEMORY=3g # ── Misc ────────────────────────────────────────────────── ALLOWED_DOCUMENT_TYPES=CC,TI,CE,RC,PA,PPT,PEP,EPT,NUIP # ── Desktop app (API Gateway) ───────────────────────────── # En Windows use 127.0.0.1 en lugar de localhost (evita colgar con IPv6). # La app desktop guarda esta URL en localStorage; valor por defecto: http://127.0.0.1:8189 # ── Build paralelo (solo si falla docker compose up --build) ────────────────── # Compose v2.37+ usa Bake por defecto y lanza todos los builds en paralelo. # Si BuildKit se satura (error "frontend grpc server closed unexpectedly"), # desactivar Bake y limitar el paralelismo resuelve el problema. # Descomentar solo si se produce ese error. #COMPOSE_BAKE=false #COMPOSE_PARALLEL_LIMIT=2