Merge pull request #42109 from BerriAI/litellm_migrate_tests_p5

test(llms): migrate phase 5 provider unit tests to tests/unit
This commit is contained in:
yuneng-jiang 2026-09-20 04:00:48 -07:00 committed by GitHub
commit bfc805b372
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 124 additions and 182 deletions

View file

@ -1,158 +0,0 @@
import json
import os
from unittest.mock import Mock, patch
import pytest
import litellm
from litellm.llms.custom_httpx.http_handler import HTTPHandler, AsyncHTTPHandler
# Mock response for Bedrock image generation
mock_image_response = {"images": ["base64_encoded_image_data"], "error": None}
class TestBedrockImageGeneration:
def test_image_generation_with_api_key_bearer_token(self):
"""Test image generation with bearer token authentication"""
test_api_key = "test-bearer-token-12345"
model = "bedrock/stability.sd3-large-v1:0"
prompt = "A cute baby sea otter"
with patch(
"litellm.llms.bedrock.image_generation.image_handler.BedrockImageGeneration.image_generation"
) as mock_bedrock_image_gen:
# Setup mock response
mock_image_response_obj = litellm.ImageResponse()
mock_image_response_obj.data = [{"url": "https://example.com/image.jpg"}]
mock_bedrock_image_gen.return_value = mock_image_response_obj
response = litellm.image_generation(
model=model,
prompt=prompt,
aws_region_name="us-west-2",
api_key=test_api_key,
)
assert response is not None
assert len(response.data) > 0
mock_bedrock_image_gen.assert_called_once()
for call in mock_bedrock_image_gen.call_args_list:
if "headers" in call.kwargs:
headers = call.kwargs["headers"]
if (
"Authorization" in headers
and headers["Authorization"] == f"Bearer {test_api_key}"
):
break
def test_image_generation_with_env_variable_bearer_token(self, monkeypatch):
"""Test image generation with bearer token from environment variable"""
test_api_key = "env-bearer-token-12345"
model = "bedrock/stability.sd3-large-v1:0"
prompt = "A cute baby sea otter"
# Mock the environment variable
with (
patch.dict(os.environ, {"AWS_BEARER_TOKEN_BEDROCK": test_api_key}),
patch(
"litellm.llms.bedrock.image_generation.image_handler.BedrockImageGeneration.image_generation"
) as mock_bedrock_image_gen,
):
mock_image_response_obj = litellm.ImageResponse()
mock_image_response_obj.data = [{"url": "https://example.com/image.jpg"}]
mock_bedrock_image_gen.return_value = mock_image_response_obj
response = litellm.image_generation(
model=model, prompt=prompt, aws_region_name="us-west-2"
)
assert response is not None
assert len(response.data) > 0
mock_bedrock_image_gen.assert_called_once()
for call in mock_bedrock_image_gen.call_args_list:
if "headers" in call.kwargs:
headers = call.kwargs["headers"]
if (
"Authorization" in headers
and headers["Authorization"] == f"Bearer {test_api_key}"
):
break
@pytest.mark.asyncio
async def test_async_image_generation_with_bearer_token(self):
"""Test async image generation with bearer token authentication"""
test_api_key = "async-bearer-token-12345"
model = "bedrock/stability.sd3-large-v1:0"
prompt = "A cute baby sea otter"
with patch(
"litellm.llms.bedrock.image_generation.image_handler.BedrockImageGeneration.async_image_generation"
) as mock_async_bedrock_image_gen:
mock_image_response_obj = litellm.ImageResponse()
mock_image_response_obj.data = [{"url": "https://example.com/image.jpg"}]
mock_async_bedrock_image_gen.return_value = mock_image_response_obj
# Call async image generation with api_key parameter
response = await litellm.aimage_generation(
model=model,
prompt=prompt,
aws_region_name="us-west-2",
api_key=test_api_key,
)
assert response is not None
assert len(response.data) > 0
mock_async_bedrock_image_gen.assert_called_once()
for call in mock_async_bedrock_image_gen.call_args_list:
if "headers" in call.kwargs:
headers = call.kwargs["headers"]
if (
"Authorization" in headers
and headers["Authorization"] == f"Bearer {test_api_key}"
):
break
def test_image_generation_with_sigv4(self):
"""Test image generation falls back to SigV4 auth when no bearer token is provided"""
model = "bedrock/stability.sd3-large-v1:0"
prompt = "A cute baby sea otter"
with patch(
"litellm.llms.bedrock.image_generation.image_handler.BedrockImageGeneration.image_generation"
) as mock_bedrock_image_gen:
mock_image_response_obj = litellm.ImageResponse()
mock_image_response_obj.data = [{"url": "https://example.com/image.jpg"}]
mock_bedrock_image_gen.return_value = mock_image_response_obj
response = litellm.image_generation(
model=model, prompt=prompt, aws_region_name="us-west-2"
)
assert response is not None
assert len(response.data) > 0
mock_bedrock_image_gen.assert_called_once()
def test_image_generation_bearer_token_never_runs_the_sigv4_credential_chain(monkeypatch):
"""The deployment's AWS profile does not exist, so resolving SigV4 credentials
raises; a bearer-token deployment must still sign the request with the
bearer token alone."""
from litellm.llms.bedrock.image_generation.image_handler import BedrockImageGeneration
monkeypatch.setenv("AWS_BEARER_TOKEN_BEDROCK", "env-bearer-token-12345")
request = BedrockImageGeneration()._prepare_request(
model="amazon.nova-canvas-v1:0",
prompt="A cute baby sea otter",
optional_params={"aws_region_name": "us-west-2", "aws_profile_name": "litellm-no-such-aws-profile"},
api_base=None,
extra_headers=None,
api_key=None,
logging_obj=Mock(),
)
assert request.prepped.headers["Authorization"] == "Bearer env-bearer-token-12345"

