From 1aec6cd4ac349f2f651f0789a854479cf25c0b5d Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Mon, 21 Sep 2026 11:38:28 +0200 Subject: [PATCH] Normalize OpenAI image form fields --- dev/test_router_support.py | 7 +++++++ router/ai_profile_router.py | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/dev/test_router_support.py b/dev/test_router_support.py index c7e8be2..8613174 100644 --- a/dev/test_router_support.py +++ b/dev/test_router_support.py @@ -156,6 +156,11 @@ class ImageEditMultipartTests(unittest.TestCase): 'Content-Disposition: form-data; name="prompt"\r\n\r\n' "Nur die Farbe ändern\r\n" ).encode(), + ( + f"--{boundary}\r\n" + 'Content-Disposition: form-data; name="n"\r\n\r\n' + "1\r\n" + ).encode(), ( f"--{boundary}\r\n" 'Content-Disposition: form-data; name="image[]"; filename="a.png"\r\n' @@ -174,6 +179,8 @@ class ImageEditMultipartTests(unittest.TestCase): self.assertEqual(fields["model"], "Qwen-Image-2.1-int8") self.assertEqual(fields["prompt"], "Nur die Farbe ändern") + normalized = handler._normalize_image_multipart_fields(fields) + self.assertEqual(normalized["n"], 1) self.assertEqual( files, [("image[]", "a.png", b"PNG-A"), diff --git a/router/ai_profile_router.py b/router/ai_profile_router.py index c3692d9..5e3285b 100755 --- a/router/ai_profile_router.py +++ b/router/ai_profile_router.py @@ -2229,6 +2229,7 @@ class Handler(BaseHTTPRequestHandler): try: body = self._read_body() files, data = self._parse_multipart_parts(body, content_type) + data = self._normalize_image_multipart_fields(data) except ValueError as exc: self._send_error(400, str(exc), "invalid_request_error", "invalid_multipart") @@ -2733,6 +2734,19 @@ class Handler(BaseHTTPRequestHandler): return files, fields + @staticmethod + def _normalize_image_multipart_fields(fields: dict[str, str]) -> dict: + """Konvertiert OpenAI-Formularzahlen in die JSON-API-Typen.""" + normalized: dict = dict(fields) + for key in ("n", "steps"): + if key not in normalized: + continue + try: + normalized[key] = int(normalized[key]) + except (TypeError, ValueError) as exc: + raise ValueError(f"'{key}' muss eine Ganzzahl sein") from exc + return normalized + def _parse_multipart(self, data: bytes, content_type: str ) -> tuple[bytes, str, dict]: """Kompatibler Einzeldatei-Wrapper für den STT-Pfad."""