diff --git a/mini_swe_runner.py b/mini_swe_runner.py index 2f98249f2..9be7b7348 100644 --- a/mini_swe_runner.py +++ b/mini_swe_runner.py @@ -200,13 +200,7 @@ class MiniSWERunner: else: client_kwargs["base_url"] = "https://openrouter.ai/api/v1" - if base_url and "api.anthropic.com" in base_url.strip().lower(): - raise ValueError( - "Anthropic's native /v1/messages API is not supported yet (planned for a future release). " - "Hermes currently requires OpenAI-compatible /chat/completions endpoints. " - "To use Claude models now, route through OpenRouter (OPENROUTER_API_KEY) " - "or any OpenAI-compatible proxy that wraps the Anthropic API." - ) + # Handle API key - OpenRouter is the primary provider if api_key: diff --git a/run_agent.py b/run_agent.py index 89e1ad00e..75e3dfc95 100644 --- a/run_agent.py +++ b/run_agent.py @@ -253,13 +253,7 @@ class AIAgent: self.provider = "openai-codex" else: self.api_mode = "chat_completions" - if base_url and "api.anthropic.com" in base_url.strip().lower(): - raise ValueError( - "Anthropic's native /v1/messages API is not supported yet (planned for a future release). " - "Hermes currently requires OpenAI-compatible /chat/completions endpoints. " - "To use Claude models now, route through OpenRouter (OPENROUTER_API_KEY) " - "or any OpenAI-compatible proxy that wraps the Anthropic API." - ) + self.tool_progress_callback = tool_progress_callback self.clarify_callback = clarify_callback self.step_callback = step_callback diff --git a/tests/test_run_agent.py b/tests/test_run_agent.py index 226b29a6d..55f96f942 100644 --- a/tests/test_run_agent.py +++ b/tests/test_run_agent.py @@ -280,22 +280,21 @@ class TestMaskApiKey: class TestInit: - def test_anthropic_base_url_fails_fast(self): - """Anthropic native endpoints should error before building an OpenAI client.""" + def test_anthropic_base_url_accepted(self): + """Anthropic base URLs should be accepted (OpenAI-compatible endpoint).""" with ( patch("run_agent.get_tool_definitions", return_value=[]), patch("run_agent.check_toolset_requirements", return_value={}), patch("run_agent.OpenAI") as mock_openai, ): - with pytest.raises(ValueError, match="not supported yet"): - AIAgent( - api_key="test-key-1234567890", - base_url="https://api.anthropic.com/v1/messages", - quiet_mode=True, - skip_context_files=True, - skip_memory=True, - ) - mock_openai.assert_not_called() + AIAgent( + api_key="test-key-1234567890", + base_url="https://api.anthropic.com/v1/", + quiet_mode=True, + skip_context_files=True, + skip_memory=True, + ) + mock_openai.assert_called_once() def test_prompt_caching_claude_openrouter(self): """Claude model via OpenRouter should enable prompt caching."""