bedrock-agentcore-starter-toolkit 0.0.1__py3-none-any.whl → 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of bedrock-agentcore-starter-toolkit might be problematic. Click here for more details.
- bedrock_agentcore_starter_toolkit/__init__.py +5 -0
- bedrock_agentcore_starter_toolkit/cli/cli.py +39 -0
- bedrock_agentcore_starter_toolkit/cli/common.py +44 -0
- bedrock_agentcore_starter_toolkit/cli/gateway/__init__.py +1 -0
- bedrock_agentcore_starter_toolkit/cli/gateway/commands.py +88 -0
- bedrock_agentcore_starter_toolkit/cli/runtime/__init__.py +1 -0
- bedrock_agentcore_starter_toolkit/cli/runtime/commands.py +603 -0
- bedrock_agentcore_starter_toolkit/cli/runtime/configuration_manager.py +124 -0
- bedrock_agentcore_starter_toolkit/notebook/__init__.py +5 -0
- bedrock_agentcore_starter_toolkit/notebook/runtime/__init__.py +1 -0
- bedrock_agentcore_starter_toolkit/notebook/runtime/bedrock_agentcore.py +196 -0
- bedrock_agentcore_starter_toolkit/operations/__init__.py +1 -0
- bedrock_agentcore_starter_toolkit/operations/gateway/README.md +277 -0
- bedrock_agentcore_starter_toolkit/operations/gateway/__init__.py +6 -0
- bedrock_agentcore_starter_toolkit/operations/gateway/client.py +456 -0
- bedrock_agentcore_starter_toolkit/operations/gateway/constants.py +152 -0
- bedrock_agentcore_starter_toolkit/operations/gateway/create_lambda.py +85 -0
- bedrock_agentcore_starter_toolkit/operations/gateway/create_role.py +89 -0
- bedrock_agentcore_starter_toolkit/operations/gateway/exceptions.py +13 -0
- bedrock_agentcore_starter_toolkit/operations/runtime/__init__.py +26 -0
- bedrock_agentcore_starter_toolkit/operations/runtime/configure.py +227 -0
- bedrock_agentcore_starter_toolkit/operations/runtime/invoke.py +129 -0
- bedrock_agentcore_starter_toolkit/operations/runtime/launch.py +163 -0
- bedrock_agentcore_starter_toolkit/operations/runtime/models.py +76 -0
- bedrock_agentcore_starter_toolkit/operations/runtime/status.py +66 -0
- bedrock_agentcore_starter_toolkit/services/ecr.py +55 -0
- bedrock_agentcore_starter_toolkit/services/runtime.py +383 -0
- bedrock_agentcore_starter_toolkit/utils/endpoints.py +32 -0
- bedrock_agentcore_starter_toolkit/utils/runtime/config.py +129 -0
- bedrock_agentcore_starter_toolkit/utils/runtime/container.py +310 -0
- bedrock_agentcore_starter_toolkit/utils/runtime/entrypoint.py +197 -0
- bedrock_agentcore_starter_toolkit/utils/runtime/logs.py +33 -0
- bedrock_agentcore_starter_toolkit/utils/runtime/schema.py +141 -0
- bedrock_agentcore_starter_toolkit/utils/runtime/templates/Dockerfile.j2 +59 -0
- bedrock_agentcore_starter_toolkit/utils/runtime/templates/dockerignore.template +69 -0
- bedrock_agentcore_starter_toolkit-0.1.0.dist-info/METADATA +137 -0
- bedrock_agentcore_starter_toolkit-0.1.0.dist-info/RECORD +41 -0
- bedrock_agentcore_starter_toolkit-0.1.0.dist-info/entry_points.txt +2 -0
- bedrock_agentcore_starter_toolkit-0.1.0.dist-info/licenses/NOTICE.txt +190 -0
- bedrock_agentcore_starter_toolkit/init.py +0 -3
- bedrock_agentcore_starter_toolkit-0.0.1.dist-info/METADATA +0 -26
- bedrock_agentcore_starter_toolkit-0.0.1.dist-info/RECORD +0 -5
- {bedrock_agentcore_starter_toolkit-0.0.1.dist-info → bedrock_agentcore_starter_toolkit-0.1.0.dist-info}/WHEEL +0 -0
- /bedrock_agentcore_starter_toolkit-0.0.1.dist-info/licenses/LICENSE → /bedrock_agentcore_starter_toolkit-0.1.0.dist-info/licenses/LICENSE.txt +0 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"""Typed configuration schema for Bedrock AgentCore SDK."""
|
|
2
|
+
|
|
3
|
+
from typing import Dict, List, Optional
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel, Field, field_validator
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class NetworkConfiguration(BaseModel):
|
|
9
|
+
"""Network configuration for BedrockAgentCore deployment."""
|
|
10
|
+
|
|
11
|
+
network_mode: str = Field(default="PUBLIC", description="Network mode for deployment")
|
|
12
|
+
|
|
13
|
+
def to_aws_dict(self) -> dict:
|
|
14
|
+
"""Convert to AWS API format with camelCase keys."""
|
|
15
|
+
return {"networkMode": self.network_mode}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ProtocolConfiguration(BaseModel):
|
|
19
|
+
"""Protocol configuration for BedrockAgentCore deployment."""
|
|
20
|
+
|
|
21
|
+
server_protocol: str = Field(default="HTTP", description="Server protocol for deployment, either HTTP or MCP")
|
|
22
|
+
|
|
23
|
+
def to_aws_dict(self) -> dict:
|
|
24
|
+
"""Convert to AWS API format with camelCase keys."""
|
|
25
|
+
return {"serverProtocol": self.server_protocol}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ObservabilityConfig(BaseModel):
|
|
29
|
+
"""Observability configuration."""
|
|
30
|
+
|
|
31
|
+
enabled: bool = Field(default=True, description="Whether observability is enabled")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class AWSConfig(BaseModel):
|
|
35
|
+
"""AWS-specific configuration."""
|
|
36
|
+
|
|
37
|
+
execution_role: Optional[str] = Field(default=None, description="AWS IAM execution role ARN")
|
|
38
|
+
account: Optional[str] = Field(default=None, description="AWS account ID")
|
|
39
|
+
region: Optional[str] = Field(default=None, description="AWS region")
|
|
40
|
+
ecr_repository: Optional[str] = Field(default=None, description="ECR repository URI")
|
|
41
|
+
ecr_auto_create: bool = Field(default=False, description="Whether to auto-create ECR repository")
|
|
42
|
+
network_configuration: NetworkConfiguration = Field(default_factory=NetworkConfiguration)
|
|
43
|
+
protocol_configuration: ProtocolConfiguration = Field(default_factory=ProtocolConfiguration)
|
|
44
|
+
observability: ObservabilityConfig = Field(default_factory=ObservabilityConfig)
|
|
45
|
+
|
|
46
|
+
@field_validator("account")
|
|
47
|
+
@classmethod
|
|
48
|
+
def validate_account(cls, v: Optional[str]) -> Optional[str]:
|
|
49
|
+
"""Validate AWS account ID."""
|
|
50
|
+
if v is not None:
|
|
51
|
+
if not v.isdigit() or len(v) != 12:
|
|
52
|
+
raise ValueError("Invalid AWS account ID")
|
|
53
|
+
return v
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class BedrockAgentCoreDeploymentInfo(BaseModel):
|
|
57
|
+
"""BedrockAgentCore deployment information."""
|
|
58
|
+
|
|
59
|
+
agent_id: Optional[str] = Field(default=None, description="BedrockAgentCore agent ID")
|
|
60
|
+
agent_arn: Optional[str] = Field(default=None, description="BedrockAgentCore agent ARN")
|
|
61
|
+
agent_session_id: Optional[str] = Field(default=None, description="Session ID for invocations")
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class BedrockAgentCoreAgentSchema(BaseModel):
|
|
65
|
+
"""Type-safe schema for BedrockAgentCore configuration."""
|
|
66
|
+
|
|
67
|
+
name: str = Field(..., description="Name of the Bedrock AgentCore application")
|
|
68
|
+
entrypoint: str = Field(..., description="Entrypoint file path")
|
|
69
|
+
platform: str = Field(default="linux/amd64", description="Target platform")
|
|
70
|
+
container_runtime: str = Field(default="docker", description="Container runtime to use")
|
|
71
|
+
aws: AWSConfig = Field(default_factory=AWSConfig)
|
|
72
|
+
bedrock_agentcore: BedrockAgentCoreDeploymentInfo = Field(default_factory=BedrockAgentCoreDeploymentInfo)
|
|
73
|
+
authorizer_configuration: Optional[dict] = Field(default=None, description="JWT authorizer configuration")
|
|
74
|
+
oauth_configuration: Optional[dict] = Field(default=None, description="Oauth configuration")
|
|
75
|
+
|
|
76
|
+
def get_authorizer_configuration(self) -> Optional[dict]:
|
|
77
|
+
"""Get the authorizer configuration."""
|
|
78
|
+
return self.authorizer_configuration
|
|
79
|
+
|
|
80
|
+
def validate(self, for_local: bool = False) -> List[str]:
|
|
81
|
+
"""Validate configuration and return list of errors.
|
|
82
|
+
|
|
83
|
+
Args:
|
|
84
|
+
for_local: Whether validating for local deployment
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
List of validation error messages
|
|
88
|
+
"""
|
|
89
|
+
errors = []
|
|
90
|
+
|
|
91
|
+
# Required fields for all deployments
|
|
92
|
+
if not self.name:
|
|
93
|
+
errors.append("Missing 'name' field")
|
|
94
|
+
if not self.entrypoint:
|
|
95
|
+
errors.append("Missing 'entrypoint' field")
|
|
96
|
+
|
|
97
|
+
# AWS fields required for cloud deployment
|
|
98
|
+
if not for_local:
|
|
99
|
+
if not self.aws.execution_role:
|
|
100
|
+
errors.append("Missing 'aws.execution_role' for cloud deployment")
|
|
101
|
+
if not self.aws.region:
|
|
102
|
+
errors.append("Missing 'aws.region' for cloud deployment")
|
|
103
|
+
if not self.aws.account:
|
|
104
|
+
errors.append("Missing 'aws.account' for cloud deployment")
|
|
105
|
+
|
|
106
|
+
return errors
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
class BedrockAgentCoreConfigSchema(BaseModel):
|
|
110
|
+
"""Project configuration supporting multiple named agents.
|
|
111
|
+
|
|
112
|
+
Operations use --agent parameter to select which agent to work with.
|
|
113
|
+
"""
|
|
114
|
+
|
|
115
|
+
default_agent: Optional[str] = Field(default=None, description="Default agent name for operations")
|
|
116
|
+
agents: Dict[str, BedrockAgentCoreAgentSchema] = Field(
|
|
117
|
+
default_factory=dict, description="Named agent configurations"
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
def get_agent_config(self, agent_name: Optional[str] = None) -> BedrockAgentCoreAgentSchema:
|
|
121
|
+
"""Get agent config by name or default.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
agent_name: Agent name from --agent parameter, or None for default
|
|
125
|
+
"""
|
|
126
|
+
target_name = agent_name or self.default_agent
|
|
127
|
+
if not target_name:
|
|
128
|
+
if len(self.agents) == 1:
|
|
129
|
+
agent = list(self.agents.values())[0]
|
|
130
|
+
self.default_agent = agent.name
|
|
131
|
+
return agent
|
|
132
|
+
raise ValueError("No agent specified and no default set")
|
|
133
|
+
|
|
134
|
+
if target_name not in self.agents:
|
|
135
|
+
available = list(self.agents.keys())
|
|
136
|
+
if available:
|
|
137
|
+
raise ValueError(f"Agent '{target_name}' not found. Available agents: {available}")
|
|
138
|
+
else:
|
|
139
|
+
raise ValueError("No agents configured")
|
|
140
|
+
|
|
141
|
+
return self.agents[target_name]
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
FROM public.ecr.aws/docker/library/python:{{ python_version }}-slim
|
|
2
|
+
WORKDIR /app
|
|
3
|
+
|
|
4
|
+
# Install system dependencies if needed
|
|
5
|
+
{% if system_packages %}
|
|
6
|
+
RUN apt-get update && apt-get install -y \
|
|
7
|
+
{% for package in system_packages %}{{ package }} {% endfor %}\
|
|
8
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
9
|
+
{% endif %}
|
|
10
|
+
|
|
11
|
+
# Copy entire project (respecting .dockerignore)
|
|
12
|
+
COPY . .
|
|
13
|
+
|
|
14
|
+
# Install dependencies
|
|
15
|
+
{% if has_current_package %}
|
|
16
|
+
# Install current directory as package
|
|
17
|
+
RUN python -m pip install --no-cache-dir -e .
|
|
18
|
+
{% endif %}
|
|
19
|
+
|
|
20
|
+
{% if dependencies_file %}
|
|
21
|
+
{% if dependencies_install_path %}
|
|
22
|
+
# Install from pyproject.toml directory
|
|
23
|
+
RUN python -m pip install --no-cache-dir {{ dependencies_install_path }}
|
|
24
|
+
{% else %}
|
|
25
|
+
# Install from requirements file
|
|
26
|
+
RUN python -m pip install --no-cache-dir -r {{ dependencies_file }}
|
|
27
|
+
{% endif %}
|
|
28
|
+
{% endif %}
|
|
29
|
+
|
|
30
|
+
{% if has_wheelhouse %}
|
|
31
|
+
# Install from wheelhouse
|
|
32
|
+
RUN python -m pip install --no-cache-dir --force-reinstall ./wheelhouse/*.whl
|
|
33
|
+
{% endif %}
|
|
34
|
+
|
|
35
|
+
# Set AWS region environment variable
|
|
36
|
+
{% if aws_region %}
|
|
37
|
+
ENV AWS_REGION={{ aws_region }}
|
|
38
|
+
ENV AWS_DEFAULT_REGION={{ aws_region }}
|
|
39
|
+
{% endif %}
|
|
40
|
+
|
|
41
|
+
# Signal that this is running in Docker for host binding logic
|
|
42
|
+
ENV DOCKER_CONTAINER=1
|
|
43
|
+
|
|
44
|
+
{% if observability_enabled %}
|
|
45
|
+
RUN python -m pip install aws_opentelemetry_distro_genai_beta>=0.1.2
|
|
46
|
+
{% endif %}
|
|
47
|
+
|
|
48
|
+
# Create non-root user
|
|
49
|
+
RUN useradd -m -u 1000 bedrock_agentcore
|
|
50
|
+
USER bedrock_agentcore
|
|
51
|
+
|
|
52
|
+
EXPOSE 8080
|
|
53
|
+
|
|
54
|
+
# Use the full module path
|
|
55
|
+
{% if observability_enabled %}
|
|
56
|
+
CMD ["opentelemetry-instrument", "python", "-m", "{{ agent_module_path }}"]
|
|
57
|
+
{% else %}
|
|
58
|
+
CMD ["python", "-m", "{{ agent_module_path }}"]
|
|
59
|
+
{% endif %}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Build artifacts
|
|
2
|
+
build/
|
|
3
|
+
dist/
|
|
4
|
+
*.egg-info/
|
|
5
|
+
*.egg
|
|
6
|
+
|
|
7
|
+
# Python cache
|
|
8
|
+
__pycache__/
|
|
9
|
+
__pycache__*
|
|
10
|
+
*.py[cod]
|
|
11
|
+
*$py.class
|
|
12
|
+
*.so
|
|
13
|
+
.Python
|
|
14
|
+
|
|
15
|
+
# Virtual environments
|
|
16
|
+
.venv/
|
|
17
|
+
.env
|
|
18
|
+
venv/
|
|
19
|
+
env/
|
|
20
|
+
ENV/
|
|
21
|
+
|
|
22
|
+
# Testing
|
|
23
|
+
.pytest_cache/
|
|
24
|
+
.coverage
|
|
25
|
+
.coverage*
|
|
26
|
+
htmlcov/
|
|
27
|
+
.tox/
|
|
28
|
+
*.cover
|
|
29
|
+
.hypothesis/
|
|
30
|
+
.mypy_cache/
|
|
31
|
+
.ruff_cache/
|
|
32
|
+
|
|
33
|
+
# Development
|
|
34
|
+
*.log
|
|
35
|
+
*.bak
|
|
36
|
+
*.swp
|
|
37
|
+
*.swo
|
|
38
|
+
*~
|
|
39
|
+
.DS_Store
|
|
40
|
+
|
|
41
|
+
# IDEs
|
|
42
|
+
.vscode/
|
|
43
|
+
.idea/
|
|
44
|
+
|
|
45
|
+
# Version control
|
|
46
|
+
.git/
|
|
47
|
+
.gitignore
|
|
48
|
+
.gitattributes
|
|
49
|
+
|
|
50
|
+
# Documentation
|
|
51
|
+
docs/
|
|
52
|
+
*.md
|
|
53
|
+
!README.md
|
|
54
|
+
|
|
55
|
+
# CI/CD
|
|
56
|
+
.github/
|
|
57
|
+
.gitlab-ci.yml
|
|
58
|
+
.travis.yml
|
|
59
|
+
|
|
60
|
+
# Project specific
|
|
61
|
+
tests/
|
|
62
|
+
|
|
63
|
+
# Bedrock AgentCore specific - keep config but exclude runtime files
|
|
64
|
+
.bedrock_agentcore.yaml
|
|
65
|
+
Dockerfile
|
|
66
|
+
.dockerignore
|
|
67
|
+
|
|
68
|
+
# Keep wheelhouse for offline installations
|
|
69
|
+
# wheelhouse/
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: bedrock-agentcore-starter-toolkit
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: A starter toolkit for using Bedrock AgentCore
|
|
5
|
+
Project-URL: Homepage, https://github.com/aws/bedrock-agentcore-starter-toolkit
|
|
6
|
+
Project-URL: Bug Tracker, https://github.com/aws/bedrock-agentcore-starter-toolkit/issues
|
|
7
|
+
Project-URL: Documentation, https://github.com/aws/bedrock-agentcore-starter-toolkit
|
|
8
|
+
Author-email: AWS <opensource@amazon.com>
|
|
9
|
+
License: Apache-2.0
|
|
10
|
+
License-File: LICENSE.txt
|
|
11
|
+
License-File: NOTICE.txt
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Requires-Dist: bedrock-agentcore>=0.1.0
|
|
25
|
+
Requires-Dist: boto3>=1.35.0
|
|
26
|
+
Requires-Dist: botocore>=1.35.0
|
|
27
|
+
Requires-Dist: docstring-parser<1.0,>=0.15
|
|
28
|
+
Requires-Dist: httpx>=0.28.1
|
|
29
|
+
Requires-Dist: jinja2>=3.1.6
|
|
30
|
+
Requires-Dist: prompt-toolkit>=3.0.51
|
|
31
|
+
Requires-Dist: pydantic<3.0.0,>=2.0.0
|
|
32
|
+
Requires-Dist: pyyaml>=6.0.2
|
|
33
|
+
Requires-Dist: requests>=2.25.0
|
|
34
|
+
Requires-Dist: rich<15.0.0,>=14.0.0
|
|
35
|
+
Requires-Dist: toml>=0.10.2
|
|
36
|
+
Requires-Dist: typer>=0.16.0
|
|
37
|
+
Requires-Dist: typing-extensions<5.0.0,>=4.13.2
|
|
38
|
+
Requires-Dist: urllib3>=1.26.0
|
|
39
|
+
Requires-Dist: uvicorn>=0.34.2
|
|
40
|
+
Description-Content-Type: text/markdown
|
|
41
|
+
|
|
42
|
+
<div align="center">
|
|
43
|
+
<h1>
|
|
44
|
+
Bedrock AgentCore Starter Toolkit
|
|
45
|
+
</h1>
|
|
46
|
+
|
|
47
|
+
<h2>
|
|
48
|
+
Deploy your local AI agent to Bedrock AgentCore with zero infrastructure
|
|
49
|
+
</h2>
|
|
50
|
+
|
|
51
|
+
<div align="center">
|
|
52
|
+
<a href="https://github.com/aws/bedrock-agentcore-starter-toolkit/graphs/commit-activity"><img alt="GitHub commit activity" src="https://img.shields.io/github/commit-activity/m/aws/bedrock-agentcore-starter-toolkit"/></a>
|
|
53
|
+
<a href="https://github.com/aws/bedrock-agentcore-starter-toolkit/issues"><img alt="GitHub open issues" src="https://img.shields.io/github/issues/aws/bedrock-agentcore-starter-toolkit"/></a>
|
|
54
|
+
<a href="https://github.com/aws/bedrock-agentcore-starter-toolkit/pulls"><img alt="GitHub open pull requests" src="https://img.shields.io/github/issues-pr/bedrock-agentcore-starter-toolkit"/></a>
|
|
55
|
+
<a href="https://github.com/aws/bedrock-agentcore-starter-toolkit/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/github/license/aws/bedrock-agentcore-starter-toolkit"/></a>
|
|
56
|
+
<a href="https://pypi.org/project/bedrock-agentcore-starter-toolkit"><img alt="PyPI version" src="https://img.shields.io/pypi/v/bedrock-agentcore-starter-toolkit"/></a>
|
|
57
|
+
<a href="https://python.org"><img alt="Python versions" src="https://img.shields.io/pypi/pyversions/bedrock-agentcore-starter-toolkit"/></a>
|
|
58
|
+
</div>
|
|
59
|
+
|
|
60
|
+
<p>
|
|
61
|
+
<a href="https://github.com/aws/bedrock-agentcore-sdk-python">Python SDK</a>
|
|
62
|
+
◆ <a href="https://github.com/aws/bedrock-agentcore-starter-toolkit">Starter Toolkit</a>
|
|
63
|
+
◆ <a href="https://github.com/awslabs/amazon-bedrock-agentcore-samples">Samples</a>
|
|
64
|
+
◆ <a href="https://discord.gg/bedrockagentcore-preview">Discord</a>
|
|
65
|
+
</p>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
## 🚀 From Local Development to Bedrock AgentCore
|
|
69
|
+
|
|
70
|
+
```python
|
|
71
|
+
# Build your agent with the SDK
|
|
72
|
+
from bedrock_agentcore import BedrockAgentCoreApp
|
|
73
|
+
|
|
74
|
+
app = BedrockAgentCoreApp()
|
|
75
|
+
|
|
76
|
+
@app.entrypoint
|
|
77
|
+
def my_agent(request):
|
|
78
|
+
# Your existing LangGraph, CrewAI, or custom agent logic
|
|
79
|
+
return process_with_your_framework(request.get("prompt"))
|
|
80
|
+
|
|
81
|
+
app.run()
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Deploy with the Starter Toolkit
|
|
86
|
+
agentcore configure --entrypoint my_agent.py
|
|
87
|
+
agentcore launch # Ready to run on Bedrock AgentCore
|
|
88
|
+
agentcore invoke '{"prompt": "tell me a fact"}'
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**What you get with the Starter Toolkit:**
|
|
92
|
+
- ✅ **Keep your agent logic** - Works with any SDK-built agent
|
|
93
|
+
- ✅ **Zero infrastructure management** - No servers, containers, or scaling concerns
|
|
94
|
+
- ✅ **One-command deployment** - From local development to enterprise platform
|
|
95
|
+
- ✅ **Production-ready hosting** - Reliable, scalable, compliant Bedrock AgentCore deployment
|
|
96
|
+
|
|
97
|
+
## ⚠️ Preview Status
|
|
98
|
+
|
|
99
|
+
Bedrock AgentCore Starter Toolkit is currently in public preview. APIs may change as we refine the SDK.
|
|
100
|
+
|
|
101
|
+
## 🛠️ Deployment & Management Tools
|
|
102
|
+
|
|
103
|
+
**Simple Configuration**
|
|
104
|
+
```bash
|
|
105
|
+
# Configure your agent for deployment
|
|
106
|
+
agentcore configure --entrypoint my_agent.py --name my-production-agent
|
|
107
|
+
|
|
108
|
+
# Check deployment status
|
|
109
|
+
agentcore status
|
|
110
|
+
|
|
111
|
+
# Invoke your deployed agent
|
|
112
|
+
agentcore invoke '{"prompt": "Hello from Bedrock AgentCore!"}'
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
**Enterprise Platform Services**
|
|
116
|
+
- 🚀 **Runtime** - Serverless deployment and scaling with fast cold starts
|
|
117
|
+
- 🧠 **Memory** - Persistent knowledge with event and semantic memory
|
|
118
|
+
- 🔗 **Gateway** - Transform existing APIs and Lambda functions into MCP tools
|
|
119
|
+
- 🔐 **Identity** - Secure authentication and access management
|
|
120
|
+
- 💻 **Code Interpreter** - Secure code execution in isolated sandbox environments
|
|
121
|
+
- 🌐 **Browser** - Fast, secure cloud-based browser for web automation
|
|
122
|
+
- 📊 **Observability** - Real-time monitoring and tracing with OpenTelemetry support
|
|
123
|
+
|
|
124
|
+
## 📚 About Amazon Bedrock AgentCore
|
|
125
|
+
|
|
126
|
+
Amazon Bedrock AgentCore enables you to deploy and operate highly effective agents securely, at scale using any framework and model. With AgentCore, developers can accelerate AI agents into production with enterprise-grade scale, reliability, and security. The platform provides:
|
|
127
|
+
|
|
128
|
+
- **Composable Services**: Mix and match services to fit your needs
|
|
129
|
+
- **Framework Flexibility**: Works with LangGraph, CrewAI, Strands, and more
|
|
130
|
+
- **Any Model Support**: Not locked into specific models
|
|
131
|
+
- **Enterprise Security**: Built-in identity, isolation, and access controls
|
|
132
|
+
|
|
133
|
+
## 📝 License & Contributing
|
|
134
|
+
|
|
135
|
+
- **License:** Apache 2.0 - see [LICENSE.txt](LICENSE.txt)
|
|
136
|
+
- **Contributing:** See [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
137
|
+
- **Security:** Report vulnerabilities via [SECURITY.md](SECURITY.md)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
bedrock_agentcore_starter_toolkit/__init__.py,sha256=tN3-JWKvxk4ZSJQJIHQ4mMsDtt8J_cDCz-drcGU9USA,120
|
|
2
|
+
bedrock_agentcore_starter_toolkit/cli/cli.py,sha256=HulrXGCj_C9aMVUkFbD2wk-l_LPImcpANikPugbtwsk,984
|
|
3
|
+
bedrock_agentcore_starter_toolkit/cli/common.py,sha256=eVjxsQQC4RjvyZouRBTUBPjoWDSE4yQ6q9Mi6WsuDrc,1315
|
|
4
|
+
bedrock_agentcore_starter_toolkit/cli/gateway/__init__.py,sha256=8IZ0kSe6Kz5s2j-SBsoc6qy04MbK85RMTQwZCiR2wmo,68
|
|
5
|
+
bedrock_agentcore_starter_toolkit/cli/gateway/commands.py,sha256=3DuXCvqXlmHU2cmjGzDruyc2Fkrpgoi158myj0vc3nA,3265
|
|
6
|
+
bedrock_agentcore_starter_toolkit/cli/runtime/__init__.py,sha256=0zKPPoYThoDIr3DZhIQJavq5nVTKRsgcE1s9--wx118,60
|
|
7
|
+
bedrock_agentcore_starter_toolkit/cli/runtime/commands.py,sha256=FtxX5TmYOSWE_pgiCCchLze4qi4HBtk-RwxtVq9b598,26056
|
|
8
|
+
bedrock_agentcore_starter_toolkit/cli/runtime/configuration_manager.py,sha256=uQrTemHGZY7l4llrYXtx8YIhMbjMXmq0LVFzg2yva2s,5321
|
|
9
|
+
bedrock_agentcore_starter_toolkit/notebook/__init__.py,sha256=wH1ZzIVKsKT_P0qX2kIIoyVxeHj8K40odfR1YI3McHw,129
|
|
10
|
+
bedrock_agentcore_starter_toolkit/notebook/runtime/__init__.py,sha256=DoGfB_uGFLANJVE9rSZtTH3ymw76WBWmD9vORvBIdXs,66
|
|
11
|
+
bedrock_agentcore_starter_toolkit/notebook/runtime/bedrock_agentcore.py,sha256=o_TDYqqX850wuoopLZWqisxwT2t101lHz2iIRpRBds8,7653
|
|
12
|
+
bedrock_agentcore_starter_toolkit/operations/__init__.py,sha256=L7sCNjfZviiVVoh2f3NEs2sbjNqFkmIRI3ZPYMMWMz0,51
|
|
13
|
+
bedrock_agentcore_starter_toolkit/operations/gateway/README.md,sha256=1J6mSZnrb8mF0VX-A3-u_dnYf4hEoCESBekzW2pGwAQ,8192
|
|
14
|
+
bedrock_agentcore_starter_toolkit/operations/gateway/__init__.py,sha256=5Qo1GeN-DghNp9g0coFUs7WpUJDboJoidOVs-5Co7fo,233
|
|
15
|
+
bedrock_agentcore_starter_toolkit/operations/gateway/client.py,sha256=0Jot4RkhrM2nVKEEcOQH4ThkaXuR4UaHaVXD8vxpEpA,20030
|
|
16
|
+
bedrock_agentcore_starter_toolkit/operations/gateway/constants.py,sha256=0_4J6BN4VAE4-XTQhPTEACkhilRrFqu_iKiuHSm2pYk,4610
|
|
17
|
+
bedrock_agentcore_starter_toolkit/operations/gateway/create_lambda.py,sha256=MQsBJfUj26zBh7LqYWLoekHuvbAHIJE8qcXwrmJOhM0,2875
|
|
18
|
+
bedrock_agentcore_starter_toolkit/operations/gateway/create_role.py,sha256=-uKdsiPhJn-Wbr64hF34yDwAElwFC5c4723scZRSTPU,3070
|
|
19
|
+
bedrock_agentcore_starter_toolkit/operations/gateway/exceptions.py,sha256=WjsrE7lT2708CJniM_ISMzkfNX4IUteGgvOxleD9JZY,272
|
|
20
|
+
bedrock_agentcore_starter_toolkit/operations/runtime/__init__.py,sha256=7ucAtIbabrDmEaHOfGqHtEr2CkQlEsb5O2tkHirXCqU,673
|
|
21
|
+
bedrock_agentcore_starter_toolkit/operations/runtime/configure.py,sha256=9nQ_dqp2v-WlteHX36OZ_Az1_nIbTQNUznkGobizofg,8293
|
|
22
|
+
bedrock_agentcore_starter_toolkit/operations/runtime/invoke.py,sha256=klDICZq-EHcxDjJhb1oVa7-vuFUvq5-HioqWrk__H_E,4539
|
|
23
|
+
bedrock_agentcore_starter_toolkit/operations/runtime/launch.py,sha256=s2v0mwuSa_3JQlkGhXTlk0VqM6RAwa-Xi8PvRpIqGIk,5426
|
|
24
|
+
bedrock_agentcore_starter_toolkit/operations/runtime/models.py,sha256=eyPbjl_oqNIkEPDygbZ5rO2H1zXYg6wEbwdZNmoe5xA,3538
|
|
25
|
+
bedrock_agentcore_starter_toolkit/operations/runtime/status.py,sha256=tpOtzAq1S3z_7baxR_WOT8Avo3MtWKGpelVOOfb-uMA,2516
|
|
26
|
+
bedrock_agentcore_starter_toolkit/services/ecr.py,sha256=9ot63TvIIMYdDmeQUrnO0ksbnL9bAZJb-VyUsQIcp7Y,1802
|
|
27
|
+
bedrock_agentcore_starter_toolkit/services/runtime.py,sha256=v2LYFE5lKCip78bR8No6oB_St9qVQ7s_hnPAbzQGU68,13802
|
|
28
|
+
bedrock_agentcore_starter_toolkit/utils/endpoints.py,sha256=1gIDRd1oO1fymYpiedVit7m6zl5k6N8Ns9N-2ix7ZaE,1153
|
|
29
|
+
bedrock_agentcore_starter_toolkit/utils/runtime/config.py,sha256=qRQid59rD3zJ0d0hcBY4-8R52PNIWEIUt9iR3biuz_c,4495
|
|
30
|
+
bedrock_agentcore_starter_toolkit/utils/runtime/container.py,sha256=6mYVA1YOTTWowBtCNdheLWTH1qL7t7Fd3ogloLIuvxQ,12829
|
|
31
|
+
bedrock_agentcore_starter_toolkit/utils/runtime/entrypoint.py,sha256=xHKjpVulE8vHpBc3Yd99HPDyqmhuggEoaHvM-_VjGFc,7114
|
|
32
|
+
bedrock_agentcore_starter_toolkit/utils/runtime/logs.py,sha256=RUP5W2rbkXf33Kis4MnaI8xIjkpidO1at3kiXmxAw0I,1082
|
|
33
|
+
bedrock_agentcore_starter_toolkit/utils/runtime/schema.py,sha256=uJSWeUMD7sIjeqpRtvhO4Y5LJG5B6lEOOeTcSWNFylc,5798
|
|
34
|
+
bedrock_agentcore_starter_toolkit/utils/runtime/templates/Dockerfile.j2,sha256=1I5kC_uByMP7wMuZ3070kTk1kPv2ylC0N_J6bMUc_Lk,1617
|
|
35
|
+
bedrock_agentcore_starter_toolkit/utils/runtime/templates/dockerignore.template,sha256=gzdegIgHoqrQM7AR5VJV5zqdB0GY-LE2jNdp27tDl64,702
|
|
36
|
+
bedrock_agentcore_starter_toolkit-0.1.0.dist-info/METADATA,sha256=IHv2VAO79Dbcjz3GUQEJGQEMWJtZv6hseO1dG3I_G5w,6172
|
|
37
|
+
bedrock_agentcore_starter_toolkit-0.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
38
|
+
bedrock_agentcore_starter_toolkit-0.1.0.dist-info/entry_points.txt,sha256=Tf94DkUf2Tp8P7p8MEXLxre7A7Pp_XNukteiz0wHnk8,77
|
|
39
|
+
bedrock_agentcore_starter_toolkit-0.1.0.dist-info/licenses/LICENSE.txt,sha256=nNPOMinitYdtfbhdQgsPgz1UowBznU6QVN3Xs0pSTKU,10768
|
|
40
|
+
bedrock_agentcore_starter_toolkit-0.1.0.dist-info/licenses/NOTICE.txt,sha256=rkBsg8DbKqfIoQbveqX9foR4uJPUVAokbkr02pRPilE,8674
|
|
41
|
+
bedrock_agentcore_starter_toolkit-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
Bedrock AgentCore CLI Starter Toolkit
|
|
2
|
+
Copyright 2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
|
|
4
|
+
This product includes software developed by Amazon.com, Inc. (https://www.amazon.com/).
|
|
5
|
+
|
|
6
|
+
**********************
|
|
7
|
+
THIRD PARTY COMPONENTS
|
|
8
|
+
**********************
|
|
9
|
+
|
|
10
|
+
This software includes the following third-party software/licensing:
|
|
11
|
+
|
|
12
|
+
================================================================================
|
|
13
|
+
1. boto3
|
|
14
|
+
================================================================================
|
|
15
|
+
Copyright 2013-2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
16
|
+
|
|
17
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
18
|
+
you may not use this file except in compliance with the License.
|
|
19
|
+
You may obtain a copy of the License at
|
|
20
|
+
|
|
21
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
22
|
+
|
|
23
|
+
================================================================================
|
|
24
|
+
2. botocore
|
|
25
|
+
================================================================================
|
|
26
|
+
Copyright 2012-2025 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
27
|
+
|
|
28
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
29
|
+
you may not use this file except in compliance with the License.
|
|
30
|
+
You may obtain a copy of the License at
|
|
31
|
+
|
|
32
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
33
|
+
|
|
34
|
+
================================================================================
|
|
35
|
+
3. typer
|
|
36
|
+
================================================================================
|
|
37
|
+
The MIT License (MIT)
|
|
38
|
+
|
|
39
|
+
Copyright (c) 2019 Sebastián Ramírez
|
|
40
|
+
|
|
41
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
42
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
43
|
+
in the Software without restriction, including without limitation the rights
|
|
44
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
45
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
46
|
+
furnished to do so, subject to the following conditions:
|
|
47
|
+
|
|
48
|
+
The above copyright notice and this permission notice shall be included in all
|
|
49
|
+
copies or substantial portions of the Software.
|
|
50
|
+
|
|
51
|
+
================================================================================
|
|
52
|
+
4. rich
|
|
53
|
+
================================================================================
|
|
54
|
+
The MIT License (MIT)
|
|
55
|
+
|
|
56
|
+
Copyright (c) 2020 Will McGugan
|
|
57
|
+
|
|
58
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
59
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
60
|
+
in the Software without restriction, including without limitation the rights
|
|
61
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
62
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
63
|
+
furnished to do so, subject to the following conditions:
|
|
64
|
+
|
|
65
|
+
The above copyright notice and this permission notice shall be included in all
|
|
66
|
+
copies or substantial portions of the Software.
|
|
67
|
+
|
|
68
|
+
================================================================================
|
|
69
|
+
5. pydantic
|
|
70
|
+
================================================================================
|
|
71
|
+
The MIT License (MIT)
|
|
72
|
+
|
|
73
|
+
Copyright (c) 2017 to present Pydantic Services Inc. and individual contributors.
|
|
74
|
+
|
|
75
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
76
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
77
|
+
in the Software without restriction, including without limitation the rights
|
|
78
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
79
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
80
|
+
furnished to do so, subject to the following conditions:
|
|
81
|
+
|
|
82
|
+
The above copyright notice and this permission notice shall be included in all
|
|
83
|
+
copies or substantial portions of the Software.
|
|
84
|
+
|
|
85
|
+
================================================================================
|
|
86
|
+
6. httpx
|
|
87
|
+
================================================================================
|
|
88
|
+
Copyright © 2019, to present Encode OSS Ltd.
|
|
89
|
+
All rights reserved.
|
|
90
|
+
|
|
91
|
+
Redistribution and use in source and binary forms, with or without
|
|
92
|
+
modification, are permitted provided that the following conditions are met:
|
|
93
|
+
|
|
94
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
95
|
+
list of conditions and the following disclaimer.
|
|
96
|
+
|
|
97
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
98
|
+
this list of conditions and the following disclaimer in the documentation
|
|
99
|
+
and/or other materials provided with the distribution.
|
|
100
|
+
|
|
101
|
+
* Neither the name of the copyright holder nor the names of its
|
|
102
|
+
contributors may be used to endorse or promote products derived from
|
|
103
|
+
this software without specific prior written permission.
|
|
104
|
+
|
|
105
|
+
================================================================================
|
|
106
|
+
7. jinja2
|
|
107
|
+
================================================================================
|
|
108
|
+
Copyright 2007 Pallets
|
|
109
|
+
|
|
110
|
+
Redistribution and use in source and binary forms, with or without
|
|
111
|
+
modification, are permitted provided that the following conditions are met:
|
|
112
|
+
|
|
113
|
+
1. Redistributions of source code must retain the above copyright notice,
|
|
114
|
+
this list of conditions and the following disclaimer.
|
|
115
|
+
|
|
116
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
117
|
+
this list of conditions and the following disclaimer in the documentation
|
|
118
|
+
and/or other materials provided with the distribution.
|
|
119
|
+
|
|
120
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
121
|
+
contributors may be used to endorse or promote products derived from
|
|
122
|
+
this software without specific prior written permission.
|
|
123
|
+
|
|
124
|
+
================================================================================
|
|
125
|
+
8. PyYAML
|
|
126
|
+
================================================================================
|
|
127
|
+
Copyright (c) 2017-2021 Ingy döt Net
|
|
128
|
+
Copyright (c) 2006-2016 Kirill Simonov
|
|
129
|
+
|
|
130
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
131
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
132
|
+
the Software without restriction, including without limitation the rights to use,
|
|
133
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
|
134
|
+
Software, and to permit persons to whom the Software is furnished to do so,
|
|
135
|
+
subject to the following conditions:
|
|
136
|
+
|
|
137
|
+
The above copyright notice and this permission notice shall be included in all
|
|
138
|
+
copies or substantial portions of the Software.
|
|
139
|
+
|
|
140
|
+
================================================================================
|
|
141
|
+
9. urllib3
|
|
142
|
+
================================================================================
|
|
143
|
+
MIT License
|
|
144
|
+
|
|
145
|
+
Copyright (c) 2008-2020 Andrey Petrov and contributors.
|
|
146
|
+
|
|
147
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
148
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
149
|
+
in the Software without restriction, including without limitation the rights
|
|
150
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
151
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
152
|
+
furnished to do so, subject to the following conditions:
|
|
153
|
+
|
|
154
|
+
The above copyright notice and this permission notice shall be included in all
|
|
155
|
+
copies or substantial portions of the Software.
|
|
156
|
+
|
|
157
|
+
================================================================================
|
|
158
|
+
10. requests
|
|
159
|
+
================================================================================
|
|
160
|
+
Copyright 2019 Kenneth Reitz
|
|
161
|
+
|
|
162
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
163
|
+
you may not use this file except in compliance with the License.
|
|
164
|
+
You may obtain a copy of the License at
|
|
165
|
+
|
|
166
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
167
|
+
|
|
168
|
+
================================================================================
|
|
169
|
+
11. uvicorn
|
|
170
|
+
================================================================================
|
|
171
|
+
Copyright © 2017-present, Encode OSS Ltd. All rights reserved.
|
|
172
|
+
|
|
173
|
+
Redistribution and use in source and binary forms, with or without
|
|
174
|
+
modification, are permitted provided that the following conditions are met:
|
|
175
|
+
|
|
176
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
177
|
+
list of conditions and the following disclaimer.
|
|
178
|
+
|
|
179
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
180
|
+
this list of conditions and the following disclaimer in the documentation
|
|
181
|
+
and/or other materials provided with the distribution.
|
|
182
|
+
|
|
183
|
+
* Neither the name of the copyright holder nor the names of its
|
|
184
|
+
contributors may be used to endorse or promote products derived from
|
|
185
|
+
this software without specific prior written permission.
|
|
186
|
+
|
|
187
|
+
================================================================================
|
|
188
|
+
|
|
189
|
+
For the full text of licenses, please see the individual LICENSE files
|
|
190
|
+
in the source distribution or visit the project homepages.
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: bedrock-agentcore-starter-toolkit
|
|
3
|
-
Version: 0.0.1
|
|
4
|
-
Summary: Starter toolkit for AWS Bedrock AgentCore
|
|
5
|
-
Project-URL: Homepage, https://github.com/aws/bedrock-agentcore-sdk-python
|
|
6
|
-
Project-URL: Bug Tracker, https://github.com/aws/bedrock-agentcore-sdk-python/issues
|
|
7
|
-
Author-email: AWS <opensource@amazon.com>
|
|
8
|
-
License: Apache-2.0
|
|
9
|
-
License-File: LICENSE
|
|
10
|
-
Classifier: Development Status :: 3 - Alpha
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
13
|
-
Classifier: Programming Language :: Python :: 3
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
-
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
16
|
-
Requires-Python: >=3.10
|
|
17
|
-
Requires-Dist: bedrock-agentcore>=0.1.0
|
|
18
|
-
Description-Content-Type: text/markdown
|
|
19
|
-
|
|
20
|
-
# Bedrock AgentCore Starter Toolkit
|
|
21
|
-
|
|
22
|
-
A starter toolkit for AWS Bedrock AgentCore. This is a placeholder package.
|
|
23
|
-
|
|
24
|
-
## License
|
|
25
|
-
|
|
26
|
-
This library is licensed under the Apache 2.0 License. See the LICENSE file.
|