Skip to main content

AgentScheduler

Struct AgentScheduler 

Source
pub struct AgentScheduler { /* private fields */ }
Expand description

The agent scheduler.

Manages task queues, rate limiting, zombie detection, and priority scheduling. This is the central coordinator for all agent task execution.

Implementations§

Source§

impl AgentScheduler

Source

pub fn new( max_concurrent: usize, rate_limit_per_minute: u32, zombie_timeout_secs: u64, ) -> Self

Creates a new scheduler.

§Arguments
  • max_concurrent - Maximum number of tasks that can run simultaneously
  • rate_limit_per_minute - Maximum LLM API calls per minute
  • zombie_timeout_secs - How long before a running task is considered a zombie
Source

pub fn set_budget_manager(&mut self, bm: Arc<BudgetManager>)

Attaches a budget manager for scheduling checks.

When a budget manager is set, the scheduler will:

  • Check can_schedule() before starting a task (soft gate)
  • Track calls via track_call() when a task begins

If no budget manager is set, tasks proceed normally.

Source

pub fn update_config( &self, max_concurrent: usize, rate_limit_per_minute: u32, zombie_timeout_secs: u64, )

Hot-reload scheduler config without restart.

Updates concurrency limit, rate limit, and zombie timeout. Takes effect on the next next_task() / reap_zombies() call.

Source

pub fn submit(&self, task: ScheduledTask) -> Result<Uuid>

Submits a task to the scheduler queue.

Returns the task ID on success.

Source

pub fn next_task(&self) -> Option<ScheduledTask>

Gets the next task ready for execution.

Returns None if:

  • The queue is empty
  • Max concurrent limit is reached
  • Rate limit is exceeded
Source

pub fn complete_task(&self, task_id: Uuid) -> Result<()>

Marks a task as completed.

Removes the task from the running map.

Source

pub fn fail_task(&self, task_id: Uuid, error: &str) -> Result<()>

Marks a task as failed with an error message.

Removes the task from the running map.

Source

pub fn reap_zombies(&self) -> Vec<Uuid>

Detects and reaps zombie tasks (running longer than the configured timeout).

Returns the IDs of tasks that were reaped.

Source

pub fn start_task(&self, task_id: Uuid) -> Result<()>

Marks a task as running by task ID.

The task must be in the queue (status Queued). This is used by the orchestrator to atomically claim a submitted task before execution.

Source

pub fn cancel_task(&self, task_id: Uuid) -> Result<()>

Cancels a queued task by ID.

Only works on tasks still in the queue (not yet running).

Source

pub fn stats(&self) -> SchedulerStats

Returns the current scheduler statistics.

Source

pub fn rate_limit_remaining(&self) -> u32

Returns remaining rate limit capacity.

Source

pub fn queued_tasks(&self) -> Vec<ScheduledTask>

Returns all queued tasks (for debugging/monitoring).

Source

pub fn running_tasks(&self) -> Vec<ScheduledTask>

Returns all running tasks (for debugging/monitoring).

Trait Implementations§

Source§

impl Default for AgentScheduler

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more