use anyhow::{Context, Result};
fn main() -> Result<()> {
#[cfg(feature = "webrtc")]
let _ = env_logger::try_init();
let mut model: Option<String> = None;
let mut layers: Option<String> = None;
let mut listen = "0.0.0.0:9301".to_string();
let mut vram_gb: Option<f64> = None;
let mut token: Option<String> = None;
let mut cache_dir: Option<std::path::PathBuf> = None;
let mut join: Option<String> = None;
let mut advertise: Option<String> = None;
let mut args = std::env::args().skip(1);
while let Some(a) = args.next() {
match a.as_str() {
"--model" => model = args.next(),
"--layers" => layers = args.next(),
"--listen" => listen = args.next().context("--listen value")?,
"--vram-gb" => vram_gb = Some(args.next().context("--vram-gb value")?.parse()?),
"--token" => token = args.next(),
"--cache-dir" => cache_dir = args.next().map(std::path::PathBuf::from),
"--join" => join = args.next(),
"--advertise" => advertise = args.next(),
other => anyhow::bail!("unknown argument {other}"),
}
}
let layers = layers
.map(|l| -> Result<(usize, usize)> {
let (s, e) = l.split_once(':').context("--layers must be start:end")?;
Ok((s.parse()?, e.parse()?))
})
.transpose()?;
inferencelayer::shard::run_worker(
&listen,
model.as_deref().map(std::path::Path::new),
inferencelayer::WorkerOptions {
layers,
vram_gb,
token,
cache_dir,
join,
advertise,
},
)
}