use tokio::sync::mpsc;
use tokio_util::sync::CancellationToken;
use crate::common::protocols::{
EngineType, FpmPublisher, KvEventPublishers, MockEngineArgs, OutputSignal,
};
use crate::scheduler::{Scheduler, SchedulerHandle, SglangScheduler};
pub fn create_engine(
args: MockEngineArgs,
dp_rank: u32,
output_tx: Option<mpsc::UnboundedSender<Vec<OutputSignal>>>,
kv_event_publishers: KvEventPublishers,
cancellation_token: Option<CancellationToken>,
fpm_publisher: FpmPublisher,
) -> Box<dyn SchedulerHandle> {
match args.engine_type {
EngineType::Vllm => Box::new(Scheduler::new(
args,
dp_rank,
output_tx,
kv_event_publishers,
cancellation_token,
fpm_publisher,
)),
EngineType::Sglang => Box::new(SglangScheduler::new(
args,
dp_rank,
output_tx,
kv_event_publishers,
cancellation_token,
fpm_publisher,
)),
}
}