"""Bedrock Claude provider — authenticates via boto3's default AWS credential chain. Named ``bedrock-claude`` rather than ``bedrock`` since Bedrock hosts multiple model families; this provider is specifically the Anthropic Claude models on Bedrock. Model IDs are cross-region inference profiles (e.g. ``us.anthropic.claude-sonnet-4-6``) rather than bare Bedrock model IDs — several current Claude models on Bedrock reject on-demand invocation and require an inference profile ARN/ID instead. """ import boto3 from environs import Env from langchain_aws import ChatBedrockConverse from langchain_core.language_models import BaseChatModel from skill_eval_runner.providers import Provider, register MAX_TOKENS = 16384 _env = Env() _env.read_env() def make_model(model_name: str) -> BaseChatModel: """Build a ``ChatBedrockConverse`` model, requiring resolvable AWS credentials.""" region = _env.str("AWS_REGION", _env.str("AWS_DEFAULT_REGION", "us-east-1")) if boto3.Session(region_name=region).get_credentials() is None: raise SystemExit( "No AWS credentials found for Bedrock.\n" " Run `awsume ` to assume your role and export " "AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY/AWS_SESSION_TOKEN." ) model: BaseChatModel = ChatBedrockConverse( model=model_name, region_name=region, max_tokens=MAX_TOKENS, ) return model register( Provider( name="bedrock-claude", default_model="us.anthropic.claude-sonnet-4-6", small_model="us.anthropic.claude-haiku-4-5-20251001-v1:0", large_model="us.anthropic.claude-opus-4-8", make_model=make_model, ) )