mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-31 12:22:14 +03:00
* fix(api): allow text-to-image on dual-modality models + revive HuggingFace image host
Two image-generation regressions surfaced while testing /v1/images/generations:
1. Dual-modality models (inputModalities ["text","image"]) were rejected with
"Image input is required" because the gate treated any "image" modality as
mandatory. That blocked pure text-to-image on 41 models (Together x10,
Stability x10, LMArena x15, NVIDIA x3, BFL x2, NanoGPT x1). Only edit-only
models (modalities ["image"] with no "text") should require an image input;
extract modalitiesRequireImageInput() and gate on that.
2. The HuggingFace image provider pointed at api-inference.huggingface.co, which
HF retired (DNS-dead -> "fetch failed" 502). Route through
router.huggingface.co/hf-inference/models, matching the chat provider which
already migrated.
Regression guard: tests/unit/image-text-to-image-modality.test.ts (fails on base
-- the helper did not exist and the baseUrl was the retired host).
* fix(api): keep Stability edit/control/upscale endpoints image-required
modalitiesRequireImageInput() correctly stopped gating dual-modality
(text+image) generation models on an image input, fixing pure
text-to-image for 41 models. But 10 of those dual-modality entries are
Stability AI's dedicated /v2beta/stable-image/{edit,control,upscale}/*
endpoints (inpaint, outpaint, search-and-replace, search-and-recolor,
replace-background-and-relight, creative, sketch, structure, style,
style-transfer) — they accept a text prompt too, but mechanically
require an input image upstream. The blanket modality-based inference
silently dropped OmniRoute's client-side gate for exactly those 10,
trading a clean 400 for a confusing upstream Stability error.
Add an explicit `imageRequired` override on the registry entry, decided
by the model's actual endpoint rather than inferred from its listed
modalities, and combine it with modalitiesRequireImageInput() at the
route gate: `imageModelEntry?.imageRequired || modalitiesRequireImageInput(...)`.
Extracted the Stability AI model list into
providers/registry/stability-ai/imageModels.ts (mirroring the existing
kie/segmind pattern) — imageRegistry.ts sits right at the 800-line
file-size cap and the extra flags would have pushed it over.
Extended tests/unit/image-text-to-image-modality.test.ts: the previous
"no dual-modality model is gated as image-required" assertion was
exactly the bug (it would have passed even with the regression); new
assertions cover the 10 Stability edit/control/upscale models by id
(still require an image) alongside the true dual-modality generation
models (BFL Kontext, NVIDIA, NanoGPT — still accept text-only).
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
---------
Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>