Found while closing #193, and confirmed live against Bedrock in us-east-1.
cohere.embed-english-v3 and cohere.embed-multilingual-v3 embed an image: a 64x64 PNG returns a 1024-dimension vector and image metadata, and reports no input-token count — which is exactly why #193 records input_images for them. The gateway accepts the request because stdapi/routes/cohere_embed.py:96 calls validate_model(request.model, "EMBEDDING") with no input_modality, so the declaration never gates it.
But docs/models/catalog.json publishes both models as ["TEXT"], because that is what AWS's inputModalities declares. So /v1/models, /search_models and the public Models page all say a path does not exist that the gateway serves and bills for.
#193 resolved the immediate contradiction in documentation — a note under the Cohere model table naming the gap, the filter behaviour and the billing consequence — because a catalogue override would have fixed the docs page while /search_models, which that page tells clients to use, kept answering TEXT-only.
The real fix is one place: an _advertised_input_modalities twin of the existing _advertised_output_modalities in stdapi/models/__init__.py, so the model layer corrects AWS's declaration once and every surface agrees.
Ref: stdapi/models/__init__.py (_advertised_output_modalities), stdapi/models/embedding/cohere_embed.py:245-252, .claude/skills/stdapi-model-catalog
Found while closing #193, and confirmed live against Bedrock in
us-east-1.cohere.embed-english-v3andcohere.embed-multilingual-v3embed an image: a 64x64 PNG returns a 1024-dimension vector and image metadata, and reports no input-token count — which is exactly why #193 recordsinput_imagesfor them. The gateway accepts the request becausestdapi/routes/cohere_embed.py:96callsvalidate_model(request.model, "EMBEDDING")with noinput_modality, so the declaration never gates it.But
docs/models/catalog.jsonpublishes both models as["TEXT"], because that is what AWS'sinputModalitiesdeclares. So/v1/models,/search_modelsand the public Models page all say a path does not exist that the gateway serves and bills for.#193 resolved the immediate contradiction in documentation — a note under the Cohere model table naming the gap, the filter behaviour and the billing consequence — because a catalogue override would have fixed the docs page while
/search_models, which that page tells clients to use, kept answering TEXT-only.The real fix is one place: an
_advertised_input_modalitiestwin of the existing_advertised_output_modalitiesinstdapi/models/__init__.py, so the model layer corrects AWS's declaration once and every surface agrees.Ref:
stdapi/models/__init__.py(_advertised_output_modalities),stdapi/models/embedding/cohere_embed.py:245-252,.claude/skills/stdapi-model-catalog