Aari 645ca08f16
fix(scheduler): enqueue busy scheduled task runs (#4918)
* fix(frontend): clarify reuse-thread scheduling behavior

* fix(scheduler): enqueue overlapping scheduled runs

* fix(scheduler): preserve queue lease fencing

* fix(scheduler): close queue concurrency races

* fix(scheduler): harden queue timeout bookkeeping

* fix(scheduler): preserve manual failure schedule

---------

Co-authored-by: Willem Jiang <willem.jiang@gmail.com>
2026-08-24 15:38:32 +08:00

23 lines
972 B
Python

from pydantic import BaseModel, Field
class SchedulerConfig(BaseModel):
enabled: bool = Field(default=False)
multi_instance: bool = Field(default=False)
poll_interval_seconds: int = Field(default=5, ge=1, le=300)
lease_seconds: int = Field(default=120, ge=5, le=3600)
max_concurrent_runs: int = Field(default=3, ge=1, le=32)
queue_timeout_seconds: int = Field(default=3600, ge=60, le=604800)
min_once_delay_seconds: int = Field(default=60, ge=1, le=86400)
recursion_limit: int = Field(
default=1000,
ge=1,
description=(
"LangGraph recursion_limit for scheduler-launched runs. Read at dispatch "
"time (not captured into ScheduledTaskService). The default matches the "
"web UI's interactive budget (1000) so scheduled and interactive runs "
"behave identically out of the box. Values above "
"AppConfig.max_recursion_limit are clamped."
),
)