@aws/ml-container-creator 0.2.0

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.
Files changed (143) hide show
  1. package/LICENSE +202 -0
  2. package/LICENSE-THIRD-PARTY +68620 -0
  3. package/NOTICE +2 -0
  4. package/README.md +106 -0
  5. package/bin/cli.js +365 -0
  6. package/config/defaults.json +32 -0
  7. package/config/presets/transformers-djl.json +26 -0
  8. package/config/presets/transformers-gpu.json +24 -0
  9. package/config/presets/transformers-lmi.json +27 -0
  10. package/package.json +129 -0
  11. package/servers/README.md +419 -0
  12. package/servers/base-image-picker/catalogs/model-servers.json +1191 -0
  13. package/servers/base-image-picker/catalogs/python-slim.json +38 -0
  14. package/servers/base-image-picker/catalogs/triton-backends.json +51 -0
  15. package/servers/base-image-picker/catalogs/triton.json +38 -0
  16. package/servers/base-image-picker/index.js +495 -0
  17. package/servers/base-image-picker/manifest.json +17 -0
  18. package/servers/base-image-picker/package.json +15 -0
  19. package/servers/hyperpod-cluster-picker/LICENSE +202 -0
  20. package/servers/hyperpod-cluster-picker/index.js +424 -0
  21. package/servers/hyperpod-cluster-picker/manifest.json +14 -0
  22. package/servers/hyperpod-cluster-picker/package.json +17 -0
  23. package/servers/instance-recommender/LICENSE +202 -0
  24. package/servers/instance-recommender/catalogs/instances.json +852 -0
  25. package/servers/instance-recommender/index.js +284 -0
  26. package/servers/instance-recommender/manifest.json +16 -0
  27. package/servers/instance-recommender/package.json +15 -0
  28. package/servers/lib/LICENSE +202 -0
  29. package/servers/lib/bedrock-client.js +160 -0
  30. package/servers/lib/custom-validators.js +46 -0
  31. package/servers/lib/dynamic-resolver.js +36 -0
  32. package/servers/lib/package.json +11 -0
  33. package/servers/lib/schemas/image-catalog.schema.json +185 -0
  34. package/servers/lib/schemas/instances.schema.json +124 -0
  35. package/servers/lib/schemas/manifest.schema.json +64 -0
  36. package/servers/lib/schemas/model-catalog.schema.json +91 -0
  37. package/servers/lib/schemas/regions.schema.json +26 -0
  38. package/servers/lib/schemas/triton-backends.schema.json +51 -0
  39. package/servers/model-picker/catalogs/jumpstart-public.json +66 -0
  40. package/servers/model-picker/catalogs/popular-diffusors.json +88 -0
  41. package/servers/model-picker/catalogs/popular-transformers.json +226 -0
  42. package/servers/model-picker/index.js +1693 -0
  43. package/servers/model-picker/manifest.json +18 -0
  44. package/servers/model-picker/package.json +20 -0
  45. package/servers/region-picker/LICENSE +202 -0
  46. package/servers/region-picker/catalogs/regions.json +263 -0
  47. package/servers/region-picker/index.js +230 -0
  48. package/servers/region-picker/manifest.json +16 -0
  49. package/servers/region-picker/package.json +15 -0
  50. package/src/app.js +1007 -0
  51. package/src/copy-tpl.js +77 -0
  52. package/src/lib/accelerator-validator.js +39 -0
  53. package/src/lib/asset-manager.js +385 -0
  54. package/src/lib/aws-profile-parser.js +181 -0
  55. package/src/lib/bootstrap-command-handler.js +1647 -0
  56. package/src/lib/bootstrap-config.js +238 -0
  57. package/src/lib/ci-register-helpers.js +124 -0
  58. package/src/lib/ci-report-helpers.js +158 -0
  59. package/src/lib/ci-stage-helpers.js +268 -0
  60. package/src/lib/cli-handler.js +529 -0
  61. package/src/lib/comment-generator.js +544 -0
  62. package/src/lib/community-reports-validator.js +91 -0
  63. package/src/lib/config-manager.js +2106 -0
  64. package/src/lib/configuration-exporter.js +204 -0
  65. package/src/lib/configuration-manager.js +695 -0
  66. package/src/lib/configuration-matcher.js +221 -0
  67. package/src/lib/cpu-validator.js +36 -0
  68. package/src/lib/cuda-validator.js +57 -0
  69. package/src/lib/deployment-config-resolver.js +103 -0
  70. package/src/lib/deployment-entry-schema.js +125 -0
  71. package/src/lib/deployment-registry.js +598 -0
  72. package/src/lib/docker-introspection-validator.js +51 -0
  73. package/src/lib/engine-prefix-resolver.js +60 -0
  74. package/src/lib/huggingface-client.js +172 -0
  75. package/src/lib/key-value-parser.js +37 -0
  76. package/src/lib/known-flags-validator.js +200 -0
  77. package/src/lib/manifest-cli.js +280 -0
  78. package/src/lib/mcp-client.js +303 -0
  79. package/src/lib/mcp-command-handler.js +532 -0
  80. package/src/lib/neuron-validator.js +80 -0
  81. package/src/lib/parameter-schema-validator.js +284 -0
  82. package/src/lib/prompt-runner.js +1349 -0
  83. package/src/lib/prompts.js +1138 -0
  84. package/src/lib/registry-command-handler.js +519 -0
  85. package/src/lib/registry-loader.js +198 -0
  86. package/src/lib/rocm-validator.js +80 -0
  87. package/src/lib/schema-validator.js +157 -0
  88. package/src/lib/sensitive-redactor.js +59 -0
  89. package/src/lib/template-engine.js +156 -0
  90. package/src/lib/template-manager.js +341 -0
  91. package/src/lib/validation-engine.js +314 -0
  92. package/src/prompt-adapter.js +63 -0
  93. package/templates/Dockerfile +300 -0
  94. package/templates/IAM_PERMISSIONS.md +84 -0
  95. package/templates/MIGRATION.md +488 -0
  96. package/templates/PROJECT_README.md +439 -0
  97. package/templates/TEMPLATE_SYSTEM.md +243 -0
  98. package/templates/buildspec.yml +64 -0
  99. package/templates/code/chat_template.jinja +1 -0
  100. package/templates/code/flask/gunicorn_config.py +35 -0
  101. package/templates/code/flask/wsgi.py +10 -0
  102. package/templates/code/model_handler.py +387 -0
  103. package/templates/code/serve +300 -0
  104. package/templates/code/serve.py +175 -0
  105. package/templates/code/serving.properties +105 -0
  106. package/templates/code/start_server.py +39 -0
  107. package/templates/code/start_server.sh +39 -0
  108. package/templates/diffusors/Dockerfile +72 -0
  109. package/templates/diffusors/patch_image_api.py +35 -0
  110. package/templates/diffusors/serve +115 -0
  111. package/templates/diffusors/start_server.sh +114 -0
  112. package/templates/do/.gitkeep +1 -0
  113. package/templates/do/README.md +541 -0
  114. package/templates/do/build +83 -0
  115. package/templates/do/ci +681 -0
  116. package/templates/do/clean +811 -0
  117. package/templates/do/config +260 -0
  118. package/templates/do/deploy +1560 -0
  119. package/templates/do/export +306 -0
  120. package/templates/do/logs +319 -0
  121. package/templates/do/manifest +12 -0
  122. package/templates/do/push +119 -0
  123. package/templates/do/register +580 -0
  124. package/templates/do/run +113 -0
  125. package/templates/do/submit +417 -0
  126. package/templates/do/test +1147 -0
  127. package/templates/hyperpod/configmap.yaml +24 -0
  128. package/templates/hyperpod/deployment.yaml +71 -0
  129. package/templates/hyperpod/pvc.yaml +42 -0
  130. package/templates/hyperpod/service.yaml +17 -0
  131. package/templates/nginx-diffusors.conf +74 -0
  132. package/templates/nginx-predictors.conf +47 -0
  133. package/templates/nginx-tensorrt.conf +74 -0
  134. package/templates/requirements.txt +61 -0
  135. package/templates/sample_model/test_inference.py +123 -0
  136. package/templates/sample_model/train_abalone.py +252 -0
  137. package/templates/test/test_endpoint.sh +79 -0
  138. package/templates/test/test_local_image.sh +80 -0
  139. package/templates/test/test_model_handler.py +180 -0
  140. package/templates/triton/Dockerfile +128 -0
  141. package/templates/triton/config.pbtxt +163 -0
  142. package/templates/triton/model.py +130 -0
  143. package/templates/triton/requirements.txt +11 -0
