Support OpenClaw image responses
This commit is contained in:
1 parent
b48fcc63d3
commit
eb799107e3
2 files changed
+20
-1
No files matched your search
@@ -94,6 +94,12 @@ curl -fsS http://192.168.1.212:8081/v1/images/generations \
|
|||||||
}'
|
}'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Ohne `response_format` enthält die Antwort sowohl die abrufbare `url` als
|
||||||
|
auch `b64_json`. Das hält URL-basierte Clients kompatibel und unterstützt
|
||||||
|
OpenClaw, dessen OpenAI-Bildprovider Inline-Bilddaten erwartet. Mit explizitem
|
||||||
|
`response_format: "url"` oder `"b64_json"` liefert der Router weiterhin nur
|
||||||
|
das angeforderte Format.
|
||||||
|
|
||||||
Danach müssen folgende Zustände wiederhergestellt sein:
|
Danach müssen folgende Zustände wiederhergestellt sein:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -126,6 +132,14 @@ erhalten. Er gehört nicht in die Desktop-App und muss auf weiteren Clients
|
|||||||
nicht erneut installiert werden. Die versionierte Quellfassung liegt unter
|
nicht erneut installiert werden. Die versionierte Quellfassung liegt unter
|
||||||
[`integrations/hermes-athena-image`](../integrations/hermes-athena-image).
|
[`integrations/hermes-athena-image`](../integrations/hermes-athena-image).
|
||||||
|
|
||||||
|
## OpenClaw
|
||||||
|
|
||||||
|
OpenClaw verwendet den offiziellen `image_generate`-Provider mit
|
||||||
|
`openai/FLUX.2-klein-9B-fp8-beta`. Der OpenAI-kompatible Bildparser von
|
||||||
|
OpenClaw sendet kein `response_format`, benötigt in der Antwort aber
|
||||||
|
`data[].b64_json`. Deshalb liefert der Router im Standardfall zusätzlich zur
|
||||||
|
URL auch die Inline-Bilddaten. Hermes bleibt davon unberührt.
|
||||||
|
|
||||||
## Rollback
|
## Rollback
|
||||||
|
|
||||||
Die lokalen 4B-Gewichte und die kurzfristigen Rückfall-Images wurden am
|
Die lokalen 4B-Gewichte und die kurzfristigen Rückfall-Images wurden am
|
||||||
|
|||||||
@@ -2355,6 +2355,7 @@ class Handler(BaseHTTPRequestHandler):
|
|||||||
"invalid_request_error", "invalid_seed")
|
"invalid_request_error", "invalid_seed")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
response_format_explicit = "response_format" in data
|
||||||
response_format = data.get("response_format", "url")
|
response_format = data.get("response_format", "url")
|
||||||
if response_format not in ("url", "b64_json"):
|
if response_format not in ("url", "b64_json"):
|
||||||
self._send_error(400, "'response_format' muss 'url' oder 'b64_json' sein",
|
self._send_error(400, "'response_format' muss 'url' oder 'b64_json' sein",
|
||||||
@@ -2379,9 +2380,13 @@ class Handler(BaseHTTPRequestHandler):
|
|||||||
for filename in results:
|
for filename in results:
|
||||||
path = os.path.join(IMAGE_DIR, filename)
|
path = os.path.join(IMAGE_DIR, filename)
|
||||||
item: dict = {"url": f"{host}/images/{filename}", "b64_json": None}
|
item: dict = {"url": f"{host}/images/{filename}", "b64_json": None}
|
||||||
if response_format == "b64_json":
|
# OpenClaw's OpenAI-compatible image parser requires b64_json but
|
||||||
|
# does not send response_format. Keep the URL for existing clients
|
||||||
|
# and add inline image data only when the format was omitted.
|
||||||
|
if response_format == "b64_json" or not response_format_explicit:
|
||||||
with open(path, "rb") as f:
|
with open(path, "rb") as f:
|
||||||
item["b64_json"] = base64.b64encode(f.read()).decode()
|
item["b64_json"] = base64.b64encode(f.read()).decode()
|
||||||
|
if response_format == "b64_json":
|
||||||
item["url"] = None
|
item["url"] = None
|
||||||
items.append(item)
|
items.append(item)
|
||||||
payload: dict = {"created": int(time.time()), "data": items}
|
payload: dict = {"created": int(time.time()), "data": items}
|
||||||
|
|||||||
Reference in new issue
Block a user