From 3ad797b37fb5f3161a4e13dc86ce712f15c52346 Mon Sep 17 00:00:00 2001 From: teahubxyz Date: Wed, 21 Oct 2026 01:36:27 +0000 Subject: [PATCH] inference: when Runware fails and Venice renders instead, say why in x-fallback Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01K6897PWcUEwHiqZMcVnNF6 --- .github/time/cloudflare/inference.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/time/cloudflare/inference.js b/.github/time/cloudflare/inference.js index 80d68bc..19e33df 100644 --- a/.github/time/cloudflare/inference.js +++ b/.github/time/cloudflare/inference.js @@ -130,7 +130,8 @@ async function render(body, env, h) { let out, err; if (env.RUNWARE_API_KEY) { try { out = await renderRunware(body, env); } catch (e) { err = e; } } if (!out) { try { out = await renderVenice(body, env); } catch (e) { return json({ error: (err ? err.message + "; then " : "") + e.message }, e.status || 502, h); } } - const headers = { "content-type": out.type, "x-renderer": out.renderer, "access-control-expose-headers": "x-seed, x-cost, x-renderer", ...h }; + const headers = { "content-type": out.type, "x-renderer": out.renderer, "access-control-expose-headers": "x-seed, x-cost, x-renderer, x-fallback", ...h }; + if (err) headers["x-fallback"] = String(err.message).replace(/[^\x20-\x7e]/g, "?").slice(0, 160); if (out.seed != null) headers["x-seed"] = String(out.seed); if (out.cost != null) headers["x-cost"] = String(out.cost); return new Response(out.body, { status: 200, headers });