OmniRoute/tests/unit/t28-model-catalog-updates.test.ts
diegosouzapw 7b51ccd9e4 feat(antigravity): add client model aliases and signature bypass modes
Expose client-visible Antigravity preview model aliases while resolving
them back to upstream IDs for execution and provider discovery. Refresh
the Antigravity user agent from cached latest release metadata so model
discovery and requests track current CLI versions more reliably.

Add configurable Gemini thought signature cache modes in settings to
allow validated client-provided signatures in bypass flows while
preserving the existing stored-signature behavior by default.

Also centralize Anthropics header/version constants, enrich image model
catalog metadata with input and output modalities, add dashboard image
input support for advanced image providers, and exclude task docs from
Next standalone tracing to keep isolated builds stable.
2026-04-16 20:53:35 -03:00

75 lines
3.3 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { getModelInfoCore } from "../../open-sse/services/model.ts";
import { REGISTRY } from "../../open-sse/config/providerRegistry.ts";
import { getStaticModelsForProvider } from "../../src/app/api/providers/[id]/models/route.ts";
test("T28: gemini-cli catalog includes preview models, gemini uses API sync", () => {
// Gemini (AI Studio) no longer has a hardcoded registry — models come from
// API sync via /api/providers/:id/models with pageSize=1000.
const geminiIds = REGISTRY.gemini.models.map((m) => m.id);
assert.equal(geminiIds.length, 0, "gemini models should be empty (populated by API sync)");
// gemini-cli still has hardcoded models (Cloud Code doesn't have a models API)
const geminiCliIds = REGISTRY["gemini-cli"].models.map((m) => m.id);
assert.ok(geminiCliIds.includes("gemini-3.1-flash-lite-preview"));
assert.ok(geminiCliIds.includes("gemini-3-flash-preview"));
});
test("T28: antigravity static catalog exposes client-visible Gemini preview IDs", () => {
const staticIds = (getStaticModelsForProvider("antigravity") || []).map((m) => m.id);
assert.ok(staticIds.includes("gemini-3-pro-preview"));
assert.ok(staticIds.includes("gemini-3.1-pro-low"));
assert.ok(staticIds.includes("gemini-3-flash-preview"));
assert.ok(!staticIds.includes("gemini-3-pro-high"));
assert.ok(!staticIds.includes("gemini-3.1-pro-high"));
});
test("T28: github registry exposes Gemini 3.1 Pro Preview and keeps legacy alias compatibility", async () => {
const githubIds = REGISTRY.github.models.map((m) => m.id);
assert.ok(githubIds.includes("gemini-3.1-pro-preview"));
const canonical = await getModelInfoCore("gh/gemini-3.1-pro-preview", {});
assert.equal(canonical.provider, "github");
assert.equal(canonical.model, "gemini-3.1-pro-preview");
const legacy = await getModelInfoCore("gh/gemini-3-pro", {});
assert.equal(legacy.provider, "github");
assert.equal(legacy.model, "gemini-3.1-pro-preview");
});
test("T28: qwen registry uses native chat.qwen.ai base URL", () => {
assert.equal(
REGISTRY.qwen.baseUrl,
"https://chat.qwen.ai/api/v1/services/aigc/text-generation/generation"
);
});
test("T28: vertex catalog includes partner models when vertex executor is available", () => {
const vertexIds = REGISTRY.vertex.models.map((m) => m.id);
assert.ok(vertexIds.includes("deepseek-v3.2"));
assert.ok(vertexIds.includes("qwen3-next-80b"));
assert.ok(vertexIds.includes("glm-5"));
});
test("T28: new catalog models resolve through getModelInfoCore", async () => {
const minimax = await getModelInfoCore("minimax/minimax-m2.7", {});
assert.equal(minimax.provider, "minimax");
assert.equal(minimax.model, "minimax-m2.7");
const flashLite = await getModelInfoCore("gemini/gemini-3.1-flash-lite-preview", {});
assert.equal(flashLite.provider, "gemini");
assert.equal(flashLite.model, "gemini-3.1-flash-lite-preview");
const flashPreview = await getModelInfoCore("gemini/gemini-3-flash-preview", {});
assert.equal(flashPreview.provider, "gemini");
assert.equal(flashPreview.model, "gemini-3-flash-preview");
const vertexPartner = await getModelInfoCore("vertex/qwen3-next-80b", {});
assert.equal(vertexPartner.provider, "vertex");
assert.equal(vertexPartner.model, "qwen3-next-80b");
});