clarifai 11.2.3rc4__py3-none-any.whl → 11.2.3rc5__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.
clarifai/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "11.2.3rc4"
1
+ __version__ = "11.2.3rc5"
@@ -71,6 +71,37 @@ class ModelClass(ABC):
71
71
  output.data.text.raw = signatures_to_json(signatures)
72
72
  return resp
73
73
 
74
+ def _is_data_set(self, data_msg):
75
+ # Singular message fields
76
+ singular_fields = [
77
+ "image", "video", "metadata", "geo", "text", "audio", "ndarray"
78
+ ]
79
+ for field in singular_fields:
80
+ if data_msg.HasField(field):
81
+ return True
82
+
83
+ # Repeated fields
84
+ repeated_fields = [
85
+ "concepts", "colors", "clusters", "embeddings", "regions", "frames",
86
+ "tracks", "time_segments", "hits", "heatmaps", "parts"
87
+ ]
88
+ for field in repeated_fields:
89
+ if getattr(data_msg, field): # checks if the list is not empty
90
+ return True
91
+
92
+ # Scalar fields (proto3 default: 0 for numbers, empty for strings/bytes, False for bool)
93
+ if (
94
+ data_msg.int_value != 0 or
95
+ data_msg.float_value != 0.0 or
96
+ data_msg.bytes_value != b"" or
97
+ data_msg.bool_value is True or
98
+ data_msg.string_value != ""
99
+ ):
100
+ return True
101
+
102
+ return False
103
+
104
+
74
105
  def _convert_input_data_to_new_format(
75
106
  self, data: resources_pb2.Data,
76
107
  input_fields: List[resources_pb2.ModelTypeField]) -> resources_pb2.Data:
@@ -78,97 +109,88 @@ class ModelClass(ABC):
78
109
  new_data = resources_pb2.Data()
79
110
  for field in input_fields:
80
111
  part_data = self._convert_field(data, field)
81
- part = new_data.parts.add()
82
- part.id = field.name
83
- part.data.CopyFrom(part_data)
112
+ if self._is_data_set(part_data):
113
+ # if the field is set, add it to the new data part
114
+ part = new_data.parts.add()
115
+ part.id = field.name
116
+ part.data.CopyFrom(part_data)
117
+ else:
118
+ if field.required:
119
+ raise ValueError(f"Field {field.name} is required but not set")
84
120
  return new_data
85
121
 
86
122
  def _convert_field(self, old_data: resources_pb2.Data,
87
123
  field: resources_pb2.ModelTypeField) -> resources_pb2.Data:
88
124
  data_type = field.type
125
+ new_data = resources_pb2.Data()
89
126
  if data_type == resources_pb2.ModelTypeField.DataType.STR:
90
- new_data = resources_pb2.Data()
91
- new_data.string_value = old_data.text.raw
127
+ if old_data.HasField('text'):
128
+ new_data.string_value = old_data.text.raw
92
129
  return new_data
93
130
  elif data_type == resources_pb2.ModelTypeField.DataType.IMAGE:
94
- new_data = resources_pb2.Data()
95
- new_data.image.CopyFrom(old_data.image)
131
+ if old_data.HasField('image'):
132
+ new_data.image.CopyFrom(old_data.image)
96
133
  return new_data
97
134
  elif data_type == resources_pb2.ModelTypeField.DataType.VIDEO:
98
- new_data = resources_pb2.Data()
99
- new_data.video.CopyFrom(old_data.video)
135
+ if old_data.HasField('video'):
136
+ new_data.video.CopyFrom(old_data.video)
100
137
  return new_data
101
138
  elif data_type == resources_pb2.ModelTypeField.DataType.BOOL:
102
- new_data = resources_pb2.Data()
103
- new_data.bool_value = old_data.bool_value
139
+ if old_data.HasField('bool_value'):
140
+ new_data.bool_value = old_data.bool_value
104
141
  return new_data
105
142
  elif data_type == resources_pb2.ModelTypeField.DataType.INT:
106
- new_data = resources_pb2.Data()
107
- new_data.int_value = old_data.int_value
143
+ if old_data.HasField('int_value'):
144
+ new_data.int_value = old_data.int_value
108
145
  return new_data
109
146
  elif data_type == resources_pb2.ModelTypeField.DataType.FLOAT:
110
- new_data = resources_pb2.Data()
111
- new_data.float_value = old_data.float_value
147
+ if old_data.HasField('float_value'):
148
+ new_data.float_value = old_data.float_value
112
149
  return new_data
