Normalize OpenAI image form fields
This commit is contained in:
@@ -156,6 +156,11 @@ class ImageEditMultipartTests(unittest.TestCase):
|
|||||||
'Content-Disposition: form-data; name="prompt"\r\n\r\n'
|
'Content-Disposition: form-data; name="prompt"\r\n\r\n'
|
||||||
"Nur die Farbe ändern\r\n"
|
"Nur die Farbe ändern\r\n"
|
||||||
).encode(),
|
).encode(),
|
||||||
|
(
|
||||||
|
f"--{boundary}\r\n"
|
||||||
|
'Content-Disposition: form-data; name="n"\r\n\r\n'
|
||||||
|
"1\r\n"
|
||||||
|
).encode(),
|
||||||
(
|
(
|
||||||
f"--{boundary}\r\n"
|
f"--{boundary}\r\n"
|
||||||
'Content-Disposition: form-data; name="image[]"; filename="a.png"\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["model"], "Qwen-Image-2.1-int8")
|
||||||
self.assertEqual(fields["prompt"], "Nur die Farbe ändern")
|
self.assertEqual(fields["prompt"], "Nur die Farbe ändern")
|
||||||
|
normalized = handler._normalize_image_multipart_fields(fields)
|
||||||
|
self.assertEqual(normalized["n"], 1)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
files,
|
files,
|
||||||
[("image[]", "a.png", b"PNG-A"),
|
[("image[]", "a.png", b"PNG-A"),
|
||||||
|
|||||||
@@ -2229,6 +2229,7 @@ class Handler(BaseHTTPRequestHandler):
|
|||||||
try:
|
try:
|
||||||
body = self._read_body()
|
body = self._read_body()
|
||||||
files, data = self._parse_multipart_parts(body, content_type)
|
files, data = self._parse_multipart_parts(body, content_type)
|
||||||
|
data = self._normalize_image_multipart_fields(data)
|
||||||
except ValueError as exc:
|
except ValueError as exc:
|
||||||
self._send_error(400, str(exc),
|
self._send_error(400, str(exc),
|
||||||
"invalid_request_error", "invalid_multipart")
|
"invalid_request_error", "invalid_multipart")
|
||||||
@@ -2733,6 +2734,19 @@ class Handler(BaseHTTPRequestHandler):
|
|||||||
|
|
||||||
return files, fields
|
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
|
def _parse_multipart(self, data: bytes, content_type: str
|
||||||
) -> tuple[bytes, str, dict]:
|
) -> tuple[bytes, str, dict]:
|
||||||
"""Kompatibler Einzeldatei-Wrapper für den STT-Pfad."""
|
"""Kompatibler Einzeldatei-Wrapper für den STT-Pfad."""
|
||||||
|
|||||||
Reference in New Issue
Block a user