diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go index 9326215bd..3fbc56dc2 100644 --- a/cmd/cmd_test.go +++ b/cmd/cmd_test.go @@ -2071,7 +2071,7 @@ func TestLoadOrUnloadModel_CloudModelAuth(t *testing.T) { }, { name: "explicit :cloud model without local stub returns not found by default", - model: "minimax-m2.5:cloud", + model: "minimax-m2.7:cloud", showStatus: http.StatusNotFound, whoamiStatus: http.StatusOK, whoamiResp: api.UserResponse{Name: "testuser"}, diff --git a/cmd/launch/integrations_test.go b/cmd/launch/integrations_test.go index ef6b996c3..9a9d353fa 100644 --- a/cmd/launch/integrations_test.go +++ b/cmd/launch/integrations_test.go @@ -310,7 +310,7 @@ func names(items []ModelItem) []string { func TestBuildModelList_NoExistingModels(t *testing.T) { items, _, _, _ := buildModelList(nil, nil, "") - want := []string{"kimi-k2.5:cloud", "qwen3.5:cloud", "glm-5:cloud", "minimax-m2.5:cloud", "glm-4.7-flash", "qwen3.5"} + want := []string{"kimi-k2.5:cloud", "qwen3.5:cloud", "glm-5:cloud", "minimax-m2.7:cloud", "glm-4.7-flash", "qwen3.5"} if diff := cmp.Diff(want, names(items)); diff != "" { t.Errorf("with no existing models, items should be recommended in order (-want +got):\n%s", diff) } @@ -338,7 +338,7 @@ func TestBuildModelList_OnlyLocalModels_CloudRecsAtBottom(t *testing.T) { got := names(items) // Recommended pinned at top (local recs first, then cloud recs when only-local), then installed non-recs - want := []string{"glm-4.7-flash", "qwen3.5", "kimi-k2.5:cloud", "qwen3.5:cloud", "glm-5:cloud", "minimax-m2.5:cloud", "llama3.2", "qwen2.5"} + want := []string{"glm-4.7-flash", "qwen3.5", "kimi-k2.5:cloud", "qwen3.5:cloud", "glm-5:cloud", "minimax-m2.7:cloud", "llama3.2", "qwen2.5"} if diff := cmp.Diff(want, got); diff != "" { t.Errorf("recs pinned at top, local recs before cloud recs (-want +got):\n%s", diff) } @@ -354,7 +354,7 @@ func TestBuildModelList_BothCloudAndLocal_RegularSort(t *testing.T) { got := names(items) // All recs pinned at top (cloud before local in mixed case), then non-recs - want := []string{"kimi-k2.5:cloud", "qwen3.5:cloud", "glm-5:cloud", "minimax-m2.5:cloud", "glm-4.7-flash", "qwen3.5", "llama3.2"} + want := []string{"kimi-k2.5:cloud", "qwen3.5:cloud", "glm-5:cloud", "minimax-m2.7:cloud", "glm-4.7-flash", "qwen3.5", "llama3.2"} if diff := cmp.Diff(want, got); diff != "" { t.Errorf("recs pinned at top, cloud recs first in mixed case (-want +got):\n%s", diff) } @@ -392,7 +392,7 @@ func TestBuildModelList_ExistingRecommendedMarked(t *testing.T) { if !strings.HasSuffix(item.Description, "(not downloaded)") { t.Errorf("non-installed recommended %q should have '(not downloaded)' suffix, got %q", item.Name, item.Description) } - case "minimax-m2.5:cloud", "kimi-k2.5:cloud", "qwen3.5:cloud": + case "minimax-m2.7:cloud", "kimi-k2.5:cloud", "qwen3.5:cloud": if strings.HasSuffix(item.Description, "(not downloaded)") { t.Errorf("cloud model %q should not have '(not downloaded)' suffix, got %q", item.Name, item.Description) } @@ -412,7 +412,7 @@ func TestBuildModelList_ExistingCloudModelsNotPushedToBottom(t *testing.T) { // glm-4.7-flash and glm-5:cloud are installed so they sort normally; // kimi-k2.5:cloud, qwen3.5:cloud, and qwen3.5 are not installed so they go to the bottom // All recs: cloud first in mixed case, then local, in rec order within each - want := []string{"kimi-k2.5:cloud", "qwen3.5:cloud", "glm-5:cloud", "minimax-m2.5:cloud", "glm-4.7-flash", "qwen3.5"} + want := []string{"kimi-k2.5:cloud", "qwen3.5:cloud", "glm-5:cloud", "minimax-m2.7:cloud", "glm-4.7-flash", "qwen3.5"} if diff := cmp.Diff(want, got); diff != "" { t.Errorf("all recs, cloud first in mixed case (-want +got):\n%s", diff) } @@ -430,7 +430,7 @@ func TestBuildModelList_HasRecommendedCloudModel_OnlyNonInstalledAtBottom(t *tes // kimi-k2.5:cloud is installed so it sorts normally; // the rest of the recommendations are not installed so they go to the bottom // All recs pinned at top (cloud first in mixed case), then non-recs - want := []string{"kimi-k2.5:cloud", "qwen3.5:cloud", "glm-5:cloud", "minimax-m2.5:cloud", "glm-4.7-flash", "qwen3.5", "llama3.2"} + want := []string{"kimi-k2.5:cloud", "qwen3.5:cloud", "glm-5:cloud", "minimax-m2.7:cloud", "glm-4.7-flash", "qwen3.5", "llama3.2"} if diff := cmp.Diff(want, got); diff != "" { t.Errorf("recs pinned at top, cloud first in mixed case (-want +got):\n%s", diff) } @@ -583,7 +583,7 @@ func TestBuildModelList_RecsAboveNonRecs(t *testing.T) { lastRecIdx := -1 firstNonRecIdx := len(got) for i, name := range got { - isRec := name == "glm-4.7-flash" || name == "qwen3.5" || name == "minimax-m2.5:cloud" || name == "glm-5:cloud" || name == "kimi-k2.5:cloud" || name == "qwen3.5:cloud" + isRec := name == "glm-4.7-flash" || name == "qwen3.5" || name == "minimax-m2.7:cloud" || name == "glm-5:cloud" || name == "kimi-k2.5:cloud" || name == "qwen3.5:cloud" if isRec && i > lastRecIdx { lastRecIdx = i } diff --git a/cmd/launch/models.go b/cmd/launch/models.go index a01f847d1..d541eb4ae 100644 --- a/cmd/launch/models.go +++ b/cmd/launch/models.go @@ -24,7 +24,7 @@ var recommendedModels = []ModelItem{ {Name: "kimi-k2.5:cloud", Description: "Multimodal reasoning with subagents", Recommended: true}, {Name: "qwen3.5:cloud", Description: "Reasoning, coding, and agentic tool use with vision", Recommended: true}, {Name: "glm-5:cloud", Description: "Reasoning and code generation", Recommended: true}, - {Name: "minimax-m2.5:cloud", Description: "Fast, efficient coding and real-world productivity", Recommended: true}, + {Name: "minimax-m2.7:cloud", Description: "Fast, efficient coding and real-world productivity", Recommended: true}, {Name: "glm-4.7-flash", Description: "Reasoning and code generation locally", Recommended: true}, {Name: "qwen3.5", Description: "Reasoning, coding, and visual understanding locally", Recommended: true}, } @@ -43,7 +43,7 @@ type cloudModelLimit struct { // cloudModelLimits maps cloud model base names to their token limits. // TODO(parthsareen): grab context/output limits from model info instead of hardcoding var cloudModelLimits = map[string]cloudModelLimit{ - "minimax-m2.5": {Context: 204_800, Output: 128_000}, + "minimax-m2.7": {Context: 204_800, Output: 128_000}, "cogito-2.1:671b": {Context: 163_840, Output: 65_536}, "deepseek-v3.1:671b": {Context: 163_840, Output: 163_840}, "deepseek-v3.2": {Context: 163_840, Output: 65_536}, diff --git a/cmd/launch/openclaw_test.go b/cmd/launch/openclaw_test.go index c68f3836b..096c4a389 100644 --- a/cmd/launch/openclaw_test.go +++ b/cmd/launch/openclaw_test.go @@ -1376,7 +1376,7 @@ func TestOpenclawModelConfig(t *testing.T) { // report it as a remote/cloud model srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/api/show" { - fmt.Fprintf(w, `{"capabilities":[],"model_info":{},"remote_model":"minimax-m2.5"}`) + fmt.Fprintf(w, `{"capabilities":[],"model_info":{},"remote_model":"minimax-m2.7"}`) return } w.WriteHeader(http.StatusNotFound) @@ -1386,7 +1386,7 @@ func TestOpenclawModelConfig(t *testing.T) { u, _ := url.Parse(srv.URL) client := api.NewClient(u, srv.Client()) - cfg, isCloud := openclawModelConfig(context.Background(), client, "minimax-m2.5:cloud") + cfg, isCloud := openclawModelConfig(context.Background(), client, "minimax-m2.7:cloud") if !isCloud { t.Error("expected isCloud = true for cloud model") diff --git a/docs/integrations/claude-code.mdx b/docs/integrations/claude-code.mdx index 5bae29ebb..9bb665c37 100644 --- a/docs/integrations/claude-code.mdx +++ b/docs/integrations/claude-code.mdx @@ -41,7 +41,7 @@ ollama launch claude --model kimi-k2.5:cloud - `kimi-k2.5:cloud` - `glm-5:cloud` -- `minimax-m2.5:cloud` +- `minimax-m2.7:cloud` - `qwen3.5:cloud` - `glm-4.7-flash` - `qwen3.5` diff --git a/docs/integrations/openclaw.mdx b/docs/integrations/openclaw.mdx index 957f1c25a..2b4031bb0 100644 --- a/docs/integrations/openclaw.mdx +++ b/docs/integrations/openclaw.mdx @@ -43,7 +43,7 @@ If the gateway is already running, it restarts automatically to pick up the new **Cloud models**: - `kimi-k2.5:cloud` — Multimodal reasoning with subagents -- `minimax-m2.5:cloud` — Fast, efficient coding and real-world productivity +- `minimax-m2.7:cloud` — Fast, efficient coding and real-world productivity - `glm-5:cloud` — Reasoning and code generation **Local models:**