113
150
  elif data_type == resources_pb2.ModelTypeField.DataType.BYTES:
114
- new_data = resources_pb2.Data()
115
- new_data.bytes_value = old_data.bytes_value
151
+ if old_data.HasField('bytes_value'):
152
+ new_data.bytes_value = old_data.bytes_value
116
153
  return new_data
117
154
  elif data_type == resources_pb2.ModelTypeField.DataType.NDARRAY:
118
- new_data = resources_pb2.Data()
119
- new_data.ndarray.CopyFrom(old_data.ndarray)
120
- return new_data
121
- elif data_type == resources_pb2.ModelTypeField.DataType.JSON_DATA:
122
- new_data = resources_pb2.Data()
123
- struct_dict = old_data.text.raw
124
- new_data.string_value = json.dumps(struct_dict)
155
+ if old_data.HasField('ndarray'):
156
+ new_data.ndarray.CopyFrom(old_data.ndarray)
125
157
  return new_data
126
158
  elif data_type == resources_pb2.ModelTypeField.DataType.TEXT:
127
- new_data = resources_pb2.Data()
128
- new_data.text.CopyFrom(old_data.text)
159
+ if old_data.HasField('text'):
160
+ new_data.text.CopyFrom(old_data.text)
161
+ return new_data
162
+ elif data_type == resources_pb2.ModelTypeField.DataType.AUDIO:
163
+ if old_data.HasField('audio'):
164
+ new_data.audio.CopyFrom(old_data.audio)
129
165
  return new_data
130
166
  elif data_type == resources_pb2.ModelTypeField.DataType.CONCEPT:
131
- new_data = resources_pb2.Data()
132
- new_data.concepts.extend(old_data.concepts)
167
+ if old_data.concepts:
168
+ new_data.concepts.extend(old_data.concepts)
133
169
  return new_data
134
170
  elif data_type == resources_pb2.ModelTypeField.DataType.REGION:
135
- new_data = resources_pb2.Data()
136
- new_data.regions.extend(old_data.regions)
171
+ if old_data.regions:
172
+ new_data.regions.extend(old_data.regions)
137
173
  return new_data
138
174
  elif data_type == resources_pb2.ModelTypeField.DataType.FRAME:
139
- new_data = resources_pb2.Data()
140
- new_data.frames.extend(old_data.frames)
141
- return new_data
142
- elif data_type == resources_pb2.ModelTypeField.DataType.AUDIO:
143
- new_data = resources_pb2.Data()
144
- new_data.audio.CopyFrom(old_data.audio)
175
+ if old_data.frames:
176
+ new_data.frames.extend(old_data.frames)
145
177
  return new_data
146
178
  elif data_type == resources_pb2.ModelTypeField.DataType.LIST:
147
179
  new_data = resources_pb2.Data()
148
180
  if not field.type_args:
149
181
  raise ValueError("LIST type requires type_args")
150
182
  element_field = field.type_args[0]
151
- element_data = self._convert_field(old_data, element_field)
152
- part = new_data.parts.add()
153
- part.data.CopyFrom(element_data)
154
- return new_data
155
- elif data_type == resources_pb2.ModelTypeField.DataType.TUPLE:
156
- new_data = resources_pb2.Data()
157
- for element_field in field.type_args:
183
+ if element_field in (resources_pb2.ModelTypeField.DataType.CONCEPT,
184
+ resources_pb2.ModelTypeField.DataType.REGION,
185
+ resources_pb2.ModelTypeField.DataType.FRAME):
186
+ # convert to new format
158
187
  element_data = self._convert_field(old_data, element_field)
159
- part = new_data.parts.add()
160
- part.data.CopyFrom(element_data)
161
- return new_data
162
- elif data_type == resources_pb2.ModelTypeField.DataType.NAMED_FIELDS:
163
- new_data = resources_pb2.Data()
164
- for named_field in field.type_args:
165
- part_data = self._convert_field(old_data, named_field)
166
- part = new_data.parts.add()
167
- part.id = named_field.name
168
- part.data.CopyFrom(part_data)
169
- return new_data
188
+ # part = new_data.parts.add()
189
+ # part.data.CopyFrom(element_data)
190
+ return element_data
170
191
  else:
171
- raise ValueError(f"Unsupported data type: {data_type}")
192
+ return new_data
193
+ # raise ValueError(f"Unsupported data type: {data_type}")
172
194
 
173
195
  def is_old_format(self, data: resources_pb2.Data) -> bool:
