src/huggingface_inference_toolkit/serialization/json_utils.py (18 lines of code) (raw):
import base64
from io import BytesIO
import orjson
from PIL import Image
def default(obj):
if isinstance(obj, Image.Image):
with BytesIO() as out:
obj.save(out, format="PNG")
png_string = out.getvalue()
return base64.b64encode(png_string).decode("utf-8")
raise TypeError
class Jsoner:
@staticmethod
def deserialize(body):
return orjson.loads(body)
@staticmethod
def serialize(body, accept=None):
return orjson.dumps(body, option=orjson.OPT_SERIALIZE_NUMPY, default=default)
# class _JSONEncoder(json.JSONEncoder):
# """
# custom `JSONEncoder` to make sure float and int64 ar converted
# """
# def default(self, obj):
# if isinstance(obj, np.integer):
# return int(obj)
# elif isinstance(obj, np.floating):
# return float(obj)
# elif isinstance(obj, np.ndarray):
# return obj.tolist()
# elif isinstance(obj, datetime.datetime):
# return obj.__str__()
# elif isinstance(obj, Image.Image):
# with BytesIO() as out:
# obj.save(out, format="PNG")
# png_string = out.getvalue()
# return base64.b64encode(png_string).decode("utf-8")
# else:
# return super(_JSONEncoder, self).default(obj)