fast_mode
#2
by
derek-thomas
- opened
app.py
CHANGED
|
@@ -9,13 +9,32 @@ from memory_states import get_my_memory_states
|
|
| 9 |
from plot import make_plot
|
| 10 |
|
| 11 |
|
| 12 |
-
def
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
progress=gr.Progress(track_tqdm=True)):
|
| 14 |
now = datetime.now()
|
|
|
|
|
|
|
| 15 |
prefix = now.strftime(f'%Y_%m_%d_%H_%M_%S')
|
|
|
|
| 16 |
proj_dir = extract(file, prefix)
|
|
|
|
| 17 |
type_sequence, df_out = create_time_series_features(revlog_start_date, timezone, next_day_starts_at, proj_dir)
|
| 18 |
w, dataset = train_model(proj_dir)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
my_collection, rating_markdown = process_personalized_collection(requestRetention, w)
|
| 20 |
difficulty_distribution_padding, difficulty_distribution = get_my_memory_states(proj_dir, dataset, my_collection)
|
| 21 |
fig, suggested_retention_markdown = make_plot(proj_dir, type_sequence, w, difficulty_distribution_padding)
|
|
@@ -33,20 +52,10 @@ def anki_optimizer(file, timezone, next_day_starts_at, revlog_start_date, reques
|
|
| 33 |
# Ratings
|
| 34 |
{rating_markdown}
|
| 35 |
"""
|
| 36 |
-
|
| 37 |
-
w_markdown = f"""
|
| 38 |
-
# Updated Parameters
|
| 39 |
-
Copy and paste these as shown in step 5 of the instructions:
|
| 40 |
-
|
| 41 |
-
`var w = {w};`
|
| 42 |
-
|
| 43 |
-
Check out the Analysis tab for more detailed information."""
|
| 44 |
-
files = ['prediction.tsv', 'revlog.csv', 'revlog_history.tsv', 'stability_for_analysis.tsv',
|
| 45 |
-
'expected_repetitions.csv']
|
| 46 |
-
files_out = [proj_dir / file for file in files]
|
| 47 |
-
cleanup(proj_dir, files)
|
| 48 |
return w_markdown, df_out, fig, markdown_out, files_out
|
| 49 |
|
|
|
|
| 50 |
description = """
|
| 51 |
# FSRS4Anki Optimizer App
|
| 52 |
Based on the [tutorial](https://medium.com/@JarrettYe/how-to-use-the-next-generation-spaced-repetition-algorithm-fsrs-on-anki-5a591ca562e2)
|
|
@@ -61,7 +70,9 @@ with gr.Blocks() as demo:
|
|
| 61 |
gr.Markdown(description)
|
| 62 |
with gr.Box():
|
| 63 |
with gr.Row():
|
| 64 |
-
|
|
|
|
|
|
|
| 65 |
with gr.Column():
|
| 66 |
next_day_starts_at = gr.Number(value=4,
|
| 67 |
label="Next Day Starts at (Step 2)",
|
|
@@ -116,7 +127,7 @@ with gr.Blocks() as demo:
|
|
| 116 |
files_output = gr.Files(label="Analysis Files")
|
| 117 |
|
| 118 |
btn_plot.click(anki_optimizer,
|
| 119 |
-
inputs=[file, timezone, next_day_starts_at, revlog_start_date, requestRetention],
|
| 120 |
outputs=[w_output, df_output, plot_output, markdown_output, files_output])
|
| 121 |
|
| 122 |
if __name__ == '__main__':
|
|
|
|
| 9 |
from plot import make_plot
|
| 10 |
|
| 11 |
|
| 12 |
+
def get_w_markdown(w):
|
| 13 |
+
return f"""
|
| 14 |
+
# Updated Parameters
|
| 15 |
+
Copy and paste these as shown in step 5 of the instructions:
|
| 16 |
+
|
| 17 |
+
`var w = {w};`
|
| 18 |
+
Check out the Analysis tab for more detailed information."""
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
def anki_optimizer(file, timezone, next_day_starts_at, revlog_start_date, requestRetention, fast_mode,
|
| 22 |
progress=gr.Progress(track_tqdm=True)):
|
| 23 |
now = datetime.now()
|
| 24 |
+
files = ['prediction.tsv', 'revlog.csv', 'revlog_history.tsv', 'stability_for_analysis.tsv',
|
| 25 |
+
'expected_repetitions.csv']
|
| 26 |
prefix = now.strftime(f'%Y_%m_%d_%H_%M_%S')
|
| 27 |
+
|
| 28 |
proj_dir = extract(file, prefix)
|
| 29 |
+
|
| 30 |
type_sequence, df_out = create_time_series_features(revlog_start_date, timezone, next_day_starts_at, proj_dir)
|
| 31 |
w, dataset = train_model(proj_dir)
|
| 32 |
+
w_markdown = get_w_markdown(w)
|
| 33 |
+
cleanup(proj_dir, files)
|
| 34 |
+
if fast_mode:
|
| 35 |
+
files_out = [proj_dir / file for file in files if (proj_dir / file).exists()]
|
| 36 |
+
return w_markdown, None, None, "", files_out
|
| 37 |
+
|
| 38 |
my_collection, rating_markdown = process_personalized_collection(requestRetention, w)
|
| 39 |
difficulty_distribution_padding, difficulty_distribution = get_my_memory_states(proj_dir, dataset, my_collection)
|
| 40 |
fig, suggested_retention_markdown = make_plot(proj_dir, type_sequence, w, difficulty_distribution_padding)
|
|
|
|
| 52 |
# Ratings
|
| 53 |
{rating_markdown}
|
| 54 |
"""
|
| 55 |
+
files_out = [proj_dir / file for file in files if (proj_dir / file).exists()]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
return w_markdown, df_out, fig, markdown_out, files_out
|
| 57 |
|
| 58 |
+
|
| 59 |
description = """
|
| 60 |
# FSRS4Anki Optimizer App
|
| 61 |
Based on the [tutorial](https://medium.com/@JarrettYe/how-to-use-the-next-generation-spaced-repetition-algorithm-fsrs-on-anki-5a591ca562e2)
|
|
|
|
| 70 |
gr.Markdown(description)
|
| 71 |
with gr.Box():
|
| 72 |
with gr.Row():
|
| 73 |
+
with gr.Column():
|
| 74 |
+
file = gr.File(label='Review Logs (Step 1)')
|
| 75 |
+
fast_mode_in = gr.Checkbox(value=False, label="Fast Mode (No analysis)")
|
| 76 |
with gr.Column():
|
| 77 |
next_day_starts_at = gr.Number(value=4,
|
| 78 |
label="Next Day Starts at (Step 2)",
|
|
|
|
| 127 |
files_output = gr.Files(label="Analysis Files")
|
| 128 |
|
| 129 |
btn_plot.click(anki_optimizer,
|
| 130 |
+
inputs=[file, timezone, next_day_starts_at, revlog_start_date, requestRetention, fast_mode_in],
|
| 131 |
outputs=[w_output, df_output, plot_output, markdown_output, files_output])
|
| 132 |
|
| 133 |
if __name__ == '__main__':
|