Skip to content

feat(aws-bedrock): update model YAMLs [bot]#1859

Open
models-bot[bot] wants to merge 1 commit into
mainfrom
bot/update-aws-bedrock-20260724-204929
Open

feat(aws-bedrock): update model YAMLs [bot]#1859
models-bot[bot] wants to merge 1 commit into
mainfrom
bot/update-aws-bedrock-20260724-204929

Conversation

@models-bot

@models-bot models-bot Bot commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Auto-generated by poc-agent for provider aws-bedrock.


Note

Low Risk
Metadata-only provider catalog changes with no application logic; impact is limited to routing, limits, and parameter surfacing for these models.

Overview
Auto-generated aws-bedrock catalog updates align three model definitions with current provider docs.

stability.stable-image-core-v1:1 drops the limits block (max_input_tokens / max_tokens) and removes image from input modalities so the entry reflects text-only prompts for text-to-image generation.

us.anthropic.claude-haiku-4-5-20251001-v1:0 raises tool_use_system_prompt_tokens from 346 to 496, updating the reserved token count used when tool calling is enabled.

us.writer.palmyra-x4-v1:0 adds an optional numeric seed parameter (defaultValue: null) for reproducible sampling.

Reviewed by Cursor Bugbot for commit 813a282. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

Copy link
Copy Markdown
Contributor

/test-models

@harshiv-26

Copy link
Copy Markdown
Collaborator

Gateway test results

  • Total: 21
  • Passed: 0
  • Failed: 18
  • Validation failed: 0
  • Errored: 0
  • Skipped: 3
  • Success rate: 0.0%
Provider Model Scenarios
aws-bedrock stability.stable-image-core-v1:1 skipped: skip-check
aws-bedrock us.anthropic.claude-haiku-4-5-20251001-v1:0 failure: params:stream:boto3, tool-call:boto3, params:boto3, parallel-tool-call:boto3, parallel-tool-call:stream:boto3, tool-call:stream:boto3, parallel-tool-call:stream, tool-call, params:stream, tool-call:stream, parallel-tool-call, params
aws-bedrock us.writer.palmyra-x4-v1:0 failure: params:boto3, params:stream:boto3, tool-call:boto3, params, params:stream, tool-call

skipped: tool-call:stream, tool-call:stream:boto3
Failures (18)

