Rebase onto upstream (a4d95fd)
#12
@@ -460,3 +460,24 @@ def find_by_name(name: str) -> ProviderSpec | None:
|
|||||||
if spec.name == name:
|
if spec.name == name:
|
||||||
return spec
|
return spec
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def should_use_oauth_provider(api_key: str | None, model: str) -> bool:
|
||||||
|
"""Determine if OAuth provider should be used.
|
||||||
|
|
||||||
|
OAuth provider is used when:
|
||||||
|
1. API key is an OAuth token (contains 'sk-ant-oat')
|
||||||
|
2. Model is an Anthropic model (contains 'claude' or 'anthropic')
|
||||||
|
"""
|
||||||
|
if not api_key:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if "sk-ant-oat" not in api_key:
|
||||||
|
return False
|
||||||
|
|
||||||
|
model_lower = model.lower()
|
||||||
|
anthropic_spec = find_by_name("anthropic")
|
||||||
|
if anthropic_spec:
|
||||||
|
return any(kw in model_lower for kw in anthropic_spec.keywords)
|
||||||
|
|
||||||
|
return False
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
"""Test OAuth detection in provider registry."""
|
||||||
|
import pytest
|
||||||
|
from nanobot.providers.registry import should_use_oauth_provider
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_use_oauth_for_oat_token():
|
||||||
|
"""OAuth provider should be used for sk-ant-oat tokens."""
|
||||||
|
assert should_use_oauth_provider("sk-ant-oat01-xxx", "anthropic/claude-opus-4-5") is True
|
||||||
|
assert should_use_oauth_provider("sk-ant-oat01-xxx", "claude-sonnet-4") is True
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_not_use_oauth_for_regular_key():
|
||||||
|
"""Regular API keys should not use OAuth provider."""
|
||||||
|
assert should_use_oauth_provider("sk-ant-api03-xxx", "claude-opus-4-5") is False
|
||||||
|
assert should_use_oauth_provider("sk-or-v1-xxx", "anthropic/claude-opus-4-5") is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_should_not_use_oauth_for_non_anthropic():
|
||||||
|
"""Non-Anthropic models should not use OAuth provider."""
|
||||||
|
assert should_use_oauth_provider("sk-ant-oat01-xxx", "gpt-4") is False
|
||||||
|
assert should_use_oauth_provider("sk-ant-oat01-xxx", "deepseek/deepseek-chat") is False
|
||||||
Reference in New Issue
Block a user