mod adaptive_spec;
mod admission;
mod beam_prefill;
mod confidence;
pub mod config;
mod core;
pub use core::PipelineFaults;
mod decode_launch;
mod decode_logits_content;
mod decode_logits_seq;
mod decode_logits_step;
mod decode_step;
mod emit_step;
mod eos_hold;
mod fast_greedy;
#[cfg(test)]
mod finish_guard_tests;
mod first_token_policy;
#[cfg(test)]
mod first_token_policy_tests;
mod helpers;
pub(crate) mod io;
mod lifecycle;
#[cfg(test)]
mod lifecycle_tests;
mod logit_dump;
mod logit_processors;
mod logprobs;
mod mod_helpers;
pub use mod_helpers::capture_runtime_handle;
pub mod dumps;
pub mod levers;
pub mod limits;
mod mtp_accept_debug;
mod mtp_bootstrap_step;
mod mtp_dcut;
mod mtp_device_draft;
mod mtp_step;
pub(crate) mod mtp_timing;
mod phase_continue_prefills;
mod phase_promote_prefills;
mod phase_start_prefills;
mod preempt;
#[cfg(test)]
mod preempt_tests;
mod prefill_a_step;
mod prefill_a_step_params;
mod prefill_b_step;
#[cfg(test)]
mod prefill_error_delivery_tests;
#[cfg(test)]
mod prefill_fifo_tests;
#[cfg(test)]
mod prefill_timing_tests;
mod prompt_lookup_step;
mod repetition;
mod rollback;
mod sample_step;
pub mod sched_ctx;
pub(crate) mod shared_lookup_step;
mod shutdown_drain;
#[cfg(test)]
mod shutdown_drain_tests;
mod spec_step;
mod ssm_decode_ring;
#[cfg(test)]
mod swap_out_tests;
mod teardown;
#[cfg(test)]
mod test_support;
mod think_close;
#[cfg(test)]
mod think_skip_tests;
#[cfg(test)]
mod trace_harness;
mod types;
mod verify_dflash_batch_step;
mod verify_dflash_step;
mod verify_k2_device_step;
mod verify_k2_step;
mod verify_k3_step;
mod verify_k4_batch_step;
mod verify_k4_step;
mod verify_k4_verdict;
mod verify_kn_step;
mod verify_pipeline_helper;
pub mod vocab_masks;
use beam_prefill::resolve_beam_hyp;
use confidence::*;
use decode_logits_content::*;
use decode_logits_seq::*;
use decode_logits_step::*;
use decode_step::*;
use emit_step::*;
use first_token_policy::*;
pub use helpers::WatchdogParams;
pub(crate) use helpers::parse_disable_watchdogs;
pub use helpers::resolve_content_loop_watchdog;
use helpers::*;
pub use helpers::{CONTENT_LOOP_PERIOD_MAX, CONTENT_LOOP_PERIOD_MIN};
use lifecycle::*;
use logprobs::*;
use mod_helpers::*;
use mtp_bootstrap_step::*;
use mtp_step::*;
use phase_continue_prefills::continue_in_progress_prefills;
use phase_start_prefills::start_new_requests;
use prefill_a_step::*;
use prefill_b_step::*;
use prompt_lookup_step::{copy_in_flight, drafter_accepted};
use repetition::*;
use rollback::{RollbackOutcome, rollback_to_boundary};
use sample_step::*;
use spec_step::*;
use ssm_decode_ring::SsmDecodeRing;
use types::*;
use verify_dflash_batch_step::*;
use verify_dflash_step::*;
use verify_k2_step::*;
use verify_k3_step::*;
use verify_k4_batch_step::*;
use verify_k4_step::*;
use verify_k4_verdict::*;
use verify_kn_step::*;
use anyhow::Result;
use metrale_gpu_runtime::gpu::DevicePtr;
use metrale_model_engine::traits::{Model, SequenceState};
use metrale_sampling::{
SamplingParams, apply_penalties_and_bias, sample_with_params, sample_with_params_history,
};
use crate::api::{GrammarSpec, InferenceRequest, StreamEvent};
use crate::grammar::{GrammarEngine, GrammarState};
use metrale_speculative::ngram::NgramProposer;
pub enum LoraCommand {
Rotate(String),
LoadIntoSlot {
name: String,
dir: std::path::PathBuf,
slot: usize,
},
Promote {
peer_addr: String,
adapter_id: String,
name: String,
peft: metrale_config::PeftAdapterConfig,
},
PromoteDisk {
name: String,
dir: std::path::PathBuf,
},
}
#[derive(Debug, Clone)]
pub enum LoraAck {
Done,
Promoted {
slot: usize,
evicted: Option<String>,
},
}
pub type LoraRotation = (
LoraCommand,
tokio::sync::oneshot::Sender<Result<LoraAck, String>>,
);
pub fn run(
dev: Box<io::DynDevice>,
request_rx: tokio::sync::mpsc::Receiver<InferenceRequest>,
rotation_rx: tokio::sync::mpsc::Receiver<LoraRotation>,
cfg: config::SchedulerConfig,
) {
metrale_scheduler::run(core::SchedulerCore::new(dev, request_rx, rotation_rx, cfg));
}