From e20df38ec3a9bdc3c2e5f0dfb2ee07c61645f9d7 Mon Sep 17 00:00:00 2001 From: sudoskys Date: Fri, 13 Jun 2025 09:38:15 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=97=91=EF=B8=8F=20**refactor**(generate?= =?UTF-8?q?=5Fimage):=20remove=20redundant=20model=5Fdump=20override=20in?= =?UTF-8?q?=20init.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🔧 **fix**(generate_image): remove unnecessary f-string format in exception message 🔄 **refactor**(params): ensure ordered serialization of fields using OrderedDict --- .../sdk/ai/generate_image/__init__.py | 10 -------- .../sdk/ai/generate_image/params.py | 24 ++++++++++++++----- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/novelai_python/sdk/ai/generate_image/__init__.py b/src/novelai_python/sdk/ai/generate_image/__init__.py index 51255e7..b9a18d7 100755 --- a/src/novelai_python/sdk/ai/generate_image/__init__.py +++ b/src/novelai_python/sdk/ai/generate_image/__init__.py @@ -65,16 +65,6 @@ def set_mutual_exclusion(self, value: bool): action: Union[str, Action] = Field(Action.GENERATE, description="Mode for img generate") parameters: Union[Params] model_config = ConfigDict(extra="ignore") - - # forced params integration - def model_dump(self, *args, **kwargs): - """ - Overrides model_dump for own features - """ - data = super().model_dump(*args, **kwargs) - data["parameters"] = self.parameters.model_dump(*args, **kwargs) - - return data @override def model_post_init(self, *args) -> None: diff --git a/src/novelai_python/sdk/ai/generate_image/params.py b/src/novelai_python/sdk/ai/generate_image/params.py index 9103960..a5e1a5f 100644 --- a/src/novelai_python/sdk/ai/generate_image/params.py +++ b/src/novelai_python/sdk/ai/generate_image/params.py @@ -1,13 +1,14 @@ import base64 import random from io import BytesIO +from collections import OrderedDict from typing import Optional, List, Set, Union, Tuple import cv2 import numpy as np from PIL import Image from loguru import logger -from pydantic import BaseModel, Field, model_validator, field_validator, model_serializer +from pydantic import BaseModel, Field, model_serializer, model_validator, field_validator from novelai_python.sdk.ai._enum import Sampler, UCPresetTypeAlias, NoiseSchedule, ImageBytesTypeAlias, ControlNetModel, \ Model @@ -128,11 +129,22 @@ def _serialize(self, handler): Custom serializer to force include specific fields even when they are None """ data = handler(self) - # Just add None values for strong fields - for field in self.__strong_values__: - if field not in data: - data[field] = getattr(self, field, None) - return data + + # Force include strong fields and ensure proper ordering + # Create ordered dict following JavaScript field order + ordered_fields = list(self.__class__.model_fields.keys()) + ordered_data = OrderedDict() + + for field_name in ordered_fields: + if field_name in data: + # Field exists in data, include it + ordered_data[field_name] = data[field_name] + elif field_name in self.__strong_values__: + # Since we iterate from `self.__class__.model_fields`,、 + # the field is guaranteed to exist. The previous safety check was redundant. + ordered_data[field_name] = getattr(self, field_name, None) + + return ordered_data # endregion @model_validator(mode="after")