Client or integration
OpenCodex dashboard
Area
Catalog / models
Summary
Devin's GetCascadeModelConfigs response includes ClientModelConfig.supportsImages (protobuf field 5), but OpenCodex does not parse or propagate this field. As a result, ocx models live --provider devin --json and /api/models omit inputModalities even for models that the signed-in account's upstream catalog explicitly marks as image-capable.
In a live catalog read on 2026-09-14, 190 available model variants collapsed to 42 base IDs. All variants of 36 base IDs advertised image support, including kimi-k3, swe-2, deepseek-v4-1-flash, and glm-5-3-flash. Before the local workaround, all 42 OpenCodex rows omitted inputModalities.
Expected: preserve upstream image capability during discovery and expose inputModalities: ["text", "image"] for confirmed image-capable models. Keep false/unknown handling explicit and handle effort variants conservatively. Do not require users to maintain a manual vision allowlist for a capability already supplied by the provider.
Reproduction
- Use OpenCodex 2.52.0 with an authenticated
devin provider and liveModels: true, without a providers.devin.modelInputModalities override.
- Run
ocx models live --provider devin --json and inspect kimi-k3 or swe-2. inputModalities is absent.
- Compare with the same account's
GetCascadeModelConfigs response: field 5 is true for these models, including every available effort variant observed.
- The dropped-field behavior can also be reproduced without credentials or inference, from a checkout with Bun:
bun --eval '
import { parseCatalogBuffer } from "./src/adapters/devin/cloud-direct/catalog.ts";
import { encodeMessage, encodeString, encodeVarintField } from "./src/adapters/devin/cloud-direct/wire.ts";
const row = Buffer.concat([
encodeString(1, "Vision fixture"),
encodeVarintField(5, 1),
encodeVarintField(18, 1048576),
encodeString(22, "kimi-k3"),
]);
const entry = parseCatalogBuffer(encodeMessage(1, row), "unused-fixture", "https://server.codeium.com").byUid.get("kimi-k3");
console.log(JSON.stringify(entry));
console.log("retainsSupportsImages=" + Object.hasOwn(entry, "supportsImages"));
'
The fixture contains supportsImages=true, but the parsed entry loses it. This fixture tests parsing only; the real provider capability values above came from a separate live catalog read.
Version
2.52.0 (@bitkyc08/opencodex). The same missing field was also confirmed in upstream dev at df7dc1be530141c55bd10e70ebe79cb80914d98e.
Operating system
Ubuntu 26.04.1 LTS, Linux x86_64
Provider and model
devin; examples: kimi-k3, swe-2, gemini-3-8-flash, deepseek-v4-1-flash, glm-5-3-flash.
Logs or error output
Before workaround:
Devin base models: 42
Rows with image in inputModalities: 0
Upstream GetCascadeModelConfigs:
Available variants: 190
Base models with supportsImages=true for every variant: 36
Other base models: 6
Examples (upstream -> OpenCodex before workaround):
kimi-k3: true on 3/3 variants -> inputModalities absent
swe-2: true on 3/3 variants -> inputModalities absent
gemini-3-8-flash: true on 3/3 variants -> inputModalities absent
deepseek-v4-1-flash: true on 2/2 variants -> inputModalities absent
glm-5-3-flash: true on 3/3 variants -> inputModalities absent
Screenshots and supporting files
Source trace at the inspected upstream revision:
- catalog.ts:116:
parseCatalogBuffer reads fields 1, 4, 18, and 22, but omits field 5. ModelCatalogEntry has no image capability property.
- live-models.ts:
fetchDevinUsableModels returns model IDs and context windows, with no modality map.
- provider-fetch.ts: the Devin discovery branch consequently has no upstream image metadata to propagate.
Devin's adapter already encodes image parts as ChatMessagePrompt.images (field 10); this report concerns capability discovery, not a missing image transport implementation.
Local workaround verified: add ["text", "image"] overrides for the 36 upstream-confirmed base IDs, then run ocx sync. Afterward the live Devin catalog exposes image input on 36/42 rows, and the generated Codex catalog exposes text,image for the selected Devin models. The six other models were left unchanged. No image inference requests were made, so this is catalog/configuration evidence, not an end-to-end vision benchmark.
Redacted configuration
Minimal provider shape before the workaround:
{
"providers": {
"devin": {
"adapter": "devin",
"authMode": "oauth",
"baseUrl": "https://server.codeium.com",
"liveModels": true,
"defaultModel": "swe-2"
}
}
}
Example of the supported local workaround, applied only to confirmed model IDs:
{
"providers": {
"devin": {
"modelInputModalities": {
"kimi-k3": ["text", "image"],
"swe-2": ["text", "image"]
}
}
}
}
Checks
Client or integration
OpenCodex dashboard
Area
Catalog / models
Summary
Devin's
GetCascadeModelConfigsresponse includesClientModelConfig.supportsImages(protobuf field 5), but OpenCodex does not parse or propagate this field. As a result,ocx models live --provider devin --jsonand/api/modelsomitinputModalitieseven for models that the signed-in account's upstream catalog explicitly marks as image-capable.In a live catalog read on 2026-09-14, 190 available model variants collapsed to 42 base IDs. All variants of 36 base IDs advertised image support, including
kimi-k3,swe-2,deepseek-v4-1-flash, andglm-5-3-flash. Before the local workaround, all 42 OpenCodex rows omittedinputModalities.Expected: preserve upstream image capability during discovery and expose
inputModalities: ["text", "image"]for confirmed image-capable models. Keep false/unknown handling explicit and handle effort variants conservatively. Do not require users to maintain a manual vision allowlist for a capability already supplied by the provider.Reproduction
devinprovider andliveModels: true, without aproviders.devin.modelInputModalitiesoverride.ocx models live --provider devin --jsonand inspectkimi-k3orswe-2.inputModalitiesis absent.GetCascadeModelConfigsresponse: field 5 istruefor these models, including every available effort variant observed.The fixture contains
supportsImages=true, but the parsed entry loses it. This fixture tests parsing only; the real provider capability values above came from a separate live catalog read.Version
2.52.0 (
@bitkyc08/opencodex). The same missing field was also confirmed in upstreamdevatdf7dc1be530141c55bd10e70ebe79cb80914d98e.Operating system
Ubuntu 26.04.1 LTS, Linux x86_64
Provider and model
devin; examples:kimi-k3,swe-2,gemini-3-8-flash,deepseek-v4-1-flash,glm-5-3-flash.Logs or error output
Screenshots and supporting files
Source trace at the inspected upstream revision:
parseCatalogBufferreads fields 1, 4, 18, and 22, but omits field 5.ModelCatalogEntryhas no image capability property.fetchDevinUsableModelsreturns model IDs and context windows, with no modality map.Devin's adapter already encodes image parts as
ChatMessagePrompt.images(field 10); this report concerns capability discovery, not a missing image transport implementation.Local workaround verified: add
["text", "image"]overrides for the 36 upstream-confirmed base IDs, then runocx sync. Afterward the live Devin catalog exposes image input on 36/42 rows, and the generated Codex catalog exposestext,imagefor the selected Devin models. The six other models were left unchanged. No image inference requests were made, so this is catalog/configuration evidence, not an end-to-end vision benchmark.Redacted configuration
Minimal provider shape before the workaround:
{ "providers": { "devin": { "adapter": "devin", "authMode": "oauth", "baseUrl": "https://server.codeium.com", "liveModels": true, "defaultModel": "swe-2" } } }Example of the supported local workaround, applied only to confirmed model IDs:
{ "providers": { "devin": { "modelInputModalities": { "kimi-k3": ["text", "image"], "swe-2": ["text", "image"] } } } }Checks