Repository: comic/grand-challenge.org

Issue:
Motivate algorithm creators to update model facts label
- [ ] We could also always list all headings under "Update Description" with the text "left empty" if a field is not documented
- [ ] We should automatically cite the model facts label paper at the end of each algorithm page

Sendak, M.P., Gao, M., Brajer, N. et al. Presenting machine learning model information to clinical end users with model facts labels. npj Digit. Med. 3, 41 (2020). https://doi.org/10.1038/s41746-020-0253-3







Discussion:

Resolving patch:
diff --git a/app/grandchallenge/algorithms/forms.py b/app/grandchallenge/algorithms/forms.py
--- a/app/grandchallenge/algorithms/forms.py
+++ b/app/grandchallenge/algorithms/forms.py
@@ -229,7 +229,6 @@ class Meta:
             "workstation_config",
             "hanging_protocol",
             "view_content",
-            "detail_page_markdown",
             "job_create_page_markdown",
             "additional_terms_markdown",
             "result_template",
@@ -242,7 +241,6 @@ class Meta:
         )
         widgets = {
             "description": TextInput,
-            "detail_page_markdown": MarkdownEditorWidget,
             "job_create_page_markdown": MarkdownEditorWidget,
             "additional_terms_markdown": MarkdownEditorWidget,
             "result_template": MarkdownEditorWidget,
@@ -289,7 +287,6 @@ class Meta:
                 reverse_lazy("publications:create"),
             ),
             "description": "Short description of this algorithm, max 1024 characters. This will appear in the info modal on the algorithm overview list.",
-            "detail_page_markdown": "<span class='text-danger'><i class='fa fa-exclamation-triangle'></i> This field will be deprecated. Please use the separate 'Algorithm description' form on the Information page to describe your algorithm instead.</span>",
             "hanging_protocol": format_lazy(
                 (
                     "The hanging protocol to use for this algorithm. "
@@ -332,7 +329,6 @@ def __init__(self, *args, **kwargs):
                 "outputs",
                 "image_requires_gpu",
                 "image_requires_memory_gb",
-                ModelFactsTextField("detail_page_markdown"),
                 "additional_terms_markdown",
                 "job_create_page_markdown",
                 "result_template",
@@ -936,7 +932,7 @@ def _save_new_algorithm(self):
             )
 
         original_url = self.algorithm_serializer.initial_data["url"]
-        self.algorithm.detail_page_markdown += (
+        self.algorithm.summary += (
             f"\n\n#### Origin\n\nImported from "
             f"[{urlparse(original_url).netloc}]({original_url})."
         )


Test patch:
diff --git a/app/tests/algorithms_tests/test_views.py b/app/tests/algorithms_tests/test_views.py
--- a/app/tests/algorithms_tests/test_views.py
+++ b/app/tests/algorithms_tests/test_views.py
@@ -788,9 +788,7 @@ def list_algorithm_images(self, **__):
     assert algorithm.logo.name.startswith(
         "logos/algorithm/0d11fc7b-c63f-4fd7-b80b-51d2e21492c0/square_logo"
     )
-    assert (
-        "Imported from [grand-challenge.org]" in algorithm.detail_page_markdown
-    )
+    assert "Imported from [grand-challenge.org]" in algorithm.summary
     assert {i.slug for i in algorithm.inputs.all()} == {
         "clinical-information-prostate-mri",
         "coronal-t2-prostate-mri",