* feat: Update Claude model references from v3 to v4 - Update model configurations from claude-3-opus to claude-4-opus - Update model configurations from claude-3-sonnet to claude-4-sonnet - Maintain backward compatibility through existing aliases (opus, sonnet, claude) - Update provider registry preferred models list - Update all test cases and assertions to reflect new model names - Update documentation and examples consistently across all files - Add Claude 4 model support while preserving existing functionality Files modified: 15 (config, docs, providers, tests, tools) Pattern: Systematic claude-3-* → claude-4-* model reference migration 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * PR feedback: changed anthropic/claude-4-opus -> anthropic/claude-opus-4 and anthropic/claude-4-haiku -> anthropic/claude-3.5-haiku * changed anthropic/claude-4-sonnet -> anthropic/claude-sonnet-4 * PR feedback removed specific model from test mock * PR feedback removed base.py --------- Co-authored-by: Omry Nachman <omry@wix.com> Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -44,7 +44,7 @@ class TestOpenRouterProvider:
|
||||
|
||||
# Should accept any model - OpenRouter handles validation
|
||||
assert provider.validate_model_name("gpt-4") is True
|
||||
assert provider.validate_model_name("claude-3-opus") is True
|
||||
assert provider.validate_model_name("claude-4-opus") is True
|
||||
assert provider.validate_model_name("any-model-name") is True
|
||||
assert provider.validate_model_name("GPT-4") is True
|
||||
assert provider.validate_model_name("unknown-model") is True
|
||||
@@ -71,26 +71,26 @@ class TestOpenRouterProvider:
|
||||
provider = OpenRouterProvider(api_key="test-key")
|
||||
|
||||
# Test alias resolution
|
||||
assert provider._resolve_model_name("opus") == "anthropic/claude-3-opus"
|
||||
assert provider._resolve_model_name("sonnet") == "anthropic/claude-3-sonnet"
|
||||
assert provider._resolve_model_name("opus") == "anthropic/claude-opus-4"
|
||||
assert provider._resolve_model_name("sonnet") == "anthropic/claude-sonnet-4"
|
||||
assert provider._resolve_model_name("o3") == "openai/o3"
|
||||
assert provider._resolve_model_name("o3-mini") == "openai/o3-mini"
|
||||
assert provider._resolve_model_name("o3mini") == "openai/o3-mini"
|
||||
assert provider._resolve_model_name("o4-mini") == "openai/o4-mini"
|
||||
assert provider._resolve_model_name("o4-mini-high") == "openai/o4-mini-high"
|
||||
assert provider._resolve_model_name("claude") == "anthropic/claude-3-sonnet"
|
||||
assert provider._resolve_model_name("claude") == "anthropic/claude-sonnet-4"
|
||||
assert provider._resolve_model_name("mistral") == "mistralai/mistral-large-2411"
|
||||
assert provider._resolve_model_name("deepseek") == "deepseek/deepseek-r1-0528"
|
||||
assert provider._resolve_model_name("r1") == "deepseek/deepseek-r1-0528"
|
||||
|
||||
# Test case-insensitive
|
||||
assert provider._resolve_model_name("OPUS") == "anthropic/claude-3-opus"
|
||||
assert provider._resolve_model_name("OPUS") == "anthropic/claude-opus-4"
|
||||
assert provider._resolve_model_name("O3") == "openai/o3"
|
||||
assert provider._resolve_model_name("Mistral") == "mistralai/mistral-large-2411"
|
||||
assert provider._resolve_model_name("CLAUDE") == "anthropic/claude-3-sonnet"
|
||||
assert provider._resolve_model_name("CLAUDE") == "anthropic/claude-sonnet-4"
|
||||
|
||||
# Test direct model names (should pass through unchanged)
|
||||
assert provider._resolve_model_name("anthropic/claude-3-opus") == "anthropic/claude-3-opus"
|
||||
assert provider._resolve_model_name("anthropic/claude-opus-4") == "anthropic/claude-opus-4"
|
||||
assert provider._resolve_model_name("openai/o3") == "openai/o3"
|
||||
|
||||
# Test unknown models pass through
|
||||
@@ -155,8 +155,8 @@ class TestOpenRouterAutoMode:
|
||||
"google/gemini-2.5-pro",
|
||||
"openai/o3",
|
||||
"openai/o3-mini",
|
||||
"anthropic/claude-3-opus",
|
||||
"anthropic/claude-3-sonnet",
|
||||
"anthropic/claude-opus-4",
|
||||
"anthropic/claude-sonnet-4",
|
||||
]
|
||||
|
||||
ModelProviderRegistry.register_provider(ProviderType.OPENROUTER, OpenRouterProvider)
|
||||
@@ -181,7 +181,7 @@ class TestOpenRouterAutoMode:
|
||||
os.environ.pop("OPENAI_API_KEY", None)
|
||||
os.environ["OPENROUTER_API_KEY"] = "test-openrouter-key"
|
||||
os.environ.pop("OPENROUTER_ALLOWED_MODELS", None)
|
||||
os.environ["OPENROUTER_ALLOWED_MODELS"] = "anthropic/claude-3-opus,google/gemini-2.5-flash"
|
||||
os.environ["OPENROUTER_ALLOWED_MODELS"] = "anthropic/claude-opus-4,google/gemini-2.5-flash"
|
||||
os.environ["DEFAULT_MODEL"] = "auto"
|
||||
|
||||
# Force reload to pick up new environment variable
|
||||
@@ -193,8 +193,8 @@ class TestOpenRouterAutoMode:
|
||||
mock_models = [
|
||||
"google/gemini-2.5-flash",
|
||||
"google/gemini-2.5-pro",
|
||||
"anthropic/claude-3-opus",
|
||||
"anthropic/claude-3-sonnet",
|
||||
"anthropic/claude-opus-4",
|
||||
"anthropic/claude-sonnet-4",
|
||||
]
|
||||
mock_registry.list_models.return_value = mock_models
|
||||
|
||||
@@ -212,7 +212,7 @@ class TestOpenRouterAutoMode:
|
||||
|
||||
assert len(available_models) > 0, "Should have some allowed models"
|
||||
|
||||
expected_allowed = {"google/gemini-2.5-flash", "anthropic/claude-3-opus"}
|
||||
expected_allowed = {"google/gemini-2.5-flash", "anthropic/claude-opus-4"}
|
||||
|
||||
assert (
|
||||
set(available_models.keys()) == expected_allowed
|
||||
@@ -263,7 +263,7 @@ class TestOpenRouterRegistry:
|
||||
# Should have loaded models
|
||||
models = registry.list_models()
|
||||
assert len(models) > 0
|
||||
assert "anthropic/claude-3-opus" in models
|
||||
assert "anthropic/claude-opus-4" in models
|
||||
assert "openai/o3" in models
|
||||
|
||||
# Should have loaded aliases
|
||||
@@ -282,13 +282,13 @@ class TestOpenRouterRegistry:
|
||||
# Test known model
|
||||
caps = registry.get_capabilities("opus")
|
||||
assert caps is not None
|
||||
assert caps.model_name == "anthropic/claude-3-opus"
|
||||
assert caps.model_name == "anthropic/claude-opus-4"
|
||||
assert caps.context_window == 200000 # Claude's context window
|
||||
|
||||
# Test using full model name
|
||||
caps = registry.get_capabilities("anthropic/claude-3-opus")
|
||||
caps = registry.get_capabilities("anthropic/claude-opus-4")
|
||||
assert caps is not None
|
||||
assert caps.model_name == "anthropic/claude-3-opus"
|
||||
assert caps.model_name == "anthropic/claude-opus-4"
|
||||
|
||||
# Test unknown model
|
||||
caps = registry.get_capabilities("non-existent-model")
|
||||
@@ -301,11 +301,11 @@ class TestOpenRouterRegistry:
|
||||
registry = OpenRouterModelRegistry()
|
||||
|
||||
# All these should resolve to Claude Sonnet
|
||||
sonnet_aliases = ["sonnet", "claude", "claude-sonnet", "claude3-sonnet"]
|
||||
sonnet_aliases = ["sonnet", "claude", "claude-sonnet", "claude4-sonnet"]
|
||||
for alias in sonnet_aliases:
|
||||
config = registry.resolve(alias)
|
||||
assert config is not None
|
||||
assert config.model_name == "anthropic/claude-3-sonnet"
|
||||
assert config.model_name == "anthropic/claude-sonnet-4"
|
||||
|
||||
|
||||
class TestOpenRouterFunctionality:
|
||||
|
||||
Reference in New Issue
Block a user