diff --git a/horde_sdk/ai_horde_api/apimodels/generate/_pop.py b/horde_sdk/ai_horde_api/apimodels/generate/_pop.py index 920bd32..fc25c27 100644 --- a/horde_sdk/ai_horde_api/apimodels/generate/_pop.py +++ b/horde_sdk/ai_horde_api/apimodels/generate/_pop.py @@ -132,7 +132,11 @@ def validate_id(cls, v: str | JobID) -> JobID | str: @model_validator(mode="after") def ids_present(self) -> ImageGenerateJobPopResponse: """Ensure that either id_ or ids is present.""" - if self.skipped.is_empty() and self.model is None: + if self.model is None: + if self.skipped.is_empty(): + logger.debug("No model or skipped data found in response.") + else: + logger.debug("No model found in response.") return self if self.id_ is None and len(self.ids) == 0: diff --git a/tests/ai_horde_api/test_ai_horde_api_models.py b/tests/ai_horde_api/test_ai_horde_api_models.py index 2507d3d..8ab985e 100644 --- a/tests/ai_horde_api/test_ai_horde_api_models.py +++ b/tests/ai_horde_api/test_ai_horde_api_models.py @@ -684,3 +684,33 @@ def test_problem_payload() -> None: problem_payload = json.loads(json_from_api) ImageGenerateJobPopResponse.model_validate(problem_payload) + + json_from_api = """ + { + "payload": { + "ddim_steps": 30, + "n_iter": 1, + "sampler_name": "k_euler_a", + "cfg_scale": 7.5, + "height": 512, + "width": 512, + "karras": false, + "tiling": false, + "hires_fix": false, + "image_is_control": false, + "return_control_map": false + }, + "id": null, + "ids": [], + "skipped": {"max_pixels": 1}, + "model": null, + "source_image": null, + "source_processing": "img2img", + "source_mask": null, + "r2_upload": null, + "r2_uploads": null + }""" + + problem_payload = json.loads(json_from_api) + + ImageGenerateJobPopResponse.model_validate(problem_payload)