aws-bedrock/us.writer.palmyra-x4-v1:0 — params:boto3 (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpkqu0xlj6/snippet.py", line 30, in <module>
    response = client.converse(
               ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 606, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 1094, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the Converse operation: The security token included in the request is invalid.
Code snippet
import boto3
from botocore.config import Config

_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_model = "test-v2-aws-bedrock/us.writer.palmyra-x4-v1-0"

client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
    endpoint_url=_endpoint,
    aws_access_key_id="dummy",
    aws_secret_access_key="dummy",
    config=Config(inject_host_prefix=False),
)

def _add_auth_header(request, **kwargs):
    request.headers["x-tfy-api-key"] = _api_key

client.meta.events.register("before-sign.bedrock-runtime.*", _add_auth_header)

messages = [
    {"role": "user", "content": [{"text": "Hi"}]},
    {"role": "assistant", "content": [{"text": "Hi, how can I help you"}]},
    {"role": "user", "content": [{"text": "What is the capital of France?"}]},
]

system = [{"text": "You are a helpful assistant."}]

response = client.converse(
    modelId=_model,
    system=system,
    messages=messages,
    inferenceConfig={
        "maxTokens": 16,
        "temperature": 1,
    },
)

_content = response["output"]["message"]["content"]
for _block in _content:
    if "text" in _block:
        print(_block["text"])

aws-bedrock/us.writer.palmyra-x4-v1:0 — params:stream:boto3 (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmps17ttlac/snippet.py", line 30, in <module>
    response = client.converse_stream(
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 606, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 1094, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the ConverseStream operation: The security token included in the request is invalid.
Code snippet
import boto3
from botocore.config import Config

_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_model = "test-v2-aws-bedrock/us.writer.palmyra-x4-v1-0"

client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
    endpoint_url=_endpoint,
    aws_access_key_id="dummy",
    aws_secret_access_key="dummy",
    config=Config(inject_host_prefix=False),
)

def _add_auth_header(request, **kwargs):
    request.headers["x-tfy-api-key"] = _api_key

client.meta.events.register("before-sign.bedrock-runtime.*", _add_auth_header)

messages = [
    {"role": "user", "content": [{"text": "Hi"}]},
    {"role": "assistant", "content": [{"text": "Hi, how can I help you"}]},
    {"role": "user", "content": [{"text": "What is the capital of France?"}]},
]

system = [{"text": "You are a helpful assistant."}]

response = client.converse_stream(
    modelId=_model,
    system=system,
    messages=messages,
    inferenceConfig={
        "maxTokens": 16,
        "temperature": 1,
    },
)

_events = []
for _event in response["stream"]:
    _events.append(_event)
    if "contentBlockDelta" in _event:
        _delta = _event["contentBlockDelta"].get("delta", {})
        if "text" in _delta:
            print(_delta["text"], end="", flush=True)

aws-bedrock/us.writer.palmyra-x4-v1:0 — tool-call:boto3 (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmp1g3yyjqe/snippet.py", line 54, in <module>
    response = client.converse(
               ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 606, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 1094, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the Converse operation: The security token included in the request is invalid.
Code snippet
import boto3
from botocore.config import Config

_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_model = "test-v2-aws-bedrock/us.writer.palmyra-x4-v1-0"

client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
    endpoint_url=_endpoint,
    aws_access_key_id="dummy",
    aws_secret_access_key="dummy",
    config=Config(inject_host_prefix=False),
)

def _add_auth_header(request, **kwargs):
    request.headers["x-tfy-api-key"] = _api_key

client.meta.events.register("before-sign.bedrock-runtime.*", _add_auth_header)

tool_config = {
    "tools": [
        {
            "toolSpec": {
                "name": "get_weather",
                "description": "Get the current weather for a location.",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "location": {
                                "type": "string",
                                "description": "The city name, e.g. London",
                            },
                        },
                        "required": ["location"],
                    }
                },
            }
        }
    ],
    "toolChoice": {"auto": {}},
}

