From cfad8846ad2cd7136278559b0fbbca84e283fa03 Mon Sep 17 00:00:00 2001 From: Michael Tran Date: Tue, 29 Jul 2025 11:54:29 -0700 Subject: [PATCH] feat(aws): add Amazon Nova and core AI/ML service icons - Add Amazon Nova icon and AmazonNova class - Add AWS App Studio icon and AWSAppStudio class - Add Amazon CodeWhisperer icon and AmazonCodewhisperer class - Add AWS Neuron icon and AWSNeuron class - Update diagrams/aws/ml.py with new classes via autogen - Include test diagram for validation - Icons sourced from AWS Architecture Icons Q1 2025 package This enables users to create diagrams with the latest AWS AI/ML services including Amazon Nova, the new foundation model service. --- diagrams/aws/ml.py | 16 ++++++++++++ resources/aws/ml/amazon-codewhisperer.png | Bin 0 -> 2416 bytes resources/aws/ml/amazon-nova.png | Bin 0 -> 1652 bytes resources/aws/ml/aws-app-studio.png | Bin 0 -> 1527 bytes resources/aws/ml/aws-neuron.png | Bin 0 -> 2707 bytes test_nova_icons.py | 29 ++++++++++++++++++++++ 6 files changed, 45 insertions(+) create mode 100644 resources/aws/ml/amazon-codewhisperer.png create mode 100644 resources/aws/ml/amazon-nova.png create mode 100644 resources/aws/ml/aws-app-studio.png create mode 100644 resources/aws/ml/aws-neuron.png create mode 100644 test_nova_icons.py diff --git a/diagrams/aws/ml.py b/diagrams/aws/ml.py index a08da89c..632ea2dc 100644 --- a/diagrams/aws/ml.py +++ b/diagrams/aws/ml.py @@ -8,6 +8,14 @@ class _ML(_AWS): _icon_dir = "resources/aws/ml" +class AmazonCodewhisperer(_ML): + _icon = "amazon-codewhisperer.png" + + +class AmazonNova(_ML): + _icon = "amazon-nova.png" + + class ApacheMxnetOnAWS(_ML): _icon = "apache-mxnet-on-aws.png" @@ -16,6 +24,14 @@ class AugmentedAi(_ML): _icon = "augmented-ai.png" +class AWSAppStudio(_ML): + _icon = "aws-app-studio.png" + + +class AWSNeuron(_ML): + _icon = "aws-neuron.png" + + class Bedrock(_ML): _icon = "bedrock.png" diff --git a/resources/aws/ml/amazon-codewhisperer.png b/resources/aws/ml/amazon-codewhisperer.png new file mode 100644 index 0000000000000000000000000000000000000000..31ba06a93089ac12a1dde212a4720215cd71dacb GIT binary patch literal 2416 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 SBkJI%0aj+V=o(Y6r2haww$If7 literal 0 HcmV?d00001 diff --git a/resources/aws/ml/aws-neuron.png b/resources/aws/ml/aws-neuron.png new file mode 100644 index 0000000000000000000000000000000000000000..4984baf494020365dca84ede47d1e59206b8a54a GIT binary patch literal 2707 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 N002ovPDHLkV1nR97f%2H literal 0 HcmV?d00001 diff --git a/test_nova_icons.py b/test_nova_icons.py new file mode 100644 index 00000000..0c89b0c5 --- /dev/null +++ b/test_nova_icons.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 + +""" +Test script for new AWS AI/ML service icons +Tests Amazon Nova, AWS App Studio, Amazon CodeWhisperer, and AWS Neuron +""" + +from diagrams import Diagram +from diagrams.aws.ml import AmazonNova, AWSAppStudio, AmazonCodewhisperer, AWSNeuron + +def test_nova_icons(): + """Test the new Nova and AI service icons""" + + with Diagram("New AWS AI/ML Services", show=False, filename="nova_test"): + # Create instances of the new services + nova = AmazonNova("Amazon Nova") + app_studio = AWSAppStudio("AWS App Studio") + codewhisperer = AmazonCodewhisperer("CodeWhisperer") + neuron = AWSNeuron("AWS Neuron") + + # Create a simple flow + nova >> app_studio >> codewhisperer >> neuron + + print("✅ Test diagram created successfully!") + print("📁 Generated file: nova_test.png") + print("🔍 Please verify the icons render correctly in the diagram") + +if __name__ == "__main__": + test_nova_icons()