feat: Add .env.example configuration file and integrate Redis service into Docker Compose for improved task management. Update desktop application to support document indexing and extraction workflows, enhancing user experience with a new extraction wizard and stepper components. Revise README and documentation for clarity on setup and usage.

This commit is contained in:
erik
2026-07-05 22:39:07 -05:00
parent 9aca926988
commit d95f8f6ad8
70 changed files with 9807 additions and 499 deletions
+28 -1
View File
@@ -89,7 +89,17 @@ class RetrySettings(BaseSettings):
class ProcessingSettings(BaseSettings):
"""Configuración de procesamiento y concurrencia."""
concurrency_limit: int = Field(100, validation_alias=AliasChoices("CONCURRENCY_LIMIT"))
concurrency_limit: int = Field(50, validation_alias=AliasChoices("CONCURRENCY_LIMIT"))
redis_url: str = Field("redis://localhost:6379/0", validation_alias=AliasChoices("REDIS_URL"))
worker_concurrency: int = Field(25, validation_alias=AliasChoices("WORKER_CONCURRENCY"))
# Límites OpenAI para el rate limiter distribuido
openai_rpm_limit: int = Field(500, validation_alias=AliasChoices("OPENAI_RPM_LIMIT"))
openai_tpm_limit: int = Field(800_000, validation_alias=AliasChoices("OPENAI_TPM_LIMIT"))
# Directorio compartido entre API y workers para encolar archivos
queue_dir: str = Field("/tmp/ips_queue", validation_alias=AliasChoices("QUEUE_DIR"))
# False (default) = procesamiento sincrono sin Redis/workers.
# True = cola ARQ distribuida (requiere Redis corriendo y workers activos).
async_queue: bool = Field(False, validation_alias=AliasChoices("ASYNC_QUEUE"))
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
@@ -102,6 +112,23 @@ class AppSettings(BaseSettings):
csv_delimiter: str = Field("|", validation_alias=AliasChoices("CSV_DELIMITER"))
model_config = SettingsConfigDict(env_file=".env", env_file_encoding="utf-8", extra="ignore")
# Accesos directos para conveniencia
@property
def redis_url(self) -> str:
return self.processing.redis_url
@property
def openai_rpm_limit(self) -> int:
return self.processing.openai_rpm_limit
@property
def openai_tpm_limit(self) -> int:
return self.processing.openai_tpm_limit
@property
def queue_dir(self) -> str:
return self.processing.queue_dir
settings = AppSettings()