1use anyhow::Result;
19use rlx_flow::BuiltModel;
20
21use super::config::SamEncoderConfig;
22use super::preprocess::SamPreprocessWeights;
23use rlx_core::flow_util::built_from_hir;
24use rlx_core::weight_map::WeightMap;
25
26#[derive(Debug, Clone)]
27pub struct SamEncoderFlow<'a> {
28 cfg: &'a SamEncoderConfig,
29}
30
31impl<'a> SamEncoderFlow<'a> {
32 pub fn new(cfg: &'a SamEncoderConfig) -> Self {
33 Self { cfg }
34 }
35
36 pub fn build(self, weights: &mut WeightMap) -> Result<SamEncoderBuilt> {
37 let (hir, params, preprocess) =
38 super::image_encoder::build_sam_encoder_hir(self.cfg, weights)?;
39 Ok(SamEncoderBuilt {
40 model: built_from_hir(hir, params)?,
41 preprocess,
42 })
43 }
44}
45
46pub struct SamEncoderBuilt {
47 pub model: BuiltModel,
48 pub preprocess: SamPreprocessWeights,
49}
50
51pub fn build_sam_encoder_built(
52 cfg: &SamEncoderConfig,
53 weights: &mut WeightMap,
54) -> Result<SamEncoderBuilt> {
55 SamEncoderFlow::new(cfg).build(weights)
56}