messages = [
    {"role": "user", "content": [{"text": "Hi"}]},
    {"role": "assistant", "content": [{"text": "Hi, how can I help you"}]},
    {"role": "user", "content": [{"text": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."}]},
]

system = [{"text": "You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available."}]

response = client.converse(
    modelId=_model,
    system=system,
    messages=messages,
    toolConfig=tool_config,
)

_content = response["output"]["message"]["content"]
_tool_uses = [block for block in _content if "toolUse" in block]
if _tool_uses:
    for _tu in _tool_uses:
        print(f"Tool: {_tu['toolUse']['name']}")
        print(f"Input: {_tu['toolUse']['input']}")
else:
    _text_blocks = [block["text"] for block in _content if "text" in block]
    print("\n".join(_text_blocks))
_content = response["output"]["message"]["content"]
_tool_uses = [block for block in _content if "toolUse" in block]

if not _tool_uses:
    raise Exception("VALIDATION FAILED: tool-call - no tool uses in Bedrock response")
print("VALIDATION: tool-call SUCCESS")

aws-bedrock/us.writer.palmyra-x4-v1:0 — params (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpnl1putv2/snippet.py", line 5, in <module>
    response = client.chat.completions.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1147, in create
    return self._post(
           ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
    raise self._make_status_error_from_response(err.response) from None
openai.PermissionDeniedError: Error code: 403 - {'status': 'failure', 'message': 'aws-bedrock error: The security token included in the request is invalid.', 'error': {'message': 'aws-bedrock error: The security token included in the request is invalid.', 'type': 'APIError', 'code': '403'}, 'error_origin_level': 'api_error', 'provider': 'aws-bedrock'}
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

response = client.chat.completions.create(
    model="test-v2-aws-bedrock/us.writer.palmyra-x4-v1-0",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hi"},
        {"role": "assistant", "content": "Hi, how can I help you"},
        {"role": "user", "content": "What is the capital of France?"},
    ],
    max_tokens=16,
    temperature=1,
    stream=False,
)

print(response.choices[0].message.content)

aws-bedrock/us.writer.palmyra-x4-v1:0 — params:stream (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpmy8srxuu/snippet.py", line 5, in <module>
    response = client.chat.completions.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1147, in create
    return self._post(
           ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
    raise self._make_status_error_from_response(err.response) from None
openai.PermissionDeniedError: Error code: 403 - {'status': 'failure', 'message': 'aws-bedrock error: The security token included in the request is invalid.', 'error': {'message': 'aws-bedrock error: The security token included in the request is invalid.', 'type': 'APIError', 'code': '403'}, 'error_origin_level': 'api_error', 'provider': 'aws-bedrock'}
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

response = client.chat.completions.create(
    model="test-v2-aws-bedrock/us.writer.palmyra-x4-v1-0",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hi"},
        {"role": "assistant", "content": "Hi, how can I help you"},
        {"role": "user", "content": "What is the capital of France?"},
    ],
    max_tokens=16,
    temperature=1,
    stream=True,
)

for chunk in response:
    if chunk.choices and len(chunk.choices) > 0:
        delta = chunk.choices[0].delta
        if delta.content is not None:
            print(delta.content, end="", flush=True)

aws-bedrock/us.writer.palmyra-x4-v1:0 — tool-call (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpi9uwsle1/snippet.py", line 27, in <module>
    response = client.chat.completions.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1147, in create
    return self._post(
           ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
    raise self._make_status_error_from_response(err.response) from None
openai.PermissionDeniedError: Error code: 403 - {'status': 'failure', 'message': 'aws-bedrock error: The security token included in the request is invalid.', 'error': {'message': 'aws-bedrock error: The security token included in the request is invalid.', 'type': 'APIError', 'code': '403'}, 'error_origin_level': 'api_error', 'provider': 'aws-bedrock'}
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather for a location.",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city name, e.g. London",
                    },
                },
                "required": ["location"],
                "additionalProperties": False,
            },
            "strict": True,
        },
    },
]

response = client.chat.completions.create(
    model="test-v2-aws-bedrock/us.writer.palmyra-x4-v1-0",
    messages=[
        {"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available."},
        {"role": "user", "content": "Hi"},
        {"role": "assistant", "content": "Hi, how can I help you"},
        {"role": "user", "content": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."},
    ],
    tools=tools,
    tool_choice="auto",
    stream=False,
)
_message = response.choices[0].message
if _message.tool_calls:
    for _tc in _message.tool_calls:
        print(f"Function: {_tc.function.name}")
        print(f"Arguments: {_tc.function.arguments}")
else:
    print(_message.content)

if not _message.tool_calls or len(_message.tool_calls) == 0:
    raise Exception("VALIDATION FAILED: tool-call - no tool calls in response")
print("VALIDATION: tool-call SUCCESS")

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — params:stream:boto3 (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpkyzesks2/snippet.py", line 30, in <module>
    response = client.converse_stream(
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 606, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 1094, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the ConverseStream operation: The security token included in the request is invalid.
Code snippet
import boto3
from botocore.config import Config

_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_model = "test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0"

client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
    endpoint_url=_endpoint,
    aws_access_key_id="dummy",
    aws_secret_access_key="dummy",
    config=Config(inject_host_prefix=False),
)

def _add_auth_header(request, **kwargs):
    request.headers["x-tfy-api-key"] = _api_key

client.meta.events.register("before-sign.bedrock-runtime.*", _add_auth_header)

messages = [
    {"role": "user", "content": [{"text": "Hi"}]},
    {"role": "assistant", "content": [{"text": "Hi, how can I help you"}]},
    {"role": "user", "content": [{"text": "What is the capital of France?"}]},
]

system = [{"text": "You are a helpful assistant."}]

response = client.converse_stream(
    modelId=_model,
    system=system,
    messages=messages,
    inferenceConfig={
        "maxTokens": 512,
        "temperature": 0.5,
    },
)

_events = []
for _event in response["stream"]:
    _events.append(_event)
    if "contentBlockDelta" in _event:
        _delta = _event["contentBlockDelta"].get("delta", {})
        if "text" in _delta:
            print(_delta["text"], end="", flush=True)

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — tool-call:boto3 (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpcsda8gk0/snippet.py", line 54, in <module>
    response = client.converse(
               ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 606, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 1094, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the Converse operation: The security token included in the request is invalid.
Code snippet
import boto3
from botocore.config import Config

_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_model = "test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0"

client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
    endpoint_url=_endpoint,
    aws_access_key_id="dummy",
    aws_secret_access_key="dummy",
    config=Config(inject_host_prefix=False),
)

def _add_auth_header(request, **kwargs):
    request.headers["x-tfy-api-key"] = _api_key

client.meta.events.register("before-sign.bedrock-runtime.*", _add_auth_header)

tool_config = {
    "tools": [
        {
            "toolSpec": {
                "name": "get_weather",
                "description": "Get the current weather for a location.",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "location": {
                                "type": "string",
                                "description": "The city name, e.g. London",
                            },
                        },
                        "required": ["location"],
                    }
                },
            }
        }
    ],
    "toolChoice": {"auto": {}},
}

messages = [
    {"role": "user", "content": [{"text": "Hi"}]},
    {"role": "assistant", "content": [{"text": "Hi, how can I help you"}]},
    {"role": "user", "content": [{"text": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."}]},
]

system = [{"text": "You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available."}]

response = client.converse(
    modelId=_model,
    system=system,
    messages=messages,
    toolConfig=tool_config,
)

_content = response["output"]["message"]["content"]
_tool_uses = [block for block in _content if "toolUse" in block]
if _tool_uses:
    for _tu in _tool_uses:
        print(f"Tool: {_tu['toolUse']['name']}")
        print(f"Input: {_tu['toolUse']['input']}")
else:
    _text_blocks = [block["text"] for block in _content if "text" in block]
    print("\n".join(_text_blocks))
_content = response["output"]["message"]["content"]
_tool_uses = [block for block in _content if "toolUse" in block]

if not _tool_uses:
    raise Exception("VALIDATION FAILED: tool-call - no tool uses in Bedrock response")
print("VALIDATION: tool-call SUCCESS")

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — params:boto3 (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmp0wudr58s/snippet.py", line 30, in <module>
    response = client.converse(
               ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 606, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 1094, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the Converse operation: The security token included in the request is invalid.
Code snippet
import boto3
from botocore.config import Config

_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_model = "test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0"

client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
    endpoint_url=_endpoint,
    aws_access_key_id="dummy",
    aws_secret_access_key="dummy",
    config=Config(inject_host_prefix=False),
)

def _add_auth_header(request, **kwargs):
    request.headers["x-tfy-api-key"] = _api_key

client.meta.events.register("before-sign.bedrock-runtime.*", _add_auth_header)

messages = [
    {"role": "user", "content": [{"text": "Hi"}]},
    {"role": "assistant", "content": [{"text": "Hi, how can I help you"}]},
    {"role": "user", "content": [{"text": "What is the capital of France?"}]},
]

system = [{"text": "You are a helpful assistant."}]

response = client.converse(
    modelId=_model,
    system=system,
    messages=messages,
    inferenceConfig={
        "maxTokens": 512,
        "temperature": 0.5,
    },
)

_content = response["output"]["message"]["content"]
for _block in _content:
    if "text" in _block:
        print(_block["text"])

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — parallel-tool-call:boto3 (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmp5puybdwg/snippet.py", line 54, in <module>
    response = client.converse(
               ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 606, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 1094, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the Converse operation: The security token included in the request is invalid.
Code snippet
import boto3
from botocore.config import Config

_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_model = "test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0"

client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
    endpoint_url=_endpoint,
    aws_access_key_id="dummy",
    aws_secret_access_key="dummy",
    config=Config(inject_host_prefix=False),
)

def _add_auth_header(request, **kwargs):
    request.headers["x-tfy-api-key"] = _api_key

client.meta.events.register("before-sign.bedrock-runtime.*", _add_auth_header)

tool_config = {
    "tools": [
        {
            "toolSpec": {
                "name": "get_weather",
                "description": "Get the current weather for a location.",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "location": {
                                "type": "string",
                                "description": "The city name, e.g. London",
                            },
                        },
                        "required": ["location"],
                    }
                },
            }
        }
    ],
    "toolChoice": {"auto": {}},
}

messages = [
    {"role": "user", "content": [{"text": "Hi"}]},
    {"role": "assistant", "content": [{"text": "Hi, how can I help you"}]},
    {"role": "user", "content": [{"text": "Use the get_weather tool to check the weather in London and Paris. You MUST make both tool calls strictly in parallel, not sequentially."}]},
]

system = [{"text": "You are a helpful assistant with access to tools. You MUST strictly call multiple tools in parallel whenever possible. Never call them sequentially."}]

response = client.converse(
    modelId=_model,
    system=system,
    messages=messages,
    toolConfig=tool_config,
)

_content = response["output"]["message"]["content"]
_tool_uses = [block for block in _content if "toolUse" in block]
if _tool_uses:
    for _tu in _tool_uses:
        print(f"Tool: {_tu['toolUse']['name']}")
        print(f"Input: {_tu['toolUse']['input']}")
else:
    _text_blocks = [block["text"] for block in _content if "text" in block]
    print("\n".join(_text_blocks))
_content = response["output"]["message"]["content"]
_tool_uses = [block for block in _content if "toolUse" in block]

if _tool_uses:
    print(f"Number of parallel tool calls: {len(_tool_uses)}")

if not _tool_uses or len(_tool_uses) < 1:
    raise Exception(
        f"VALIDATION FAILED: parallel-tool-call - expected at least 1 tool call, "
        f"got {len(_tool_uses) if _tool_uses else 0}"
    )
print("VALIDATION: parallel-tool-call SUCCESS")

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — parallel-tool-call:stream:boto3 (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpwp901boo/snippet.py", line 54, in <module>
    response = client.converse_stream(
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 606, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 1094, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the ConverseStream operation: The security token included in the request is invalid.
Code snippet
import boto3
from botocore.config import Config

_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_model = "test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0"

client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
    endpoint_url=_endpoint,
    aws_access_key_id="dummy",
    aws_secret_access_key="dummy",
    config=Config(inject_host_prefix=False),
)

def _add_auth_header(request, **kwargs):
    request.headers["x-tfy-api-key"] = _api_key

client.meta.events.register("before-sign.bedrock-runtime.*", _add_auth_header)

tool_config = {
    "tools": [
        {
            "toolSpec": {
                "name": "get_weather",
                "description": "Get the current weather for a location.",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "location": {
                                "type": "string",
                                "description": "The city name, e.g. London",
                            },
                        },
                        "required": ["location"],
                    }
                },
            }
        }
    ],
    "toolChoice": {"auto": {}},
}

messages = [
    {"role": "user", "content": [{"text": "Hi"}]},
    {"role": "assistant", "content": [{"text": "Hi, how can I help you"}]},
    {"role": "user", "content": [{"text": "Use the get_weather tool to check the weather in London and Paris. You MUST make both tool calls strictly in parallel, not sequentially."}]},
]

system = [{"text": "You are a helpful assistant with access to tools. You MUST strictly call multiple tools in parallel whenever possible. Never call them sequentially."}]

response = client.converse_stream(
    modelId=_model,
    system=system,
    messages=messages,
    toolConfig=tool_config,
)

_events = []
for _event in response["stream"]:
    _events.append(_event)
    if "contentBlockStart" in _event:
        _start = _event["contentBlockStart"].get("start", {})
        if "toolUse" in _start:
            print(f"Tool: {_start['toolUse'].get('name', '')}", flush=True)
    if "contentBlockDelta" in _event:
        _delta = _event["contentBlockDelta"].get("delta", {})
        if "toolUse" in _delta:
            print(_delta["toolUse"].get("input", ""), end="", flush=True)
        if "text" in _delta:
            print(_delta["text"], end="", flush=True)
_tool_use_indices = set()
_current_index = -1
for _event in _events:
    if "contentBlockStart" in _event:
        _start = _event["contentBlockStart"]
        _current_index = _start.get("contentBlockIndex", _current_index + 1)
        if "toolUse" in _start.get("start", {}):
            _tool_use_indices.add(_current_index)

if len(_tool_use_indices) < 1:
    raise Exception(
        f"VALIDATION FAILED: parallel-tool-call stream - expected at least 1 tool call, "
        f"got {len(_tool_use_indices)}"
    )
print(f"\nNumber of parallel tool calls: {len(_tool_use_indices)}")
print("VALIDATION: parallel-tool-call stream SUCCESS")

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — tool-call:stream:boto3 (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmp4g2rfndl/snippet.py", line 54, in <module>
    response = client.converse_stream(
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 606, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/context.py", line 123, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/botocore/client.py", line 1094, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the ConverseStream operation: The security token included in the request is invalid.
Code snippet
import boto3
from botocore.config import Config

_endpoint = "https://internal.devtest.truefoundry.tech/api/llm"
_api_key = "***"
_model = "test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0"

client = boto3.client(
    "bedrock-runtime",
    region_name="us-east-1",
    endpoint_url=_endpoint,
    aws_access_key_id="dummy",
    aws_secret_access_key="dummy",
    config=Config(inject_host_prefix=False),
)

def _add_auth_header(request, **kwargs):
    request.headers["x-tfy-api-key"] = _api_key

client.meta.events.register("before-sign.bedrock-runtime.*", _add_auth_header)

tool_config = {
    "tools": [
        {
            "toolSpec": {
                "name": "get_weather",
                "description": "Get the current weather for a location.",
                "inputSchema": {
                    "json": {
                        "type": "object",
                        "properties": {
                            "location": {
                                "type": "string",
                                "description": "The city name, e.g. London",
                            },
                        },
                        "required": ["location"],
                    }
                },
            }
        }
    ],
    "toolChoice": {"auto": {}},
}

messages = [
    {"role": "user", "content": [{"text": "Hi"}]},
    {"role": "assistant", "content": [{"text": "Hi, how can I help you"}]},
    {"role": "user", "content": [{"text": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."}]},
]

system = [{"text": "You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available."}]

response = client.converse_stream(
    modelId=_model,
    system=system,
    messages=messages,
    toolConfig=tool_config,
)

_events = []
for _event in response["stream"]:
    _events.append(_event)
    if "contentBlockStart" in _event:
        _start = _event["contentBlockStart"].get("start", {})
        if "toolUse" in _start:
            print(f"Tool: {_start['toolUse'].get('name', '')}", flush=True)
    if "contentBlockDelta" in _event:
        _delta = _event["contentBlockDelta"].get("delta", {})
        if "toolUse" in _delta:
            print(_delta["toolUse"].get("input", ""), end="", flush=True)
        if "text" in _delta:
            print(_delta["text"], end="", flush=True)
_tool_use_detected = False
for _event in _events:
    if "contentBlockStart" in _event:
        _start = _event["contentBlockStart"].get("start", {})
        if "toolUse" in _start:
            _tool_use_detected = True
    if "contentBlockDelta" in _event:
        _delta = _event["contentBlockDelta"].get("delta", {})
        if "toolUse" in _delta:
            _tool_use_detected = True

if not _tool_use_detected:
    raise Exception("VALIDATION FAILED: tool-call stream - no tool uses in Bedrock stream")
print("\nVALIDATION: tool-call stream SUCCESS")

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — parallel-tool-call:stream (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpsltl7wbw/snippet.py", line 27, in <module>
    response = client.chat.completions.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1147, in create
    return self._post(
           ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
    raise self._make_status_error_from_response(err.response) from None
openai.PermissionDeniedError: Error code: 403 - {'status': 'failure', 'message': 'aws-bedrock error: The security token included in the request is invalid.', 'error': {'message': 'aws-bedrock error: The security token included in the request is invalid.', 'type': 'APIError', 'code': '403'}, 'error_origin_level': 'api_error', 'provider': 'aws-bedrock'}
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather for a location.",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city name, e.g. London",
                    },
                },
                "required": ["location"],
                "additionalProperties": False,
            },
            "strict": True,
        },
    },
]

response = client.chat.completions.create(
    model="test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0",
    messages=[
        {"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly call multiple tools in parallel whenever possible. Never call them sequentially."},
        {"role": "user", "content": "Hi"},
        {"role": "assistant", "content": "Hi, how can I help you"},
        {"role": "user", "content": "Use the get_weather tool to check the weather in London and Paris. You MUST make both tool calls strictly in parallel, not sequentially."},
    ],
    tools=tools,
    tool_choice="auto",
    parallel_tool_calls=True,
    stream=True,
)
_tool_call_indices = set()
for chunk in response:
    if chunk.choices and len(chunk.choices) > 0:
        delta = chunk.choices[0].delta
        if delta.content is not None:
            print(delta.content, end="", flush=True)
        if delta.tool_calls:
            for _tc in delta.tool_calls:
                _tool_call_indices.add(_tc.index)
                if _tc.function:
                    print(_tc.function.arguments or "", end="", flush=True)

if len(_tool_call_indices) < 1:
    raise Exception(
        f"VALIDATION FAILED: parallel-tool-call stream - expected at least 1 tool call, "
        f"got {len(_tool_call_indices)}"
    )
print(f"\nNumber of parallel tool calls: {len(_tool_call_indices)}")
print("VALIDATION: parallel-tool-call stream SUCCESS")

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — tool-call (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmp482w1rdk/snippet.py", line 27, in <module>
    response = client.chat.completions.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1147, in create
    return self._post(
           ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
    raise self._make_status_error_from_response(err.response) from None
openai.PermissionDeniedError: Error code: 403 - {'status': 'failure', 'message': 'aws-bedrock error: The security token included in the request is invalid.', 'error': {'message': 'aws-bedrock error: The security token included in the request is invalid.', 'type': 'APIError', 'code': '403'}, 'error_origin_level': 'api_error', 'provider': 'aws-bedrock'}
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather for a location.",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city name, e.g. London",
                    },
                },
                "required": ["location"],
                "additionalProperties": False,
            },
            "strict": True,
        },
    },
]

