From df6ce848e9d186da0264e779afafc6fdc23d0635 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Sat, 28 Mar 2026 11:36:59 -0700 Subject: [PATCH] =?UTF-8?q?fix(provider):=20remove=20MiniMax=20/v1?= =?UTF-8?q?=E2=86=92/anthropic=20auto-correction=20to=20allow=20user=20ove?= =?UTF-8?q?rride=20(#3553)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The minimax-specific auto-correction in runtime_provider.py was preventing users from overriding to the OpenAI-compatible endpoint via MINIMAX_BASE_URL. Users in certain regions get nginx 404 on api.minimax.io/anthropic and need to switch to api.minimax.chat/v1. The generic URL-suffix detection already handles /anthropic → anthropic_messages, so the minimax-specific code was redundant for the default path and harmful for the override path. Now: default /anthropic URL works via generic detection, user override to /v1 gets chat_completions mode naturally. Closes #3546 (different approach — respects user overrides instead of changing the default endpoint). --- hermes_cli/runtime_provider.py | 6 ------ tests/test_runtime_provider_resolution.py | 18 +++++++++--------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/hermes_cli/runtime_provider.py b/hermes_cli/runtime_provider.py index 760775c4c..2b2df88bc 100644 --- a/hermes_cli/runtime_provider.py +++ b/hermes_cli/runtime_provider.py @@ -407,12 +407,6 @@ def resolve_runtime_provider( # (e.g. https://api.minimax.io/anthropic, https://dashscope.../anthropic) elif base_url.rstrip("/").endswith("/anthropic"): api_mode = "anthropic_messages" - # MiniMax providers always use Anthropic Messages API. - # Auto-correct stale /v1 URLs (from old .env or config) to /anthropic. - elif provider in ("minimax", "minimax-cn"): - api_mode = "anthropic_messages" - if base_url.rstrip("/").endswith("/v1"): - base_url = base_url.rstrip("/")[:-3] + "/anthropic" return { "provider": provider, "api_mode": api_mode, diff --git a/tests/test_runtime_provider_resolution.py b/tests/test_runtime_provider_resolution.py index b63e87dac..84b018333 100644 --- a/tests/test_runtime_provider_resolution.py +++ b/tests/test_runtime_provider_resolution.py @@ -493,22 +493,22 @@ def test_minimax_default_url_uses_anthropic_messages(monkeypatch): assert resolved["base_url"] == "https://api.minimax.io/anthropic" -def test_minimax_stale_v1_url_auto_corrected(monkeypatch): - """MiniMax with stale /v1 base URL should be auto-corrected to /anthropic.""" +def test_minimax_v1_url_uses_chat_completions(monkeypatch): + """MiniMax with /v1 base URL should use chat_completions (user override for regions where /anthropic 404s).""" monkeypatch.setattr(rp, "resolve_provider", lambda *a, **k: "minimax") monkeypatch.setattr(rp, "_get_model_config", lambda: {}) monkeypatch.setenv("MINIMAX_API_KEY", "test-minimax-key") - monkeypatch.setenv("MINIMAX_BASE_URL", "https://api.minimax.io/v1") + monkeypatch.setenv("MINIMAX_BASE_URL", "https://api.minimax.chat/v1") resolved = rp.resolve_runtime_provider(requested="minimax") assert resolved["provider"] == "minimax" - assert resolved["api_mode"] == "anthropic_messages" - assert resolved["base_url"] == "https://api.minimax.io/anthropic" + assert resolved["api_mode"] == "chat_completions" + assert resolved["base_url"] == "https://api.minimax.chat/v1" -def test_minimax_cn_stale_v1_url_auto_corrected(monkeypatch): - """MiniMax-CN with stale /v1 base URL should be auto-corrected to /anthropic.""" +def test_minimax_cn_v1_url_uses_chat_completions(monkeypatch): + """MiniMax-CN with /v1 base URL should use chat_completions (user override).""" monkeypatch.setattr(rp, "resolve_provider", lambda *a, **k: "minimax-cn") monkeypatch.setattr(rp, "_get_model_config", lambda: {}) monkeypatch.setenv("MINIMAX_CN_API_KEY", "test-minimax-cn-key") @@ -517,8 +517,8 @@ def test_minimax_cn_stale_v1_url_auto_corrected(monkeypatch): resolved = rp.resolve_runtime_provider(requested="minimax-cn") assert resolved["provider"] == "minimax-cn" - assert resolved["api_mode"] == "anthropic_messages" - assert resolved["base_url"] == "https://api.minimaxi.com/anthropic" + assert resolved["api_mode"] == "chat_completions" + assert resolved["base_url"] == "https://api.minimaxi.com/v1" def test_minimax_explicit_api_mode_respected(monkeypatch):