File size: 5,893 Bytes
6172a47 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 | from unittest.mock import patch
import pytest
from api.models.anthropic import Message, MessagesRequest, TokenCountRequest
from config.settings import Settings
@pytest.fixture
def mock_settings():
settings = Settings()
settings.model = "nvidia_nim/target-model-from-settings"
settings.model_opus = None
settings.model_sonnet = None
settings.model_haiku = None
return settings
def test_messages_request_map_model_claude_to_default(mock_settings):
with patch("api.models.anthropic.get_settings", return_value=mock_settings):
request = MessagesRequest(
model="claude-3-opus",
max_tokens=100,
messages=[Message(role="user", content="hello")],
)
assert request.model == "target-model-from-settings"
assert request.original_model == "claude-3-opus"
def test_messages_request_map_model_with_provider_prefix(mock_settings):
with patch("api.models.anthropic.get_settings", return_value=mock_settings):
request = MessagesRequest(
model="anthropic/claude-3-haiku",
max_tokens=100,
messages=[Message(role="user", content="hello")],
)
assert request.model == "target-model-from-settings"
def test_token_count_request_model_validation(mock_settings):
with patch("api.models.anthropic.get_settings", return_value=mock_settings):
request = TokenCountRequest(
model="claude-3-sonnet", messages=[Message(role="user", content="hello")]
)
assert request.model == "target-model-from-settings"
def test_messages_request_model_mapping_logs(mock_settings):
with (
patch("api.models.anthropic.get_settings", return_value=mock_settings),
patch("api.models.anthropic.logger.debug") as mock_log,
):
MessagesRequest(
model="claude-2.1",
max_tokens=100,
messages=[Message(role="user", content="hello")],
)
mock_log.assert_called()
args = mock_log.call_args[0][0]
assert "MODEL MAPPING" in args
assert "claude-2.1" in args
assert "target-model-from-settings" in args
def test_messages_request_resolved_provider_model_default(mock_settings):
"""resolved_provider_model is set to the full model string."""
with patch("api.models.anthropic.get_settings", return_value=mock_settings):
request = MessagesRequest(
model="claude-3-opus",
max_tokens=100,
messages=[Message(role="user", content="hello")],
)
assert (
request.resolved_provider_model == "nvidia_nim/target-model-from-settings"
)
def test_messages_request_model_aware_opus_override():
"""Opus model routes to MODEL_OPUS when set."""
settings = Settings()
settings.model = "nvidia_nim/fallback-model"
settings.model_opus = "open_router/deepseek/deepseek-r1"
with patch("api.models.anthropic.get_settings", return_value=settings):
request = MessagesRequest(
model="claude-opus-4-20250514",
max_tokens=100,
messages=[Message(role="user", content="hello")],
)
assert request.model == "deepseek/deepseek-r1"
assert request.resolved_provider_model == "open_router/deepseek/deepseek-r1"
assert request.original_model == "claude-opus-4-20250514"
def test_messages_request_model_aware_haiku_override():
"""Haiku model routes to MODEL_HAIKU when set."""
settings = Settings()
settings.model = "nvidia_nim/fallback-model"
settings.model_haiku = "lmstudio/qwen2.5-7b"
with patch("api.models.anthropic.get_settings", return_value=settings):
request = MessagesRequest(
model="claude-3-haiku-20240307",
max_tokens=100,
messages=[Message(role="user", content="hello")],
)
assert request.model == "qwen2.5-7b"
assert request.resolved_provider_model == "lmstudio/qwen2.5-7b"
def test_messages_request_model_aware_sonnet_override():
"""Sonnet model routes to MODEL_SONNET when set."""
settings = Settings()
settings.model = "nvidia_nim/fallback-model"
settings.model_sonnet = "nvidia_nim/meta/llama-3.3-70b-instruct"
with patch("api.models.anthropic.get_settings", return_value=settings):
request = MessagesRequest(
model="claude-sonnet-4-20250514",
max_tokens=100,
messages=[Message(role="user", content="hello")],
)
assert request.model == "meta/llama-3.3-70b-instruct"
assert (
request.resolved_provider_model == "nvidia_nim/meta/llama-3.3-70b-instruct"
)
def test_messages_request_model_fallback_when_not_set():
"""When model override is None, falls back to MODEL."""
settings = Settings()
settings.model = "nvidia_nim/fallback-model"
settings.model_opus = None
settings.model_sonnet = None
settings.model_haiku = None
# model_opus is None
with patch("api.models.anthropic.get_settings", return_value=settings):
request = MessagesRequest(
model="claude-opus-4-20250514",
max_tokens=100,
messages=[Message(role="user", content="hello")],
)
assert request.model == "fallback-model"
assert request.resolved_provider_model == "nvidia_nim/fallback-model"
def test_token_count_request_model_aware():
"""TokenCountRequest also uses model-aware resolution."""
settings = Settings()
settings.model = "nvidia_nim/fallback-model"
settings.model_haiku = "lmstudio/qwen2.5-7b"
with patch("api.models.anthropic.get_settings", return_value=settings):
request = TokenCountRequest(
model="claude-3-haiku-20240307",
messages=[Message(role="user", content="hello")],
)
assert request.model == "qwen2.5-7b"
|