use crate::config::Qwen3Config;
use anyhow::Result;
use rlx_core::validate_lm_device;
pub use rlx_core::{LM_DEVICE_NAMES, STANDARD_DEVICE_NAMES, STANDARD_DEVICES};
use rlx_runtime::Device;
pub fn validate_device(cfg: &Qwen3Config, device: Device, packed_weights: bool) -> Result<()> {
let _ = (cfg, packed_weights);
validate_lm_device("qwen3", device)
}
#[cfg(test)]
mod tests {
use super::*;
use rlx_core::STANDARD_DEVICES;
fn tiny_cfg() -> Qwen3Config {
Qwen3Config {
vocab_size: 32,
hidden_size: 16,
intermediate_size: 32,
num_hidden_layers: 2,
num_attention_heads: 4,
num_key_value_heads: 2,
head_dim: 8,
max_position_embeddings: 16,
rms_norm_eps: 1e-6,
rope_theta: 1_000_000.0,
hidden_act: "silu".into(),
tie_word_embeddings: false,
attention_bias: false,
qk_norm: true,
sliding_window: None,
max_window_layers: usize::MAX,
use_sliding_window: false,
num_experts: 0,
num_experts_used: 0,
expert_ffn_size: 0,
shared_expert_ffn_size: 0,
expert_weights_scale: 1.0,
}
}
#[test]
fn all_standard_backends_allowed() {
let cfg = tiny_cfg();
for dev in STANDARD_DEVICES {
validate_device(&cfg, *dev, false).unwrap();
validate_device(&cfg, *dev, true).unwrap();
}
}
#[cfg(feature = "coreml")]
#[test]
fn coreml_ane_allowed() {
let cfg = tiny_cfg();
validate_device(&cfg, Device::Ane, true).unwrap();
}
}