Skip to content

Commit 6d19bb3

Browse files
authored
Simplify registering "built-in" presets (#1818)
Instead of registering them with every class a preset should work with, we just register them with the associated backbone. We can use that to build `cls.preset` accessors for all library classes. E.g. ```python keras_nlp.models.PaliGemmaTokenizer.presets keras_nlp.models.Gpt2Backbone.presets keras_nlp.models.TextClassifier.presets ```
1 parent 23815d6 commit 6d19bb3

35 files changed

+82
-111
lines changed

keras_nlp/src/layers/preprocessing/audio_converter.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@
1616
PreprocessingLayer,
1717
)
1818
from keras_nlp.src.utils.preset_utils import AUDIO_CONVERTER_CONFIG_FILE
19+
from keras_nlp.src.utils.preset_utils import builtin_presets
1920
from keras_nlp.src.utils.preset_utils import find_subclass
2021
from keras_nlp.src.utils.preset_utils import get_preset_loader
21-
from keras_nlp.src.utils.preset_utils import list_presets
22-
from keras_nlp.src.utils.preset_utils import list_subclasses
2322
from keras_nlp.src.utils.preset_utils import save_serialized_object
2423
from keras_nlp.src.utils.python_utils import classproperty
2524

@@ -52,11 +51,8 @@ class AudioConverter(PreprocessingLayer):
5251

5352
@classproperty
5453
def presets(cls):
55-
"""List built-in presets for a `Task` subclass."""
56-
presets = list_presets(cls)
57-
for subclass in list_subclasses(cls):
58-
presets.update(subclass.presets)
59-
return presets
54+
"""List built-in presets for an `AudioConverter` subclass."""
55+
return builtin_presets(cls)
6056

6157
@classmethod
6258
def from_preset(

keras_nlp/src/layers/preprocessing/audio_converter_test.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@
2828

2929
class AudioConverterTest(TestCase):
3030
def test_preset_accessors(self):
31-
pali_gemma_presets = set(WhisperAudioConverter.presets.keys())
31+
whisper_presets = set(WhisperAudioConverter.presets.keys())
3232
all_presets = set(AudioConverter.presets.keys())
33-
self.assertContainsSubset(pali_gemma_presets, all_presets)
33+
self.assertContainsSubset(whisper_presets, all_presets)
34+
self.assertIn("whisper_tiny_en", whisper_presets)
35+
self.assertIn("whisper_tiny_en", all_presets)
3436

3537
@pytest.mark.large
3638
def test_from_preset(self):

keras_nlp/src/layers/preprocessing/image_converter.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@
1616
PreprocessingLayer,
1717
)
1818
from keras_nlp.src.utils.preset_utils import IMAGE_CONVERTER_CONFIG_FILE
19+
from keras_nlp.src.utils.preset_utils import builtin_presets
1920
from keras_nlp.src.utils.preset_utils import find_subclass
2021
from keras_nlp.src.utils.preset_utils import get_preset_loader
21-
from keras_nlp.src.utils.preset_utils import list_presets
22-
from keras_nlp.src.utils.preset_utils import list_subclasses
2322
from keras_nlp.src.utils.preset_utils import save_serialized_object
2423
from keras_nlp.src.utils.python_utils import classproperty
2524

@@ -55,11 +54,8 @@ class ImageConverter(PreprocessingLayer):
5554

5655
@classproperty
5756
def presets(cls):
58-
"""List built-in presets for a `Task` subclass."""
59-
presets = list_presets(cls)
60-
for subclass in list_subclasses(cls):
61-
presets.update(subclass.presets)
62-
return presets
57+
"""List built-in presets for an `ImageConverter` subclass."""
58+
return builtin_presets(cls)
6359