174
196
  """Check if the Data proto is in the old format (without parts)."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: clarifai
3
- Version: 11.2.3rc4
3
+ Version: 11.2.3rc5
4
4
  Summary: Clarifai Python SDK
5
5
  Home-page: https://github.com/Clarifai/clarifai-python
6
6
  Author: Clarifai
@@ -1,4 +1,4 @@
1
- clarifai/__init__.py,sha256=M11rm1B4Hwgzbp8nZy-JnEJfer9JDpDqQzMqNG3d39I,26
1
+ clarifai/__init__.py,sha256=3owdEcoZvJ80nDEku3Fx06-8DotYBYlixS7OPTQzrAY,26
2
2
  clarifai/cli.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  clarifai/errors.py,sha256=RwzTajwds51wLD0MVlMC5kcpBnzRpreDLlazPSBZxrg,2605
4
4
  clarifai/versions.py,sha256=jctnczzfGk_S3EnVqb2FjRKfSREkNmvNEwAAa_VoKiQ,222
@@ -139,7 +139,7 @@ clarifai/runners/dockerfile_template/Dockerfile.template,sha256=5cjv7U8PmWa3DB_5
139
139
  clarifai/runners/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
140
  clarifai/runners/models/base_typed_model.py,sha256=0QCWxch8CcyJSKvE1D4PILd2RSnQZHTmx4DXlQQ6dpo,7856
141
141
  clarifai/runners/models/model_builder.py,sha256=vJXYrxBwuayanMquAPwFOv9z7U5EQ2aIdppl8DfTGgQ,36900
142
- clarifai/runners/models/model_class.py,sha256=clowWGQ9Kh3Q25K0StnL4RUPsOW59T0q7HvcLgNAT5w,19801
142
+ clarifai/runners/models/model_class.py,sha256=xVjcs6j3QhwHH73XVE4KUuHCrzXvC_snbw4_eeSfjuc,20436
143
143
  clarifai/runners/models/model_class_refract.py,sha256=HxuozxSW7ag5yWCPxjNwgLArQ6dORhyGXlnpPaZz2-c,3211
144
144
  clarifai/runners/models/model_run_locally.py,sha256=m5uLlXpWVGuQIJv-XBt-sHGx1gD8w6d77f9b85DOZqs,18170
145
145
  clarifai/runners/models/model_runner.py,sha256=T4Qn_x0vky7XdeS54bvipzEmKZMra1tQdAu_u01yyjc,6503
@@ -230,9 +230,9 @@ clarifai/workflows/__pycache__/__init__.cpython-39.pyc,sha256=9nA--jULSW7OFrYOcs
230
230
  clarifai/workflows/__pycache__/export.cpython-310.pyc,sha256=phEGwi2gAojCUhRTqjZVeTDn7Gk6LCVBeSTjAj4m9iY,2418
231
231
  clarifai/workflows/__pycache__/utils.cpython-310.pyc,sha256=M9_KTM7GOOS5SPrWwAzqHDqyGvgKi3xuSGvyw6MNf-I,1925
232
232
  clarifai/workflows/__pycache__/validate.cpython-310.pyc,sha256=c18Jgp_-CAm8RD_tmUpDCPoqZeexaoWELG0yBzb9rjw,2149
233
- clarifai-11.2.3rc4.dist-info/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
234
- clarifai-11.2.3rc4.dist-info/METADATA,sha256=dcuOr9_2JIzWPcooBh_qUCMUGByy7TqQuBaPi4DINw0,22453
235
- clarifai-11.2.3rc4.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
236
- clarifai-11.2.3rc4.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
237
- clarifai-11.2.3rc4.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
238
- clarifai-11.2.3rc4.dist-info/RECORD,,
233
+ clarifai-11.2.3rc5.dist-info/LICENSE,sha256=mUqF_d12-qE2n41g7C5_sq-BMLOcj6CNN-jevr15YHU,555
234
+ clarifai-11.2.3rc5.dist-info/METADATA,sha256=XLjcksPpc2jWTJiBK1Za4ilNuX_W4zjmzPL3JTIfMMc,22453
235
+ clarifai-11.2.3rc5.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
236
+ clarifai-11.2.3rc5.dist-info/entry_points.txt,sha256=X9FZ4Z-i_r2Ud1RpZ9sNIFYuu_-9fogzCMCRUD9hyX0,51
237
+ clarifai-11.2.3rc5.dist-info/top_level.txt,sha256=wUMdCQGjkxaynZ6nZ9FAnvBUCgp5RJUVFSy2j-KYo0s,9
238
+ clarifai-11.2.3rc5.dist-info/RECORD,,