keras-hub-nightly 0.15.0.dev20240823171555__py3-none-any.whl → 0.15.0.dev20240911134614__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. keras_hub/api/__init__.py +1 -0
  2. keras_hub/api/bounding_box/__init__.py +36 -0
  3. keras_hub/api/layers/__init__.py +14 -0
  4. keras_hub/api/models/__init__.py +75 -31
  5. keras_hub/api/tokenizers/__init__.py +30 -0
  6. keras_hub/src/bounding_box/__init__.py +13 -0
  7. keras_hub/src/bounding_box/converters.py +529 -0
  8. keras_hub/src/bounding_box/formats.py +162 -0
  9. keras_hub/src/bounding_box/iou.py +263 -0
  10. keras_hub/src/bounding_box/to_dense.py +95 -0
  11. keras_hub/src/bounding_box/to_ragged.py +99 -0
  12. keras_hub/src/bounding_box/utils.py +194 -0
  13. keras_hub/src/bounding_box/validate_format.py +99 -0
  14. keras_hub/src/layers/preprocessing/audio_converter.py +121 -0
  15. keras_hub/src/layers/preprocessing/image_converter.py +130 -0
  16. keras_hub/src/layers/preprocessing/masked_lm_mask_generator.py +2 -0
  17. keras_hub/src/layers/preprocessing/multi_segment_packer.py +9 -8
  18. keras_hub/src/layers/preprocessing/preprocessing_layer.py +2 -29
  19. keras_hub/src/layers/preprocessing/random_deletion.py +33 -31
  20. keras_hub/src/layers/preprocessing/random_swap.py +33 -31
  21. keras_hub/src/layers/preprocessing/resizing_image_converter.py +101 -0
  22. keras_hub/src/layers/preprocessing/start_end_packer.py +3 -2
  23. keras_hub/src/models/albert/__init__.py +1 -2
  24. keras_hub/src/models/albert/albert_masked_lm_preprocessor.py +6 -86
  25. keras_hub/src/models/albert/{albert_classifier.py → albert_text_classifier.py} +29 -10
  26. keras_hub/src/models/albert/{albert_preprocessor.py → albert_text_classifier_preprocessor.py} +14 -70
  27. keras_hub/src/models/albert/albert_tokenizer.py +17 -36
  28. keras_hub/src/models/backbone.py +12 -34
  29. keras_hub/src/models/bart/__init__.py +1 -2
  30. keras_hub/src/models/bart/bart_preprocessor.py +6 -18
  31. keras_hub/src/models/bart/bart_seq_2_seq_lm_preprocessor.py +21 -148
  32. keras_hub/src/models/bart/bart_tokenizer.py +12 -39
  33. keras_hub/src/models/bert/__init__.py +1 -5
  34. keras_hub/src/models/bert/bert_masked_lm_preprocessor.py +6 -87
  35. keras_hub/src/models/bert/bert_presets.py +1 -4
  36. keras_hub/src/models/bert/{bert_classifier.py → bert_text_classifier.py} +12 -10
  37. keras_hub/src/models/bert/{bert_preprocessor.py → bert_text_classifier_preprocessor.py} +14 -70
  38. keras_hub/src/models/bert/bert_tokenizer.py +17 -35
  39. keras_hub/src/models/bloom/__init__.py +1 -2
  40. keras_hub/src/models/bloom/bloom_causal_lm_preprocessor.py +6 -91
  41. keras_hub/src/models/bloom/bloom_preprocessor.py +5 -12
  42. keras_hub/src/models/bloom/bloom_tokenizer.py +12 -41
  43. keras_hub/src/models/causal_lm.py +10 -29
  44. keras_hub/src/models/causal_lm_preprocessor.py +195 -0
  45. keras_hub/src/models/csp_darknet/csp_darknet_backbone.py +54 -15
  46. keras_hub/src/models/deberta_v3/__init__.py +1 -4
  47. keras_hub/src/models/deberta_v3/deberta_v3_masked_lm_preprocessor.py +14 -77
  48. keras_hub/src/models/deberta_v3/{deberta_v3_classifier.py → deberta_v3_text_classifier.py} +11 -11
  49. keras_hub/src/models/deberta_v3/{deberta_v3_preprocessor.py → deberta_v3_text_classifier_preprocessor.py} +23 -64
  50. keras_hub/src/models/deberta_v3/deberta_v3_tokenizer.py +30 -25
  51. keras_hub/src/models/densenet/densenet_backbone.py +46 -22
  52. keras_hub/src/models/distil_bert/__init__.py +1 -4
  53. keras_hub/src/models/distil_bert/distil_bert_masked_lm_preprocessor.py +14 -76
  54. keras_hub/src/models/distil_bert/{distil_bert_classifier.py → distil_bert_text_classifier.py} +12 -12
  55. keras_hub/src/models/distil_bert/{distil_bert_preprocessor.py → distil_bert_text_classifier_preprocessor.py} +23 -63
  56. keras_hub/src/models/distil_bert/distil_bert_tokenizer.py +19 -35
  57. keras_hub/src/models/efficientnet/__init__.py +13 -0
  58. keras_hub/src/models/efficientnet/efficientnet_backbone.py +569 -0
  59. keras_hub/src/models/efficientnet/fusedmbconv.py +229 -0
  60. keras_hub/src/models/efficientnet/mbconv.py +238 -0
  61. keras_hub/src/models/electra/__init__.py +1 -2
  62. keras_hub/src/models/electra/electra_preprocessor.py +6 -5
  63. keras_hub/src/models/electra/electra_tokenizer.py +17 -32
  64. keras_hub/src/models/f_net/__init__.py +1 -2
  65. keras_hub/src/models/f_net/f_net_masked_lm_preprocessor.py +12 -78
  66. keras_hub/src/models/f_net/{f_net_classifier.py → f_net_text_classifier.py} +10 -8
  67. keras_hub/src/models/f_net/{f_net_preprocessor.py → f_net_text_classifier_preprocessor.py} +19 -63
  68. keras_hub/src/models/f_net/f_net_tokenizer.py +17 -35
  69. keras_hub/src/models/falcon/__init__.py +1 -2
  70. keras_hub/src/models/falcon/falcon_causal_lm_preprocessor.py +6 -89
  71. keras_hub/src/models/falcon/falcon_preprocessor.py +5 -12
  72. keras_hub/src/models/falcon/falcon_tokenizer.py +12 -35
  73. keras_hub/src/models/gemma/__init__.py +1 -2
  74. keras_hub/src/models/gemma/gemma_causal_lm_preprocessor.py +6 -90
  75. keras_hub/src/models/gemma/gemma_preprocessor.py +5 -12
  76. keras_hub/src/models/gemma/gemma_tokenizer.py +12 -23
  77. keras_hub/src/models/gpt2/__init__.py +1 -2
  78. keras_hub/src/models/gpt2/gpt2_causal_lm_preprocessor.py +6 -89
  79. keras_hub/src/models/gpt2/gpt2_preprocessor.py +5 -12
  80. keras_hub/src/models/gpt2/gpt2_tokenizer.py +12 -34
  81. keras_hub/src/models/gpt_neo_x/gpt_neo_x_causal_lm_preprocessor.py +6 -91
  82. keras_hub/src/models/gpt_neo_x/gpt_neo_x_preprocessor.py +5 -12
  83. keras_hub/src/models/gpt_neo_x/gpt_neo_x_tokenizer.py +12 -34
  84. keras_hub/src/models/image_classifier.py +0 -5
  85. keras_hub/src/models/image_classifier_preprocessor.py +83 -0
  86. keras_hub/src/models/llama/__init__.py +1 -2
  87. keras_hub/src/models/llama/llama_causal_lm_preprocessor.py +6 -85
  88. keras_hub/src/models/llama/llama_preprocessor.py +5 -12
  89. keras_hub/src/models/llama/llama_tokenizer.py +12 -25
  90. keras_hub/src/models/llama3/__init__.py +1 -2
  91. keras_hub/src/models/llama3/llama3_causal_lm_preprocessor.py +6 -89
  92. keras_hub/src/models/llama3/llama3_preprocessor.py +2 -0
  93. keras_hub/src/models/llama3/llama3_tokenizer.py +12 -33
  94. keras_hub/src/models/masked_lm.py +0 -2
  95. keras_hub/src/models/masked_lm_preprocessor.py +156 -0
  96. keras_hub/src/models/mistral/__init__.py +1 -2
  97. keras_hub/src/models/mistral/mistral_causal_lm_preprocessor.py +6 -91
  98. keras_hub/src/models/mistral/mistral_preprocessor.py +5 -12
  99. keras_hub/src/models/mistral/mistral_tokenizer.py +12 -23
  100. keras_hub/src/models/mix_transformer/mix_transformer_backbone.py +2 -2
  101. keras_hub/src/models/mobilenet/__init__.py +13 -0
  102. keras_hub/src/models/mobilenet/mobilenet_backbone.py +530 -0
  103. keras_hub/src/models/mobilenet/mobilenet_image_classifier.py +114 -0
  104. keras_hub/src/models/opt/__init__.py +1 -2
  105. keras_hub/src/models/opt/opt_causal_lm_preprocessor.py +6 -93
  106. keras_hub/src/models/opt/opt_preprocessor.py +5 -12
  107. keras_hub/src/models/opt/opt_tokenizer.py +12 -41
  108. keras_hub/src/models/pali_gemma/__init__.py +1 -4
  109. keras_hub/src/models/pali_gemma/pali_gemma_causal_lm_preprocessor.py +28 -28
  110. keras_hub/src/models/pali_gemma/pali_gemma_image_converter.py +25 -0
  111. keras_hub/src/models/pali_gemma/pali_gemma_presets.py +5 -5
  112. keras_hub/src/models/pali_gemma/pali_gemma_tokenizer.py +10 -2
  113. keras_hub/src/models/phi3/__init__.py +1 -2
  114. keras_hub/src/models/phi3/phi3_causal_lm.py +3 -9
  115. keras_hub/src/models/phi3/phi3_causal_lm_preprocessor.py +6 -89
  116. keras_hub/src/models/phi3/phi3_preprocessor.py +5 -12
  117. keras_hub/src/models/phi3/phi3_tokenizer.py +12 -36
  118. keras_hub/src/models/preprocessor.py +76 -83
  119. keras_hub/src/models/resnet/__init__.py +6 -0
  120. keras_hub/src/models/resnet/resnet_backbone.py +387 -26
  121. keras_hub/src/models/resnet/resnet_image_classifier.py +7 -3
  122. keras_hub/src/models/resnet/resnet_image_classifier_preprocessor.py +28 -0
  123. keras_hub/src/models/resnet/resnet_image_converter.py +23 -0
  124. keras_hub/src/models/resnet/resnet_presets.py +95 -0
  125. keras_hub/src/models/roberta/__init__.py +1 -2
  126. keras_hub/src/models/roberta/roberta_masked_lm_preprocessor.py +22 -74
  127. keras_hub/src/models/roberta/{roberta_classifier.py → roberta_text_classifier.py} +11 -11
  128. keras_hub/src/models/roberta/{roberta_preprocessor.py → roberta_text_classifier_preprocessor.py} +21 -53
  129. keras_hub/src/models/roberta/roberta_tokenizer.py +13 -52
  130. keras_hub/src/models/seq_2_seq_lm_preprocessor.py +269 -0
  131. keras_hub/src/models/stable_diffusion_v3/__init__.py +13 -0
  132. keras_hub/src/models/stable_diffusion_v3/clip_encoder_block.py +103 -0
  133. keras_hub/src/models/stable_diffusion_v3/clip_preprocessor.py +93 -0
  134. keras_hub/src/models/stable_diffusion_v3/clip_text_encoder.py +149 -0
  135. keras_hub/src/models/stable_diffusion_v3/clip_tokenizer.py +167 -0
  136. keras_hub/src/models/stable_diffusion_v3/mmdit.py +427 -0
  137. keras_hub/src/models/stable_diffusion_v3/mmdit_block.py +317 -0
  138. keras_hub/src/models/stable_diffusion_v3/t5_xxl_preprocessor.py +74 -0
  139. keras_hub/src/models/stable_diffusion_v3/t5_xxl_text_encoder.py +155 -0
  140. keras_hub/src/models/stable_diffusion_v3/vae_attention.py +126 -0
  141. keras_hub/src/models/stable_diffusion_v3/vae_image_decoder.py +186 -0
  142. keras_hub/src/models/t5/__init__.py +1 -2
  143. keras_hub/src/models/t5/t5_tokenizer.py +13 -23
  144. keras_hub/src/models/task.py +71 -116
  145. keras_hub/src/models/{classifier.py → text_classifier.py} +8 -13
  146. keras_hub/src/models/text_classifier_preprocessor.py +138 -0
  147. keras_hub/src/models/whisper/__init__.py +1 -2
  148. keras_hub/src/models/whisper/{whisper_audio_feature_extractor.py → whisper_audio_converter.py} +20 -18
  149. keras_hub/src/models/whisper/whisper_backbone.py +0 -3
  150. keras_hub/src/models/whisper/whisper_presets.py +10 -10
  151. keras_hub/src/models/whisper/whisper_tokenizer.py +20 -16
  152. keras_hub/src/models/xlm_roberta/__init__.py +1 -4
  153. keras_hub/src/models/xlm_roberta/xlm_roberta_masked_lm_preprocessor.py +26 -72
  154. keras_hub/src/models/xlm_roberta/{xlm_roberta_classifier.py → xlm_roberta_text_classifier.py} +11 -11
  155. keras_hub/src/models/xlm_roberta/{xlm_roberta_preprocessor.py → xlm_roberta_text_classifier_preprocessor.py} +26 -53
  156. keras_hub/src/models/xlm_roberta/xlm_roberta_tokenizer.py +25 -10
  157. keras_hub/src/tests/test_case.py +25 -0
  158. keras_hub/src/tokenizers/byte_pair_tokenizer.py +29 -17
  159. keras_hub/src/tokenizers/byte_tokenizer.py +14 -15
  160. keras_hub/src/tokenizers/sentence_piece_tokenizer.py +19 -7
  161. keras_hub/src/tokenizers/tokenizer.py +67 -32
  162. keras_hub/src/tokenizers/unicode_codepoint_tokenizer.py +14 -15
  163. keras_hub/src/tokenizers/word_piece_tokenizer.py +33 -47
  164. keras_hub/src/utils/keras_utils.py +0 -50
  165. keras_hub/src/utils/preset_utils.py +238 -67
  166. keras_hub/src/utils/tensor_utils.py +187 -69
  167. keras_hub/src/utils/timm/convert_resnet.py +20 -16
  168. keras_hub/src/utils/timm/preset_loader.py +67 -0
  169. keras_hub/src/utils/transformers/convert_albert.py +193 -0
  170. keras_hub/src/utils/transformers/convert_bart.py +373 -0
  171. keras_hub/src/utils/transformers/convert_bert.py +7 -17
  172. keras_hub/src/utils/transformers/convert_distilbert.py +10 -20
  173. keras_hub/src/utils/transformers/convert_gemma.py +5 -19
  174. keras_hub/src/utils/transformers/convert_gpt2.py +5 -18
  175. keras_hub/src/utils/transformers/convert_llama3.py +7 -18
  176. keras_hub/src/utils/transformers/convert_mistral.py +129 -0
  177. keras_hub/src/utils/transformers/convert_pali_gemma.py +7 -29
  178. keras_hub/src/utils/transformers/preset_loader.py +77 -0
  179. keras_hub/src/utils/transformers/safetensor_utils.py +2 -2
  180. keras_hub/src/version_utils.py +1 -1
  181. {keras_hub_nightly-0.15.0.dev20240823171555.dist-info → keras_hub_nightly-0.15.0.dev20240911134614.dist-info}/METADATA +1 -2
  182. keras_hub_nightly-0.15.0.dev20240911134614.dist-info/RECORD +338 -0
  183. {keras_hub_nightly-0.15.0.dev20240823171555.dist-info → keras_hub_nightly-0.15.0.dev20240911134614.dist-info}/WHEEL +1 -1
  184. keras_hub/src/models/whisper/whisper_preprocessor.py +0 -326
  185. keras_hub/src/utils/timm/convert.py +0 -37
  186. keras_hub/src/utils/transformers/convert.py +0 -101
  187. keras_hub_nightly-0.15.0.dev20240823171555.dist-info/RECORD +0 -297
  188. {keras_hub_nightly-0.15.0.dev20240823171555.dist-info → keras_hub_nightly-0.15.0.dev20240911134614.dist-info}/top_level.txt +0 -0
