From 10d567f93744ca2d5fb9593f0922475df573c2f9 Mon Sep 17 00:00:00 2001 From: Jarrett Ye Date: Fri, 5 Apr 2024 20:04:50 +0800 Subject: [PATCH] Update to FSRS-rs v0.6.1 (#3106) * update to FSRS-rs 0.6.0 * update to crates.io version * format * update to FSRS-rs v0.6.01 * ./ninja fix:minilints * update python backend code --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- cargo/licenses.json | 2 +- proto/anki/scheduler.proto | 1 - pylib/anki/_backend.py | 6 ++---- rslib/src/scheduler/fsrs/weights.rs | 13 +------------ rslib/src/scheduler/service/mod.rs | 8 +------- 7 files changed, 8 insertions(+), 28 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5ed3130b8..260a50edf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1793,9 +1793,9 @@ dependencies = [ [[package]] name = "fsrs" -version = "0.5.5" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a04c31041078628c5ce7310be96c987bf7f33a3f8815fa0fcdb084eb31feba" +checksum = "008fbd5019345f9066a4b5b73373151a1faf61372b469c9db14fce0abd78468f" dependencies = [ "burn", "itertools 0.12.1", diff --git a/Cargo.toml b/Cargo.toml index 197797ea8..d49ee796f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,7 @@ git = "https://github.com/ankitects/linkcheck.git" rev = "184b2ca50ed39ca43da13f0b830a463861adb9ca" [workspace.dependencies.fsrs] -version = "0.5.5" +version = "0.6.1" # git = "https://github.com/open-spaced-repetition/fsrs-rs.git" # rev = "58ca25ed2bc4bb1dc376208bbcaed7f5a501b941" # path = "../open-spaced-repetition/fsrs-rs" diff --git a/cargo/licenses.json b/cargo/licenses.json index 0750497ac..fccbfaf07 100644 --- a/cargo/licenses.json +++ b/cargo/licenses.json @@ -1198,7 +1198,7 @@ }, { "name": "fsrs", - "version": "0.5.5", + "version": "0.6.1", "authors": "Open Spaced Repetition", "repository": "https://github.com/open-spaced-repetition/fsrs-rs", "license": "BSD-3-Clause", diff --git a/proto/anki/scheduler.proto b/proto/anki/scheduler.proto index a3b993d99..bc78100e2 100644 --- a/proto/anki/scheduler.proto +++ b/proto/anki/scheduler.proto @@ -357,7 +357,6 @@ message ComputeFsrsWeightsFromItemsRequest { message FsrsBenchmarkRequest { repeated FsrsItem train_set = 1; - repeated FsrsItem test_set = 2; } message FsrsBenchmarkResponse { diff --git a/pylib/anki/_backend.py b/pylib/anki/_backend.py index 7a2ab571a..70e294e77 100644 --- a/pylib/anki/_backend.py +++ b/pylib/anki/_backend.py @@ -151,10 +151,8 @@ class RustBackend(RustBackendGenerated): def compute_weights_from_items(self, items: Iterable[FsrsItem]) -> Sequence[float]: return self.compute_fsrs_weights_from_items(items).weights - def benchmark( - self, train_set: Iterable[FsrsItem], test_set: Iterable[FsrsItem] - ) -> Sequence[float]: - return self.fsrs_benchmark(train_set=train_set, test_set=test_set) + def benchmark(self, train_set: Iterable[FsrsItem]) -> Sequence[float]: + return self.fsrs_benchmark(train_set=train_set) def _run_command(self, service: int, method: int, input: bytes) -> bytes: start = time.time() diff --git a/rslib/src/scheduler/fsrs/weights.rs b/rslib/src/scheduler/fsrs/weights.rs index 38fb6e1ad..19c13b51c 100644 --- a/rslib/src/scheduler/fsrs/weights.rs +++ b/rslib/src/scheduler/fsrs/weights.rs @@ -64,11 +64,6 @@ impl Collection { let (items, review_count) = fsrs_items_for_training(revlogs.clone(), timing.next_day_at, ignore_revlogs_before); - if review_count < 400 { - return Err(AnkiError::FsrsInsufficientReviews { - count: review_count, - }); - } let fsrs_items = items.len() as u32; anki_progress.update(false, |p| { p.current_preset = current_preset; @@ -95,8 +90,7 @@ impl Collection { }); let fsrs = FSRS::new(Some(current_weights))?; let current_rmse = fsrs.evaluate(items.clone(), |_| true)?.rmse_bins; - let mut weights = - fsrs.compute_parameters(items.clone(), fsrs_items < 1000, Some(progress2))?; + let mut weights = fsrs.compute_parameters(items.clone(), Some(progress2))?; let optimized_fsrs = FSRS::new(Some(&weights))?; let optimized_rmse = optimized_fsrs.evaluate(items.clone(), |_| true)?.rmse_bins; if current_rmse <= optimized_rmse { @@ -162,11 +156,6 @@ impl Collection { .get_revlog_entries_for_searched_cards_in_card_order()?; let (items, review_count) = fsrs_items_for_training(revlogs, timing.next_day_at, ignore_revlogs_before); - if review_count < 400 { - return Err(AnkiError::FsrsInsufficientReviews { - count: review_count, - }); - } anki_progress.state.reviews = review_count as u32; let fsrs = FSRS::new(Some(weights))?; Ok(fsrs.evaluate(items, |ip| { diff --git a/rslib/src/scheduler/service/mod.rs b/rslib/src/scheduler/service/mod.rs index 534b8dcaf..04f4fd90c 100644 --- a/rslib/src/scheduler/service/mod.rs +++ b/rslib/src/scheduler/service/mod.rs @@ -333,7 +333,6 @@ impl crate::services::BackendSchedulerService for Backend { let fsrs_items = req.items.len() as u32; let weights = fsrs.compute_parameters( req.items.into_iter().map(fsrs_item_proto_to_fsrs).collect(), - false, None, )?; Ok(ComputeFsrsWeightsResponse { @@ -352,12 +351,7 @@ impl crate::services::BackendSchedulerService for Backend { .into_iter() .map(fsrs_item_proto_to_fsrs) .collect(); - let test_set = req - .test_set - .into_iter() - .map(fsrs_item_proto_to_fsrs) - .collect(); - let weights = fsrs.benchmark(train_set, test_set); + let weights = fsrs.benchmark(train_set); Ok(FsrsBenchmarkResponse { weights }) } }