From 192d2af19d018b44817a9765254d99a90b264da2 Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Sat, 23 May 2026 15:16:28 +0800 Subject: [PATCH] fix(zhipu): raise error on reference images and ensure client cleanup in finally --- nanobot/providers/image_generation.py | 40 ++++++++++++++++++++------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/nanobot/providers/image_generation.py b/nanobot/providers/image_generation.py index 837d46da0..0fa604936 100644 --- a/nanobot/providers/image_generation.py +++ b/nanobot/providers/image_generation.py @@ -1489,11 +1489,8 @@ class ZhipuImageGenerationClient(ImageGenerationProvider): raise ImageGenerationError(self.missing_key_message) if reference_images: - logger.warning( - "Zhipu image generation does not support reference images; " - "ignoring {} reference image(s) for {}", - len(reference_images), - model, + raise ImageGenerationError( + "Zhipu image generation does not support reference images" ) headers = { @@ -1517,7 +1514,33 @@ class ZhipuImageGenerationClient(ImageGenerationProvider): url = f"{self.api_base}/images/generations" client = self._client or httpx.AsyncClient(timeout=self.timeout) - owns_client = self._client is None + try: + return await self._generate_with_client( + client, + prompt=prompt, + model=model, + aspect_ratio=aspect_ratio, + image_size=image_size, + headers=headers, + body=body, + url=url, + ) + finally: + if self._client is None: + await client.aclose() + + async def _generate_with_client( + self, + client: httpx.AsyncClient, + *, + prompt: str, + model: str, + aspect_ratio: str | None, + image_size: str | None, + headers: dict[str, str], + body: dict[str, Any], + url: str, + ) -> GeneratedImageResponse: try: response = await self._http_post(url, headers=headers, body=body, client=client) except httpx.TimeoutException as exc: @@ -1536,10 +1559,7 @@ class ZhipuImageGenerationClient(ImageGenerationProvider): self._require_images(images, payload) - result = GeneratedImageResponse(images=images, content="", raw=payload) - if owns_client: - await client.aclose() - return result + return GeneratedImageResponse(images=images, content="", raw=payload) def _zhipu_size(