6460
@classmethod
6561
def from_preset(

keras_nlp/src/layers/preprocessing/image_converter_test.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ def test_preset_accessors(self):
3333
pali_gemma_presets = set(PaliGemmaImageConverter.presets.keys())
3434
all_presets = set(ImageConverter.presets.keys())
3535
self.assertContainsSubset(pali_gemma_presets, all_presets)
36+
self.assertIn("pali_gemma_3b_mix_224", pali_gemma_presets)
37+
self.assertIn("pali_gemma_3b_mix_224", all_presets)
3638

3739
@pytest.mark.large
3840
def test_from_preset(self):

keras_nlp/src/models/albert/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
from keras_nlp.src.models.albert.albert_backbone import AlbertBackbone
1616
from keras_nlp.src.models.albert.albert_presets import backbone_presets
17-
from keras_nlp.src.models.albert.albert_tokenizer import AlbertTokenizer
1817
from keras_nlp.src.utils.preset_utils import register_presets
1918

20-
register_presets(backbone_presets, (AlbertBackbone, AlbertTokenizer))
19+
register_presets(backbone_presets, AlbertBackbone)

keras_nlp/src/models/backbone.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,8 @@
2020
from keras_nlp.src.utils.keras_utils import assert_quantization_support
2121
from keras_nlp.src.utils.preset_utils import CONFIG_FILE
2222
from keras_nlp.src.utils.preset_utils import MODEL_WEIGHTS_FILE
23+
from keras_nlp.src.utils.preset_utils import builtin_presets
2324
from keras_nlp.src.utils.preset_utils import get_preset_loader
24-
from keras_nlp.src.utils.preset_utils import list_presets
25-
from keras_nlp.src.utils.preset_utils import list_subclasses
2625
from keras_nlp.src.utils.preset_utils import save_metadata
2726
from keras_nlp.src.utils.preset_utils import save_serialized_object
2827
from keras_nlp.src.utils.python_utils import classproperty
@@ -141,11 +140,8 @@ def from_config(cls, config):
141140

142141
@classproperty
143142
def presets(cls):
144-
"""List built-in presets for a `Task` subclass."""
145-
presets = list_presets(cls)
146-
for subclass in list_subclasses(cls):
147-
presets.update(subclass.presets)
148-
return presets
143+
"""List built-in presets for a `Backbone` subclass."""
144+
return builtin_presets(cls)
149145

150146
@classmethod
151147
def from_preset(

keras_nlp/src/models/backbone_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ def test_preset_accessors(self):
3434
all_presets = set(Backbone.presets.keys())
3535
self.assertContainsSubset(bert_presets, all_presets)
3636
self.assertContainsSubset(gpt2_presets, all_presets)
37+
self.assertIn("bert_tiny_en_uncased", bert_presets)
38+
self.assertNotIn("bert_tiny_en_uncased", gpt2_presets)
39+
self.assertIn("gpt2_base_en", gpt2_presets)
40+
self.assertNotIn("gpt2_base_en", bert_presets)
41+
self.assertIn("bert_tiny_en_uncased", all_presets)
42+
self.assertIn("gpt2_base_en", all_presets)
3743

3844
@pytest.mark.large
3945
def test_from_preset(self):

keras_nlp/src/models/bart/__init__.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414

1515
from keras_nlp.src.models.bart.bart_backbone import BartBackbone
1616
from keras_nlp.src.models.bart.bart_presets import backbone_presets
17-
from keras_nlp.src.models.bart.bart_tokenizer import BartTokenizer
1817
from keras_nlp.src.utils.preset_utils import register_presets
1918

20-
register_presets(backbone_presets, (BartBackbone, BartTokenizer))
19+
register_presets(backbone_presets, BartBackbone)

keras_nlp/src/models/bert/__init__.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@
1414

1515
from keras_nlp.src.models.bert.bert_backbone import BertBackbone
1616
from keras_nlp.src.models.bert.bert_presets import backbone_presets
17-
from keras_nlp.src.models.bert.bert_presets import classifier_presets
18-
from keras_nlp.src.models.bert.bert_text_classifier import BertTextClassifier
19-
from keras_nlp.src.models.bert.bert_tokenizer import BertTokenizer
2017
from keras_nlp.src.utils.preset_utils import register_presets
2118

22-
register_presets(backbone_presets, (BertBackbone, BertTokenizer))
23-
register_presets(classifier_presets, (BertTextClassifier, BertTokenizer))
19+
register_presets(backbone_presets, BertBackbone)

keras_nlp/src/models/bert/bert_presets.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,6 @@
129129
},
130130
"kaggle_handle": "kaggle://keras/bert/keras/bert_large_en/2",
131131
},
132-
}
133-
134-
classifier_presets = {
135132
"bert_tiny_en_uncased_sst2": {
136133
"metadata": {
137134
"description": (
@@ -143,5 +140,5 @@
143140
"model_card": "https://github.com/google-research/bert/blob/master/README.md",
144141
},
145142
"kaggle_handle": "kaggle://keras/bert/keras/bert_tiny_en_uncased_sst2/4",
146-
}
143+
},
147144
}

0 commit comments

Comments
 (0)