mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-13 10:43:43 +03:00
78 lines
2.1 KiB
TypeScript
78 lines
2.1 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
|
|
const { filterChatSelectableModels, getModelEndpointDecision, isChatSelectableModel } =
|
|
await import("../../open-sse/services/modelEndpointPolicy.ts");
|
|
|
|
test("OpenAI image models are not chat-selectable without upstream endpoint metadata", () => {
|
|
for (const modelId of [
|
|
"gpt-image-2",
|
|
"gpt-image-1.5",
|
|
"gpt-image-1-mini",
|
|
"dall-e-3",
|
|
"chatgpt-image-latest",
|
|
]) {
|
|
assert.deepEqual(getModelEndpointDecision("openai", modelId), {
|
|
kind: "image",
|
|
chatSelectable: false,
|
|
reason: "provider-policy",
|
|
});
|
|
}
|
|
});
|
|
|
|
test("OpenAI video models are not chat-selectable without upstream endpoint metadata", () => {
|
|
assert.deepEqual(getModelEndpointDecision("openai", "sora-2-pro"), {
|
|
kind: "video",
|
|
chatSelectable: false,
|
|
reason: "provider-policy",
|
|
});
|
|
});
|
|
|
|
test("provider policy is scoped and does not classify another provider by model name", () => {
|
|
assert.equal(
|
|
isChatSelectableModel("custom-provider", { id: "gpt-image-shaped-chat-model" }),
|
|
true
|
|
);
|
|
});
|
|
|
|
test("explicit chat capability wins for a multi-endpoint model", () => {
|
|
assert.equal(
|
|
isChatSelectableModel("openai", {
|
|
id: "gpt-image-shaped-multimodal-model",
|
|
supportedEndpoints: ["/v1/images/generations", "/v1/responses"],
|
|
}),
|
|
true
|
|
);
|
|
});
|
|
|
|
test("a synthetic chat default does not override a known OpenAI specialty model", () => {
|
|
assert.equal(
|
|
isChatSelectableModel("openai", {
|
|
id: "sora-2",
|
|
supportedEndpoints: ["chat"],
|
|
}),
|
|
false
|
|
);
|
|
});
|
|
|
|
test("explicit non-chat endpoints are excluded even when the model ID is unknown", () => {
|
|
assert.equal(
|
|
isChatSelectableModel("openai-compatible", {
|
|
id: "vendor-specialty-model",
|
|
supportedEndpoints: ["videos/generations"],
|
|
}),
|
|
false
|
|
);
|
|
});
|
|
|
|
test("chat import filtering keeps ordinary OpenAI models only", () => {
|
|
assert.deepEqual(
|
|
filterChatSelectableModels("openai", [
|
|
{ id: "gpt-5.6" },
|
|
{ id: "gpt-image-2" },
|
|
{ id: "sora-2" },
|
|
]).map((model) => model.id),
|
|
["gpt-5.6"]
|
|
);
|
|
});
|