04 Responses Api

Structured output via the OpenAI-compatible Responses API on Bedrock.

Works the same way on both Bedrock endpoints – just swap BASE_URL: bedrock-runtime.{region}.amazonaws.com/openai/v1 (needs a cross-region profile model id, e.g. “us.openai…”) bedrock-mantle.{region}.api.aws/openai/v1 (plain model id, e.g. “openai…”)

Auth is a short-lived bearer token derived from your AWS credentials – no SigV4 request signing needed.

"""Structured output via the OpenAI-compatible Responses API on Bedrock.

Works the same way on both Bedrock endpoints -- just swap BASE_URL:
  bedrock-runtime.{region}.amazonaws.com/openai/v1   (needs a cross-region
                                             profile model id, e.g. "us.openai...")
  bedrock-mantle.{region}.api.aws/openai/v1          (plain model id, e.g. "openai...")

Auth is a short-lived bearer token derived from your AWS credentials --
no SigV4 request signing needed.
"""
from aws_bedrock_token_generator import provide_token
from openai import OpenAI

REGION = "us-east-1"
BASE_URL = f"https://bedrock-mantle.{REGION}.api.aws/openai/v1"
MODEL_ID = "openai.gpt-5.6-sol"
# For bedrock-runtime instead, use:
# BASE_URL = f"https://bedrock-runtime.{REGION}.amazonaws.com/openai/v1"
# MODEL_ID = "us.openai.gpt-5.6-sol"

PROMPT = "Extract the person from: John Smith is 42 years old."
SCHEMA = {
    "type": "object",
    "properties": {"name": {"type": "string"}, "age": {"type": "integer"}},
    "required": ["name", "age"],
    "additionalProperties": False,
}

token = provide_token(REGION)
client = OpenAI(base_url=BASE_URL, api_key=token)

response = client.responses.create(
    model=MODEL_ID,
    input=PROMPT,
    text={"format": {"type": "json_schema", "name": "person", "schema": SCHEMA, "strict": True}},
)

print(response.output_text)