@@ -12,19 +12,14 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- import keras
16
- from absl import logging
17
-
18
15
  from keras_hub.src.api_export import keras_hub_export
19
- from keras_hub.src.models.gemma.gemma_preprocessor import GemmaPreprocessor
20
- from keras_hub.src.utils.keras_utils import (
21
- convert_inputs_to_list_of_tensor_segments,
22
- )
23
- from keras_hub.src.utils.tensor_utils import strip_to_ragged
16
+ from keras_hub.src.models.causal_lm_preprocessor import CausalLMPreprocessor
17
+ from keras_hub.src.models.gemma.gemma_backbone import GemmaBackbone
18
+ from keras_hub.src.models.gemma.gemma_tokenizer import GemmaTokenizer
24
19
 
25
20
 
26
21
  @keras_hub_export("keras_hub.models.GemmaCausalLMPreprocessor")
27
- class GemmaCausalLMPreprocessor(GemmaPreprocessor):
22
+ class GemmaCausalLMPreprocessor(CausalLMPreprocessor):
28
23
  """Gemma Causal LM preprocessor.
29
24
 
30
25
  This preprocessing layer is meant for use with
@@ -84,84 +79,5 @@ class GemmaCausalLMPreprocessor(GemmaPreprocessor):
84
79
  ```
85
80
  """
