From 52ff5278135555406e945418dccd158b4492face Mon Sep 17 00:00:00 2001 From: Eleni Dimitropoulou <12170229+eldimi@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:55:25 +0300 Subject: [PATCH 1/2] Add a list of bedrock enabled foundation models to show only these on the UI --- lib/models/index.ts | 7 +++++++ lib/shared/layers/python-sdk/python/genai_core/models.py | 5 ++++- .../layers/python-sdk/python/genai_core/parameters.py | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/models/index.ts b/lib/models/index.ts index df98ad26c..4c9713b76 100644 --- a/lib/models/index.ts +++ b/lib/models/index.ts @@ -34,6 +34,7 @@ export class Models extends Construct { super(scope, id); const models: SageMakerModelEndpoint[] = []; + const bedrockEnabledModels: string[] = ['anthropic.claude-3-haiku-20240307-v1:0', 'anthropic.claude-3-sonnet-20240229-v1:0']; let hfTokenSecret: secretsmanager.Secret | undefined; if (props.config.llms.huggingfaceApiSecretArn) { @@ -378,6 +379,12 @@ export class Models extends Construct { ), }); + const bedrockEnabledModelsParameter = new ssm.StringParameter(this, "BedrockEnabledModelsParameter", { + stringValue: JSON.stringify( + bedrockEnabledModels + ), + }); + this.models = models; this.modelsParameter = modelsParameter; diff --git a/lib/shared/layers/python-sdk/python/genai_core/models.py b/lib/shared/layers/python-sdk/python/genai_core/models.py index e76fd056e..ef2d26f8a 100644 --- a/lib/shared/layers/python-sdk/python/genai_core/models.py +++ b/lib/shared/layers/python-sdk/python/genai_core/models.py @@ -81,11 +81,14 @@ def list_bedrock_models(): byInferenceType=genai_core.types.InferenceType.ON_DEMAND.value, byOutputModality=genai_core.types.Modality.TEXT.value, ) + + enabledModels = genai_core.parameters.get_enabled_bedrock_models() + bedrock_models = [ m for m in response.get("modelSummaries", []) if m.get("modelLifecycle", {}).get("status") - == genai_core.types.ModelStatus.ACTIVE.value + == genai_core.types.ModelStatus.ACTIVE.value and m.get("modelId") in enabledModels ] models = [ diff --git a/lib/shared/layers/python-sdk/python/genai_core/parameters.py b/lib/shared/layers/python-sdk/python/genai_core/parameters.py index b7eb65a4c..eef363c5d 100644 --- a/lib/shared/layers/python-sdk/python/genai_core/parameters.py +++ b/lib/shared/layers/python-sdk/python/genai_core/parameters.py @@ -5,6 +5,7 @@ API_KEYS_SECRETS_ARN = os.environ.get("API_KEYS_SECRETS_ARN") CONFIG_PARAMETER_NAME = os.environ.get("CONFIG_PARAMETER_NAME") MODELS_PARAMETER_NAME = os.environ.get("MODELS_PARAMETER_NAME") +BEDROCK_ENABLED_MODELS_PARAMETER_NAME = os.environ.get("BEDROCK_ENABLED_MODELS_PARAMETER_NAME") def get_external_api_key(name: str): @@ -32,3 +33,6 @@ def get_config(): def get_sagemaker_models(): return parameters.get_parameter(MODELS_PARAMETER_NAME, transform="json", max_age=30) + +def get_enabled_bedrock_models(): + return parameters.get_parameter(BEDROCK_ENABLED_MODELS_PARAMETER_NAME, transform="json", max_age=30) From 1bc0e75340841e91259beb3ccf5395561e792e1d Mon Sep 17 00:00:00 2001 From: Eleni Dimitropoulou <12170229+eldimi@users.noreply.github.com> Date: Tue, 30 Jul 2024 13:58:50 +0300 Subject: [PATCH 2/2] Add a list of bedrock enabled foundation models to show only these i the UI --- lib/aws-genai-llm-chatbot-stack.ts | 1 + lib/chatbot-api/index.ts | 1 + lib/chatbot-api/rest-api.ts | 3 +++ lib/models/index.ts | 2 ++ 4 files changed, 7 insertions(+) diff --git a/lib/aws-genai-llm-chatbot-stack.ts b/lib/aws-genai-llm-chatbot-stack.ts index 7e204370d..6198c3879 100644 --- a/lib/aws-genai-llm-chatbot-stack.ts +++ b/lib/aws-genai-llm-chatbot-stack.ts @@ -52,6 +52,7 @@ export class AwsGenAILLMChatbotStack extends cdk.Stack { ragEngines: ragEngines, userPool: authentication.userPool, modelsParameter: models.modelsParameter, + bedrockEnabledModelsParameter: models.bedrockEnabledModelsParameter, models: models.models, }); diff --git a/lib/chatbot-api/index.ts b/lib/chatbot-api/index.ts index 55406b424..dd1ea40c6 100644 --- a/lib/chatbot-api/index.ts +++ b/lib/chatbot-api/index.ts @@ -24,6 +24,7 @@ export interface ChatBotApiProps { readonly ragEngines?: RagEngines; readonly userPool: cognito.UserPool; readonly modelsParameter: ssm.StringParameter; + readonly bedrockEnabledModelsParameter: ssm.StringParameter; readonly models: SageMakerModelEndpoint[]; } diff --git a/lib/chatbot-api/rest-api.ts b/lib/chatbot-api/rest-api.ts index ca65d1b05..cf8347601 100644 --- a/lib/chatbot-api/rest-api.ts +++ b/lib/chatbot-api/rest-api.ts @@ -25,6 +25,7 @@ export interface ApiResolversProps { readonly byUserIdIndex: string; readonly userFeedbackBucket: s3.Bucket; readonly modelsParameter: ssm.StringParameter; + readonly bedrockEnabledModelsParameter: ssm.StringParameter; readonly models: SageMakerModelEndpoint[]; readonly api: appsync.GraphqlApi; } @@ -59,6 +60,7 @@ export class ApiResolvers extends Construct { ...props.shared.defaultEnvironmentVariables, CONFIG_PARAMETER_NAME: props.shared.configParameter.parameterName, MODELS_PARAMETER_NAME: props.modelsParameter.parameterName, + BEDROCK_ENABLED_MODELS_PARAMETER_NAME: props.bedrockEnabledModelsParameter.parameterName, X_ORIGIN_VERIFY_SECRET_ARN: props.shared.xOriginVerifySecret.secretArn, API_KEYS_SECRETS_ARN: props.shared.apiKeysSecret.secretArn, @@ -263,6 +265,7 @@ export class ApiResolvers extends Construct { props.shared.apiKeysSecret.grantRead(apiHandler); props.shared.configParameter.grantRead(apiHandler); props.modelsParameter.grantRead(apiHandler); + props.bedrockEnabledModelsParameter.grantRead(apiHandler); props.sessionsTable.grantReadWriteData(apiHandler); props.userFeedbackBucket.grantReadWrite(apiHandler); props.ragEngines?.uploadBucket.grantReadWrite(apiHandler); diff --git a/lib/models/index.ts b/lib/models/index.ts index 4c9713b76..6cf63ddc4 100644 --- a/lib/models/index.ts +++ b/lib/models/index.ts @@ -29,6 +29,7 @@ export interface ModelsProps { export class Models extends Construct { public readonly models: SageMakerModelEndpoint[]; public readonly modelsParameter: ssm.StringParameter; + public readonly bedrockEnabledModelsParameter: ssm.StringParameter; constructor(scope: Construct, id: string, props: ModelsProps) { super(scope, id); @@ -387,6 +388,7 @@ export class Models extends Construct { this.models = models; this.modelsParameter = modelsParameter; + this.bedrockEnabledModelsParameter = bedrockEnabledModelsParameter; if (models.length > 0 && props.config.llms?.sagemakerSchedule?.enabled) {