diff --git a/CHANGELOG.md b/CHANGELOG.md
index d92c56e3d1..0dac42cb01 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,8 +11,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
+### Added
+
- `opentelemetry-instrumentation-asyncclick`: new instrumentation to trace asyncclick commands
([#3319](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3319))
+- `opentelemetry-instrumentation-botocore` Add support for GenAI tool events using Amazon Nova models and `InvokeModel*` APIs
+ ([#3385](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3385))
### Fixed
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py
index e8c0326d5b..2a161fe16a 100644
--- a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py
+++ b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/__init__.py
@@ -109,7 +109,9 @@ def response_hook(span, service_name, operation_name, result):
- Amazon Nova models
- Anthropic Claude
-There is no support for tool calls with Amazon Models for the InvokeModel and InvokeModelWithResponseStream APIs.
+Tool calls with InvokeModel and InvokeModelWithResponseStream APIs are supported with:
+- Amazon Nova models
+- Anthropic Claude 3+
"""
import logging
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/bedrock_utils.py b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/bedrock_utils.py
index 2020d80805..08d7a0820b 100644
--- a/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/bedrock_utils.py
+++ b/instrumentation/opentelemetry-instrumentation-botocore/src/opentelemetry/instrumentation/botocore/extensions/bedrock_utils.py
@@ -216,7 +216,6 @@ def _process_amazon_titan_chunk(self, chunk):
def _process_amazon_nova_chunk(self, chunk):
# pylint: disable=too-many-branches
- # TODO: handle tool calls!
if "messageStart" in chunk:
# {'messageStart': {'role': 'assistant'}}
if chunk["messageStart"].get("role") == "assistant":
@@ -224,17 +223,40 @@ def _process_amazon_nova_chunk(self, chunk):
self._message = {"role": "assistant", "content": []}
return
+ if "contentBlockStart" in chunk:
+ # {'contentBlockStart': {'start': {'toolUse': {'toolUseId': 'id', 'name': 'name'}}, 'contentBlockIndex': 31}}
+ if self._record_message:
+ self._message["content"].append(self._content_block)
+
+ start = chunk["contentBlockStart"].get("start", {})
+ if "toolUse" in start:
+ self._content_block = start
+ else:
+ self._content_block = {}
+ return
+
if "contentBlockDelta" in chunk:
# {'contentBlockDelta': {'delta': {'text': "Hello"}, 'contentBlockIndex': 0}}
+ # {'contentBlockDelta': {'delta': {'toolUse': {'input': '{"location":"San Francisco"}'}}, 'contentBlockIndex': 31}}
if self._record_message:
delta = chunk["contentBlockDelta"].get("delta", {})
if "text" in delta:
self._content_block.setdefault("text", "")
self._content_block["text"] += delta["text"]
+ elif "toolUse" in delta:
+ self._content_block.setdefault("toolUse", {})
+ self._content_block["toolUse"]["input"] = json.loads(
+ delta["toolUse"]["input"]
+ )
return
if "contentBlockStop" in chunk:
# {'contentBlockStop': {'contentBlockIndex': 0}}
+ if self._record_message:
+ # create a new content block only for tools
+ if "toolUse" in self._content_block:
+ self._message["content"].append(self._content_block)
+ self._content_block = {}
return
if "messageStop" in chunk:
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_no_content_tool_call[amazon.nova].yaml b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_no_content_tool_call[amazon.nova].yaml
new file mode 100644
index 0000000000..b2938c44e9
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_no_content_tool_call[amazon.nova].yaml
@@ -0,0 +1,291 @@
+interactions:
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco"
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "max_new_tokens": 1000
+ },
+ "schemaVersion": "messages-v1",
+ "toolConfig": {
+ "tools": [
+ {
+ "toolSpec": {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "inputSchema": {
+ "json": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ headers:
+ Content-Length:
+ - '552'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250325T130901Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-2541300b-2dbeda14c09ccd3d3b041879;Parent=1fc006fd156b7383;Sampled=1
+ amz-sdk-invocation-id:
+ - 09f5a7ed-4163-46ec-a974-000c5662062a
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.nova-micro-v1%3A0/invoke
+ response:
+ body:
+ string: |-
+ {
+ "output": {
+ "message": {
+ "content": [
+ {
+ "text": " To provide the current weather information for both Seattle and San Francisco, I will need to use the `get_current_weather` tool separately for each city. I will start by calling the tool for Seattle and then proceed to call it for San Francisco.\n"
+ },
+ {
+ "toolUse": {
+ "name": "get_current_weather",
+ "toolUseId": "4d8acf92-6a04-42b6-aaf7-f68937a339ef",
+ "input": {
+ "location": "Seattle"
+ }
+ }
+ },
+ {
+ "toolUse": {
+ "name": "get_current_weather",
+ "toolUseId": "db27bd9d-9f7d-4783-aa8b-59871e00e0bc",
+ "input": {
+ "location": "San Francisco"
+ }
+ }
+ }
+ ],
+ "role": "assistant"
+ }
+ },
+ "stopReason": "tool_use",
+ "usage": {
+ "inputTokens": 427,
+ "outputTokens": 172,
+ "totalTokens": 599,
+ "cacheReadInputTokenCount": 0,
+ "cacheWriteInputTokenCount": 0
+ }
+ }
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/json
+ Date:
+ - Tue, 25 Mar 2025 13:09:02 GMT
+ Set-Cookie: test_set_cookie
+ X-Amzn-Bedrock-Cache-Read-Input-Token-Count:
+ - '0'
+ X-Amzn-Bedrock-Cache-Write-Input-Token-Count:
+ - '0'
+ X-Amzn-Bedrock-Input-Token-Count:
+ - '427'
+ X-Amzn-Bedrock-Invocation-Latency:
+ - '430'
+ X-Amzn-Bedrock-Output-Token-Count:
+ - '172'
+ x-amzn-RequestId:
+ - adebeba4-5940-4c34-87a1-46cd45646bbe
+ status:
+ code: 200
+ message: OK
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco"
+ }
+ ]
+ },
+ {
+ "content": [
+ {
+ "text": " To provide the current weather information for both Seattle and San Francisco, I will need to use the `get_current_weather` tool separately for each city. I will start by calling the tool for Seattle and then proceed to call it for San Francisco.\n"
+ },
+ {
+ "toolUse": {
+ "name": "get_current_weather",
+ "toolUseId": "4d8acf92-6a04-42b6-aaf7-f68937a339ef",
+ "input": {
+ "location": "Seattle"
+ }
+ }
+ },
+ {
+ "toolUse": {
+ "name": "get_current_weather",
+ "toolUseId": "db27bd9d-9f7d-4783-aa8b-59871e00e0bc",
+ "input": {
+ "location": "San Francisco"
+ }
+ }
+ }
+ ],
+ "role": "assistant"
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "toolResult": {
+ "toolUseId": "4d8acf92-6a04-42b6-aaf7-f68937a339ef",
+ "content": [
+ {
+ "json": {
+ "weather": "50 degrees and raining"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "toolResult": {
+ "toolUseId": "db27bd9d-9f7d-4783-aa8b-59871e00e0bc",
+ "content": [
+ {
+ "json": {
+ "weather": "70 degrees and sunny"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "max_new_tokens": 1000
+ },
+ "schemaVersion": "messages-v1",
+ "toolConfig": {
+ "tools": [
+ {
+ "toolSpec": {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "inputSchema": {
+ "json": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ headers:
+ Content-Length:
+ - '1439'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250325T130902Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-2592d804-d8515e92a6320e1d293c3643;Parent=5406f9af558aaabe;Sampled=1
+ amz-sdk-invocation-id:
+ - 4ad9ba7e-df5a-4a01-a3a1-40fce5d29ef2
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.nova-micro-v1%3A0/invoke
+ response:
+ body:
+ string: |-
+ {
+ "output": {
+ "message": {
+ "content": [
+ {
+ "text": " I have received the weather information for both cities. Now I will compile this information and present it to the User.\n\nThe current weather in Seattle is 50 degrees and it is raining. In San Francisco, the weather is 70 degrees and sunny."
+ }
+ ],
+ "role": "assistant"
+ }
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 576,
+ "outputTokens": 57,
+ "totalTokens": 633,
+ "cacheReadInputTokenCount": 0,
+ "cacheWriteInputTokenCount": 0
+ }
+ }
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/json
+ Date:
+ - Tue, 25 Mar 2025 13:09:03 GMT
+ Set-Cookie: test_set_cookie
+ X-Amzn-Bedrock-Cache-Read-Input-Token-Count:
+ - '0'
+ X-Amzn-Bedrock-Cache-Write-Input-Token-Count:
+ - '0'
+ X-Amzn-Bedrock-Input-Token-Count:
+ - '576'
+ X-Amzn-Bedrock-Invocation-Latency:
+ - '417'
+ X-Amzn-Bedrock-Output-Token-Count:
+ - '57'
+ x-amzn-RequestId:
+ - cedb9b10-f794-4ec4-ac67-f3e237511e62
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_content_tool_call.yaml b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_no_content_tool_call[anthropic.claude].yaml
similarity index 79%
rename from instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_content_tool_call.yaml
rename to instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_no_content_tool_call[anthropic.claude].yaml
index 08e65b4edb..d88b275cef 100644
--- a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_content_tool_call.yaml
+++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_no_content_tool_call[anthropic.claude].yaml
@@ -41,13 +41,13 @@ interactions:
- Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
X-Amz-Date:
- - 20250226T143024Z
+ - 20250325T130903Z
X-Amz-Security-Token:
- test_aws_security_token
X-Amzn-Trace-Id:
- - Root=1-38bb047d-8e135e7b4c7c165862a664a1;Parent=ab16e771e2f2d78d;Sampled=1
+ - Root=1-8d12ecff-5ad6ccf1b77b1190770e7184;Parent=4b902787e2994328;Sampled=1
amz-sdk-invocation-id:
- - dbf36675-5cd7-4a56-9bf8-8a2d9a5a34e5
+ - 67f1613f-e740-4deb-b887-a6fa61e21fa2
amz-sdk-request:
- attempt=1
authorization:
@@ -58,7 +58,7 @@ interactions:
body:
string: |-
{
- "id": "msg_bdrk_01Y6wb6bR2NWTWgiivTxHcro",
+ "id": "msg_bdrk_01VBpy5uMQLnyfKbPQskaPH3",
"type": "message",
"role": "assistant",
"model": "claude-3-5-sonnet-20240620",
@@ -69,7 +69,7 @@ interactions:
},
{
"type": "tool_use",
- "id": "toolu_bdrk_01SiKnuixXFeF3NtmWdbwVJq",
+ "id": "toolu_bdrk_019pyFnRNCLD8eRrPFryV45k",
"name": "get_current_weather",
"input": {
"location": "Seattle"
@@ -77,7 +77,7 @@ interactions:
},
{
"type": "tool_use",
- "id": "toolu_bdrk_01DXENHuRw9nVyE42MKRoVe5",
+ "id": "toolu_bdrk_01DtdjkUePw2E5bVHGifpu3j",
"name": "get_current_weather",
"input": {
"location": "San Francisco"
@@ -97,16 +97,16 @@ interactions:
Content-Type:
- application/json
Date:
- - Wed, 26 Feb 2025 14:30:28 GMT
+ - Tue, 25 Mar 2025 13:09:07 GMT
Set-Cookie: test_set_cookie
X-Amzn-Bedrock-Input-Token-Count:
- '392'
X-Amzn-Bedrock-Invocation-Latency:
- - '3733'
+ - '3788'
X-Amzn-Bedrock-Output-Token-Count:
- '135'
x-amzn-RequestId:
- - 6e567b9f-286e-4749-a406-6517faf9fb65
+ - f4badbe2-968d-4ec7-a7c9-0b6b53c1da8c
status:
code: 200
message: OK
@@ -132,7 +132,7 @@ interactions:
},
{
"type": "tool_use",
- "id": "toolu_bdrk_01SiKnuixXFeF3NtmWdbwVJq",
+ "id": "toolu_bdrk_019pyFnRNCLD8eRrPFryV45k",
"name": "get_current_weather",
"input": {
"location": "Seattle"
@@ -140,7 +140,7 @@ interactions:
},
{
"type": "tool_use",
- "id": "toolu_bdrk_01DXENHuRw9nVyE42MKRoVe5",
+ "id": "toolu_bdrk_01DtdjkUePw2E5bVHGifpu3j",
"name": "get_current_weather",
"input": {
"location": "San Francisco"
@@ -153,12 +153,12 @@ interactions:
"content": [
{
"type": "tool_result",
- "tool_use_id": "toolu_bdrk_01SiKnuixXFeF3NtmWdbwVJq",
+ "tool_use_id": "toolu_bdrk_019pyFnRNCLD8eRrPFryV45k",
"content": "50 degrees and raining"
},
{
"type": "tool_result",
- "tool_use_id": "toolu_bdrk_01DXENHuRw9nVyE42MKRoVe5",
+ "tool_use_id": "toolu_bdrk_01DtdjkUePw2E5bVHGifpu3j",
"content": "70 degrees and sunny"
}
]
@@ -192,13 +192,13 @@ interactions:
- Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
X-Amz-Date:
- - 20250226T143028Z
+ - 20250325T130907Z
X-Amz-Security-Token:
- test_aws_security_token
X-Amzn-Trace-Id:
- - Root=1-128d42ac-8f5e3d864a1b0fc0bc6780bd;Parent=bf82ed08ab52ae1b;Sampled=1
+ - Root=1-c68ede29-e6b06012c6c4c9f2f1b1e4b5;Parent=39c2a2da849c36cb;Sampled=1
amz-sdk-invocation-id:
- - 2ea0920e-088b-4558-9c8d-1195d19fae2f
+ - 6d49de72-fb0f-453c-93d9-2c0b8290f7d0
amz-sdk-request:
- attempt=1
authorization:
@@ -209,21 +209,21 @@ interactions:
body:
string: |-
{
- "id": "msg_bdrk_01VcLiX4qiCGKdQiTCW1dTPL",
+ "id": "msg_bdrk_01CTxAJ2MbeWdBb3r5SAyprB",
"type": "message",
"role": "assistant",
"model": "claude-3-5-sonnet-20240620",
"content": [
{
"type": "text",
- "text": "Thank you for providing the weather information. Here's the current weather for Seattle and San Francisco:\n\n1. Seattle: The current weather in Seattle is 50 degrees and raining.\n2. San Francisco: The current weather in San Francisco is 70 degrees and sunny.\n\nAs you can see, there's quite a difference in the weather between these two West Coast cities today. Seattle is experiencing cooler temperatures with rain, which is fairly typical for the Pacific Northwest. On the other hand, San Francisco is enjoying warmer temperatures with sunny skies, making for a pleasant day in the Bay Area.\n\nIs there anything else you'd like to know about the weather in these cities or any other locations?"
+ "text": "Thank you for providing the weather information for both cities. Here's the current weather for Seattle and San Francisco today:\n\n1. Seattle: The current weather in Seattle is 50 degrees and raining.\n2. San Francisco: The current weather in San Francisco is 70 degrees and sunny.\n\nAs you can see, there's quite a difference in the weather between these two West Coast cities today. Seattle is experiencing cooler temperatures with rain, which is fairly typical for the Pacific Northwest. On the other hand, San Francisco is enjoying a warm, sunny day, which is pleasant for outdoor activities.\n\nIs there anything else you'd like to know about the weather in these cities or any other locations?"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 604,
- "output_tokens": 150
+ "output_tokens": 149
}
}
headers:
@@ -232,16 +232,16 @@ interactions:
Content-Type:
- application/json
Date:
- - Wed, 26 Feb 2025 14:30:33 GMT
+ - Tue, 25 Mar 2025 13:09:12 GMT
Set-Cookie: test_set_cookie
X-Amzn-Bedrock-Input-Token-Count:
- '604'
X-Amzn-Bedrock-Invocation-Latency:
- - '4549'
+ - '4208'
X-Amzn-Bedrock-Output-Token-Count:
- - '150'
+ - '149'
x-amzn-RequestId:
- - c6ea96ea-758f-4af8-bbdb-2204d91eddfe
+ - 9e07abe1-4450-41af-b2f1-ecd82d66493d
status:
code: 200
message: OK
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_content_tool_call[amazon.nova].yaml b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_content_tool_call[amazon.nova].yaml
new file mode 100644
index 0000000000..fcb549aebb
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_content_tool_call[amazon.nova].yaml
@@ -0,0 +1,291 @@
+interactions:
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco"
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "max_new_tokens": 1000
+ },
+ "schemaVersion": "messages-v1",
+ "toolConfig": {
+ "tools": [
+ {
+ "toolSpec": {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "inputSchema": {
+ "json": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ headers:
+ Content-Length:
+ - '552'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250325T104304Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-718e449f-1e7fbb291880eb98876a4cc3;Parent=fad0d08c42fc3875;Sampled=1
+ amz-sdk-invocation-id:
+ - aecefc62-8b85-45ab-8191-e8449cd2762d
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.nova-micro-v1%3A0/invoke
+ response:
+ body:
+ string: |-
+ {
+ "output": {
+ "message": {
+ "content": [
+ {
+ "text": " To provide the current weather in both Seattle and San Francisco, I will use the `get_current_weather` tool for each city separately. I will start with Seattle and then proceed to San Francisco.\n"
+ },
+ {
+ "toolUse": {
+ "name": "get_current_weather",
+ "toolUseId": "a385bacb-2011-4f60-b0d3-1455602f4438",
+ "input": {
+ "location": "Seattle"
+ }
+ }
+ },
+ {
+ "toolUse": {
+ "name": "get_current_weather",
+ "toolUseId": "9b02c6fa-4676-4ab5-b2e4-015e86994df7",
+ "input": {
+ "location": "San Francisco"
+ }
+ }
+ }
+ ],
+ "role": "assistant"
+ }
+ },
+ "stopReason": "tool_use",
+ "usage": {
+ "inputTokens": 427,
+ "outputTokens": 162,
+ "totalTokens": 589,
+ "cacheReadInputTokenCount": 0,
+ "cacheWriteInputTokenCount": 0
+ }
+ }
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/json
+ Date:
+ - Tue, 25 Mar 2025 10:43:05 GMT
+ Set-Cookie: test_set_cookie
+ X-Amzn-Bedrock-Cache-Read-Input-Token-Count:
+ - '0'
+ X-Amzn-Bedrock-Cache-Write-Input-Token-Count:
+ - '0'
+ X-Amzn-Bedrock-Input-Token-Count:
+ - '427'
+ X-Amzn-Bedrock-Invocation-Latency:
+ - '433'
+ X-Amzn-Bedrock-Output-Token-Count:
+ - '162'
+ x-amzn-RequestId:
+ - e2d1ae4d-3b03-47d1-b527-647a923c3844
+ status:
+ code: 200
+ message: OK
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco"
+ }
+ ]
+ },
+ {
+ "content": [
+ {
+ "text": " To provide the current weather in both Seattle and San Francisco, I will use the `get_current_weather` tool for each city separately. I will start with Seattle and then proceed to San Francisco.\n"
+ },
+ {
+ "toolUse": {
+ "name": "get_current_weather",
+ "toolUseId": "a385bacb-2011-4f60-b0d3-1455602f4438",
+ "input": {
+ "location": "Seattle"
+ }
+ }
+ },
+ {
+ "toolUse": {
+ "name": "get_current_weather",
+ "toolUseId": "9b02c6fa-4676-4ab5-b2e4-015e86994df7",
+ "input": {
+ "location": "San Francisco"
+ }
+ }
+ }
+ ],
+ "role": "assistant"
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "toolResult": {
+ "toolUseId": "a385bacb-2011-4f60-b0d3-1455602f4438",
+ "content": [
+ {
+ "json": {
+ "weather": "50 degrees and raining"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "toolResult": {
+ "toolUseId": "9b02c6fa-4676-4ab5-b2e4-015e86994df7",
+ "content": [
+ {
+ "json": {
+ "weather": "70 degrees and sunny"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "max_new_tokens": 1000
+ },
+ "schemaVersion": "messages-v1",
+ "toolConfig": {
+ "tools": [
+ {
+ "toolSpec": {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "inputSchema": {
+ "json": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ headers:
+ Content-Length:
+ - '1387'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250325T104305Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-d911cb99-61b0e8799bdc802df78a2c16;Parent=fe95b1cfeecf2dcd;Sampled=1
+ amz-sdk-invocation-id:
+ - d7528c91-631f-459f-9d4b-ba4cceb1e08f
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.nova-micro-v1%3A0/invoke
+ response:
+ body:
+ string: |-
+ {
+ "output": {
+ "message": {
+ "content": [
+ {
+ "text": " I have received the weather information for both Seattle and San Francisco. Now I will compile this information and present it to the User.\n\nThe current weather in Seattle is 50 degrees and it is raining. In San Francisco, the weather is 70 degrees and sunny."
+ }
+ ],
+ "role": "assistant"
+ }
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 566,
+ "outputTokens": 60,
+ "totalTokens": 626,
+ "cacheReadInputTokenCount": 0,
+ "cacheWriteInputTokenCount": 0
+ }
+ }
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/json
+ Date:
+ - Tue, 25 Mar 2025 10:43:06 GMT
+ Set-Cookie: test_set_cookie
+ X-Amzn-Bedrock-Cache-Read-Input-Token-Count:
+ - '0'
+ X-Amzn-Bedrock-Cache-Write-Input-Token-Count:
+ - '0'
+ X-Amzn-Bedrock-Input-Token-Count:
+ - '566'
+ X-Amzn-Bedrock-Invocation-Latency:
+ - '402'
+ X-Amzn-Bedrock-Output-Token-Count:
+ - '60'
+ x-amzn-RequestId:
+ - 085cca26-6cd7-4a4a-84bb-dbedfc44d806
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_no_content_tool_call.yaml b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_content_tool_call[anthropic.claude].yaml
similarity index 73%
rename from instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_no_content_tool_call.yaml
rename to instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_content_tool_call[anthropic.claude].yaml
index d17a7650e7..448d71ba60 100644
--- a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_no_content_tool_call.yaml
+++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_content_tool_call[anthropic.claude].yaml
@@ -41,13 +41,13 @@ interactions:
- Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
X-Amz-Date:
- - 20250226T151736Z
+ - 20250325T104306Z
X-Amz-Security-Token:
- test_aws_security_token
X-Amzn-Trace-Id:
- - Root=1-be4db93b-959d2ec8903f2762e5f37cbd;Parent=b5141bf00d68433b;Sampled=1
+ - Root=1-707dba6e-fd8c6f2155d8bb2cca4f2be9;Parent=4b0c1b6755b4ba5f;Sampled=1
amz-sdk-invocation-id:
- - c3a88d0a-aa88-4b5a-8863-57a1244ad6dc
+ - d352356d-f036-41bb-9089-fc9401621c09
amz-sdk-request:
- attempt=1
authorization:
@@ -58,18 +58,18 @@ interactions:
body:
string: |-
{
- "id": "msg_bdrk_01QWPpNurHqPGh95Hw2trJHi",
+ "id": "msg_bdrk_01Vcemt76oWJo739rm2hmaxn",
"type": "message",
"role": "assistant",
"model": "claude-3-5-sonnet-20240620",
"content": [
{
"type": "text",
- "text": "Certainly! I'll check the current weather for both Seattle and San Francisco using the available tool. I'll make two separate calls to the `get_current_weather` function, one for each city."
+ "text": "Certainly! I'll check the current weather for both Seattle and San Francisco using the available tool. I'll make two separate calls to the get_current_weather function, one for each city."
},
{
"type": "tool_use",
- "id": "toolu_bdrk_014GpWZJt1rkFqZa7mHk2aJq",
+ "id": "toolu_bdrk_01Y5MJKoHE4VJ5ZrhcVfM1gP",
"name": "get_current_weather",
"input": {
"location": "Seattle"
@@ -77,7 +77,7 @@ interactions:
},
{
"type": "tool_use",
- "id": "toolu_bdrk_01L38gxST8wiG9nGDCWk2C65",
+ "id": "toolu_bdrk_014yQPSMntXHRmzGYxCbmBHE",
"name": "get_current_weather",
"input": {
"location": "San Francisco"
@@ -88,7 +88,7 @@ interactions:
"stop_sequence": null,
"usage": {
"input_tokens": 392,
- "output_tokens": 137
+ "output_tokens": 135
}
}
headers:
@@ -97,16 +97,16 @@ interactions:
Content-Type:
- application/json
Date:
- - Wed, 26 Feb 2025 15:17:41 GMT
+ - Tue, 25 Mar 2025 10:43:10 GMT
Set-Cookie: test_set_cookie
X-Amzn-Bedrock-Input-Token-Count:
- '392'
X-Amzn-Bedrock-Invocation-Latency:
- - '5525'
+ - '3712'
X-Amzn-Bedrock-Output-Token-Count:
- - '137'
+ - '135'
x-amzn-RequestId:
- - ffb07f8d-164c-43e0-991f-646773dd645f
+ - e35fc4e1-e704-4785-985d-684916e41fd1
status:
code: 200
message: OK
@@ -128,11 +128,11 @@ interactions:
"content": [
{
"type": "text",
- "text": "Certainly! I'll check the current weather for both Seattle and San Francisco using the available tool. I'll make two separate calls to the `get_current_weather` function, one for each city."
+ "text": "Certainly! I'll check the current weather for both Seattle and San Francisco using the available tool. I'll make two separate calls to the get_current_weather function, one for each city."
},
{
"type": "tool_use",
- "id": "toolu_bdrk_014GpWZJt1rkFqZa7mHk2aJq",
+ "id": "toolu_bdrk_01Y5MJKoHE4VJ5ZrhcVfM1gP",
"name": "get_current_weather",
"input": {
"location": "Seattle"
@@ -140,7 +140,7 @@ interactions:
},
{
"type": "tool_use",
- "id": "toolu_bdrk_01L38gxST8wiG9nGDCWk2C65",
+ "id": "toolu_bdrk_014yQPSMntXHRmzGYxCbmBHE",
"name": "get_current_weather",
"input": {
"location": "San Francisco"
@@ -153,12 +153,12 @@ interactions:
"content": [
{
"type": "tool_result",
- "tool_use_id": "toolu_bdrk_014GpWZJt1rkFqZa7mHk2aJq",
+ "tool_use_id": "toolu_bdrk_01Y5MJKoHE4VJ5ZrhcVfM1gP",
"content": "50 degrees and raining"
},
{
"type": "tool_result",
- "tool_use_id": "toolu_bdrk_01L38gxST8wiG9nGDCWk2C65",
+ "tool_use_id": "toolu_bdrk_014yQPSMntXHRmzGYxCbmBHE",
"content": "70 degrees and sunny"
}
]
@@ -187,18 +187,18 @@ interactions:
}
headers:
Content-Length:
- - '1301'
+ - '1299'
User-Agent:
- Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
X-Amz-Date:
- - 20250226T151741Z
+ - 20250325T104310Z
X-Amz-Security-Token:
- test_aws_security_token
X-Amzn-Trace-Id:
- - Root=1-11ab3305-1fc481b7382fb201231fc60f;Parent=f67d918ec897fe1d;Sampled=1
+ - Root=1-60501822-2add5a653af51ee5ebd4ee49;Parent=66a9d0972d34fef2;Sampled=1
amz-sdk-invocation-id:
- - 9a379a0a-1d36-407c-9cfb-40ed5a06671c
+ - 011563b5-68d3-49d6-8951-87739673b32c
amz-sdk-request:
- attempt=1
authorization:
@@ -209,21 +209,21 @@ interactions:
body:
string: |-
{
- "id": "msg_bdrk_01F9DN3P4FcAd295FfvbW4Lf",
+ "id": "msg_bdrk_0177fGp1jEHWhhQXD31c6BEm",
"type": "message",
"role": "assistant",
"model": "claude-3-5-sonnet-20240620",
"content": [
{
"type": "text",
- "text": "Thank you for providing the weather information. Based on the tool results, here's the current weather for Seattle and San Francisco:\n\nSeattle: The current weather in Seattle is 50 degrees and raining.\n\nSan Francisco: The current weather in San Francisco is 70 degrees and sunny.\n\nAs you can see, there's quite a difference in the weather between these two West Coast cities today. Seattle is experiencing cooler temperatures with rain, which is not uncommon for the city. On the other hand, San Francisco is enjoying a warmer, sunny day. If you're planning any activities in either city, you might want to dress accordingly \u2013 perhaps bring a rain jacket and umbrella in Seattle, while in San Francisco, you could comfortably enjoy outdoor activities in the pleasant weather.\n\nIs there anything else you'd like to know about the weather in these cities or any other locations?"
+ "text": "Based on the results from our weather tool, here's the current weather for Seattle and San Francisco:\n\n1. Seattle: The current weather in Seattle is 50 degrees and raining.\n2. San Francisco: The current weather in San Francisco is 70 degrees and sunny.\n\nAs you can see, the two cities are experiencing quite different weather conditions today. Seattle is having a cooler, rainy day, which is fairly typical for the Pacific Northwest. On the other hand, San Francisco is enjoying warmer temperatures and sunshine, making for a pleasant day in the Bay Area.\n\nIs there anything else you'd like to know about the weather in these cities or any other locations?"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
- "input_tokens": 606,
- "output_tokens": 187
+ "input_tokens": 604,
+ "output_tokens": 146
}
}
headers:
@@ -232,16 +232,16 @@ interactions:
Content-Type:
- application/json
Date:
- - Wed, 26 Feb 2025 15:17:50 GMT
+ - Tue, 25 Mar 2025 10:43:15 GMT
Set-Cookie: test_set_cookie
X-Amzn-Bedrock-Input-Token-Count:
- - '606'
+ - '604'
X-Amzn-Bedrock-Invocation-Latency:
- - '8333'
+ - '4047'
X-Amzn-Bedrock-Output-Token-Count:
- - '187'
+ - '146'
x-amzn-RequestId:
- - f78980c5-06c8-4684-8eee-da4a0f847a82
+ - b34cbc84-44fe-4217-84f1-0b897a6880e0
status:
code: 200
message: OK
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_no_content_tool_call.yaml b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_no_content_tool_call.yaml
deleted file mode 100644
index 79f4542141..0000000000
--- a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_no_content_tool_call.yaml
+++ /dev/null
@@ -1,468 +0,0 @@
-interactions:
-- request:
- body: |-
- {
- "messages": [
- {
- "role": "user",
- "content": [
- {
- "text": "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco",
- "type": "text"
- }
- ]
- }
- ],
- "anthropic_version": "bedrock-2023-05-31",
- "tools": [
- {
- "name": "get_current_weather",
- "description": "Get the current weather in a given location.",
- "input_schema": {
- "type": "object",
- "properties": {
- "location": {
- "type": "string",
- "description": "The name of the city"
- }
- },
- "required": [
- "location"
- ]
- }
- }
- ],
- "max_tokens": 1000
- }
- headers:
- Content-Length:
- - '515'
- User-Agent:
- - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
- lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
- X-Amz-Date:
- - 20250226T162651Z
- X-Amz-Security-Token:
- - test_aws_security_token
- X-Amzn-Trace-Id:
- - Root=1-10a25b27-b954e11442909a0f803e1ac4;Parent=a390cc92f9828a56;Sampled=1
- amz-sdk-invocation-id:
- - beb75a8c-d5ba-4a82-8c80-4ddfb471dd52
- amz-sdk-request:
- - attempt=1
- authorization:
- - Bearer test_aws_authorization
- method: POST
- uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20240620-v1%3A0/invoke-with-response-stream
- response:
- body:
- string: !!binary |
- AAAB+wAAAEtwlPWYCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
- aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpj
- MkZuWlY5emRHRnlkQ0lzSW0xbGMzTmhaMlVpT25zaWFXUWlPaUp0YzJkZlltUnlhMTh3TVRVM2Iy
- SmFaV3BNVldsV1dsVlVZMVJqWmtGeGVIRWlMQ0owZVhCbElqb2liV1Z6YzJGblpTSXNJbkp2YkdV
- aU9pSmhjM05wYzNSaGJuUWlMQ0p0YjJSbGJDSTZJbU5zWVhWa1pTMHpMVFV0YzI5dWJtVjBMVEl3
- TWpRd05qSXdJaXdpWTI5dWRHVnVkQ0k2VzEwc0luTjBiM0JmY21WaGMyOXVJanB1ZFd4c0xDSnpk
- Rzl3WDNObGNYVmxibU5sSWpwdWRXeHNMQ0oxYzJGblpTSTZleUpwYm5CMWRGOTBiMnRsYm5NaU9q
- TTVNaXdpYjNWMGNIVjBYM1J2YTJWdWN5STZNVEI5ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
- cXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4In1vN6vvAAABBwAA
- AEv9UEjECzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pz
- b24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5
- aWJHOWphMTl6ZEdGeWRDSXNJbWx1WkdWNElqb3dMQ0pqYjI1MFpXNTBYMkpzYjJOcklqcDdJblI1
- Y0dVaU9pSjBaWGgwSWl3aWRHVjRkQ0k2SWlKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFy
- c3R1dnd4eXpBQkNERUZHSElKS0xNTk8ifXB7QbUAAAFEAAAAS+IDal0LOmV2ZW50LXR5cGUHAAVj
- aHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZl
- bnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVa
- R1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9p
- SkRaWEowWVdsdWJIa2hJRWtuYkd3Z1kyaGxZMnNnZEdobElHTjFjbkpsYm5RZ2QyVmhkR2hsY2lC
- bWIzSWlmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5P
- UFFSU1QifZeoBF8AAAEWAAAAS6DQ9vYLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBl
- BwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVY
- QmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJ
- NmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdZbTkwYUNCVFpXRjBkR3hs
- SUdGdVpDQlRZVzRnUm5KaGJtTnBjMk52SUhWemFXNW5JbjE5IiwicCI6ImFiY2RlZmdoaWprbCJ9
- W9VIygAAAPsAAABLu8gmPQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
- aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZ
- Mjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVY
- QmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ2RHaGxJR0YyWVdsc1lXSnNaU0IwYjI5
- c0xpQkpJbjE5IiwicCI6ImFiY2RlIn14bAq8AAABDgAAAEvwQCq1CzpldmVudC10eXBlBwAFY2h1
- bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50
- eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdW
- NElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlu
- Ykd3Z2JXRnJaU0IwZDI4Z2MyVndZWEpoZEdVZ1kyRnNiSE1nZEc4Z2RHaGxJbjE5IiwicCI6ImFi
- Y2RlZmdoIn2OxI3cAAABNQAAAEsmsaMiCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlw
- ZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBl
- WEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlT
- STZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnWjJWMFgyTjFjbkpsYm5S
- ZmQyVmhkR2hsY2lCbWRXNWpkR2x2Yml3Z2IyNWxJR1p2Y2lCbFlXTm9JbjE5IiwicCI6ImFiY2Rl
- ZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJIn3aQuB7AAABGwAAAEtYQDJHCzpldmVudC10
- eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlw
- ZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlT
- SXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5S
- bGVIUWlPaUlnWTJsMGVTNGlmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJD
- REVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNCJ94RZuCgAAALoAAABL3ltXxAs6ZXZlbnQtdHlw
- ZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUH
- AAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5emRHOXdJaXdp
- YVc1a1pYZ2lPakI5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eCJ9Rwp15AAAAWoAAABL
- nPL7OAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
- DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWli
- RzlqYTE5emRHRnlkQ0lzSW1sdVpHVjRJam94TENKamIyNTBaVzUwWDJKc2IyTnJJanA3SW5SNWNH
- VWlPaUowYjI5c1gzVnpaU0lzSW1sa0lqb2lkRzl2YkhWZlltUnlhMTh3TVRkTFF6UklRVFJrYjBR
- elVXUjNPRmMxV0VKS01qVWlMQ0p1WVcxbElqb2laMlYwWDJOMWNuSmxiblJmZDJWaGRHaGxjaUlz
- SW1sdWNIVjBJanA3ZlgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdI
- SUpLTE1OIn2gPuNzAAABCgAAAEsFwIx1CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlw
- ZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBl
- WEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3hMQ0prWld4MFlT
- STZleUowZVhCbElqb2lhVzV3ZFhSZmFuTnZibDlrWld4MFlTSXNJbkJoY25ScFlXeGZhbk52YmlJ
- NklpSjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUIifUMf/SwAAAEXAAAA
- S52w30YLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNv
- bg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlp
- Ykc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpveExDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWFXNXdk
- WFJmYW5OdmJsOWtaV3gwWVNJc0luQmhjblJwWVd4ZmFuTnZiaUk2SW50Y0lteHZZeUo5ZlE9PSIs
- InAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkcifVxwRWoAAAEIAAAAS38A3xUL
- OmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVz
- c2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amEx
- OWtaV3gwWVNJc0ltbHVaR1Y0SWpveExDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWFXNXdkWFJmYW5O
- dmJsOWtaV3gwWVNJc0luQmhjblJwWVd4ZmFuTnZiaUk2SW1GMGFXOXVYQ0k2SW4xOSIsInAiOiJh
- YmNkZWZnaGlqa2xtbm9wcXIiffdXeowAAAExAAAAS9MxBeILOmV2ZW50LXR5cGUHAAVjaHVuaw06
- Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5
- dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpv
- eExDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWFXNXdkWFJmYW5OdmJsOWtaV3gwWVNJc0luQmhjblJw
- WVd4ZmFuTnZiaUk2SWlCY0lsTmxZWFIwYkdWY0luMGlmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1u
- b3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWSJ9cveECgAAALYAAABLG6u6xQs6
- ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNz
- YWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5
- emRHOXdJaXdpYVc1a1pYZ2lPakY5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0In0U0UJnAAAB
- ZwAAAEtkYj+JCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9u
- L2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1
- ZEY5aWJHOWphMTl6ZEdGeWRDSXNJbWx1WkdWNElqb3lMQ0pqYjI1MFpXNTBYMkpzYjJOcklqcDdJ
- blI1Y0dVaU9pSjBiMjlzWDNWelpTSXNJbWxrSWpvaWRHOXZiSFZmWW1SeWExOHdNVkp4Y0hGNFMx
- STVOa1ptVmxoRmIyZDFSRlZ6ZUVzaUxDSnVZVzFsSWpvaVoyVjBYMk4xY25KbGJuUmZkMlZoZEdo
- bGNpSXNJbWx1Y0hWMElqcDdmWDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJD
- REVGR0hJSksifSwusWQAAAENAAAAS7fgUGULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10
- eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlK
- MGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpveUxDSmtaV3gw
- WVNJNmV5SjBlWEJsSWpvaWFXNXdkWFJmYW5OdmJsOWtaV3gwWVNJc0luQmhjblJwWVd4ZmFuTnZi
- aUk2SWlKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERSJ9o+JMHQAA
- ATEAAABL0zEF4gs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlv
- bi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdW
- dWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam95TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9p
- YVc1d2RYUmZhbk52Ymw5a1pXeDBZU0lzSW5CaGNuUnBZV3hmYW5OdmJpSTZJbnRjSW14dlkyRjBh
- Vzl1WENJNkluMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xN
- Tk9QUVJTVFVWV1hZIn0IhzoSAAABJgAAAEsB8U5wCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRl
- bnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6
- ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3lMQ0pr
- Wld4MFlTSTZleUowZVhCbElqb2lhVzV3ZFhSZmFuTnZibDlrWld4MFlTSXNJbkJoY25ScFlXeGZh
- bk52YmlJNklpQmNJaUo5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RF
- RkdISUpLTE1OT1BRUlNUVVZXWFlaIn3YiXbxAAABAgAAAEs1sMe0CzpldmVudC10eXBlBwAFY2h1
- bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50
- eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdW
- NElqb3lMQ0prWld4MFlTSTZleUowZVhCbElqb2lhVzV3ZFhSZmFuTnZibDlrWld4MFlTSXNJbkJo
- Y25ScFlXeGZhbk52YmlJNklsTmhiaUJHSW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wIn3s8BjJ
- AAABKgAAAEvEAaNxCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
- aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVk
- R1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3lMQ0prWld4MFlTSTZleUowZVhCbElq
- b2lhVzV3ZFhSZmFuTnZibDlrWld4MFlTSXNJbkJoY25ScFlXeGZhbk52YmlJNkluSmhJbjE5Iiwi
- cCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVow
- MTIzNDU2NyJ9t/dh+wAAAQEAAABLchC9ZAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5
- cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUow
- ZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam95TENKa1pXeDBZ
- U0k2ZXlKMGVYQmxJam9pYVc1d2RYUmZhbk52Ymw5a1pXeDBZU0lzSW5CaGNuUnBZV3hmYW5OdmJp
- STZJbTVqYVhOakluMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vIn0iAVpXAAABJAAAAEt7MR0QCzpl
- dmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3Nh
- Z2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlr
- Wld4MFlTSXNJbWx1WkdWNElqb3lMQ0prWld4MFlTSTZleUowZVhCbElqb2lhVzV3ZFhSZmFuTnZi
- bDlrWld4MFlTSXNJbkJoY25ScFlXeGZhbk52YmlJNkltOWNJbjBpZlgwPSIsInAiOiJhYmNkZWZn
- aGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWCJ9PDiR6QAAAMkAAABL
- YCnN2ws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
- DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWli
- RzlqYTE5emRHOXdJaXdpYVc1a1pYZ2lPako5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
- eHl6QUJDREVGR0hJSktMTSJ95d+LbAAAASUAAABLRlE0oAs6ZXZlbnQtdHlwZQcABWNodW5rDTpj
- b250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0
- ZXMiOiJleUowZVhCbElqb2liV1Z6YzJGblpWOWtaV3gwWVNJc0ltUmxiSFJoSWpwN0luTjBiM0Jm
- Y21WaGMyOXVJam9pZEc5dmJGOTFjMlVpTENKemRHOXdYM05sY1hWbGJtTmxJanB1ZFd4c2ZTd2lk
- WE5oWjJVaU9uc2liM1YwY0hWMFgzUnZhMlZ1Y3lJNk1UTTFmWDA9IiwicCI6ImFiY2RlZmdoaWpr
- bG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJIn0Q5e/OAAABcQAAAEuLwl2rCzpldmVudC10eXBlBwAF
- Y2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2
- ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpjMkZuWlY5emRHOXdJaXdpWVcxaGVtOXVMV0ps
- WkhKdlkyc3RhVzUyYjJOaGRHbHZiazFsZEhKcFkzTWlPbnNpYVc1d2RYUlViMnRsYmtOdmRXNTBJ
- am96T1RJc0ltOTFkSEIxZEZSdmEyVnVRMjkxYm5RaU9qazBMQ0pwYm5adlkyRjBhVzl1VEdGMFpX
- NWplU0k2TXpjMk55d2labWx5YzNSQ2VYUmxUR0YwWlc1amVTSTZNVEUwTkgxOSIsInAiOiJhYmNk
- ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyIn34qdlr
- headers:
- Connection:
- - keep-alive
- Content-Type:
- - application/vnd.amazon.eventstream
- Date:
- - Wed, 26 Feb 2025 16:26:52 GMT
- Set-Cookie: test_set_cookie
- Transfer-Encoding:
- - chunked
- X-Amzn-Bedrock-Content-Type:
- - application/json
- x-amzn-RequestId:
- - 40f5bf06-a873-484c-80ba-b9d614f44e5a
- status:
- code: 200
- message: OK
-- request:
- body: |-
- {
- "messages": [
- {
- "role": "user",
- "content": [
- {
- "text": "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco",
- "type": "text"
- }
- ]
- },
- {
- "role": "assistant",
- "content": [
- {
- "type": "text",
- "text": "Certainly! I'll check the current weather for both Seattle and San Francisco using the available tool. I'll make two separate calls to the get_current_weather function, one for each city."
- },
- {
- "type": "tool_use",
- "id": "toolu_bdrk_017KC4HA4doD3Qdw8W5XBJ25",
- "name": "get_current_weather",
- "input": {
- "location": "Seattle"
- }
- },
- {
- "type": "tool_use",
- "id": "toolu_bdrk_01RqpqxKR96FfVXEoguDUsxK",
- "name": "get_current_weather",
- "input": {
- "location": "San Francisco"
- }
- }
- ]
- },
- {
- "role": "user",
- "content": [
- {
- "type": "tool_result",
- "tool_use_id": "toolu_bdrk_017KC4HA4doD3Qdw8W5XBJ25",
- "content": "50 degrees and raining"
- },
- {
- "type": "tool_result",
- "tool_use_id": "toolu_bdrk_01RqpqxKR96FfVXEoguDUsxK",
- "content": "70 degrees and sunny"
- }
- ]
- }
- ],
- "anthropic_version": "bedrock-2023-05-31",
- "tools": [
- {
- "name": "get_current_weather",
- "description": "Get the current weather in a given location.",
- "input_schema": {
- "type": "object",
- "properties": {
- "location": {
- "type": "string",
- "description": "The name of the city"
- }
- },
- "required": [
- "location"
- ]
- }
- }
- ],
- "max_tokens": 1000
- }
- headers:
- Content-Length:
- - '1299'
- User-Agent:
- - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
- lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
- X-Amz-Date:
- - 20250226T162655Z
- X-Amz-Security-Token:
- - test_aws_security_token
- X-Amzn-Trace-Id:
- - Root=1-b99116bf-027ad914d67e36aa0f68b847;Parent=8bdc2a89cc7b923e;Sampled=1
- amz-sdk-invocation-id:
- - 3dbe9e81-fcf4-47b2-ae14-08094b20ec68
- amz-sdk-request:
- - attempt=1
- authorization:
- - Bearer test_aws_authorization
- method: POST
- uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20240620-v1%3A0/invoke-with-response-stream
- response:
- body:
- string: !!binary |
- AAABzgAAAEsZVcJuCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
- aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpj
- MkZuWlY5emRHRnlkQ0lzSW0xbGMzTmhaMlVpT25zaWFXUWlPaUp0YzJkZlltUnlhMTh3TVRjeWVH
- Z3hielF5ZGtaR1VVMTJPV2huVkZGYWVXRWlMQ0owZVhCbElqb2liV1Z6YzJGblpTSXNJbkp2YkdV
- aU9pSmhjM05wYzNSaGJuUWlMQ0p0YjJSbGJDSTZJbU5zWVhWa1pTMHpMVFV0YzI5dWJtVjBMVEl3
- TWpRd05qSXdJaXdpWTI5dWRHVnVkQ0k2VzEwc0luTjBiM0JmY21WaGMyOXVJanB1ZFd4c0xDSnpk
- Rzl3WDNObGNYVmxibU5sSWpwdWRXeHNMQ0oxYzJGblpTSTZleUpwYm5CMWRGOTBiMnRsYm5NaU9q
- WXdOQ3dpYjNWMGNIVjBYM1J2YTJWdWN5STZNbjE5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
- In3eAWLTAAAA9wAAAEt+OMs8CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFw
- cGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpv
- aVkyOXVkR1Z1ZEY5aWJHOWphMTl6ZEdGeWRDSXNJbWx1WkdWNElqb3dMQ0pqYjI1MFpXNTBYMkpz
- YjJOcklqcDdJblI1Y0dVaU9pSjBaWGgwSWl3aWRHVjRkQ0k2SWlKOWZRPT0iLCJwIjoiYWJjZGVm
- Z2hpamtsbW5vcHFyc3R1dnd4eSJ9dAbelAAAAR4AAABLkKC9Nws6ZXZlbnQtdHlwZQcABWNodW5r
- DTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsi
- Ynl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJ
- am93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lKY2Js
- eHVRbUZ6WlNKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElK
- S0xNTk9QUVJTVFVWV1hZWjAxMjMifWw4RscAAAEQAAAASy+QA1YLOmV2ZW50LXR5cGUHAAVjaHVu
- aw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7
- ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0
- SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSmtJ
- Rzl1SUhSb1pTQnlaWE4xYkhSeklHWnliMjBnZEdobElIUnZiMndnWTJGc2JITXNJbjE5IiwicCI6
- ImFiY2RlZiJ97LWTEwAAATgAAABL3iFnkws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5
- cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUow
- ZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZ
- U0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ2FHVnlaU2R6SUhSb1pT
- QmpkWEp5Wlc1MElIZGxZWFJvWlhJZ1ptOXlJbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0
- dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMSJ9r2OqxAAAATQAAABLG9GKkgs6ZXZl
- bnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdl
- LXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pX
- eDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJ
- c0luUmxlSFFpT2lJZ1ltOTBhQ0JqYVhScFpYTTZYRzVjYmpFdUlGTmxZWFIwYkdVNklGUm9aU0o5
- ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNU
- In0xAZLVAAABKAAAAEu+wfARCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFw
- cGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpv
- aVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUow
- ZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnWTNWeWNtVnVkQ0IzWldGMGFHVnlJ
- R2x1SUZObFlYUjBiR1VnYVhNZ05UQWdJbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
- eHl6QUJDREVGR0gifY3Qt0kAAAEAAAAAS09wlNQLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
- dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
- ZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmta
- V3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSmtaV2R5WldWeklH
- RnVaQ0J5WVdsdWFXNW5MaUo5ZlE9PSIsInAiOiJhYmNkZWZnaGlqIn3cZ9VMAAABKQAAAEuDodmh
- CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1l
- c3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWph
- MTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pX
- eDBZU0lzSW5SbGVIUWlPaUpjYmx4dU1pNGdVMkZ1SUVaeVlXNWphWE5qYnpvZ1ZHaGxJR04xY25K
- bGJuUWdkMlZoZEdobGNpSjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3In20laRP
- AAABKQAAAEuDodmhCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
- aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVk
- R1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElq
- b2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnYVc0Z1UyRnVJRVp5WVc1amFYTmpieUJwY3lB
- M01DQmtaV2R5WldWekluMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZH
- SElKS0xNIn1f+ZnIAAABFgAAAEug0Pb2CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlw
- ZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBl
- WEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlT
- STZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnWVc1a0lITjFibTU1TGx4
- dVhHNUJjeUI1YjNVZ1kyRnVJSE5sWlN3aWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3Qi
- fXppv6oAAAFFAAAAS99jQ+0LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
- bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9p
- WTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBl
- WEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdkR2hsY21VbmN5QnhkV2wwWlNCaElH
- UnBabVpsY21WdVkyVWdhVzRnZDJWaGRHaGxjaUo5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
- cXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyIn2ZUOlKAAABEQAAAEsS8Crm
- CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1l
- c3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWph
- MTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pX
- eDBZU0lzSW5SbGVIUWlPaUlnWW1WMGQyVmxiaUIwYUdVZ2RIZHZJR05wZEdsbGN5QjBiMlJoZVNK
- OWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vIn0Ct3/8AAABIAAAAEuOsbvQCzpldmVudC10eXBl
- BwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
- BWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJ
- bWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVI
- UWlPaUl1SUZObFlYUjBiR1VnYVhNZ1pYaHdaWEpwWlc1amFXNW5JbjE5IiwicCI6ImFiY2RlZmdo
- aWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMIn3X8wTGAAABNwAAAEtccfBCCzpldmVudC10
- eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlw
- ZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlT
- SXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5S
- bGVIUWlPaUlnWTI5dmJHVnlJSFJsYlhCbGNtRjBkWEpsY3lCM2FYUm9JSEpoYVc0c0lIZG9hV05v
- SW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlMi
- fQ7WhzkAAAEXAAAAS52w30YLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
- bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9p
- WTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBl
- WEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdhWE1nWm1GcGNteDVJSFI1Y0dsallX
- d2dabTl5SUhSb1pTSjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHkifSWlDGgA
- AAD8AAAASwno+i0LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRp
- b24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRH
- VnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpv
- aWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdZMmwwZVM0Z1QyNGdkR2hsSUc5MGFHVnlJR2ho
- Ym1Rc0luMTkiLCJwIjoiYWIifQbBP7wAAAEiAAAAS/Rx6LALOmV2ZW50LXR5cGUHAAVjaHVuaw06
- Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5
- dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpv
- d0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdVMkZ1
- SUVaeVlXNWphWE5qYnlCcGN5QmxibXB2ZVdsdVp5QjNZWElpZlgwPSIsInAiOiJhYmNkZWZnaGlq
- a2xtbm9wcXJzdHV2d3h5ekFCQ0RFRiJ9wuk+owAAASQAAABLezEdEAs6ZXZlbnQtdHlwZQcABWNo
- dW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVu
- dHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpH
- VjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lK
- dFpYSWdkR1Z0Y0dWeVlYUjFjbVZ6SUhkcGRHZ2djM1Z1Ym5rZ2MydHBaWE1zSUcxaGEybHVaeUo5
- ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXIifYyH1W0AAAEkAAAAS3sxHRALOmV2ZW50LXR5
- cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBl
- BwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJ
- c0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJs
- ZUhRaU9pSWdhWFFnWVNCd2JHVmhjMkZ1ZENCa1lYa2dhVzRpZlgwPSIsInAiOiJhYmNkZWZnaGlq
- a2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUIn14axXGAAABHgAAAEuQoL03Czpl
- dmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3Nh
- Z2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlr
- Wld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZ
- U0lzSW5SbGVIUWlPaUlnZEdobElFSmhlU0JCY21WaExseHVYRzVKY3lKOWZRPT0iLCJwIjoiYWJj
- ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTiJ9QB11+QAAATMAAABLqfFWggs6
- ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNz
- YWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5
- a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gw
- WVNJc0luUmxlSFFpT2lJZ2RHaGxjbVVnWVc1NWRHaHBibWNnWld4elpTQjViM1VuWkNCc2FXdGxJ
- SFJ2SW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BR
- UlMifQ/OPn4AAAEZAAAASyKAYScLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQ
- YXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJ
- am9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5
- SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdhMjV2ZHlCaFltOTFkQ0IwYUdV
- Z2QyVmhkR2hsY2lCcGJpQjBhR1Z6WlNKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFycyJ9
- fiDLOwAAATEAAABL0zEF4gs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
- aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZ
- Mjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVY
- QmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ1kybDBhV1Z6SUc5eUlHRnVlU0J2ZEdo
- bGNpQnNiMk5oZEdsdmJuTWlmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJD
- REVGR0hJSktMTU5PUFFSU1RVIn30EdU8AAABDwAAAEvNIAMFCzpldmVudC10eXBlBwAFY2h1bmsN
- OmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJi
- eXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElq
- b3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUkvSW4x
- OSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZX
- WFlaMCJ9t5HFRwAAAMUAAABLpdkg2gs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUH
- ABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhC
- bElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5emRHOXdJaXdpYVc1a1pYZ2lPakI5IiwicCI6ImFiY2Rl
- ZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJIn2kbq84AAABDwAAAEvNIAMFCzpldmVudC10
- eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlw
- ZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpjMkZuWlY5a1pXeDBZU0lzSW1SbGJI
- UmhJanA3SW5OMGIzQmZjbVZoYzI5dUlqb2laVzVrWDNSMWNtNGlMQ0p6ZEc5d1gzTmxjWFZsYm1O
- bElqcHVkV3hzZlN3aWRYTmhaMlVpT25zaWIzVjBjSFYwWDNSdmEyVnVjeUk2TVRRMWZYMD0iLCJw
- IjoiYWJjZGVmZ2hpamtsbSJ9vABIagAAAVAAAABLd2NbHws6ZXZlbnQtdHlwZQcABWNodW5rDTpj
- b250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0
- ZXMiOiJleUowZVhCbElqb2liV1Z6YzJGblpWOXpkRzl3SWl3aVlXMWhlbTl1TFdKbFpISnZZMnN0
- YVc1MmIyTmhkR2x2YmsxbGRISnBZM01pT25zaWFXNXdkWFJVYjJ0bGJrTnZkVzUwSWpvMk1EUXNJ
- bTkxZEhCMWRGUnZhMlZ1UTI5MWJuUWlPakUwTlN3aWFXNTJiMk5oZEdsdmJreGhkR1Z1WTNraU9q
- UXhOamtzSW1acGNuTjBRbmwwWlV4aGRHVnVZM2tpT2pjM09YMTkiLCJwIjoiYWJjZGVmZ2hpamts
- bW5vcHFyc3R1diJ90qwbQw==
- headers:
- Connection:
- - keep-alive
- Content-Type:
- - application/vnd.amazon.eventstream
- Date:
- - Wed, 26 Feb 2025 16:26:56 GMT
- Set-Cookie: test_set_cookie
- Transfer-Encoding:
- - chunked
- X-Amzn-Bedrock-Content-Type:
- - application/json
- x-amzn-RequestId:
- - 608633c6-9f6d-4c09-b7d3-6b06e3ee22da
- status:
- code: 200
- message: OK
-version: 1
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_no_content_tool_call[amazon.nova].yaml b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_no_content_tool_call[amazon.nova].yaml
new file mode 100644
index 0000000000..c3341b7998
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_no_content_tool_call[amazon.nova].yaml
@@ -0,0 +1,648 @@
+interactions:
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please give one tool call for Seattle and one for San Francisco"
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "max_new_tokens": 1000
+ },
+ "schemaVersion": "messages-v1",
+ "toolConfig": {
+ "tools": [
+ {
+ "toolSpec": {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "inputSchema": {
+ "json": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ headers:
+ Content-Length:
+ - '550'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250328T095545Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-cc955679-a8c45b468f9db1139b274c15;Parent=0d73ce35f14a3d3d;Sampled=1
+ amz-sdk-invocation-id:
+ - abb47d5d-46b6-4ffe-a595-392788da86be
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.nova-micro-v1%3A0/invoke-with-response-stream
+ response:
+ body:
+ string: !!binary |
+ AAAAvQAAAEtse4vUCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SnRaWE56WVdkbFUzUmhj
+ blFpT25zaWNtOXNaU0k2SW1GemMybHpkR0Z1ZENKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5v
+ cHFyc3R1dnd4eXpBIn1NL1/3AAABAwAAAEsI0O4ECzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRl
+ bnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6
+ ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lQSFJv
+ YVc1cmFXNW5JbjBzSW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpvd2ZYMD0iLCJwIjoiYWJjZGVm
+ Z2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWVyJ9x+xhrAAAAMQAAABL
+ mLkJags6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJ
+ anA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpvd2ZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5v
+ cHFyc3R1dnd4eXoifaHxL7kAAAD+AAAAS3MoqU0LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
+ dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
+ ZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaVBpQlVh
+ R1VpZlN3aVkyOXVkR1Z1ZEVKc2IyTnJTVzVrWlhnaU9qRjlmUT09IiwicCI6ImFiY2RlZmdoaWpr
+ bG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVViJ9j8HqtQAAAMMAAABLKpnVegs6
+ ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNz
+ YWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1O
+ dmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveGZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1
+ dnd4eSJ9jih54QAAAQEAAABLchC9ZAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUH
+ ABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1
+ MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUZWelpYSWlmU3dp
+ WTI5dWRHVnVkRUpzYjJOclNXNWtaWGdpT2pKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFy
+ c3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZIn09Iow2AAAAzgAAAEvSCRHLCzpldmVu
+ dC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2Ut
+ dHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5S
+ bGJuUkNiRzlqYTBsdVpHVjRJam95ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5
+ ekFCQ0RFRkdISUoifSnJvDQAAADNAAAAS5WpaxsLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
+ dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
+ ZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlHaGhj
+ eUo5TENKamIyNTBaVzUwUW14dlkydEpibVJsZUNJNk0zMTkiLCJwIjoiYWJjIn3kKUJpAAAAswAA
+ AEvTSzW1CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pz
+ b24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5
+ d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam96ZlgwPSIsInAiOiJhYmNkZWZnaGkifTcj
+ yJQAAAD5AAAAS8EIdV0LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGlj
+ YXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14
+ dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlISmxjWFZsYzNSbFpDQjBhR1Vp
+ ZlN3aVkyOXVkR1Z1ZEVKc2IyTnJTVzVrWlhnaU9qUjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1u
+ b3BxcnN0dXZ3eHl6QUJDREUifZE1wvoAAADMAAAAS6jJQqsLOmV2ZW50LXR5cGUHAAVjaHVuaw06
+ Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5
+ dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdW
+ NElqbzBmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0gifcuY1BkA
+ AAENAAAAS7fgUGULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRp
+ b24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlky
+ dEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlHTjFjbkpsYm5RZ2QyVmhkR2hsY2lC
+ cGJpSjlMQ0pqYjI1MFpXNTBRbXh2WTJ0SmJtUmxlQ0k2TlgxOSIsInAiOiJhYmNkZWZnaGlqa2xt
+ bm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVSJ9NBetQgAAANwAAABLyCnVKQs6ZXZl
+ bnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdl
+ LXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJu
+ UmxiblJDYkc5amEwbHVaR1Y0SWpvMWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4
+ eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1gifVbHrAMAAAEHAAAAS/1QSMQLOmV2ZW50LXR5cGUH
+ AAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAF
+ ZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5
+ SjBaWGgwSWpvaUlIUjNieUo5TENKamIyNTBaVzUwUW14dlkydEpibVJsZUNJNk5uMTkiLCJwIjoi
+ YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0
+ NTY3OCJ93reH+gAAAMMAAABLKpnVegs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUH
+ ABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1
+ MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpvMmZYMD0iLCJw
+ IjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eSJ9xDuFYAAAANcAAABLv/nkOAs6ZXZlbnQtdHlw
+ ZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUH
+ AAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2
+ ZXlKMFpYaDBJam9pSUdScFptWmxjbVZ1ZENKOUxDSmpiMjUwWlc1MFFteHZZMnRKYm1SbGVDSTZO
+ MzE5IiwicCI6ImFiY2RlIn1klrs/AAAAyQAAAEtgKc3bCzpldmVudC10eXBlBwAFY2h1bmsNOmNv
+ bnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRl
+ cyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJ
+ am8zZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFIn1JzAZsAAABFwAA
+ AEudsN9GCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pz
+ b24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4
+ MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lJR3h2WTJGMGFXOXVjem9nVTJWaGRIUnNaU0Jo
+ Ym1RZ1UyRnVJRVp5WVc1amFYTmpieUo5TENKamIyNTBaVzUwUW14dlkydEpibVJsZUNJNk9IMTki
+ LCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHIn0NoadzAAAAuAAAAEukmwSk
+ CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1l
+ c3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJ
+ bU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam80ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbiJ9y6M3
+ rAAAANYAAABLgpnNiAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNh
+ dGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2
+ WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pTGlCSklHTmhiaUo5TENKamIyNTBa
+ VzUwUW14dlkydEpibVJsZUNJNk9YMTkiLCJwIjoiYWJjZGVmZ2gifRG9uKsAAAC9AAAAS2x7i9QL
+ OmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVz
+ c2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0lt
+ TnZiblJsYm5SQ2JHOWphMGx1WkdWNElqbzVmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnMi
+ fbpDvR0AAAEFAAAAS4eQG6QLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
+ bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUw
+ UW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlIVnpaU0IwYUdVZ1hDSWlm
+ U3dpWTI5dWRHVnVkRUpzYjJOclNXNWtaWGdpT2pFd2ZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5v
+ cHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFUifdX1XJwAAADUAAAAS/hZnugLOmV2ZW50
+ LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10
+ eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJs
+ Ym5SQ2JHOWphMGx1WkdWNElqb3hNSDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6
+ QUJDREVGR0hJSktMTU5PUCJ93t/4vQAAAOsAAABL2yixvws6ZXZlbnQtdHlwZQcABWNodW5rDTpj
+ b250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0
+ ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9p
+ WjJWMFgyTjFjbkpsYm5SZmQyVmhkR2hsY2x3aUluMHNJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJ
+ am94TVgxOSIsInAiOiJhYmNkZWZnaGkifRbLt30AAADeAAAAS7LphkkLOmV2ZW50LXR5cGUHAAVj
+ aHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZl
+ bnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWph
+ MGx1WkdWNElqb3hNWDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJ
+ SktMTU5PUFFSU1RVVldYWVoifaKlpSEAAADhAAAAS5GYqR4LOmV2ZW50LXR5cGUHAAVjaHVuaw06
+ Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5
+ dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpv
+ aUlIUnZiMndnZEc4Z2IySjBZV2x1SW4wc0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hNbjE5
+ IiwicCI6ImFiY2RlZmcifdw8CY8AAAC/AAAASxa72LQLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29u
+ dGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVz
+ IjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElq
+ b3hNbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dSJ9pPMw3gAAAQgAAABLfwDfFQs6ZXZl
+ bnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdl
+ LXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pX
+ eDBZU0k2ZXlKMFpYaDBJam9pSUhSb2FYTWlmU3dpWTI5dWRHVnVkRUpzYjJOclNXNWtaWGdpT2pF
+ emZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJT
+ VFVWV1hZWjAxMjM0NSJ9BtleugAAAMcAAABL3xlzugs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250
+ ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMi
+ OiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpv
+ eE0zMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkMiffkkJbEAAAD5AAAAS8EI
+ dV0LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06
+ bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJ
+ NmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlHbHVabTl5YldGMGFXOXVMaUo5TENKamIyNTBaVzUw
+ UW14dlkydEpibVJsZUNJNk1UUjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6
+ QUJDREUifdkNZbEAAADUAAAAS/hZnugLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBl
+ BwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIy
+ NTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hOSDE5Iiwi
+ cCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUCJ9uNstjQAAAOIA
+ AABL1jjTzgs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9q
+ c29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpX
+ eDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUVrZ2QybHNiQ0o5TENKamIyNTBaVzUwUW14
+ dlkydEpibVJsZUNJNk1UVjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3Aife3+hwAAAADVAAAA
+ S8U5t1gLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNv
+ bg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3
+ SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hOWDE5IiwicCI6ImFiY2RlZmdoaWprbG1u
+ b3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFEifRxkAS0AAADiAAAAS9Y4084LOmV2ZW50LXR5
+ cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBl
+ BwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJ
+ NmV5SjBaWGgwSWpvaUlHMWhhMlVpZlN3aVkyOXVkR1Z1ZEVKc2IyTnJTVzVrWlhnaU9qRTJmWDA9
+ IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0In35qHxbAAAAywAAAEsa6Z67CzpldmVudC10eXBl
+ BwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
+ BWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNi
+ RzlqYTBsdVpHVjRJam94Tm4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RF
+ RkcifWL2nHYAAADxAAAAS/F4PpwLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQ
+ YXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBa
+ VzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlIUjNieUo5TENKamIy
+ NTBaVzUwUW14dlkydEpibVJsZUNJNk1UZDlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0
+ dXZ3eHl6QUJDREVGR0hJIn20qMuFAAAA4wAAAEvrWPp+CzpldmVudC10eXBlBwAFY2h1bmsNOmNv
+ bnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRl
+ cyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJ
+ am94TjMxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BR
+ UlNUVVZXWFlaMDEyMzQifWvnOlUAAADqAAAAS+ZImA8LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29u
+ dGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVz
+ IjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlI
+ TmxjR0Z5WVhSbElIUnZiMndnWTJGc2JITXNJbjBzSW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpv
+ eE9IMTkiLCJwIjoiYWJjZGVmZ2gifTPRTysAAADOAAAAS9IJEcsLOmV2ZW50LXR5cGUHAAVjaHVu
+ aw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7
+ ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1
+ WkdWNElqb3hPSDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSiJ9
+ SZv7WQAAAOIAAABL1jjTzgs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
+ aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBR
+ bXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUc5dVpTQm1iM0lnWldGamFD
+ SjlMQ0pqYjI1MFpXNTBRbXh2WTJ0SmJtUmxlQ0k2TVRsOWZRPT0iLCJwIjoiYWJjZGVmZ2gifeGA
+ +iYAAADaAAAAS0dpIIkLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGlj
+ YXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14
+ dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hPWDE5IiwicCI6ImFiY2Rl
+ ZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVViJ9Eq1oOwAAAN0AAABL
+ 9Un8mQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZ
+ U0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUd4dlkyRjBhVzl1SW4wc0ltTnZiblJsYm5SQ2JH
+ OWphMGx1WkdWNElqb3lNSDE5IiwicCI6ImFiY2RlZmdoaWprIn2VHcExAAAA3gAAAEuy6YZJCzpl
+ dmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3Nh
+ Z2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52
+ Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam95TUgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
+ d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIn11I/wjAAAA0gAAAEt3GWtICzpldmVudC10
+ eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlw
+ ZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlT
+ STZleUowWlhoMElqb2lMand2SW4wc0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3lNWDE5Iiwi
+ cCI6ImFiY2RlZmdoIn2tgvkOAAAAyAAAAEtdSeRrCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRl
+ bnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6
+ ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam95
+ TVgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0QifT5w5lAAAAEPAAAAS80g
+ AwULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06
+ bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJ
+ NmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaWRHaHBibXRwYm1jaWZTd2lZMjl1ZEdWdWRFSnNiMk5y
+ U1c1a1pYZ2lPakl5ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdI
+ SUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1Njc4In2K5UJaAAAAsAAAAEuU609lCzpldmVudC10eXBl
+ BwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
+ BWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNi
+ RzlqYTBsdVpHVjRJam95TW4xOSIsInAiOiJhYmNkZWYifSQOfsUAAAECAAAASzWwx7QLOmV2ZW50
+ LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10
+ eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gw
+ WVNJNmV5SjBaWGgwSWpvaVBseHVJbjBzSW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveU0zMTki
+ LCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ
+ WjAxMjMifVD14TYAAAC7AAAAS+M7fnQLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBl
+ BwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIy
+ NTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3lNMzE5Iiwi
+ cCI6ImFiY2RlZmdoaWprbG1ub3BxIn1anJC8AAABPwAAAEtsAbuDCzpldmVudC10eXBlBwAFY2h1
+ bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50
+ eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEdGeWRDSTZleUp6ZEdGeWRDSTZleUowYjI5
+ c1ZYTmxJanA3SW5SdmIyeFZjMlZKWkNJNkltUTRPVGxrWVRnNUxUVmhOamN0TkdGbU1pMWhZVFUw
+ TFRVMFpqWmtNbUZoWkdRME1DSXNJbTVoYldVaU9pSm5aWFJmWTNWeWNtVnVkRjkzWldGMGFHVnlJ
+ bjE5TENKamIyNTBaVzUwUW14dlkydEpibVJsZUNJNk1qUjlmUT09IiwicCI6ImFiY2RlZmdoaSJ9
+ 5j3KswAAAP0AAABLNIjTnQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
+ aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBR
+ bXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMGIyOXNWWE5sSWpwN0ltbHVjSFYwSWpvaWUx
+ d2liRzlqWVhScGIyNWNJanBjSWxObFlYUjBiR1ZjSW4waWZYMHNJbU52Ym5SbGJuUkNiRzlqYTBs
+ dVpHVjRJam95TkgxOSIsInAiOiJhYmMifawii5YAAADQAAAASw3ZOCgLOmV2ZW50LXR5cGUHAAVj
+ aHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZl
+ bnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWph
+ MGx1WkdWNElqb3lOSDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJ
+ SktMIn2luZBuAAABSgAAAEtdM9Q8CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcA
+ EGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUw
+ Wlc1MFFteHZZMnRUZEdGeWRDSTZleUp6ZEdGeWRDSTZleUowYjI5c1ZYTmxJanA3SW5SdmIyeFZj
+ MlZKWkNJNkltSmxOMkk1WldKaExUSTVNVFF0TkdFd1lTMWlZVEZrTFdVNE5qTmhPREk0TVdNeE9D
+ SXNJbTVoYldVaU9pSm5aWFJmWTNWeWNtVnVkRjkzWldGMGFHVnlJbjE5TENKamIyNTBaVzUwUW14
+ dlkydEpibVJsZUNJNk1qWjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0In2zxOrsAAAB
+ EQAAAEsS8CrmCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9u
+ L2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRF
+ Wld4MFlTSTZleUprWld4MFlTSTZleUowYjI5c1ZYTmxJanA3SW1sdWNIVjBJam9pZTF3aWJHOWpZ
+ WFJwYjI1Y0lqcGNJbE5oYmlCR2NtRnVZMmx6WTI5Y0luMGlmWDBzSW1OdmJuUmxiblJDYkc5amEw
+ bHVaR1Y0SWpveU5uMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vIn0kJSA6AAAAwwAAAEsqmdV6Czpl
+ dmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3Nh
+ Z2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52
+ Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam95Tm4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
+ d3h5In3IuHR1AAAA0AAAAEsN2TgoCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcA
+ EGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SnRaWE56
+ WVdkbFUzUnZjQ0k2ZXlKemRHOXdVbVZoYzI5dUlqb2lkRzl2YkY5MWMyVWlmWDA9IiwicCI6ImFi
+ Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUCJ9p7lBxgAAAlUAAABLORem
+ wQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTpt
+ ZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUp0WlhSaFpHRjBZU0k2ZXlKMWMyRm5aU0k2
+ ZXlKcGJuQjFkRlJ2YTJWdWN5STZOREkzTENKdmRYUndkWFJVYjJ0bGJuTWlPakUyTUN3aVkyRmph
+ R1ZTWldGa1NXNXdkWFJVYjJ0bGJrTnZkVzUwSWpvd0xDSmpZV05vWlZkeWFYUmxTVzV3ZFhSVWIy
+ dGxia052ZFc1MElqb3dmU3dpYldWMGNtbGpjeUk2ZTMwc0luUnlZV05sSWpwN2ZYMHNJbUZ0WVhw
+ dmJpMWlaV1J5YjJOckxXbHVkbTlqWVhScGIyNU5aWFJ5YVdOeklqcDdJbWx1Y0hWMFZHOXJaVzVE
+ YjNWdWRDSTZOREkzTENKdmRYUndkWFJVYjJ0bGJrTnZkVzUwSWpveE5qQXNJbWx1ZG05allYUnBi
+ MjVNWVhSbGJtTjVJam8wTkRJc0ltWnBjbk4wUW5sMFpVeGhkR1Z1WTNraU9qVTRMQ0pqWVdOb1pW
+ SmxZV1JKYm5CMWRGUnZhMlZ1UTI5MWJuUWlPakFzSW1OaFkyaGxWM0pwZEdWSmJuQjFkRlJ2YTJW
+ dVEyOTFiblFpT2pCOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZH
+ SElKS0xNTk9QUSJ9DZpD9w==
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/vnd.amazon.eventstream
+ Date:
+ - Fri, 28 Mar 2025 09:55:46 GMT
+ Set-Cookie: test_set_cookie
+ Transfer-Encoding:
+ - chunked
+ X-Amzn-Bedrock-Content-Type:
+ - application/json
+ x-amzn-RequestId:
+ - 9bf238d7-0bf5-4875-8724-e6c2ff941ba0
+ status:
+ code: 200
+ message: OK
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please give one tool call for Seattle and one for San Francisco"
+ }
+ ]
+ },
+ {
+ "role": "assistant",
+ "content": [
+ {
+ "text": " The User has requested the current weather in two different locations: Seattle and San Francisco. I can use the \"get_current_weather\" tool to obtain this information. I will make two separate tool calls, one for each location.\n"
+ },
+ {
+ "toolUse": {
+ "toolUseId": "d899da89-5a67-4af2-aa54-54f6d2aadd40",
+ "name": "get_current_weather",
+ "input": {
+ "location": "Seattle"
+ }
+ }
+ },
+ {
+ "toolUse": {
+ "toolUseId": "be7b9eba-2914-4a0a-ba1d-e863a8281c18",
+ "name": "get_current_weather",
+ "input": {
+ "location": "San Francisco"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "toolResult": {
+ "toolUseId": "d899da89-5a67-4af2-aa54-54f6d2aadd40",
+ "content": [
+ {
+ "json": {
+ "weather": "50 degrees and raining"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "toolResult": {
+ "toolUseId": "be7b9eba-2914-4a0a-ba1d-e863a8281c18",
+ "content": [
+ {
+ "json": {
+ "weather": "70 degrees and sunny"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "max_new_tokens": 1000
+ },
+ "schemaVersion": "messages-v1",
+ "toolConfig": {
+ "tools": [
+ {
+ "toolSpec": {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "inputSchema": {
+ "json": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ headers:
+ Content-Length:
+ - '1419'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250328T095546Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-149e307b-cdc3a5488e73393d9aaca023;Parent=797734885975d04a;Sampled=1
+ amz-sdk-invocation-id:
+ - 74c51134-6231-4283-9969-3b9d30af7934
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.nova-micro-v1%3A0/invoke-with-response-stream
+ response:
+ body:
+ string: !!binary |
+ AAAAqQAAAEv5G7qWCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SnRaWE56WVdkbFUzUmhj
+ blFpT25zaWNtOXNaU0k2SW1GemMybHpkR0Z1ZENKOWZRPT0iLCJwIjoiYWJjZGVmZyJ92nUjYgAA
+ AQ0AAABLt+BQZQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlv
+ bi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0
+ RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pUEhSb2FXNXJhVzVuSW4wc0ltTnZiblJs
+ Ym5SQ2JHOWphMGx1WkdWNElqb3dmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6
+ QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2In3CYIM7AAAAugAAAEveW1fECzpldmVu
+ dC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2Ut
+ dHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5S
+ bGJuUkNiRzlqYTBsdVpHVjRJam93ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wIn29kWftAAAB
+ AAAAAEtPcJTUCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9u
+ L2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRF
+ Wld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lQaUJKSW4wc0ltTnZiblJsYm5SQ2JHOWph
+ MGx1WkdWNElqb3hmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJ
+ SktMTU5PUFFSU1RVVldYWVowMSJ9tRgXQwAAAOQAAABLWXgmbgs6ZXZlbnQtdHlwZQcABWNodW5r
+ DTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsi
+ Ynl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVa
+ R1Y0SWpveGZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xN
+ Tk9QUVJTVFVWV1hZWjAxMjM0NSJ9N5g5GAAAAP8AAABLTkiA/Qs6ZXZlbnQtdHlwZQcABWNodW5r
+ DTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsi
+ Ynl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJ
+ am9pSUdoaGRtVWdjbVZqWldsMlpXUWlmU3dpWTI5dWRHVnVkRUpzYjJOclNXNWtaWGdpT2pKOWZR
+ PT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKSyJ9b+UvSgAAANAA
+ AABLDdk4KAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9q
+ c29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRH
+ OXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveWZYMD0iLCJwIjoiYWJjZGVmZ2hpamts
+ bW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0wifT6gPnsAAADsAAAAS2kIba8LOmV2ZW50LXR5cGUH
+ AAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAF
+ ZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5
+ SjBaWGgwSWpvaUlIUm9aU0IzWldGMGFHVnlJbjBzSW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpv
+ emZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1diJ95BjjVgAAALsAAABL4zt+dAs6ZXZl
+ bnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdl
+ LXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJu
+ UmxiblJDYkc5amEwbHVaR1Y0SWpvemZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHEifR/K8NgA
+ AAD2AAAAS0NY4owLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRp
+ b24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlky
+ dEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlHbHVabTl5YldGMGFXOXVJR1p2Y2lK
+ OUxDSmpiMjUwWlc1MFFteHZZMnRKYm1SbGVDSTZOSDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3Bx
+ cnN0dXZ3eHl6QUIifUXT110AAADZAAAASwDJWlkLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
+ dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
+ ZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqbzBm
+ WDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RV
+ In3W/9dIAAABAwAAAEsI0O4ECzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFw
+ cGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1
+ MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lJR0p2ZEdnZ1UyVmhkSFJz
+ WlNKOUxDSmpiMjUwWlc1MFFteHZZMnRKYm1SbGVDSTZOWDE5IiwicCI6ImFiY2RlZmdoaWprbG1u
+ b3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSUyJ9mukwAAAAALYAAABLG6u6xQs6ZXZlbnQt
+ dHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5
+ cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxi
+ blJDYkc5amEwbHVaR1Y0SWpvMWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsIn0O1VkRAAAA/gAAAEtz
+ KKlNCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24N
+ Om1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlT
+ STZleUprWld4MFlTSTZleUowWlhoMElqb2lJR0Z1WkNCVFlXNGdSbkpoYm1OcGMyTnZMaUJPYjNj
+ aWZTd2lZMjl1ZEdWdWRFSnNiMk5yU1c1a1pYZ2lPalo5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xt
+ bm9wcXJzdHV2d3gifSkeAZ0AAAC2AAAASxurusULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
+ dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
+ ZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqbzJm
+ WDA9IiwicCI6ImFiY2RlZmdoaWprbCJ9/IK06QAAAQMAAABLCNDuBAs6ZXZlbnQtdHlwZQcABWNo
+ dW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVu
+ dHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpY
+ aDBJam9pSUVrZ1kyRnVJSEJ5YjNacFpHVWlmU3dpWTI5dWRHVnVkRUpzYjJOclNXNWtaWGdpT2pk
+ OWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk8ifQRO
+ iGgAAADYAAAASz2pc+kLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGlj
+ YXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14
+ dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqbzNmWDA9IiwicCI6ImFiY2Rl
+ ZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1QifdXDjmMAAAEJAAAAS0Jg
+ 9qULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06
+ bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJ
+ NmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlIUm9aU0JWYzJWeUluMHNJbU52Ym5SbGJuUkNiRzlq
+ YTBsdVpHVjRJam80ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdI
+ SUpLTE1OT1BRUlNUVVZXWFlaMDEyIn0pkPlgAAAAuQAAAEuZ+y0UCzpldmVudC10eXBlBwAFY2h1
+ bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50
+ eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBs
+ dVpHVjRJam80ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm8ifeF7mJUAAAEaAAAAS2UgG/cLOmV2
+ ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2Fn
+ ZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5Smta
+ V3gwWVNJNmV5SjBaWGgwSWpvaUlIZHBkR2dnZEdobElISmxjWFZsYzNSbFpDSjlMQ0pqYjI1MFpX
+ NTBRbXh2WTJ0SmJtUmxlQ0k2T1gxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFC
+ Q0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1NjcifS+7vKUAAADhAAAAS5GYqR4LOmV2ZW50
+ LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10
+ eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJs
+ Ym5SQ2JHOWphMGx1WkdWNElqbzVmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6
+ QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIifYpLXlEAAAD9AAAASzSI050LOmV2ZW50LXR5
+ cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBl
+ BwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJ
+ NmV5SjBaWGgwSWpvaUlHUmxkR0ZwYkhNaWZTd2lZMjl1ZEdWdWRFSnNiMk5yU1c1a1pYZ2lPakV3
+ ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRIn2i
+ XtanAAAArAAAAEsx+zXmCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxp
+ Y2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFt
+ eHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam94TUgxOSIsInAiOiJhYiJ9
+ hwc2DAAAAMwAAABLqMlCqws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
+ aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBR
+ bXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pTGp3dkluMHNJbU52Ym5SbGJu
+ UkNiRzlqYTBsdVpHVjRJam94TVgxOSIsInAiOiJhYiJ9c78fagAAAMIAAABLF/n8ygs6ZXZlbnQt
+ dHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5
+ cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxi
+ blJDYkc5amEwbHVaR1Y0SWpveE1YMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4In07
+ Db3dAAAA9wAAAEt+OMs8CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxp
+ Y2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFt
+ eHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lkR2hwYm10cGJtY2lmU3dpWTI5
+ dWRHVnVkRUpzYjJOclNXNWtaWGdpT2pFeWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1
+ dnd4eXpBQkNERUZHSElKSyJ9N48JAgAAAM4AAABL0gkRyws6ZXZlbnQtdHlwZQcABWNodW5rDTpj
+ b250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0
+ ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0
+ SWpveE1uMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKIn3aB0ty
+ AAAA3wAAAEuPia/5CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZ
+ MnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lQbHh1WEc0aWZTd2lZMjl1ZEdWdWRF
+ SnNiMk5yU1c1a1pYZ2lPakV6ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcSJ9N7YWzgAAAOEA
+ AABLkZipHgs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9q
+ c29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRH
+ OXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveE0zMTkiLCJwIjoiYWJjZGVmZ2hpamts
+ bW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMiJ9jFAQKgAAAQIAAABL
+ NbDHtAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZ
+ U0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pVkdobEluMHNJbU52Ym5SbGJuUkNiRzlqYTBsdVpH
+ VjRJam94TkgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1O
+ T1BRUlNUVVZXWFlaMDEyMyJ95ZivugAAAN8AAABLj4mv+Qs6ZXZlbnQtdHlwZQcABWNodW5rDTpj
+ b250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0
+ ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0
+ SWpveE5IMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9Q
+ UVJTVFVWV1hZWjAifXA8o9wAAAEJAAAAS0Jg9qULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
+ dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
+ ZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlHTjFj
+ bkpsYm5RaWZTd2lZMjl1ZEdWdWRFSnNiMk5yU1c1a1pYZ2lPakUxZlgwPSIsInAiOiJhYmNkZWZn
+ aGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyIn06JltBAAAA
+ wwAAAEsqmdV6CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9u
+ L2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRU
+ ZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam94TlgxOSIsInAiOiJhYmNkZWZnaGlq
+ a2xtbm9wcXJzdHV2d3h5In2Ut+TbAAABIwAAAEvJEcEACzpldmVudC10eXBlBwAFY2h1bmsNOmNv
+ bnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRl
+ cyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lJ
+ SGRsWVhSb1pYSWdhVzRnVTJWaGRIUnNaU0JwY3lBaWZTd2lZMjl1ZEdWdWRFSnNiMk5yU1c1a1pY
+ Z2lPakUyZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1O
+ T1BRUlNUVVZXWFlaMDEyMzQ1Njc4In05XxO1AAAA5QAAAEtkGA/eCzpldmVudC10eXBlBwAFY2h1
+ bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50
+ eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBs
+ dVpHVjRJam94Tm4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpL
+ TE1OT1BRUlNUVVZXWFlaMDEyMzQ1NiJ9qydgAQAAAOEAAABLkZipHgs6ZXZlbnQtdHlwZQcABWNo
+ dW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVu
+ dHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpY
+ aDBJam9pTlRBZ1pHVm5jbVZsY3lCaGJtUWdhWFFpZlN3aVkyOXVkR1Z1ZEVKc2IyTnJTVzVrWlhn
+ aU9qRTNmWDA9IiwicCI6ImFiYyJ9io3kmAAAAOEAAABLkZipHgs6ZXZlbnQtdHlwZQcABWNodW5r
+ DTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsi
+ Ynl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVa
+ R1Y0SWpveE4zMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xN
+ Tk9QUVJTVFVWV1hZWjAxMiJ9Ixa4TAAAAPAAAABLzBgXLAs6ZXZlbnQtdHlwZQcABWNodW5rDTpj
+ b250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0
+ ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9p
+ SUdseklISmhhVzVwYm1jdUlFbHVJbjBzSW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveE9IMTki
+ LCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1diJ9wf+umAAAANcAAABLv/nkOAs6ZXZlbnQtdHlw
+ ZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUH
+ AAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJD
+ Ykc5amEwbHVaR1Y0SWpveE9IMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE
+ RUZHSElKS0xNTk9QUVJTIn1GPnmoAAABEgAAAEtVUFA2CzpldmVudC10eXBlBwAFY2h1bmsNOmNv
+ bnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRl
+ cyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lJ
+ Rk5oYmlCR2NtRnVZMmx6WTI4c0lIUm9aU0o5TENKamIyNTBaVzUwUW14dlkydEpibVJsZUNJNk1U
+ bDlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFS
+ U1RVViJ9d30foAAAAL8AAABLFrvYtAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUH
+ ABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1
+ MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveE9YMTkiLCJw
+ IjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1In3q9PIPAAABGAAAAEsf4EiXCzpldmVudC10eXBlBwAF
+ Y2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2
+ ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUow
+ WlhoMElqb2lJSGRsWVhSb1pYSWdhWE1nTnpBZ1pHVm5jbVZsY3lKOUxDSmpiMjUwWlc1MFFteHZZ
+ MnRKYm1SbGVDSTZNakI5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RF
+ RkdISUpLTE1OT1BRUlNUVVZXWCJ9ttcxeQAAAMkAAABLYCnN2ws6ZXZlbnQtdHlwZQcABWNodW5r
+ DTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsi
+ Ynl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVa
+ R1Y0SWpveU1IMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERSJ9gsGuhAAA
+ AN4AAABLsumGSQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlv
+ bi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0
+ RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUdGdVpDQnpkVzV1ZVM0aWZTd2lZMjl1
+ ZEdWdWRFSnNiMk5yU1c1a1pYZ2lPakl4ZlgwPSIsInAiOiJhYmNkZWZnaCJ996MH6AAAALEAAABL
+ qYtm1Qs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJ
+ anA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveU1YMTkiLCJwIjoiYWJjZGVmZyJ95Pb+2QAA
+ AMQAAABLmLkJags6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlv
+ bi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUp0WlhOellXZGxVM1J2Y0NJ
+ NmV5SnpkRzl3VW1WaGMyOXVJam9pWlc1a1gzUjFjbTRpZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xt
+ bm9wcXJzdHV2d3h5ekFCQ0QifZbgu+UAAAJgAAAAS1DWkTcLOmV2ZW50LXR5cGUHAAVjaHVuaw06
+ Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5
+ dGVzIjoiZXlKdFpYUmhaR0YwWVNJNmV5SjFjMkZuWlNJNmV5SnBibkIxZEZSdmEyVnVjeUk2TlRj
+ eUxDSnZkWFJ3ZFhSVWIydGxibk1pT2pVNExDSmpZV05vWlZKbFlXUkpibkIxZEZSdmEyVnVRMjkx
+ Ym5RaU9qQXNJbU5oWTJobFYzSnBkR1ZKYm5CMWRGUnZhMlZ1UTI5MWJuUWlPakI5TENKdFpYUnlh
+ V056SWpwN2ZTd2lkSEpoWTJVaU9udDlmU3dpWVcxaGVtOXVMV0psWkhKdlkyc3RhVzUyYjJOaGRH
+ bHZiazFsZEhKcFkzTWlPbnNpYVc1d2RYUlViMnRsYmtOdmRXNTBJam8xTnpJc0ltOTFkSEIxZEZS
+ dmEyVnVRMjkxYm5RaU9qVTRMQ0pwYm5adlkyRjBhVzl1VEdGMFpXNWplU0k2TXpnd0xDSm1hWEp6
+ ZEVKNWRHVk1ZWFJsYm1ONUlqbzJOaXdpWTJGamFHVlNaV0ZrU1c1d2RYUlViMnRsYmtOdmRXNTBJ
+ am93TENKallXTm9aVmR5YVhSbFNXNXdkWFJVYjJ0bGJrTnZkVzUwSWpvd2ZYMD0iLCJwIjoiYWJj
+ ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NSJ9
+ Dhd0RQ==
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/vnd.amazon.eventstream
+ Date:
+ - Fri, 28 Mar 2025 09:55:46 GMT
+ Set-Cookie: test_set_cookie
+ Transfer-Encoding:
+ - chunked
+ X-Amzn-Bedrock-Content-Type:
+ - application/json
+ x-amzn-RequestId:
+ - f7f7a941-75c5-4e55-8788-54537019e78d
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_no_content_tool_call[anthropic.claude].yaml b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_no_content_tool_call[anthropic.claude].yaml
new file mode 100644
index 0000000000..a5dc4ff6d2
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_no_content_tool_call[anthropic.claude].yaml
@@ -0,0 +1,460 @@
+interactions:
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please give one tool call for Seattle and one for San Francisco",
+ "type": "text"
+ }
+ ]
+ }
+ ],
+ "anthropic_version": "bedrock-2023-05-31",
+ "tools": [
+ {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "input_schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ ],
+ "max_tokens": 1000
+ }
+ headers:
+ Content-Length:
+ - '513'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250325T163458Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-522fe453-45d148244e3e7762363841b4;Parent=df4528398bc97d09;Sampled=1
+ amz-sdk-invocation-id:
+ - f8ea0f99-772d-4c2e-985c-7a253e7552e3
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20240620-v1%3A0/invoke-with-response-stream
+ response:
+ body:
+ string: !!binary |
+ AAABxAAAAEtT5drPCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpj
+ MkZuWlY5emRHRnlkQ0lzSW0xbGMzTmhaMlVpT25zaWFXUWlPaUp0YzJkZlltUnlhMTh3TVV0RVdG
+ WnlXbTlvWWtoRk1uQklVR1I2VmtabVF6Y2lMQ0owZVhCbElqb2liV1Z6YzJGblpTSXNJbkp2YkdV
+ aU9pSmhjM05wYzNSaGJuUWlMQ0p0YjJSbGJDSTZJbU5zWVhWa1pTMHpMVFV0YzI5dWJtVjBMVEl3
+ TWpRd05qSXdJaXdpWTI5dWRHVnVkQ0k2VzEwc0luTjBiM0JmY21WaGMyOXVJanB1ZFd4c0xDSnpk
+ Rzl3WDNObGNYVmxibU5sSWpwdWRXeHNMQ0oxYzJGblpTSTZleUpwYm5CMWRGOTBiMnRsYm5NaU9q
+ TTVNaXdpYjNWMGNIVjBYM1J2YTJWdWN5STZPSDE5ZlE9PSIsInAiOiJhYmNkZWYifbiwJ/kAAAET
+ AAAAS2gweYYLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24v
+ anNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVk
+ RjlpYkc5amExOXpkR0Z5ZENJc0ltbHVaR1Y0SWpvd0xDSmpiMjUwWlc1MFgySnNiMk5ySWpwN0lu
+ UjVjR1VpT2lKMFpYaDBJaXdpZEdWNGRDSTZJaUo5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
+ cXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMCJ9XbJItQAAATEAAABL0zEF4gs6
+ ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNz
+ YWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5
+ a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gw
+ WVNJc0luUmxlSFFpT2lKRFpYSjBZV2x1YkhraElFa25iR3dnZFhObElIUm9aU0JuWlhRaWZYMD0i
+ LCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ
+ In10XMrZAAABIwAAAEvJEcEACzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFw
+ cGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpv
+ aVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUow
+ ZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUpmWTNWeWNtVnVkRjkzWldGMGFHVnlJ
+ bjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RV
+ VldYWVowIn1QAxQ9AAABPQAAAEsWwejjCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlw
+ ZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBl
+ WEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlT
+ STZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnWm5WdVkzUnBiMjRnZEc4
+ Z1kyaGxZMnNnZEdobElIZGxZWFJvWlhJaWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1
+ dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTYifc5bypAAAAFEAAAAS+IDal0L
+ OmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVz
+ c2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amEx
+ OWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4
+ MFlTSXNJblJsZUhRaU9pSWdabTl5SUdKdmRHZ2dVMlZoZEhSc1pTQmhibVFnVTJGdUlFWnlZVzVq
+ YVhOamJ5SjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktM
+ TU5PUFFSU1RVVldYWVowMTIzNDUifSjBmUEAAAEMAAAAS4qAedULOmV2ZW50LXR5cGUHAAVjaHVu
+ aw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7
+ ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0
+ SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSXVJ
+ RWtuYkd3Z2JXRnJaU0o5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RF
+ RkdIIn2sWZ9oAAABHAAAAEvqYO5XCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcA
+ EGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJs
+ SWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZl
+ eUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnZEhkdklITmxjR0Z5WVhSbElu
+ MTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVW
+ V1gifU8ZjPIAAAERAAAASxLwKuYLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQ
+ YXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJ
+ am9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5
+ SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdkRzl2YkNCallXeHNjeUIzYVhS
+ b2FXNGlmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREUiffuRFxMAAAD3
+ AAAAS344yzwLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24v
+ anNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVk
+ RjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRH
+ VjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdkR2hsSUhOaGJXVWdablZ1WTNScGIyNGlmWDA9Iiwi
+ cCI6ImFiY2RlIn0tKo5KAAAA8wAAAEuLuG38CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQt
+ dHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5
+ SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4
+ MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnWTJGc2JITWdZbXh2
+ WTJzdUluMTkiLCJwIjoiYWJjZGVmZ2hpIn0QasavAAAA1QAAAEvFObdYCzpldmVudC10eXBlBwAF
+ Y2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2
+ ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTl6ZEc5d0lpd2lhVzVr
+ WlhnaU9qQjkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9Q
+ UVJTVFVWV1hZIn28oUh2AAABUgAAAEsNowh/CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQt
+ dHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5
+ SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTl6ZEdGeWRDSXNJbWx1WkdWNElqb3hMQ0pqYjI1
+ MFpXNTBYMkpzYjJOcklqcDdJblI1Y0dVaU9pSjBiMjlzWDNWelpTSXNJbWxrSWpvaWRHOXZiSFZm
+ WW1SeWExOHdNVkp1TjBOaVlYSTJZVFJUTjNkbE4yZzJhVlYzY0UwaUxDSnVZVzFsSWpvaVoyVjBY
+ Mk4xY25KbGJuUmZkMlZoZEdobGNpSXNJbWx1Y0hWMElqcDdmWDE5IiwicCI6ImFiY2RlZmdoaWpr
+ bG1ub3AifRz8bL4AAAEdAAAAS9cAx+cLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBl
+ BwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVY
+ QmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpveExDSmtaV3gwWVNJ
+ NmV5SjBlWEJsSWpvaWFXNXdkWFJmYW5OdmJsOWtaV3gwWVNJc0luQmhjblJwWVd4ZmFuTnZiaUk2
+ SWlKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9Q
+ UVJTVFUifVWKi8MAAAEKAAAASwXAjHULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBl
+ BwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVY
+ QmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpveExDSmtaV3gwWVNJ
+ NmV5SjBlWEJsSWpvaWFXNXdkWFJmYW5OdmJsOWtaV3gwWVNJc0luQmhjblJwWVd4ZmFuTnZiaUk2
+ SW50Y0lteHZZMkYwYVNKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcCJ9uB2aJAAAAQUAAABL
+ h5AbpAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWli
+ RzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam94TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pYVc1d2RY
+ UmZhbk52Ymw5a1pXeDBZU0lzSW5CaGNuUnBZV3hmYW5OdmJpSTZJbTl1WENJNklGd2lVMlZoZENK
+ OWZRPT0iLCJwIjoiYWJjZGVmZyJ9VyNkvgAAAQoAAABLBcCMdQs6ZXZlbnQtdHlwZQcABWNodW5r
+ DTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsi
+ Ynl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJ
+ am94TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pYVc1d2RYUmZhbk52Ymw5a1pXeDBZU0lzSW5CaGNu
+ UnBZV3hmYW5OdmJpSTZJblJzWlZ3aWZTSjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0
+ In3Db7AIAAAAqQAAAEv5G7qWCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFw
+ cGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpv
+ aVkyOXVkR1Z1ZEY5aWJHOWphMTl6ZEc5d0lpd2lhVzVrWlhnaU9qRjkiLCJwIjoiYWJjZGVmZyJ9
+ 875sMQAAAVgAAABLRxMQ3gs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
+ aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZ
+ Mjl1ZEdWdWRGOWliRzlqYTE5emRHRnlkQ0lzSW1sdVpHVjRJam95TENKamIyNTBaVzUwWDJKc2Iy
+ TnJJanA3SW5SNWNHVWlPaUowYjI5c1gzVnpaU0lzSW1sa0lqb2lkRzl2YkhWZlltUnlhMTh3TVUx
+ M1dHbHpNa3R3ZFhaSVRHWkxNVlpOZEhsS00zQWlMQ0p1WVcxbElqb2laMlYwWDJOMWNuSmxiblJm
+ ZDJWaGRHaGxjaUlzSW1sdWNIVjBJanA3ZlgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
+ In3kprDCAAABGwAAAEtYQDJHCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFw
+ cGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpv
+ aVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3lMQ0prWld4MFlTSTZleUow
+ ZVhCbElqb2lhVzV3ZFhSZmFuTnZibDlrWld4MFlTSXNJbkJoY25ScFlXeGZhbk52YmlJNklpSjlm
+ UT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSUyJ9
+ HBoMygAAASsAAABL+WGKwQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
+ aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZ
+ Mjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam95TENKa1pXeDBZU0k2ZXlKMGVY
+ QmxJam9pYVc1d2RYUmZhbk52Ymw5a1pXeDBZU0lzSW5CaGNuUnBZV3hmYW5OdmJpSTZJbnRjSW14
+ dlkyRjBhVzl1WENJNkluMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZH
+ SElKS0xNTk9QUVJTIn3waLmPAAABBAAAAEu68DIUCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRl
+ bnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6
+ ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3lMQ0pr
+ Wld4MFlTSTZleUowZVhCbElqb2lhVzV3ZFhSZmFuTnZibDlrWld4MFlTSXNJbkJoY25ScFlXeGZh
+ bk52YmlJNklpQmNJbE5oYmlCR2NtRnVJbjE5IiwicCI6ImFiY2RlZmdoaWoifbmfLtEAAAEVAAAA
+ S+dwjCYLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNv
+ bg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlp
+ Ykc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpveUxDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWFXNXdk
+ WFJmYW5OdmJsOWtaV3gwWVNJc0luQmhjblJwWVd4ZmFuTnZiaUk2SW1OcGMyTnZYQ0o5SW4xOSIs
+ InAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFIn0ikqCnAAAAwgAAAEsX+fzKCzpl
+ dmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3Nh
+ Z2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTl6
+ ZEc5d0lpd2lhVzVrWlhnaU9qSjkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE
+ RUYifZN6ltoAAAE+AAAAS1FhkjMLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQ
+ YXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJ
+ am9pYldWemMyRm5aVjlrWld4MFlTSXNJbVJsYkhSaElqcDdJbk4wYjNCZmNtVmhjMjl1SWpvaWRH
+ OXZiRjkxYzJVaUxDSnpkRzl3WDNObGNYVmxibU5sSWpwdWRXeHNmU3dpZFhOaFoyVWlPbnNpYjNW
+ MGNIVjBYM1J2YTJWdWN5STZNVE16ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5
+ ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1NjciffAZqvIAAAFNAAAAS+8TCCwLOmV2
+ ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2Fn
+ ZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pYldWemMyRm5aVjl6ZEc5d0lpd2lZ
+ VzFoZW05dUxXSmxaSEp2WTJzdGFXNTJiMk5oZEdsdmJrMWxkSEpwWTNNaU9uc2lhVzV3ZFhSVWIy
+ dGxia052ZFc1MElqb3pPVElzSW05MWRIQjFkRlJ2YTJWdVEyOTFiblFpT2prM0xDSnBiblp2WTJG
+ MGFXOXVUR0YwWlc1amVTSTZNemt4TlN3aVptbHljM1JDZVhSbFRHRjBaVzVqZVNJNk1UQXpObjE5
+ IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnMifeVdPcA=
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/vnd.amazon.eventstream
+ Date:
+ - Tue, 25 Mar 2025 16:34:59 GMT
+ Set-Cookie: test_set_cookie
+ Transfer-Encoding:
+ - chunked
+ X-Amzn-Bedrock-Content-Type:
+ - application/json
+ x-amzn-RequestId:
+ - b9ea026a-ac98-4d87-9352-99984599e41f
+ status:
+ code: 200
+ message: OK
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please give one tool call for Seattle and one for San Francisco",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "role": "assistant",
+ "content": [
+ {
+ "type": "text",
+ "text": "Certainly! I'll use the get_current_weather function to check the weather for both Seattle and San Francisco. I'll make two separate tool calls within the same function calls block."
+ },
+ {
+ "type": "tool_use",
+ "id": "toolu_bdrk_01Rn7Cbar6a4S7we7h6iUwpM",
+ "name": "get_current_weather",
+ "input": {
+ "location": "Seattle"
+ }
+ },
+ {
+ "type": "tool_use",
+ "id": "toolu_bdrk_01MwXis2KpuvHLfK1VMtyJ3p",
+ "name": "get_current_weather",
+ "input": {
+ "location": "San Francisco"
+ }
+ }
+ ]
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "type": "tool_result",
+ "tool_use_id": "toolu_bdrk_01Rn7Cbar6a4S7we7h6iUwpM",
+ "content": "50 degrees and raining"
+ },
+ {
+ "type": "tool_result",
+ "tool_use_id": "toolu_bdrk_01MwXis2KpuvHLfK1VMtyJ3p",
+ "content": "70 degrees and sunny"
+ }
+ ]
+ }
+ ],
+ "anthropic_version": "bedrock-2023-05-31",
+ "tools": [
+ {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "input_schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ ],
+ "max_tokens": 1000
+ }
+ headers:
+ Content-Length:
+ - '1291'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250325T163502Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-e42f5da2-f049566b669ca481c0e86624;Parent=1bdd6579c05809f1;Sampled=1
+ amz-sdk-invocation-id:
+ - e8800abb-49e8-4f23-8cf1-b0bc695790ff
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20240620-v1%3A0/invoke-with-response-stream
+ response:
+ body:
+ string: !!binary |
+ AAABzQAAAEte9bi+CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpj
+ MkZuWlY5emRHRnlkQ0lzSW0xbGMzTmhaMlVpT25zaWFXUWlPaUp0YzJkZlltUnlhMTh3TVRsWVFW
+ bG9hMWhpZDBOdE1UaDFhRFZGVEc1bFl6Y2lMQ0owZVhCbElqb2liV1Z6YzJGblpTSXNJbkp2YkdV
+ aU9pSmhjM05wYzNSaGJuUWlMQ0p0YjJSbGJDSTZJbU5zWVhWa1pTMHpMVFV0YzI5dWJtVjBMVEl3
+ TWpRd05qSXdJaXdpWTI5dWRHVnVkQ0k2VzEwc0luTjBiM0JmY21WaGMyOXVJanB1ZFd4c0xDSnpk
+ Rzl3WDNObGNYVmxibU5sSWpwdWRXeHNMQ0oxYzJGblpTSTZleUpwYm5CMWRGOTBiMnRsYm5NaU9q
+ WXdNaXdpYjNWMGNIVjBYM1J2YTJWdWN5STZNbjE5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm8i
+ fT6bXREAAAD/AAAAS05IgP0LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
+ bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9p
+ WTI5dWRHVnVkRjlpYkc5amExOXpkR0Z5ZENJc0ltbHVaR1Y0SWpvd0xDSmpiMjUwWlc1MFgySnNi
+ Mk5ySWpwN0luUjVjR1VpT2lKMFpYaDBJaXdpZEdWNGRDSTZJaUo5ZlE9PSIsInAiOiJhYmNkZWZn
+ aGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkcifYTGj8MAAAEYAAAASx/gSJcLOmV2ZW50LXR5cGUH
+ AAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAF
+ ZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0lt
+ bHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhR
+ aU9pSmNibHh1UW1GelpTSjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJD
+ REVGR0hJSktMTU5PUFFSU1RVVldYIn2GKqAtAAABEwAAAEtoMHmGCzpldmVudC10eXBlBwAFY2h1
+ bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50
+ eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdW
+ NElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUpr
+ SUc5dUlIUm9aU0J5WlhOMWJIUnpJR1p5YjIwZ2IzVnlJbjE5IiwicCI6ImFiY2RlZmdoaWprbG1u
+ b3BxcnN0dXZ3eHkiffifX68AAAEaAAAAS2UgG/cLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
+ dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
+ ZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmta
+ V3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdkMlZoZEdobGNp
+ QjBiMjlzTENCb1pYSmxKM01pZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFC
+ Q0RFRkdISUoifXIJZlcAAAEoAAAAS77B8BELOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10
+ eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlK
+ MGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gw
+ WVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdkR2hsSUdOMWNuSmxi
+ blFnZDJWaGRHaGxjaUJtYjNJaWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpB
+ QkNERUZHSElKS0xNTk9QUVJTVCJ9QaR1XwAAASUAAABLRlE0oAs6ZXZlbnQtdHlwZQcABWNodW5r
+ DTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsi
+ Ynl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJ
+ am93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ1Uy
+ VmhkSFJzWlNCaGJtUWdVMkZ1SUVaeVlXNWphWE5qYnpwY2JseHVVMlZoZEhSc1pTSjlmUT09Iiwi
+ cCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3In09E8tyAAABAgAAAEs1sMe0CzpldmVudC10eXBl
+ BwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
+ BWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJ
+ bWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVI
+ UWlPaUk2SUZSb1pTQmpkWEp5Wlc1MElIZGxZWFJvWlhJZ2FXNGlmWDA9IiwicCI6ImFiY2RlZmdo
+ In3pNDtbAAABDgAAAEvwQCq1CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFw
+ cGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpv
+ aVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUow
+ ZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnVTJWaGRIUnNaU0JwY3lBMU1DQmta
+ V2R5WldWeklHRnVaQ0J5SW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wIn2L7dRhAAABDgAAAEvw
+ QCq1CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24N
+ Om1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJH
+ OWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5
+ a1pXeDBZU0lzSW5SbGVIUWlPaUpoYVc1cGJtY3VYRzVUWVc0Z1JuSmhibU5wYzJOdk9pSjlmUT09
+ IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0In2QqC+BAAABGQAAAEsigGEnCzpldmVudC10eXBl
+ BwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
+ BWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJ
+ bWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVI
+ UWlPaUlnVkdobElHTjFjbkpsYm5RZ2QyVmhkR2hsY2lCcGJpQlRZVzRnUm5KaGJtTnBjMk52SUds
+ eklDSjlmUT09IiwicCI6ImFiY2RlZmcifarIy2wAAAD5AAAAS8EIdV0LOmV2ZW50LXR5cGUHAAVj
+ aHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZl
+ bnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVa
+ R1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9p
+ STNNQ0JrWldkeVpXVnpJR0Z1WkNCemRXNXVlUzRpZlgwPSIsInAiOiJhYmMifUCgNssAAAETAAAA
+ S2gweYYLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNv
+ bg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlp
+ Ykc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRk
+ RjlrWld4MFlTSXNJblJsZUhRaU9pSmNibHh1UVhNZ2VXOTFJR05oYmlCelpXVXNJSFJvWlNCMGQy
+ OGlmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dSJ9iibEcQAAAUsAAABLYFP9jAs6ZXZl
+ bnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdl
+ LXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pX
+ eDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJ
+ c0luUmxlSFFpT2lJZ1kybDBhV1Z6SUdGeVpTQmxlSEJsY21sbGJtTnBibWNnY1hWcGRHVWdaR2xt
+ Wm1WeVpXNTBJSGRsWVhSb1pYSWdZMjl1WkdsMGFXOXVjeUIwYjJSaGVTSjlmUT09IiwicCI6ImFi
+ Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHkifWYWD5kAAAExAAAAS9MxBeILOmV2ZW50LXR5cGUHAAVj
+ aHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZl
+ bnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVa
+ R1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9p
+ SXVJRk5sWVhSMGJHVWdhWE1nYUdGMmFXNW5JR0VnWTI5dmJHVnlMQ0J5WVNKOWZRPT0iLCJwIjoi
+ YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUSJ9JZcMbgAAAQQAAABL
+ uvAyFAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWli
+ RzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRG
+ OWtaV3gwWVNJc0luUmxlSFFpT2lKcGJua2daR0Y1TENCM2FHbGphQ0JwY3lCbVlXbHliSGtpZlgw
+ PSIsInAiOiJhYmNkZWZnaGlqIn16ysiBAAABGgAAAEtlIBv3CzpldmVudC10eXBlBwAFY2h1bmsN
+ OmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJi
+ eXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElq
+ b3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnZEhs
+ d2FXTmhiQ0JtYjNJZ2RHaGxJRkJoWTJsbWFXTWdUbTl5ZEdoM1pYTjBMaUJQYmlKOWZRPT0iLCJw
+ IjoiYWJjZGVmZ2hpamtsIn1jUGsNAAABJgAAAEsB8U5wCzpldmVudC10eXBlBwAFY2h1bmsNOmNv
+ bnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRl
+ cyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dM
+ Q0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnZEdobElH
+ OTBhR1Z5SUdoaGJtUXNJRk5oYmlCR2NtRnVZMmx6WTI4Z2FYTWdaVzVxYjNscGJtY2lmWDA9Iiwi
+ cCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0In25ObEhAAABOwAAAEuZgR1DCzpldmVudC10eXBlBwAF
+ Y2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2
+ ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1
+ WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlP
+ aUlnWVNCM1lYSnRJR0Z1WkNCemRXNXVlU0JrWVhrc0lIQmxjbVpsWTNRaWZYMD0iLCJwIjoiYWJj
+ ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0In13
+ gEV7AAABOgAAAEuk4TTzCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxp
+ Y2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVky
+ OXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhC
+ bElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnWm05eUlHOTFkR1J2YjNJZ1lXTjBhWFpw
+ ZEdsbGN5NWNibHh1U1hNaWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE
+ RUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjMifcfKjpUAAAEMAAAAS4qAedULOmV2ZW50LXR5cGUH
+ AAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAF
+ ZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0lt
+ bHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhR
+ aU9pSWdkR2hsY21VZ1lXNTVkR2hwYm1jZ1pXeHpaU0I1YjNVbkluMTkiLCJwIjoiYWJjZGVmZ2hp
+ amtsbW5vcHFyIn2pC/d3AAABFgAAAEug0Pb2CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQt
+ dHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5
+ SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4
+ MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUprSUd4cGEyVWdkRzhn
+ YTI1dmR5QmhZbTkxZENCMGFHVWdkMlZoZEdobGNpSjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1u
+ b3AifcvpckIAAAE/AAAAS2wBu4MLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQ
+ YXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJ
+ am9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5
+ SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdhVzRnZEdobGMyVWdZMmwwYVdW
+ eklHOXlJR0Z1ZVNCdmRHaGxjaUJzYjJOaGRHbHZibk1pZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xt
+ bm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXIn2P8KtRAAAA6wAAAEvbKLG/Czpl
+ dmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3Nh
+ Z2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlr
+ Wld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZ
+ U0lzSW5SbGVIUWlPaUkvSW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcSJ9BD4nBQAAANYAAABL
+ gpnNiAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWli
+ RzlqYTE5emRHOXdJaXdpYVc1a1pYZ2lPakI5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
+ eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoifebszSUAAAErAAAAS/lhisELOmV2ZW50LXR5
+ cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBl
+ BwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pYldWemMyRm5aVjlrWld4MFlTSXNJbVJsYkhS
+ aElqcDdJbk4wYjNCZmNtVmhjMjl1SWpvaVpXNWtYM1IxY200aUxDSnpkRzl3WDNObGNYVmxibU5s
+ SWpwdWRXeHNmU3dpZFhOaFoyVWlPbnNpYjNWMGNIVjBYM1J2YTJWdWN5STZNVE0zZlgwPSIsInAi
+ OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OTyJ9T6Fj3AAAAXQAAABL
+ QyLS2ws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2liV1Z6YzJGblpWOXpk
+ Rzl3SWl3aVlXMWhlbTl1TFdKbFpISnZZMnN0YVc1MmIyTmhkR2x2YmsxbGRISnBZM01pT25zaWFX
+ NXdkWFJVYjJ0bGJrTnZkVzUwSWpvMk1ESXNJbTkxZEhCMWRGUnZhMlZ1UTI5MWJuUWlPakV6Tnl3
+ aWFXNTJiMk5oZEdsdmJreGhkR1Z1WTNraU9qUTBOVEFzSW1acGNuTjBRbmwwWlV4aGRHVnVZM2tp
+ T2pnNE5IMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9Q
+ UVJTVFVWV1hZWjAxMjM0NSJ92l5aXQ==
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/vnd.amazon.eventstream
+ Date:
+ - Tue, 25 Mar 2025 16:35:03 GMT
+ Set-Cookie: test_set_cookie
+ Transfer-Encoding:
+ - chunked
+ X-Amzn-Bedrock-Content-Type:
+ - application/json
+ x-amzn-RequestId:
+ - 5712a4fc-af29-49e3-878a-c10a7cf8236a
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_with_content_tool_call.yaml b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_with_content_tool_call.yaml
deleted file mode 100644
index 5dcfd44600..0000000000
--- a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_with_content_tool_call.yaml
+++ /dev/null
@@ -1,473 +0,0 @@
-interactions:
-- request:
- body: |-
- {
- "messages": [
- {
- "role": "user",
- "content": [
- {
- "text": "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco",
- "type": "text"
- }
- ]
- }
- ],
- "anthropic_version": "bedrock-2023-05-31",
- "tools": [
- {
- "name": "get_current_weather",
- "description": "Get the current weather in a given location.",
- "input_schema": {
- "type": "object",
- "properties": {
- "location": {
- "type": "string",
- "description": "The name of the city"
- }
- },
- "required": [
- "location"
- ]
- }
- }
- ],
- "max_tokens": 1000
- }
- headers:
- Content-Length:
- - '515'
- User-Agent:
- - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
- lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
- X-Amz-Date:
- - 20250226T161935Z
- X-Amz-Security-Token:
- - test_aws_security_token
- X-Amzn-Trace-Id:
- - Root=1-8e6df2a2-1a5703b1615ad033a67eb44a;Parent=b0b3fecbfa1885f4;Sampled=1
- amz-sdk-invocation-id:
- - b1d66eab-2ea7-49d7-8440-4114a8572a41
- amz-sdk-request:
- - attempt=1
- authorization:
- - Bearer test_aws_authorization
- method: POST
- uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20240620-v1%3A0/invoke-with-response-stream
- response:
- body:
- string: !!binary |
- AAAB1QAAAEsOZWT9CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
- aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpj
- MkZuWlY5emRHRnlkQ0lzSW0xbGMzTmhaMlVpT25zaWFXUWlPaUp0YzJkZlltUnlhMTh3TVZCV1lu
- VnRjemhuUjNkNVpXVTVjbW81YnpKWmN6WWlMQ0owZVhCbElqb2liV1Z6YzJGblpTSXNJbkp2YkdV
- aU9pSmhjM05wYzNSaGJuUWlMQ0p0YjJSbGJDSTZJbU5zWVhWa1pTMHpMVFV0YzI5dWJtVjBMVEl3
- TWpRd05qSXdJaXdpWTI5dWRHVnVkQ0k2VzEwc0luTjBiM0JmY21WaGMyOXVJanB1ZFd4c0xDSnpk
- Rzl3WDNObGNYVmxibU5sSWpwdWRXeHNMQ0oxYzJGblpTSTZleUpwYm5CMWRGOTBiMnRsYm5NaU9q
- TTVNaXdpYjNWMGNIVjBYM1J2YTJWdWN5STZPSDE5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
- cXJzdHV2dyJ9X3QTBwAAAQYAAABLwDBhdAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5
- cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUow
- ZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5emRHRnlkQ0lzSW1sdVpHVjRJam93TENKamIyNTBa
- VzUwWDJKc2IyTnJJanA3SW5SNWNHVWlPaUowWlhoMElpd2lkR1Y0ZENJNklpSjlmUT09IiwicCI6
- ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU4ifZwa/6gAAAEeAAAAS5Cg
- vTcLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06
- bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5
- amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlr
- Wld4MFlTSXNJblJsZUhRaU9pSkRaWEowWVdsdWJIa2hJRWtuYkd3Z2RYTmxJSFJvWlNCblpYUWlm
- WDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGIn0yvsn8AAABHAAAAEvq
- YO5XCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24N
- Om1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJH
- OWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5
- a1pXeDBZU0lzSW5SbGVIUWlPaUpmWTNWeWNtVnVkRjkzWldGMGFHVnlJR1oxYm1OMGFXOXVJbjE5
- IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0gifU4XPNcAAAEJAAAAS0Jg
- 9qULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06
- bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5
- amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlr
- Wld4MFlTSXNJblJsZUhRaU9pSWdkRzhnWTJobFkyc2dkR2hsSUhkbFlYUm9aWElnWm05eUlHSnZk
- R2dpZlgwPSIsInAiOiJhYmNkZWZnIn0QMJILAAABDAAAAEuKgHnVCzpldmVudC10eXBlBwAFY2h1
- bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50
- eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdW
- NElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUln
- VTJWaGRIUnNaU0JoYm1RZ1UyRnVJRVp5WVc1amFYTmpieTRnU1Nkc2JDQnRZV3RsSW4xOSIsInAi
- OiJhYiJ9pNm93wAAAUoAAABLXTPUPAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUH
- ABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhC
- bElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2
- ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ2RIZHZJSE5sY0dGeVlYUmxJ
- R05oYkd4eklIZHBkR2hwYmlCMGFHVWdjMkZ0WlNCbWRXNWpkR2x2YmlKOWZRPT0iLCJwIjoiYWJj
- ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiJ9HCds9QAA
- AV0AAABLj/Ofrgs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlv
- bi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdW
- dWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9p
- ZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ1kyRnNiSE1nWW14dlkyc2djMmx1WTJVZ2RHaGxj
- bVVnWVhKbElHNXZJR1JsY0dWdVpHVnVZMmxsY3lCaVpYUjNaV1Z1SUhSb1pXMHVJbjE5IiwicCI6
- ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIi
- ffRdBA8AAADSAAAAS3cZa0gLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
- bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9p
- WTI5dWRHVnVkRjlpYkc5amExOXpkRzl3SWl3aWFXNWtaWGdpT2pCOSIsInAiOiJhYmNkZWZnaGlq
- a2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVYifZ6Jbw8AAAF3AAAASwSCqAsL
- OmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVz
- c2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amEx
- OXpkR0Z5ZENJc0ltbHVaR1Y0SWpveExDSmpiMjUwWlc1MFgySnNiMk5ySWpwN0luUjVjR1VpT2lK
- MGIyOXNYM1Z6WlNJc0ltbGtJam9pZEc5dmJIVmZZbVJ5YTE4d01WUnFVbFkzY0Rob01YVjNNMHRP
- YUcxeVVqTXhNMjhpTENKdVlXMWxJam9pWjJWMFgyTjFjbkpsYm5SZmQyVmhkR2hsY2lJc0ltbHVj
- SFYwSWpwN2ZYMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xN
- Tk9QUVJTVFVWV1hZWjAifdQqPr4AAADzAAAAS4u4bfwLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29u
- dGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVz
- IjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpveExD
- SmtaV3gwWVNJNmV5SjBlWEJsSWpvaWFXNXdkWFJmYW5OdmJsOWtaV3gwWVNJc0luQmhjblJwWVd4
- ZmFuTnZiaUk2SWlKOWZRPT0iLCJwIjoiYWJjZGUifXNOcm8AAAEpAAAAS4Oh2aELOmV2ZW50LXR5
- cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBl
- BwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJ
- c0ltbHVaR1Y0SWpveExDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWFXNXdkWFJmYW5OdmJsOWtaV3gw
- WVNJc0luQmhjblJwWVd4ZmFuTnZiaUk2SW50Y0lteHZZMkYwYVc4aWZYMD0iLCJwIjoiYWJjZGVm
- Z2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFUiffy4a54AAAEbAAAAS1hA
- MkcLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06
- bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5
- amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpveExDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWFXNXdkWFJm
- YW5OdmJsOWtaV3gwWVNJc0luQmhjblJwWVd4ZmFuTnZiaUk2SW01Y0lqb2dYQ0pUWlNKOWZRPT0i
- LCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHIn0KcQTZAAABLgAAAEsxgQWx
- CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1l
- c3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWph
- MTlrWld4MFlTSXNJbWx1WkdWNElqb3hMQ0prWld4MFlTSTZleUowZVhCbElqb2lhVzV3ZFhSZmFu
- TnZibDlrWld4MFlTSXNJbkJoY25ScFlXeGZhbk52YmlJNkltRjBkR3hsWENKOUluMTkiLCJwIjoi
- YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjMi
- fZ7QxRkAAADXAAAAS7/55DgLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
- bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9p
- WTI5dWRHVnVkRjlpYkc5amExOXpkRzl3SWl3aWFXNWtaWGdpT2pGOSIsInAiOiJhYmNkZWZnaGlq
- a2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMCJ91QhqVQAAAW4AAABL
- aXJd+As6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
- DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWli
- RzlqYTE5emRHRnlkQ0lzSW1sdVpHVjRJam95TENKamIyNTBaVzUwWDJKc2IyTnJJanA3SW5SNWNH
- VWlPaUowYjI5c1gzVnpaU0lzSW1sa0lqb2lkRzl2YkhWZlltUnlhMTh3TVZoNlprRnRXRGhJUkdw
- aE16Uk1aVEZEZEVRMWRVRWlMQ0p1WVcxbElqb2laMlYwWDJOMWNuSmxiblJmZDJWaGRHaGxjaUlz
- SW1sdWNIVjBJanA3ZlgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdI
- SUpLTE1OT1BRUiJ9gZo9ugAAAR4AAABLkKC9Nws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50
- LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJl
- eUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam95TENKa1pX
- eDBZU0k2ZXlKMGVYQmxJam9pYVc1d2RYUmZhbk52Ymw5a1pXeDBZU0lzSW5CaGNuUnBZV3hmYW5O
- dmJpSTZJaUo5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpL
- TE1OT1BRUlNUVVYifbIYQCMAAAEKAAAASwXAjHULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
- dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
- ZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpveUxDSmta
- V3gwWVNJNmV5SjBlWEJsSWpvaWFXNXdkWFJmYW5OdmJsOWtaV3gwWVNJc0luQmhjblJwWVd4ZmFu
- TnZiaUk2SW50Y0lteHZJbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eCJ9E3EcgQAA
- ARcAAABLnbDfRgs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlv
- bi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdW
- dWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam95TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9p
- YVc1d2RYUmZhbk52Ymw5a1pXeDBZU0lzSW5CaGNuUnBZV3hmYW5OdmJpSTZJbU5oZEdraWZYMD0i
- LCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKSyJ90P11jgAAAQcAAABL
- /VBIxAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
- DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWli
- RzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam95TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pYVc1d2RY
- UmZhbk52Ymw5a1pXeDBZU0lzSW5CaGNuUnBZV3hmYW5OdmJpSTZJbTl1WENJNklGd2lVMkZ1SUVZ
- aWZYMD0iLCJwIjoiYWJjZGVmZ2hpIn0QvdzCAAABBQAAAEuHkBukCzpldmVudC10eXBlBwAFY2h1
- bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50
- eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdW
- NElqb3lMQ0prWld4MFlTSTZleUowZVhCbElqb2lhVzV3ZFhSZmFuTnZibDlrWld4MFlTSXNJbkJo
- Y25ScFlXeGZhbk52YmlJNkluSmhibU5wYzJOdlhDSjlJbjE5IiwicCI6ImFiY2RlZmdoaWprIn24
- bi8DAAAAswAAAEvTSzW1CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxp
- Y2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVky
- OXVkR1Z1ZEY5aWJHOWphMTl6ZEc5d0lpd2lhVzVrWlhnaU9qSjkiLCJwIjoiYWJjZGVmZ2hpamts
- bW5vcHEiffq5wLcAAAEjAAAAS8kRwQALOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBl
- BwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVY
- QmxJam9pYldWemMyRm5aVjlrWld4MFlTSXNJbVJsYkhSaElqcDdJbk4wYjNCZmNtVmhjMjl1SWpv
- aWRHOXZiRjkxYzJVaUxDSnpkRzl3WDNObGNYVmxibU5sSWpwdWRXeHNmU3dpZFhOaFoyVWlPbnNp
- YjNWMGNIVjBYM1J2YTJWdWN5STZNVE01ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
- d3h5ekFCQ0RFRkcifTKSdLUAAAFmAAAAS1kCFjkLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
- dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
- ZXlKMGVYQmxJam9pYldWemMyRm5aVjl6ZEc5d0lpd2lZVzFoZW05dUxXSmxaSEp2WTJzdGFXNTJi
- Mk5oZEdsdmJrMWxkSEpwWTNNaU9uc2lhVzV3ZFhSVWIydGxia052ZFc1MElqb3pPVElzSW05MWRI
- QjFkRlJ2YTJWdVEyOTFiblFpT2pFd05Dd2lhVzUyYjJOaGRHbHZia3hoZEdWdVkza2lPalEyT1Rr
- c0ltWnBjbk4wUW5sMFpVeGhkR1Z1WTNraU9qRTFNak45ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xt
- bm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OIn1eJla3
- headers:
- Connection:
- - keep-alive
- Content-Type:
- - application/vnd.amazon.eventstream
- Date:
- - Wed, 26 Feb 2025 16:19:37 GMT
- Set-Cookie: test_set_cookie
- Transfer-Encoding:
- - chunked
- X-Amzn-Bedrock-Content-Type:
- - application/json
- x-amzn-RequestId:
- - ff392444-c328-40d9-88a2-f639263e1f2a
- status:
- code: 200
- message: OK
-- request:
- body: |-
- {
- "messages": [
- {
- "role": "user",
- "content": [
- {
- "text": "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco",
- "type": "text"
- }
- ]
- },
- {
- "role": "assistant",
- "content": [
- {
- "type": "text",
- "text": "Certainly! I'll use the get_current_weather function to check the weather for both Seattle and San Francisco. I'll make two separate calls within the same function calls block since there are no dependencies between them."
- },
- {
- "type": "tool_use",
- "id": "toolu_bdrk_01TjRV7p8h1uw3KNhmrR313o",
- "name": "get_current_weather",
- "input": {
- "location": "Seattle"
- }
- },
- {
- "type": "tool_use",
- "id": "toolu_bdrk_01XzfAmX8HDja34Le1CtD5uA",
- "name": "get_current_weather",
- "input": {
- "location": "San Francisco"
- }
- }
- ]
- },
- {
- "role": "user",
- "content": [
- {
- "type": "tool_result",
- "tool_use_id": "toolu_bdrk_01TjRV7p8h1uw3KNhmrR313o",
- "content": "50 degrees and raining"
- },
- {
- "type": "tool_result",
- "tool_use_id": "toolu_bdrk_01XzfAmX8HDja34Le1CtD5uA",
- "content": "70 degrees and sunny"
- }
- ]
- }
- ],
- "anthropic_version": "bedrock-2023-05-31",
- "tools": [
- {
- "name": "get_current_weather",
- "description": "Get the current weather in a given location.",
- "input_schema": {
- "type": "object",
- "properties": {
- "location": {
- "type": "string",
- "description": "The name of the city"
- }
- },
- "required": [
- "location"
- ]
- }
- }
- ],
- "max_tokens": 1000
- }
- headers:
- Content-Length:
- - '1333'
- User-Agent:
- - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
- lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
- X-Amz-Date:
- - 20250226T161940Z
- X-Amz-Security-Token:
- - test_aws_security_token
- X-Amzn-Trace-Id:
- - Root=1-45c5efe5-9b80be013e2a686dc344d2cd;Parent=80fb0855a87a3b04;Sampled=1
- amz-sdk-invocation-id:
- - 1dedf335-f000-48a9-b963-a0aef78be7ae
- amz-sdk-request:
- - attempt=1
- authorization:
- - Bearer test_aws_authorization
- method: POST
- uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20240620-v1%3A0/invoke-with-response-stream
- response:
- body:
- string: !!binary |
- AAAB+QAAAEsKVKb4CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
- aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpj
- MkZuWlY5emRHRnlkQ0lzSW0xbGMzTmhaMlVpT25zaWFXUWlPaUp0YzJkZlltUnlhMTh3TVZFNFJu
- ZEtORWRNUW1wemFtcFNTbUpqTWsxdlozVWlMQ0owZVhCbElqb2liV1Z6YzJGblpTSXNJbkp2YkdV
- aU9pSmhjM05wYzNSaGJuUWlMQ0p0YjJSbGJDSTZJbU5zWVhWa1pTMHpMVFV0YzI5dWJtVjBMVEl3
- TWpRd05qSXdJaXdpWTI5dWRHVnVkQ0k2VzEwc0luTjBiM0JmY21WaGMyOXVJanB1ZFd4c0xDSnpk
- Rzl3WDNObGNYVmxibU5sSWpwdWRXeHNMQ0oxYzJGblpTSTZleUpwYm5CMWRGOTBiMnRsYm5NaU9q
- WXdPQ3dpYjNWMGNIVjBYM1J2YTJWdWN5STZNbjE5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
- cXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1NiJ9hJJ8mwAAAO8AAABL
- LqgXfws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
- DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWli
- RzlqYTE5emRHRnlkQ0lzSW1sdVpHVjRJam93TENKamIyNTBaVzUwWDJKc2IyTnJJanA3SW5SNWNH
- VWlPaUowWlhoMElpd2lkR1Y0ZENJNklpSjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxIn1o
- VcC6AAABCgAAAEsFwIx1CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxp
- Y2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVky
- OXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhC
- bElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUpjYmx4dVIzSmxZWFFpZlgwPSIsInAiOiJh
- YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUoifbm9/C0AAAErAAAAS/lhisELOmV2
- ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2Fn
- ZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWta
- V3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlT
- SXNJblJsZUhRaU9pSWhJRWtnYUdGMlpTQjBhR1VnWTNWeWNtVnVkQ0IzWldGMGFHVnlJR2x1Wm05
- eWJXRjBhVzl1SW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQyJ9JnZS3wAA
- ASkAAABLg6HZoQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlv
- bi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdW
- dWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9p
- ZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ1ptOXlJR0p2ZEdnZ1kybDBhV1Z6TGlKOWZRPT0i
- LCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ
- WjAxMiJ9bCd5VwAAARoAAABLZSAb9ws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUH
- ABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhC
- bElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2
- ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ1NHVnlaU2R6SUhSb1pTQjNa
- V0YwYUdWeUluMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xN
- TiJ9gAZI1wAAARoAAABLZSAb9ws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBh
- cHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElq
- b2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlK
- MGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ2FXNGdVMlZoZEhSc1pTQmhibVFn
- VTJGdUlFWnlZVzVqYVhOamJ5QjBiMlJoZVNKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcCJ9
- LJrRhgAAAQAAAABLT3CU1As6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
- aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZ
- Mjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVY
- QmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJNlhHNWNibE5sWVhSMGJHVTZJbjE5Iiwi
- cCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXYifdJhtoAAAAEbAAAAS1hAMkcLOmV2ZW50LXR5cGUH
- AAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAF
- ZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0lt
- bHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhR
- aU9pSWdOVEFnWkdWbmNtVmxjeUo5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5
- ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXIn31qtKMAAABHwAAAEutwJSHCzpldmVudC10eXBlBwAF
- Y2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2
- ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1
- WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlP
- aUlnWVc1a0lISmhhVzVwYm1kY2JsTmhiaUJHY21GdVkybHpZMjg2SUNKOWZRPT0iLCJwIjoiYWJj
- ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkMifT0EpmEAAAEjAAAAS8kRwQALOmV2ZW50LXR5cGUH
- AAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAF
- ZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0lt
- bHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhR
- aU9pSTNNQ0JrWldkeVpXVnpJR0Z1SW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5
- ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQifewNjsQAAAEDAAAASwjQ7gQLOmV2ZW50
- LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10
- eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gw
- WVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJ
- blJsZUhRaU9pSmtJSE4xYm01NVhHNWNia0Z6SUhsdmRTQmpZVzRnYzJWbExDSjlmUT09IiwicCI6
- ImFiY2RlIn31md/9AAABEwAAAEtoMHmGCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlw
- ZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBl
- WEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlT
- STZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnZEdobElIZGxZWFJvWlhJ
- Z2FYTWdjWFZwZEdVZ1pHbG1abVZ5Wlc1MElHbHVJSFJvWlhObEluMTkiLCJwIjoiYWJjZGUifXBi
- A8YAAAEaAAAAS2UgG/cLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGlj
- YXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5
- dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJs
- SWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdkSGR2SUdOcGRHbGxjeUIwYjJSaGVTNGdV
- MlZoZEhSc1pTSjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUIifapwXr8A
- AAEkAAAAS3sxHRALOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRp
- b24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRH
- VnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpv
- aWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdhWE1nWlhod1pYSnBaVzVqYVc1bklHTnZiMnhs
- Y2lCMFpXMXdaWEpoZEhWeVpYTWdkMmwwYUNCeVlXbHVJbjE5IiwicCI6ImFiY2RlZmdoaWprbG1u
- In3KUQpZAAABGgAAAEtlIBv3CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFw
- cGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpv
- aVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUow
- ZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlzSUhkb2FXTm9JR2x6SUdaaGFYSnNl
- U0IwZVhCcFkyRnNJR1p2Y2lCMGFHVWlmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0In3w
- j+s5AAABEwAAAEtoMHmGCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxp
- Y2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVky
- OXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhC
- bElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnWTJsMGVTNGdUMjRnZEdobElHOTBhR1Z5
- SUdoaGJtUXNJbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHkifUgk2zsAAAE7AAAA
- S5mBHUMLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNv
- bg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlp
- Ykc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRk
- RjlrWld4MFlTSXNJblJsZUhRaU9pSWdVMkZ1SUVaeVlXNWphWE5qYnlCcGN5QmxibXB2ZVdsdVp5
- QmhJbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFS
- U1RVVldYWVowMTIzNDU2NzgifRZGMqMAAAEgAAAAS46xu9ALOmV2ZW50LXR5cGUHAAVjaHVuaw06
- Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5
- dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpv
- d0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdkMkZ5
- YlNCaGJtUWdjM1Z1Ym5rZ1pHRjVMaUo5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
- d3h5ekFCQ0RFRkdISUpLTE1OT1AifW5prkYAAAEvAAAASwzhLAELOmV2ZW50LXR5cGUHAAVjaHVu
- aw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7
- ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0
- SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdT
- V1lnZVc5MUozSmxJSEJzWVc1dWFXNW5JR0Z1ZVNKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5v
- cHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAifaE9HFAAAAEYAAAASx/gSJcL
- OmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVz
- c2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amEx
- OWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4
- MFlTSXNJblJsZUhRaU9pSWdZV04wYVhacGRHbGxjeXdnZVc5MUlHMXBaMmgwSUhkaGJuUWdkRzhn
- WTI5dWMybGtaWElpZlgwPSIsInAiOiJhYmNkZWZnaGlqIn0m32+YAAABCAAAAEt/AN8VCzpldmVu
- dC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2Ut
- dHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4
- MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lz
- SW5SbGVIUWlPaUlnYVc1a2IyOXlJRzl3ZEdsdmJuTWdabTl5SUZObFlYUjBiR1VzSUhkb2FXeGxJ
- bjE5IiwicCI6ImFiIn1Fx/zhAAABLQAAAEt2IX9hCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRl
- bnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6
- ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0pr
- Wld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnYVhRbmN5QmhJ
- R2R5WldGMElHUmhlU0o5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RF
- RkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1NiJ9K+P12QAAAUsAAABLYFP9jAs6ZXZlbnQtdHlw
- ZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUH
- AAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lz
- SW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxl
- SFFpT2lJZ1ptOXlJRzkxZEdSdmIzSWdZV04wYVhacGRHbGxjeUJwYmlCVFlXNGdSbkpoYm1OcGMy
- TnZJbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFS
- U1RVVldYWVowMTIzNDU2NzgifcOZO78AAAELAAAASzigpcULOmV2ZW50LXR5cGUHAAVjaHVuaw06
- Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5
- dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpv
- d0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSXVYRzVj
- YmtseklIUm9aWEpsSUdGdWVYUm9hVzVuSUdWc2MyVWdlVzkxSW4xOSIsInAiOiJhYmNkZWZnaGki
- fR9z4jsAAAEkAAAAS3sxHRALOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
- bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9p
- WTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBl
- WEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSW5aQ0JzYVd0bElIUnZJR3R1YjNjZ1lX
- SnZkWFFnZEdobElIZGxZWFJvWlhJaWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4
- eXpBQkNEIn2VIpD2AAABBgAAAEvAMGF0CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlw
- ZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBl
- WEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlT
- STZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnYVc0Z2RHaGxjMlVnWTJs
- MGFXVnpJRzl5SW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdCJ9HxyLqQAAAQsAAABLOKCl
- xQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTpt
- ZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlq
- YTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWta
- V3gwWVNJc0luUmxlSFFpT2lJZ1lXNTVJRzkwYUdWeUlHeHZZMkYwYVc5dWN6OGlmWDA9IiwicCI6
- ImFiY2RlZmdoaWprbG1ub3BxcnN0dSJ9RRFd2gAAAN4AAABLsumGSQs6ZXZlbnQtdHlwZQcABWNo
- dW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVu
- dHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5emRHOXdJaXdpYVc1a1pY
- Z2lPakI5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFS
- U1RVVldYWVowMTIzNDU2NyJ94MnS9gAAAQcAAABL/VBIxAs6ZXZlbnQtdHlwZQcABWNodW5rDTpj
- b250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0
- ZXMiOiJleUowZVhCbElqb2liV1Z6YzJGblpWOWtaV3gwWVNJc0ltUmxiSFJoSWpwN0luTjBiM0Jm
- Y21WaGMyOXVJam9pWlc1a1gzUjFjbTRpTENKemRHOXdYM05sY1hWbGJtTmxJanB1ZFd4c2ZTd2lk
- WE5oWjJVaU9uc2liM1YwY0hWMFgzUnZhMlZ1Y3lJNk1UUTNmWDA9IiwicCI6ImFiY2RlIn2Ctyve
- AAABaAAAAEvmMqhYCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
- aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpj
- MkZuWlY5emRHOXdJaXdpWVcxaGVtOXVMV0psWkhKdlkyc3RhVzUyYjJOaGRHbHZiazFsZEhKcFkz
- TWlPbnNpYVc1d2RYUlViMnRsYmtOdmRXNTBJam8yTURnc0ltOTFkSEIxZEZSdmEyVnVRMjkxYm5R
- aU9qRTBOeXdpYVc1MmIyTmhkR2x2Ymt4aGRHVnVZM2tpT2pRNE16WXNJbVpwY25OMFFubDBaVXho
- ZEdWdVkza2lPalUwT1gxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdI
- SUpLTE1OT1BRUlNUIn0oqdWF
- headers:
- Connection:
- - keep-alive
- Content-Type:
- - application/vnd.amazon.eventstream
- Date:
- - Wed, 26 Feb 2025 16:19:41 GMT
- Set-Cookie: test_set_cookie
- Transfer-Encoding:
- - chunked
- X-Amzn-Bedrock-Content-Type:
- - application/json
- x-amzn-RequestId:
- - 5e3aff43-f4bb-4ee3-9314-440d597bc442
- status:
- code: 200
- message: OK
-version: 1
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_with_content_tool_call[amazon.nova].yaml b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_with_content_tool_call[amazon.nova].yaml
new file mode 100644
index 0000000000..39e13221db
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_with_content_tool_call[amazon.nova].yaml
@@ -0,0 +1,643 @@
+interactions:
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please give one tool call for Seattle and one for San Francisco"
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "max_new_tokens": 1000
+ },
+ "schemaVersion": "messages-v1",
+ "toolConfig": {
+ "tools": [
+ {
+ "toolSpec": {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "inputSchema": {
+ "json": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ headers:
+ Content-Length:
+ - '550'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250325T144018Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-14345596-4402c04cb91f2c76698dc743;Parent=caab38549f480041;Sampled=1
+ amz-sdk-invocation-id:
+ - d36ab502-01eb-4144-89e9-ab364c3ad6af
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.nova-micro-v1%3A0/invoke-with-response-stream
+ response:
+ body:
+ string: !!binary |
+ AAAApQAAAEs861eXCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SnRaWE56WVdkbFUzUmhj
+ blFpT25zaWNtOXNaU0k2SW1GemMybHpkR0Z1ZENKOWZRPT0iLCJwIjoiYWJjIn1dU3b9AAAA+AAA
+ AEv8aFztCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pz
+ b24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4
+ MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lQSFJvYVc1cmFXNW5JbjBzSW1OdmJuUmxiblJD
+ Ykc5amEwbHVaR1Y0SWpvd2ZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE
+ RUZHSElKS0wifajL48sAAADkAAAAS1l4Jm4LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10
+ eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlK
+ amIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3dmWDA9
+ IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldY
+ WVowMTIzNDUifbtHABEAAADQAAAASw3ZOCgLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10
+ eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlK
+ amIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaVBpQlVhR1Vp
+ ZlN3aVkyOXVkR1Z1ZEVKc2IyTnJTVzVrWlhnaU9qRjlmUT09IiwicCI6ImFiIn25bWaoAAAAsgAA
+ AEvuKxwFCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pz
+ b24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5
+ d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam94ZlgwPSIsInAiOiJhYmNkZWZnaCJ9cDKd
+ mwAAAPkAAABLwQh1XQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNh
+ dGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2
+ WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUZWelpYSWlmU3dpWTI5dWRHVnVk
+ RUpzYjJOclNXNWtaWGdpT2pKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpB
+ QkNERUZHSElKS0xNTk9QUSJ9hcX/0gAAANkAAABLAMlaWQs6ZXZlbnQtdHlwZQcABWNodW5rDTpj
+ b250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0
+ ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0
+ SWpveWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9Q
+ UVJTVFUifVpq3h4AAADoAAAAS5yIy28LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBl
+ BwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIy
+ NTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlHaGhjeUo5TENK
+ amIyNTBaVzUwUW14dlkydEpibVJsZUNJNk0zMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1
+ dnd4eXpBQkNEIn0ubaSPAAAAuAAAAEukmwSkCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQt
+ dHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5
+ SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam96Zlgw
+ PSIsInAiOiJhYmNkZWZnaGlqa2xtbiJ9rs+WSgAAAOAAAABLrPiArgs6ZXZlbnQtdHlwZQcABWNo
+ dW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVu
+ dHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpY
+ aDBJam9pSUhKbGNYVmxjM1JsWkNCMGFHVWlmU3dpWTI5dWRHVnVkRUpzYjJOclNXNWtaWGdpT2pS
+ OWZRPT0iLCJwIjoiYWJjZGVmIn0WBTZCAAAArwAAAEt2W082CzpldmVudC10eXBlBwAFY2h1bmsN
+ OmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJi
+ eXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpH
+ VjRJam8wZlgwPSIsInAiOiJhYmNkZSJ9A/fd7gAAAPUAAABLBPiYXAs6ZXZlbnQtdHlwZQcABWNo
+ dW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVu
+ dHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpY
+ aDBJam9pSUdOMWNuSmxiblFnZDJWaGRHaGxjaUJwYmlKOUxDSmpiMjUwWlc1MFFteHZZMnRKYm1S
+ bGVDSTZOWDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3In3C+bj/AAAAwAAAAEttOa+q
+ CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1l
+ c3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJ
+ bU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam8xZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJz
+ dHV2In3xyGKDAAABDAAAAEuKgHnVCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcA
+ EGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUw
+ Wlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lJRk5sWVhSMGJHVWdZ
+ VzVrSUZOaGJpSjlMQ0pqYjI1MFpXNTBRbXh2WTJ0SmJtUmxlQ0k2Tm4xOSIsInAiOiJhYmNkZWZn
+ aGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWCJ963WBJAAAANgAAABL
+ Palz6Qs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJ
+ anA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpvMmZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5v
+ cHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVCJ9HxAA7AAAAQIAAABLNbDHtAs6ZXZlbnQt
+ dHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5
+ cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZ
+ U0k2ZXlKMFpYaDBJam9pSUVaeVlXNWphWE5qYnk0aWZTd2lZMjl1ZEdWdWRFSnNiMk5yU1c1a1pY
+ Z2lPamQ5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1O
+ T1BRUiJ9LBudaAAAAK4AAABLSztmhgs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUH
+ ABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1
+ MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpvM2ZYMD0iLCJw
+ IjoiYWJjZCJ9udoJSQAAARQAAABL2hCllgs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5
+ cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpq
+ YjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUVrZ2JtVmxa
+ Q0IwYnlCMWMyVWlmU3dpWTI5dWRHVnVkRUpzYjJOclNXNWtaWGdpT2poOWZRPT0iLCJwIjoiYWJj
+ ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NSJ9
+ ke149AAAAKwAAABLMfs15gs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
+ aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBR
+ bXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpvNGZYMD0iLCJwIjoiYWIi
+ feBIVcgAAADjAAAAS+tY+n4LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
+ bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUw
+ UW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlIUm9aU0JjSWlKOUxDSmpi
+ MjUwWlc1MFFteHZZMnRKYm1SbGVDSTZPWDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dSJ9
+ XCFiXwAAALkAAABLmfstFAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
+ aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBR
+ bXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpvNWZYMD0iLCJwIjoiYWJj
+ ZGVmZ2hpamtsbW5vIn2CfEGxAAABCQAAAEtCYPalCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRl
+ bnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6
+ ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2laMlYw
+ WDJOMWNuSmxiblJmZDJWaGRHaGxjbHdpSW4wc0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hN
+ SDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTSJ96PS/RgAA
+ ALUAAABLXAvAFQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlv
+ bi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0
+ VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveE1IMTkiLCJwIjoiYWJjZGVmZ2hp
+ amsifa3oxsUAAADqAAAAS+ZImA8LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQ
+ YXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBa
+ VzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlIUnZiMndnWm05eUlu
+ MHNJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam94TVgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
+ cXJzdHV2d3gifTG/qNYAAAC0AAAAS2Fr6aULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10
+ eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlK
+ amIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hNWDE5
+ IiwicCI6ImFiY2RlZmdoaWoifeNmOaEAAADxAAAAS/F4PpwLOmV2ZW50LXR5cGUHAAVjaHVuaw06
+ Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5
+ dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpv
+ aUlHVmhZMmdnWTJsMGVTSjlMQ0pqYjI1MFpXNTBRbXh2WTJ0SmJtUmxlQ0k2TVRKOWZRPT0iLCJw
+ IjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBIn11ND8/AAAArAAAAEsx+zXmCzpldmVudC10
+ eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlw
+ ZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJu
+ UkNiRzlqYTBsdVpHVjRJam94TW4xOSIsInAiOiJhYiJ9sqEFYgAAAOgAAABLnIjLbws6ZXZlbnQt
+ dHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5
+ cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZ
+ U0k2ZXlKMFpYaDBJam9pSUhObGNHRnlZWFJsYkhrdUlFa2dkMmxzYkNKOUxDSmpiMjUwWlc1MFFt
+ eHZZMnRKYm1SbGVDSTZNVE45ZlE9PSIsInAiOiJhYmNkZWYiffB7RfsAAACzAAAAS9NLNbULOmV2
+ ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2Fn
+ ZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZi
+ blJsYm5SQ2JHOWphMGx1WkdWNElqb3hNMzE5IiwicCI6ImFiY2RlZmdoaSJ9Y9vX5gAAANIAAABL
+ dxlrSAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZ
+ U0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUcxaGEyVWlmU3dpWTI5dWRHVnVkRUpzYjJOclNX
+ NWtaWGdpT2pFMGZYMD0iLCJwIjoiYWJjZCJ92g3LtAAAAMoAAABLJ4m3Cws6ZXZlbnQtdHlwZQcA
+ BWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVl
+ dmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5
+ amEwbHVaR1Y0SWpveE5IMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUYi
+ fWDb9qgAAADnAAAASx7YXL4LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
+ bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUw
+ UW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlIUjNieUo5TENKamIyNTBa
+ VzUwUW14dlkydEpibVJsZUNJNk1UVjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
+ eHkiffZ18igAAADQAAAASw3ZOCgLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQ
+ YXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBa
+ VzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hOWDE5IiwicCI6
+ ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMIn3iWd4+AAABBAAAAEu68DIU
+ CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1l
+ c3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZl
+ eUprWld4MFlTSTZleUowWlhoMElqb2lJSFJ2YjJ3aWZTd2lZMjl1ZEdWdWRFSnNiMk5yU1c1a1pY
+ Z2lPakUyZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1O
+ T1BRUlNUVVZXWFlaMDEifZS8YsEAAAC/AAAASxa72LQLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29u
+ dGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVz
+ IjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElq
+ b3hObjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dSJ9yXXDhAAAANYAAABLgpnNiAs6ZXZl
+ bnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdl
+ LXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pX
+ eDBZU0k2ZXlKMFpYaDBJam9pSUdOaGJHeHpMQ0o5TENKamIyNTBaVzUwUW14dlkydEpibVJsZUNJ
+ Nk1UZDlmUT09IiwicCI6ImFiY2QiffBLbZQAAACwAAAAS5TrT2ULOmV2ZW50LXR5cGUHAAVjaHVu
+ aw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7
+ ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1
+ WkdWNElqb3hOMzE5IiwicCI6ImFiY2RlZiJ9hboguQAAAP8AAABLTkiA/Qs6ZXZlbnQtdHlwZQcA
+ BWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVl
+ dmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlK
+ MFpYaDBJam9pSUc5dVpTQm1iM0lnWldGamFDSjlMQ0pqYjI1MFpXNTBRbXh2WTJ0SmJtUmxlQ0k2
+ TVRoOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKSyJ9GMZh
+ swAAALkAAABLmfstFAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNh
+ dGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2
+ WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveE9IMTkiLCJwIjoiYWJjZGVm
+ Z2hpamtsbW5vIn0WCfBdAAABCgAAAEsFwIx1CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQt
+ dHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5
+ SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lJR05wZEhr
+ dVBDOGlmU3dpWTI5dWRHVnVkRUpzYjJOclNXNWtaWGdpT2pFNWZYMD0iLCJwIjoiYWJjZGVmZ2hp
+ amtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjMiffD9n1EAAADe
+ AAAAS7LphkkLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24v
+ anNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRk
+ Rzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hPWDE5IiwicCI6ImFiY2RlZmdoaWpr
+ bG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoifXgABqwAAADZAAAASwDJ
+ WlkLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06
+ bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJ
+ NmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaWRHaHBibXRwYm1jaWZTd2lZMjl1ZEdWdWRFSnNiMk5y
+ U1c1a1pYZ2lPakl3ZlgwPSIsInAiOiJhYmNkZWZnIn1w5IiFAAAAxAAAAEuYuQlqCzpldmVudC10
+ eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlw
+ ZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJu
+ UkNiRzlqYTBsdVpHVjRJam95TUgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiJ9
+ LsRm7wAAAOkAAABLoeji3ws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
+ aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBR
+ bXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pUGx4dUluMHNJbU52Ym5SbGJu
+ UkNiRzlqYTBsdVpHVjRJam95TVgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFC
+ Q0RFIn0DD2TYAAAAyQAAAEtgKc3bCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcA
+ EGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUw
+ Wlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam95TVgxOSIsInAi
+ OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFIn0o2NSyAAABVwAAAEvFQ4cPCzpldmVu
+ dC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2Ut
+ dHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEdGeWRDSTZleUp6ZEdG
+ eWRDSTZleUowYjI5c1ZYTmxJanA3SW5SdmIyeFZjMlZKWkNJNklqTmpaRFZqTkdSbUxURTFOREF0
+ TkdabFpDMDVNek5tTFRjd04yWTVZMkU0TWpnMll5SXNJbTVoYldVaU9pSm5aWFJmWTNWeWNtVnVk
+ RjkzWldGMGFHVnlJbjE5TENKamIyNTBaVzUwUW14dlkydEpibVJsZUNJNk1qSjlmUT09IiwicCI6
+ ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGRyJ9v9+JjgAAATEAAABL0zEF4gs6ZXZl
+ bnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdl
+ LXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pX
+ eDBZU0k2ZXlKMGIyOXNWWE5sSWpwN0ltbHVjSFYwSWpvaWUxd2liRzlqWVhScGIyNWNJanBjSWxO
+ bFlYUjBiR1ZjSW4waWZYMHNJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam95TW4xOSIsInAiOiJh
+ YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyIn2K
+ F1mxAAAAxQAAAEul2SDaCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxp
+ Y2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFt
+ eHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam95TW4xOSIsInAiOiJhYmNk
+ ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekEifds1SaAAAAFOAAAAS6izcvwLOmV2ZW50LXR5cGUHAAVj
+ aHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZl
+ bnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkR0Z5ZENJNmV5SnpkR0Z5ZENJNmV5SjBi
+ MjlzVlhObElqcDdJblJ2YjJ4VmMyVkpaQ0k2SWpKbE9UZGxNR0l3TFdKbFpqUXROR1EyTlMwNU56
+ YzBMV1UyTVdSbE4ySmpORFUwWXlJc0ltNWhiV1VpT2lKblpYUmZZM1Z5Y21WdWRGOTNaV0YwYUdW
+ eUluMTlMQ0pqYjI1MFpXNTBRbXh2WTJ0SmJtUmxlQ0k2TWpSOWZRPT0iLCJwIjoiYWJjZGVmZ2hp
+ amtsbW5vcHFyc3R1dnd4In3SOnqOAAABBwAAAEv9UEjECzpldmVudC10eXBlBwAFY2h1bmsNOmNv
+ bnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRl
+ cyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowYjI5c1ZYTmxJ
+ anA3SW1sdWNIVjBJam9pZTF3aWJHOWpZWFJwYjI1Y0lqcGNJbE5oYmlCR2NtRnVZMmx6WTI5Y0lu
+ MGlmWDBzSW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveU5IMTkiLCJwIjoiYWJjZGUifYxNAXQA
+ AAC/AAAASxa72LQLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRp
+ b24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlky
+ dFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3lOSDE5IiwicCI6ImFiY2RlZmdo
+ aWprbG1ub3BxcnN0dSJ92CO3QwAAANwAAABLyCnVKQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250
+ ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMi
+ OiJleUp0WlhOellXZGxVM1J2Y0NJNmV5SnpkRzl3VW1WaGMyOXVJam9pZEc5dmJGOTFjMlVpZlgw
+ PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZX
+ WFlaMDEifUVrSeoAAAJGAAAASx5XS5MLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBl
+ BwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKdFpY
+ UmhaR0YwWVNJNmV5SjFjMkZuWlNJNmV5SnBibkIxZEZSdmEyVnVjeUk2TkRJM0xDSnZkWFJ3ZFhS
+ VWIydGxibk1pT2pFMU5pd2lZMkZqYUdWU1pXRmtTVzV3ZFhSVWIydGxia052ZFc1MElqb3dMQ0pq
+ WVdOb1pWZHlhWFJsU1c1d2RYUlViMnRsYmtOdmRXNTBJam93ZlN3aWJXVjBjbWxqY3lJNmUzMHNJ
+ blJ5WVdObElqcDdmWDBzSW1GdFlYcHZiaTFpWldSeWIyTnJMV2x1ZG05allYUnBiMjVOWlhSeWFX
+ TnpJanA3SW1sdWNIVjBWRzlyWlc1RGIzVnVkQ0k2TkRJM0xDSnZkWFJ3ZFhSVWIydGxia052ZFc1
+ MElqb3hOVFlzSW1sdWRtOWpZWFJwYjI1TVlYUmxibU41SWpvME16TXNJbVpwY25OMFFubDBaVXho
+ ZEdWdVkza2lPall4TENKallXTm9aVkpsWVdSSmJuQjFkRlJ2YTJWdVEyOTFiblFpT2pBc0ltTmhZ
+ MmhsVjNKcGRHVkpibkIxZEZSdmEyVnVRMjkxYm5RaU9qQjlmUT09IiwicCI6ImFiY2RlZmdoaWpr
+ bG1ub3BxcnN0dXZ3eHl6QUIifU+69xo=
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/vnd.amazon.eventstream
+ Date:
+ - Tue, 25 Mar 2025 14:40:18 GMT
+ Set-Cookie: test_set_cookie
+ Transfer-Encoding:
+ - chunked
+ X-Amzn-Bedrock-Content-Type:
+ - application/json
+ x-amzn-RequestId:
+ - 4b631f83-3042-446f-9552-70a93e64d9f3
+ status:
+ code: 200
+ message: OK
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please give one tool call for Seattle and one for San Francisco"
+ }
+ ]
+ },
+ {
+ "role": "assistant",
+ "content": [
+ {
+ "text": " The User has requested the current weather in Seattle and San Francisco. I need to use the \"get_current_weather\" tool for each city separately. I will make two tool calls, one for each city.\n"
+ },
+ {
+ "toolUse": {
+ "toolUseId": "3cd5c4df-1540-4fed-933f-707f9ca8286c",
+ "name": "get_current_weather",
+ "input": {
+ "location": "Seattle"
+ }
+ }
+ },
+ {
+ "toolUse": {
+ "toolUseId": "2e97e0b0-bef4-4d65-9774-e61de7bc454c",
+ "name": "get_current_weather",
+ "input": {
+ "location": "San Francisco"
+ }
+ }
+ }
+ ]
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "toolResult": {
+ "toolUseId": "3cd5c4df-1540-4fed-933f-707f9ca8286c",
+ "content": [
+ {
+ "json": {
+ "weather": "50 degrees and raining"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "toolResult": {
+ "toolUseId": "2e97e0b0-bef4-4d65-9774-e61de7bc454c",
+ "content": [
+ {
+ "json": {
+ "weather": "70 degrees and sunny"
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "max_new_tokens": 1000
+ },
+ "schemaVersion": "messages-v1",
+ "toolConfig": {
+ "tools": [
+ {
+ "toolSpec": {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "inputSchema": {
+ "json": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ }
+ headers:
+ Content-Length:
+ - '1383'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250325T144019Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-28fe3f85-95dafaf23d34b554c77b907f;Parent=9e7cef38599a1f15;Sampled=1
+ amz-sdk-invocation-id:
+ - a2ec7eb1-6482-4b23-8a2e-79952f46945d
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/amazon.nova-micro-v1%3A0/invoke-with-response-stream
+ response:
+ body:
+ string: !!binary |
+ AAAA2wAAAEt6CQk5CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SnRaWE56WVdkbFUzUmhj
+ blFpT25zaWNtOXNaU0k2SW1GemMybHpkR0Z1ZENKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5v
+ cHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0In1MbjWlAAAA/AAAAEsJ
+ 6PotCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24N
+ Om1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlT
+ STZleUprWld4MFlTSTZleUowWlhoMElqb2lQSFJvYVc1cmFXNW5JbjBzSW1OdmJuUmxiblJDYkc5
+ amEwbHVaR1Y0SWpvd2ZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZH
+ SElKS0xNTk9QIn257bMkAAAA2AAAAEs9qXPpCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQt
+ dHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5
+ SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam93Zlgw
+ PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUIn0k
+ 4PgxAAAA2wAAAEt6CQk5CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxp
+ Y2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFt
+ eHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lQaUJVYUdVZ2RHOXZiQ0o5TENK
+ amIyNTBaVzUwUW14dlkydEpibVJsZUNJNk1YMTkiLCJwIjoiYWJjZGVmZ2hpIn1X/XRLAAAA5QAA
+ AEtkGA/eCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pz
+ b24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5
+ d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam94ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xt
+ bm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQ1NiJ9QpKrTgAAAOoA
+ AABL5kiYDws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9q
+ c29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpX
+ eDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUdoaGN5SjlMQ0pqYjI1MFpXNTBRbXh2WTJ0
+ SmJtUmxlQ0k2TW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRiJ9kQRG
+ dQAAANMAAABLSnlC+As6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNh
+ dGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2
+ WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveWZYMD0iLCJwIjoiYWJjZGVm
+ Z2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk8ifXBEvIMAAAEOAAAAS/BAKrULOmV2
+ ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2Fn
+ ZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5Smta
+ V3gwWVNJNmV5SjBaWGgwSWpvaUlISmxkSFZ5Ym1Wa0lIUm9aU0JqZFhKeVpXNTBJbjBzSW1OdmJu
+ UmxiblJDYkc5amEwbHVaR1Y0SWpvemZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4
+ eXpBQkNERUZHSElKS0xNTk9QUVIifcJLEH8AAADPAAAAS+9pOHsLOmV2ZW50LXR5cGUHAAVjaHVu
+ aw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7
+ ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1
+ WkdWNElqb3pmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSksi
+ fcMOLUgAAAEMAAAAS4qAedULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
+ bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUw
+ UW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlIZGxZWFJvWlhJZ1ptOXlJ
+ bjBzSW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpvMGZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5v
+ cHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxIn0Td3V3AAAA1wAAAEu/+eQ4
+ CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1l
+ c3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJ
+ bU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam8wZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJz
+ dHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlMifWjvBMQAAAERAAAASxLwKuYLOmV2ZW50LXR5cGUH
+ AAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAF
+ ZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5
+ SjBaWGgwSWpvaUlHSnZkR2dnVTJWaGRIUnNaU0o5TENKamIyNTBaVzUwUW14dlkydEpibVJsZUNJ
+ Nk5YMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJT
+ VFVWV1hZWjAxMjM0NTYifWyeQxIAAADBAAAAS1BZhhoLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29u
+ dGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVz
+ IjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElq
+ bzFmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3In1HRK7nAAABHAAAAEvqYO5XCzpl
+ dmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3Nh
+ Z2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUpr
+ Wld4MFlTSTZleUowWlhoMElqb2lJR0Z1WkNCVFlXNGdSbkpoYm1OcGMyTnZMaUJPYjNjaWZTd2lZ
+ Mjl1ZEdWdWRFSnNiMk5yU1c1a1pYZ2lPalo5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJz
+ dHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEifQyx2dcAAADeAAAAS7LphkkLOmV2
+ ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2Fn
+ ZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZi
+ blJsYm5SQ2JHOWphMGx1WkdWNElqbzJmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
+ eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoifXpuHuUAAAEHAAAAS/1QSMQLOmV2ZW50LXR5
+ cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBl
+ BwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJ
+ NmV5SjBaWGgwSWpvaUlFa2dkMmxzYkNKOUxDSmpiMjUwWlc1MFFteHZZMnRKYm1SbGVDSTZOMzE5
+ IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldY
+ WVowMTIzNCJ9icP47wAAALoAAABL3ltXxAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5
+ cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpq
+ YjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpvM2ZYMD0i
+ LCJwIjoiYWJjZGVmZ2hpamtsbW5vcCJ9VNMdhAAAAPgAAABL/Ghc7Qs6ZXZlbnQtdHlwZQcABWNo
+ dW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVu
+ dHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpY
+ aDBJam9pSUhCeWIzWnBaR1VpZlN3aVkyOXVkR1Z1ZEVKc2IyTnJTVzVrWlhnaU9qaDlmUT09Iiwi
+ cCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMIn0cLXNNAAAA4AAAAEus
+ +ICuCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24N
+ Om1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lq
+ cDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam80ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
+ cXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEifc1Vq6QAAADuAAAASxPIPs8L
+ OmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVz
+ c2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5
+ SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlIUm9aU0JWYzJWeUluMHNJbU52Ym5SbGJuUkNiRzlqYTBs
+ dVpHVjRJam81ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCIn0/PSyFAAAA
+ swAAAEvTSzW1CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9u
+ L2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRU
+ ZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam81ZlgwPSIsInAiOiJhYmNkZWZnaGki
+ fUTpCiwAAAD+AAAAS3MoqU0LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
+ bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUw
+ UW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlIZHBkR2dnZEdobElHbHVa
+ bTl5YldGMGFXOXVJbjBzSW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveE1IMTkiLCJwIjoiYWJj
+ ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQiJ9gG89/wAAALQAAABLYWvppQs6ZXZlbnQtdHlwZQcA
+ BWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVl
+ dmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5
+ amEwbHVaR1Y0SWpveE1IMTkiLCJwIjoiYWJjZGVmZ2hpaiJ9SpFz4AAAAN0AAABL9Un8mQs6ZXZl
+ bnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdl
+ LXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pX
+ eDBZU0k2ZXlKMFpYaDBJam9pTGp3dkluMHNJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam94TVgx
+ OSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzIn3q3S2RAAAAxQAAAEul2SDaCzpldmVudC10eXBl
+ BwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
+ BWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNi
+ RzlqYTBsdVpHVjRJam94TVgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekEifRu+
+ F4wAAADgAAAAS6z4gK4LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGlj
+ YXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14
+ dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaWRHaHBibXRwYm1jaWZTd2lZMjl1
+ ZEdWdWRFSnNiMk5yU1c1a1pYZ2lPakV5ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbiJ9LE2TnQAA
+ ANgAAABLPalz6Qs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlv
+ bi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0
+ VGRHOXdJanA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveE1uMTkiLCJwIjoiYWJjZGVmZ2hp
+ amtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVCJ9TDoSGAAAAOgAAABLnIjLbws6
+ ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNz
+ YWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlK
+ a1pXeDBZU0k2ZXlKMFpYaDBJam9pUGx4dVhHNGlmU3dpWTI5dWRHVnVkRUpzYjJOclNXNWtaWGdp
+ T2pFemZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoifY0IpRYAAADhAAAAS5GY
+ qR4LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06
+ bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpw
+ N0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hNMzE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3Bx
+ cnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIifYxQECoAAADpAAAAS6Ho4t8L
+ OmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVz
+ c2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5
+ SmtaV3gwWVNJNmV5SjBaWGgwSWpvaVZHaGxJbjBzSW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpv
+ eE5IMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERSJ9ER7hEwAAALMAAABL
+ 00s1tQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0VGRHOXdJ
+ anA3SW1OdmJuUmxiblJDYkc5amEwbHVaR1Y0SWpveE5IMTkiLCJwIjoiYWJjZGVmZ2hpIn0sgov2
+ AAAA4AAAAEus+ICuCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZ
+ MnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lJR04xY25KbGJuUWlmU3dpWTI5dWRH
+ VnVkRUpzYjJOclNXNWtaWGdpT2pFMWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW4ifcLGafwAAADB
+ AAAAS1BZhhoLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24v
+ anNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRk
+ Rzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hOWDE5IiwicCI6ImFiY2RlZmdoaWpr
+ bG1ub3BxcnN0dXZ3In3eiQEeAAABCgAAAEsFwIx1CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRl
+ bnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6
+ ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUowWlhoMElqb2lJSGRs
+ WVhSb1pYSWdhVzRnVTJWaGRIUnNaU0JwY3lBaWZTd2lZMjl1ZEdWdWRFSnNiMk5yU1c1a1pYZ2lP
+ akUyZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUoifXVaLBsA
+ AADFAAAAS6XZINoLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRp
+ b24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlky
+ dFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3hObjE5IiwicCI6ImFiY2RlZmdo
+ aWprbG1ub3BxcnN0dXZ3eHl6QSJ9GZ5piQAAAPQAAABLOZix7As6ZXZlbnQtdHlwZQcABWNodW5r
+ DTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsi
+ Ynl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJ
+ am9pTlRBZ1pHVm5jbVZsY3lCaGJtUWdjbUZwYm1sdVp5SjlMQ0pqYjI1MFpXNTBRbXh2WTJ0SmJt
+ UmxlQ0k2TVRkOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW4ifamK9XoAAADZAAAASwDJWlkLOmV2
+ ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2Fn
+ ZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZi
+ blJsYm5SQ2JHOWphMGx1WkdWNElqb3hOMzE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
+ eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVIn1TzLKOAAAA2wAAAEt6CQk5CzpldmVudC10eXBlBwAF
+ Y2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2
+ ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUow
+ WlhoMElqb2lMaUo5TENKamIyNTBaVzUwUW14dlkydEpibVJsZUNJNk1UaDlmUT09IiwicCI6ImFi
+ Y2RlZmdoaWprbG1ub3BxIn1LG/TKAAAA2QAAAEsAyVpZCzpldmVudC10eXBlBwAFY2h1bmsNOmNv
+ bnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRl
+ cyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlqYTBsdVpHVjRJ
+ am94T0gxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BR
+ UlNUVSJ9MQPQswAAAPQAAABLOZix7As6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUH
+ ABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1
+ MFpXNTBRbXh2WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUZSb1pTSjlMQ0pq
+ YjI1MFpXNTBRbXh2WTJ0SmJtUmxlQ0k2TVRsOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFy
+ c3R1dnd4eXpBQkNERUZHSElKS0wifZ8ruDEAAADeAAAAS7LphkkLOmV2ZW50LXR5cGUHAAVjaHVu
+ aw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7
+ ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1
+ WkdWNElqb3hPWDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktM
+ TU5PUFFSU1RVVldYWVoifXgABqwAAADVAAAAS8U5t1gLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29u
+ dGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVz
+ IjoiZXlKamIyNTBaVzUwUW14dlkydEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUlH
+ TjFjbkpsYm5RaWZTd2lZMjl1ZEdWdWRFSnNiMk5yU1c1a1pYZ2lPakl3ZlgwPSIsInAiOiJhYmMi
+ fW1/DK8AAADgAAAAS6z4gK4LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBw
+ bGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUw
+ UW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdWNElqb3lNSDE5IiwicCI6ImFi
+ Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMSJ9mw0B
+ +AAAAQ0AAABLt+BQZQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNh
+ dGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUpqYjI1MFpXNTBRbXh2
+ WTJ0RVpXeDBZU0k2ZXlKa1pXeDBZU0k2ZXlKMFpYaDBJam9pSUhkbFlYUm9aWElnYVc0Z1UyRnVJ
+ RVp5WVc1amFYTmpieUJwY3lKOUxDSmpiMjUwWlc1MFFteHZZMnRKYm1SbGVDSTZNakY5ZlE9PSIs
+ InAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFIn1MXAtBAAAA2AAAAEs9qXPpCzpl
+ dmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3Nh
+ Z2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52
+ Ym5SbGJuUkNiRzlqYTBsdVpHVjRJam95TVgxOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
+ d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUIn168Y5mAAABFgAAAEug0Pb2CzpldmVudC10eXBlBwAF
+ Y2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2
+ ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRFWld4MFlTSTZleUprWld4MFlTSTZleUow
+ WlhoMElqb2lJRGN3SUdSbFozSmxaWE1nWVc1a0lITjFibTU1SW4wc0ltTnZiblJsYm5SQ2JHOWph
+ MGx1WkdWNElqb3lNbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJ
+ SktMTU5PUFFSU1RVVldYWVoifd/LaPYAAADMAAAAS6jJQqsLOmV2ZW50LXR5cGUHAAVjaHVuaw06
+ Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5
+ dGVzIjoiZXlKamIyNTBaVzUwUW14dlkydFRkRzl3SWpwN0ltTnZiblJsYm5SQ2JHOWphMGx1WkdW
+ NElqb3lNbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0gifRDaM/AA
+ AAEDAAAASwjQ7gQLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRp
+ b24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKamIyNTBaVzUwUW14dlky
+ dEVaV3gwWVNJNmV5SmtaV3gwWVNJNmV5SjBaWGgwSWpvaUxpSjlMQ0pqYjI1MFpXNTBRbXh2WTJ0
+ SmJtUmxlQ0k2TWpOOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZH
+ SElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0In38bbDJAAAArwAAAEt2W082CzpldmVudC10eXBlBwAF
+ Y2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2
+ ZW50eyJieXRlcyI6ImV5SmpiMjUwWlc1MFFteHZZMnRUZEc5d0lqcDdJbU52Ym5SbGJuUkNiRzlq
+ YTBsdVpHVjRJam95TTMxOSIsInAiOiJhYmNkZSJ90lbQowAAANkAAABLAMlaWQs6ZXZlbnQtdHlw
+ ZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUH
+ AAVldmVudHsiYnl0ZXMiOiJleUp0WlhOellXZGxVM1J2Y0NJNmV5SnpkRzl3VW1WaGMyOXVJam9p
+ Wlc1a1gzUjFjbTRpZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdI
+ SUpLTE1OT1BRUlNUVVZXWFkifTqBfD4AAAJNAAAAS2mHeoILOmV2ZW50LXR5cGUHAAVjaHVuaw06
+ Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5
+ dGVzIjoiZXlKdFpYUmhaR0YwWVNJNmV5SjFjMkZuWlNJNmV5SnBibkIxZEZSdmEyVnVjeUk2TlRZ
+ NExDSnZkWFJ3ZFhSVWIydGxibk1pT2pVMkxDSmpZV05vWlZKbFlXUkpibkIxZEZSdmEyVnVRMjkx
+ Ym5RaU9qQXNJbU5oWTJobFYzSnBkR1ZKYm5CMWRGUnZhMlZ1UTI5MWJuUWlPakI5TENKdFpYUnlh
+ V056SWpwN2ZTd2lkSEpoWTJVaU9udDlmU3dpWVcxaGVtOXVMV0psWkhKdlkyc3RhVzUyYjJOaGRH
+ bHZiazFsZEhKcFkzTWlPbnNpYVc1d2RYUlViMnRsYmtOdmRXNTBJam8xTmpnc0ltOTFkSEIxZEZS
+ dmEyVnVRMjkxYm5RaU9qVTJMQ0pwYm5adlkyRjBhVzl1VEdGMFpXNWplU0k2TkRRMUxDSm1hWEp6
+ ZEVKNWRHVk1ZWFJsYm1ONUlqbzJNaXdpWTJGamFHVlNaV0ZrU1c1d2RYUlViMnRsYmtOdmRXNTBJ
+ am93TENKallXTm9aVmR5YVhSbFNXNXdkWFJVYjJ0bGJrTnZkVzUwSWpvd2ZYMD0iLCJwIjoiYWJj
+ ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNIn0QhkpC
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/vnd.amazon.eventstream
+ Date:
+ - Tue, 25 Mar 2025 14:40:19 GMT
+ Set-Cookie: test_set_cookie
+ Transfer-Encoding:
+ - chunked
+ X-Amzn-Bedrock-Content-Type:
+ - application/json
+ x-amzn-RequestId:
+ - 1c7282d2-8bd0-4979-ac7a-c6edde93f739
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_with_content_tool_call[anthropic.claude].yaml b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_with_content_tool_call[anthropic.claude].yaml
new file mode 100644
index 0000000000..df7dbe8b80
--- /dev/null
+++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/cassettes/test_invoke_model_with_response_stream_with_content_tool_call[anthropic.claude].yaml
@@ -0,0 +1,484 @@
+interactions:
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please give one tool call for Seattle and one for San Francisco",
+ "type": "text"
+ }
+ ]
+ }
+ ],
+ "anthropic_version": "bedrock-2023-05-31",
+ "tools": [
+ {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "input_schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ ],
+ "max_tokens": 1000
+ }
+ headers:
+ Content-Length:
+ - '513'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250325T163434Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-9caf13be-645b4e873de5413a21fd5559;Parent=86c9f4d15772db4a;Sampled=1
+ amz-sdk-invocation-id:
+ - cb26d944-c107-4af2-9e43-c712c373e0f2
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20240620-v1%3A0/invoke-with-response-stream
+ response:
+ body:
+ string: !!binary |
+ AAAB2QAAAEvLlYn8CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpj
+ MkZuWlY5emRHRnlkQ0lzSW0xbGMzTmhaMlVpT25zaWFXUWlPaUp0YzJkZlltUnlhMTh3TVU1SGFI
+ QmhlVXhGTlRKTWQxUjZZMmRuUzNWa1kzRWlMQ0owZVhCbElqb2liV1Z6YzJGblpTSXNJbkp2YkdV
+ aU9pSmhjM05wYzNSaGJuUWlMQ0p0YjJSbGJDSTZJbU5zWVhWa1pTMHpMVFV0YzI5dWJtVjBMVEl3
+ TWpRd05qSXdJaXdpWTI5dWRHVnVkQ0k2VzEwc0luTjBiM0JmY21WaGMyOXVJanB1ZFd4c0xDSnpk
+ Rzl3WDNObGNYVmxibU5sSWpwdWRXeHNMQ0oxYzJGblpTSTZleUpwYm5CMWRGOTBiMnRsYm5NaU9q
+ TTVNaXdpYjNWMGNIVjBYM1J2YTJWdWN5STZOSDE5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
+ cXJzdHV2d3h5ekEifcxo58YAAAEXAAAAS52w30YLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
+ dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
+ ZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOXpkR0Z5ZENJc0ltbHVaR1Y0SWpvd0xDSmpi
+ MjUwWlc1MFgySnNiMk5ySWpwN0luUjVjR1VpT2lKMFpYaDBJaXdpZEdWNGRDSTZJaUo5ZlE9PSIs
+ InAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla
+ MDEyMzQifZCt+WAAAAD5AAAAS8EIdV0LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBl
+ BwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVY
+ QmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJ
+ NmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSkRaWEowWVdsdWJIa2hJRWtp
+ ZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm8ifdd8tHsAAAEbAAAAS1hAMkcLOmV2ZW50LXR5cGUH
+ AAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAF
+ ZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0lt
+ bHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhR
+ aU9pSW5iR3dnZFhObElIUm9aU0JuWlhRaWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1
+ dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTIn16qOayAAABFAAAAEvaEKWWCzpldmVudC10eXBlBwAF
+ Y2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2
+ ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1
+ WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlP
+ aUpmWTNWeWNtVnVkRjkzWldGMGFHVnlJR1oxYm1OMGFXOXVJbjE5IiwicCI6ImFiY2RlZmdoaWpr
+ bG1ub3BxcnN0dXZ3eHl6In27RoiRAAABBAAAAEu68DIUCzpldmVudC10eXBlBwAFY2h1bmsNOmNv
+ bnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRl
+ cyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dM
+ Q0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnZEc4Z1ky
+ aGxZMnNnZEdobElIZGxZWFJvWlhJZ1ptOXlJbjE5IiwicCI6ImFiY2RlZmdoaWoifUwnIAgAAAE6
+ AAAAS6ThNPMLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24v
+ anNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVk
+ RjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRH
+ VjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdZbTkwYUNCVFpXRjBkR3hsSUdGdVpDQlRZVzRnUm5K
+ aGJtTnBjMk52SW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpL
+ TE1OT1BRUlNUVVZXWFlaMDEyMyJ9sJyB3QAAATEAAABL0zEF4gs6ZXZlbnQtdHlwZQcABWNodW5r
+ DTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsi
+ Ynl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJ
+ am93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJdUlF
+ a25iR3dnYldGclpTQjBkMjhnYzJWd1lYSmhkR1VpZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
+ cXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyIn2ePEn5AAABCQAAAEtCYPal
+ CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1l
+ c3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWph
+ MTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pX
+ eDBZU0lzSW5SbGVIUWlPaUlnWm5WdVkzUnBiMjRnWTJGc2JITWdkMmwwYUdsdUluMTkiLCJwIjoi
+ YWJjZGVmZ2hpamtsbW5vcHFycyJ91VmQFwAAASAAAABLjrG70As6ZXZlbnQtdHlwZQcABWNodW5r
+ DTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsi
+ Ynl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJ
+ am93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ2RH
+ aGxJSE5oYldVZ1lteHZZMnNpZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFC
+ Q0RFRkdISUpLTE1OT1BRUlNUVVZXWCJ98HrGKgAAARMAAABLaDB5hgs6ZXZlbnQtdHlwZQcABWNo
+ dW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVu
+ dHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpH
+ VjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJ
+ Z1ptOXlJSFJvWlhObElHTnBkR2xsY3k0aWZYMD0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1
+ dnd4eXpBQkNERUZHIn0uOeatAAAAxAAAAEuYuQlqCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRl
+ bnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6
+ ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTl6ZEc5d0lpd2lhVzVrWlhnaU9qQjkiLCJw
+ IjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSCJ9/DIv/gAAAUwAAABL0nMhnAs6
+ ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNz
+ YWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5
+ emRHRnlkQ0lzSW1sdVpHVjRJam94TENKamIyNTBaVzUwWDJKc2IyTnJJanA3SW5SNWNHVWlPaUow
+ YjI5c1gzVnpaU0lzSW1sa0lqb2lkRzl2YkhWZlltUnlhMTh3TVV0aGRHbEhhV3BXUm1JNWVYVk5V
+ R051Vm1zek9HVWlMQ0p1WVcxbElqb2laMlYwWDJOMWNuSmxiblJmZDJWaGRHaGxjaUlzSW1sdWNI
+ VjBJanA3ZlgxOSIsInAiOiJhYmNkZWZnaGlqIn1C2DPVAAAA/QAAAEs0iNOdCzpldmVudC10eXBl
+ BwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
+ BWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJ
+ bWx1WkdWNElqb3hMQ0prWld4MFlTSTZleUowZVhCbElqb2lhVzV3ZFhSZmFuTnZibDlrWld4MFlT
+ SXNJbkJoY25ScFlXeGZhbk52YmlJNklpSjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ubyJ9eV3i
+ iQAAAQsAAABLOKClxQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNh
+ dGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1
+ ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam94TENKa1pXeDBZU0k2ZXlKMGVYQmxJ
+ am9pYVc1d2RYUmZhbk52Ymw5a1pXeDBZU0lzSW5CaGNuUnBZV3hmYW5OdmJpSTZJbnRjSW14dlky
+ RjBhVzhpZlgwPSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcSJ9YJXmlgAAATYAAABLYRHZ8gs6ZXZl
+ bnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdl
+ LXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pX
+ eDBZU0lzSW1sdVpHVjRJam94TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pYVc1d2RYUmZhbk52Ymw5
+ a1pXeDBZU0lzSW5CaGNuUnBZV3hmYW5OdmJpSTZJbTVjSWpvZ1hDSlRaV0YwZENKOWZRPT0iLCJw
+ IjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAx
+ MjMifb0l8mwAAAD3AAAAS344yzwLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQ
+ YXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJ
+ am9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpveExDSmtaV3gwWVNJNmV5
+ SjBlWEJsSWpvaWFXNXdkWFJmYW5OdmJsOWtaV3gwWVNJc0luQmhjblJwWVd4ZmFuTnZiaUk2SW14
+ bFhDSjlJbjE5IiwicCI6ImFiY2RlIn1aCch2AAAAugAAAEveW1fECzpldmVudC10eXBlBwAFY2h1
+ bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50
+ eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTl6ZEc5d0lpd2lhVzVrWlhn
+ aU9qRjkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4In3PkCZGAAABVgAAAEv4I66/Czpl
+ dmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3Nh
+ Z2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTl6
+ ZEdGeWRDSXNJbWx1WkdWNElqb3lMQ0pqYjI1MFpXNTBYMkpzYjJOcklqcDdJblI1Y0dVaU9pSjBi
+ MjlzWDNWelpTSXNJbWxrSWpvaWRHOXZiSFZmWW1SeWExOHdNVlI2WWpNMVJYbGtTMGhYZWpSVlds
+ QXpjSFZVWWtZaUxDSnVZVzFsSWpvaVoyVjBYMk4xY25KbGJuUmZkMlZoZEdobGNpSXNJbWx1Y0hW
+ MElqcDdmWDE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0In0JMwU+AAABFQAAAEvncIwmCzpl
+ dmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3Nh
+ Z2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlr
+ Wld4MFlTSXNJbWx1WkdWNElqb3lMQ0prWld4MFlTSTZleUowZVhCbElqb2lhVzV3ZFhSZmFuTnZi
+ bDlrWld4MFlTSXNJbkJoY25ScFlXeGZhbk52YmlJNklpSjlmUT09IiwicCI6ImFiY2RlZmdoaWpr
+ bG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTSJ967ZY0QAAAScAAABLPJFnwAs6ZXZlbnQtdHlw
+ ZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUH
+ AAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lz
+ SW1sdVpHVjRJam95TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pYVc1d2RYUmZhbk52Ymw5a1pXeDBZ
+ U0lzSW5CaGNuUnBZV3hmYW5OdmJpSTZJbnRjSW14dlkyRjBhVzl1SW4xOSIsInAiOiJhYmNkZWZn
+ aGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlMifb3cxEIAAAESAAAAS1VQUDYL
+ OmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVz
+ c2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amEx
+ OWtaV3gwWVNJc0ltbHVaR1Y0SWpveUxDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWFXNXdkWFJmYW5O
+ dmJsOWtaV3gwWVNJc0luQmhjblJwWVd4ZmFuTnZiaUk2SWx3aU9pQmNJbE5oYmlBaWZYMD0iLCJw
+ IjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4In0nyZ4GAAAA/AAAAEsJ6PotCzpldmVudC10eXBl
+ BwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
+ BWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJ
+ bWx1WkdWNElqb3lMQ0prWld4MFlTSTZleUowZVhCbElqb2lhVzV3ZFhSZmFuTnZibDlrWld4MFlT
+ SXNJbkJoY25ScFlXeGZhbk52YmlJNklrWnlZVzVqYVhOamJ5SjlmUT09IiwicCI6ImFiIn3c7Eog
+ AAABHAAAAEvqYO5XCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVk
+ R1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3lMQ0prWld4MFlTSTZleUowZVhCbElq
+ b2lhVzV3ZFhSZmFuTnZibDlrWld4MFlTSXNJbkJoY25ScFlXeGZhbk52YmlJNklsd2lmU0o5ZlE9
+ PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1Aiffd3t8IA
+ AAC/AAAASxa72LQLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRp
+ b24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRH
+ VnVkRjlpYkc5amExOXpkRzl3SWl3aWFXNWtaWGdpT2pKOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9w
+ cXJzdHV2d3h5ekFCQyJ9Gq1O0QAAASQAAABLezEdEAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250
+ ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMi
+ OiJleUowZVhCbElqb2liV1Z6YzJGblpWOWtaV3gwWVNJc0ltUmxiSFJoSWpwN0luTjBiM0JmY21W
+ aGMyOXVJam9pZEc5dmJGOTFjMlVpTENKemRHOXdYM05sY1hWbGJtTmxJanB1ZFd4c2ZTd2lkWE5o
+ WjJVaU9uc2liM1YwY0hWMFgzUnZhMlZ1Y3lJNk1UTTBmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1u
+ b3BxcnN0dXZ3eHl6QUJDREVGR0gifak0N2MAAAFAAAAASxeDzJ0LOmV2ZW50LXR5cGUHAAVjaHVu
+ aw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7
+ ImJ5dGVzIjoiZXlKMGVYQmxJam9pYldWemMyRm5aVjl6ZEc5d0lpd2lZVzFoZW05dUxXSmxaSEp2
+ WTJzdGFXNTJiMk5oZEdsdmJrMWxkSEpwWTNNaU9uc2lhVzV3ZFhSVWIydGxia052ZFc1MElqb3pP
+ VElzSW05MWRIQjFkRlJ2YTJWdVEyOTFiblFpT2prd0xDSnBiblp2WTJGMGFXOXVUR0YwWlc1amVT
+ STZNemN5TWl3aVptbHljM1JDZVhSbFRHRjBaVzVqZVNJNk56YzVmWDA9IiwicCI6ImFiY2RlZiJ9
+ uDbBJw==
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/vnd.amazon.eventstream
+ Date:
+ - Tue, 25 Mar 2025 16:34:35 GMT
+ Set-Cookie: test_set_cookie
+ Transfer-Encoding:
+ - chunked
+ X-Amzn-Bedrock-Content-Type:
+ - application/json
+ x-amzn-RequestId:
+ - 17808f83-6c84-4f3d-9e81-4007fd8f848e
+ status:
+ code: 200
+ message: OK
+- request:
+ body: |-
+ {
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the weather in Seattle and San Francisco today? Please give one tool call for Seattle and one for San Francisco",
+ "type": "text"
+ }
+ ]
+ },
+ {
+ "role": "assistant",
+ "content": [
+ {
+ "type": "text",
+ "text": "Certainly! I'll use the get_current_weather function to check the weather for both Seattle and San Francisco. I'll make two separate function calls within the same block for these cities."
+ },
+ {
+ "type": "tool_use",
+ "id": "toolu_bdrk_01KatiGijVFb9yuMPcnVk38e",
+ "name": "get_current_weather",
+ "input": {
+ "location": "Seattle"
+ }
+ },
+ {
+ "type": "tool_use",
+ "id": "toolu_bdrk_01Tzb35EydKHWz4UZP3puTbF",
+ "name": "get_current_weather",
+ "input": {
+ "location": "San Francisco"
+ }
+ }
+ ]
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "type": "tool_result",
+ "tool_use_id": "toolu_bdrk_01KatiGijVFb9yuMPcnVk38e",
+ "content": "50 degrees and raining"
+ },
+ {
+ "type": "tool_result",
+ "tool_use_id": "toolu_bdrk_01Tzb35EydKHWz4UZP3puTbF",
+ "content": "70 degrees and sunny"
+ }
+ ]
+ }
+ ],
+ "anthropic_version": "bedrock-2023-05-31",
+ "tools": [
+ {
+ "name": "get_current_weather",
+ "description": "Get the current weather in a given location.",
+ "input_schema": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The name of the city"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ ],
+ "max_tokens": 1000
+ }
+ headers:
+ Content-Length:
+ - '1297'
+ User-Agent:
+ - Boto3/1.35.56 md/Botocore#1.35.56 ua/2.0 os/linux#6.1.0-1034-oem md/arch#x86_64
+ lang/python#3.10.12 md/pyimpl#CPython cfg/retry-mode#legacy Botocore/1.35.56
+ X-Amz-Date:
+ - 20250325T163438Z
+ X-Amz-Security-Token:
+ - test_aws_security_token
+ X-Amzn-Trace-Id:
+ - Root=1-feef9d11-6a09175d24533ea9968f07ff;Parent=952177b027cf0daa;Sampled=1
+ amz-sdk-invocation-id:
+ - 5ac7874b-78a1-4e44-8fa5-7afeabdc1343
+ amz-sdk-request:
+ - attempt=1
+ authorization:
+ - Bearer test_aws_authorization
+ method: POST
+ uri: https://bedrock-runtime.us-east-1.amazonaws.com/model/us.anthropic.claude-3-5-sonnet-20240620-v1%3A0/invoke-with-response-stream
+ response:
+ body:
+ string: !!binary |
+ AAABwwAAAEvhxQbfCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0
+ aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaWJXVnpj
+ MkZuWlY5emRHRnlkQ0lzSW0xbGMzTmhaMlVpT25zaWFXUWlPaUp0YzJkZlltUnlhMTh3TVRScFFV
+ Rk5TMjlLVW1SdVpYUnlSa1ZoZFRVMk9Vc2lMQ0owZVhCbElqb2liV1Z6YzJGblpTSXNJbkp2YkdV
+ aU9pSmhjM05wYzNSaGJuUWlMQ0p0YjJSbGJDSTZJbU5zWVhWa1pTMHpMVFV0YzI5dWJtVjBMVEl3
+ TWpRd05qSXdJaXdpWTI5dWRHVnVkQ0k2VzEwc0luTjBiM0JmY21WaGMyOXVJanB1ZFd4c0xDSnpk
+ Rzl3WDNObGNYVmxibU5sSWpwdWRXeHNMQ0oxYzJGblpTSTZleUpwYm5CMWRGOTBiMnRsYm5NaU9q
+ WXdNeXdpYjNWMGNIVjBYM1J2YTJWdWN5STZNbjE5ZlE9PSIsInAiOiJhYmNkZSJ9UzZi8gAAAPIA
+ AABLtthETAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9q
+ c29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRG
+ OWliRzlqYTE5emRHRnlkQ0lzSW1sdVpHVjRJam93TENKamIyNTBaVzUwWDJKc2IyTnJJanA3SW5S
+ NWNHVWlPaUowWlhoMElpd2lkR1Y0ZENJNklpSjlmUT09IiwicCI6ImFiY2RlZmdoaWprbG1ub3Bx
+ cnN0In2THpBxAAABIgAAAEv0ceiwCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcA
+ EGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJs
+ SWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZl
+ eUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUpjYmx4dVFtRnpaU0o5ZlE9PSIs
+ InAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla
+ MDEyMzQ1NjcifaXZFy8AAAEvAAAASwzhLAELOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10
+ eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlK
+ MGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gw
+ WVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSmtJRzl1SUhSb1pTQnla
+ WE4xYkhSekxDQm9aWEpsSW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RF
+ RkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQifaZF9F4AAAE+AAAAS1FhkjMLOmV2ZW50LXR5cGUH
+ AAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAF
+ ZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0lt
+ bHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhR
+ aU9pSW5jeUIwYUdVZ2QyVmhkR2hsY2lCcGJtWnZjbTFoZEdsdmJpQm1iM0lnVTJWaGRIUnNaU0Jo
+ Ym1RZ1UyRnVJbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktM
+ TU4ifVbXVJMAAAEnAAAASzyRZ8ALOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQ
+ YXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJ
+ am9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5
+ SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdSbkpoYm1OcGMyTnZJSFJ2WkdG
+ NU9seHVYRzR4SW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpL
+ TE1OT1BRUlNUVVZXIn099AtGAAABOAAAAEveIWeTCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRl
+ bnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6
+ ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0pr
+ Wld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUl1SUZObFlYUjBi
+ R1U2SUZSb1pTQmpkWEp5Wlc1MElIZGxZWFJvWlhJZ2FXNGdVMlZoZEhSc1pTSjlmUT09IiwicCI6
+ ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMIn18xkatAAABEgAAAEtVUFA2
+ CzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1l
+ c3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWph
+ MTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pX
+ eDBZU0lzSW5SbGVIUWlPaUlnYVhNZ05UQWdaR1ZuY21WbGN5QmhibVFnY21GcGJtbHVaeUo5ZlE9
+ PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdCJ9mICI9AAAAP0AAABLNIjTnQs6ZXZlbnQtdHlw
+ ZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUH
+ AAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lz
+ SW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxl
+ SFFpT2lJdVhHNHlMaUJUWVc0Z1JuSmhibU5wYzJOdkluMTkiLCJwIjoiYWJjZGVmZ2hpamsifcEE
+ 25AAAAFKAAAAS10z1DwLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGlj
+ YXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5
+ dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJs
+ SWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSTZJRlJvWlNCamRYSnlaVzUwSUhkbFlYUm9a
+ WElnYVc0Z1UyRnVJRVp5WVc1amFYTmpieUJwY3lKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5v
+ cHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjMifbnZTbQAAAEzAAAAS6nx
+ VoILOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06
+ bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5
+ amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlr
+ Wld4MFlTSXNJblJsZUhRaU9pSWdOekFnWkdWbmNtVmxjeUJoYm1RZ2MzVnVibmt1SW4xOSIsInAi
+ OiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEy
+ MzQ1Njc4In09zRUvAAAA+QAAAEvBCHVdCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlw
+ ZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBl
+ WEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlT
+ STZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUpjYmx4dVFYTWdlVzkxSUdO
+ aGJpQnpaV1VzSW4xOSIsInAiOiJhYmNkZWZnIn1QpKk+AAABJQAAAEtGUTSgCzpldmVudC10eXBl
+ BwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
+ BWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJ
+ bWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVI
+ UWlPaUlnZEdobGNtVW5jeUJ4ZFdsMFpTQmhJR1JwWm1abGNtVnVZMlVnYVc0Z2RHaGxJbjE5Iiwi
+ cCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREUifaUyG3gAAAE7AAAAS5mBHUMLOmV2
+ ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2Fn
+ ZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWta
+ V3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlT
+ SXNJblJsZUhRaU9pSWdkMlZoZEdobGNpQmlaWFIzWldWdUlIUm9aWE5sSUhSM2J5QlhaWE4wSW4x
+ OSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZX
+ WFlaMDEyMzQifd2z7pkAAAD4AAAAS/xoXO0LOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10
+ eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlK
+ MGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gw
+ WVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdRMjloYzNRZ1kybDBh
+ V1Z6SUhSdlpHRjVMaUo5ZlE9PSIsInAiOiJhYiJ9Rso+GgAAATYAAABLYRHZ8gs6ZXZlbnQtdHlw
+ ZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUH
+ AAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lz
+ SW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxl
+ SFFpT2lJZ1UyVmhkSFJzWlNCcGN5QmxlSEJsY21sbGJtTnBibWNnWTI5dmJHVnlJSFJsYlhCbGNt
+ RjBkWEpsY3lCM2FYUm9JbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUIifTMg
+ TKgAAAElAAAAS0ZRNKALOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGlj
+ YXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5
+ dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5SjBlWEJs
+ SWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdjbUZwYml3Z2QyaHBZMmdnYVhNZ1ptRnBj
+ bXg1SW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BR
+ UlNUVSJ9T2tXLQAAAScAAABLPJFnwAs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUH
+ ABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhC
+ bElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2
+ ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ2RIbHdhV05oYkNCbWIzSWdk
+ R2hsSUdOcGRIa3VJRTl1SW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RF
+ RkdISUpLTE1OT1BRUlMifdjQGr4AAAEQAAAASy+QA1YLOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29u
+ dGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVz
+ IjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xD
+ SmtaV3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdkR2hsSUc5
+ MGFHVnlJR2hoYm1Rc0lGTmhiaUJHY21GdVkybHpZMjhnYVhNaWZYMD0iLCJwIjoiYWJjZGVmZ2hp
+ aiJ906llVwAAAR4AAABLkKC9Nws6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBh
+ cHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElq
+ b2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlK
+ MGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ1pXNXFiM2xwYm1jZ2QyRnliV1Z5
+ SUhSbGJYQmxjbUYwZFhKbGN5QjNhWFJvSW4xOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
+ d3gifd59qdwAAAEoAAAAS77B8BELOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQ
+ YXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJ
+ am9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gwWVNJNmV5
+ SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdjM1Z1Ym5rZ1kyOXVaR2wwYVc5
+ dWN5d2diV0ZyYVc1bklHbDBJR0VnY0d4bFlYTmhiblFnWkdGNUluMTkiLCJwIjoiYWJjZGVmZ2hp
+ amtsbW5vcHFyc3R1diJ9H4Nw/wAAASsAAABL+WGKwQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250
+ ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMi
+ OiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENK
+ a1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFpT2lJZ2FXNGdkR2hs
+ SUVKaGVTQkJjbVZoTGx4dVhHNUpjeUo5ZlE9PSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2
+ d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXIn1ePiFEAAABGwAAAEtYQDJHCzpldmVudC10eXBl
+ BwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9uL2pzb24NOm1lc3NhZ2UtdHlwZQcA
+ BWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1ZEY5aWJHOWphMTlrWld4MFlTSXNJ
+ bWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lkR1Y0ZEY5a1pXeDBZU0lzSW5SbGVI
+ UWlPaUlnZEdobGNtVWdZVzU1ZEdocGJtY2daV3h6WlNCNWIzVWlmWDA9IiwicCI6ImFiY2RlZmdo
+ aWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGRyJ9IJonHgAAAQwAAABLioB51Qs6ZXZlbnQtdHlwZQcA
+ BWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVl
+ dmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWliRzlqYTE5a1pXeDBZU0lzSW1s
+ dVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRGOWtaV3gwWVNJc0luUmxlSFFp
+ T2lJblpDQnNhV3RsSUhSdkluMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE
+ RUZHSElKS0wifRFLQMQAAAEgAAAAS46xu9ALOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10
+ eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlK
+ MGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmtaV3gw
+ WVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdhMjV2ZHlCaFltOTFk
+ Q0IwYUdVZ2QyVmhkR2hsY2lKOWZRPT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpB
+ QkNERUZHSElKS0wifZVK5CQAAAEJAAAAS0Jg9qULOmV2ZW50LXR5cGUHAAVjaHVuaw06Y29udGVu
+ dC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2FnZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoi
+ ZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOWtaV3gwWVNJc0ltbHVaR1Y0SWpvd0xDSmta
+ V3gwWVNJNmV5SjBlWEJsSWpvaWRHVjRkRjlrWld4MFlTSXNJblJsZUhRaU9pSWdhVzRnZEdobGMy
+ VWdZMmwwYVdWeklHOXlJbjE5IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3In3JZtxRAAAB
+ GAAAAEsf4EiXCzpldmVudC10eXBlBwAFY2h1bmsNOmNvbnRlbnQtdHlwZQcAEGFwcGxpY2F0aW9u
+ L2pzb24NOm1lc3NhZ2UtdHlwZQcABWV2ZW50eyJieXRlcyI6ImV5SjBlWEJsSWpvaVkyOXVkR1Z1
+ ZEY5aWJHOWphMTlrWld4MFlTSXNJbWx1WkdWNElqb3dMQ0prWld4MFlTSTZleUowZVhCbElqb2lk
+ R1Y0ZEY5a1pXeDBZU0lzSW5SbGVIUWlPaUlnWVc1NUlHOTBhR1Z5SUd4dlkyRjBhVzl1Y3lKOWZR
+ PT0iLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSCJ9eWu/OgAAANwAAABL
+ yCnVKQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBsaWNhdGlvbi9qc29u
+ DTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2lZMjl1ZEdWdWRGOWli
+ RzlqYTE5a1pXeDBZU0lzSW1sdVpHVjRJam93TENKa1pXeDBZU0k2ZXlKMGVYQmxJam9pZEdWNGRG
+ OWtaV3gwWVNJc0luUmxlSFFpT2lJL0luMTkiLCJwIjoiYWIifYtZDXoAAADFAAAAS6XZINoLOmV2
+ ZW50LXR5cGUHAAVjaHVuaw06Y29udGVudC10eXBlBwAQYXBwbGljYXRpb24vanNvbg06bWVzc2Fn
+ ZS10eXBlBwAFZXZlbnR7ImJ5dGVzIjoiZXlKMGVYQmxJam9pWTI5dWRHVnVkRjlpYkc5amExOXpk
+ Rzl3SWl3aWFXNWtaWGdpT2pCOSIsInAiOiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RF
+ RkdISSJ9pG6vOAAAARcAAABLnbDfRgs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUH
+ ABBhcHBsaWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhC
+ bElqb2liV1Z6YzJGblpWOWtaV3gwWVNJc0ltUmxiSFJoSWpwN0luTjBiM0JmY21WaGMyOXVJam9p
+ Wlc1a1gzUjFjbTRpTENKemRHOXdYM05sY1hWbGJtTmxJanB1ZFd4c2ZTd2lkWE5oWjJVaU9uc2li
+ M1YwY0hWMFgzUnZhMlZ1Y3lJNk1UUTJmWDA9IiwicCI6ImFiY2RlZmdoaWprbG1ub3BxcnN0dSJ9
+ RviKwQAAAWMAAABLkeKZSQs6ZXZlbnQtdHlwZQcABWNodW5rDTpjb250ZW50LXR5cGUHABBhcHBs
+ aWNhdGlvbi9qc29uDTptZXNzYWdlLXR5cGUHAAVldmVudHsiYnl0ZXMiOiJleUowZVhCbElqb2li
+ V1Z6YzJGblpWOXpkRzl3SWl3aVlXMWhlbTl1TFdKbFpISnZZMnN0YVc1MmIyTmhkR2x2YmsxbGRI
+ SnBZM01pT25zaWFXNXdkWFJVYjJ0bGJrTnZkVzUwSWpvMk1ETXNJbTkxZEhCMWRGUnZhMlZ1UTI5
+ MWJuUWlPakUwTml3aWFXNTJiMk5oZEdsdmJreGhkR1Z1WTNraU9qVXdNak1zSW1acGNuTjBRbmww
+ WlV4aGRHVnVZM2tpT2pVMU9IMTkiLCJwIjoiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNE
+ RUZHSElKS0xNTk8ifQgFpq0=
+ headers:
+ Connection:
+ - keep-alive
+ Content-Type:
+ - application/vnd.amazon.eventstream
+ Date:
+ - Tue, 25 Mar 2025 16:34:38 GMT
+ Set-Cookie: test_set_cookie
+ Transfer-Encoding:
+ - chunked
+ X-Amzn-Bedrock-Content-Type:
+ - application/json
+ x-amzn-RequestId:
+ - 8376cb65-4e45-4f96-a8fc-31cefffb8ca6
+ status:
+ code: 200
+ message: OK
+version: 1
diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_bedrock.py b/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_bedrock.py
index e6afe2ceb3..bd2211c56c 100644
--- a/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_bedrock.py
+++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/test_botocore_bedrock.py
@@ -1146,7 +1146,7 @@ def set_if_not_none(config, key, value):
if system:
body["system"] = system
if tools:
- body["toolConfig"] = {"tools": tools}
+ body["toolConfig"] = tools
elif llm_model == "amazon.titan-text-lite-v1":
config = {}
set_if_not_none(config, "maxTokenCount", max_tokens)
@@ -1376,28 +1376,234 @@ def test_invoke_model_with_content_different_events(
assert_message_in_logs(logs[4], "gen_ai.choice", choice_body, span)
+class AnthropicClaudeModel:
+ @staticmethod
+ def user_message(prompt: str):
+ return {
+ "text": prompt,
+ "type": "text",
+ }
+
+ @staticmethod
+ def tool_config():
+ return get_anthropic_tool_config()
+
+ @staticmethod
+ def assistant_message(response):
+ return {"role": response["role"], "content": response["content"]}
+
+ @staticmethod
+ def tool_requests_ids(response):
+ return [
+ content["id"]
+ for content in response["content"]
+ if content["type"] == "tool_use"
+ ]
+
+ @staticmethod
+ def tool_requests_ids_from_stream(stream_content):
+ return [
+ item["id"] for item in stream_content if item["type"] == "tool_use"
+ ]
+
+ @staticmethod
+ def tool_calls_results(tool_requests_ids):
+ assert len(tool_requests_ids) == 2
+
+ return {
+ "role": "user",
+ "content": [
+ {
+ "type": "tool_result",
+ "tool_use_id": tool_requests_ids[0],
+ "content": "50 degrees and raining",
+ },
+ {
+ "type": "tool_result",
+ "tool_use_id": tool_requests_ids[1],
+ "content": "70 degrees and sunny",
+ },
+ ],
+ }
+
+ @staticmethod
+ def tool_messages(tool_requests_ids, tool_call_result, expect_content):
+ tool_message_0 = {
+ "id": tool_requests_ids[0],
+ "content": tool_call_result["content"][0]["content"]
+ if expect_content
+ else None,
+ }
+ tool_message_1 = {
+ "id": tool_requests_ids[1],
+ "content": tool_call_result["content"][1]["content"]
+ if expect_content
+ else None,
+ }
+ return tool_message_0, tool_message_1
+
+ @staticmethod
+ def choice_content(response):
+ return response["content"]
+
+ @staticmethod
+ def get_stream_body_content(body):
+ content = []
+ content_block = {}
+ input_json_buf = ""
+ for event in body:
+ json_bytes = event["chunk"].get("bytes", b"")
+ decoded = json_bytes.decode("utf-8")
+ chunk = json.loads(decoded)
+
+ if (message_type := chunk.get("type")) is not None:
+ if message_type == "content_block_start":
+ content_block = chunk["content_block"]
+ elif message_type == "content_block_delta":
+ if chunk["delta"]["type"] == "text_delta":
+ content_block["text"] += chunk["delta"]["text"]
+ elif chunk["delta"]["type"] == "input_json_delta":
+ input_json_buf += chunk["delta"]["partial_json"]
+ elif message_type == "content_block_stop":
+ if input_json_buf:
+ content_block["input"] = json.loads(input_json_buf)
+ content.append(content_block)
+ content_block = None
+ input_json_buf = ""
+
+ return content
+
+
+class AmazonNovaModel:
+ @staticmethod
+ def user_message(prompt: str):
+ return {
+ "text": prompt,
+ }
+
+ @staticmethod
+ def assistant_message(response):
+ return response["output"]["message"]
+
+ @staticmethod
+ def tool_config():
+ return get_tool_config()
+
+ @staticmethod
+ def tool_requests_ids(response):
+ return [
+ content["toolUse"]["toolUseId"]
+ for content in response["output"]["message"]["content"]
+ if "toolUse" in content
+ ]
+
+ @staticmethod
+ def tool_requests_ids_from_stream(stream_content):
+ return [
+ item["toolUse"]["toolUseId"]
+ for item in stream_content
+ if "toolUse" in item
+ ]
+
+ @staticmethod
+ def tool_calls_results(tool_requests_ids):
+ assert len(tool_requests_ids) == 2
+
+ return {
+ "role": "user",
+ "content": [
+ {
+ "toolResult": {
+ "toolUseId": tool_requests_ids[0],
+ "content": [
+ {"json": {"weather": "50 degrees and raining"}}
+ ],
+ }
+ },
+ {
+ "toolResult": {
+ "toolUseId": tool_requests_ids[1],
+ "content": [
+ {"json": {"weather": "70 degrees and sunny"}}
+ ],
+ }
+ },
+ ],
+ }
+
+ @staticmethod
+ def tool_messages(tool_requests_ids, tool_call_result, expect_content):
+ tool_message_0 = {
+ "id": tool_requests_ids[0],
+ "content": tool_call_result["content"][0]["toolResult"]["content"]
+ if expect_content
+ else None,
+ }
+ tool_message_1 = {
+ "id": tool_requests_ids[1],
+ "content": tool_call_result["content"][1]["toolResult"]["content"]
+ if expect_content
+ else None,
+ }
+ return tool_message_0, tool_message_1
+
+ @staticmethod
+ def choice_content(response):
+ return response["output"]["message"]["content"]
+
+ @staticmethod
+ def get_stream_body_content(body):
+ content = []
+ content_block = {}
+ tool_use = {}
+ for event in body:
+ json_bytes = event["chunk"].get("bytes", b"")
+ decoded = json_bytes.decode("utf-8")
+ chunk = json.loads(decoded)
+
+ if "contentBlockDelta" in chunk:
+ delta = chunk["contentBlockDelta"]["delta"]
+ if "text" in delta:
+ content_block.setdefault("text", "")
+ content_block["text"] += delta["text"]
+ elif "toolUse" in delta:
+ tool_use["toolUse"]["input"] = json.loads(
+ delta["toolUse"]["input"]
+ )
+ elif "contentBlockStart" in chunk:
+ if content_block:
+ content.append(content_block)
+ content_block = {}
+ start = chunk["contentBlockStart"]["start"]
+ if "toolUse" in start:
+ tool_use = start
+ elif "contentBlockStop" in chunk:
+ if tool_use:
+ content.append(tool_use)
+ tool_use = {}
+ elif "messageStop" in chunk:
+ if content_block:
+ content.append(content_block)
+ content_block = {}
+
+ return content
+
+
def invoke_model_tool_call(
span_exporter,
log_exporter,
bedrock_runtime_client,
llm_model_value,
+ llm_model_config,
expect_content,
):
# pylint:disable=too-many-locals,too-many-statements
- messages = [
- {
- "role": "user",
- "content": [
- {
- "text": "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco",
- "type": "text",
- }
- ],
- }
- ]
+ user_prompt = "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco"
+ user_msg = llm_model_config.user_message(user_prompt)
+ messages = [{"role": "user", "content": [user_msg]}]
max_tokens = 1000
- tool_config = get_anthropic_tool_config()
+ tool_config = llm_model_config.tool_config()
body = get_invoke_model_body(
llm_model_value,
messages=messages,
@@ -1415,36 +1621,13 @@ def invoke_model_tool_call(
new_stream = io.BytesIO(response_0_raw_body)
response_0["body"] = StreamingBody(new_stream, len(response_0_raw_body))
- tool_requests_ids = [
- content["id"]
- for content in response_0_body["content"]
- if content["type"] == "tool_use"
- ]
+ tool_requests_ids = llm_model_config.tool_requests_ids(response_0_body)
assert len(tool_requests_ids) == 2
- tool_call_result = {
- "role": "user",
- "content": [
- {
- "type": "tool_result",
- "tool_use_id": tool_requests_ids[0],
- "content": "50 degrees and raining",
- },
- {
- "type": "tool_result",
- "tool_use_id": tool_requests_ids[1],
- "content": "70 degrees and sunny",
- },
- ],
- }
- # remove extra attributes from response
- response_0_body.pop("id")
- response_0_body.pop("stop_reason")
- response_0_body.pop("stop_sequence")
- response_0_body.pop("usage")
- response_0_body.pop("model")
- response_0_body.pop("type")
- messages.append(response_0_body)
+ assistant_message = llm_model_config.assistant_message(response_0_body)
+ tool_call_result = llm_model_config.tool_calls_results(tool_requests_ids)
+
+ messages.append(assistant_message)
messages.append(tool_call_result)
body = get_invoke_model_body(
@@ -1458,6 +1641,12 @@ def invoke_model_tool_call(
modelId=llm_model_value,
)
+ response_1_raw_body = response_1["body"].read()
+ response_1_body = json.loads(response_1_raw_body)
+ # replenish body for span assertions
+ new_stream = io.BytesIO(response_1_raw_body)
+ response_1["body"] = StreamingBody(new_stream, len(response_1_raw_body))
+
(span_0, span_1) = span_exporter.get_finished_spans()
assert_completion_attributes_from_streaming_body(
span_0,
@@ -1516,7 +1705,7 @@ def invoke_model_tool_call(
assert_message_in_logs(
logs[2], "gen_ai.user.message", user_content, span_1
)
- assistant_body = response_0_body
+ assistant_body = assistant_message
assistant_body["tool_calls"] = choice_body["message"]["tool_calls"]
assistant_body.pop("role")
if not expect_content:
@@ -1527,21 +1716,14 @@ def invoke_model_tool_call(
assistant_body,
span_1,
)
- tool_message_0 = {
- "id": tool_requests_ids[0],
- "content": tool_call_result["content"][0]["content"]
- if expect_content
- else None,
- }
+
+ tool_message_0, tool_message_1 = llm_model_config.tool_messages(
+ tool_requests_ids, tool_call_result, expect_content
+ )
+
assert_message_in_logs(
logs[4], "gen_ai.tool.message", tool_message_0, span_1
)
- tool_message_1 = {
- "id": tool_requests_ids[1],
- "content": tool_call_result["content"][1]["content"]
- if expect_content
- else None,
- }
assert_message_in_logs(
logs[5], "gen_ai.tool.message", tool_message_1, span_1
)
@@ -1553,17 +1735,13 @@ def invoke_model_tool_call(
assert_message_in_logs(
logs[6], "gen_ai.user.message", user_message_body, span_1
)
+ choice_content = llm_model_config.choice_content(response_1_body)
choice_body = {
"index": 0,
"finish_reason": "end_turn",
"message": {
"role": "assistant",
- "content": [
- {
- "type": "text",
- "text": "Thank you for providing the weather information. Here's the current weather for Seattle and San Francisco:\n\n1. Seattle: The current weather in Seattle is 50 degrees and raining.\n2. San Francisco: The current weather in San Francisco is 70 degrees and sunny.\n\nAs you can see, there's quite a difference in the weather between these two West Coast cities today. Seattle is experiencing cooler temperatures with rain, which is fairly typical for the Pacific Northwest. On the other hand, San Francisco is enjoying warmer temperatures with sunny skies, making for a pleasant day in the Bay Area.\n\nIs there anything else you'd like to know about the weather in these cities or any other locations?",
- }
- ],
+ "content": choice_content,
},
}
if not expect_content:
@@ -1571,19 +1749,31 @@ def invoke_model_tool_call(
assert_message_in_logs(logs[7], "gen_ai.choice", choice_body, span_1)
+@pytest.mark.parametrize(
+ "model_family",
+ ["amazon.nova", "anthropic.claude"],
+)
@pytest.mark.vcr()
def test_invoke_model_with_content_tool_call(
span_exporter,
log_exporter,
bedrock_runtime_client,
instrument_with_content,
+ model_family,
):
- llm_model_value = "us.anthropic.claude-3-5-sonnet-20240620-v1:0"
+ if model_family == "amazon.nova":
+ llm_model_value = "amazon.nova-micro-v1:0"
+ llm_model_config = AmazonNovaModel
+ elif model_family == "anthropic.claude":
+ llm_model_value = "us.anthropic.claude-3-5-sonnet-20240620-v1:0"
+ llm_model_config = AnthropicClaudeModel
+
invoke_model_tool_call(
span_exporter,
log_exporter,
bedrock_runtime_client,
llm_model_value,
+ llm_model_config,
expect_content=True,
)
@@ -1700,19 +1890,31 @@ def test_invoke_model_no_content_different_events(
assert_message_in_logs(logs[4], "gen_ai.choice", choice_body, span)
+@pytest.mark.parametrize(
+ "model_family",
+ ["amazon.nova", "anthropic.claude"],
+)
@pytest.mark.vcr()
def test_invoke_model_no_content_tool_call(
span_exporter,
log_exporter,
bedrock_runtime_client,
instrument_no_content,
+ model_family,
):
- llm_model_value = "us.anthropic.claude-3-5-sonnet-20240620-v1:0"
+ if model_family == "amazon.nova":
+ llm_model_value = "amazon.nova-micro-v1:0"
+ llm_model_config = AmazonNovaModel
+ elif model_family == "anthropic.claude":
+ llm_model_value = "us.anthropic.claude-3-5-sonnet-20240620-v1:0"
+ llm_model_config = AnthropicClaudeModel
+
invoke_model_tool_call(
span_exporter,
log_exporter,
bedrock_runtime_client,
llm_model_value,
+ llm_model_config,
expect_content=False,
)
@@ -1950,23 +2152,17 @@ def invoke_model_with_response_stream_tool_call(
log_exporter,
bedrock_runtime_client,
llm_model_value,
+ llm_model_config,
expect_content,
):
# pylint:disable=too-many-locals,too-many-statements,too-many-branches
- messages = [
- {
- "role": "user",
- "content": [
- {
- "text": "What is the weather in Seattle and San Francisco today? Please expect one tool call for Seattle and one for San Francisco",
- "type": "text",
- }
- ],
- }
- ]
+ user_prompt = "What is the weather in Seattle and San Francisco today? Please give one tool call for Seattle and one for San Francisco"
+ user_msg_content = llm_model_config.user_message(user_prompt)
+ messages = [{"role": "user", "content": [user_msg_content]}]
max_tokens = 1000
- tool_config = get_anthropic_tool_config()
+ tool_config = llm_model_config.tool_config()
+
body = get_invoke_model_body(
llm_model_value,
messages=messages,
@@ -1978,50 +2174,12 @@ def invoke_model_with_response_stream_tool_call(
modelId=llm_model_value,
)
- content = []
- content_block = {}
- input_json_buf = ""
- for event in response_0["body"]:
- json_bytes = event["chunk"].get("bytes", b"")
- decoded = json_bytes.decode("utf-8")
- chunk = json.loads(decoded)
-
- if (message_type := chunk.get("type")) is not None:
- if message_type == "content_block_start":
- content_block = chunk["content_block"]
- elif message_type == "content_block_delta":
- if chunk["delta"]["type"] == "text_delta":
- content_block["text"] += chunk["delta"]["text"]
- elif chunk["delta"]["type"] == "input_json_delta":
- input_json_buf += chunk["delta"]["partial_json"]
- elif message_type == "content_block_stop":
- if input_json_buf:
- content_block["input"] = json.loads(input_json_buf)
- content.append(content_block)
- content_block = None
- input_json_buf = ""
-
+ content = llm_model_config.get_stream_body_content(response_0["body"])
assert content
- tool_requests_ids = [
- item["id"] for item in content if item["type"] == "tool_use"
- ]
+ tool_requests_ids = llm_model_config.tool_requests_ids_from_stream(content)
assert len(tool_requests_ids) == 2
- tool_call_result = {
- "role": "user",
- "content": [
- {
- "type": "tool_result",
- "tool_use_id": tool_requests_ids[0],
- "content": "50 degrees and raining",
- },
- {
- "type": "tool_result",
- "tool_use_id": tool_requests_ids[1],
- "content": "70 degrees and sunny",
- },
- ],
- }
+ tool_call_result = llm_model_config.tool_calls_results(tool_requests_ids)
# remove extra attributes from response
messages.append({"role": "assistant", "content": content})
@@ -2038,9 +2196,10 @@ def invoke_model_with_response_stream_tool_call(
modelId=llm_model_value,
)
- # consume the body to have it traced
- for _ in response_1["body"]:
- pass
+ response_1_content = llm_model_config.get_stream_body_content(
+ response_1["body"]
+ )
+ assert response_1_content
(span_0, span_1) = span_exporter.get_finished_spans()
assert_stream_completion_attributes(
@@ -2115,21 +2274,14 @@ def invoke_model_with_response_stream_tool_call(
assistant_body,
span_1,
)
- tool_message_0 = {
- "id": tool_requests_ids[0],
- "content": tool_call_result["content"][0]["content"]
- if expect_content
- else None,
- }
+
+ tool_message_0, tool_message_1 = llm_model_config.tool_messages(
+ tool_requests_ids, tool_call_result, expect_content
+ )
assert_message_in_logs(
logs[4], "gen_ai.tool.message", tool_message_0, span_1
)
- tool_message_1 = {
- "id": tool_requests_ids[1],
- "content": tool_call_result["content"][1]["content"]
- if expect_content
- else None,
- }
+
assert_message_in_logs(
logs[5], "gen_ai.tool.message", tool_message_1, span_1
)
@@ -2146,12 +2298,7 @@ def invoke_model_with_response_stream_tool_call(
"finish_reason": "end_turn",
"message": {
"role": "assistant",
- "content": [
- {
- "type": "text",
- "text": "\n\nGreat! I have the current weather information for both cities. Here's the weather in Seattle and San Francisco today:\n\nSeattle: 50 degrees and raining\nSan Francisco: 70 degrees and sunny\n\nAs you can see, the weather is quite different in these two cities today. Seattle is experiencing cooler temperatures with rain, which is fairly typical for the city. On the other hand, San Francisco is enjoying a warm and sunny day. If you're planning any activities, you might want to consider indoor options for Seattle, while it's a great day for outdoor activities in San Francisco.\n\nIs there anything else you'd like to know about the weather in these cities or any other locations?",
- }
- ],
+ "content": response_1_content,
},
}
if not expect_content:
@@ -2159,19 +2306,31 @@ def invoke_model_with_response_stream_tool_call(
assert_message_in_logs(logs[7], "gen_ai.choice", choice_body, span_1)
+@pytest.mark.parametrize(
+ "model_family",
+ ["amazon.nova", "anthropic.claude"],
+)
@pytest.mark.vcr()
def test_invoke_model_with_response_stream_with_content_tool_call(
span_exporter,
log_exporter,
bedrock_runtime_client,
instrument_with_content,
+ model_family,
):
- llm_model_value = "us.anthropic.claude-3-5-sonnet-20240620-v1:0"
+ if model_family == "amazon.nova":
+ llm_model_value = "amazon.nova-micro-v1:0"
+ llm_model_config = AmazonNovaModel
+ elif model_family == "anthropic.claude":
+ llm_model_value = "us.anthropic.claude-3-5-sonnet-20240620-v1:0"
+ llm_model_config = AnthropicClaudeModel
+
invoke_model_with_response_stream_tool_call(
span_exporter,
log_exporter,
bedrock_runtime_client,
llm_model_value,
+ llm_model_config,
expect_content=True,
)
@@ -2333,19 +2492,31 @@ def test_invoke_model_with_response_stream_no_content_different_events(
assert_message_in_logs(logs[4], "gen_ai.choice", choice_body, span)
+@pytest.mark.parametrize(
+ "model_family",
+ ["amazon.nova", "anthropic.claude"],
+)
@pytest.mark.vcr()
def test_invoke_model_with_response_stream_no_content_tool_call(
span_exporter,
log_exporter,
bedrock_runtime_client,
instrument_no_content,
+ model_family,
):
- llm_model_value = "us.anthropic.claude-3-5-sonnet-20240620-v1:0"
+ if model_family == "amazon.nova":
+ llm_model_value = "amazon.nova-micro-v1:0"
+ llm_model_config = AmazonNovaModel
+ elif model_family == "anthropic.claude":
+ llm_model_value = "us.anthropic.claude-3-5-sonnet-20240620-v1:0"
+ llm_model_config = AnthropicClaudeModel
+
invoke_model_with_response_stream_tool_call(
span_exporter,
log_exporter,
bedrock_runtime_client,
llm_model_value,
+ llm_model_config,
expect_content=False,
)