86
81
 
87
- def call(
88
- self,
89
- x,
90
- y=None,
91
- sample_weight=None,
92
- sequence_length=None,
93
- ):
94
- if y is not None or sample_weight is not None:
95
- logging.warning(
96
- "`GemmaCausalLMPreprocessor` generates `y` and `sample_weight` "
97
- "based on your input data, but your data already contains `y` "
98
- "or `sample_weight`. Your `y` and `sample_weight` will be "
99
- "ignored."
100
- )
101
- sequence_length = sequence_length or self.sequence_length
102
-
103
- x = convert_inputs_to_list_of_tensor_segments(x)[0]
104
- x = self.tokenizer(x)
105
- # Pad with one extra token to account for the truncation below.
106
- token_ids, padding_mask = self.packer(
107
- x,
108
- sequence_length=sequence_length + 1,
109
- add_start_value=self.add_start_token,
110
- add_end_value=self.add_end_token,
111
- )
112
- # The last token does not have a next token, so we truncate it out.
113
- x = {
114
- "token_ids": token_ids[..., :-1],
115
- "padding_mask": padding_mask[..., :-1],
116
- }
117
- # Target `y` will be the next token.
118
- y, sample_weight = token_ids[..., 1:], padding_mask[..., 1:]
119
- return keras.utils.pack_x_y_sample_weight(x, y, sample_weight)
120
-
121
- def generate_preprocess(
122
- self,
123
- x,
124
- sequence_length=None,
125
- ):
126
- """Convert strings to integer token input for generation.
127
-
128
- Similar to calling the layer for training, this method takes in strings
129
- or tensor strings, tokenizes and packs the input, and computes a padding
130
- mask masking all inputs not filled in with a padded value.
131
-
132
- Unlike calling the layer for training, this method does not compute
133
- labels and will never append a `tokenizer.end_token_id` to the end of
134
- the sequence (as generation is expected to continue at the end of the
135
- inputted prompt).
136
- """
137
- if not self.built:
138
- self.build(None)
139
-
140
- x = convert_inputs_to_list_of_tensor_segments(x)[0]
141
- x = self.tokenizer(x)
142
- token_ids, padding_mask = self.packer(
143
- x, sequence_length=sequence_length, add_end_value=False
144
- )
145
- return {
146
- "token_ids": token_ids,
147
- "padding_mask": padding_mask,
148
- }
149
-
150
- def generate_postprocess(self, x):
151
- """Convert integer token output to strings for generation.
152
-
153
- This method reverses `generate_preprocess()`, by first removing all
154
- padding and start/end tokens, and then converting the integer sequence
155
- back to a string.
156
- """
157
- if not self.built:
158
- self.build(None)
159
-
160
- token_ids, padding_mask = x["token_ids"], x["padding_mask"]
161
- ids_to_strip = (
162
- self.tokenizer.start_token_id,
163
- self.tokenizer.end_token_id,
164
- self.tokenizer.pad_token_id,
165
- )
166
- token_ids = strip_to_ragged(token_ids, padding_mask, ids_to_strip)
167
- return self.tokenizer.detokenize(token_ids)
82
+ backbone_cls = GemmaBackbone
83
+ tokenizer_cls = GemmaTokenizer
@@ -17,11 +17,10 @@ import keras
17
17
 
