From 8ad3f64cde6355f0fc67527e8ce7b49ea5bb6f05 Mon Sep 17 00:00:00 2001 From: "Han-Ru Chen (Future-Outlier)" Date: Thu, 21 Nov 2024 08:22:51 +0800 Subject: [PATCH] Update docs/user_guide/data_types_and_io/dataclass.md Co-authored-by: David Espejo <82604841+davidmirror-ops@users.noreply.github.com> Signed-off-by: Han-Ru Chen (Future-Outlier) --- docs/user_guide/data_types_and_io/dataclass.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/user_guide/data_types_and_io/dataclass.md b/docs/user_guide/data_types_and_io/dataclass.md index 6ce281450e..c984c7a909 100644 --- a/docs/user_guide/data_types_and_io/dataclass.md +++ b/docs/user_guide/data_types_and_io/dataclass.md @@ -9,7 +9,11 @@ When you've multiple values that you want to send across Flyte entities, you can use a `dataclass`. Flytekit uses the [Mashumaro library](https://github.com/Fatal1ty/mashumaro) -to serialize and deserialize dataclasses. +to serialize and deserialize dataclasses. With the 1.14 release, `flytekit` adopted `MessagePack` as the serialization format for dataclasses, overcoming a major limitation of serialization into a JSON string within a Protobuf `struct` datatype, like the previous versions do: to store `int` types, Protobuf's `struct` converts them to `float`, forcing users to write boilerplate code to workaround this issue. By default, `flytekit >= 1.14` will produce `msgpack` bytes literals when serializing dataclasses. + +:::{important} + +If you're serializing dataclasses using `flytekit` version >= v1.14.0 and you want to produce Protobuf `struct literal` instead, you can set environment variable `FLYTE_USE_OLD_DC_FORMAT` to `true`. :::{important} If you're using Flytekit version < v1.11.1, you will need to add `from dataclasses_json import dataclass_json` to your imports and decorate your dataclass with `@dataclass_json`.