response = client.chat.completions.create(
    model="test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0",
    messages=[
        {"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available."},
        {"role": "user", "content": "Hi"},
        {"role": "assistant", "content": "Hi, how can I help you"},
        {"role": "user", "content": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."},
    ],
    tools=tools,
    tool_choice="auto",
    stream=False,
)
_message = response.choices[0].message
if _message.tool_calls:
    for _tc in _message.tool_calls:
        print(f"Function: {_tc.function.name}")
        print(f"Arguments: {_tc.function.arguments}")
else:
    print(_message.content)

if not _message.tool_calls or len(_message.tool_calls) == 0:
    raise Exception("VALIDATION FAILED: tool-call - no tool calls in response")
print("VALIDATION: tool-call SUCCESS")

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — params:stream (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpltd_7y4k/snippet.py", line 5, in <module>
    response = client.chat.completions.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1147, in create
    return self._post(
           ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
    raise self._make_status_error_from_response(err.response) from None
openai.PermissionDeniedError: Error code: 403 - {'status': 'failure', 'message': 'aws-bedrock error: The security token included in the request is invalid.', 'error': {'message': 'aws-bedrock error: The security token included in the request is invalid.', 'type': 'APIError', 'code': '403'}, 'error_origin_level': 'api_error', 'provider': 'aws-bedrock'}
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

response = client.chat.completions.create(
    model="test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hi"},
        {"role": "assistant", "content": "Hi, how can I help you"},
        {"role": "user", "content": "What is the capital of France?"},
    ],
    max_tokens=512,
    temperature=0.5,
    stream=True,
)

for chunk in response:
    if chunk.choices and len(chunk.choices) > 0:
        delta = chunk.choices[0].delta
        if delta.content is not None:
            print(delta.content, end="", flush=True)

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — tool-call:stream (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpydgu51d8/snippet.py", line 27, in <module>
    response = client.chat.completions.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1147, in create
    return self._post(
           ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
    raise self._make_status_error_from_response(err.response) from None
openai.PermissionDeniedError: Error code: 403 - {'status': 'failure', 'message': 'aws-bedrock error: The security token included in the request is invalid.', 'error': {'message': 'aws-bedrock error: The security token included in the request is invalid.', 'type': 'APIError', 'code': '403'}, 'error_origin_level': 'api_error', 'provider': 'aws-bedrock'}
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather for a location.",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city name, e.g. London",
                    },
                },
                "required": ["location"],
                "additionalProperties": False,
            },
            "strict": True,
        },
    },
]

