use anyhow::{bail, Result};
use sapient_ir::graph::Graph;
use sapient_hub::model_info::{ArchType, ModelInfo};
use crate::architectures::{bert, gemma, gpt2, llama, mixtral, phi, qwen};
pub struct ModelGraph {
pub graph: Graph,
pub info: ModelInfo,
}
pub fn build_graph(info: &ModelInfo) -> Result<ModelGraph> {
let graph = match &info.arch {
ArchType::Llama => llama::build(info)?,
ArchType::Phi => phi::build(info)?,
ArchType::Gemma => gemma::build(info)?,
ArchType::Gpt2 => gpt2::build(info)?,
ArchType::Bert => bert::build(info)?,
ArchType::Qwen => qwen::build(info)?,
ArchType::Mixtral => mixtral::build(info)?,
ArchType::Falcon => {
llama::build(info)?
}
ArchType::Unknown(name) => bail!(
"Unsupported architecture: '{name}'. \
If this is a GGUF model, load it directly via `Pipeline::from_gguf(path)`."
),
_ => bail!("Architecture {:?} not yet implemented", info.arch),
};
Ok(ModelGraph {
graph,
info: info.clone(),
})
}