From a8c8eee4b0db45f5160230e4d727f907f4cc4183 Mon Sep 17 00:00:00 2001 From: kerry Date: Tue, 22 Sep 2026 21:20:52 +0000 Subject: [PATCH] test(integration): send Bedrock Converse config blocks once at top level (Pylon #7839) Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- tests/integration/contracts.json | 3 ++ ...est_bedrock_converse_config_blocks_wire.py | 47 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 tests/integration/providers/test_bedrock_converse_config_blocks_wire.py diff --git a/tests/integration/contracts.json b/tests/integration/contracts.json index d12e3ae4620..bedc0583234 100644 --- a/tests/integration/contracts.json +++ b/tests/integration/contracts.json @@ -128,6 +128,9 @@ "tests/integration/providers/test_bedrock_auth_wire.py::test_bearer_environment_reference_loads_from_db_and_yaml_and_survives_reload": [ "other.provider_wire.bedrock.bearer_db_yaml_survives_reload" ], + "tests/integration/providers/test_bedrock_converse_config_blocks_wire.py::test_guardrail_and_performance_config_are_not_duplicated_inside_inference_config": [ + "other.provider_wire.bedrock.converse_config_blocks_sent_once_at_top_level" + ], "tests/integration/streaming/test_stream_contracts.py::test_generated_tcp_partitions_preserve_unicode_text_identity_and_final_usage": [ "other.streaming.byte_partitions.preserve_text_identity_and_usage" ], diff --git a/tests/integration/providers/test_bedrock_converse_config_blocks_wire.py b/tests/integration/providers/test_bedrock_converse_config_blocks_wire.py new file mode 100644 index 00000000000..ac7fdf466c9 --- /dev/null +++ b/tests/integration/providers/test_bedrock_converse_config_blocks_wire.py @@ -0,0 +1,47 @@ +import json +from typing import Final + +import pytest + +from integration._support.client import Gateway +from integration._support.wire import Reply, Request, wire_server +from integration.providers.test_bedrock_auth_wire import MODEL, RESPONSE, TOKEN + +GUARDRAIL: Final = {"guardrailIdentifier": "integration-guardrail", "guardrailVersion": "DRAFT", "trace": "enabled"} +PERFORMANCE: Final = {"latency": "optimized"} + + +def converse_peer(request: Request) -> Reply: + assert request.method == "POST" and request.target == "/model/anthropic.claude-3-haiku-20240307-v1%3A0/converse" + body: Final = json.loads(request.body) + assert body["inferenceConfig"] == {"maxTokens": 16, "temperature": 0.2}, body + assert body["guardrailConfig"] == GUARDRAIL, body + assert body["performanceConfig"] == PERFORMANCE, body + return Reply(body=RESPONSE) + + +@pytest.mark.covers("other.provider_wire.bedrock.converse_config_blocks_sent_once_at_top_level") +def test_guardrail_and_performance_config_are_not_duplicated_inside_inference_config(gateway: Gateway) -> None: + with wire_server(converse_peer) as wire, gateway.scenario() as scenario: + model: Final = scenario.model( + model=MODEL, + api_key=TOKEN, + aws_region_name="us-east-1", + aws_bedrock_runtime_endpoint=wire.url, + guardrailConfig=GUARDRAIL, + ) + response: Final = gateway.request( + "POST", + "/v1/chat/completions", + { + "model": model, + "messages": [{"role": "user", "content": "synthetic guardrail request"}], + "max_tokens": 16, + "temperature": 0.2, + "performanceConfig": PERFORMANCE, + "cache": {"no-cache": True}, + }, + ) + assert response.status_code == 200, response.text + assert response.json()["choices"][0]["message"]["content"] == "bedrock wire control" + assert len(wire.drain()) == 1, response.text