response = client.chat.completions.create(
    model="test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0",
    messages=[
        {"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly use the provided tools to answer. Never respond with plain text when a tool is available."},
        {"role": "user", "content": "Hi"},
        {"role": "assistant", "content": "Hi, how can I help you"},
        {"role": "user", "content": "Use the get_weather tool to check the weather in London. You must call the tool, do not respond with plain text."},
    ],
    tools=tools,
    tool_choice="auto",
    stream=True,
)
_tool_calls_made = False
for chunk in response:
    if chunk.choices and len(chunk.choices) > 0:
        delta = chunk.choices[0].delta
        if delta.content is not None:
            print(delta.content, end="", flush=True)
        if delta.tool_calls:
            _tool_calls_made = True
            for _tc in delta.tool_calls:
                if _tc.function:
                    print(_tc.function.arguments or "", end="", flush=True)

if not _tool_calls_made:
    raise Exception("VALIDATION FAILED: tool-call stream - no tool calls received")
print("\nVALIDATION: tool-call stream SUCCESS")

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — parallel-tool-call (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmpsy6m883v/snippet.py", line 27, in <module>
    response = client.chat.completions.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1147, in create
    return self._post(
           ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
    raise self._make_status_error_from_response(err.response) from None
openai.PermissionDeniedError: Error code: 403 - {'status': 'failure', 'message': 'aws-bedrock error: The security token included in the request is invalid.', 'error': {'message': 'aws-bedrock error: The security token included in the request is invalid.', 'type': 'APIError', 'code': '403'}, 'error_origin_level': 'api_error', 'provider': 'aws-bedrock'}
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather for a location.",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city name, e.g. London",
                    },
                },
                "required": ["location"],
                "additionalProperties": False,
            },
            "strict": True,
        },
    },
]

