mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-17 20:52:15 +03:00
135 lines
4.6 KiB
TypeScript
135 lines
4.6 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
import type { ComboBuilderProviderOption } from "../../src/lib/combos/builderOptions.ts";
|
|
import type { MergedEntry } from "../../src/lib/radar/applyFeed.ts";
|
|
import { buildRadarComboSuggestions } from "../../src/lib/radar/comboSuggestions.ts";
|
|
|
|
function entry(
|
|
overrides: Partial<MergedEntry> & Pick<MergedEntry, "provider" | "modelId">
|
|
): MergedEntry {
|
|
return {
|
|
provider: overrides.provider,
|
|
modelId: overrides.modelId,
|
|
displayName: overrides.displayName ?? overrides.modelId,
|
|
monthlyTokens: overrides.monthlyTokens ?? 100,
|
|
creditTokens: 0,
|
|
freeType: "recurring-daily",
|
|
poolKey: null,
|
|
tos: "ok",
|
|
enabled: true,
|
|
origin: "radar",
|
|
familyId: "shared-family",
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
function provider(
|
|
providerId: string,
|
|
modelId: string,
|
|
overrides: Partial<ComboBuilderProviderOption> = {}
|
|
): ComboBuilderProviderOption {
|
|
return {
|
|
providerId,
|
|
providerType: providerId,
|
|
displayName: providerId.toUpperCase(),
|
|
alias: providerId,
|
|
icon: "api",
|
|
color: "#000000",
|
|
source: "system",
|
|
acceptsArbitraryModel: false,
|
|
connectionCount: 1,
|
|
activeConnectionCount: 1,
|
|
modelCount: 1,
|
|
connections: [],
|
|
models: [
|
|
{
|
|
id: modelId,
|
|
qualifiedModel: `${providerId}/${modelId}`,
|
|
name: modelId,
|
|
source: "system",
|
|
sources: ["system"],
|
|
},
|
|
],
|
|
...overrides,
|
|
};
|
|
}
|
|
|
|
test("two active providers in one family create one deterministic priority suggestion", () => {
|
|
const suggestions = buildRadarComboSuggestions({
|
|
entries: [
|
|
entry({ provider: "groq", modelId: "llama", monthlyTokens: 200 }),
|
|
entry({ provider: "cerebras", modelId: "llama", monthlyTokens: 300 }),
|
|
],
|
|
providers: [provider("groq", "llama"), provider("cerebras", "llama")],
|
|
existingComboNames: [],
|
|
});
|
|
|
|
assert.equal(suggestions.length, 1);
|
|
assert.equal(suggestions[0].familyId, "shared-family");
|
|
assert.equal(suggestions[0].name, "radar-shared-family");
|
|
assert.equal(suggestions[0].alreadyExists, false);
|
|
assert.deepEqual(suggestions[0].payload, {
|
|
name: "radar-shared-family",
|
|
strategy: "priority",
|
|
models: [
|
|
{ kind: "model", providerId: "cerebras", model: "cerebras/llama", weight: 0 },
|
|
{ kind: "model", providerId: "groq", model: "groq/llama", weight: 0 },
|
|
],
|
|
});
|
|
});
|
|
|
|
test("ineligible entries fail closed while alias and prefix match exact provider models", () => {
|
|
const suggestions = buildRadarComboSuggestions({
|
|
entries: [
|
|
entry({ provider: "gq", modelId: "llama", monthlyTokens: 500 }),
|
|
entry({ provider: "cb", modelId: "llama", monthlyTokens: 400 }),
|
|
entry({ provider: "inactive", modelId: "llama", monthlyTokens: 900 }),
|
|
entry({ provider: "disabled", modelId: "llama", enabled: false }),
|
|
entry({ provider: "missing-model", modelId: "other" }),
|
|
entry({ provider: "singleton", modelId: "solo", familyId: "solo-family" }),
|
|
],
|
|
providers: [
|
|
provider("groq", "llama", { alias: "gq" }),
|
|
provider("cerebras", "llama", { prefix: "cb" }),
|
|
provider("inactive", "llama", { activeConnectionCount: 0 }),
|
|
provider("disabled", "llama"),
|
|
provider("missing-model", "llama"),
|
|
provider("singleton", "solo"),
|
|
],
|
|
existingComboNames: new Set(["RADAR-SHARED-FAMILY"]),
|
|
});
|
|
|
|
assert.equal(suggestions.length, 1);
|
|
assert.equal(suggestions[0].alreadyExists, true);
|
|
assert.deepEqual(
|
|
suggestions[0].models.map((model) => model.providerId),
|
|
["groq", "cerebras"]
|
|
);
|
|
});
|
|
|
|
test("ambiguous provider aliases, duplicate providers, empty families and unsafe names are closed", () => {
|
|
const longFamily = `Family / ${"x".repeat(120)}`;
|
|
const suggestions = buildRadarComboSuggestions({
|
|
entries: [
|
|
entry({ provider: "ambiguous", modelId: "m", familyId: "ambiguous-family" }),
|
|
entry({ provider: "one", modelId: "m", familyId: longFamily, monthlyTokens: 200 }),
|
|
entry({ provider: "two", modelId: "m", familyId: longFamily, monthlyTokens: 100 }),
|
|
entry({ provider: "one", modelId: "m", familyId: longFamily, monthlyTokens: 50 }),
|
|
entry({ provider: "one", modelId: "blank", familyId: " " }),
|
|
],
|
|
providers: [
|
|
provider("ambiguous-a", "m", { alias: "ambiguous" }),
|
|
provider("ambiguous-b", "m", { alias: "ambiguous" }),
|
|
provider("one", "m"),
|
|
provider("two", "m"),
|
|
],
|
|
existingComboNames: [],
|
|
});
|
|
|
|
assert.equal(suggestions.length, 1);
|
|
assert.ok(suggestions[0].name.length <= 100);
|
|
assert.match(suggestions[0].name, /^[a-zA-Z0-9_/.\-\[\] ]+$/);
|
|
assert.equal(new Set(suggestions[0].models.map((model) => model.providerId)).size, 2);
|
|
});
|