diff --git a/hiclaw-controller/internal/agentconfig/generator.go b/hiclaw-controller/internal/agentconfig/generator.go index 583a91aaa..d1600985a 100644 --- a/hiclaw-controller/internal/agentconfig/generator.go +++ b/hiclaw-controller/internal/agentconfig/generator.go @@ -392,9 +392,10 @@ func defaultModelSpec(modelName string) ModelSpec { "deepseek-reasoner": {256000, 128000, false, true}, "kimi-k2.5": {256000, 128000, true, true}, "glm-5": {200000, 128000, false, true}, - "MiniMax-M2.7": {200000, 128000, false, true}, - "MiniMax-M2.7-highspeed": {200000, 128000, false, true}, + "MiniMax-M2.7": {204800, 128000, false, true}, + "MiniMax-M2.7-highspeed": {204800, 128000, false, true}, "MiniMax-M2.5": {200000, 128000, false, true}, + "MiniMax-M3": {1000000, 128000, true, true}, } p, found := presets[modelName] @@ -455,7 +456,7 @@ func (g *Generator) allModelSpecs(selectedModel string) []ModelSpec { "qwen3.6-plus", "qwen3.5-plus", "deepseek-chat", "deepseek-reasoner", "kimi-k2.5", "glm-5", - "MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M2.5", + "MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M2.5", "MiniMax-M3", } specs := make([]ModelSpec, 0, len(allModels)+1) @@ -479,7 +480,7 @@ func (g *Generator) allModelAliases(selectedModel string) map[string]interface{} "qwen3.6-plus", "qwen3.5-plus", "deepseek-chat", "deepseek-reasoner", "kimi-k2.5", "glm-5", - "MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M2.5", + "MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M2.5", "MiniMax-M3", } aliases := make(map[string]interface{}) diff --git a/hiclaw-controller/internal/agentconfig/generator_test.go b/hiclaw-controller/internal/agentconfig/generator_test.go index a42e1c1e8..3438d3ff4 100644 --- a/hiclaw-controller/internal/agentconfig/generator_test.go +++ b/hiclaw-controller/internal/agentconfig/generator_test.go @@ -269,6 +269,16 @@ func TestDefaultModelSpec(t *testing.T) { t.Errorf("claude-opus-4-6 should have vision: %v", spec.Input) } + minimaxM27 := defaultModelSpec("MiniMax-M2.7") + if minimaxM27.ContextWindow != 204800 || len(minimaxM27.Input) != 1 { + t.Errorf("MiniMax-M2.7 spec = %+v, want 204800 context and text input", minimaxM27) + } + + minimaxM3 := defaultModelSpec("MiniMax-M3") + if minimaxM3.ContextWindow != 1000000 || len(minimaxM3.Input) != 2 || minimaxM3.Input[1] != "image" { + t.Errorf("MiniMax-M3 spec = %+v, want 1000000 context and vision input", minimaxM3) + } + unknown := defaultModelSpec("unknown-model-xyz") if unknown.ContextWindow != 150000 { t.Errorf("unknown model ctx = %d, want 150000", unknown.ContextWindow) diff --git a/install/hiclaw-install.ps1 b/install/hiclaw-install.ps1 index 54cb11596..c5e073bdb 100644 --- a/install/hiclaw-install.ps1 +++ b/install/hiclaw-install.ps1 @@ -675,7 +675,7 @@ $script:KnownModels = @( "gpt-5.4", "gpt-5.3-codex", "gpt-5-mini", "gpt-5-nano", "claude-opus-4-6", "claude-sonnet-4-6", "claude-haiku-4-5", "qwen3.6-plus", "qwen3.5-plus", "deepseek-chat", "deepseek-reasoner", - "kimi-k2.5", "glm-5", "MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M2.5" + "kimi-k2.5", "glm-5", "MiniMax-M2.7", "MiniMax-M2.7-highspeed", "MiniMax-M2.5", "MiniMax-M3" ) function Test-KnownModel { diff --git a/install/hiclaw-install.sh b/install/hiclaw-install.sh index f89751044..cf25ac7c9 100755 --- a/install/hiclaw-install.sh +++ b/install/hiclaw-install.sh @@ -1116,7 +1116,7 @@ resolve_embedded_image() { # ============================================================ # Known models list — used to detect custom models during install # ============================================================ -KNOWN_MODELS="gpt-5.4 gpt-5.3-codex gpt-5-mini gpt-5-nano claude-opus-4-6 claude-sonnet-4-6 claude-haiku-4-5 qwen3.6-plus qwen3.5-plus deepseek-chat deepseek-reasoner kimi-k2.5 glm-5 MiniMax-M2.7 MiniMax-M2.7-highspeed MiniMax-M2.5" +KNOWN_MODELS="gpt-5.4 gpt-5.3-codex gpt-5-mini gpt-5-nano claude-opus-4-6 claude-sonnet-4-6 claude-haiku-4-5 qwen3.6-plus qwen3.5-plus deepseek-chat deepseek-reasoner kimi-k2.5 glm-5 MiniMax-M2.7 MiniMax-M2.7-highspeed MiniMax-M2.5 MiniMax-M3" is_known_model() { local model="$1" diff --git a/manager/agent/skills/model-switch/scripts/update-manager-model.sh b/manager/agent/skills/model-switch/scripts/update-manager-model.sh index 629e67436..daff9fb20 100755 --- a/manager/agent/skills/model-switch/scripts/update-manager-model.sh +++ b/manager/agent/skills/model-switch/scripts/update-manager-model.sh @@ -99,8 +99,12 @@ case "${MODEL_NAME}" in CTX=200000; MAX=64000 ;; deepseek-chat|deepseek-reasoner|kimi-k2.5) CTX=256000; MAX=128000 ;; - glm-5|MiniMax-M2.7|MiniMax-M2.7-highspeed|MiniMax-M2.5) + MiniMax-M3) + CTX=1000000; MAX=128000 ;; + glm-5|MiniMax-M2.5) CTX=200000; MAX=128000 ;; + MiniMax-M2.7|MiniMax-M2.7-highspeed) + CTX=204800; MAX=128000 ;; *) CTX=150000; MAX=128000 ;; esac @@ -112,7 +116,7 @@ fi # Resolve input modalities: only vision-capable models get "image" case "${MODEL_NAME}" in - gpt-5.4|gpt-5.3-codex|gpt-5-mini|gpt-5-nano|claude-opus-4-6|claude-sonnet-4-6|claude-haiku-4-5|qwen3.6-plus|qwen3.5-plus|kimi-k2.5) + gpt-5.4|gpt-5.3-codex|gpt-5-mini|gpt-5-nano|claude-opus-4-6|claude-sonnet-4-6|claude-haiku-4-5|qwen3.6-plus|qwen3.5-plus|kimi-k2.5|MiniMax-M3) INPUT='["text", "image"]' ;; *) INPUT='["text"]' ;; diff --git a/manager/agent/skills/worker-management/references/worker-openclaw.json.tmpl b/manager/agent/skills/worker-management/references/worker-openclaw.json.tmpl index aa0e91500..ff458615b 100644 --- a/manager/agent/skills/worker-management/references/worker-openclaw.json.tmpl +++ b/manager/agent/skills/worker-management/references/worker-openclaw.json.tmpl @@ -56,9 +56,10 @@ { "id": "deepseek-reasoner", "name": "deepseek-reasoner", "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "input": ["text"] }, { "id": "kimi-k2.5", "name": "kimi-k2.5", "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "input": ["text", "image"] }, { "id": "glm-5", "name": "glm-5", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, - { "id": "MiniMax-M2.7", "name": "MiniMax-M2.7", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, - { "id": "MiniMax-M2.7-highspeed", "name": "MiniMax-M2.7-highspeed", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, - { "id": "MiniMax-M2.5", "name": "MiniMax-M2.5", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] } + { "id": "MiniMax-M2.7", "name": "MiniMax-M2.7", "reasoning": true, "contextWindow": 204800, "maxTokens": 128000, "input": ["text"] }, + { "id": "MiniMax-M2.7-highspeed", "name": "MiniMax-M2.7-highspeed", "reasoning": true, "contextWindow": 204800, "maxTokens": 128000, "input": ["text"] }, + { "id": "MiniMax-M2.5", "name": "MiniMax-M2.5", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, + { "id": "MiniMax-M3", "name": "MiniMax-M3", "reasoning": true, "contextWindow": 1000000, "maxTokens": 128000, "input": ["text", "image"] } ] } } @@ -86,7 +87,8 @@ "agentteams-gateway/glm-5": { "alias": "glm-5" }, "agentteams-gateway/MiniMax-M2.7": { "alias": "MiniMax-M2.7" }, "agentteams-gateway/MiniMax-M2.7-highspeed": { "alias": "MiniMax-M2.7-highspeed" }, - "agentteams-gateway/MiniMax-M2.5": { "alias": "MiniMax-M2.5" } + "agentteams-gateway/MiniMax-M2.5": { "alias": "MiniMax-M2.5" }, + "agentteams-gateway/MiniMax-M3": { "alias": "MiniMax-M3" } }, "maxConcurrent": 4, "subagents": { diff --git a/manager/agent/skills/worker-management/scripts/generate-worker-config.sh b/manager/agent/skills/worker-management/scripts/generate-worker-config.sh index 89fe5c5d4..acd83b51f 100644 --- a/manager/agent/skills/worker-management/scripts/generate-worker-config.sh +++ b/manager/agent/skills/worker-management/scripts/generate-worker-config.sh @@ -47,8 +47,12 @@ case "${MODEL_NAME}" in CTX=200000; MAX=64000 ;; deepseek-chat|deepseek-reasoner|kimi-k2.5) CTX=256000; MAX=128000 ;; - glm-5|MiniMax-M2.7|MiniMax-M2.7-highspeed|MiniMax-M2.5) + MiniMax-M3) + CTX=1000000; MAX=128000 ;; + glm-5|MiniMax-M2.5) CTX=200000; MAX=128000 ;; + MiniMax-M2.7|MiniMax-M2.7-highspeed) + CTX=204800; MAX=128000 ;; *) CTX=150000; MAX=128000 ;; esac @@ -59,7 +63,7 @@ esac # Resolve input modalities: only vision-capable models get "image" case "${MODEL_NAME}" in - gpt-5.4|gpt-5.3-codex|gpt-5-mini|gpt-5-nano|claude-opus-4-6|claude-sonnet-4-6|claude-haiku-4-5|qwen3.6-plus|qwen3.5-plus|kimi-k2.5) + gpt-5.4|gpt-5.3-codex|gpt-5-mini|gpt-5-nano|claude-opus-4-6|claude-sonnet-4-6|claude-haiku-4-5|qwen3.6-plus|qwen3.5-plus|kimi-k2.5|MiniMax-M3) INPUT='["text", "image"]' ;; *) INPUT='["text"]' ;; diff --git a/manager/configs/known-models.json b/manager/configs/known-models.json index 47c7a8c3f..2a88c0d5b 100644 --- a/manager/configs/known-models.json +++ b/manager/configs/known-models.json @@ -12,7 +12,8 @@ { "id": "deepseek-reasoner", "name": "deepseek-reasoner", "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "input": ["text"] }, { "id": "kimi-k2.5", "name": "kimi-k2.5", "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "input": ["text", "image"] }, { "id": "glm-5", "name": "glm-5", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, - { "id": "MiniMax-M2.7", "name": "MiniMax-M2.7", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, - { "id": "MiniMax-M2.7-highspeed", "name": "MiniMax-M2.7-highspeed", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, - { "id": "MiniMax-M2.5", "name": "MiniMax-M2.5", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] } + { "id": "MiniMax-M2.7", "name": "MiniMax-M2.7", "reasoning": true, "contextWindow": 204800, "maxTokens": 128000, "input": ["text"] }, + { "id": "MiniMax-M2.7-highspeed", "name": "MiniMax-M2.7-highspeed", "reasoning": true, "contextWindow": 204800, "maxTokens": 128000, "input": ["text"] }, + { "id": "MiniMax-M2.5", "name": "MiniMax-M2.5", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, + { "id": "MiniMax-M3", "name": "MiniMax-M3", "reasoning": true, "contextWindow": 1000000, "maxTokens": 128000, "input": ["text", "image"] } ] diff --git a/manager/configs/manager-openclaw.json.tmpl b/manager/configs/manager-openclaw.json.tmpl index 119ed698e..c7de4b46f 100644 --- a/manager/configs/manager-openclaw.json.tmpl +++ b/manager/configs/manager-openclaw.json.tmpl @@ -63,9 +63,10 @@ { "id": "deepseek-reasoner", "name": "deepseek-reasoner", "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "input": ["text"] }, { "id": "kimi-k2.5", "name": "kimi-k2.5", "reasoning": true, "contextWindow": 256000, "maxTokens": 128000, "input": ["text", "image"] }, { "id": "glm-5", "name": "glm-5", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, - { "id": "MiniMax-M2.7", "name": "MiniMax-M2.7", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, - { "id": "MiniMax-M2.7-highspeed", "name": "MiniMax-M2.7-highspeed", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, - { "id": "MiniMax-M2.5", "name": "MiniMax-M2.5", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] } + { "id": "MiniMax-M2.7", "name": "MiniMax-M2.7", "reasoning": true, "contextWindow": 204800, "maxTokens": 128000, "input": ["text"] }, + { "id": "MiniMax-M2.7-highspeed", "name": "MiniMax-M2.7-highspeed", "reasoning": true, "contextWindow": 204800, "maxTokens": 128000, "input": ["text"] }, + { "id": "MiniMax-M2.5", "name": "MiniMax-M2.5", "reasoning": true, "contextWindow": 200000, "maxTokens": 128000, "input": ["text"] }, + { "id": "MiniMax-M3", "name": "MiniMax-M3", "reasoning": true, "contextWindow": 1000000, "maxTokens": 128000, "input": ["text", "image"] } ] } } @@ -93,7 +94,8 @@ "agentteams-gateway/glm-5": { "alias": "glm-5" }, "agentteams-gateway/MiniMax-M2.7": { "alias": "MiniMax-M2.7" }, "agentteams-gateway/MiniMax-M2.7-highspeed": { "alias": "MiniMax-M2.7-highspeed" }, - "agentteams-gateway/MiniMax-M2.5": { "alias": "MiniMax-M2.5" } + "agentteams-gateway/MiniMax-M2.5": { "alias": "MiniMax-M2.5" }, + "agentteams-gateway/MiniMax-M3": { "alias": "MiniMax-M3" } }, "maxConcurrent": 8, "subagents": { diff --git a/manager/scripts/init/start-manager-agent.sh b/manager/scripts/init/start-manager-agent.sh index 0c53c4ba2..ec9dd1975 100755 --- a/manager/scripts/init/start-manager-agent.sh +++ b/manager/scripts/init/start-manager-agent.sh @@ -646,8 +646,12 @@ case "${MODEL_NAME}" in export MODEL_CONTEXT_WINDOW=200000 MODEL_MAX_TOKENS=64000 ;; deepseek-chat|deepseek-reasoner|kimi-k2.5) export MODEL_CONTEXT_WINDOW=256000 MODEL_MAX_TOKENS=128000 ;; - glm-5|MiniMax-M2.7|MiniMax-M2.7-highspeed|MiniMax-M2.5) + MiniMax-M3) + export MODEL_CONTEXT_WINDOW=1000000 MODEL_MAX_TOKENS=128000 ;; + glm-5|MiniMax-M2.5) export MODEL_CONTEXT_WINDOW=200000 MODEL_MAX_TOKENS=128000 ;; + MiniMax-M2.7|MiniMax-M2.7-highspeed) + export MODEL_CONTEXT_WINDOW=204800 MODEL_MAX_TOKENS=128000 ;; *) export MODEL_CONTEXT_WINDOW=150000 MODEL_MAX_TOKENS=128000 ;; esac @@ -668,7 +672,7 @@ log "Matrix E2EE: ${MATRIX_E2EE_ENABLED}" # Resolve input modalities: only vision-capable models get "image" case "${MODEL_NAME}" in - gpt-5.4|gpt-5.3-codex|gpt-5-mini|gpt-5-nano|claude-opus-4-6|claude-sonnet-4-6|claude-haiku-4-5|qwen3.6-plus|qwen3.5-plus|kimi-k2.5) + gpt-5.4|gpt-5.3-codex|gpt-5-mini|gpt-5-nano|claude-opus-4-6|claude-sonnet-4-6|claude-haiku-4-5|qwen3.6-plus|qwen3.5-plus|kimi-k2.5|MiniMax-M3) export MODEL_INPUT='["text", "image"]' ;; *) export MODEL_INPUT='["text"]' ;;