18
18
  from keras_hub.src.api_export import keras_hub_export
19
19
  from keras_hub.src.layers.preprocessing.start_end_packer import StartEndPacker
20
+ from keras_hub.src.models.gemma.gemma_backbone import GemmaBackbone
20
21
  from keras_hub.src.models.gemma.gemma_tokenizer import GemmaTokenizer
21
22
  from keras_hub.src.models.preprocessor import Preprocessor
22
- from keras_hub.src.utils.keras_utils import (
23
- convert_inputs_to_list_of_tensor_segments,
24
- )
23
+ from keras_hub.src.utils.tensor_utils import preprocessing_function
25
24
 
26
25
 
27
26
  @keras_hub_export("keras_hub.models.GemmaPreprocessor")
@@ -122,6 +121,7 @@ class GemmaPreprocessor(Preprocessor):
122
121
  ```
123
122
  """
124
123
 
124
+ backbone_cls = GemmaBackbone
125
125
  tokenizer_cls = GemmaTokenizer
126
126
 
127
127
  def __init__(
@@ -151,6 +151,7 @@ class GemmaPreprocessor(Preprocessor):
151
151
  )
152
152
  self.built = True
153
153
 
154
+ @preprocessing_function
154
155
  def call(
155
156
  self,
156
157
  x,
@@ -158,17 +159,9 @@ class GemmaPreprocessor(Preprocessor):
158
159
  sample_weight=None,
159
160
  sequence_length=None,
160
161
  ):
161
- x = convert_inputs_to_list_of_tensor_segments(x)
162
- if len(x) != 1:
163
- raise ValueError(
164
- "GemmaPreprocessor requires each input to contain only "
165
- f"one segment, but received {len(x)}. If you are using Gemma "
166
- "for a multi-segment classification task, please combine your "
167
- "input into a single string."
168
- )
169
162
  sequence_length = sequence_length or self.sequence_length
170
163
  token_ids, padding_mask = self.packer(
171
- self.tokenizer(x[0]),
164
+ self.tokenizer(x),
172
165
  sequence_length=sequence_length,
173
166
  add_start_value=self.add_start_token,
174
167
  add_end_value=self.add_end_token,
@@ -13,12 +13,18 @@
13
13
  # limitations under the License.
14
14
 
15
15
  from keras_hub.src.api_export import keras_hub_export
16
+ from keras_hub.src.models.gemma.gemma_backbone import GemmaBackbone
16
17
  from keras_hub.src.tokenizers.sentence_piece_tokenizer import (
17
18
  SentencePieceTokenizer,
18
19
  )
19
20
 
20
21
 
21
- @keras_hub_export("keras_hub.models.GemmaTokenizer")
22
+ @keras_hub_export(
23
+ [
24
+ "keras_hub.tokenizers.GemmaTokenizer",
25
+ "keras_hub.models.GemmaTokenizer",
26
+ ]
27
+ )
22
28
  class GemmaTokenizer(SentencePieceTokenizer):
23
29
  """Gemma tokenizer layer based on SentencePiece.
24
30
 
@@ -77,27 +83,10 @@ class GemmaTokenizer(SentencePieceTokenizer):
77
83
  ```
