mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-21 14:22:14 +03:00
fix(guardrails): pass providerId to getResolvedModelCapabilities in checkComboVision (#12112) (#12169)
* fix(guardrails): pass providerId to getResolvedModelCapabilities in checkComboVision (#12112) Signed-off-by: Minxi Hou <houminxi@gmail.com> * chore(quality): register combo-vision providerId test in the stryker tap set --------- Signed-off-by: Minxi Hou <houminxi@gmail.com> Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
This commit is contained in:
69
tests/unit/guardrails/combo-vision-provider-id-12112.test.ts
Normal file
69
tests/unit/guardrails/combo-vision-provider-id-12112.test.ts
Normal file
@@ -0,0 +1,69 @@
|
||||
import test from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
|
||||
process.env.DATA_DIR = `/tmp/omniroute-test-12112-${Date.now()}`;
|
||||
|
||||
const { getComboVisionBridgeDecision } = await import(
|
||||
"../../../src/lib/guardrails/visionBridge.ts"
|
||||
);
|
||||
const combosDb = await import("../../../src/lib/db/combos.ts");
|
||||
const core = await import("../../../src/lib/db/core.ts");
|
||||
const { isVisionIncompatibleTarget } = await import(
|
||||
"../../../open-sse/services/combo/comboStructure.ts"
|
||||
);
|
||||
import type { ResolvedComboTarget } from "../../../open-sse/services/combo/types.ts";
|
||||
|
||||
test.after(() => {
|
||||
core.resetDbInstance();
|
||||
});
|
||||
|
||||
test("#12112: checkComboVision respects providerId for namespaced vision models (e.g. nvidia/nemotron-nano-12b-v2-vl)", async () => {
|
||||
// Model 'nvidia/nemotron-nano-12b-v2-vl' is declared with supportsVision: true in nvidia provider registry.
|
||||
// It has a slash in model id and requires providerId="nvidia" to resolve capabilities.
|
||||
await combosDb.createCombo({
|
||||
name: "nvidia-vision-combo-12112",
|
||||
models: [
|
||||
{
|
||||
providerId: "nvidia",
|
||||
model: "nvidia/nemotron-nano-12b-v2-vl",
|
||||
weight: 1,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
const decision = await getComboVisionBridgeDecision("nvidia-vision-combo-12112");
|
||||
assert.equal(
|
||||
decision,
|
||||
"skip",
|
||||
"Combo with explicit nvidia vision model must resolve as 'skip' (vision supported), not 'no-vision'"
|
||||
);
|
||||
});
|
||||
|
||||
test("#12112: isVisionIncompatibleTarget passes providerId to resolve vision capability", () => {
|
||||
const target: ResolvedComboTarget = {
|
||||
kind: "model",
|
||||
stepId: "step-1",
|
||||
executionKey: "step-1",
|
||||
modelStr: "nvidia/nemotron-nano-12b-v2-vl",
|
||||
provider: "nvidia",
|
||||
providerId: "nvidia",
|
||||
connectionId: "conn-1",
|
||||
weight: 1,
|
||||
label: null,
|
||||
};
|
||||
|
||||
const incompatible = isVisionIncompatibleTarget(target, {
|
||||
requiresTools: false,
|
||||
requiresVision: true,
|
||||
requiresStructuredOutput: false,
|
||||
estimatedInputTokens: 10,
|
||||
requestedOutputTokens: 10,
|
||||
requiredContextTokens: 10,
|
||||
});
|
||||
|
||||
assert.equal(
|
||||
incompatible,
|
||||
false,
|
||||
"Target with providerId='nvidia' and model='nvidia/nemotron-nano-12b-v2-vl' must be vision-compatible"
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user