Amazon Bedrock Foundation Models

April 14, 2025 ยท View on GitHub

The models.ts file provides a comprehensive set of foundation models available in Amazon Bedrock, along with utilities for working with these models in CDK applications.

Table of Contents

Overview

The BedrockFoundationModel class provides a CDK-friendly way to work with Amazon Bedrock foundation models. It implements the IInvokable interface, which allows you to grant permissions to invoke these models.c

Model Properties

Each model has the following properties:

PropertyTypeDescription
modelIdstringThe ID of the model (e.g., 'anthropic.claude-3-sonnet-20240229-v1:0')
modelArnstringThe ARN of the model
invokableArnstringThe ARN used for invoking the model
supportsAgentsbooleanWhether the model can be used with Bedrock Agents
optimizedForAgentsbooleanWhether the model is optimized for use with Bedrock Agents
legacybooleanWhether the model is a legacy version (has a newer version available)
supportsCrossRegionbooleanWhether the model can be used with cross-region inference profiles
vectorDimensionsnumberFor embedding models, the dimension of the vectors
supportsKnowledgeBasebooleanWhether the model can be used with Knowledge Bases
supportedVectorTypeVectorType[]For embedding models, the supported vector types

When creating a model, you can specify these properties in the BedrockFoundationModelProps interface:

TypeScript

const model = new BedrockFoundationModel('model-id', {
  supportsAgents: true,
  optimizedForAgents: true,
  legacy: false,
  supportsKnowledgeBase: false,
  supportsCrossRegion: true,
  vectorDimensions: 1536,
  supportedVectorType: [VectorType.FLOATING_POINT],
});

Python

model = BedrockFoundationModel('model-id', 
    supports_agents=True,
    optimized_for_agents=True,
    legacy=False,
    supports_knowledge_base=False,
    supports_cross_region=True,
    vector_dimensions=1536,
    supported_vector_type=[VectorType.FLOATING_POINT],
)

Using Models

Creating a Model

You can create a model using the static properties or by instantiating a new BedrockFoundationModel:

TypeScript

// Using a predefined model
const claudeModel = BedrockFoundationModel.ANTHROPIC_CLAUDE_3_SONNET_V1_0;

// Creating a custom model
const customModel = new BedrockFoundationModel('custom.model-id', {
  supportsAgents: true,
  supportsKnowledgeBase: true,
});

Python

# Using a predefined model
claude_model = BedrockFoundationModel.ANTHROPIC_CLAUDE_3_SONNET_V1_0

# Creating a custom model
custom_model = BedrockFoundationModel('custom.model-id', 
    supports_agents=True,
    supports_knowledge_base=True,
)

Importing from CDK Models

You can also import models from the AWS CDK's FoundationModel or FoundationModelIdentifier:

TypeScript

import { FoundationModel } from 'aws-cdk-lib/aws-bedrock';

// Import from FoundationModel
const cdkModel = FoundationModel.CLAUDE_3_SONNET;
const bedrockModel = BedrockFoundationModel.fromCdkFoundationModel(cdkModel, {
  supportsAgents: true,
});

// Import from FoundationModelIdentifier
const modelId = FoundationModelIdentifier.CLAUDE_3_SONNET;
const bedrockModelFromId = BedrockFoundationModel.fromCdkFoundationModelId(modelId, {
  supportsAgents: true,
});

Python

from aws_cdk import CfnOutput
from aws_cdk.aws_bedrock import FoundationModel, BedrockFoundationModel, FoundationModelIdentifier

# Import from FoundationModel
cdk_model = FoundationModel.CLAUDE_3_SONNET
bedrock_model = BedrockFoundationModel.fromCdkFoundationModel(cdk_model, 
    supports_agents=True,
)

# Import from FoundationModelIdentifier
model_id = FoundationModelIdentifier.CLAUDE_3_SONNET
bedrock_model_from_id = BedrockFoundationModel.fromCdkFoundationModelId(model_id, 
    supports_agents=True,
)

Granting Permissions

You can grant permissions to invoke a model:

TypeScript

// Grant permissions to invoke the model in the current region
model.grantInvoke(role);

// Grant permissions to invoke the model in all regions
model.grantInvokeAllRegions(role);

Python

# Grant permissions to invoke the model in the current region
model.grant_invoke(role);

# Grant permissions to invoke the model in all regions
model.grant_invoke_all_regions(role);

Model Capabilities

Agent Support

Models with supportsAgents: true can be used with Bedrock Agents. Some models are also optimized for agents with optimizedForAgents: true.

Knowledge Base Support

Models with supportsKnowledgeBase: true can be used with Bedrock Knowledge Bases, typically for embedding text into vectors.

Cross-Region Support

Models with supportsCrossRegion: true can be used with cross-region inference profiles.

Embedding Models

Embedding models have specific properties:

  • vectorDimensions: The dimension of the vectors (e.g., 1536, 1024, 512, 256)
  • supportedVectorType: The supported vector types (FLOATING_POINT, BINARY)

Example usage with a knowledge base:

TypeScript

import { VectorKnowledgeBase } from 'aws-cdk-lib/aws-bedrock';

const knowledgeBase = new VectorKnowledgeBase(this, 'MyKnowledgeBase', {
  embeddingsModel: BedrockFoundationModel.TITAN_EMBED_TEXT_V2_1024,
  vectorType: VectorType.FLOATING_POINT,
  // Other properties...
});

Python

from aws_cdk import CfnOutput
from aws_cdk.aws_bedrock import VectorKnowledgeBase

knowledge_base = VectorKnowledgeBase(self, 'MyKnowledgeBase', 
    embeddings_model=BedrockFoundationModel.TITAN_EMBED_TEXT_V2_1024,
    vector_type=VectorType.FLOATING_POINT,
    # Other properties...
)