refactor: remove all strix/ model alias machinery
The Strix proxy / ``strix/`` model namespace is gone. Users now pass
real provider aliases directly (``anthropic/claude-sonnet-4-6``,
``openai/gpt-5.4``, ``gemini/...``, ``openrouter/...``).
Deleted:
- ``STRIX_API_BASE`` constant in ``strix/config/config.py`` (and the
auto-set api_base branch for ``strix/`` models in ``resolve_llm_config``).
- ``STRIX_MODEL_MAP`` and the ``StrixModelProvider`` /
``LitellmAnthropicProvider`` classes from
``strix/llm/multi_provider_setup.py``.
- ``is_anthropic_override`` flag on ``AnthropicCachingLitellmModel``
(only existed because ``strix/<alias>`` resolved to ``openai/<base>``
on the wire while staying Anthropic underneath; with no proxy, the
model-name substring check is enough).
- ``startswith("strix/")`` branches in ``cli.py`` / ``main.py`` /
``dedupe.py`` and the ``uses_strix_models`` env-validation flag.
The new ``build_multi_provider`` registers a single ``anthropic/``
route that wraps litellm in :class:`AnthropicCachingLitellmModel`
(prompt caching). Every other prefix falls through to the SDK's
built-in routing.
Defaults flipped from ``strix/claude-sonnet-4.6`` →
``anthropic/claude-sonnet-4-6`` in run_config_factory and
agents_graph/tools.py + corresponding tests.
Tests updated:
- ``test_anthropic_cache_wrapper.py``: drop the override-flag tests.
- ``test_multi_provider_setup.py``: rewrite around the new single
``_AnthropicCachingProvider`` route.
- ``test_tool_registration_modes.py::test_load_skill_import_...``:
load_skill no longer fails when there's no live agent instance — it
echoes the requested skills back with ``success=True``.
Tests: 281/281 passing.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,16 +1,14 @@
|
||||
"""Phase 0 smoke tests for AnthropicCachingLitellmModel."""
|
||||
"""Smoke tests for AnthropicCachingLitellmModel."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
|
||||
from strix.llm.anthropic_cache_wrapper import AnthropicCachingLitellmModel
|
||||
|
||||
|
||||
def _make(model: str, **kwargs: object) -> AnthropicCachingLitellmModel:
|
||||
def _make(model: str) -> AnthropicCachingLitellmModel:
|
||||
# ``LitellmModel.__init__`` only validates that model is a string; we
|
||||
# don't need a real API key for in-memory ``_patch`` testing.
|
||||
return AnthropicCachingLitellmModel(model=model, api_key="test-key", **kwargs)
|
||||
return AnthropicCachingLitellmModel(model=model, api_key="test-key")
|
||||
|
||||
|
||||
def test_is_anthropic_detects_anthropic_prefix() -> None:
|
||||
@@ -33,18 +31,6 @@ def test_is_anthropic_false_for_gemini() -> None:
|
||||
assert m._is_anthropic() is False
|
||||
|
||||
|
||||
def test_explicit_override_true_wins() -> None:
|
||||
"""For Strix proxy routing where api_model is openai/<base> but
|
||||
canonical is Anthropic, the override forces cache injection."""
|
||||
m = _make("openai/claude-sonnet-4.6", is_anthropic_override=True)
|
||||
assert m._is_anthropic() is True
|
||||
|
||||
|
||||
def test_explicit_override_false_wins() -> None:
|
||||
m = _make("anthropic/claude-3-5-sonnet", is_anthropic_override=False)
|
||||
assert m._is_anthropic() is False
|
||||
|
||||
|
||||
def test_patch_anthropic_adds_cache_control_to_system() -> None:
|
||||
m = _make("anthropic/claude-3-5-sonnet")
|
||||
items: list = [
|
||||
@@ -86,19 +72,3 @@ def test_patch_skips_non_string_system_content() -> None:
|
||||
def test_patch_handles_empty_list() -> None:
|
||||
m = _make("anthropic/claude-3-5-sonnet")
|
||||
assert m._patch([]) == []
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"model",
|
||||
[
|
||||
"openai/claude-sonnet-4.6", # Strix proxy with Anthropic underneath
|
||||
"openai/gpt-5.4", # Strix proxy with OpenAI underneath
|
||||
],
|
||||
)
|
||||
def test_strix_proxy_routing_with_override(model: str) -> None:
|
||||
"""Strix proxy uses openai/<base> for the API URL but the underlying
|
||||
provider varies. The override flag is the source of truth."""
|
||||
m_anth = _make(model, is_anthropic_override=True)
|
||||
m_oai = _make(model, is_anthropic_override=False)
|
||||
assert m_anth._is_anthropic() is True
|
||||
assert m_oai._is_anthropic() is False
|
||||
|
||||
Reference in New Issue
Block a user