78
84
  """
79
85
 
80
- def __init__(self, proto, **kwargs):
81
- self.start_token = "<bos>"
82
- self.end_token = "<eos>"
83
- self.pad_token = "<pad>"
86
+ backbone_cls = GemmaBackbone
84
87
 
88
+ def __init__(self, proto, **kwargs):
89
+ self._add_special_token("<bos>", "start_token")
90
+ self._add_special_token("<eos>", "end_token")
91
+ self._add_special_token("<pad>", "pad_token")
85
92
  super().__init__(proto=proto, **kwargs)
86
-
87
- def set_proto(self, proto):
88
- super().set_proto(proto)
89
- if proto is not None:
90
- for token in [self.end_token, self.pad_token]:
91
- if token not in self.get_vocabulary():
92
- raise ValueError(
93
- f"Cannot find token `'{token}'` in the provided "
94
- f"`vocabulary`. Please provide `'{token}'` in your "
95
- "`vocabulary` or use a pretrained `vocabulary` name."
96
- )
97
- self.start_token_id = self.token_to_id(self.start_token)
98
- self.end_token_id = self.token_to_id(self.end_token)
99
- self.pad_token_id = self.token_to_id(self.pad_token)
100
- else:
101
- self.start_token_id = None
102
- self.end_token_id = None
103
- self.pad_token_id = None
@@ -14,7 +14,6 @@
14
14
 
15
15
  from keras_hub.src.models.gpt2.gpt2_backbone import GPT2Backbone
16
16
  from keras_hub.src.models.gpt2.gpt2_presets import backbone_presets
17
- from keras_hub.src.models.gpt2.gpt2_tokenizer import GPT2Tokenizer
18
17
  from keras_hub.src.utils.preset_utils import register_presets
19
18
 
20
- register_presets(backbone_presets, (GPT2Backbone, GPT2Tokenizer))
19
+ register_presets(backbone_presets, GPT2Backbone)
@@ -12,19 +12,14 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- import keras
16
- from absl import logging
17
-
18
15
  from keras_hub.src.api_export import keras_hub_export
19
- from keras_hub.src.models.gpt2.gpt2_preprocessor import GPT2Preprocessor
20
- from keras_hub.src.utils.keras_utils import (
21
- convert_inputs_to_list_of_tensor_segments,
22
- )
23
- from keras_hub.src.utils.tensor_utils import strip_to_ragged
16
+ from keras_hub.src.models.causal_lm_preprocessor import CausalLMPreprocessor
17
+ from keras_hub.src.models.gpt2.gpt2_backbone import GPT2Backbone
18
+ from keras_hub.src.models.gpt2.gpt2_tokenizer import GPT2Tokenizer
24
19
 
25
20
 
26
21
  @keras_hub_export("keras_hub.models.GPT2CausalLMPreprocessor")
27
- class GPT2CausalLMPreprocessor(GPT2Preprocessor):
22
+ class GPT2CausalLMPreprocessor(CausalLMPreprocessor):
28
23
  """GPT2 Causal LM preprocessor.
