Files
OmniRoute/tests/unit/model-capability-overrides.test.ts
Xiangzhe 0ad07b4d91 feat(models): add capability override UI (#6727)
* feat(models): add capability override UI

Reconstructed onto release/v3.8.47 to drop unrelated main-drift (deps/electron/proxy
files belong to #6620, not this PR); renumbered the migration 118 -> 119 to resolve the
collision with 118_provider_param_filters.sql already on release/v3.8.47; the author's
i18n/localDb deltas were re-applied cleanly onto the release tip.

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

* fix(6727): import model-capability-overrides DB fns directly (not via localDb barrel) to keep localDb under file-size cap; aligns with anti-barrel convention

* chore(db): satisfy known-symbols contract for modelCapabilityOverrides

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>

---------

Co-authored-by: diegosouzapw <8016841+diegosouzapw@users.noreply.github.com>
Co-authored-by: Diego Rodrigues de Sa e Souza <diegosouza.pw@gmail.com>
2026-07-10 18:47:33 -03:00

84 lines
2.9 KiB
TypeScript

import { describe, it, beforeEach, after } from "node:test";
import assert from "node:assert/strict";
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
const moduleDataDir = fs.mkdtempSync(path.join(os.tmpdir(), "omni-model-capability-overrides-"));
process.env.DATA_DIR = moduleDataDir;
const coreDb = await import("../../src/lib/db/core.ts");
const caps = await import("../../src/lib/modelCapabilities.ts");
const overrides = await import("../../src/lib/db/modelCapabilityOverrides.ts");
beforeEach(() => {
coreDb.resetDbInstance();
fs.rmSync(moduleDataDir, { recursive: true, force: true });
fs.mkdirSync(moduleDataDir, { recursive: true });
coreDb.getDbInstance();
});
after(() => {
coreDb.resetDbInstance();
fs.rmSync(moduleDataDir, { recursive: true, force: true });
});
describe("model capability overrides", () => {
it("stores, lists, removes, and applies a provider/model max_token override", () => {
const withoutOverride = caps.getResolvedModelCapabilities({
provider: "openai",
model: "gpt-4o",
}).maxOutputTokens;
const distinct = (withoutOverride ?? 0) + 12345;
assert.equal(
overrides.setModelCapabilityOverride("openai/gpt-4o", "max_token", distinct),
true
);
assert.deepEqual(
overrides.listModelCapabilityOverrides().map((entry) => ({
target: entry.target,
key: entry.key,
value: entry.value,
})),
[{ target: "openai/gpt-4o", key: "max_token", value: distinct }]
);
assert.equal(
caps.getResolvedModelCapabilities({ provider: "openai", model: "gpt-4o" }).maxOutputTokens,
distinct
);
assert.notEqual(
caps.getResolvedModelCapabilities({ provider: "anthropic", model: "gpt-4o" }).maxOutputTokens,
distinct,
"override must be scoped by provider/model, not bare model id"
);
assert.equal(overrides.removeModelCapabilityOverride("openai/gpt-4o", "max_token"), true);
assert.equal(
caps.getResolvedModelCapabilities({ provider: "openai", model: "gpt-4o" }).maxOutputTokens,
withoutOverride
);
});
it("applies overrides stored under provider-scoped model aliases", () => {
assert.equal(
overrides.setModelCapabilityOverride("github/claude-opus-4.5", "max_token", 77777),
true
);
assert.equal(
caps.getResolvedModelCapabilities({ provider: "github", model: "claude-opus-4.5" })
.maxOutputTokens,
77777
);
});
it("rejects invalid targets and non-positive values", () => {
assert.equal(overrides.setModelCapabilityOverride("gpt-4o", "max_token", 1000), false);
assert.equal(overrides.setModelCapabilityOverride("openai/gpt-4o", "max_token", 0), false);
assert.equal(overrides.setModelCapabilityOverride("openai/gpt-4o", "max_token", 1.5), false);
assert.deepEqual(overrides.listModelCapabilityOverrides(), []);
});
});