Switch classifier sessions onto bread-onnx v0.7.2
All checks were successful
check / check (push) Successful in 3m42s
dev release / build (push) Successful in 2m28s

Replace local ort Session::builder/ROCm wiring with bread_onnx::build_session
(MIGraphX + CPU fallback, same pin as breadmill). Drop the breadman
chip/init_adw shim now that bread-theme v0.7.4 exports those helpers.
This commit is contained in:
Breadway 2026-08-23 14:42:57 +08:00
parent 51338af7eb
commit 39e26a1b9f
11 changed files with 254 additions and 137 deletions

View file

@ -1,17 +1,24 @@
use breadpad_shared::classifier::{Classifier, ExecutionProvider};
use breadpad_shared::types::NoteType;
use chrono::Timelike;
use std::path::PathBuf;
/// Rule-based path only — a present `~/.local/share/breadpad/model` must not
/// change these assertions.
fn cl() -> Classifier {
Classifier::load("08:00")
Classifier::load_with_paths(
"08:00",
PathBuf::from("/nonexistent/classifier.onnx"),
PathBuf::from("/nonexistent/tokenizer.json"),
)
}
#[test]
fn active_provider_is_valid() {
// The active provider depends on the host: a machine with the ONNX model present and
// a working ROCm iGPU loads `Gpu`, otherwise `Cpu`. Either is valid — but when no
// a working MIGraphX iGPU loads `Gpu`, otherwise `Cpu`. Either is valid — but when no
// model is available we must be on CPU (no session => no GPU EP in use).
let c = cl();
let c = Classifier::load("08:00");
assert!(matches!(
c.active_provider,
ExecutionProvider::Cpu | ExecutionProvider::Gpu
@ -49,19 +56,28 @@ fn classify_reminder_via_fallback() {
#[test]
fn classify_idea_via_fallback() {
let mut c = cl();
assert_eq!(c.classify("what if we added a calendar view").note_type, NoteType::Idea);
assert_eq!(
c.classify("what if we added a calendar view").note_type,
NoteType::Idea
);
}
#[test]
fn classify_question_via_fallback() {
let mut c = cl();
assert_eq!(c.classify("why does this fail?").note_type, NoteType::Question);
assert_eq!(
c.classify("why does this fail?").note_type,
NoteType::Question
);
}
#[test]
fn classify_note_via_fallback() {
let mut c = cl();
assert_eq!(c.classify("meeting went well today").note_type, NoteType::Note);
assert_eq!(
c.classify("meeting went well today").note_type,
NoteType::Note
);
}
#[test]
@ -74,7 +90,11 @@ fn classify_recurrence_via_fallback() {
#[test]
fn classify_custom_morning_time() {
let mut c = Classifier::load("07:15");
let mut c = Classifier::load_with_paths(
"07:15",
PathBuf::from("/nonexistent/classifier.onnx"),
PathBuf::from("/nonexistent/tokenizer.json"),
);
let r = c.classify("sync tomorrow morning");
let t = r.time.expect("should have a time for tomorrow morning");
let local: chrono::DateTime<chrono::Local> = t.into();
@ -114,12 +134,16 @@ fn classify_returns_cleaned_body() {
let mut c = cl();
let r = c.classify("call mum at 6pm");
assert!(r.body.contains("call mum"), "body: {}", r.body);
assert!(!r.body.contains("6pm"), "time phrase should be stripped from body: {}", r.body);
assert!(
!r.body.contains("6pm"),
"time phrase should be stripped from body: {}",
r.body
);
}
#[test]
fn model_path_points_to_expected_location() {
let c = cl();
let c = Classifier::load("08:00");
assert!(
c.model_path.to_str().unwrap().contains("breadpad"),
"model path: {:?}",