Merge pull request #37738 from NousResearch/bb/statusbar-model-menu
feat(desktop): inline model picker in the status bar
This commit is contained in:
commit
54343bcade
18 changed files with 1247 additions and 83 deletions
|
|
@ -128,11 +128,11 @@ class TestPriorityProcessingModels(unittest.TestCase):
|
|||
assert model_supports_fast_mode(model), f"{model} should support fast mode"
|
||||
|
||||
def test_all_anthropic_models_supported(self):
|
||||
"""Per Anthropic docs, fast mode is currently Opus 4.6 only.
|
||||
"""The speed=fast parameter is gated to Opus 4.6.
|
||||
|
||||
Sending speed=fast to Opus 4.7, Sonnet, or Haiku returns HTTP 400.
|
||||
Pre-fix this test asserted all Claude variants supported fast mode,
|
||||
which mirrored the bug rather than the API contract.
|
||||
(Opus 4.8's fast offering is a separate ``…-fast`` model id selected
|
||||
via the model field, not this parameter — see the adapter test.)
|
||||
"""
|
||||
from hermes_cli.models import model_supports_fast_mode
|
||||
|
||||
|
|
@ -144,16 +144,15 @@ class TestPriorityProcessingModels(unittest.TestCase):
|
|||
for model in supported:
|
||||
assert model_supports_fast_mode(model), f"{model} should support fast mode"
|
||||
|
||||
# Unsupported per Anthropic API: Opus 4.7, Sonnet, Haiku
|
||||
# Unsupported per Anthropic API: Opus 4.7/4.8, Sonnet, Haiku
|
||||
unsupported = [
|
||||
"claude-opus-4-7",
|
||||
"claude-opus-4-7", "claude-opus-4-8", "claude-opus-4.8",
|
||||
"claude-sonnet-4-6", "claude-sonnet-4.6", "claude-sonnet-4",
|
||||
"claude-haiku-4-5", "claude-3-5-haiku",
|
||||
]
|
||||
for model in unsupported:
|
||||
assert not model_supports_fast_mode(model), (
|
||||
f"{model} should NOT support fast mode — Anthropic restricts "
|
||||
f"speed=fast to Opus 4.6"
|
||||
f"{model} should NOT support the speed=fast parameter"
|
||||
)
|
||||
|
||||
def test_codex_models_excluded(self):
|
||||
|
|
@ -275,10 +274,11 @@ class TestAnthropicFastMode(unittest.TestCase):
|
|||
assert model_supports_fast_mode("anthropic/claude-opus-4.6") is True
|
||||
|
||||
def test_anthropic_non_opus46_models_excluded(self):
|
||||
"""Anthropic restricts fast mode to Opus 4.6 — others must be excluded.
|
||||
"""The speed=fast parameter is gated to Opus 4.6 — others excluded.
|
||||
|
||||
Per https://platform.claude.com/docs/en/build-with-claude/fast-mode,
|
||||
sending speed=fast to Opus 4.7, Sonnet, or Haiku returns HTTP 400.
|
||||
Opus 4.8 uses a separate ``…-fast`` model id, not this parameter.
|
||||
"""
|
||||
from hermes_cli.models import model_supports_fast_mode
|
||||
|
||||
|
|
@ -286,6 +286,7 @@ class TestAnthropicFastMode(unittest.TestCase):
|
|||
assert model_supports_fast_mode("claude-sonnet-4.6") is False
|
||||
assert model_supports_fast_mode("claude-haiku-4-5") is False
|
||||
assert model_supports_fast_mode("claude-opus-4-7") is False
|
||||
assert model_supports_fast_mode("claude-opus-4-8") is False
|
||||
assert model_supports_fast_mode("anthropic/claude-sonnet-4.6") is False
|
||||
assert model_supports_fast_mode("anthropic/claude-opus-4-7") is False
|
||||
|
||||
|
|
@ -314,13 +315,15 @@ class TestAnthropicFastMode(unittest.TestCase):
|
|||
assert result == {"speed": "fast"}
|
||||
|
||||
def test_resolve_overrides_returns_none_for_unsupported_claude(self):
|
||||
"""Opus 4.7 and other Claude models don't support fast mode (API 400s).
|
||||
"""Opus 4.7/4.8 and other Claude models don't take the speed param.
|
||||
|
||||
Per Anthropic docs, fast mode is currently Opus 4.6 only.
|
||||
The speed=fast parameter is Opus 4.6 only (Opus 4.8 uses a separate
|
||||
``…-fast`` model id instead).
|
||||
"""
|
||||
from hermes_cli.models import resolve_fast_mode_overrides
|
||||
|
||||
assert resolve_fast_mode_overrides("claude-opus-4-7") is None
|
||||
assert resolve_fast_mode_overrides("claude-opus-4-8") is None
|
||||
assert resolve_fast_mode_overrides("claude-sonnet-4-6") is None
|
||||
assert resolve_fast_mode_overrides("claude-haiku-4-5") is None
|
||||
|
||||
|
|
@ -332,7 +335,7 @@ class TestAnthropicFastMode(unittest.TestCase):
|
|||
assert result == {"service_tier": "priority"}
|
||||
|
||||
def test_is_anthropic_fast_model(self):
|
||||
"""Fast mode is currently Opus 4.6 only — other Claude variants must be excluded."""
|
||||
"""The speed=fast parameter is Opus 4.6 only — other Claude excluded."""
|
||||
from hermes_cli.models import _is_anthropic_fast_model
|
||||
|
||||
# Supported: Opus 4.6 in any form
|
||||
|
|
@ -341,8 +344,9 @@ class TestAnthropicFastMode(unittest.TestCase):
|
|||
assert _is_anthropic_fast_model("anthropic/claude-opus-4-6") is True
|
||||
assert _is_anthropic_fast_model("claude-opus-4.6:fast") is True
|
||||
|
||||
# Unsupported per Anthropic API contract — would 400 if we sent speed=fast
|
||||
# Unsupported — would 400 (4.7) or uses a separate model id (4.8)
|
||||
assert _is_anthropic_fast_model("claude-opus-4-7") is False
|
||||
assert _is_anthropic_fast_model("claude-opus-4-8") is False
|
||||
assert _is_anthropic_fast_model("claude-sonnet-4-6") is False
|
||||
assert _is_anthropic_fast_model("claude-haiku-4-5") is False
|
||||
|
||||
|
|
@ -368,7 +372,7 @@ class TestAnthropicFastMode(unittest.TestCase):
|
|||
assert cli_mod.HermesCLI._fast_command_available(stub) is False
|
||||
|
||||
def test_fast_command_hidden_for_anthropic_opus_47(self):
|
||||
"""Opus 4.7 doesn't support fast mode — /fast must be hidden."""
|
||||
"""Opus 4.7 doesn't take the speed=fast parameter — /fast must hide."""
|
||||
cli_mod = _import_cli()
|
||||
stub = SimpleNamespace(
|
||||
provider="anthropic", requested_provider="anthropic",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue