diff --git a/arkindex/documents/fixtures/data.json b/arkindex/documents/fixtures/data.json
index 0ef2f121170e2db74c72bc3e874e9b6b114c49ae..efd6ebcd8817dca400f85166fbe46631cc9d803d 100644
--- a/arkindex/documents/fixtures/data.json
+++ b/arkindex/documents/fixtures/data.json
@@ -309,7 +309,7 @@
         },
         "state": "available",
         "gpu_usage": "required",
-        "model_usage": false,
+        "model_usage": "disabled",
         "docker_image": "a93301c3-bdac-4d06-ba22-b7066decd282",
         "docker_image_iid": null,
         "created": "2020-02-02T01:23:45.678Z",
@@ -328,7 +328,7 @@
         },
         "state": "created",
         "gpu_usage": "disabled",
-        "model_usage": false,
+        "model_usage": "disabled",
         "docker_image": null,
         "docker_image_iid": null,
         "created": "2020-02-02T01:23:45.678Z",
@@ -345,7 +345,7 @@
         "configuration": {},
         "state": "available",
         "gpu_usage": "disabled",
-        "model_usage": false,
+        "model_usage": "disabled",
         "docker_image": "a93301c3-bdac-4d06-ba22-b7066decd282",
         "docker_image_iid": null,
         "created": "2020-02-02T01:23:45.678Z",
@@ -364,7 +364,7 @@
         },
         "state": "available",
         "gpu_usage": "disabled",
-        "model_usage": false,
+        "model_usage": "disabled",
         "docker_image": "a93301c3-bdac-4d06-ba22-b7066decd282",
         "docker_image_iid": null,
         "created": "2020-02-02T01:23:45.678Z",
@@ -383,7 +383,7 @@
         },
         "state": "available",
         "gpu_usage": "disabled",
-        "model_usage": true,
+        "model_usage": "required",
         "docker_image": "a93301c3-bdac-4d06-ba22-b7066decd282",
         "docker_image_iid": null,
         "created": "2020-02-02T01:23:45.678Z",
@@ -402,7 +402,7 @@
         },
         "state": "available",
         "gpu_usage": "disabled",
-        "model_usage": false,
+        "model_usage": "disabled",
         "docker_image": "a93301c3-bdac-4d06-ba22-b7066decd282",
         "docker_image_iid": null,
         "created": "2020-02-02T01:23:45.678Z",
diff --git a/arkindex/documents/management/commands/bootstrap.py b/arkindex/documents/management/commands/bootstrap.py
index 40235e163826c475f3cc8ae770e88c01a4c96545..23dda2d5e2b8e70cd10a90720ff506411d4b290f 100644
--- a/arkindex/documents/management/commands/bootstrap.py
+++ b/arkindex/documents/management/commands/bootstrap.py
@@ -10,14 +10,7 @@ from rest_framework.authtoken.models import Token
 
 from arkindex.images.models import ImageServer
 from arkindex.ponos.models import Farm
-from arkindex.process.models import (
-    Repository,
-    Worker,
-    WorkerType,
-    WorkerVersion,
-    WorkerVersionGPUUsage,
-    WorkerVersionState,
-)
+from arkindex.process.models import FeatureUsage, Repository, Worker, WorkerType, WorkerVersion, WorkerVersionState
 from arkindex.users.models import User
 
 # Constants used in architecture project
@@ -210,7 +203,7 @@ class Command(BaseCommand):
                 'id': IMPORT_WORKER_VERSION_ID,
                 'configuration': {},
                 'state': WorkerVersionState.Created,
-                'gpu_usage': WorkerVersionGPUUsage.Disabled,
+                'gpu_usage': FeatureUsage.Disabled,
                 'docker_image': None,
                 'docker_image_iid': None,
             }
@@ -243,7 +236,7 @@ class Command(BaseCommand):
             # Ensure it has the right attributes
             version.configuration = {}
             version.state = WorkerVersionState.Created
-            version.gpu_usage = WorkerVersionGPUUsage.Disabled
+            version.gpu_usage = FeatureUsage.Disabled
             version.docker_image = None
             version.docker_image_iid = None
             version.save()
diff --git a/arkindex/documents/management/commands/build_fixtures.py b/arkindex/documents/management/commands/build_fixtures.py
index 6727f672d7c447eaa640c92a8edbc5843ea5ce3d..e7775bea98f0aeb1e8e326bd7dcf7fb9e7771aa7 100644
--- a/arkindex/documents/management/commands/build_fixtures.py
+++ b/arkindex/documents/management/commands/build_fixtures.py
@@ -10,13 +10,13 @@ from arkindex.documents.models import Corpus, Element, MetaData, MetaType
 from arkindex.images.models import Image, ImageServer
 from arkindex.ponos.models import Farm, State
 from arkindex.process.models import (
+    FeatureUsage,
     Process,
     ProcessMode,
     Worker,
     WorkerRun,
     WorkerType,
     WorkerVersion,
-    WorkerVersionGPUUsage,
     WorkerVersionState,
 )
 from arkindex.project.tools import fake_now
@@ -140,7 +140,7 @@ class Command(BaseCommand):
             revision=revision,
             configuration={'test': 42},
             state=WorkerVersionState.Available,
-            model_usage=False,
+            model_usage=FeatureUsage.Disabled,
             docker_image=docker_image
         )
         dla_worker = WorkerVersion.objects.create(
@@ -152,7 +152,7 @@ class Command(BaseCommand):
             revision=revision,
             configuration={'test': 42},
             state=WorkerVersionState.Available,
-            model_usage=False,
+            model_usage=FeatureUsage.Disabled,
             docker_image=docker_image
         )
 
@@ -165,7 +165,7 @@ class Command(BaseCommand):
             revision=revision,
             configuration={},
             state=WorkerVersionState.Available,
-            model_usage=False,
+            model_usage=FeatureUsage.Disabled,
             docker_image=docker_image,
         )
 
