Rebase onto upstream (a4d95fd)
#12
@@ -460,3 +460,24 @@ def find_by_name(name: str) -> ProviderSpec | None:
|
||||
if spec.name == name:
|
||||
return spec
|
||||
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