@@ -0,0 +1,46 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /**
5
+ * Custom value validation patterns for MCP servers.
6
+ * Each server defines a regex pattern and validation function
7
+ * for user-provided custom values.
8
+ */
9
+
10
+ export const CUSTOM_VALIDATORS = {
11
+ 'base-image-picker': {
12
+ pattern: /^[a-zA-Z0-9][a-zA-Z0-9._\-\/]*(:[a-zA-Z0-9._\-]+)?$/,
13
+ validate(value) {
14
+ if (!value || value.trim() === '') return 'Value is required'
15
+ if (!this.pattern.test(value.trim())) return 'Invalid image format. Expected: [registry/]repository[:tag]'
16
+ return true
17
+ },
18
+ errorMessage: 'Invalid image format. Expected: [registry/]repository[:tag]'
19
+ },
20
+ 'instance-recommender': {
21
+ pattern: /^ml\.[a-z0-9]+\.[a-z0-9]+$/,
22
+ validate(value) {
23
+ if (!value || value.trim() === '') return 'Value is required'
24
+ if (!this.pattern.test(value.trim())) return 'Invalid instance type. Expected: ml.<family>.<size>'
25
+ return true
26
+ },
27
+ errorMessage: 'Invalid instance type. Expected: ml.<family>.<size>'
28
+ },
29
+ 'region-picker': {
30
+ pattern: /^[a-z]{2,4}-[a-z]+-\d+$/,
31
+ validate(value) {
32
+ if (!value || value.trim() === '') return 'Value is required'
33
+ if (!this.pattern.test(value.trim())) return 'Invalid region code. Expected: <partition>-<geo>-<number>'
34
+ return true
35
+ },
36
+ errorMessage: 'Invalid region code. Expected: <partition>-<geo>-<number>'
37
+ },
38
+ 'hyperpod-cluster-picker': {
39
+ pattern: /^.+$/,
40
+ validate(value) {
41
+ if (!value || value.trim() === '') return 'Cluster name is required'
42
+ return true
43
+ },
44
+ errorMessage: 'Cluster name is required'
45
+ }
46
+ }
@@ -0,0 +1,36 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /**
5
+ * DynamicResolver — abstract base class for all dynamic data resolvers.
6
+ *
7
+ * Subclasses implement `fetch()` to retrieve data from an external source
8
+ * (registry API, AWS API, etc.) and `supportedKeys()` to declare which
9
+ * identifiers they handle.
10
+ *
11
+ * Concrete implementations:
12
+ * - ImageResolver (base-image-picker) — fetches container images
13
+ * - ClusterResolver (hyperpod-cluster-picker) — fetches HyperPod clusters
14
+ */
15
+ class DynamicResolver {
16
+ /**
17
+ * Fetch data for a given key.
18
+ *
19
+ * @param {string} key - The identifier to resolve (e.g., framework name, cluster filter)
20
+ * @param {object} [options] - Resolver-specific options (limit, timeout, etc.)
21
+ * @returns {Promise<{items: object[], defaultItem: *|null}>}
22
+ */
23
+ async fetch(key, options = {}) {
24
+ throw new Error('fetch() must be implemented by subclass')
25
+ }
26
+
27
+ /**
28
+ * Returns the list of keys this resolver can handle.
29
+ * @returns {string[]}
30
+ */
31
+ supportedKeys() {
32
+ throw new Error('supportedKeys() must be implemented by subclass')
33
+ }
34
+ }
35
+
36
+ export { DynamicResolver }
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "@amzn/ml-container-creator-lib",
3
+ "private": true,
4
+ "version": "1.0.0",
5
+ "description": "Shared library for ML Container Creator bundled MCP servers. Provides a reusable Bedrock client for context-aware recommendations.",
6
+ "type": "module",
7
+ "license": "Apache-2.0",
8
+ "dependencies": {
9
+ "@aws-sdk/client-bedrock-runtime": "^3.700.0"
10
+ }
11
+ }
@@ -0,0 +1,185 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "image-catalog.schema.json",
4
+ "definitions": {
5
+ "imageEntry": {
6
+ "type": "object",
7
+ "required": [
8
+ "image",
9
+ "tag",
10
+ "architecture",
11
+ "created",
12
+ "labels",
13
+ "registry",
14
+ "repository"
15
+ ],
16
+ "properties": {
17
+ "image": {
18
+ "type": "string",
19
+ "minLength": 1
20
+ },
21
+ "tag": {
22
+ "type": "string",
23
+ "minLength": 1
24
+ },
25
+ "architecture": {
26
+ "type": "string",
27
+ "enum": [
28
+ "amd64",
29
+ "arm64"
30
+ ]
31
+ },
32
+ "created": {
33
+ "type": "string",
34
+ "format": "date-time"
35
+ },
36
+ "labels": {
37
+ "type": "object",
38
+ "additionalProperties": {
39
+ "type": "string"
40
+ }
41
+ },
42
+ "registry": {
43
+ "type": "string",
44
+ "enum": [
45
+ "dockerhub",
46
+ "ngc",
47
+ "ecr",
48
+ "ecr-public"
49
+ ]
50
+ },
51
+ "repository": {
52
+ "type": "string",
53
+ "minLength": 1
54
+ },
55
+ "defaults": {
56
+ "type": "object",
57
+ "properties": {
58
+ "envVars": {
59
+ "type": "object",
60
+ "additionalProperties": {
61
+ "type": "string"
62
+ }
63
+ },
64
+ "inferenceAmiVersion": {
65
+ "type": "string"
66
+ },
67
+ "recommendedInstanceTypes": {
68
+ "type": "array",
69
+ "items": {
70
+ "type": "string"
71
+ }
72
+ }
73
+ },
74
+ "additionalProperties": false
75
+ },
76
+ "accelerator": {
77
+ "type": "object",
78
+ "required": [
79
+ "type",
80
+ "version",
81
+ "versionRange"
82
+ ],
83
+ "properties": {
84
+ "type": {
85
+ "type": "string",
86
+ "enum": [
87
+ "cuda",
88
+ "neuron",
89
+ "cpu",
90
+ "rocm"
91
+ ]
92
+ },
93
+ "version": {
94
+ "type": "string"
95
+ },
96
+ "versionRange": {
97
+ "type": "object",
98
+ "required": [
99
+ "min",
100
+ "max"
101
+ ],
102
+ "properties": {
103
+ "min": {
104
+ "type": "string"
105
+ },
106
+ "max": {
107
+ "type": "string"
108
+ }
109
+ },
110
+ "additionalProperties": false
111
+ }
112
+ },
113
+ "additionalProperties": false
114
+ },
115
+ "validationLevel": {
116
+ "type": "string",
117
+ "enum": [
118
+ "tested",
119
+ "community-validated",
120
+ "experimental",
121
+ "untested"
122
+ ]
123
+ },
124
+ "profiles": {
125
+ "type": "object",
126
+ "additionalProperties": {
127
+ "type": "object",
128
+ "required": [
129
+ "displayName",
130
+ "description"
131
+ ],
132
+ "properties": {
133
+ "displayName": {
134
+ "type": "string"
135
+ },
136
+ "description": {
137
+ "type": "string"
138
+ },
139
+ "envVars": {
140
+ "type": "object",
141
+ "additionalProperties": {
142
+ "type": "string"
143
+ }
144
+ },
145
+ "recommendedInstanceTypes": {
146
+ "type": "array",
147
+ "items": {
148
+ "type": "string"
149
+ }
150
+ },
151
+ "notes": {
152
+ "type": "string"
153
+ }
154
+ },
155
+ "additionalProperties": false
156
+ }
157
+ },
158
+ "notes": {
159
+ "type": "string"
160
+ }
161
+ },
162
+ "additionalProperties": false
163
+ }
164
+ },
165
+ "oneOf": [
166
+ {
167
+ "type": "array",
168
+ "minItems": 1,
169
+ "items": {
170
+ "$ref": "#/definitions/imageEntry"
171
+ }
172
+ },
173
+ {
174
+ "type": "object",
175
+ "minProperties": 1,
176
+ "additionalProperties": {
177
+ "type": "array",
178
+ "minItems": 1,
179
+ "items": {
180
+ "$ref": "#/definitions/imageEntry"
181
+ }
182
+ }
183
+ }
184
+ ]
185
+ }
@@ -0,0 +1,124 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": [
5
+ "catalog",
6
+ "recommendations"
7
+ ],
8
+ "properties": {
9
+ "catalog": {
10
+ "type": "object",
11
+ "minProperties": 1,
12
+ "additionalProperties": {
13
+ "type": "object",
14
+ "required": [
15
+ "category",
16
+ "gpus",
17
+ "vcpus",
18
+ "memGb",
19
+ "accelerator",
20
+ "cudaVersions",
21
+ "tags"
22
+ ],
23
+ "properties": {
24
+ "category": {
25
+ "type": "string",
26
+ "enum": [
27
+ "cpu",
28
+ "gpu"
29
+ ]
30
+ },
31
+ "gpus": {
32
+ "type": "integer",
33
+ "minimum": 0
34
+ },
35
+ "vcpus": {
36
+ "type": "integer",
37
+ "minimum": 1
38
+ },
39
+ "memGb": {
40
+ "type": "number",
41
+ "minimum": 0
42
+ },
43
+ "accelerator": {
44
+ "type": "string"
45
+ },
46
+ "cudaVersions": {
47
+ "oneOf": [
48
+ {
49
+ "type": "array",
50
+ "items": {
51
+ "type": "string"
52
+ }
53
+ },
54
+ {
55
+ "type": "null"
56
+ }
57
+ ]
58
+ },
59
+ "tags": {
60
+ "type": "array",
61
+ "items": {
62
+ "type": "string"
63
+ }
64
+ },
65
+ "family": {
66
+ "type": "string"
67
+ },
68
+ "acceleratorType": {
69
+ "type": "string",
70
+ "enum": [
71
+ "cuda",
72
+ "neuron",
73
+ "cpu",
74
+ "rocm"
75
+ ]
76
+ },
77
+ "hardware": {
78
+ "type": "string"
79
+ },
80
+ "gpuArchitecture": {
81
+ "type": "string"
82
+ },
83
+ "defaultCudaVersion": {
84
+ "oneOf": [
85
+ {
86
+ "type": "string"
87
+ },
88
+ {
89
+ "type": "null"
90
+ }
91
+ ]
92
+ },
93
+ "notes": {
94
+ "type": "string"
95
+ }
96
+ },
97
+ "additionalProperties": false
98
+ }
99
+ },
100
+ "recommendations": {
101
+ "type": "object",
102
+ "required": [
103
+ "cpu",
104
+ "gpu"
105
+ ],
106
+ "properties": {
107
+ "cpu": {
108
+ "type": "array",
109
+ "items": {
110
+ "type": "string"
111
+ }
112
+ },
113
+ "gpu": {
114
+ "type": "array",
115
+ "items": {
116
+ "type": "string"
117
+ }
118
+ }
119
+ },
120
+ "additionalProperties": false
121
+ }
122
+ },
123
+ "additionalProperties": false
124
+ }
@@ -0,0 +1,64 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "required": [
5
+ "name",
6
+ "version",
7
+ "description",
8
+ "modes",
9
+ "catalogs",
10
+ "tool"
11
+ ],
12
+ "properties": {
13
+ "name": {
14
+ "type": "string",
15
+ "minLength": 1
16
+ },
17
+ "version": {
18
+ "type": "string",
19
+ "pattern": "^\\d+\\.\\d+\\.\\d+"
20
+ },
21
+ "description": {
22
+ "type": "string"
23
+ },
24
+ "modes": {
25
+ "type": "object",
26
+ "required": [
27
+ "static",
28
+ "smart",
29
+ "discover"
30
+ ],
31
+ "properties": {
32
+ "static": {
33
+ "type": "boolean"
34
+ },
35
+ "smart": {
36
+ "type": "boolean"
37
+ },
38
+ "discover": {
39
+ "type": "boolean"
40
+ }
41
+ },
42
+ "additionalProperties": false
43
+ },
44
+ "catalogs": {
45
+ "type": "object",
46
+ "additionalProperties": {
47
+ "type": "string"
48
+ }
49
+ },
50
+ "tool": {
51
+ "type": "object",
52
+ "required": [
53
+ "name"
54
+ ],
55
+ "properties": {
56
+ "name": {
57
+ "type": "string"
58
+ }
59
+ },
60
+ "additionalProperties": false
61
+ }
62
+ },
63
+ "additionalProperties": false
64
+ }
@@ -0,0 +1,91 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "model-catalog.schema.json",
4
+ "type": "object",
5
+ "minProperties": 1,
6
+ "additionalProperties": {
7
+ "type": "object",
8
+ "required": [
9
+ "family",
10
+ "chat_template",
11
+ "gated",
12
+ "tags",
13
+ "architecture",
14
+ "framework_compatibility",
15
+ "validation_level",
16
+ "notes"
17
+ ],
18
+ "properties": {
19
+ "family": {
20
+ "type": "string"
21
+ },
22
+ "chat_template": {
23
+ "oneOf": [
24
+ { "type": "string" },
25
+ { "type": "null" }
26
+ ]
27
+ },
28
+ "gated": {
29
+ "type": "boolean"
30
+ },
31
+ "tags": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "string"
35
+ }
36
+ },
37
+ "architecture": {
38
+ "oneOf": [
39
+ { "type": "string" },
40
+ { "type": "null" }
41
+ ]
42
+ },
43
+ "framework_compatibility": {
44
+ "type": "object",
45
+ "additionalProperties": {
46
+ "type": "string"
47
+ }
48
+ },
49
+ "validation_level": {
50
+ "type": "string",
51
+ "enum": [
52
+ "tested",
53
+ "community-validated",
54
+ "experimental",
55
+ "untested"
56
+ ]
57
+ },
58
+ "notes": {
59
+ "type": "string"
60
+ },
61
+ "profiles": {
62
+ "type": "object",
63
+ "additionalProperties": {
64
+ "type": "object",
65
+ "required": [
66
+ "displayName"
67
+ ],
68
+ "properties": {
69
+ "displayName": {
70
+ "type": "string"
71
+ },
72
+ "envVars": {
73
+ "type": "object",
74
+ "additionalProperties": {
75
+ "type": "string"
76
+ }
77
+ },
78
+ "recommendedInstanceTypes": {
79
+ "type": "array",
80
+ "items": {
81
+ "type": "string"
82
+ }
83
+ }
84
+ },
85
+ "additionalProperties": false
86
+ }
87
+ }
88
+ },
89
+ "additionalProperties": false
90
+ }
91
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "array",
4
+ "minItems": 1,
5
+ "items": {
6
+ "type": "object",
7
+ "required": [
8
+ "code",
9
+ "labels"
10
+ ],
11
+ "properties": {
12
+ "code": {
13
+ "type": "string",
14
+ "pattern": "^[a-z]{2,4}-[a-z]+-\\d+$"
15
+ },
16
+ "labels": {
17
+ "type": "array",
18
+ "minItems": 1,
19
+ "items": {
20
+ "type": "string"
21
+ }
22
+ }
23
+ },
24
+ "additionalProperties": false
25
+ }
26
+ }
@@ -0,0 +1,51 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "triton-backends.schema.json",
4
+ "type": "object",
5
+ "minProperties": 1,
6
+ "additionalProperties": {
7
+ "type": "object",
8
+ "required": [
9
+ "requiresGpu",
10
+ "modelFormats",
11
+ "modelArtifactName",
12
+ "requiresModelName",
13
+ "supportsSampleModel"
14
+ ],
15
+ "properties": {
16
+ "requiresGpu": {
17
+ "type": "boolean"
18
+ },
19
+ "modelFormats": {
20
+ "oneOf": [
21
+ {
22
+ "type": "array",
23
+ "items": {
24
+ "type": "string"
25
+ }
26
+ },
27
+ {
28
+ "type": "null"
29
+ }
30
+ ]
31
+ },
32
+ "modelArtifactName": {
33
+ "oneOf": [
34
+ {
35
+ "type": "string"
36
+ },
37
+ {
38
+ "type": "null"
39
+ }
40
+ ]
41
+ },
42
+ "requiresModelName": {
43
+ "type": "boolean"
44
+ },
45
+ "supportsSampleModel": {
46
+ "type": "boolean"
47
+ }
48
+ },
49
+ "additionalProperties": false
50
+ }
51
+ }