@@ -178,9 +178,9 @@ class Command(BaseCommand):
             revision=revision,
             configuration={'test': 42},
             state=WorkerVersionState.Available,
-            model_usage=False,
+            model_usage=FeatureUsage.Disabled,
             docker_image=docker_image,
-            gpu_usage=WorkerVersionGPUUsage.Required
+            gpu_usage=FeatureUsage.Required
         )
 
         # Create a generic worker and its version that uses a ML Model
@@ -193,8 +193,8 @@ class Command(BaseCommand):
             revision=revision,
             configuration={'test': 42},
             state=WorkerVersionState.Available,
-            gpu_usage=WorkerVersionGPUUsage.Disabled,
-            model_usage=True,
+            gpu_usage=FeatureUsage.Disabled,
+            model_usage=FeatureUsage.Required,
             docker_image=docker_image
         )
 
diff --git a/arkindex/process/builder.py b/arkindex/process/builder.py
index 76458142ce7590f0e6909debe990c8989110a28a..4d882ae4f8a346bcd091aae7d347a2a33eb78e7e 100644
--- a/arkindex/process/builder.py
+++ b/arkindex/process/builder.py
@@ -162,11 +162,11 @@ class ProcessBuilder(object):
 
     @prefetch_worker_runs
     def validate_gpu_requirement(self):
-        from arkindex.process.models import WorkerVersionGPUUsage
+        from arkindex.process.models import FeatureUsage
 
         if (
             not self.process.use_gpu
-            and any(run.version.gpu_usage == WorkerVersionGPUUsage.Required for run in self.process.worker_runs.all())
+            and any(run.version.gpu_usage == FeatureUsage.Required for run in self.process.worker_runs.all())
         ):
             raise ValidationError("Some worker versions require a GPU and the `use_gpu` option is disabled.")
 
diff --git a/arkindex/process/migrations/0001_initial.py b/arkindex/process/migrations/0001_initial.py
index 43fbdce9a47026fd4593729ce0504bf8f46c564e..4a0b2688941211f69672706a0feff07b791a4d39 100644
--- a/arkindex/process/migrations/0001_initial.py
+++ b/arkindex/process/migrations/0001_initial.py
@@ -151,7 +151,7 @@ class Migration(migrations.Migration):
                 ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                 ('configuration', models.JSONField()),
                 ('state', enumfields.fields.EnumField(default='created', enum=arkindex.process.models.WorkerVersionState, max_length=10)),
-                ('gpu_usage', enumfields.fields.EnumField(blank=True, default='disabled', enum=arkindex.process.models.WorkerVersionGPUUsage, max_length=10)),
+                ('gpu_usage', enumfields.fields.EnumField(blank=True, default='disabled', enum=arkindex.process.models.FeatureUsage, max_length=10)),
                 ('model_usage', models.BooleanField(default=False)),
                 ('docker_image_iid', models.CharField(blank=True, max_length=80, null=True)),
                 ('corpora', models.ManyToManyField(related_name='worker_versions', through='process.CorpusWorkerVersion', to='documents.corpus')),
diff --git a/arkindex/process/migrations/0023_alter_workerversion_model_usage.py b/arkindex/process/migrations/0023_alter_workerversion_model_usage.py
new file mode 100644
index 0000000000000000000000000000000000000000..adead68c2bdd5d46560495607599b42cebe4d0a6
--- /dev/null
+++ b/arkindex/process/migrations/0023_alter_workerversion_model_usage.py
@@ -0,0 +1,47 @@
+# Generated by Django 4.1.7 on 2023-11-23 10:17
+
+import enumfields.fields
+from django.db import migrations
+
+import arkindex.process.models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('process', '0022_worker_description'),
+    ]
+
+    operations = [
+        migrations.RunSQL(
+            [
+                # This uses a `USING` expression to tell PostgreSQL how to perform the data migration
+                """
+                ALTER TABLE process_workerversion
+                ALTER COLUMN model_usage
+                SET DATA TYPE varchar(10)
+                USING CASE
+                    WHEN TRUE THEN 'required'
+                    ELSE 'disabled'
+                END
+                """
+            ],
+            reverse_sql=[
+                # When going backwards, we will set `model_usage=True` only for versions where models are required.
+                # `supported` versions will be disabled again, just like before we implemented this feature.
+                """
+                ALTER TABLE process_workerversion
+                ALTER COLUMN model_usage
+                SET DATA TYPE boolean
+                USING model_usage = 'required'
+                """
+            ],
+            state_operations=[
+                migrations.AlterField(
+                    model_name='workerversion',
+                    name='model_usage',
+                    field=enumfields.fields.EnumField(blank=True, default='disabled', enum=arkindex.process.models.FeatureUsage, max_length=10),
+                ),
+            ],
+        ),
+    ]
diff --git a/arkindex/process/models.py b/arkindex/process/models.py
index 7044efa16dad41c7564d319507dfd718daca96c4..5b9ae5361478d572752c276ee570823d259730ff 100644
--- a/arkindex/process/models.py
+++ b/arkindex/process/models.py
@@ -699,7 +699,7 @@ class WorkerVersionState(Enum):
     Error = 'error'
 
 
-class WorkerVersionGPUUsage(Enum):
+class FeatureUsage(Enum):
     Disabled = 'disabled'
     Supported = 'supported'
     Required = 'required'
@@ -722,8 +722,8 @@ class WorkerVersion(models.Model):
     )
     configuration = models.JSONField()
     state = EnumField(WorkerVersionState, default=WorkerVersionState.Created)
-    gpu_usage = EnumField(WorkerVersionGPUUsage, default=WorkerVersionGPUUsage.Disabled, blank=True)
-    model_usage = models.BooleanField(default=False)
+    gpu_usage = EnumField(FeatureUsage, default=FeatureUsage.Disabled, blank=True)
+    model_usage = EnumField(FeatureUsage, default=FeatureUsage.Disabled, blank=True)
 
     # Foreign key towards the ponos Artifact holding the image content,
     # for workers imported via the Git imports
