Skip to content

Commit 2d594e7

Browse files
committed
test: add contract tests for BedrockRuntime converse and converse_stream APIs
1 parent e1dd254 commit 2d594e7

2 files changed

Lines changed: 107 additions & 0 deletions

File tree

contract-tests/images/applications/botocore/botocore_server.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -679,6 +679,54 @@ def _handle_bedrock_request(self) -> None:
679679
bedrock_runtime_client.invoke_model(
680680
body=request_body, modelId=model_id, accept=accept, contentType=content_type
681681
)
682+
elif self.in_path("converse/converse"):
683+
set_main_status(200)
684+
bedrock_runtime_client.meta.events.register(
685+
"before-call.bedrock-runtime.Converse",
686+
lambda **kwargs: inject_200_success(
687+
output={"message": {"role": "assistant", "content": [{"text": "Hello! How can I help?"}]}},
688+
stopReason="end_turn",
689+
usage={"inputTokens": 12, "outputTokens": 8},
690+
**kwargs,
691+
),
692+
)
693+
bedrock_runtime_client.converse(
694+
modelId="anthropic.claude-v2:1",
695+
messages=[{"role": "user", "content": [{"text": "Hello"}]}],
696+
inferenceConfig={
697+
"maxTokens": 512,
698+
"temperature": 0.7,
699+
"topP": 0.9,
700+
"stopSequences": ["Human:"],
701+
},
702+
)
703+
elif self.in_path("conversestream/converse-stream"):
704+
set_main_status(200)
705+
bedrock_runtime_client.meta.events.register(
706+
"before-call.bedrock-runtime.ConverseStream",
707+
lambda **kwargs: inject_200_success(
708+
stream={
709+
"contentBlockDelta": {"delta": {"text": "Hello!"}},
710+
"messageStop": {"stopReason": "end_turn"},
711+
"metadata": {"usage": {"inputTokens": 15, "outputTokens": 10}},
712+
},
713+
**kwargs,
714+
),
715+
)
716+
response = bedrock_runtime_client.converse_stream(
717+
modelId="anthropic.claude-v2:1",
718+
messages=[{"role": "user", "content": [{"text": "Hello"}]}],
719+
inferenceConfig={
720+
"maxTokens": 256,
721+
"temperature": 0.8,
722+
"topP": 0.95,
723+
"stopSequences": ["Assistant:"],
724+
},
725+
)
726+
# Consume the stream if present
727+
if "stream" in response:
728+
for event in response["stream"]:
729+
pass
682730
else:
683731
set_main_status(404)
684732

contract-tests/tests/test/amazon/botocore/botocore_test.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
_GEN_AI_RESPONSE_FINISH_REASONS: str = "gen_ai.response.finish_reasons"
5959
_GEN_AI_USAGE_INPUT_TOKENS: str = "gen_ai.usage.input_tokens"
6060
_GEN_AI_USAGE_OUTPUT_TOKENS: str = "gen_ai.usage.output_tokens"
61+
_GEN_AI_REQUEST_STOP_SEQUENCES: str = "gen_ai.request.stop_sequences"
6162
_GEN_AI_SYSTEM: str = "gen_ai.system"
6263
_GEN_AI_RUNTIME_ID: str = "gen_ai.runtime.id"
6364
_GEN_AI_BROWSER_ID: str = "gen_ai.browser.id"
@@ -663,6 +664,64 @@ def test_bedrock_runtime_invoke_model_mistral(self):
663664
span_name="chat mistral.mistral-7b-instruct-v0:2",
664665
)
665666

667+
def test_bedrock_runtime_converse(self):
668+
self.do_test_requests(
669+
"bedrock/converse/converse",
670+
"GET",
671+
200,
672+
0,
673+
0,
674+
rpc_service="Bedrock Runtime",
675+
remote_service="AWS::BedrockRuntime",
676+
remote_operation="Converse",
677+
remote_resource_type="AWS::Bedrock::Model",
678+
remote_resource_identifier="anthropic.claude-v2:1",
679+
cloudformation_primary_identifier="anthropic.claude-v2:1",
680+
request_specific_attributes={
681+
_GEN_AI_REQUEST_MODEL: "anthropic.claude-v2:1",
682+
_GEN_AI_SYSTEM: "aws.bedrock",
683+
_GEN_AI_REQUEST_MAX_TOKENS: 512,
684+
_GEN_AI_REQUEST_TEMPERATURE: 0.7,
685+
_GEN_AI_REQUEST_TOP_P: 0.9,
686+
_GEN_AI_REQUEST_STOP_SEQUENCES: ["Human:"],
687+
},
688+
response_specific_attributes={
689+
_GEN_AI_RESPONSE_FINISH_REASONS: ["end_turn"],
690+
_GEN_AI_USAGE_INPUT_TOKENS: 12,
691+
_GEN_AI_USAGE_OUTPUT_TOKENS: 8,
692+
},
693+
span_name="chat anthropic.claude-v2:1",
694+
)
695+
696+
def test_bedrock_runtime_converse_stream(self):
697+
self.do_test_requests(
698+
"bedrock/conversestream/converse-stream",
699+
"GET",
700+
200,
701+
0,
702+
0,
703+
rpc_service="Bedrock Runtime",
704+
remote_service="AWS::BedrockRuntime",
705+
remote_operation="ConverseStream",
706+
remote_resource_type="AWS::Bedrock::Model",
707+
remote_resource_identifier="anthropic.claude-v2:1",
708+
cloudformation_primary_identifier="anthropic.claude-v2:1",
709+
request_specific_attributes={
710+
_GEN_AI_REQUEST_MODEL: "anthropic.claude-v2:1",
711+
_GEN_AI_SYSTEM: "aws.bedrock",
712+
_GEN_AI_REQUEST_MAX_TOKENS: 256,
713+
_GEN_AI_REQUEST_TEMPERATURE: 0.8,
714+
_GEN_AI_REQUEST_TOP_P: 0.95,
715+
_GEN_AI_REQUEST_STOP_SEQUENCES: ["Assistant:"],
716+
},
717+
response_specific_attributes={
718+
_GEN_AI_RESPONSE_FINISH_REASONS: ["end_turn"],
719+
_GEN_AI_USAGE_INPUT_TOKENS: 15,
720+
_GEN_AI_USAGE_OUTPUT_TOKENS: 10,
721+
},
722+
span_name="chat anthropic.claude-v2:1",
723+
)
724+
666725
def test_bedrock_get_guardrail(self):
667726
self.do_test_requests(
668727
"bedrock/getguardrail/get-guardrail",

0 commit comments

Comments
 (0)