- Implementa ProcessingMonitor singleton para procesamiento secuencial de archivos - Agrega AI summary service con soporte para MiniMax API - Agrega PDF generator para resúmenes - Agrega watchers para monitoreo de carpeta remota - Mejora sistema de notificaciones Telegram - Implementa gestión de VRAM para GPU - Configuración mediante variables de entorno (sin hardcoded secrets) - .env y transcriptions/ agregados a .gitignore Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
79 lines
2.8 KiB
Python
79 lines
2.8 KiB
Python
"""
|
|
Configuración centralizada de la aplicación.
|
|
Carga variables de entorno desde archivo .env
|
|
"""
|
|
import os
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
from dotenv import load_dotenv
|
|
|
|
# Cargar variables de entorno
|
|
load_dotenv()
|
|
|
|
|
|
class Settings:
|
|
"""Configuración centralizada de la aplicación."""
|
|
|
|
# Nextcloud/WebDAV
|
|
NEXTCLOUD_URL: str = os.getenv("NEXTCLOUD_URL", "")
|
|
NEXTCLOUD_USER: str = os.getenv("NEXTCLOUD_USER", "")
|
|
NEXTCLOUD_PASSWORD: str = os.getenv("NEXTCLOUD_PASSWORD", "")
|
|
|
|
# Telegram (opcional)
|
|
TELEGRAM_TOKEN: Optional[str] = os.getenv("TELEGRAM_TOKEN")
|
|
TELEGRAM_CHAT_ID: Optional[str] = os.getenv("TELEGRAM_CHAT_ID")
|
|
|
|
# AI Providers (opcional)
|
|
GEMINI_API_KEY: Optional[str] = os.getenv("GEMINI_API_KEY")
|
|
DEEPINFRA_API_KEY: Optional[str] = os.getenv("DEEPINFRA_API_KEY")
|
|
ANTHROPIC_AUTH_TOKEN: Optional[str] = os.getenv("ANTHROPIC_AUTH_TOKEN")
|
|
ANTHROPIC_BASE_URL: Optional[str] = os.getenv("ANTHROPIC_BASE_URL")
|
|
ANTHROPIC_MODEL: str = os.getenv("ANTHROPIC_MODEL", "glm-4.7")
|
|
|
|
# Notion (opcional)
|
|
NOTION_API: Optional[str] = os.getenv("NOTION_API")
|
|
NOTION_DATABASE_ID: Optional[str] = os.getenv("NOTION_DATABASE_ID")
|
|
|
|
# Dashboard
|
|
DASHBOARD_HOST: str = os.getenv("DASHBOARD_HOST", "0.0.0.0")
|
|
DASHBOARD_PORT: int = int(os.getenv("DASHBOARD_PORT", "5000"))
|
|
DASHBOARD_SECRET_KEY: Optional[str] = os.getenv("DASHBOARD_SECRET_KEY")
|
|
|
|
# Rutas locales
|
|
BASE_DIR: Path = Path(__file__).parent.parent
|
|
DOWNLOADS_DIR: Path = BASE_DIR / "downloads"
|
|
TRANSCRIPTIONS_DIR: Path = BASE_DIR / "transcriptions"
|
|
|
|
# Whisper
|
|
WHISPER_MODEL: str = os.getenv("WHISPER_MODEL", "medium")
|
|
WHISPER_DEVICE: str = os.getenv("WHISPER_DEVICE", "auto") # auto, cuda, cpu
|
|
WHISPER_LANGUAGE: str = os.getenv("WHISPER_LANGUAGE", "es")
|
|
WHISPER_AUTO_UNLOAD_SECONDS: int = int(os.getenv("WHISPER_AUTO_UNLOAD_SECONDS", "300")) # 5 minutos
|
|
|
|
# Configuración de polling
|
|
POLL_INTERVAL: int = int(os.getenv("POLL_INTERVAL", "30")) # segundos
|
|
WATCHED_REMOTE_PATH: str = os.getenv("WATCHED_REMOTE_PATH", "/Audios")
|
|
|
|
# Logging
|
|
LOG_LEVEL: str = os.getenv("LOG_LEVEL", "INFO")
|
|
LOG_FILE: Optional[str] = os.getenv("LOG_FILE")
|
|
|
|
@property
|
|
def has_webdav_config(self) -> bool:
|
|
"""Verifica si hay configuración de WebDAV."""
|
|
return bool(self.NEXTCLOUD_URL and self.NEXTCLOUD_USER and self.NEXTCLOUD_PASSWORD)
|
|
|
|
@property
|
|
def has_telegram_config(self) -> bool:
|
|
"""Verifica si hay configuración de Telegram."""
|
|
return bool(self.TELEGRAM_TOKEN and self.TELEGRAM_CHAT_ID)
|
|
|
|
@property
|
|
def is_production(self) -> bool:
|
|
"""Verifica si está en modo producción."""
|
|
return os.getenv("ENV", "development") == "production"
|
|
|
|
|
|
# Instancia global de configuración
|
|
settings = Settings()
|