97e91a83f3
Ruff / Ruff (push) Has been cancelled
Test / Core Tests (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.10) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.11) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.12) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.13) (push) Has been cancelled
Test / Offline Coverage Tests (Python 3.9) (push) Has been cancelled
Test / Full Coverage (Python 3.11) (push) Has been cancelled
Test / Core Provider Tests (OpenAI) (push) Has been cancelled
Test / Core Provider Tests (Anthropic) (push) Has been cancelled
Test / Core Provider Tests (Google) (push) Has been cancelled
Test / Core Provider Tests (Other) (push) Has been cancelled
Test / Anthropic Tests (push) Has been cancelled
Test / Gemini Tests (push) Has been cancelled
Test / Google GenAI Tests (push) Has been cancelled
Test / Vertex AI Tests (push) Has been cancelled
Test / OpenAI Tests (push) Has been cancelled
Test / Writer Tests (push) Has been cancelled
Test / Auto Client Tests (push) Has been cancelled
ty / type-check (push) Has been cancelled
68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
"""Provider-specific tests for Bedrock v2 client factory."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from instructor import Mode
|
|
|
|
|
|
class TestBedrockClientWithSDK:
|
|
"""Tests for Bedrock client factory that require botocore."""
|
|
|
|
@pytest.fixture
|
|
def bedrock_available(self):
|
|
"""Check if botocore is available."""
|
|
try:
|
|
from botocore.client import BaseClient # noqa: F401
|
|
|
|
return True
|
|
except ImportError:
|
|
return False
|
|
|
|
def test_from_bedrock_raises_without_sdk(self, bedrock_available):
|
|
"""from_bedrock should raise when botocore is missing."""
|
|
if bedrock_available:
|
|
pytest.skip(
|
|
"botocore is installed" # ty: ignore[too-many-positional-arguments]
|
|
)
|
|
|
|
from instructor.v2.providers.bedrock.client import from_bedrock
|
|
from instructor.core.exceptions import ClientError
|
|
|
|
with pytest.raises(ClientError, match="botocore is not installed"):
|
|
from_bedrock(None) # ty: ignore[no-matching-overload]
|
|
|
|
def test_from_bedrock_with_invalid_client(self, bedrock_available):
|
|
"""from_bedrock should reject non-BaseClient objects."""
|
|
if not bedrock_available:
|
|
pytest.skip(
|
|
"botocore not installed" # ty: ignore[too-many-positional-arguments]
|
|
)
|
|
|
|
from instructor.v2.providers.bedrock.client import from_bedrock
|
|
from instructor.core.exceptions import ClientError
|
|
|
|
with pytest.raises(ClientError, match="BaseClient"):
|
|
from_bedrock("not a client") # ty: ignore[no-matching-overload]
|
|
|
|
def test_from_bedrock_with_invalid_mode(self, bedrock_available):
|
|
"""from_bedrock should raise for unsupported modes."""
|
|
if not bedrock_available:
|
|
pytest.skip(
|
|
"botocore not installed" # ty: ignore[too-many-positional-arguments]
|
|
)
|
|
|
|
from botocore.client import BaseClient
|
|
from instructor.v2.providers.bedrock.client import from_bedrock
|
|
from instructor.core.exceptions import ModeError
|
|
|
|
def _converse(**_kwargs):
|
|
return {}
|
|
|
|
client = BaseClient.__new__(BaseClient)
|
|
client.converse = _converse # type: ignore[assignment]
|
|
|
|
with pytest.raises(ModeError):
|
|
from_bedrock(client, mode=Mode.JSON_SCHEMA)
|