-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Enable FSRS by default #4391
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Enable FSRS by default #4391
Conversation
Make FSRS (Free Spaced Repetition Scheduler) enabled by default for new users and users who haven't explicitly configured it. Changes: - Add BoolKey::Fsrs to default-true boolean keys in Rust backend - Set defaultValue to true for FSRS toggle in deck options UI
|
Should we include some kind of banner the first time that option will be by default used ? Just in case some people where on SM2 by default but who'd still want to switch back to SM2 if they really want it |
Update deckconfig::update::test::updating to use actual config values from get_deck_configs_for_update() instead of hardcoded values. This ensures the test works correctly now that FSRS is enabled by default.
|
its worth noting that with this change you will be enabling fsrs for everyone that has not explicitly turned fsrs on then back off. anki/rslib/src/deckconfig/update.rs Lines 212 to 214 in 04a0b10
I can see an argument that this might be a desireable interaction but I think this case should be known and discussed. (I played around with this a few weeks back as I was gonna make this exact PR next april fools day. I thought things would move slowly enough that it would still be a relevant PR to make then) |
- Add FSRS boolean config key to protobuf definition - Update generated Rust config mapping code - Disable FSRS in test_schedv3.py tests to maintain legacy scheduler behavior - These tests are designed for the old SM-2 algorithm, not FSRS
I'm not good at UI/UX, so PR is welcome.
Sure. |
This test validates legacy SM-2 scheduler behavior and expects specific card states without FSRS memory states. Disable FSRS to maintain test compatibility.
Disable FSRS in review_queue_building and undo tests as they expect legacy SM-2 scheduler behavior for queue ordering and interval calculations.
Add Config import and disable FSRS in getEmptyCol() helper function. This ensures all tests using this helper function have FSRS disabled by default, maintaining compatibility with legacy scheduler tests.
|
FSRS has clear advantages over SM-2, and because of the "Default Effect" most people won't be likely to change the default unless something has gone wrong. |
|
We could perhaps enable it for new collections only by adding a default here: anki/rslib/src/config/schema11.rs Lines 27 to 28 in 362d09e
|
I have tested the PR's code. It has enabled FSRS by default for new collections. Edit: oh, I know what happened. For a new collection, the config doesn't have the |
|
This seems to be a good opportunity to make some changes similar to #3860 so that we don't need to read the config on every card answer. anki/rslib/src/scheduler/answering/mod.rs Line 449 in 321e23a
Please feel free to ask me to create a separate issue for this. |
Sure, please do that, thank you! |
|
@L-M-Sherlock if you want more users to test FSRS, consider shipping Anki with no default scheduler. When a new collection (new Anki profile) is created, force the user to choose one or the other. Also, a look through the Anki Forums shows many users confused or having problems with FSRS, which indicates it isn't ready yet. |
To be honest, @maimemo has been doing something similar. We shipped different schedulers all the time for A/B tests.
If there are a lot of users confused or having problems, FSRS will get fixed soon. Just like SM-2 as the default, the community has invented tons of methods to fix it. |
|
A less intrusive option is to have a popup on a new collection asking the user which scheduler they want to choose.
Example how to make a message like this: https://github.com/ankitects/anki/blob/f94d05bcbe17c8d1eacad3178c77f58c9fb3c3bd/qt/aqt/deckbrowser.py#L407C1-L429C4 |
In that case the message would need to be neutral, without bias. Your message is biased. And inaccurate for that matter. You do not have to optimize FSRS at all, as I already covered in the linked issue. It will improve retention though, if you do. Which is a huge plus compared to a non-dynamic, never adjusting algorithm like SM-2. Also: The common user has no idea which algorithm is better for them; and probably will not read even a short explaination section. So I reccon it's better to just have a default (which might be FSRS if there are no real disadvatages and if its superior results reported by users are convincing dae) and allow users to change it in the preset options |
Yeah, I think it can be adjusted. The important part is to warn users that FSRS is experimental and that there's no solid data on how it affects retention given the same number of daily reviews. Some users report higher retention, others lower. Including a link to an article that explains the differences would also be helpful. |
Iirc, FSRS is based on an algorithm that has had several papers published about it, showing improved retention. Users' so called anecdotal reports about their own retentions are not exactly reliable. For what it's worth, I find that even without the rather misleading note, the mere calling of the one ‘Anki Scheduler’ and the other ‘FSRS’ biases towards the former. Had I not known anything and just installed Anki for the first time, without the time to look into the different schedulers, I'd have chosen Anki Scheduler while I wish I'd have chosen FSRS. |

Make FSRS (Free Spaced Repetition Scheduler) enabled by default for new users and users who haven't explicitly configured it.
Changes:
close #3616
For AO, please create a new issue to keep track of it.