29
24
 
30
25
  This preprocessing layer is meant for use with
@@ -91,83 +86,5 @@ class GPT2CausalLMPreprocessor(GPT2Preprocessor):
91
86
  ```
92
87
  """
93
88
 
94
- def call(
95
- self,
96
- x,
97
- y=None,
98
- sample_weight=None,
99
- sequence_length=None,
100
- ):
101
- if y is not None or sample_weight is not None:
102
- logging.warning(
103
- "`GPT2CausalLMPreprocessor` generates `y` and `sample_weight` "
104
- "based on your input data, but your data already contains `y` "
105
- "or `sample_weight`. Your `y` and `sample_weight` will be "
106
- "ignored."
107
- )
108
- sequence_length = sequence_length or self.sequence_length
109
-
110
- x = convert_inputs_to_list_of_tensor_segments(x)[0]
111
- x = self.tokenizer(x)
112
- # Pad with one extra token to account for the truncation below.
113
- token_ids, padding_mask = self.packer(
114
- x,
115
- sequence_length=sequence_length + 1,
116
- add_start_value=self.add_start_token,
117
- add_end_value=self.add_end_token,
118
- )
119
- # The last token does not have a next token, so we truncate it out.
120
- x = {
121
- "token_ids": token_ids[..., :-1],
122
- "padding_mask": padding_mask[..., :-1],
123
- }
124
- # Target `y` will be the next token.
125
- y, sample_weight = token_ids[..., 1:], padding_mask[..., 1:]
126
- return keras.utils.pack_x_y_sample_weight(x, y, sample_weight)
127
-
128
- def generate_preprocess(
129
- self,
130
- x,
131
- sequence_length=None,
132
- ):
133
- """Convert strings to integer token input for generation.
134
-
135
- Similar to calling the layer for training, this method takes in strings
136
- or tensor strings, tokenizes and packs the input, and computes a padding
137
- mask masking all inputs not filled in with a padded value.
138
-
139
- Unlike calling the layer for training, this method does not compute
140
- labels and will never append a `tokenizer.end_token_id` to the end of
141
- the sequence (as generation is expected to continue at the end of the
142
- inputted prompt).
143
- """
144
- if not self.built:
145
- self.build(None)
146
-
147
- x = convert_inputs_to_list_of_tensor_segments(x)[0]
148
- x = self.tokenizer(x)
149
- token_ids, padding_mask = self.packer(
150
- x, sequence_length=sequence_length, add_end_value=False
151
- )
152
- return {
153
- "token_ids": token_ids,
154
- "padding_mask": padding_mask,
155
- }
156
-
157
- def generate_postprocess(
158
- self,
159
- x,
160
- ):
161
- """Convert integer token output to strings for generation.
162
-
163
- This method reverses `generate_preprocess()`, by first removing all
164
- padding and start/end tokens, and then converting the integer sequence
165
- back to a string.
166
- """
167
- if not self.built:
168
- self.build(None)
169
-
170
- token_ids, padding_mask = x["token_ids"], x["padding_mask"]
171
- ids_to_strip = (self.tokenizer.end_token_id,)
172
- token_ids = strip_to_ragged(token_ids, padding_mask, ids_to_strip)
173
- return self.tokenizer.detokenize(token_ids)
89
+ backbone_cls = GPT2Backbone
90
+ tokenizer_cls = GPT2Tokenizer
@@ -17,11 +17,10 @@ import keras
17
17
 
18
18
  from keras_hub.src.api_export import keras_hub_export
19
19
  from keras_hub.src.layers.preprocessing.start_end_packer import StartEndPacker
20
+ from keras_hub.src.models.gpt2.gpt2_backbone import GPT2Backbone
20
21
  from keras_hub.src.models.gpt2.gpt2_tokenizer import GPT2Tokenizer
21
22
  from keras_hub.src.models.preprocessor import Preprocessor
22
- from keras_hub.src.utils.keras_utils import (
23
- convert_inputs_to_list_of_tensor_segments,
24
- )
23
+ from keras_hub.src.utils.tensor_utils import preprocessing_function
25
24
 
26
25
 
27
26
  @keras_hub_export("keras_hub.models.GPT2Preprocessor")
@@ -107,6 +106,7 @@ class GPT2Preprocessor(Preprocessor):
107
106
  ```
