48 lines
2.2 KiB
Python
48 lines
2.2 KiB
Python
"""Anthropic-specific ctx halving tests moved from tests/test_ctx_halving_fix.py."""
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# build_anthropic_kwargs — output cap clamping
|
|
# ---------------------------------------------------------------------------
|
|
|
|
class TestBuildAnthropicKwargsClamping:
|
|
"""The context_length clamp only fires when output ceiling > window.
|
|
For standard Anthropic models (output ceiling < window) it must not fire.
|
|
"""
|
|
|
|
def _build(self, model, max_tokens=None, context_length=None):
|
|
from hermes_agent_anthropic import build_anthropic_kwargs
|
|
return build_anthropic_kwargs(
|
|
model=model,
|
|
messages=[{"role": "user", "content": "hi"}],
|
|
tools=None,
|
|
max_tokens=max_tokens,
|
|
reasoning_config=None,
|
|
context_length=context_length,
|
|
)
|
|
|
|
def test_no_clamping_when_output_ceiling_fits_in_window(self):
|
|
"""Opus 4.6 native output (128K) < context window (200K) — no clamping."""
|
|
kwargs = self._build("claude-opus-4-6", context_length=200_000)
|
|
assert kwargs["max_tokens"] == 128_000
|
|
|
|
def test_clamping_fires_for_tiny_custom_window(self):
|
|
"""When context_length is 8K (local model), output cap is clamped to 7999."""
|
|
kwargs = self._build("claude-opus-4-6", context_length=8_000)
|
|
assert kwargs["max_tokens"] == 7_999
|
|
|
|
def test_explicit_max_tokens_respected_when_within_window(self):
|
|
"""Explicit max_tokens smaller than window passes through unchanged."""
|
|
kwargs = self._build("claude-opus-4-6", max_tokens=4096, context_length=200_000)
|
|
assert kwargs["max_tokens"] == 4096
|
|
|
|
def test_explicit_max_tokens_clamped_when_exceeds_window(self):
|
|
"""Explicit max_tokens larger than a small window is clamped."""
|
|
kwargs = self._build("claude-opus-4-6", max_tokens=32_768, context_length=16_000)
|
|
assert kwargs["max_tokens"] == 15_999
|
|
|
|
def test_no_context_length_uses_native_ceiling(self):
|
|
"""Without context_length the native output ceiling is used directly."""
|
|
kwargs = self._build("claude-sonnet-4-6")
|
|
assert kwargs["max_tokens"] == 64_000
|