metrale_model_engine/model/trait_impl/
impl_adapters.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2
3//! 2026-09-26: `impl ModelAdapters for TransformerModel`, mostly delegating to `<method>_dispatch`
4//! helpers in the sibling modules.
5//!
6//! Owner: model-engine.
7//! Invariants: the ones in `trait_impl/mod.rs`.
8
9use anyhow::Result;
10
11use crate::model::types::TransformerModel;
12use crate::traits::ModelAdapters;
13
14impl ModelAdapters for TransformerModel {
15    fn set_active_lora(&mut self, name: &str) -> Result<()> {
16        self.rotate_lora_to(name)
17    }
18
19    fn adapter_id_for(&self, slot: i32) -> u64 {
20        self.adapter_id_for_slot(slot)
21    }
22
23    fn acquire_adapter_slot(&self, slot: i32) -> i32 {
24        TransformerModel::acquire_adapter_slot(self, slot)
25    }
26
27    fn release_adapter_slot(&self, resolved: i32) {
28        TransformerModel::release_adapter_slot(self, resolved)
29    }
30
31    fn swap_lora_from_disk(
32        &mut self,
33        dir: &std::path::Path,
34        name: &str,
35        slot: usize,
36    ) -> Result<()> {
37        // 2026-09-25: Disk staging reads files and needs no RDMA, unlike the
38        // unix-only peer path. It is cuda-gated because it loads into a device
39        // weight store.
40        #[cfg(feature = "cuda")]
41        {
42            self.swap_lora_slot_from_disk(dir, name, slot)
43        }
44        #[cfg(not(feature = "cuda"))]
45        {
46            let _ = (dir, name, slot);
47            anyhow::bail!("LoRA disk swap requires the cuda feature")
48        }
49    }
50
51    fn promote_lora_from_peer(
52        &mut self,
53        peer_addr: &str,
54        adapter_id: &str,
55        name: &str,
56        peft: metrale_config::PeftAdapterConfig,
57    ) -> Result<(usize, Option<String>)> {
58        #[cfg(all(feature = "cuda", unix))]
59        {
60            self.promote_lora_slot_from_peer(peer_addr, adapter_id, name, peft)
61        }
62        #[cfg(not(all(feature = "cuda", unix)))]
63        {
64            let _ = (peer_addr, adapter_id, name, peft);
65            anyhow::bail!("LoRA peer promotion stages over RDMA (rdma-core); unix-only")
66        }
67    }
68
69    fn promote_lora_from_disk(
70        &mut self,
71        dir: &std::path::Path,
72        name: &str,
73    ) -> Result<(usize, Option<String>)> {
74        #[cfg(feature = "cuda")]
75        {
76            self.promote_lora_slot_from_disk(dir, name)
77        }
78        #[cfg(not(feature = "cuda"))]
79        {
80            let _ = (dir, name);
81            anyhow::bail!("LoRA disk promotion requires the cuda feature")
82        }
83    }
84}