mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-03 05:45:04 +03:00
Integrated into release/v3.8.12. Registers MiniMax-M3 (1M context, Anthropic-compatible) across 8 provider tiers (minimax, minimax-cn, opencode, opencode-go, opencode-zen, trae, ollama-cloud, nvidia). Validated: 8/8 new registry tests + 25 registry/model-catalog regression files green, typecheck + lint clean. Complements the #3141 max_tokens spec already on release.
This commit is contained in:
@@ -1195,6 +1195,8 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
|
||||
{ id: "work", name: "Work (Auto · fast)" },
|
||||
{ id: "gemini-3.1-pro", name: "Gemini 3.1 Pro" },
|
||||
{ id: "gemini-3-flash-solo", name: "Gemini 3 Flash" },
|
||||
// #3110: MiniMax M3 via Trae
|
||||
{ id: "minimax-m3", name: "MiniMax M3", contextLength: 1048576 },
|
||||
{ id: "minimax-m2.7", name: "MiniMax M2.7" },
|
||||
{ id: "kimi-k2.5", name: "Kimi K2.5" },
|
||||
{ id: "gpt-5.4", name: "GPT 5.4" },
|
||||
@@ -1381,6 +1383,8 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
|
||||
interleavedField: "reasoning_content",
|
||||
},
|
||||
{ id: "deepseek-v4-flash-free", name: "DeepSeek V4 Flash Free", supportsReasoning: true },
|
||||
// #3110: MiniMax M3 free tier via OpenCode
|
||||
{ id: "minimax-m3-free", name: "MiniMax M3 Free", contextLength: 1048576 },
|
||||
{ id: "minimax-m2.5-free", name: "MiniMax M2.5 Free", contextLength: 204800 },
|
||||
{ id: "ling-2.6-1t-free", name: "Ling 2.6 Free", contextLength: 262000 },
|
||||
{
|
||||
@@ -1420,6 +1424,8 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
|
||||
{ id: "mimo-v2.5", name: "MiMo-V2.5" },
|
||||
{ id: "mimo-v2-pro", name: "MiMo-V2-Pro" },
|
||||
{ id: "mimo-v2-omni", name: "MiMo-V2-Omni" },
|
||||
// #3110: MiniMax M3 via OpenCode Go tier
|
||||
{ id: "minimax-m3", name: "MiniMax M3", targetFormat: "claude", contextLength: 1048576 },
|
||||
{ id: "minimax-m2.7", name: "MiniMax M2.7", targetFormat: "claude" },
|
||||
{ id: "minimax-m2.5", name: "MiniMax M2.5", targetFormat: "claude" },
|
||||
// Issue #2292: Qwen models on opencode-go reject oa-compat format
|
||||
@@ -1504,6 +1510,8 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
|
||||
{ id: "glm-5.1", name: "GLM-5.1" },
|
||||
|
||||
// ── MiniMax ────────────────────────────────────────────────
|
||||
// #3110: MiniMax M3 — frontier coding model with 1M context
|
||||
{ id: "minimax-m3", name: "MiniMax M3", contextLength: 1048576 },
|
||||
{ id: "minimax-m2.5", name: "MiniMax M2.5" },
|
||||
{ id: "minimax-m2.7", name: "MiniMax M2.7" },
|
||||
|
||||
@@ -2185,6 +2193,8 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
|
||||
},
|
||||
models: [
|
||||
// T12/T28: MiniMax default upgraded from M2.5 to M2.7
|
||||
// #3110: MiniMax M3 — frontier coding model with 1M context
|
||||
{ id: "MiniMax-M3", name: "MiniMax M3", contextLength: 1048576 },
|
||||
{ id: "MiniMax-M2.7", name: "MiniMax M2.7" },
|
||||
{ id: "MiniMax-M2.7-highspeed", name: "MiniMax M2.7 Highspeed" },
|
||||
{ id: "MiniMax-M2.5", name: "MiniMax M2.5" },
|
||||
@@ -2206,6 +2216,8 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
|
||||
},
|
||||
models: [
|
||||
// Keep parity with minimax to ensure model discovery works for minimax-cn connections.
|
||||
// #3110: MiniMax M3 — frontier coding model with 1M context
|
||||
{ id: "MiniMax-M3", name: "MiniMax M3", contextLength: 1048576 },
|
||||
{ id: "MiniMax-M2.7", name: "MiniMax M2.7" },
|
||||
{ id: "MiniMax-M2.7-highspeed", name: "MiniMax M2.7 Highspeed" },
|
||||
{ id: "MiniMax-M2.5", name: "MiniMax M2.5" },
|
||||
@@ -2663,6 +2675,8 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
|
||||
{ id: "glm-5", name: "GLM 5" },
|
||||
{ id: "mimo-v2.5-pro", name: "MiMo-V2.5-Pro" },
|
||||
{ id: "mimo-v2.5", name: "MiMo-V2.5" },
|
||||
// #3110: MiniMax M3 via OpenCode Zen
|
||||
{ id: "minimax-m3", name: "MiniMax M3", contextLength: 1048576 },
|
||||
{ id: "minimax-m2.7", name: "MiniMax M2.7" },
|
||||
{ id: "minimax-m2.5", name: "MiniMax M2.5" },
|
||||
{ id: "llama-4-maverick", name: "Llama 4 Maverick" },
|
||||
@@ -3153,6 +3167,8 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
|
||||
{ id: "deepseek-v4-flash", name: "DeepSeek V4 Flash", supportsReasoning: true },
|
||||
{ id: "kimi-k2.6", name: "Kimi K2.6" },
|
||||
{ id: "glm-5.1", name: "GLM 5.1" },
|
||||
// #3110: MiniMax M3 via Ollama
|
||||
{ id: "minimax-m3", name: "MiniMax M3", contextLength: 1048576 },
|
||||
{ id: "minimax-m2.7", name: "MiniMax M2.7" },
|
||||
{ id: "gemma4:31b", name: "Gemma 4 31B" },
|
||||
{ id: "nemotron-3-super", name: "NVIDIA Nemotron 3 Super" },
|
||||
@@ -3198,6 +3214,8 @@ const _REGISTRY_EAGER: Record<string, RegistryEntry> = {
|
||||
authHeader: "bearer",
|
||||
models: [
|
||||
{ id: "z-ai/glm-5.1", name: "GLM 5.1" },
|
||||
// #3110: MiniMax M3 via NVIDIA
|
||||
{ id: "minimaxai/minimax-m3", name: "MiniMax M3", contextLength: 1048576 },
|
||||
{ id: "minimaxai/minimax-m2.7", name: "MiniMax M2.7" },
|
||||
{ id: "google/gemma-4-31b-it", name: "Gemma 4 31B" },
|
||||
{ id: "mistralai/mistral-small-4-119b-2603", name: "Mistral Small 4 2603" },
|
||||
|
||||
86
tests/unit/minimax-m3-model-registry.test.ts
Normal file
86
tests/unit/minimax-m3-model-registry.test.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
/**
|
||||
* Unit tests for MiniMax M3 model registration (#3110)
|
||||
*
|
||||
* Verifies that MiniMax-M3 is present in the provider registry across
|
||||
* all relevant provider entries (minimax, minimax-cn, opencode, opencode-go,
|
||||
* opencode-zen, kiro, ollama, nvidia).
|
||||
*/
|
||||
|
||||
import { describe, it } from "node:test";
|
||||
import assert from "node:assert";
|
||||
import { REGISTRY } from "../../open-sse/config/providerRegistry.ts";
|
||||
|
||||
describe("MiniMax M3 model registration (#3110)", () => {
|
||||
it("minimax provider has MiniMax-M3 with 1M context", () => {
|
||||
const entry = REGISTRY.minimax;
|
||||
assert.ok(entry, "minimax registry entry must exist");
|
||||
const m3 = entry.models.find((m) => m.id === "MiniMax-M3");
|
||||
assert.ok(m3, "MiniMax-M3 must be in minimax models");
|
||||
assert.equal(m3.name, "MiniMax M3");
|
||||
assert.equal(m3.contextLength, 1_048_576);
|
||||
});
|
||||
|
||||
it("minimax-cn provider has MiniMax-M3 with 1M context", () => {
|
||||
const entry = REGISTRY["minimax-cn"];
|
||||
assert.ok(entry, "minimax-cn registry entry must exist");
|
||||
const m3 = entry.models.find((m) => m.id === "MiniMax-M3");
|
||||
assert.ok(m3, "MiniMax-M3 must be in minimax-cn models");
|
||||
assert.equal(m3.name, "MiniMax M3");
|
||||
assert.equal(m3.contextLength, 1_048_576);
|
||||
});
|
||||
|
||||
it("opencode provider has minimax-m3-free with 1M context", () => {
|
||||
const entry = REGISTRY.opencode;
|
||||
assert.ok(entry, "opencode registry entry must exist");
|
||||
const m3 = entry.models.find((m) => m.id === "minimax-m3-free");
|
||||
assert.ok(m3, "minimax-m3-free must be in opencode models");
|
||||
assert.equal(m3.name, "MiniMax M3 Free");
|
||||
assert.equal(m3.contextLength, 1_048_576);
|
||||
});
|
||||
|
||||
it("opencode-go provider has minimax-m3 with Claude targetFormat", () => {
|
||||
const entry = REGISTRY["opencode-go"];
|
||||
assert.ok(entry, "opencode-go registry entry must exist");
|
||||
const m3 = entry.models.find((m) => m.id === "minimax-m3");
|
||||
assert.ok(m3, "minimax-m3 must be in opencode-go models");
|
||||
assert.equal(m3.name, "MiniMax M3");
|
||||
assert.equal(m3.targetFormat, "claude");
|
||||
assert.equal(m3.contextLength, 1_048_576);
|
||||
});
|
||||
|
||||
it("opencode-zen provider has minimax-m3 with 1M context", () => {
|
||||
const entry = REGISTRY["opencode-zen"];
|
||||
assert.ok(entry, "opencode-zen registry entry must exist");
|
||||
const m3 = entry.models.find((m) => m.id === "minimax-m3");
|
||||
assert.ok(m3, "minimax-m3 must be in opencode-zen models");
|
||||
assert.equal(m3.name, "MiniMax M3");
|
||||
assert.equal(m3.contextLength, 1_048_576);
|
||||
});
|
||||
|
||||
it("trae provider has minimax-m3 with 1M context", () => {
|
||||
const entry = REGISTRY.trae;
|
||||
assert.ok(entry, "trae registry entry must exist");
|
||||
const m3 = entry.models.find((m) => m.id === "minimax-m3");
|
||||
assert.ok(m3, "minimax-m3 must be in trae models");
|
||||
assert.equal(m3.name, "MiniMax M3");
|
||||
assert.equal(m3.contextLength, 1_048_576);
|
||||
});
|
||||
|
||||
it("ollama-cloud provider has minimax-m3 with 1M context", () => {
|
||||
const entry = REGISTRY["ollama-cloud"];
|
||||
assert.ok(entry, "ollama-cloud registry entry must exist");
|
||||
const m3 = entry.models.find((m) => m.id === "minimax-m3");
|
||||
assert.ok(m3, "minimax-m3 must be in ollama-cloud models");
|
||||
assert.equal(m3.name, "MiniMax M3");
|
||||
assert.equal(m3.contextLength, 1_048_576);
|
||||
});
|
||||
|
||||
it("nvidia provider has minimaxai/minimax-m3 with 1M context", () => {
|
||||
const entry = REGISTRY.nvidia;
|
||||
assert.ok(entry, "nvidia registry entry must exist");
|
||||
const m3 = entry.models.find((m) => m.id === "minimaxai/minimax-m3");
|
||||
assert.ok(m3, "minimaxai/minimax-m3 must be in nvidia models");
|
||||
assert.equal(m3.name, "MiniMax M3");
|
||||
assert.equal(m3.contextLength, 1_048_576);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user