import test from "node:test"; import assert from "node:assert/strict"; import { getModelInfoCore } from "../../open-sse/services/model.ts"; test("cross-proxy aliases normalize to canonical model ids without bypassing local aliases", async () => { const localAliasWins = await getModelInfoCore("gpt-oss:120b", { "gpt-oss:120b": "openai/gpt-4o", }); assert.deepEqual(localAliasWins, { provider: "openai", model: "gpt-4o", extendedContext: false, }); const crossProxyAlias = await getModelInfoCore("gpt-oss:120b", {}); assert.equal(crossProxyAlias.model, "gpt-oss-120b"); if (crossProxyAlias.errorType === "ambiguous_model") { assert.equal(crossProxyAlias.provider, null); } else { // If an active connection exists, it dynamically resolves the provider assert.ok(typeof crossProxyAlias.provider === "string"); } }); test("slashful canonical model ids are treated as exact model ids when provider pairing is invalid", async () => { const slashfulCanonical = await getModelInfoCore("openai/gpt-oss-120b", {}); assert.equal(slashfulCanonical.model, "openai/gpt-oss-120b"); if (slashfulCanonical.errorType === "ambiguous_model") { assert.equal(slashfulCanonical.provider, null); } else { assert.ok(typeof slashfulCanonical.provider === "string"); } }); test("explicit OpenAI provider routes can preserve catalog-lagging OpenAI model ids", async () => { assert.deepEqual(await getModelInfoCore("openai/gpt-4o-mini", {}), { provider: "openai", model: "gpt-4o-mini", extendedContext: false, }); }); test("explicit provider routes can still normalize cross-proxy model dialects", async () => { const explicitProviderCompat = await getModelInfoCore("nvidia/gpt-oss:120b", {}); assert.deepEqual(explicitProviderCompat, { provider: "nvidia", model: "openai/gpt-oss-120b", extendedContext: false, }); const aliasTargetCompat = await getModelInfoCore("sf-qwen", { "sf-qwen": { provider: "siliconflow", model: "qwen3-coder:480b" }, }); assert.deepEqual(aliasTargetCompat, { provider: "siliconflow", model: "Qwen/Qwen3-Coder-480B-A35B-Instruct", extendedContext: false, }); }); test("Kiro Claude Code-style model aliases resolve without polluting the visible catalog", async () => { assert.deepEqual(await getModelInfoCore("kr/claude-opus-4-7", {}), { provider: "kiro", model: "claude-opus-4.7", extendedContext: false, }); assert.deepEqual(await getModelInfoCore("kiro/claude-sonnet-4-6", {}), { provider: "kiro", model: "claude-sonnet-4.6", extendedContext: false, }); });