@@ -954,7 +954,7 @@ class WorkerRun(models.Model):
             token=token,
             process=process,
             extra_files=extra_files,
-            requires_gpu=process.use_gpu and self.version.gpu_usage in (WorkerVersionGPUUsage.Required, WorkerVersionGPUUsage.Supported)
+            requires_gpu=process.use_gpu and self.version.gpu_usage in (FeatureUsage.Required, FeatureUsage.Supported)
         )
 
         return task, parents
diff --git a/arkindex/process/serializers/imports.py b/arkindex/process/serializers/imports.py
index 6fd8f7c56b9ecca0882b9d09e72d1a795d78b1d0..c58a03cf297ede95615fc96ea3eee3d105eb76fd 100644
--- a/arkindex/process/serializers/imports.py
+++ b/arkindex/process/serializers/imports.py
@@ -11,10 +11,10 @@ from arkindex.ponos.serializers import FarmSerializer, TaskLightSerializer
 from arkindex.process.models import (
     ActivityState,
     DataFile,
+    FeatureUsage,
     Process,
     ProcessMode,
     WorkerRun,
-    WorkerVersionGPUUsage,
     WorkerVersionState,
 )
 from arkindex.process.serializers.git import RevisionSerializer
@@ -435,17 +435,17 @@ class StartProcessSerializer(serializers.Serializer):
         # Use process.worker_runs.all() to access the (prefetched) worker_runs to avoid new SQL queries
         # The related worker versions have also been prefetched
         if len(list(self.instance.worker_runs.all())) > 0:
-            if validated_data.get('use_gpu') and (not any(item.version.gpu_usage != WorkerVersionGPUUsage.Disabled for item in self.instance.worker_runs.all())):
+            if validated_data.get('use_gpu') and (not any(item.version.gpu_usage != FeatureUsage.Disabled for item in self.instance.worker_runs.all())):
                 errors['use_gpu'].append('The process is configured to use a GPU, but does not include any workers that support GPU usage.')
 
-            # Check if a worker run has no model version but version.model_usage = True
+            # Check if a worker run has no model version but version.model_usage = Required
             missing_model_versions = []
             unavailable_versions = []
             has_unavailable_model_versions = False
             missing_required_configurations = []
 
             for worker_run in self.instance.worker_runs.all():
