mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-04-09 12:43:35 +00:00
66 lines
2.0 KiB
Python
66 lines
2.0 KiB
Python
"""Tests for Anthropic provider thinking / reasoning_effort modes."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import patch
|
|
|
|
from nanobot.providers.anthropic_provider import AnthropicProvider
|
|
|
|
|
|
def _make_provider(model: str = "claude-sonnet-4-6") -> AnthropicProvider:
|
|
with patch("anthropic.AsyncAnthropic"):
|
|
return AnthropicProvider(api_key="sk-test", default_model=model)
|
|
|
|
|
|
def _build(provider: AnthropicProvider, reasoning_effort: str | None, **overrides):
|
|
defaults = dict(
|
|
messages=[{"role": "user", "content": "hello"}],
|
|
tools=None,
|
|
model=None,
|
|
max_tokens=4096,
|
|
temperature=0.7,
|
|
reasoning_effort=reasoning_effort,
|
|
tool_choice=None,
|
|
supports_caching=False,
|
|
)
|
|
defaults.update(overrides)
|
|
return provider._build_kwargs(**defaults)
|
|
|
|
|
|
def test_adaptive_sets_type_adaptive() -> None:
|
|
kw = _build(_make_provider(), "adaptive")
|
|
assert kw["thinking"] == {"type": "adaptive"}
|
|
|
|
|
|
def test_adaptive_forces_temperature_one() -> None:
|
|
kw = _build(_make_provider(), "adaptive")
|
|
assert kw["temperature"] == 1.0
|
|
|
|
|
|
def test_adaptive_does_not_inflate_max_tokens() -> None:
|
|
kw = _build(_make_provider(), "adaptive", max_tokens=2048)
|
|
assert kw["max_tokens"] == 2048
|
|
|
|
|
|
def test_adaptive_no_budget_tokens() -> None:
|
|
kw = _build(_make_provider(), "adaptive")
|
|
assert "budget_tokens" not in kw["thinking"]
|
|
|
|
|
|
def test_high_uses_enabled_with_budget() -> None:
|
|
kw = _build(_make_provider(), "high", max_tokens=4096)
|
|
assert kw["thinking"]["type"] == "enabled"
|
|
assert kw["thinking"]["budget_tokens"] == max(8192, 4096)
|
|
assert kw["max_tokens"] >= kw["thinking"]["budget_tokens"] + 4096
|
|
|
|
|
|
def test_low_uses_small_budget() -> None:
|
|
kw = _build(_make_provider(), "low")
|
|
assert kw["thinking"] == {"type": "enabled", "budget_tokens": 1024}
|
|
|
|
|
|
def test_none_does_not_enable_thinking() -> None:
|
|
kw = _build(_make_provider(), None)
|
|
assert "thinking" not in kw
|
|
assert kw["temperature"] == 0.7
|