2026-01-09 18:12:07 -05:00
|
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
getOpencodeZenStaticFallbackModels,
|
|
|
|
|
OPENCODE_ZEN_MODEL_ALIASES,
|
|
|
|
|
resolveOpencodeZenAlias,
|
|
|
|
|
resolveOpencodeZenModelApi,
|
|
|
|
|
} from "./opencode-zen-models.js";
|
|
|
|
|
|
|
|
|
|
describe("resolveOpencodeZenAlias", () => {
|
|
|
|
|
it("resolves opus alias", () => {
|
|
|
|
|
expect(resolveOpencodeZenAlias("opus")).toBe("claude-opus-4-5");
|
|
|
|
|
});
|
|
|
|
|
|
2026-01-10 18:25:43 +01:00
|
|
|
it("keeps legacy aliases working", () => {
|
|
|
|
|
expect(resolveOpencodeZenAlias("sonnet")).toBe("claude-opus-4-5");
|
|
|
|
|
expect(resolveOpencodeZenAlias("haiku")).toBe("claude-opus-4-5");
|
|
|
|
|
expect(resolveOpencodeZenAlias("gpt4")).toBe("gpt-5.1");
|
|
|
|
|
expect(resolveOpencodeZenAlias("o1")).toBe("gpt-5.2");
|
|
|
|
|
expect(resolveOpencodeZenAlias("gemini-2.5")).toBe("gemini-3-pro");
|
|
|
|
|
});
|
|
|
|
|
|
2026-01-09 18:12:07 -05:00
|
|
|
it("resolves gpt5 alias", () => {
|
|
|
|
|
expect(resolveOpencodeZenAlias("gpt5")).toBe("gpt-5.2");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("resolves gemini alias", () => {
|
|
|
|
|
expect(resolveOpencodeZenAlias("gemini")).toBe("gemini-3-pro");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("returns input if no alias exists", () => {
|
|
|
|
|
expect(resolveOpencodeZenAlias("some-unknown-model")).toBe(
|
|
|
|
|
"some-unknown-model",
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("is case-insensitive", () => {
|
|
|
|
|
expect(resolveOpencodeZenAlias("OPUS")).toBe("claude-opus-4-5");
|
|
|
|
|
expect(resolveOpencodeZenAlias("Gpt5")).toBe("gpt-5.2");
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe("resolveOpencodeZenModelApi", () => {
|
2026-01-10 21:37:38 +01:00
|
|
|
it("maps APIs by model family", () => {
|
2026-01-09 18:12:07 -05:00
|
|
|
expect(resolveOpencodeZenModelApi("claude-opus-4-5")).toBe(
|
2026-01-10 21:37:38 +01:00
|
|
|
"anthropic-messages",
|
|
|
|
|
);
|
|
|
|
|
expect(resolveOpencodeZenModelApi("minimax-m2.1-free")).toBe(
|
|
|
|
|
"anthropic-messages",
|
2026-01-09 18:12:07 -05:00
|
|
|
);
|
|
|
|
|
expect(resolveOpencodeZenModelApi("gemini-3-pro")).toBe(
|
2026-01-10 21:37:38 +01:00
|
|
|
"google-generative-ai",
|
|
|
|
|
);
|
|
|
|
|
expect(resolveOpencodeZenModelApi("gpt-5.2")).toBe("openai-responses");
|
|
|
|
|
expect(resolveOpencodeZenModelApi("glm-4.7-free")).toBe(
|
2026-01-09 18:12:07 -05:00
|
|
|
"openai-completions",
|
|
|
|
|
);
|
|
|
|
|
expect(resolveOpencodeZenModelApi("some-unknown-model")).toBe(
|
|
|
|
|
"openai-completions",
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe("getOpencodeZenStaticFallbackModels", () => {
|
|
|
|
|
it("returns an array of models", () => {
|
|
|
|
|
const models = getOpencodeZenStaticFallbackModels();
|
|
|
|
|
expect(Array.isArray(models)).toBe(true);
|
feat(opencode-zen): update models with sensible defaults
- Replace model catalog with 11 current models: gpt-5.1-codex, claude-opus-4-5,
gemini-3-pro, alpha-glm-4.7, gpt-5.1-codex-mini, gpt-5.1, glm-4.7-free,
gemini-3-flash, gpt-5.1-codex-max, minimax-m2.1-free, gpt-5.2
- Add accurate per-token costs from OpenCode Zen pricing
- Add accurate context windows and output limits
- Update aliases for new model families (codex, glm, minimax)
- Remove deprecated models (sonnet, haiku, o-series, gemini-2.5)
2026-01-10 12:14:10 -05:00
|
|
|
expect(models.length).toBe(11);
|
2026-01-09 18:12:07 -05:00
|
|
|
});
|
|
|
|
|
|
feat(opencode-zen): update models with sensible defaults
- Replace model catalog with 11 current models: gpt-5.1-codex, claude-opus-4-5,
gemini-3-pro, alpha-glm-4.7, gpt-5.1-codex-mini, gpt-5.1, glm-4.7-free,
gemini-3-flash, gpt-5.1-codex-max, minimax-m2.1-free, gpt-5.2
- Add accurate per-token costs from OpenCode Zen pricing
- Add accurate context windows and output limits
- Update aliases for new model families (codex, glm, minimax)
- Remove deprecated models (sonnet, haiku, o-series, gemini-2.5)
2026-01-10 12:14:10 -05:00
|
|
|
it("includes Claude, GPT, Gemini, GLM, and MiniMax models", () => {
|
2026-01-09 18:12:07 -05:00
|
|
|
const models = getOpencodeZenStaticFallbackModels();
|
|
|
|
|
const ids = models.map((m) => m.id);
|
|
|
|
|
|
|
|
|
|
expect(ids).toContain("claude-opus-4-5");
|
|
|
|
|
expect(ids).toContain("gpt-5.2");
|
feat(opencode-zen): update models with sensible defaults
- Replace model catalog with 11 current models: gpt-5.1-codex, claude-opus-4-5,
gemini-3-pro, alpha-glm-4.7, gpt-5.1-codex-mini, gpt-5.1, glm-4.7-free,
gemini-3-flash, gpt-5.1-codex-max, minimax-m2.1-free, gpt-5.2
- Add accurate per-token costs from OpenCode Zen pricing
- Add accurate context windows and output limits
- Update aliases for new model families (codex, glm, minimax)
- Remove deprecated models (sonnet, haiku, o-series, gemini-2.5)
2026-01-10 12:14:10 -05:00
|
|
|
expect(ids).toContain("gpt-5.1-codex");
|
2026-01-09 18:12:07 -05:00
|
|
|
expect(ids).toContain("gemini-3-pro");
|
feat(opencode-zen): update models with sensible defaults
- Replace model catalog with 11 current models: gpt-5.1-codex, claude-opus-4-5,
gemini-3-pro, alpha-glm-4.7, gpt-5.1-codex-mini, gpt-5.1, glm-4.7-free,
gemini-3-flash, gpt-5.1-codex-max, minimax-m2.1-free, gpt-5.2
- Add accurate per-token costs from OpenCode Zen pricing
- Add accurate context windows and output limits
- Update aliases for new model families (codex, glm, minimax)
- Remove deprecated models (sonnet, haiku, o-series, gemini-2.5)
2026-01-10 12:14:10 -05:00
|
|
|
expect(ids).toContain("glm-4.7-free");
|
|
|
|
|
expect(ids).toContain("minimax-m2.1-free");
|
2026-01-09 18:12:07 -05:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("returns valid ModelDefinitionConfig objects", () => {
|
|
|
|
|
const models = getOpencodeZenStaticFallbackModels();
|
|
|
|
|
for (const model of models) {
|
|
|
|
|
expect(model.id).toBeDefined();
|
|
|
|
|
expect(model.name).toBeDefined();
|
|
|
|
|
expect(typeof model.reasoning).toBe("boolean");
|
|
|
|
|
expect(Array.isArray(model.input)).toBe(true);
|
|
|
|
|
expect(model.cost).toBeDefined();
|
|
|
|
|
expect(typeof model.contextWindow).toBe("number");
|
|
|
|
|
expect(typeof model.maxTokens).toBe("number");
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe("OPENCODE_ZEN_MODEL_ALIASES", () => {
|
|
|
|
|
it("has expected aliases", () => {
|
|
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES.opus).toBe("claude-opus-4-5");
|
feat(opencode-zen): update models with sensible defaults
- Replace model catalog with 11 current models: gpt-5.1-codex, claude-opus-4-5,
gemini-3-pro, alpha-glm-4.7, gpt-5.1-codex-mini, gpt-5.1, glm-4.7-free,
gemini-3-flash, gpt-5.1-codex-max, minimax-m2.1-free, gpt-5.2
- Add accurate per-token costs from OpenCode Zen pricing
- Add accurate context windows and output limits
- Update aliases for new model families (codex, glm, minimax)
- Remove deprecated models (sonnet, haiku, o-series, gemini-2.5)
2026-01-10 12:14:10 -05:00
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES.codex).toBe("gpt-5.1-codex");
|
2026-01-09 18:12:07 -05:00
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES.gpt5).toBe("gpt-5.2");
|
|
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES.gemini).toBe("gemini-3-pro");
|
feat(opencode-zen): update models with sensible defaults
- Replace model catalog with 11 current models: gpt-5.1-codex, claude-opus-4-5,
gemini-3-pro, alpha-glm-4.7, gpt-5.1-codex-mini, gpt-5.1, glm-4.7-free,
gemini-3-flash, gpt-5.1-codex-max, minimax-m2.1-free, gpt-5.2
- Add accurate per-token costs from OpenCode Zen pricing
- Add accurate context windows and output limits
- Update aliases for new model families (codex, glm, minimax)
- Remove deprecated models (sonnet, haiku, o-series, gemini-2.5)
2026-01-10 12:14:10 -05:00
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES.glm).toBe("glm-4.7-free");
|
|
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES.minimax).toBe("minimax-m2.1-free");
|
2026-01-10 18:25:43 +01:00
|
|
|
|
|
|
|
|
// Legacy aliases (kept for backward compatibility).
|
|
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES.sonnet).toBe("claude-opus-4-5");
|
|
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES.haiku).toBe("claude-opus-4-5");
|
|
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES.gpt4).toBe("gpt-5.1");
|
|
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES.o1).toBe("gpt-5.2");
|
|
|
|
|
expect(OPENCODE_ZEN_MODEL_ALIASES["gemini-2.5"]).toBe("gemini-3-pro");
|
2026-01-09 18:12:07 -05:00
|
|
|
});
|
|
|
|
|
});
|