View file

@ -0,0 +1,21 @@
from unittest.mock import Mock
def test_image_generation_bearer_token_never_runs_the_sigv4_credential_chain(monkeypatch):
"""The deployment's AWS profile does not exist, so resolving SigV4 credentials
raises; a bearer-token deployment must still sign the request with the
bearer token alone."""
from litellm.llms.bedrock.image_generation.image_handler import BedrockImageGeneration
monkeypatch.setenv("AWS_BEARER_TOKEN_BEDROCK", "env-bearer-token-12345")
request = BedrockImageGeneration()._prepare_request(
model="amazon.nova-canvas-v1:0",
prompt="A cute baby sea otter",
optional_params={"aws_region_name": "us-west-2", "aws_profile_name": "litellm-no-such-aws-profile"},
api_base=None,
extra_headers=None,
api_key=None,
logging_obj=Mock(),
)
assert request.prepped.headers["Authorization"] == "Bearer env-bearer-token-12345"

View file

@ -11,7 +11,8 @@ def test_bedrock_image_prepare_request_with_arn() -> None:
with (
patch(
"litellm.llms.bedrock.image_generation.image_handler.BedrockImageGeneration._get_boto_credentials_from_optional_params"
"litellm.llms.bedrock.image_generation.image_handler.BedrockImageGeneration."
"_get_boto_credentials_from_optional_params"
),
patch(
"litellm.llms.bedrock.image_generation.image_handler.BedrockImageGeneration.get_request_headers"
@ -31,7 +32,8 @@ def test_bedrock_image_prepare_request_with_arn() -> None:
assert (
request.endpoint_url
== "https://bedrock-runtime.test.com/model/arn%3Aaws%3Abedrock%3Aus-east-1%3A123456789012%3Aapplication-inference-profile%2Fabcdefghi123/invoke"
== "https://bedrock-runtime.test.com/model/arn%3Aaws%3Abedrock%3Aus-east-1%3A123456789012"
"%3Aapplication-inference-profile%2Fabcdefghi123/invoke"
)
@ -41,7 +43,8 @@ def test_bedrock_image_prepare_request_without_arn() -> None:
with (
patch(
"litellm.llms.bedrock.image_generation.image_handler.BedrockImageGeneration._get_boto_credentials_from_optional_params"
"litellm.llms.bedrock.image_generation.image_handler.BedrockImageGeneration."
"_get_boto_credentials_from_optional_params"
),
patch(
"litellm.llms.bedrock.image_generation.image_handler.BedrockImageGeneration.get_request_headers"

View file

@ -1072,7 +1072,8 @@ class TestDeAnonymizeConverseStream:
@pytest.mark.asyncio
async def test_reasoning_text_delta_de_anonymized(self):
"""Reasoning deltas carry model output; their text must be guardrailed while the reasoning signature is left untouched."""
"""Reasoning deltas carry model output; their text must be guardrailed while the
reasoning signature is left untouched."""
stream_bytes = (
_build_event_stream_frame("messageStart", {"role": "assistant"})
+ _build_event_stream_frame(
@ -1105,7 +1106,8 @@ class TestDeAnonymizeConverseStream:
@pytest.mark.asyncio
async def test_tool_use_input_delta_de_anonymized(self):
"""toolUse.input deltas carry model-generated tool arguments and must be guardrailed instead of being forwarded raw."""
"""toolUse.input deltas carry model-generated tool arguments and must be
guardrailed instead of being forwarded raw."""
stream_bytes = _build_event_stream_frame(
"contentBlockDelta",
{"contentBlockIndex": 0, "delta": {"toolUse": {"input": '{"q":"<PERSON_1>"}'}}},
@ -1154,7 +1156,8 @@ class TestDeAnonymizeConverseStream:
@pytest.mark.asyncio
async def test_text_and_reasoning_deltas_de_anonymized_independently(self):
"""Distinct delta kinds must each be guardrailed and written back into their own field without bleeding the de-anonymized text across kinds."""
"""Distinct delta kinds must each be guardrailed and written back into their own
field without bleeding the de-anonymized text across kinds."""
captured = {}
async def mock_hook(data, user_api_key_dict, response):
@ -1192,7 +1195,8 @@ class TestDeAnonymizeConverseStream:
@pytest.mark.asyncio
async def test_reasoning_signature_only_frame_left_unmodified(self):
"""A reasoning delta carrying only a signature has no guardrailable text; it must be forwarded untouched and the guardrail must not run."""
"""A reasoning delta carrying only a signature has no guardrailable text; it must
be forwarded untouched and the guardrail must not run."""
stream_bytes = _build_event_stream_frame(
"contentBlockDelta",
{"contentBlockIndex": 0, "delta": {"reasoningContent": {"signature": "sig"}}},

View file

@ -367,8 +367,6 @@ def test_bedrock_passthrough_region_extraction_from_inference_profile_arn():
assert (
"us-west-2" in api_base
), f"Expected region 'us-west-2' from ARN in base URL, but got: {api_base}"
def test_bedrock_passthrough_model_id_arn_encoding():
"""
Test that model_id ARNs are properly URL-encoded when used in endpoints.
@ -421,7 +419,9 @@ def test_bedrock_passthrough_model_id_arn_encoding():
), f"ARN slash should be encoded, but found unencoded version in: {url_str}"
# Verify the complete expected URL structure
expected_encoded_model_id = "arn:aws:bedrock:us-east-1:590183661440:application-inference-profile%2Fb943q2qbl3m7"
expected_encoded_model_id = (
"arn:aws:bedrock:us-east-1:590183661440:application-inference-profile%2Fb943q2qbl3m7"
)
expected_url = f"https://bedrock-runtime.us-east-1.amazonaws.com/model/{expected_encoded_model_id}/converse"
assert url_str == expected_url, f"Expected {expected_url}, but got: {url_str}"
@ -517,7 +517,10 @@ def test_bedrock_passthrough_model_id_without_arn():
def _event_frame(event_type: str, payload: dict) -> bytes:
def header(name: str, value: str) -> bytes:
name_b, value_b = name.encode(), value.encode()
return struct.pack("!B", len(name_b)) + name_b + struct.pack("!B", 7) + struct.pack("!H", len(value_b)) + value_b
return (
struct.pack("!B", len(name_b)) + name_b
+ struct.pack("!B", 7) + struct.pack("!H", len(value_b)) + value_b
)
payload_b = json.dumps(payload, separators=(",", ":")).encode()
headers_b = (
@ -591,7 +594,9 @@ def _feed(collector: PassthroughStreamCollector, stream: bytes, chunk_size: int
def test_converse_stream_collector_keeps_usage_without_retaining_the_stream():
texts = [f"tok{i} " for i in range(4000)]
stream = _event_frame("messageStart", {"role": "assistant"}) + _text_block(0, texts) + _stream_tail("end_turn", 4000)
stream = (
_event_frame("messageStart", {"role": "assistant"}) + _text_block(0, texts) + _stream_tail("end_turn", 4000)
)
_feed(_converse_stream_collector(), stream)
tracemalloc.start()

View file

@ -18,6 +18,21 @@ from litellm.llms.bedrock.realtime.handler import BedrockRealtime
from litellm.llms.bedrock.realtime.transformation import BedrockRealtimeConfig
@pytest.fixture(autouse=True)
def _isolate_host_aws_config(monkeypatch, tmp_path):
monkeypatch.setenv("AWS_SHARED_CREDENTIALS_FILE", str(tmp_path / "credentials"))
monkeypatch.setenv("AWS_CONFIG_FILE", str(tmp_path / "config"))
monkeypatch.setenv("AWS_EC2_METADATA_DISABLED", "true")
for env_var in (
"AWS_PROFILE",
"AWS_DEFAULT_PROFILE",
"AWS_BEARER_TOKEN_BEDROCK",
"AWS_REGION_NAME",
"AWS_DEFAULT_REGION",
):
monkeypatch.delenv(env_var, raising=False)
class FakePayloadPart:
def __init__(self, bytes_):
self.bytes_ = bytes_

View file

@ -15,6 +15,21 @@ from litellm.llms.bedrock.base_aws_llm import Boto3CredentialsInfo
from litellm.llms.bedrock.rerank.handler import BedrockRerankHandler
from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler, HTTPHandler
@pytest.fixture(autouse=True)
def _isolate_host_aws_config(monkeypatch, tmp_path):
monkeypatch.setenv("AWS_SHARED_CREDENTIALS_FILE", str(tmp_path / "credentials"))
monkeypatch.setenv("AWS_CONFIG_FILE", str(tmp_path / "config"))
monkeypatch.setenv("AWS_EC2_METADATA_DISABLED", "true")
for env_var in (
"AWS_PROFILE",
"AWS_DEFAULT_PROFILE",
"AWS_BEARER_TOKEN_BEDROCK",
"AWS_REGION_NAME",
"AWS_DEFAULT_REGION",
):
monkeypatch.delenv(env_var, raising=False)
# Mock response for Bedrock rerank
# Format based on Bedrock rerank API response structure
bedrock_rerank_response = {
@ -30,7 +45,8 @@ bedrock_rerank_response = {
test_query = "What is the capital of the United States?"
test_documents = [
"Carson City is the capital city of the American state of Nevada.",
"The Commonwealth of the Northern Mariana Islands is a group of islands in the Pacific Ocean. Its capital is Saipan.",
"The Commonwealth of the Northern Mariana Islands is a group of islands in the Pacific Ocean. "
"Its capital is Saipan.",
"Washington, D.C. is the capital of the United States.",
]

View file

@ -46,7 +46,8 @@ def test_transform_search_request_encodes_vector_store_id():
assert (
url
== "https://bedrock-agent-runtime.us-west-2.amazonaws.com/knowledgebases/..%2F..%2Fknowledgebases%2Fother%3Fx%3D1%23frag/retrieve"
== "https://bedrock-agent-runtime.us-west-2.amazonaws.com/knowledgebases/..%2F..%2Fknowledgebases%2Fother"
"%3Fx%3D1%23frag/retrieve"
)
assert body["retrievalQuery"].get("text") == "hello"

View file

@ -109,7 +109,13 @@ def test_region_falls_back_to_the_mantle_default_without_any_hint(no_ambient_aws
({}, {"AWS_BEARER_TOKEN_BEDROCK": "aws-env-key"}, "aws-env-key"),
],
)
def test_sign_request_uses_the_deployment_bearer_token(no_ambient_aws, monkeypatch, litellm_params, env, expected_bearer):
def test_sign_request_uses_the_deployment_bearer_token(
no_ambient_aws,
monkeypatch,
litellm_params,
env,
expected_bearer,
):
for name, value in env.items():
monkeypatch.setenv(name, value)
headers, body = BedrockMantlePassthroughConfig().sign_request(

View file

@ -8,6 +8,32 @@ from litellm.llms.bytez.chat.transformation import BytezChatConfig, API_BASE, ve
TEST_API_KEY = "MOCK_BYTEZ_API_KEY"
TEST_MODEL_NAME = "google/gemma-3-4b-it"
TEST_MODEL = f"bytez/{TEST_MODEL_NAME}"
CAT_IMAGE_URL = (
"https://images.squarespace-cdn.com/content/v1/5452d441e4b0c188b51fef1a/1615326541809-TW01PVTOJ4PXQUX"
"VRLHI/male-orange-tabby-cat.jpg"
)
KAGGLE_AUDIO_URL = (
"https://storage.googleapis.com/kagglesdsdata/datasets/1736753/2838478/dataset/dataset/B_ANI01_MC_FN_"
"SIM01_101.wav?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=databundle-worker-v2%40kaggle-1616"
"07.iam.gserviceaccount.com%2F20250711%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250711T192905Z&"
"X-Goog-Expires=345600&X-Goog-SignedHeaders=host&X-Goog-Signature=812b4bd6fcf9296f8e34f67664d900a81cf"
"81a4c8a4f439ce12befc89b4bef07c2645cab20ce5ba8f6b311dffa85aa05b70b4efbe53bced50a43a5e7622ea1ee0d8cc39"
"0679cdc6a6aae2c27f75debc1ce2361c595b3c9e1b8c88e2756ffc6b4f290af7f3dfa7232dc69ccc9a2181be756e0d538250"
"f9761a8b05ba1ac6c6b5d946f97a16aa14a5609ae62a2c4713c2077fcd34d129dbcdac6bb543ae547507b1a424e4fd09f817"
"000943c11507e0a74c514ec212b17427b7fc9e2ce87a250db1258645e4862a4261e3790fd99c9186148ad0653acd2b6a9468"
"adbeb94f17b5a685551037fd2cc9fe72fa405a006c0bd42d03be1e4c0dc4023ed3a77171edff3"
)
KAGGLE_VIDEO_URL = (
"https://storage.googleapis.com/kagglesdsdata/datasets/3957252/6888743/dog1.mp4?X-Goog-Algorithm=GOOG"
"4-RSA-SHA256&X-Goog-Credential=databundle-worker-v2%40kaggle-161607.iam.gserviceaccount.com%2F202507"
"11%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250711T193025Z&X-Goog-Expires=345600&X-Goog-Signed"
"Headers=host&X-Goog-Signature=810961d9abcbc2437954fdf19ef216deb65d3977eb354ec10af0d4644627cc6b143a5f"
"c6450996bae1787c09d26334de7cd6ff887510a5ac2a6eed3cfcc6673a47686c84c1f2b0bf543009388d83f2cd9551ad5f72"
"084513c6a7acd2c718849a4ebe951ccc5631bed014b0d115225c048b9f5de68673a37db24a98ad39cf3d0ba16fb764bf38eb"
"90c78c295c21a4ddac08c3c661b65efd511ccb86bacb87a2e2a97a06f53ea1c64d5dcf274001a61bc20867802549601301d9"
"99f5a5b2e49fd444b7db860c68e1c67df6e8edd5ad97171eaafb4fa1462453924ea4d78733be411cb6b5c910d4f829cd7189"
"c28dc1b22c8ae2a4da844a0d202e9e64bc7fb17947"
)
TEST_MESSAGES = [{"role": "user", "content": "Hello"}]
@ -148,7 +174,7 @@ class TestBytezChatConfig:
"What color is this cat?",
{
"type": "image_url",
"url": "https://images.squarespace-cdn.com/content/v1/5452d441e4b0c188b51fef1a/1615326541809-TW01PVTOJ4PXQUXVRLHI/male-orange-tabby-cat.jpg",
"url": CAT_IMAGE_URL,
},
],
}
@ -160,7 +186,7 @@ class TestBytezChatConfig:
{"type": "text", "text": "What color is this cat?"},
{
"type": "image",
"url": "https://images.squarespace-cdn.com/content/v1/5452d441e4b0c188b51fef1a/1615326541809-TW01PVTOJ4PXQUXVRLHI/male-orange-tabby-cat.jpg",
"url": CAT_IMAGE_URL,
},
],
}
@ -174,7 +200,7 @@ class TestBytezChatConfig:
{"type": "text", "text": "What color is this cat?"},
{
"type": "image_url",
"url": "https://images.squarespace-cdn.com/content/v1/5452d441e4b0c188b51fef1a/1615326541809-TW01PVTOJ4PXQUXVRLHI/male-orange-tabby-cat.jpg",
"url": CAT_IMAGE_URL,
},
],
}
@ -186,7 +212,7 @@ class TestBytezChatConfig:
{"type": "text", "text": "What color is this cat?"},
{
"type": "image",
"url": "https://images.squarespace-cdn.com/content/v1/5452d441e4b0c188b51fef1a/1615326541809-TW01PVTOJ4PXQUXVRLHI/male-orange-tabby-cat.jpg",
"url": CAT_IMAGE_URL,
},
],
}
@ -200,7 +226,7 @@ class TestBytezChatConfig:
{"type": "text", "text": "What kind of cat meow is this?"},
{
"type": "input_audio",
"url": "https://storage.googleapis.com/kagglesdsdata/datasets/1736753/2838478/dataset/dataset/B_ANI01_MC_FN_SIM01_101.wav?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=databundle-worker-v2%40kaggle-161607.iam.gserviceaccount.com%2F20250711%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250711T192905Z&X-Goog-Expires=345600&X-Goog-SignedHeaders=host&X-Goog-Signature=812b4bd6fcf9296f8e34f67664d900a81cf81a4c8a4f439ce12befc89b4bef07c2645cab20ce5ba8f6b311dffa85aa05b70b4efbe53bced50a43a5e7622ea1ee0d8cc390679cdc6a6aae2c27f75debc1ce2361c595b3c9e1b8c88e2756ffc6b4f290af7f3dfa7232dc69ccc9a2181be756e0d538250f9761a8b05ba1ac6c6b5d946f97a16aa14a5609ae62a2c4713c2077fcd34d129dbcdac6bb543ae547507b1a424e4fd09f817000943c11507e0a74c514ec212b17427b7fc9e2ce87a250db1258645e4862a4261e3790fd99c9186148ad0653acd2b6a9468adbeb94f17b5a685551037fd2cc9fe72fa405a006c0bd42d03be1e4c0dc4023ed3a77171edff3",
"url": KAGGLE_AUDIO_URL,
},
],
}
@ -212,7 +238,7 @@ class TestBytezChatConfig:
{"type": "text", "text": "What kind of cat meow is this?"},
{
"type": "audio",
"url": "https://storage.googleapis.com/kagglesdsdata/datasets/1736753/2838478/dataset/dataset/B_ANI01_MC_FN_SIM01_101.wav?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=databundle-worker-v2%40kaggle-161607.iam.gserviceaccount.com%2F20250711%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250711T192905Z&X-Goog-Expires=345600&X-Goog-SignedHeaders=host&X-Goog-Signature=812b4bd6fcf9296f8e34f67664d900a81cf81a4c8a4f439ce12befc89b4bef07c2645cab20ce5ba8f6b311dffa85aa05b70b4efbe53bced50a43a5e7622ea1ee0d8cc390679cdc6a6aae2c27f75debc1ce2361c595b3c9e1b8c88e2756ffc6b4f290af7f3dfa7232dc69ccc9a2181be756e0d538250f9761a8b05ba1ac6c6b5d946f97a16aa14a5609ae62a2c4713c2077fcd34d129dbcdac6bb543ae547507b1a424e4fd09f817000943c11507e0a74c514ec212b17427b7fc9e2ce87a250db1258645e4862a4261e3790fd99c9186148ad0653acd2b6a9468adbeb94f17b5a685551037fd2cc9fe72fa405a006c0bd42d03be1e4c0dc4023ed3a77171edff3",
"url": KAGGLE_AUDIO_URL,
},
],
}
@ -226,7 +252,7 @@ class TestBytezChatConfig:
{"type": "text", "text": "What kind of dog is this?"},
{
"type": "video_url",
"url": "https://storage.googleapis.com/kagglesdsdata/datasets/3957252/6888743/dog1.mp4?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=databundle-worker-v2%40kaggle-161607.iam.gserviceaccount.com%2F20250711%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250711T193025Z&X-Goog-Expires=345600&X-Goog-SignedHeaders=host&X-Goog-Signature=810961d9abcbc2437954fdf19ef216deb65d3977eb354ec10af0d4644627cc6b143a5fc6450996bae1787c09d26334de7cd6ff887510a5ac2a6eed3cfcc6673a47686c84c1f2b0bf543009388d83f2cd9551ad5f72084513c6a7acd2c718849a4ebe951ccc5631bed014b0d115225c048b9f5de68673a37db24a98ad39cf3d0ba16fb764bf38eb90c78c295c21a4ddac08c3c661b65efd511ccb86bacb87a2e2a97a06f53ea1c64d5dcf274001a61bc20867802549601301d999f5a5b2e49fd444b7db860c68e1c67df6e8edd5ad97171eaafb4fa1462453924ea4d78733be411cb6b5c910d4f829cd7189c28dc1b22c8ae2a4da844a0d202e9e64bc7fb17947",
"url": KAGGLE_VIDEO_URL,
},
],
}
@ -238,7 +264,7 @@ class TestBytezChatConfig:
{"type": "text", "text": "What kind of dog is this?"},
{
"type": "video",
"url": "https://storage.googleapis.com/kagglesdsdata/datasets/3957252/6888743/dog1.mp4?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=databundle-worker-v2%40kaggle-161607.iam.gserviceaccount.com%2F20250711%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20250711T193025Z&X-Goog-Expires=345600&X-Goog-SignedHeaders=host&X-Goog-Signature=810961d9abcbc2437954fdf19ef216deb65d3977eb354ec10af0d4644627cc6b143a5fc6450996bae1787c09d26334de7cd6ff887510a5ac2a6eed3cfcc6673a47686c84c1f2b0bf543009388d83f2cd9551ad5f72084513c6a7acd2c718849a4ebe951ccc5631bed014b0d115225c048b9f5de68673a37db24a98ad39cf3d0ba16fb764bf38eb90c78c295c21a4ddac08c3c661b65efd511ccb86bacb87a2e2a97a06f53ea1c64d5dcf274001a61bc20867802549601301d999f5a5b2e49fd444b7db860c68e1c67df6e8edd5ad97171eaafb4fa1462453924ea4d78733be411cb6b5c910d4f829cd7189c28dc1b22c8ae2a4da844a0d202e9e64bc7fb17947",
"url": KAGGLE_VIDEO_URL,
},
],
}

View file

@ -106,7 +106,10 @@ class TestBedrockRegionInModelPath:
), f"modelId mismatch for {model!r}: got {model_id!r}, expected {expected_model_id!r}"
assert (
optional_params.get("aws_region_name") == expected_region
), f"region mismatch for {model!r}: got {optional_params.get('aws_region_name')!r}, expected {expected_region!r}"
), (
f"region mismatch for {model!r}: "
f"got {optional_params.get('aws_region_name')!r}, expected {expected_region!r}"
)
def test_explicit_aws_region_name_not_overridden(self):
"""