feat: Add OpenAI API type configuration and update provider settings
This commit is contained in:
@@ -241,7 +241,7 @@ def test_inline_fallback_reasoning_effort_does_not_inherit_primary() -> None:
|
||||
signature = provider_signature(config)
|
||||
fallback_signatures = signature[-1]
|
||||
|
||||
assert fallback_signatures[0][11] is None
|
||||
assert fallback_signatures[0][12] is None
|
||||
|
||||
|
||||
# -- FallbackProvider tests --
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import pytest
|
||||
|
||||
from nanobot.config.schema import Config
|
||||
|
||||
|
||||
@@ -12,6 +14,28 @@ def test_resolve_preset_returns_defaults_when_no_preset() -> None:
|
||||
assert resolved.reasoning_effort == config.agents.defaults.reasoning_effort
|
||||
|
||||
|
||||
def test_provider_api_type_accepts_exact_values_only() -> None:
|
||||
config = Config.model_validate({
|
||||
"providers": {
|
||||
"openai": {
|
||||
"apiKey": "sk-test",
|
||||
"apiType": "responses",
|
||||
}
|
||||
}
|
||||
})
|
||||
assert config.providers.openai.api_type == "responses"
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
Config.model_validate({
|
||||
"providers": {
|
||||
"openai": {
|
||||
"apiKey": "sk-test",
|
||||
"apiType": "response",
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
def test_legacy_defaults_config_without_presets_still_resolves() -> None:
|
||||
config = Config.model_validate({
|
||||
"agents": {
|
||||
|
||||
@@ -20,6 +20,7 @@ def _make_copilot_provider() -> OpenAICompatProvider:
|
||||
p.default_model = "github_copilot/gpt-5.4-mini"
|
||||
p._spec = find_by_name("github_copilot")
|
||||
p._effective_base = "https://api.githubcopilot.com"
|
||||
p._api_type = "auto"
|
||||
p._responses_failures = {}
|
||||
p._responses_tripped_at = {}
|
||||
return p
|
||||
|
||||
@@ -18,6 +18,7 @@ def provider():
|
||||
p.default_model = "gpt-5"
|
||||
p._spec = type("Spec", (), {"name": "openai"})()
|
||||
p._effective_base = "https://api.openai.com/v1"
|
||||
p._api_type = "auto"
|
||||
p._responses_failures = {}
|
||||
p._responses_tripped_at = {}
|
||||
return p
|
||||
@@ -27,6 +28,17 @@ def test_responses_api_available_by_default(provider):
|
||||
assert provider._should_use_responses_api("gpt-5", None) is True
|
||||
|
||||
|
||||
def test_api_type_chat_completions_disables_responses(provider):
|
||||
provider._api_type = "chat_completions"
|
||||
assert provider._should_use_responses_api("gpt-5", None) is False
|
||||
|
||||
|
||||
def test_api_type_responses_forces_responses_for_openai(provider):
|
||||
provider.default_model = "gpt-4o"
|
||||
provider._api_type = "responses"
|
||||
assert provider._should_use_responses_api("gpt-4o", None) is True
|
||||
|
||||
|
||||
def test_circuit_opens_after_threshold(provider):
|
||||
for _ in range(_RESPONSES_FAILURE_THRESHOLD):
|
||||
provider._record_responses_failure("gpt-5", None)
|
||||
|
||||
Reference in New Issue
Block a user