diff --git a/proto/anki/scheduler.proto b/proto/anki/scheduler.proto index bc78100e2..38a352d13 100644 --- a/proto/anki/scheduler.proto +++ b/proto/anki/scheduler.proto @@ -434,6 +434,7 @@ message EvaluateWeightsRequest { message EvaluateWeightsResponse { float log_loss = 1; float rmse_bins = 2; + uint32 review_count = 3; } message ComputeMemoryStateResponse { diff --git a/rslib/src/scheduler/fsrs/weights.rs b/rslib/src/scheduler/fsrs/weights.rs index 93957a69b..45697f38a 100644 --- a/rslib/src/scheduler/fsrs/weights.rs +++ b/rslib/src/scheduler/fsrs/weights.rs @@ -152,7 +152,7 @@ impl Collection { weights: &Weights, search: &str, ignore_revlogs_before: TimestampMillis, - ) -> Result { + ) -> Result<(u32, ModelEvaluation)> { let timing = self.timing_today()?; let mut anki_progress = self.new_progress_handler::(); let guard = self.search_cards_into_table(search, SortMode::NoOrder)?; @@ -164,14 +164,17 @@ impl Collection { fsrs_items_for_training(revlogs, timing.next_day_at, ignore_revlogs_before); anki_progress.state.reviews = review_count as u32; let fsrs = FSRS::new(Some(weights))?; - Ok(fsrs.evaluate(items, |ip| { - anki_progress - .update(false, |p| { - p.total_iterations = ip.total as u32; - p.current_iteration = ip.current as u32; - }) - .is_ok() - })?) + Ok(( + review_count as u32, + fsrs.evaluate(items, |ip| { + anki_progress + .update(false, |p| { + p.total_iterations = ip.total as u32; + p.current_iteration = ip.current as u32; + }) + .is_ok() + })?, + )) } } diff --git a/rslib/src/scheduler/service/mod.rs b/rslib/src/scheduler/service/mod.rs index 04f4fd90c..003cb2b10 100644 --- a/rslib/src/scheduler/service/mod.rs +++ b/rslib/src/scheduler/service/mod.rs @@ -287,7 +287,7 @@ impl crate::services::SchedulerService for Collection { &mut self, input: scheduler::EvaluateWeightsRequest, ) -> Result { - let ret = self.evaluate_weights( + let (review_count, ret) = self.evaluate_weights( &input.weights, &input.search, input.ignore_revlogs_before_ms.into(), @@ -295,6 +295,7 @@ impl crate::services::SchedulerService for Collection { Ok(scheduler::EvaluateWeightsResponse { log_loss: ret.log_loss, rmse_bins: ret.rmse_bins, + review_count, }) } diff --git a/ts/routes/deck-options/FsrsOptions.svelte b/ts/routes/deck-options/FsrsOptions.svelte index 25f479878..e99241558 100644 --- a/ts/routes/deck-options/FsrsOptions.svelte +++ b/ts/routes/deck-options/FsrsOptions.svelte @@ -172,7 +172,9 @@ License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html setTimeout( () => alert( - `Log loss: ${resp.logLoss.toFixed(4)}, RMSE(bins): ${( + `Reviews: ${ + resp.reviewCount + }, Log loss: ${resp.logLoss.toFixed(4)}, RMSE(bins): ${( resp.rmseBins * 100 ).toFixed(2)}%. ${tr.deckConfigSmallerIsBetter()}`, ),