mirror of
https://github.com/ankitects/anki.git
synced 2025-09-18 14:02:21 -04:00
parent
9e1690774c
commit
da90705346
3 changed files with 50 additions and 0 deletions
|
@ -56,6 +56,8 @@ service SchedulerService {
|
||||||
rpc SimulateFsrsReview(SimulateFsrsReviewRequest)
|
rpc SimulateFsrsReview(SimulateFsrsReviewRequest)
|
||||||
returns (SimulateFsrsReviewResponse);
|
returns (SimulateFsrsReviewResponse);
|
||||||
rpc EvaluateParams(EvaluateParamsRequest) returns (EvaluateParamsResponse);
|
rpc EvaluateParams(EvaluateParamsRequest) returns (EvaluateParamsResponse);
|
||||||
|
rpc EvaluateParamsLegacy(EvaluateParamsLegacyRequest)
|
||||||
|
returns (EvaluateParamsResponse);
|
||||||
rpc ComputeMemoryState(cards.CardId) returns (ComputeMemoryStateResponse);
|
rpc ComputeMemoryState(cards.CardId) returns (ComputeMemoryStateResponse);
|
||||||
// The number of days the calculated interval was fuzzed by on the previous
|
// The number of days the calculated interval was fuzzed by on the previous
|
||||||
// review (if any). Utilized by the FSRS add-on.
|
// review (if any). Utilized by the FSRS add-on.
|
||||||
|
@ -442,6 +444,12 @@ message EvaluateParamsRequest {
|
||||||
uint32 num_of_relearning_steps = 3;
|
uint32 num_of_relearning_steps = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message EvaluateParamsLegacyRequest {
|
||||||
|
repeated float params = 1;
|
||||||
|
string search = 2;
|
||||||
|
int64 ignore_revlogs_before_ms = 3;
|
||||||
|
}
|
||||||
|
|
||||||
message EvaluateParamsResponse {
|
message EvaluateParamsResponse {
|
||||||
float log_loss = 1;
|
float log_loss = 1;
|
||||||
float rmse_bins = 2;
|
float rmse_bins = 2;
|
||||||
|
|
|
@ -299,6 +299,33 @@ impl Collection {
|
||||||
.is_ok()
|
.is_ok()
|
||||||
})?)
|
})?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn evaluate_params_legacy(
|
||||||
|
&mut self,
|
||||||
|
params: &Params,
|
||||||
|
search: &str,
|
||||||
|
ignore_revlogs_before: TimestampMillis,
|
||||||
|
) -> Result<ModelEvaluation> {
|
||||||
|
let timing = self.timing_today()?;
|
||||||
|
let mut anki_progress = self.new_progress_handler::<ComputeParamsProgress>();
|
||||||
|
let guard = self.search_cards_into_table(search, SortMode::NoOrder)?;
|
||||||
|
let revlogs: Vec<RevlogEntry> = guard
|
||||||
|
.col
|
||||||
|
.storage
|
||||||
|
.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);
|
||||||
|
anki_progress.state.reviews = review_count as u32;
|
||||||
|
let fsrs = FSRS::new(Some(params))?;
|
||||||
|
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()
|
||||||
|
})?)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Default, Clone, Copy, Debug)]
|
#[derive(Default, Clone, Copy, Debug)]
|
||||||
|
|
|
@ -307,6 +307,21 @@ impl crate::services::SchedulerService for Collection {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn evaluate_params_legacy(
|
||||||
|
&mut self,
|
||||||
|
input: scheduler::EvaluateParamsLegacyRequest,
|
||||||
|
) -> Result<scheduler::EvaluateParamsResponse> {
|
||||||
|
let ret = self.evaluate_params_legacy(
|
||||||
|
&input.params,
|
||||||
|
&input.search,
|
||||||
|
input.ignore_revlogs_before_ms.into(),
|
||||||
|
)?;
|
||||||
|
Ok(scheduler::EvaluateParamsResponse {
|
||||||
|
log_loss: ret.log_loss,
|
||||||
|
rmse_bins: ret.rmse_bins,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn get_optimal_retention_parameters(
|
fn get_optimal_retention_parameters(
|
||||||
&mut self,
|
&mut self,
|
||||||
input: scheduler::GetOptimalRetentionParametersRequest,
|
input: scheduler::GetOptimalRetentionParametersRequest,
|
||||||
|
|
Loading…
Reference in a new issue