use sim_kernel::{Error, Result, Symbol};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct BackendDescriptor {
pub address: String,
pub head: String,
pub runner: Symbol,
pub fixture: bool,
}
pub fn resolve_atom_address(address: &str) -> Result<BackendDescriptor> {
let Some((head, _)) = address.split_once('/') else {
return Err(model_not_found(address));
};
if !KNOWN_HEADS.contains(&head) {
return Err(model_not_found(address));
}
Ok(BackendDescriptor {
address: address.to_owned(),
head: head.to_owned(),
runner: Symbol::new(address.to_owned()),
fixture: head == "fixture",
})
}
fn model_not_found(address: &str) -> Error {
Error::Eval(format!("model_not_found: {address}"))
}
const KNOWN_HEADS: &[&str] = &[
"openai", "ollama", "process", "runner", "agent", "skill", "sim", "fixture", "gateway",
];