pull/1157/merge
Michael Walker 2 weeks ago committed by GitHub
commit 42a1939127
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -76,7 +76,7 @@ TMPL_APIDOC = "apidoc.tmpl"
TMPL_MODULE = "module.tmpl" TMPL_MODULE = "module.tmpl"
UPPER_WORDS = { UPPER_WORDS = {
"aws": ("aws", "api", "ebs", "ec2", "efs", "emr", "rds", "ml", "mq", "nat", "vpc", "waf", "sdk"), "aws": ("aws", "api", "ebs", "ec2", "efs", "emr", "rds", "ml", "mq", "nat", "vpc", "waf", "sdk", "aiagent", "agentcore"),
"azure": ("ad", "b2c", "ai", "api", "cdn", "ddos", "dns", "fxt", "hana", "hd", "id", "sap", "sql", "vm", "vpn", "vpc"), "azure": ("ad", "b2c", "ai", "api", "cdn", "ddos", "dns", "fxt", "hana", "hd", "id", "sap", "sql", "vm", "vpn", "vpc"),
"gcp": ("gcp", "ai", "api", "cdn", "dns", "gke", "gpu", "iap", "ml", "nat", "os", "sdk", "sql", "tpu", "vpn"), "gcp": ("gcp", "ai", "api", "cdn", "dns", "gke", "gpu", "iap", "ml", "nat", "os", "sdk", "sql", "tpu", "vpn"),
"firebase": ("ab", "fcm", "ml"), "firebase": ("ab", "fcm", "ml"),
@ -242,6 +242,8 @@ ALIASES = {
}, },
"ml": { "ml": {
"DeepLearningContainers": "DLC", "DeepLearningContainers": "DLC",
"PolicyEngineAgenticGuardrails": "PEAG",
"Observability": "OBS",
}, },
"network": { "network": {
"CloudFront": "CF", "CloudFront": "CF",

@ -139,8 +139,7 @@ class Diagram:
if isinstance(outformat, list): if isinstance(outformat, list):
for one_format in outformat: for one_format in outformat:
if not self._validate_outformat(one_format): if not self._validate_outformat(one_format):
raise ValueError( raise ValueError(f'"{one_format}" is not a valid output format')
f'"{one_format}" is not a valid output format')
else: else:
if not self._validate_outformat(outformat): if not self._validate_outformat(outformat):
raise ValueError(f'"{outformat}" is not a valid output format') raise ValueError(f'"{outformat}" is not a valid output format')
@ -492,8 +491,7 @@ class Edge:
"""Implement Self - Node or Edge and Self - [Nodes]""" """Implement Self - Node or Edge and Self - [Nodes]"""
return self.connect(other) return self.connect(other)
def __rsub__(self, other: Union[List["Node"], def __rsub__(self, other: Union[List["Node"], List["Edge"]]) -> List["Edge"]:
List["Edge"]]) -> List["Edge"]:
"""Called for [Nodes] or [Edges] - Self because list don't have __sub__ operators.""" """Called for [Nodes] or [Edges] - Self because list don't have __sub__ operators."""
return self.append(other) return self.append(other)
@ -507,23 +505,15 @@ class Edge:
self.reverse = True self.reverse = True
return self.connect(other) return self.connect(other)
def __rrshift__(self, def __rrshift__(self, other: Union[List["Node"], List["Edge"]]) -> List["Edge"]:
other: Union[List["Node"],
List["Edge"]]) -> List["Edge"]:
"""Called for [Nodes] or [Edges] >> Self because list of Edges don't have __rshift__ operators.""" """Called for [Nodes] or [Edges] >> Self because list of Edges don't have __rshift__ operators."""
return self.append(other, forward=True) return self.append(other, forward=True)
def __rlshift__(self, def __rlshift__(self, other: Union[List["Node"], List["Edge"]]) -> List["Edge"]:
other: Union[List["Node"],
List["Edge"]]) -> List["Edge"]:
"""Called for [Nodes] or [Edges] << Self because list of Edges don't have __lshift__ operators.""" """Called for [Nodes] or [Edges] << Self because list of Edges don't have __lshift__ operators."""
return self.append(other, reverse=True) return self.append(other, reverse=True)
def append(self, def append(self, other: Union[List["Node"], List["Edge"]], forward=None, reverse=None) -> List["Edge"]:
other: Union[List["Node"],
List["Edge"]],
forward=None,
reverse=None) -> List["Edge"]:
result = [] result = []
for o in other: for o in other:
if isinstance(o, Edge): if isinstance(o, Edge):
@ -532,12 +522,7 @@ class Edge:
self._attrs = o.attrs.copy() self._attrs = o.attrs.copy()
result.append(o) result.append(o)
else: else:
result.append( result.append(Edge(o, forward=forward, reverse=reverse, **self._attrs))
Edge(
o,
forward=forward,
reverse=reverse,
**self._attrs))
return result return result
def connect(self, other: Union["Node", "Edge", List["Node"]]): def connect(self, other: Union["Node", "Edge", List["Node"]]):

@ -8,6 +8,18 @@ class _ML(_AWS):
_icon_dir = "resources/aws/ml" _icon_dir = "resources/aws/ml"
class AGENTCORE(_ML):
_icon = "agentcore.png"
class AiAgent(_ML):
_icon = "ai-agent.png"
class AmazonNova(_ML):
_icon = "amazon-nova.png"
class ApacheMxnetOnAWS(_ML): class ApacheMxnetOnAWS(_ML):
_icon = "apache-mxnet-on-aws.png" _icon = "apache-mxnet-on-aws.png"
@ -16,10 +28,26 @@ class AugmentedAi(_ML):
_icon = "augmented-ai.png" _icon = "augmented-ai.png"
class AWSAppStudio(_ML):
_icon = "aws-app-studio.png"
class AWSNeuron(_ML):
_icon = "aws-neuron.png"
class Bedrock(_ML): class Bedrock(_ML):
_icon = "bedrock.png" _icon = "bedrock.png"
class BrowserTool(_ML):
_icon = "browser-tool.png"
class CodeInterpreter(_ML):
_icon = "code-interpreter.png"
class Comprehend(_ML): class Comprehend(_ML):
_icon = "comprehend.png" _icon = "comprehend.png"
@ -48,6 +76,10 @@ class ElasticInference(_ML):
_icon = "elastic-inference.png" _icon = "elastic-inference.png"
class Evaluations(_ML):
_icon = "evaluations.png"
class Forecast(_ML): class Forecast(_ML):
_icon = "forecast.png" _icon = "forecast.png"
@ -56,6 +88,14 @@ class FraudDetector(_ML):
_icon = "fraud-detector.png" _icon = "fraud-detector.png"
class Gateway(_ML):
_icon = "gateway.png"
class Identity(_ML):
_icon = "identity.png"
class Kendra(_ML): class Kendra(_ML):
_icon = "kendra.png" _icon = "kendra.png"
@ -68,10 +108,22 @@ class MachineLearning(_ML):
_icon = "machine-learning.png" _icon = "machine-learning.png"
class Memory(_ML):
_icon = "memory.png"
class Observability(_ML):
_icon = "observability.png"
class Personalize(_ML): class Personalize(_ML):
_icon = "personalize.png" _icon = "personalize.png"
class PolicyEngineAgenticGuardrails(_ML):
_icon = "policy-engine-agentic-guardrails.png"
class Polly(_ML): class Polly(_ML):
_icon = "polly.png" _icon = "polly.png"
@ -92,6 +144,10 @@ class Rekognition(_ML):
_icon = "rekognition.png" _icon = "rekognition.png"
class Runtime(_ML):
_icon = "runtime.png"
class SagemakerGroundTruth(_ML): class SagemakerGroundTruth(_ML):
_icon = "sagemaker-ground-truth.png" _icon = "sagemaker-ground-truth.png"
@ -135,3 +191,5 @@ class Translate(_ML):
# Aliases # Aliases
DLC = DeepLearningContainers DLC = DeepLearningContainers
PEAG = PolicyEngineAgenticGuardrails
OBS = Observability

@ -24,7 +24,7 @@ def run() -> int:
args = parser.parse_args() args = parser.parse_args()
for path in args.paths: for path in args.paths:
with open(path, encoding='utf-8') as f: with open(path, encoding="utf-8") as f:
exec(f.read()) exec(f.read())
return 0 return 0

@ -1094,15 +1094,36 @@ Node classes list of the aws provider.
## aws.ml ## aws.ml
<img width="30" src="/img/resources/aws/ml/agentcore.png" alt="AGENTCORE" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.AGENTCORE**
<img width="30" src="/img/resources/aws/ml/ai-agent.png" alt="AiAgent" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.AiAgent**
<img width="30" src="/img/resources/aws/ml/amazon-nova.png" alt="AmazonNova" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.AmazonNova**
<img width="30" src="/img/resources/aws/ml/apache-mxnet-on-aws.png" alt="ApacheMxnetOnAWS" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/apache-mxnet-on-aws.png" alt="ApacheMxnetOnAWS" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.ApacheMxnetOnAWS** **diagrams.aws.ml.ApacheMxnetOnAWS**
<img width="30" src="/img/resources/aws/ml/augmented-ai.png" alt="AugmentedAi" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/augmented-ai.png" alt="AugmentedAi" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.AugmentedAi** **diagrams.aws.ml.AugmentedAi**
<img width="30" src="/img/resources/aws/ml/aws-app-studio.png" alt="AWSAppStudio" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.AWSAppStudio**
<img width="30" src="/img/resources/aws/ml/aws-neuron.png" alt="AWSNeuron" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.AWSNeuron**
<img width="30" src="/img/resources/aws/ml/bedrock.png" alt="Bedrock" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/bedrock.png" alt="Bedrock" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Bedrock** **diagrams.aws.ml.Bedrock**
<img width="30" src="/img/resources/aws/ml/browser-tool.png" alt="BrowserTool" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.BrowserTool**
<img width="30" src="/img/resources/aws/ml/code-interpreter.png" alt="CodeInterpreter" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.CodeInterpreter**
<img width="30" src="/img/resources/aws/ml/comprehend.png" alt="Comprehend" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/comprehend.png" alt="Comprehend" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Comprehend** **diagrams.aws.ml.Comprehend**
@ -1124,12 +1145,21 @@ Node classes list of the aws provider.
<img width="30" src="/img/resources/aws/ml/elastic-inference.png" alt="ElasticInference" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/elastic-inference.png" alt="ElasticInference" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.ElasticInference** **diagrams.aws.ml.ElasticInference**
<img width="30" src="/img/resources/aws/ml/evaluations.png" alt="Evaluations" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Evaluations**
<img width="30" src="/img/resources/aws/ml/forecast.png" alt="Forecast" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/forecast.png" alt="Forecast" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Forecast** **diagrams.aws.ml.Forecast**
<img width="30" src="/img/resources/aws/ml/fraud-detector.png" alt="FraudDetector" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/fraud-detector.png" alt="FraudDetector" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.FraudDetector** **diagrams.aws.ml.FraudDetector**
<img width="30" src="/img/resources/aws/ml/gateway.png" alt="Gateway" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Gateway**
<img width="30" src="/img/resources/aws/ml/identity.png" alt="Identity" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Identity**
<img width="30" src="/img/resources/aws/ml/kendra.png" alt="Kendra" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/kendra.png" alt="Kendra" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Kendra** **diagrams.aws.ml.Kendra**
@ -1139,9 +1169,18 @@ Node classes list of the aws provider.
<img width="30" src="/img/resources/aws/ml/machine-learning.png" alt="MachineLearning" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/machine-learning.png" alt="MachineLearning" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.MachineLearning** **diagrams.aws.ml.MachineLearning**
<img width="30" src="/img/resources/aws/ml/memory.png" alt="Memory" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Memory**
<img width="30" src="/img/resources/aws/ml/observability.png" alt="Observability" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Observability**, **OBS** (alias)
<img width="30" src="/img/resources/aws/ml/personalize.png" alt="Personalize" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/personalize.png" alt="Personalize" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Personalize** **diagrams.aws.ml.Personalize**
<img width="30" src="/img/resources/aws/ml/policy-engine-agentic-guardrails.png" alt="PolicyEngineAgenticGuardrails" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.PolicyEngineAgenticGuardrails**, **PEAG** (alias)
<img width="30" src="/img/resources/aws/ml/polly.png" alt="Polly" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/polly.png" alt="Polly" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Polly** **diagrams.aws.ml.Polly**
@ -1157,6 +1196,9 @@ Node classes list of the aws provider.
<img width="30" src="/img/resources/aws/ml/rekognition.png" alt="Rekognition" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/rekognition.png" alt="Rekognition" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Rekognition** **diagrams.aws.ml.Rekognition**
<img width="30" src="/img/resources/aws/ml/runtime.png" alt="Runtime" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.Runtime**
<img width="30" src="/img/resources/aws/ml/sagemaker-ground-truth.png" alt="SagemakerGroundTruth" style="float: left; padding-right: 5px;" > <img width="30" src="/img/resources/aws/ml/sagemaker-ground-truth.png" alt="SagemakerGroundTruth" style="float: left; padding-right: 5px;" >
**diagrams.aws.ml.SagemakerGroundTruth** **diagrams.aws.ml.SagemakerGroundTruth**

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@ -0,0 +1,58 @@
#!/usr/bin/env python3
"""
Test script for AWS Agentcore Bedrock icons
Validates that all 11 new Agentcore icons can be imported and used correctly.
"""
from diagrams import Diagram
from diagrams.aws.ml import (
Agentcore,
AiAgent,
Runtime,
Gateway,
Identity,
CodeInterpreter,
Observability,
BrowserTool,
Memory,
Evaluations,
PolicyEngineAgenticGuardrails
)
def test_agentcore_icons():
"""Test all Agentcore icons in a sample diagram"""
with Diagram("AWS Agentcore Bedrock Icons Test", show=False, filename="agentcore_test"):
# Core Agentcore components
agentcore = Agentcore("Agentcore")
ai_agent = AiAgent("AI Agent")
runtime = Runtime("Runtime")
gateway = Gateway("Gateway")
# Identity and security
identity = Identity("Identity")
policy_engine = PolicyEngineAgenticGuardrails("Policy Engine")
# Tools and capabilities
code_interpreter = CodeInterpreter("Code Interpreter")
browser_tool = BrowserTool("Browser Tool")
memory = Memory("Memory")
# Monitoring and evaluation
observability = Observability("Observability")
evaluations = Evaluations("Evaluations")
# Create a flow showing the relationships
agentcore >> ai_agent >> runtime
ai_agent >> [code_interpreter, browser_tool, memory]
gateway >> identity >> policy_engine
[runtime, code_interpreter, browser_tool] >> observability
observability >> evaluations
print("✅ Test diagram created successfully!")
print("📁 Generated file: agentcore_test.png")
print("🔍 Please verify the icons render correctly in the diagram")
if __name__ == "__main__":
test_agentcore_icons()

@ -0,0 +1,28 @@
#!/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, 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")
neuron = AWSNeuron("AWS Neuron")
# Create a simple flow
nova >> app_studio >> 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()
Loading…
Cancel
Save