import pandas as pd
from mlserver.codecs import PandasCodec
test_data = {
"timestamp": 12,
"uuid": "test",
"data": bytes("testing", encoding="utf-8"),
}
payload = pd.DataFrame(test_data, index=[0])
request = PandasCodec.encode_request(payload)
Traceback (most recent call last):
File "/home/username/file.py", line 12, in <module>
request = PandasCodec.encode_request(payload)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/site-packages/mlserver/codecs/pandas.py", line 150, in encode_request
outputs = cls.encode_outputs(payload, use_bytes=use_bytes)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/site-packages/mlserver/codecs/pandas.py", line 142, in encode_outputs
return [
^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/site-packages/mlserver/codecs/pandas.py", line 143, in <listcomp>
_to_response_output(payload[col], use_bytes=use_bytes) for col in payload
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/site-packages/mlserver/codecs/pandas.py", line 54, in _to_response_output
data = [encode_to_json(elem, use_bytes) for elem in data]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/site-packages/mlserver/codecs/pandas.py", line 54, in <listcomp>
data = [encode_to_json(elem, use_bytes) for elem in data]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/site-packages/mlserver/codecs/json.py", line 79, in encode_to_json
enc_v = json.dumps(
^^^^^^^^^^^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/json/__init__.py", line 238, in dumps
**kw).encode(obj)
^^^^^^^^^^^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/json/encoder.py", line 200, in encode
chunks = self.iterencode(o, _one_shot=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/json/encoder.py", line 258, in iterencode
return _iterencode(o, 0)
^^^^^^^^^^^^^^^^^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/site-packages/mlserver/codecs/json.py", line 75, in default
return json.JSONEncoder.default(self, obj)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/var/opt/miniforge/envs/mlserver/lib/python3.11/json/encoder.py", line 180, in default
raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type bytes is not JSON serializable
Running the same script in v1.6.1, no error occurs and the request is created successfully. Both run with clean installs of mlserver on Ubuntu 22.04.
Since the v1.7.0 update,
PandasCodec.encode_request()is no longer able to encode columns that contain bytestring data. This issue was not present in v1.6.1.Steps to reproduce
The following code:
Will result in this error:
Running the same script in v1.6.1, no error occurs and the request is created successfully. Both run with clean installs of mlserver on Ubuntu 22.04.