mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-07-31 12:22:14 +03:00
* 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>
84 lines
2.9 KiB
TypeScript
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(), []);
|
|
});
|
|
});
|