response = client.chat.completions.create(
    model="test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0",
    messages=[
        {"role": "system", "content": "You are a helpful assistant with access to tools. You MUST strictly call multiple tools in parallel whenever possible. Never call them sequentially."},
        {"role": "user", "content": "Hi"},
        {"role": "assistant", "content": "Hi, how can I help you"},
        {"role": "user", "content": "Use the get_weather tool to check the weather in London and Paris. You MUST make both tool calls strictly in parallel, not sequentially."},
    ],
    tools=tools,
    tool_choice="auto",
    parallel_tool_calls=True,
    stream=False,
)
_message = response.choices[0].message
if _message.tool_calls:
    print(f"Number of parallel tool calls: {len(_message.tool_calls)}")
    for _tc in _message.tool_calls:
        print(f"Function: {_tc.function.name}")
        print(f"Arguments: {_tc.function.arguments}")
else:
    print(_message.content)

if not _message.tool_calls or len(_message.tool_calls) < 1:
    raise Exception(
        f"VALIDATION FAILED: parallel-tool-call - expected at least 1 tool call, "
        f"got {len(_message.tool_calls) if _message.tool_calls else 0}"
    )
print("VALIDATION: parallel-tool-call SUCCESS")

aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0 — params (failure)

Error
Traceback (most recent call last):
  File "/tmp/tmplcuid1xw/snippet.py", line 5, in <module>
    response = client.chat.completions.create(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_utils/_utils.py", line 286, in wrapper
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/resources/chat/completions/completions.py", line 1147, in create
    return self._post(
           ^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1259, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/openai/_base_client.py", line 1047, in request
    raise self._make_status_error_from_response(err.response) from None
openai.PermissionDeniedError: Error code: 403 - {'status': 'failure', 'message': 'aws-bedrock error: The security token included in the request is invalid.', 'error': {'message': 'aws-bedrock error: The security token included in the request is invalid.', 'type': 'APIError', 'code': '403'}, 'error_origin_level': 'api_error', 'provider': 'aws-bedrock'}
Code snippet
from openai import OpenAI

client = OpenAI(api_key="***", base_url="https://internal.devtest.truefoundry.tech/api/llm")

response = client.chat.completions.create(
    model="test-v2-aws-bedrock/us.anthropic.claude-haiku-4-5-20251001-v1-0",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hi"},
        {"role": "assistant", "content": "Hi, how can I help you"},
        {"role": "user", "content": "What is the capital of France?"},
    ],
    max_tokens=512,
    temperature=0.5,
    stream=False,
)

print(response.choices[0].message.content)
Skipped (3)

aws-bedrock/stability.stable-image-core-v1:1 — skip-check (skipped)

Skip reason
unsupported mode 'image'

aws-bedrock/us.writer.palmyra-x4-v1:0 — tool-call:stream (skipped)

Skip reason
Streaming tool calls are not supported by this model

aws-bedrock/us.writer.palmyra-x4-v1:0 — tool-call:stream:boto3 (skipped)

Skip reason
Streaming tool calls are not supported by this model

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant