diff --git a/README.md b/README.md index 3a188054d2af3e07c45d0353fa9a76b5fe2d5f24..5928a472dce0fcf49882c75f41f761db83aaa7dc 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,7 @@ The following projects need to be deployed: - https://code.europa.eu/ted-ai/applications/lawfulness-ecs (WIP) - https://code.europa.eu/ted-ai/models/contract-budgetary-values-extractor - https://code.europa.eu/ted-ai/models/multi-label-division-classifier +- https://code.europa.eu/ted-ai/models/opentender-multi-label-division-classifier - https://code.europa.eu/ted-ai/models/dashboard Once this is done, it is possible to uncomment all modules from main.tf and then deploy. This can either be done via a branch and the CI or directly from a local machine. diff --git a/dev.tfvars b/dev.tfvars index d8c0bea1abab0f3be7cfdd3fedf38c1fcb9852be..2f677010515622b24929e00c341a7ebf9c8ec605 100644 --- a/dev.tfvars +++ b/dev.tfvars @@ -41,6 +41,9 @@ sagemaker_classifier_multi_label_division_classifier_model_url = "s3://d-ew1-ted sagemaker_classifier_budgetary_value_classifier_name = "contract-budgetary-values-extractor-classifier" sagemaker_classifier_budgetary_value_classifier_image_url = "dkr.ecr.eu-west-1.amazonaws.com/sagemaker-classifiers:contract-budgetary-values-extractor-v0.0.3" sagemaker_classifier_budgetary_value_classifier_model_url = "s3://d-ew1-ted-ai-ml-models/models/contract-budgetary-values-extractor/v0.0.3/model.tar.gz" +sagemaker_classifier_opentender_multi_label_division_classifier_name = "opentender-multi-label-division-classifier" +sagemaker_classifier_opentender_multi_label_division_classifier_image_url = "dkr.ecr.eu-west-1.amazonaws.com/sagemaker-classifiers:opentender-multi-label-division-classifier-v0.0.1" +sagemaker_classifier_opentender_multi_label_division_classifier_model_url = "s3://d-ew1-ted-ai-ml-models/models/opentender-multi-label-division-classifier/v0.0.1/model.tar.gz" ecr_repository_application_name = "ted-applications" ecr_repository_sagemaker_classifiers_name = "sagemaker-classifiers" @@ -64,6 +67,7 @@ ssm_buckets_backup_id = "/tedai/s3/backup ssm_buckets_deployment_id = "/tedai/s3/deployment_bucket/id" ssm_classifier_endpoint_multi_label_division_classifier_name = "/tedai/sagemaker/endpoint/multi_label_division_classifier/name" ssm_classifier_endpoint_budgetary_value_classifier_name = "/tedai/sagemaker/endpoint/budgetary_value_classifier/name" +ssm_classifier_endpoint_opentender_multi_label_division_classifier_name = "/tedai/sagemaker/endpoint/opentender_multi_label_division_classifier/name" ssm_s3_input_bucket_readwrite_policy_arn = "/tedai/iam/policies/s3_input_bucket_readwrite_policy/arn" ssm_s3_curated_bucket_readwrite_policy_arn = "/tedai/iam/policies/s3_curated_bucket_readwrite_policy/arn" ssm_s3_curated_bucket_readonly_policy_arn = "/tedai/iam/policies/s3_curated_bucket_readonly_policy/arn" diff --git a/main.tf b/main.tf index 6ad72da72109aaa791eb039bc3402d2520e3e6cb..a3d5982473eec404c13749cd545e5496c5dc859a 100644 --- a/main.tf +++ b/main.tf @@ -71,6 +71,10 @@ module "classifiers" { sagemaker_classifier_budgetary_value_classifier_model_url = var.sagemaker_classifier_budgetary_value_classifier_model_url sagemaker_classifier_budgetary_value_classifier_name = var.sagemaker_classifier_budgetary_value_classifier_name ssm_classifier_endpoint_budgetary_value_classifier_name = var.ssm_classifier_endpoint_budgetary_value_classifier_name + sagemaker_classifier_opentender_multi_label_division_classifier_image_url = var.sagemaker_classifier_opentender_multi_label_division_classifier_image_url + sagemaker_classifier_opentender_multi_label_division_classifier_model_url = var.sagemaker_classifier_opentender_multi_label_division_classifier_model_url + sagemaker_classifier_opentender_multi_label_division_classifier_name = var.sagemaker_classifier_opentender_multi_label_division_classifier_name + ssm_classifier_endpoint_opentender_multi_label_division_classifier_name = var.ssm_classifier_endpoint_opentender_multi_label_division_classifier_name project_account_id = var.project_account_id lawfulness_host = module.lawfulness.processing_api_host } diff --git a/modules/classifiers/sagemaker.tf b/modules/classifiers/sagemaker.tf index 87a8e38d25b576122f9d4465c54121ccca712401..e730363499364f0b69db6b6dda76f8c5a56d24a7 100644 --- a/modules/classifiers/sagemaker.tf +++ b/modules/classifiers/sagemaker.tf @@ -86,6 +86,48 @@ resource "aws_ssm_parameter" "multi_label_division_classifier" { value = aws_sagemaker_endpoint.multi_label_division_classifier.name } + +# Opentender Multi label division classifier +resource "aws_sagemaker_model" "opentender_multi_label_division_classifier" { + name = var.sagemaker_classifier_opentender_multi_label_division_classifier_name + execution_role_arn = aws_iam_role.sagemaker_classifiers_execution_role.arn + + container { + container_hostname = var.sagemaker_classifier_opentender_multi_label_division_classifier_name + image = "${var.project_account_id}.${var.sagemaker_classifier_opentender_multi_label_division_classifier_image_url}" + mode = "SingleModel" + model_data_url = var.sagemaker_classifier_opentender_multi_label_division_classifier_model_url + } + + tags = var.tags +} + +resource "aws_sagemaker_endpoint_configuration" "opentender_multi_label_division_classifier" { + name = "${var.sagemaker_classifier_opentender_multi_label_division_classifier_name}-endpoint-config" + + production_variants { + variant_name = "variant-name" + model_name = aws_sagemaker_model.opentender_multi_label_division_classifier.name + initial_instance_count = 1 + instance_type = "ml.m5.xlarge" + } + + tags = var.tags +} + +resource "aws_sagemaker_endpoint" "opentender_multi_label_division_classifier" { + name = "${var.sagemaker_classifier_opentender_multi_label_division_classifier_name}-endpoint" + endpoint_config_name = aws_sagemaker_endpoint_configuration.opentender_multi_label_division_classifier.name + + tags = var.tags +} + +resource "aws_ssm_parameter" "opentender_multi_label_division_classifier" { + name = var.ssm_classifier_endpoint_opentender_multi_label_division_classifier_name + type = "String" + value = aws_sagemaker_endpoint.opentender_multi_label_division_classifier.name +} + # Budgetary values classifier resource "aws_sagemaker_model" "budgetary_value_classifier" { name = var.sagemaker_classifier_budgetary_value_classifier_name diff --git a/modules/classifiers/variables.tf b/modules/classifiers/variables.tf index 376973a9f0b88fcfdead6eb6c272ac273bf24928..34ada7fb3dfb5cdd9fdbc4d427c19c435486bfaf 100644 --- a/modules/classifiers/variables.tf +++ b/modules/classifiers/variables.tf @@ -22,6 +22,22 @@ variable "ssm_classifier_endpoint_multi_label_division_classifier_name" { type = string } +variable "sagemaker_classifier_opentender_multi_label_division_classifier_name" { + type = string +} + +variable "sagemaker_classifier_opentender_multi_label_division_classifier_image_url" { + type = string +} + +variable "sagemaker_classifier_opentender_multi_label_division_classifier_model_url" { + type = string +} + +variable "ssm_classifier_endpoint_opentender_multi_label_division_classifier_name" { + type = string +} + variable "sagemaker_classifier_budgetary_value_classifier_name" { type = string } diff --git a/variables.tf b/variables.tf index ee0c4b966b579e2df56a242b49f85eaa8cd452a6..c5a6ee85c6c638a46cff60858c36d04c938fd06a 100644 --- a/variables.tf +++ b/variables.tf @@ -102,6 +102,18 @@ variable "sagemaker_classifier_multi_label_division_classifier_model_url" { type = string } +variable "sagemaker_classifier_opentender_multi_label_division_classifier_name" { + type = string +} + +variable "sagemaker_classifier_opentender_multi_label_division_classifier_image_url" { + type = string +} + +variable "sagemaker_classifier_opentender_multi_label_division_classifier_model_url" { + type = string +} + variable "sagemaker_classifier_budgetary_value_classifier_name" { type = string } @@ -165,6 +177,10 @@ variable "ssm_classifier_endpoint_multi_label_division_classifier_name" { type = string } +variable "ssm_classifier_endpoint_opentender_multi_label_division_classifier_name" { + type = string +} + variable "ssm_classifier_endpoint_budgetary_value_classifier_name" { type = string }