108
107
  """
109
108
 
109
+ backbone_cls = GPT2Backbone
110
110
  tokenizer_cls = GPT2Tokenizer
111
111
 
112
112
  def __init__(
@@ -136,6 +136,7 @@ class GPT2Preprocessor(Preprocessor):
136
136
  )
137
137
  self.built = True
138
138
 
139
+ @preprocessing_function
139
140
  def call(
140
141
  self,
141
142
  x,
@@ -143,17 +144,9 @@ class GPT2Preprocessor(Preprocessor):
143
144
  sample_weight=None,
144
145
  sequence_length=None,
145
146
  ):
146
- x = convert_inputs_to_list_of_tensor_segments(x)
147
- if len(x) != 1:
148
- raise ValueError(
149
- "GPT2 requires each input feature to contain only "
150
- f"one segment, but received {len(x)}. If you are using GPT2 "
151
- "for a multi-segment classification task, please refer to "
152
- "classification models like BERT or RoBERTa."
153
- )
154
147
  sequence_length = sequence_length or self.sequence_length
155
148
  token_ids, padding_mask = self.packer(
156
- self.tokenizer(x[0]),
149
+ self.tokenizer(x),
157
150
  sequence_length=sequence_length,
158
151
  add_start_value=self.add_start_token,
159
152
  add_end_value=self.add_end_token,
@@ -14,10 +14,16 @@
14
14
 
15
15
 
16
16
  from keras_hub.src.api_export import keras_hub_export
17
+ from keras_hub.src.models.gpt2.gpt2_backbone import GPT2Backbone
17
18
  from keras_hub.src.tokenizers.byte_pair_tokenizer import BytePairTokenizer
18
19
 
19
20
 
20
- @keras_hub_export("keras_hub.models.GPT2Tokenizer")
21
+ @keras_hub_export(
22
+ [
23
+ "keras_hub.tokenizers.GPT2Tokenizer",
24
+ "keras_hub.models.GPT2Tokenizer",
25
+ ]
26
+ )
21
27
  class GPT2Tokenizer(BytePairTokenizer):
22
28
  """A GPT-2 tokenizer using Byte-Pair Encoding subword segmentation.
23
29
 
@@ -27,8 +33,6 @@ class GPT2Tokenizer(BytePairTokenizer):
27
33
  models and provides a `from_preset()` method to automatically download
28
34
  a matching vocabulary for a GPT-2 preset.
29
35
 
30
- This tokenizer does not provide truncation or padding of inputs.
31
-
32
36
  If input is a batch of strings (rank > 0), the layer will output a
33
37
  `tf.RaggedTensor` where the last dimension of the output is ragged.
34
38
 