-                if worker_run.version.model_usage and worker_run.model_version_id is None:
+                if worker_run.version.model_usage == FeatureUsage.Required and worker_run.model_version_id is None:
                     missing_model_versions.append(worker_run.version.worker.name)
                 if (
                     worker_run.version.state != WorkerVersionState.Available
diff --git a/arkindex/process/serializers/training.py b/arkindex/process/serializers/training.py
index e50c1e9863a3712727ffd58aa2c631db2ce1a0b7..44ce215e2c1f21d397656c915b9d1fb795f27547 100644
--- a/arkindex/process/serializers/training.py
+++ b/arkindex/process/serializers/training.py
@@ -7,13 +7,13 @@ from rest_framework.exceptions import PermissionDenied, ValidationError
 from arkindex.documents.models import Corpus, Element
 from arkindex.ponos.models import Farm, Task
 from arkindex.process.models import (
+    FeatureUsage,
     Process,
     ProcessDataset,
     ProcessMode,
     WorkerConfiguration,
     WorkerRun,
     WorkerVersion,
-    WorkerVersionGPUUsage,
     WorkerVersionState,
 )
 from arkindex.process.utils import get_default_farm
@@ -197,9 +197,9 @@ class StartTrainingSerializer(serializers.ModelSerializer, WorkerACLMixin, Train
             raise ValidationError({'__all__': ['Train, validation and test folders must be different.']})
 
         # Ensure the worker version is compatible with the GPU mode
-        if data['worker_version'].gpu_usage == WorkerVersionGPUUsage.Disabled and data["use_gpu"]:
+        if data['worker_version'].gpu_usage == FeatureUsage.Disabled and data["use_gpu"]:
             raise ValidationError({'__all__': ['This worker version does not support GPU mode.']})
-        elif data['worker_version'].gpu_usage == WorkerVersionGPUUsage.Required and not data["use_gpu"]:
+        elif data['worker_version'].gpu_usage == FeatureUsage.Required and not data["use_gpu"]:
             raise ValidationError({'__all__': ['This worker version does only support GPU mode.']})
 
         # Ensure the worker configuration match the given worker
diff --git a/arkindex/process/serializers/worker_runs.py b/arkindex/process/serializers/worker_runs.py
index 72ce2e3c2ad1fb8983645bdff419dd493da38b55..0de887642a0dd490722dfc365a8c23dd15fb8ef7 100644
--- a/arkindex/process/serializers/worker_runs.py
+++ b/arkindex/process/serializers/worker_runs.py
@@ -6,6 +6,7 @@ from rest_framework import serializers
 from rest_framework.exceptions import ValidationError
 
 from arkindex.process.models import (
+    FeatureUsage,
     GitRef,
     Process,
     ProcessMode,
@@ -166,7 +167,7 @@ class WorkerRunSerializer(WorkerACLMixin, serializers.ModelSerializer):
             if model_version.state != ModelVersionState.Available:
                 errors['model_version_id'].append('This ModelVersion is not in an Available state.')
 
-            if not worker_version.model_usage:
+            if worker_version.model_usage == FeatureUsage.Disabled:
                 errors['model_version_id'].append('This worker version does not support models.')
 
         existing_worker_run = process.worker_runs.filter(version=worker_version, model_version_id=model_version, configuration=configuration)
diff --git a/arkindex/process/serializers/workers.py b/arkindex/process/serializers/workers.py
index 916f1cb46871836e0f0e5c282767ce2445fb7f50..7ef377036bb0103e889a249b6cd3a73edc99d61a 100644
--- a/arkindex/process/serializers/workers.py
+++ b/arkindex/process/serializers/workers.py
@@ -15,6 +15,7 @@ from arkindex.ponos.models import Task
 from arkindex.ponos.utils import get_process_from_task_auth
 from arkindex.process.models import (
     CorpusWorkerVersion,
+    FeatureUsage,
     GitRef,
     Process,
     ProcessMode,
@@ -26,7 +27,6 @@ from arkindex.process.models import (
     WorkerConfiguration,
     WorkerType,
     WorkerVersion,
-    WorkerVersionGPUUsage,
     WorkerVersionState,
 )
 from arkindex.process.serializers.git import GitRefSerializer, RevisionWithRefsSerializer
@@ -220,8 +220,8 @@ class WorkerVersionSerializer(serializers.ModelSerializer):
     state = EnumField(WorkerVersionState, required=False)
     worker = WorkerLightSerializer(read_only=True)
     revision = RevisionWithRefsSerializer(required=False, read_only=True, allow_null=True)
-    gpu_usage = EnumField(WorkerVersionGPUUsage, required=False, default=WorkerVersionGPUUsage.Disabled)
-    model_usage = serializers.BooleanField(required=False, default=False)
+    gpu_usage = EnumField(FeatureUsage, required=False, default=FeatureUsage.Disabled)
+    model_usage = EnumField(FeatureUsage, required=False, default=FeatureUsage.Disabled)
     # Ensure worker version configuration JSON body is an object
     configuration = serializers.DictField()
 
@@ -610,8 +610,8 @@ class DockerWorkerVersionSerializer(serializers.ModelSerializer):
         required=False,
         help_text="Optional list of types and names to create GitRefs",
     )
-    gpu_usage = EnumField(WorkerVersionGPUUsage, required=False, default=WorkerVersionGPUUsage.Disabled)
-    model_usage = serializers.BooleanField(default=False)
+    gpu_usage = EnumField(FeatureUsage, required=False, default=FeatureUsage.Disabled)
+    model_usage = EnumField(FeatureUsage, required=False, default=FeatureUsage.Disabled)
 
     class Meta:
         model = WorkerVersion
diff --git a/arkindex/process/tests/test_create_training_process.py b/arkindex/process/tests/test_create_training_process.py
index 6f6257642adde13b36bc3b2efec7ce38e01bdb67..e129c15053d77e23f391b78d767576974baa3034 100644
--- a/arkindex/process/tests/test_create_training_process.py
+++ b/arkindex/process/tests/test_create_training_process.py
@@ -8,12 +8,12 @@ from rest_framework import status
 from arkindex.ponos.models import Artifact, Farm
 from arkindex.ponos.models import State as PonosState
 from arkindex.process.models import (
+    FeatureUsage,
     Process,
     ProcessMode,
     WorkerConfiguration,
     WorkerRun,
     WorkerVersion,
-    WorkerVersionGPUUsage,
     WorkerVersionState,
 )
 from arkindex.project.tests import FixtureTestCase
@@ -31,7 +31,7 @@ class TestCreateTrainingProcess(FixtureTestCase):
         cls.test_folder = cls.corpus.elements.create(type=cls.train_folder.type, name='Volume 3')
         cls.training_worker_version = WorkerVersion.objects.get(worker__slug='worker-gpu')
         cls.training_worker_version.worker.memberships.create(user=cls.user, level=Role.Admin.value)
-        cls.training_worker_version.gpu_usage = WorkerVersionGPUUsage.Supported
+        cls.training_worker_version.gpu_usage = FeatureUsage.Supported
         cls.training_worker_version.docker_image_iid = 1337
         cls.training_worker_version.docker_image = Artifact.objects.first()
         cls.training_worker_version.save()
@@ -223,7 +223,7 @@ class TestCreateTrainingProcess(FixtureTestCase):
         An error is raised in case the GPU mode is incompatible with the worker
         """
         self.client.force_login(self.user)
-        self.training_worker_version.gpu_usage = WorkerVersionGPUUsage.Required
+        self.training_worker_version.gpu_usage = FeatureUsage.Required
         self.training_worker_version.save()
         with self.assertNumQueries(14):
             response = self.client.post(reverse('api:process-training'), {
@@ -240,7 +240,7 @@ class TestCreateTrainingProcess(FixtureTestCase):
         An error is raised in case the GPU mode is incompatible with the worker
         """
         self.client.force_login(self.user)
-        self.training_worker_version.gpu_usage = WorkerVersionGPUUsage.Disabled
+        self.training_worker_version.gpu_usage = FeatureUsage.Disabled
         self.training_worker_version.save()
         with self.assertNumQueries(14):
             response = self.client.post(reverse('api:process-training'), {
diff --git a/arkindex/process/tests/test_docker_worker_version.py b/arkindex/process/tests/test_docker_worker_version.py
index 9342f1f9f952ffbe66a0b913c3d5328de858a611..c743d169c404755592f718b9fa00fa0cb5031154 100644
--- a/arkindex/process/tests/test_docker_worker_version.py
+++ b/arkindex/process/tests/test_docker_worker_version.py
@@ -2,7 +2,7 @@ from django.urls import reverse
 from rest_framework import status
 
 from arkindex.ponos.models import Farm
-from arkindex.process.models import GitRefType, ProcessMode, Repository, Worker, WorkerType, WorkerVersionGPUUsage
+from arkindex.process.models import FeatureUsage, GitRefType, ProcessMode, Repository, Worker, WorkerType
 from arkindex.project.tests import FixtureAPITestCase
 from arkindex.users.models import Role, Scope
 
@@ -128,8 +128,8 @@ class TestDockerWorkerVersion(FixtureAPITestCase):
             self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
         self.assertDictEqual(response.json(), {
             'docker_image_iid': ['Not a valid string.'],
-            'gpu_usage': ['Value is not of type WorkerVersionGPUUsage'],
-            'model_usage': ['Must be a valid boolean.'],
+            'gpu_usage': ['Value is not of type FeatureUsage'],
+            'model_usage': ['Value is not of type FeatureUsage'],
             'repository_url': ['Not a valid string.'],
             'revision_author': ['Not a valid string.'],
             'revision_hash': ['This field may not be blank.'],
@@ -190,8 +190,8 @@ class TestDockerWorkerVersion(FixtureAPITestCase):
             'docker_image': None,
             'docker_image_iid': 'a_docker_image',
             'docker_image_name': new_version.docker_image_name,
-            'gpu_usage': WorkerVersionGPUUsage.Disabled.value,
-            'model_usage': False,
+            'gpu_usage': FeatureUsage.Disabled.value,
+            'model_usage': FeatureUsage.Disabled.value,
             'revision': {
                 'id': str(new_revision.id),
                 'author': 'default',
@@ -232,8 +232,8 @@ class TestDockerWorkerVersion(FixtureAPITestCase):
                         {'type': 'branch', 'name': 'master'},
                         {'type': 'tag', 'name': '2.0'},
                     ],
-                    'gpu_usage': WorkerVersionGPUUsage.Required.value,
-                    'model_usage': True,
+                    'gpu_usage': FeatureUsage.Required.value,
+                    'model_usage': FeatureUsage.Supported.value,
                 },
                 format='json',
             )
@@ -251,8 +251,8 @@ class TestDockerWorkerVersion(FixtureAPITestCase):
             'docker_image': None,
             'docker_image_iid': 'e' * 512,
             'docker_image_name': new_version.docker_image_name,
-            'gpu_usage': WorkerVersionGPUUsage.Required.value,
-            'model_usage': True,
+            'gpu_usage': FeatureUsage.Required.value,
+            'model_usage': FeatureUsage.Supported.value,
             'revision': {
                 'id': str(new_revision.id),
                 'author': 'Iwan Roberts',
@@ -311,8 +311,8 @@ class TestDockerWorkerVersion(FixtureAPITestCase):
                         {'type': 'branch', 'name': 'master'},
                         {'type': 'tag', 'name': '2.0'},
                     ],
-                    'gpu_usage': WorkerVersionGPUUsage.Required.value,
-                    'model_usage': True,
+                    'gpu_usage': FeatureUsage.Required.value,
+                    'model_usage': FeatureUsage.Required.value,
                 },
                 format='json',
             )
@@ -351,8 +351,8 @@ class TestDockerWorkerVersion(FixtureAPITestCase):
             'docker_image': None,
             'docker_image_iid': 'a_docker_image',
             'docker_image_name': new_version.docker_image_name,
-            'gpu_usage': WorkerVersionGPUUsage.Required.value,
-            'model_usage': True,
+            'gpu_usage': FeatureUsage.Required.value,
+            'model_usage': FeatureUsage.Required.value,
             'revision': {
                 'id': str(new_revision.id),
                 'author': 'Iwan Roberts',
@@ -412,8 +412,8 @@ class TestDockerWorkerVersion(FixtureAPITestCase):
             'docker_image': str(self.version.docker_image_id),
             'docker_image_iid': None,
             'docker_image_name': self.version.docker_image_name,
-            'gpu_usage': WorkerVersionGPUUsage.Disabled.value,
-            'model_usage': False,
+            'gpu_usage': FeatureUsage.Disabled.value,
+            'model_usage': FeatureUsage.Disabled.value,
             'revision': {
                 'id': str(self.version.revision.id),
                 'author': 'Test user',
@@ -479,8 +479,8 @@ class TestDockerWorkerVersion(FixtureAPITestCase):
             'docker_image': None,
             'docker_image_iid': 'docker_image_42',
             'docker_image_name': new_version.docker_image_name,
-            'gpu_usage': WorkerVersionGPUUsage.Disabled.value,
-            'model_usage': False,
+            'gpu_usage': FeatureUsage.Disabled.value,
+            'model_usage': FeatureUsage.Disabled.value,
             'revision': {
                 'id': str(new_revision.id),
                 'author': 'default',
@@ -514,8 +514,8 @@ class TestDockerWorkerVersion(FixtureAPITestCase):
         self.assertEqual(new_version.configuration, {'key': 'value'})
         self.assertEqual(new_version.docker_image_id, None)
         self.assertEqual(new_version.docker_image_iid, 'docker_image_42')
-        self.assertEqual(new_version.gpu_usage, WorkerVersionGPUUsage.Disabled)
-        self.assertEqual(new_version.model_usage, False)
+        self.assertEqual(new_version.gpu_usage, FeatureUsage.Disabled)
+        self.assertEqual(new_version.model_usage, FeatureUsage.Disabled)
         self.assertEqual(new_worker_type.slug, 'docker')
         self.assertEqual(new_worker_type.display_name, 'Docker')
         # User is granted an admin role on the repository
diff --git a/arkindex/process/tests/test_user_workerruns.py b/arkindex/process/tests/test_user_workerruns.py
index 124c6c4cc5b2009039d983a4c7d7fb55dab99f06..554b77208cb28fe5f0e1782d57471f39cdf6c7a3 100644
--- a/arkindex/process/tests/test_user_workerruns.py
+++ b/arkindex/process/tests/test_user_workerruns.py
@@ -6,6 +6,7 @@ from django.utils import timezone
 from rest_framework import status
 
 from arkindex.process.models import (
+    FeatureUsage,
     Process,
     ProcessMode,
     WorkerConfiguration,
@@ -99,7 +100,7 @@ class TestUserWorkerRuns(FixtureAPITestCase):
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{str(self.version_1.id)}',
                 'gpu_usage': 'disabled',
                 'id': str(self.version_1.id),
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'author': 'Test user',
                     'commit_url': 'http://my_repo.fake/workers/worker/commit/1337',
@@ -147,7 +148,7 @@ class TestUserWorkerRuns(FixtureAPITestCase):
                 'docker_image_name': None,
                 'gpu_usage': 'disabled',
                 'id': str(self.custom_version.id),
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': None,
                 'state': 'created',
                 'version': 1,
@@ -229,7 +230,7 @@ class TestUserWorkerRuns(FixtureAPITestCase):
                 'docker_image_name': None,
                 'gpu_usage': 'disabled',
                 'id': str(self.other_version.id),
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': None,
                 'state': 'created',
                 'version': 2,
@@ -406,7 +407,7 @@ class TestUserWorkerRuns(FixtureAPITestCase):
                 'docker_image_name': None,
                 'gpu_usage': 'disabled',
                 'id': str(self.other_version.id),
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': None,
                 'state': 'created',
                 'version': 2,
diff --git a/arkindex/process/tests/test_workerruns.py b/arkindex/process/tests/test_workerruns.py
index 3b14e3405f7848e30ed26cb697e7af4556526275..14f6a5ca39aacf641c48cd591c8e383dd556832e 100644
--- a/arkindex/process/tests/test_workerruns.py
+++ b/arkindex/process/tests/test_workerruns.py
@@ -9,6 +9,7 @@ from rest_framework.exceptions import ValidationError
 
 from arkindex.ponos.models import Agent, Artifact, Farm, State
 from arkindex.process.models import (
+    FeatureUsage,
     GitRefType,
     ProcessMode,
     Revision,
@@ -135,7 +136,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -235,7 +236,7 @@ class TestWorkerRuns(FixtureAPITestCase):
 
     def test_create_unique(self):
         self.client.force_login(self.user)
-        self.version_1.model_usage = True
+        self.version_1.model_usage = FeatureUsage.Required
         self.version_1.save()
         cases = [
             (None, None),
@@ -384,7 +385,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                         'docker_image_iid': None,
                         'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                         'gpu_usage': 'disabled',
-                        'model_usage': False,
+                        'model_usage': FeatureUsage.Disabled.value,
                         'revision': {
                             'id': str(self.version_1.revision.id),
                             'author': 'Test user',
@@ -481,7 +482,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -590,7 +591,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{version.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(version.revision.id),
                     'author': 'Teklia Bot',
@@ -675,7 +676,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -739,7 +740,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -793,7 +794,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': None,
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': None,
                 'version': 1,
                 'created': self.version_1.created.isoformat().replace('+00:00', 'Z'),
@@ -911,7 +912,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -985,7 +986,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -1234,7 +1235,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -1300,7 +1301,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -1374,7 +1375,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -1450,7 +1451,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=False
+            model_usage=FeatureUsage.Disabled
         )
         run_2 = self.process_1.worker_runs.create(
             version=version_no_model,
@@ -1486,7 +1487,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run_2 = self.process_1.worker_runs.create(
             version=version_no_model,
@@ -1523,7 +1524,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run_2 = self.process_1.worker_runs.create(
             version=version_no_model,
@@ -1570,7 +1571,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run_2 = self.process_1.worker_runs.create(
             version=version_no_model,
@@ -1624,7 +1625,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run = self.process_1.worker_runs.create(
             version=version,
@@ -1662,7 +1663,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Supported
         )
         run = self.process_1.worker_runs.create(
             version=version_with_model,
@@ -1729,7 +1730,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                         'docker_image_iid': None,
                         'docker_image_name': f'my_repo.fake/workers/worker/reco:{version_with_model.id}',
                         'gpu_usage': 'disabled',
-                        'model_usage': True,
+                        'model_usage': FeatureUsage.Supported.value,
                         'revision': {
                             'id': str(rev.id),
                             'author': 'bob',
@@ -1768,7 +1769,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run = self.process_1.worker_runs.create(
             version=version_with_model,
@@ -1832,7 +1833,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{version_with_model.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': True,
+                'model_usage': FeatureUsage.Required.value,
                 'revision': {
                     'id': str(rev_2.id),
                     'author': 'bob',
@@ -1911,7 +1912,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -1936,7 +1937,7 @@ class TestWorkerRuns(FixtureAPITestCase):
 
     def test_update_unique(self):
         self.client.force_login(self.user)
-        self.version_1.model_usage = True
+        self.version_1.model_usage = FeatureUsage.Required
         self.version_1.save()
         cases = [
             (None, None),
@@ -2142,7 +2143,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -2208,7 +2209,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -2279,7 +2280,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -2354,7 +2355,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=False
+            model_usage=FeatureUsage.Disabled
         )
         run_2 = self.process_1.worker_runs.create(
             version=version_no_model,
@@ -2389,7 +2390,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run_2 = self.process_1.worker_runs.create(
             version=version_no_model,
@@ -2425,7 +2426,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run_2 = self.process_1.worker_runs.create(
             version=version_no_model,
@@ -2465,7 +2466,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run_2 = self.process_1.worker_runs.create(
             version=version_no_model,
@@ -2518,7 +2519,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run = self.process_1.worker_runs.create(
             version=version,
@@ -2556,7 +2557,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run = self.process_1.worker_runs.create(
             version=version_with_model,
@@ -2621,7 +2622,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                         'docker_image_iid': None,
                         'docker_image_name': f'my_repo.fake/workers/worker/reco:{version_with_model.id}',
                         'gpu_usage': 'disabled',
-                        'model_usage': True,
+                        'model_usage': FeatureUsage.Required.value,
                         'revision': {
                             'id': str(rev.id),
                             'author': 'bob',
@@ -2661,7 +2662,7 @@ class TestWorkerRuns(FixtureAPITestCase):
             worker=self.worker_1,
             revision=rev_2,
             configuration={"test": "test2"},
-            model_usage=True
+            model_usage=FeatureUsage.Required
         )
         run = self.process_1.worker_runs.create(
             version=version_with_model,
@@ -2721,7 +2722,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{version_with_model.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': True,
+                'model_usage': FeatureUsage.Required.value,
                 'revision': {
                     'id': str(rev_2.id),
                     'author': 'bob',
@@ -2799,7 +2800,7 @@ class TestWorkerRuns(FixtureAPITestCase):
                 'docker_image_iid': None,
                 'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
                 'revision': {
                     'id': str(self.version_1.revision.id),
                     'author': 'Test user',
@@ -2824,7 +2825,7 @@ class TestWorkerRuns(FixtureAPITestCase):
 
     def test_partial_update_unique(self):
         self.client.force_login(self.user)
-        self.version_1.model_usage = True
+        self.version_1.model_usage = FeatureUsage.Required
         self.version_1.save()
         cases = [
             (None, None),
diff --git a/arkindex/process/tests/test_workers.py b/arkindex/process/tests/test_workers.py
index 01c36db284f24f3ee2638a79b754d5149a6751fb..a020684b2e92d1a5e72c164c746bfe39eca410fb 100644
--- a/arkindex/process/tests/test_workers.py
+++ b/arkindex/process/tests/test_workers.py
@@ -6,6 +6,7 @@ from rest_framework import status
 from arkindex.ponos.models import Farm
 from arkindex.process.models import (
     CorpusWorkerVersion,
+    FeatureUsage,
     GitRefType,
     Process,
     ProcessMode,
@@ -15,7 +16,6 @@ from arkindex.process.models import (
     WorkerConfiguration,
     WorkerType,
     WorkerVersion,
-    WorkerVersionGPUUsage,
     WorkerVersionState,
 )
 from arkindex.project.tests import FixtureAPITestCase
@@ -77,7 +77,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
     def setUp(self):
         super().setUp()
         self.version_1 = WorkerVersion.objects.get(worker=self.worker_reco)
-        self.version_1.gpu_usage = WorkerVersionGPUUsage.Disabled
+        self.version_1.gpu_usage = FeatureUsage.Disabled
         self.version_2 = self.worker_dla.versions.get()
         self.version_custom = self.worker_custom.versions.get()
 
@@ -578,7 +578,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             'docker_image_name': f'my_repo.fake/workers/worker/reco:{last_version.id}',
             'state': 'error',
             'gpu_usage': 'disabled',
-            'model_usage': False,
+            'model_usage': FeatureUsage.Disabled.value,
             'worker': {
                 'id': str(self.worker_reco.id),
                 'name': self.worker_reco.name,
@@ -636,7 +636,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             worker=worker_2,
             revision=self.rev,
             configuration={"test": "test2"},
-            gpu_usage=WorkerVersionGPUUsage.Disabled
+            gpu_usage=FeatureUsage.Disabled
         )
 
         with self.assertNumQueries(14):
@@ -776,7 +776,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
         self.client.force_login(self.user)
         response = self.client.post(
             reverse('api:worker-versions', kwargs={'pk': str(self.worker_custom.id)}),
-            data={'revision_id': str(self.rev2.id), 'configuration': {"test": "test2"}, 'model_usage': True},
+            data={'revision_id': str(self.rev2.id), 'configuration': {"test": "test2"}, 'model_usage': FeatureUsage.Required.value},
             format='json',
         )
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
@@ -789,7 +789,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
         self.client.force_login(self.user)
         response = self.client.post(
             reverse('api:worker-versions', kwargs={'pk': str(self.worker_reco.id)}),
-            data={'configuration': {"test": "test2"}, 'model_usage': True},
+            data={'configuration': {"test": "test2"}, 'model_usage': FeatureUsage.Required.value},
             format='json',
         )
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
@@ -802,7 +802,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
         self.client.force_login(self.user)
         response = self.client.post(
             reverse('api:worker-versions', kwargs={'pk': str(self.worker_custom.id)}),
-            data={'revision_id': str(self.rev2.id), 'configuration': {"test": "test2"}, 'model_usage': True},
+            data={'revision_id': str(self.rev2.id), 'configuration': {"test": "test2"}, 'model_usage': FeatureUsage.Required.value},
             format='json',
         )
         self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
@@ -818,7 +818,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
         with self.assertNumQueries(4):
             response = self.client.post(
                 reverse('api:worker-versions', kwargs={'pk': str(self.worker_custom.id)}),
-                data={'revision_id': str(self.rev2.id), 'configuration': {"test": "test2"}, 'model_usage': True},
+                data={'revision_id': str(self.rev2.id), 'configuration': {"test": "test2"}, 'model_usage': FeatureUsage.Required.value},
                 format='json',
                 HTTP_AUTHORIZATION=f'Ponos {self.task.token}',
             )
@@ -832,7 +832,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
         with self.assertNumQueries(6):
             response = self.client.post(
                 reverse('api:worker-versions', kwargs={'pk': str(self.worker_custom.id)}),
-                data={'configuration': {"test": "val"}, 'model_usage': True},
+                data={'configuration': {"test": "val"}, 'model_usage': FeatureUsage.Required.value},
                 format='json',
             )
             self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
@@ -843,7 +843,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
         with self.assertNumQueries(10):
             response = self.client.post(
                 reverse('api:worker-versions', kwargs={'pk': str(self.worker_dla.id)}),
-                data={'revision_id': str(self.rev2.id), 'configuration': {"test": "test2"}, 'model_usage': True},
+                data={'revision_id': str(self.rev2.id), 'configuration': {"test": "test2"}, 'model_usage': FeatureUsage.Required.value},
                 format='json',
             )
             self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
@@ -862,7 +862,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
         with self.assertNumQueries(9):
             response = self.client.post(
                 reverse('api:worker-versions', kwargs={'pk': str(self.worker_custom.id)}),
-                data={'configuration': {"test": "val"}, 'model_usage': True},
+                data={'configuration': {"test": "val"}, 'model_usage': FeatureUsage.Required.value},
                 format='json',
             )
             self.assertEqual(response.status_code, status.HTTP_201_CREATED)
@@ -875,8 +875,8 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             'docker_image': None,
             'docker_image_iid': None,
             'docker_image_name': None,
-            'gpu_usage': WorkerVersionGPUUsage.Disabled.value,
-            'model_usage': True,
+            'gpu_usage': FeatureUsage.Disabled.value,
+            'model_usage': FeatureUsage.Required.value,
             'revision': None,
             'state': WorkerVersionState.Created.value,
             'version': 42,
@@ -905,7 +905,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
     def test_create_version(self):
         response = self.client.post(
             reverse('api:worker-versions', kwargs={'pk': str(self.worker_reco.id)}),
-            data={'revision_id': str(self.rev2.id), 'configuration': {"test": "test2"}, 'model_usage': True},
+            data={'revision_id': str(self.rev2.id), 'configuration': {"test": "test2"}, 'model_usage': FeatureUsage.Required.value},
             format='json',
             HTTP_AUTHORIZATION=f'Ponos {self.task.token}',
         )
@@ -917,7 +917,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
         self.assertEqual(data['revision']['id'], str(self.rev2.id))
         self.assertEqual(data['state'], 'created')
         self.assertEqual(data['gpu_usage'], 'disabled')
-        self.assertEqual(data['model_usage'], True)
+        self.assertEqual(data['model_usage'], FeatureUsage.Required.value)
 
     def test_create_version_wrong_gpu_usage(self):
         response = self.client.post(
@@ -1463,7 +1463,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
             'state': 'available',
             'gpu_usage': 'disabled',
-            'model_usage': False,
+            'model_usage': FeatureUsage.Disabled.value,
             'worker': {
                 'id': str(self.worker_reco.id),
                 'name': self.worker_reco.name,
@@ -1489,7 +1489,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
             'state': 'available',
             'gpu_usage': 'disabled',
-            'model_usage': False,
+            'model_usage': FeatureUsage.Disabled.value,
             'worker': {
                 'id': str(self.worker_reco.id),
                 'name': self.worker_reco.name,
@@ -1508,7 +1508,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                 'docker_image': '12341234-1234-1234-1234-123412341234',
                 'state': 'error',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
             }, format='json'
         )
         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
@@ -1523,7 +1523,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                 'docker_image': '12341234-1234-1234-1234-123412341234',
                 'state': 'error',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
             }, format='json'
         )
         self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
@@ -1544,7 +1544,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                 'docker_image': str(docker_image.id),
                 'state': 'error',
                 'gpu_usage': 'disabled',
-                'model_usage': False,
+                'model_usage': FeatureUsage.Disabled.value,
             }, format='json'
         )
         self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
@@ -1699,7 +1699,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             worker=self.worker_reco,
             revision=self.rev2,
             configuration={"test": "test1"},
-            gpu_usage=WorkerVersionGPUUsage.Disabled
+            gpu_usage=FeatureUsage.Disabled
         )
         self.assertEqual(
             version_2.docker_image_name,
@@ -1715,7 +1715,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
             worker=self.worker_reco,
             revision=self.rev2,
             configuration={"test": "test1"},
-            gpu_usage=WorkerVersionGPUUsage.Disabled
+            gpu_usage=FeatureUsage.Disabled
         )
         self.assertEqual(version_2.slug, 'reco_012345')
 
@@ -1763,7 +1763,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                         'refs': []
                     },
                     'gpu_usage': 'disabled',
-                    'model_usage': False,
+                    'model_usage': FeatureUsage.Disabled.value,
                     'docker_image': str(self.version_2.docker_image_id),
                     'docker_image_iid': None,
                     'docker_image_name': f'my_repo.fake/workers/worker/dla:{self.version_2.id}',
@@ -1794,7 +1794,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                         'refs': []
                     },
                     'gpu_usage': 'disabled',
-                    'model_usage': False,
+                    'model_usage': FeatureUsage.Disabled.value,
                     'docker_image': str(self.version_1.docker_image_id),
                     'docker_image_iid': None,
                     'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
@@ -1856,7 +1856,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                         'refs': []
                     },
                     'gpu_usage': 'disabled',
-                    'model_usage': False,
+                    'model_usage': FeatureUsage.Disabled.value,
                     'docker_image': str(self.version_2.docker_image_id),
                     'docker_image_iid': None,
                     'docker_image_name': f'my_repo.fake/workers/worker/dla:{self.version_2.id}',
@@ -1887,7 +1887,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                         'refs': []
                     },
                     'gpu_usage': 'disabled',
-                    'model_usage': False,
+                    'model_usage': FeatureUsage.Disabled.value,
                     'docker_image': str(self.version_1.docker_image_id),
                     'docker_image_iid': None,
                     'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
@@ -1946,7 +1946,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                         'refs': []
                     },
                     'gpu_usage': 'disabled',
-                    'model_usage': False,
+                    'model_usage': FeatureUsage.Disabled.value,
                     'docker_image': str(self.version_2.docker_image_id),
                     'docker_image_iid': None,
                     'docker_image_name': f'my_repo.fake/workers/worker/dla:{self.version_2.id}',
@@ -1992,7 +1992,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                         'refs': []
                     },
                     'gpu_usage': 'disabled',
-                    'model_usage': False,
+                    'model_usage': FeatureUsage.Disabled.value,
                     'docker_image': str(self.version_1.docker_image_id),
                     'docker_image_iid': None,
                     'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
@@ -2057,7 +2057,7 @@ class TestWorkersWorkerVersions(FixtureAPITestCase):
                         'refs': []
                     },
                     'gpu_usage': 'disabled',
-                    'model_usage': False,
+                    'model_usage': FeatureUsage.Disabled.value,
                     'docker_image': str(self.version_1.docker_image_id),
                     'docker_image_iid': None,
                     'docker_image_name': f'my_repo.fake/workers/worker/reco:{self.version_1.id}',
diff --git a/arkindex/project/settings.py b/arkindex/project/settings.py
index 7339c279353647f3f2c4f12977705a64dc34f997..c17c2471e469659d631c268b2a69c59af7da618b 100644
--- a/arkindex/project/settings.py
+++ b/arkindex/project/settings.py
@@ -254,6 +254,7 @@ SPECTACULAR_SETTINGS = {
         'ModelVersionState': 'arkindex.training.models.ModelVersionState',
         'MetricMode': 'arkindex.training.models.MetricMode',
         'DatasetState': 'arkindex.training.models.DatasetState',
+        'FeatureUsage': 'arkindex.process.models.FeatureUsage',
     },
     'TAGS': [
         {'name': 'classifications'},