You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Vision describer eligibility ignores operator modelCapabilities on native rows #4501
ocx provider edit … --model <id> --text-only writes modelCapabilities[id].inputModalities = ["text"], and the inbound consumer path (isModelTextOnly) honors it, but the describer-selection path does not: modelAcceptsImageInputWithCache (src/vision/eligibility.ts:159 at eb81eaa) calls isModelVisionSidecarConsumer with an object literal that omits modelCapabilities, then falls through to nativeInputModalities(id) ?? true. A native/OpenAI-catalog model the operator declared blind can still be selected as the vision-sidecar describer while inbound requests to it are correctly diverted.
Reproduction
Declare a native model text-only: ocx provider edit openai --model <native-slug> --text-only
Trigger a request that needs a vision sidecar describer.
Observe the declared-blind native model remains eligible as describer (returns advertisesImageInput(nativeInputModalities(id)) ?? true), contradicting the explicit declaration.
Found by the 2.53.0 release regression audit (lane03, commit d5d03f8). Synthesis disposition: follow-up issue — 2.52.0 had no modelCapabilities overlay and noVisionModels still disqualifies, so this is not a release blocker. Workaround: use noVisionModels.
설명
이 이슈는 운영자가 ocx provider edit … --model <id> --text-only로 modelCapabilities[id].inputModalities = ["text"]를 넣었을 때, 인바운드 소비 경로(isModelTextOnly)는 지키는데 비전 사이드카 설명자(describer) 선정 경로는 무시하는 불일치다. src/vision/eligibility.ts의 modelAcceptsImageInputWithCache는 네이티브/OpenAI 카탈로그 후보에서 isModelVisionSidecarConsumer를 호출할 때 noVisionModels와 modelInputModalities만 넘기고 modelCapabilities를 빼먹는다. 그다음 nativeInputModalities(id) ?? true로 떨어져, 카탈로그상 이미지를 받는 네이티브 모델은 운영자 선언과 달리 설명자로 남는다. 인바운드 요청은 text-only로 우회되는데 설명자 풀에는 남는 모순이다.
HEAD에서도 같은 모양이다. isModelVisionSidecarConsumer 시그니처는 이미 modelCapabilities를 받을 수 있고, 비네이티브 분기에서는 provider.modelCapabilities를 본다. 네이티브 조기 분기만 객체 리터럴에서 필드를 빠뜨린다. 2.52.0에는 modelCapabilities 오버레이가 없었고 noVisionModels로는 여전히 탈락시킬 수 있어 릴리스 블로커는 아니라고 본문에 적혀 있다. 워크어라운드는 noVisionModels에 넣는 것이다.
지금 tip에는 #4500으로 1파티 deepseek-flash가 네이티브 멀티모달로 올라와 있어, “네이티브이면서 운영자가 text-only로 덮는” 조합이 더 자주 생길 수 있다. 그래서 이 한 줄 누락의 표면이 넓어진다. 수정은 enriched provider에서 capabilities를 같이 넘기면 되고, --text-only 회귀 테스트 하나로 잠글 수 있다. types/config 분할과 무관하다.
우선순위 58은 운영자 선언과 런타임 선정이 어긋나는 실제 버그이지만, 기본 설치보다 커스텀 text-only 네이티브 행에서만 드러나고 우회가 명확해서다.
라인 문제 src/vision/eligibility.tsmodelAcceptsImageInputWithCache 네이티브 분기 - isModelVisionSidecarConsumer({ noVisionModels, modelInputModalities })에 modelCapabilities 누락. src/vision/eligibility.tsisModelVisionSidecarConsumer - 시그니처는 capabilities를 받는데 네이티브 호출부가 안 넘김.
심볼 ocx provider edit --text-only / isModelTextOnly - 인바운드는 지키는데 describer eligibility만 무시.
심볼 noVisionModels 워크어라운드 - 동작하지만 capabilities SSOT와 이중 진실이 된다.
메인테이너의 판단이 필요한 지점
네이티브 분기도 비네이티브와 같이 enriched provider 전체를 넘길지, capabilities만 추가할지.
너의 추천
네이티브 분기에서 isModelVisionSidecarConsumer에 modelCapabilities를 포함해 넘기고, --text-only 네이티브가 설명자 후보에서 빠지는 단위 테스트를 추가하는 PR을 열자. 문서에 noVisionModels와 capabilities 중 무엇을 SSOT로 볼지 한 문장 적으면 좋다.
dev now honors operator modelCapabilities inputModalities on native rows in src/vision/eligibility.ts, so text-only native declarations no longer fall through to vision-true.
Activity
lidge-jun commentedon Sep 13, 2026
리뷰 · 우선순위 58 / 80
설명
이 이슈는 운영자가
ocx provider edit … --model <id> --text-only로modelCapabilities[id].inputModalities = ["text"]를 넣었을 때, 인바운드 소비 경로(isModelTextOnly)는 지키는데 비전 사이드카 설명자(describer) 선정 경로는 무시하는 불일치다.src/vision/eligibility.ts의modelAcceptsImageInputWithCache는 네이티브/OpenAI 카탈로그 후보에서isModelVisionSidecarConsumer를 호출할 때noVisionModels와modelInputModalities만 넘기고modelCapabilities를 빼먹는다. 그다음nativeInputModalities(id) ?? true로 떨어져, 카탈로그상 이미지를 받는 네이티브 모델은 운영자 선언과 달리 설명자로 남는다. 인바운드 요청은 text-only로 우회되는데 설명자 풀에는 남는 모순이다.HEAD에서도 같은 모양이다.
isModelVisionSidecarConsumer시그니처는 이미modelCapabilities를 받을 수 있고, 비네이티브 분기에서는provider.modelCapabilities를 본다. 네이티브 조기 분기만 객체 리터럴에서 필드를 빠뜨린다. 2.52.0에는 modelCapabilities 오버레이가 없었고noVisionModels로는 여전히 탈락시킬 수 있어 릴리스 블로커는 아니라고 본문에 적혀 있다. 워크어라운드는noVisionModels에 넣는 것이다.지금 tip에는 #4500으로 1파티
deepseek-flash가 네이티브 멀티모달로 올라와 있어, “네이티브이면서 운영자가 text-only로 덮는” 조합이 더 자주 생길 수 있다. 그래서 이 한 줄 누락의 표면이 넓어진다. 수정은 enriched provider에서 capabilities를 같이 넘기면 되고,--text-only회귀 테스트 하나로 잠글 수 있다. types/config 분할과 무관하다.우선순위 58은 운영자 선언과 런타임 선정이 어긋나는 실제 버그이지만, 기본 설치보다 커스텀 text-only 네이티브 행에서만 드러나고 우회가 명확해서다.
라인 문제
src/vision/eligibility.tsmodelAcceptsImageInputWithCache네이티브 분기 -isModelVisionSidecarConsumer({ noVisionModels, modelInputModalities })에modelCapabilities누락.src/vision/eligibility.tsisModelVisionSidecarConsumer- 시그니처는 capabilities를 받는데 네이티브 호출부가 안 넘김.심볼
ocx provider edit --text-only/isModelTextOnly- 인바운드는 지키는데 describer eligibility만 무시.심볼
noVisionModels워크어라운드 - 동작하지만 capabilities SSOT와 이중 진실이 된다.메인테이너의 판단이 필요한 지점
너의 추천
네이티브 분기에서
isModelVisionSidecarConsumer에modelCapabilities를 포함해 넘기고,--text-only네이티브가 설명자 후보에서 빠지는 단위 테스트를 추가하는 PR을 열자. 문서에noVisionModels와 capabilities 중 무엇을 SSOT로 볼지 한 문장 적으면 좋다.이 댓글은 grok-bot이 작성했습니다
fix(vision): honor modelCapabilities text-only on native rows (#4501) (…
lidge-jun commentedon Sep 13, 2026
Landed via #4511 at 10d61fc
devnow honors operatormodelCapabilitiesinputModalities on native rows insrc/vision/eligibility.ts, so text-only native declarations no longer fall through to vision-true.이 댓글은 grok-bot이 작성했습니다
lidge-jun commentedon Sep 13, 2026
Fixed on
devby #4511 (10d61fc).fix(vision): honor modelCapabilities text-only on native rows (lidge-…