mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-05-20 08:32:25 +00:00
114 lines
3.5 KiB
Python
114 lines
3.5 KiB
Python
from nanobot.config.schema import Config
|
|
|
|
|
|
def test_resolve_preset_returns_defaults_when_no_preset() -> None:
|
|
config = Config()
|
|
resolved = config.resolve_preset()
|
|
assert resolved.model == config.agents.defaults.model
|
|
assert resolved.provider == config.agents.defaults.provider
|
|
assert resolved.max_tokens == config.agents.defaults.max_tokens
|
|
assert resolved.context_window_tokens == config.agents.defaults.context_window_tokens
|
|
assert resolved.temperature == config.agents.defaults.temperature
|
|
assert resolved.reasoning_effort == config.agents.defaults.reasoning_effort
|
|
|
|
|
|
def test_resolve_preset_returns_active_preset() -> None:
|
|
config = Config.model_validate({
|
|
"model_presets": {
|
|
"fast": {
|
|
"model": "openai/gpt-4.1",
|
|
"provider": "openai",
|
|
"maxTokens": 4096,
|
|
"contextWindowTokens": 32_768,
|
|
"temperature": 0.5,
|
|
"reasoningEffort": "low",
|
|
}
|
|
},
|
|
"agents": {
|
|
"defaults": {
|
|
"modelPreset": "fast",
|
|
}
|
|
},
|
|
})
|
|
resolved = config.resolve_preset()
|
|
assert resolved.model == "openai/gpt-4.1"
|
|
assert resolved.provider == "openai"
|
|
assert resolved.max_tokens == 4096
|
|
assert resolved.context_window_tokens == 32_768
|
|
assert resolved.temperature == 0.5
|
|
assert resolved.reasoning_effort == "low"
|
|
|
|
|
|
def test_resolve_preset_can_target_named_preset_without_activating() -> None:
|
|
config = Config.model_validate({
|
|
"model_presets": {
|
|
"fast": {"model": "openai/gpt-4.1", "provider": "openai"},
|
|
"deep": {"model": "anthropic/claude-opus-4-5", "provider": "anthropic"},
|
|
},
|
|
"agents": {"defaults": {"modelPreset": "fast"}},
|
|
})
|
|
|
|
resolved = config.resolve_preset("deep")
|
|
assert resolved.model == "anthropic/claude-opus-4-5"
|
|
assert resolved.provider == "anthropic"
|
|
|
|
|
|
def test_validator_rejects_unknown_preset() -> None:
|
|
import pytest
|
|
with pytest.raises(ValueError, match="model_preset 'unknown' not found in model_presets"):
|
|
Config.model_validate({
|
|
"agents": {
|
|
"defaults": {
|
|
"modelPreset": "unknown",
|
|
}
|
|
}
|
|
})
|
|
|
|
|
|
def test_resolve_preset_rejects_unknown_named_preset() -> None:
|
|
import pytest
|
|
with pytest.raises(KeyError, match="model_preset 'missing' not found"):
|
|
Config().resolve_preset("missing")
|
|
|
|
|
|
def test_match_provider_uses_preset_model() -> None:
|
|
config = Config.model_validate({
|
|
"providers": {
|
|
"openai": {"apiKey": "sk-test"},
|
|
},
|
|
"model_presets": {
|
|
"fast": {
|
|
"model": "openai/gpt-4.1",
|
|
"provider": "openai",
|
|
}
|
|
},
|
|
"agents": {
|
|
"defaults": {
|
|
"modelPreset": "fast",
|
|
}
|
|
},
|
|
})
|
|
name = config.get_provider_name()
|
|
assert name == "openai"
|
|
|
|
|
|
def test_match_provider_uses_preset_provider_when_forced() -> None:
|
|
config = Config.model_validate({
|
|
"providers": {
|
|
"anthropic": {"apiKey": "sk-test"},
|
|
},
|
|
"model_presets": {
|
|
"fast": {
|
|
"model": "anthropic/claude-opus-4-5",
|
|
"provider": "anthropic",
|
|
}
|
|
},
|
|
"agents": {
|
|
"defaults": {
|
|
"modelPreset": "fast",
|
|
}
|
|
},
|
|
})
|
|
name = config.get_provider_name()
|
|
assert name == "anthropic"
|