Spaces:
Sleeping
Sleeping
| # Copyright (c) Meta Platforms, Inc. and affiliates. | |
| # All rights reserved. | |
| # | |
| # This source code is licensed under the BSD-style license found in the | |
| # LICENSE file in the root directory of this source tree. | |
| """ | |
| Data models for the Lottie Env Environment. | |
| """ | |
| import base64 | |
| import io | |
| from typing import Annotated | |
| from openenv.core.env_server.types import Action, Observation | |
| from pydantic import BeforeValidator, Field, PlainSerializer | |
| from PIL import Image | |
| def _to_image(v): | |
| if isinstance(v, Image.Image): | |
| return v | |
| if isinstance(v, bytes): | |
| if not v: | |
| return None | |
| return Image.open(io.BytesIO(v)).copy() | |
| return v | |
| def _image_to_b64(img): | |
| if img is None: | |
| return "" | |
| buf = io.BytesIO() | |
| img.save(buf, format="PNG") | |
| return base64.b64encode(buf.getvalue()).decode() | |
| PngImage = Annotated[ | |
| Image.Image | None, | |
| BeforeValidator(_to_image), | |
| PlainSerializer(_image_to_b64, return_type=str), | |
| ] | |
| class LottieAction(Action): | |
| """Action for the Lottie Env environment.""" | |
| lottie_json: str = Field(default="", description="lottie json") | |
| class LottieObservation(Observation): | |
| """Observation from the Lottie Env environment - PIL Image frames serialized as base64.""" | |
| start_frame: PngImage = Field(default=None, description="Start frame") | |
| middle_frame: PngImage = Field(default=None, description="Middle frame") | |
| end_frame: PngImage = Field(default=None, description="End frame") | |
| submitted_start_frame: PngImage = Field( | |
| default=None, description="Submitted start frame" | |
| ) | |
| submitted_middle_frame: PngImage = Field( | |
| default=None, description="Submitted middle frame" | |
| ) | |
| submitted_end_frame: PngImage = Field( | |
| default=None, description="Submitted end frame" | |
| ) | |