@@ -65,6 +69,8 @@ class GPT2Tokenizer(BytePairTokenizer):
65
69
  ```
66
70
  """
67
71
 
72
+ backbone_cls = GPT2Backbone
73
+
68
74
  def __init__(
69
75
  self,
70
76
  vocabulary=None,
@@ -72,39 +78,11 @@ class GPT2Tokenizer(BytePairTokenizer):
72
78
  **kwargs,
73
79
  ):
74
80
  # GPT2 uses the same start as end token, i.e., "<|endoftext|>".
75
- self.end_token = self.start_token = "<|endoftext|>"
76
-
81
+ self._add_special_token("<|endoftext|>", "end_token")
82
+ self._add_special_token("<|endoftext|>", "start_token")
83
+ self.pad_token_id = 0
77
84
  super().__init__(
78
85
  vocabulary=vocabulary,
79
86
  merges=merges,
80
- unsplittable_tokens=[self.end_token],
81
87
  **kwargs,
82
88
  )
83
-
84
- def set_vocabulary_and_merges(self, vocabulary, merges):
85
- super().set_vocabulary_and_merges(vocabulary, merges)
86
-
87
- if vocabulary is not None:
88
- # Check for necessary special tokens.
89
- if self.end_token not in self.get_vocabulary():
90
- raise ValueError(
91
- f"Cannot find token `'{self.end_token}'` in the provided "
92
- f"`vocabulary`. Please provide `'{self.end_token}'` in "
93
- "your `vocabulary` or use a pretrained `vocabulary` name."
94
- )
95
-
96
- self.end_token_id = self.token_to_id(self.end_token)
97
- self.start_token_id = self.end_token_id
98
- self.pad_token_id = 0
99
- else:
100
- self.end_token_id = None
101
- self.start_token_id = None
102
- self.pad_token_id = None
103
-
104
- def get_config(self):
105
- config = super().get_config()
106
- # In the constructor, we pass the list of special tokens to the
107
- # `unsplittable_tokens` arg of the superclass' constructor. Hence, we
108
- # delete it from the config here.
109
- del config["unsplittable_tokens"]
110
- return config
@@ -12,21 +12,14 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- import keras
16
- from absl import logging
17
-
18
15
  from keras_hub.src.api_export import keras_hub_export
19
- from keras_hub.src.models.gpt_neo_x.gpt_neo_x_preprocessor import (
20
- GPTNeoXPreprocessor,
21
- )
22
- from keras_hub.src.utils.keras_utils import (
23
- convert_inputs_to_list_of_tensor_segments,
24
- )
25
- from keras_hub.src.utils.tensor_utils import strip_to_ragged
16
+ from keras_hub.src.models.causal_lm_preprocessor import CausalLMPreprocessor
17
+ from keras_hub.src.models.gpt_neo_x.gpt_neo_x_backbone import GPTNeoXBackbone
18
+ from keras_hub.src.models.gpt_neo_x.gpt_neo_x_tokenizer import GPTNeoXTokenizer
26
19
 
27
20
 
28
21
  @keras_hub_export("keras_hub.models.GPTNeoXCausalLMPreprocessor")
29
- class GPTNeoXCausalLMPreprocessor(GPTNeoXPreprocessor):
22
+ class GPTNeoXCausalLMPreprocessor(CausalLMPreprocessor):
30
23
  """GPT-NeoX Causal LM preprocessor.
31
24
 
32
25
  This preprocessing layer is meant for use with
@@ -59,83 +52,5 @@ class GPTNeoXCausalLMPreprocessor(GPTNeoXPreprocessor):
59
52
 
60
53
  """
61
54
 
62
- def call(
63
- self,
64
- x,
65
- y=None,
66
- sample_weight=None,
67
- sequence_length=None,
68
- ):
69
- if y is not None or sample_weight is not None:
70
- logging.warning(
71
- "`GPTNeoXCausalLMPreprocessor` generates `y` and `sample_weight` "
72
- "based on your input data, but your data already contains `y` "
73
- "or `sample_weight`. Your `y` and `sample_weight` will be "
74
- "ignored."
75
- )
76
- sequence_length = sequence_length or self.sequence_length
77
-
78
- x = convert_inputs_to_list_of_tensor_segments(x)[0]
79
- x = self.tokenizer(x)
80
- # Pad with one extra token to account for the truncation below.
81
- token_ids, padding_mask = self.packer(
82
- x,
83
- sequence_length=sequence_length + 1,
84
- add_start_value=self.add_start_token,
85
- add_end_value=self.add_end_token,
86
- )
87
- # The last token does not have a next token, so we truncate it out.
88
- x = {
89
- "token_ids": token_ids[..., :-1],
90
- "padding_mask": padding_mask[..., :-1],
91
- }
92
- # Target `y` will be the next token.
93
- y, sample_weight = token_ids[..., 1:], padding_mask[..., 1:]
94
- return keras.utils.pack_x_y_sample_weight(x, y, sample_weight)
95
-
96
- def generate_preprocess(
97
- self,
98
- x,
99
- sequence_length=None,
100
- ):
101
- """Convert strings to integer token input for generation.
102
-
103
- Similar to calling the layer for training, this method takes in strings
104
- or tensor strings, tokenizes and packs the input, and computes a padding
105
- mask masking all inputs not filled in with a padded value.
106
-
107
- Unlike calling the layer for training, this method does not compute
108
- labels and will never append a `tokenizer.end_token_id` to the end of
109
- the sequence (as generation is expected to continue at the end of the
110
- inputted prompt).
111
- """
112
- if not self.built:
113
- self.build(None)
114
-
115
- x = convert_inputs_to_list_of_tensor_segments(x)[0]
116
- x = self.tokenizer(x)
117
- token_ids, padding_mask = self.packer(
118
- x, sequence_length=sequence_length, add_end_value=False
119
- )
120
- return {
121
- "token_ids": token_ids,
122
- "padding_mask": padding_mask,
123
- }
124
-
125
- def generate_postprocess(
126
- self,
127
- x,
128
- ):
129
- """Convert integer token output to strings for generation.
130
-
131
- This method reverses `generate_preprocess()`, by first removing all
132
- padding and start/end tokens, and then converting the integer sequence
133
- back to a string.
134
- """
135
- if not self.built:
136
- self.build(None)
137
-
138
- token_ids, padding_mask = x["token_ids"], x["padding_mask"]
139
- ids_to_strip = (self.tokenizer.end_token_id,)
140
- token_ids = strip_to_ragged(token_ids, padding_mask, ids_to_strip)
141
- return self.tokenizer.detokenize(token_ids)
55
+ backbone_cls = GPTNeoXBackbone
56
+ tokenizer_cls = GPTNeoXTokenizer
@@ -16,11 +16,10 @@ import keras
16
16
 
17
17
  from keras_hub.src.api_export import keras_hub_export
18
18
  from keras_hub.src.layers.preprocessing.start_end_packer import StartEndPacker
19
+ from keras_hub.src.models.gpt_neo_x.gpt_neo_x_backbone import GPTNeoXBackbone
19
20
  from keras_hub.src.models.gpt_neo_x.gpt_neo_x_tokenizer import GPTNeoXTokenizer
20
21
  from keras_hub.src.models.preprocessor import Preprocessor
21
- from keras_hub.src.utils.keras_utils import (
22
- convert_inputs_to_list_of_tensor_segments,
23
- )
22
+ from keras_hub.src.utils.tensor_utils import preprocessing_function
24
23
 
25
24
 
26
25
  @keras_hub_export("keras_hub.models.GPTNeoXPreprocessor")
@@ -65,6 +64,7 @@ class GPTNeoXPreprocessor(Preprocessor):
65
64
  the layer.
66
65
  """
67
66
 
67
+ backbone_cls = GPTNeoXBackbone
68
68
  tokenizer_cls = GPTNeoXTokenizer
69
69
 
70
70
  def __init__(
@@ -94,6 +94,7 @@ class GPTNeoXPreprocessor(Preprocessor):
94
94
  )
95
95
  self.built = True
96
96
 
97
+ @preprocessing_function
97
98
  def call(
98
99
  self,
99
100
  x,
@@ -101,17 +102,9 @@ class GPTNeoXPreprocessor(Preprocessor):
101
102
  sample_weight=None,
102
103
  sequence_length=None,
103
104
  ):
104
- x = convert_inputs_to_list_of_tensor_segments(x)
105
- if len(x) != 1:
106
- raise ValueError(
107
- "GPTNeoX requires each input feature to contain only "
108
- f"one segment, but received {len(x)}. If you are using GPTNeoX "
109
- "for a multi-segment classification task, please refer to "
110
- "classification models like BERT or RoBERTa."
111
- )
112
105
  sequence_length = sequence_length or self.sequence_length
113
106
  token_ids, padding_mask = self.packer(
114
- self.tokenizer(x[0]),
107
+ self.tokenizer(x),
115
108
  sequence_length=sequence_length,
116
109
  add_start_value=self.add_start_token,
117
110
  add_end_value=self.add_end_token,