fix(types): preserve vision capability literal (#9121)

Validated in local merge-train (devbox-vm-06-dev002) @ combined-tip (FAST gates: typecheck/complexity/cognitive/changelog/vitest — only pre-existing audit.test.ts flake). Evidence: /home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/merge-train-20260805-222248-suite.log
This commit is contained in:
backryun
2026-08-06 10:30:56 +09:00
committed by GitHub
parent e6afc135e9
commit 2f3e051aaf
3 changed files with 12 additions and 1 deletions

View File

@@ -0,0 +1 @@
- **fix(types):** preserve the literal `capabilities.vision: true` contract for catalog vision fields so custom-model capability composition remains type-safe under TypeScript 7 ([#9121](https://github.com/diegosouzapw/OmniRoute/pull/9121))

View File

@@ -6,7 +6,11 @@ import { isVisionModelId } from "@/shared/constants/visionModels";
// Re-exported (here and from ./catalog.ts) for callers/tests that imported it from there.
export { isVisionModelId };
export function getVisionCapabilityFields(modelId: string) {
export function getVisionCapabilityFields(modelId: string): {
capabilities: { vision: true };
input_modalities: string[];
output_modalities: string[];
} | null {
if (!isVisionModelId(modelId)) return null;
return {
capabilities: { vision: true },

View File

@@ -141,6 +141,12 @@ test("catalogVision: re-exports isVisionModelId and derives capability fields",
// id-based heuristic
const visionFields = getVisionCapabilityFields("gpt-4o");
assert.ok(visionFields, "gpt-4o must be detected as vision-capable");
const typedVisionFields: {
capabilities: { vision: true };
input_modalities: string[];
output_modalities: string[];
} | null = visionFields;
assert.equal(typedVisionFields?.capabilities.vision, true);
assert.equal(visionFields?.capabilities.vision, true);
assert.equal(getVisionCapabilityFields("kimi-k2"), null);
});