跳到主要内容

创建实例

let mut ai = match Model::new("model.darmodel") {
Ok(m) => m,
Err(e) => { eprintln!("加载失败: {}", e.message); return; }
};
match ai.open(None) {
Ok(true) => println!("已打开"),
Ok(false) => println!("打开未完成"),
Err(e) => eprintln!("打开失败: {}", e.message),
}
后缀路由
darmodel(不区分大小写)按加密容器打开
其它后缀按明文模型打开

只读元信息​

new()​

pub fn new(model_path: impl Into<String>) -> Result<Self, AiError>

这是创建实例的唯一入口。model_path 传模型文件路径,未 open 前不占 GPU。

示例:

let mut ai = match Model::new("model.darmodel") {
Ok(m) => m,
Err(e) => { eprintln!("加载失败: {}", e.message); return; }
};

probe()​

pub fn probe(model_path: impl AsRef<str>) -> Result<String, Error>

只读模型的元数据 JSON,返回 JSON 文本。

示例:

match Model::probe("model.onnx") {
Ok(json) => println!("{json}"),
Err(Error::IoNotFound { message, .. }) => eprintln!("文件不存在: {message}"),
Err(Error::BadContainer { message, hint }) => eprintln!("容器损坏: {message}|{hint}"),
Err(Error::MetaUnavailable { message, .. }) => eprintln!("元数据读不出: {message}"),
Err(e) => eprintln!("探测失败: {}", e.message()),
}

指名 Provider​

指名的不可用时自动回落。open 后可用 selected_provider() 查看实际所选。

密码:唯一解锁​

open()​

pub fn open(&mut self, password: Option<&str>) -> Result<bool, AiError>

解锁并打开模型,是唯一的解锁入口。password 传激活码,不需要密码的容器传 None。

示例:

let mut m = Model::new("model.darmodel")?.provider("onnx-cuda");
match m.open(Some("pwd")) {
Ok(true) => println!("已打开,provider = {:?}", m.selected_provider()),
Ok(false) => println!("打开未完成"),
Err(e) => eprintln!("打开失败: {}", e.message),
}

加载结果​

open 结果四种:

结果含义
试用可先用,有次数或期限限制
绑定本次首次通过凭据并完成绑定
已绑定之前已绑定,直接可用
未通过打开失败,看错误信息

看 UnlockInfo 判断:trial 为真即试用;bound 为假即本次完成绑定;失败看 error_code 非 0。

示例:

let info = /* open 后的 UnlockInfo */;
if info.error_code != 0 {
eprintln!("未通过: {}", info.message);
} else if info.trial {
println!("试用,还剩 {} 次", info.trial_remaining);
} else if info.bound {
println!("已绑定,直接用");
} else {
println!("绑定完成,直接用");
}

装入类别名​

可以把一张类别名表注入到会话里,用来覆盖显示时的名称。推理结果里如果某条缺少 label 字段,就按它的 class_id 从这张表里取名字。

set_labels()​

pub fn set_labels<I, S>(&mut self, labels: I) -> Result<(), AiError>
where
I: IntoIterator<Item = S>,
S: Into<String>

随时可调,open 后生效。用一整张表替换注入的类别名,下标对应 class_id,只改显示用的名字;名字为空返回错误,传空表等于清空(同 clear_labels())。

示例:

ai.set_labels(["OK", "NG"])?;

clear_labels()​

pub fn clear_labels(&mut self) -> Result<(), AiError>

随时可调,open 后生效。清掉注入的类别名表,回到模型自带的类别名,无参数;本来不注入就是这个状态。

示例:

ai.clear_labels()?;

取消​

cancel()​

pub fn cancel(&self) -> Result<(), AiError>

尝试取消正在执行的推理。深层推理不可中断,跑完结果被丢弃;幂等,不能当同步停止用。

资源释放​

close()​

pub fn close(&mut self)

关掉这个实例,任何状态调用都安全。

示例:

m.close();