@zhuoyuezs/ml-platform 0.2.4 → 0.2.5
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.
- package/checksums.json +10 -10
- package/package.json +1 -1
- package/release.json +9 -9
- package/skills/model-deployment-management/SKILL.md +8 -0
- package/skills/model-deployment-management/references/contracts.md +26 -7
- package/skills/model-deployment-management/references/operations.md +24 -0
- package/skills/model-lifecycle-management/SKILL.md +5 -0
- package/skills/model-lifecycle-management/references/packaging.md +29 -0
package/checksums.json
CHANGED
|
@@ -127,8 +127,8 @@
|
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
"path": "skills/model-deployment-management/SKILL.md",
|
|
130
|
-
"sha256": "sha256:
|
|
131
|
-
"size_bytes":
|
|
130
|
+
"sha256": "sha256:e4ec21765e23a02ad86bd6b0c92414eee182d74a9f7032e738711c823478ecfe",
|
|
131
|
+
"size_bytes": 4960
|
|
132
132
|
},
|
|
133
133
|
{
|
|
134
134
|
"path": "skills/model-deployment-management/agents/openai.yaml",
|
|
@@ -137,13 +137,13 @@
|
|
|
137
137
|
},
|
|
138
138
|
{
|
|
139
139
|
"path": "skills/model-deployment-management/references/contracts.md",
|
|
140
|
-
"sha256": "sha256:
|
|
141
|
-
"size_bytes":
|
|
140
|
+
"sha256": "sha256:967d70e1d162ce0f8736683fd82009c7aa4227a309f38de14199469bb3bfe52c",
|
|
141
|
+
"size_bytes": 6722
|
|
142
142
|
},
|
|
143
143
|
{
|
|
144
144
|
"path": "skills/model-deployment-management/references/operations.md",
|
|
145
|
-
"sha256": "sha256:
|
|
146
|
-
"size_bytes":
|
|
145
|
+
"sha256": "sha256:2eb0fb62d971e21bfbdc1f398a5dcb91916dfccec35e7cbfa4a6404799bfdfb3",
|
|
146
|
+
"size_bytes": 6165
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
149
|
"path": "skills/model-deployment-management/references/troubleshooting.md",
|
|
@@ -152,8 +152,8 @@
|
|
|
152
152
|
},
|
|
153
153
|
{
|
|
154
154
|
"path": "skills/model-lifecycle-management/SKILL.md",
|
|
155
|
-
"sha256": "sha256:
|
|
156
|
-
"size_bytes":
|
|
155
|
+
"sha256": "sha256:785219483f917d83d9a371772ea107dc03ddf024a0c4bd098711c4689c5c2ce4",
|
|
156
|
+
"size_bytes": 5718
|
|
157
157
|
},
|
|
158
158
|
{
|
|
159
159
|
"path": "skills/model-lifecycle-management/agents/openai.yaml",
|
|
@@ -172,8 +172,8 @@
|
|
|
172
172
|
},
|
|
173
173
|
{
|
|
174
174
|
"path": "skills/model-lifecycle-management/references/packaging.md",
|
|
175
|
-
"sha256": "sha256:
|
|
176
|
-
"size_bytes":
|
|
175
|
+
"sha256": "sha256:d090fa9df9db106eae98b0e961038a234768a124e4804cef2f86cb85550b2108",
|
|
176
|
+
"size_bytes": 7718
|
|
177
177
|
},
|
|
178
178
|
{
|
|
179
179
|
"path": "skills/model-lifecycle-management/references/training-contracts.md",
|
package/package.json
CHANGED
package/release.json
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"ml_data_platform.feature_set/v1",
|
|
26
26
|
"ml_data_platform.dataset_manifest/v1"
|
|
27
27
|
],
|
|
28
|
-
"release_version": "0.2.
|
|
28
|
+
"release_version": "0.2.5",
|
|
29
29
|
"runtime_requirements": {
|
|
30
30
|
"node": ">=18",
|
|
31
31
|
"os": [
|
|
@@ -38,33 +38,33 @@
|
|
|
38
38
|
"data-source-exploration": {
|
|
39
39
|
"path": "skills/data-source-exploration",
|
|
40
40
|
"requires_cli": ">=0.8.5 <0.9.0",
|
|
41
|
-
"revision": "0.2.
|
|
41
|
+
"revision": "0.2.5",
|
|
42
42
|
"sha256": "sha256:6cb1cad3e9531e5098582c532288edd9838c2acab2b324794ec99d2550418f32"
|
|
43
43
|
},
|
|
44
44
|
"feature-management": {
|
|
45
45
|
"path": "skills/feature-management",
|
|
46
46
|
"requires_cli": ">=0.8.5 <0.9.0",
|
|
47
|
-
"revision": "0.2.
|
|
47
|
+
"revision": "0.2.5",
|
|
48
48
|
"sha256": "sha256:6dfa708172c3b5b23af75997c82a6d43bc2eb8ca67cc2275c8b95022455b0c42"
|
|
49
49
|
},
|
|
50
50
|
"model-deployment-management": {
|
|
51
51
|
"path": "skills/model-deployment-management",
|
|
52
52
|
"requires_cli": ">=0.8.5 <0.9.0",
|
|
53
|
-
"revision": "0.2.
|
|
54
|
-
"sha256": "sha256:
|
|
53
|
+
"revision": "0.2.5",
|
|
54
|
+
"sha256": "sha256:5be65bc4c7b4d81297cc27dfd298c5970efd4230c144ca5289a09344ca2a66ee"
|
|
55
55
|
},
|
|
56
56
|
"model-lifecycle-management": {
|
|
57
57
|
"path": "skills/model-lifecycle-management",
|
|
58
58
|
"requires_cli": ">=0.8.5 <0.9.0",
|
|
59
|
-
"revision": "0.2.
|
|
60
|
-
"sha256": "sha256:
|
|
59
|
+
"revision": "0.2.5",
|
|
60
|
+
"sha256": "sha256:c268653c6520426f84ceaf7e1cf190708bdee5a2ad72018e4201da6f2d2a1a08"
|
|
61
61
|
},
|
|
62
62
|
"prediction-report-management": {
|
|
63
63
|
"path": "skills/prediction-report-management",
|
|
64
64
|
"requires_cli": ">=0.8.5 <0.9.0",
|
|
65
|
-
"revision": "0.2.
|
|
65
|
+
"revision": "0.2.5",
|
|
66
66
|
"sha256": "sha256:3a6991eec5cfa6bf30eaf43295f0c7d5c1e70e4f638904dfde1be2a39965d64f"
|
|
67
67
|
}
|
|
68
68
|
},
|
|
69
|
-
"source_commit": "
|
|
69
|
+
"source_commit": "710dd6d1a923ad8fdec4144a928947c8bcda2fa9"
|
|
70
70
|
}
|
|
@@ -52,11 +52,19 @@ deployment does not reach `READY` or an operation is rejected.
|
|
|
52
52
|
`NodePort` value creates one deployment-level direct Serving Service that
|
|
53
53
|
follows the current revision; it does not replace validation, approval,
|
|
54
54
|
rollout, READY gates, or audit history.
|
|
55
|
+
- Set `service_exposure.type=Ingress` to reuse the environment's existing
|
|
56
|
+
ingress-nginx controller while keeping the model Service as ClusterIP. The
|
|
57
|
+
observed `ingress` endpoint contains the stable path and URL template. This
|
|
58
|
+
option does not install a Gateway controller or configure authentication.
|
|
55
59
|
- Every model Serving process publishes that model's Swagger UI at `/docs`,
|
|
56
60
|
OpenAPI JSON at `/openapi.json`, and ReDoc at `/redoc`. The document embeds
|
|
57
61
|
the deployed artifact identity and its actual input modes, ordered columns,
|
|
58
62
|
horizon semantics, known-future contract, and output schema. These are model
|
|
59
63
|
data-plane documents, not the control-plane API documentation.
|
|
64
|
+
- For context packages with an explicit `availability_boundary`, verify
|
|
65
|
+
`lineage.visibility` as described in [references/operations.md](references/operations.md).
|
|
66
|
+
Configure the boundary when packaging; prediction callers still send only
|
|
67
|
+
`cutoff_time`.
|
|
60
68
|
- Never create, modify, or delete NetworkPolicy. Cluster operators own that
|
|
61
69
|
boundary.
|
|
62
70
|
|
|
@@ -81,13 +81,32 @@ reports the assigned value. An explicit value must be in `30000..32767`.
|
|
|
81
81
|
known to be reachable by callers. Without it, the endpoint returns a URL
|
|
82
82
|
template rather than claiming external reachability.
|
|
83
83
|
|
|
84
|
+
Set `type=Ingress` to reuse an existing ingress-nginx controller while keeping
|
|
85
|
+
the stable model Service as ClusterIP. The default external path is
|
|
86
|
+
`/models/{service}`. `host` adds an HTTP Host rule,
|
|
87
|
+
`advertised_host` supplies the host used in the observed URL, `path_prefix`
|
|
88
|
+
overrides the default path, and `ingress_class_name` defaults to `nginx`.
|
|
89
|
+
Without `host` or `advertised_host`, the endpoint returns a path URL template
|
|
90
|
+
and the caller must supply the environment's ingress address. `advertised_host`
|
|
91
|
+
may include the ingress entry port. `host` must be a DNS hostname, while IP
|
|
92
|
+
access uses `advertised_host` with no Host rule. `path_prefix` is a non-root
|
|
93
|
+
literal path; regex expressions and traversal segments are rejected. Ingress routing
|
|
94
|
+
strips the external prefix and preserves the Serving `/v1/*` and `/docs` paths; this contract does
|
|
95
|
+
not configure authentication. Because `environment` is not part of the default public path,
|
|
96
|
+
same-service deployments in multiple environments must use different Hosts or explicit
|
|
97
|
+
`path_prefix` values when they share an ingress entry.
|
|
98
|
+
|
|
99
|
+
The Serving entrypoint receives an ASGI root path for Swagger and OpenAPI server
|
|
100
|
+
URLs. Older Serving images still support rewritten inference requests; prefix-aware
|
|
101
|
+
documentation requires an updated Serving runtime. Training images do not need
|
|
102
|
+
to change for this exposure option.
|
|
103
|
+
|
|
84
104
|
The controller keeps preview, stable, and canary Services as ClusterIP for
|
|
85
|
-
verification and Gateway traffic. NodePort exposure uses one fixed-name Service
|
|
86
|
-
per
|
|
87
|
-
READY gates. Retained revisions
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
ports, their values must not collide while both deployments exist.
|
|
105
|
+
verification and Gateway or Ingress traffic. NodePort exposure uses one fixed-name Service
|
|
106
|
+
per service/environment and creates or updates it only after the revision passes all
|
|
107
|
+
READY gates. Retained revisions and replacement deployments share the Service;
|
|
108
|
+
staging verification uses a separate preview Service before switching the shared
|
|
109
|
+
selector, so an explicit NodePort is not allocated twice.
|
|
91
110
|
|
|
92
111
|
## Revision State
|
|
93
112
|
|
|
@@ -109,7 +128,7 @@ revision passed all READY gates.
|
|
|
109
128
|
|
|
110
129
|
Each endpoint advertises `inference_path=/v1/inference`, `docs_url`,
|
|
111
130
|
`openapi_url`, and `redoc_url`. When no reviewed host is available, the
|
|
112
|
-
NodePort endpoint returns corresponding URL templates instead. The Serving
|
|
131
|
+
NodePort or Ingress endpoint returns corresponding URL templates instead. The Serving
|
|
113
132
|
OpenAPI document is generated for the deployed ModelArtifact and embeds the
|
|
114
133
|
effective model contract; it is not a generic platform API schema.
|
|
115
134
|
|
|
@@ -60,6 +60,18 @@ deployed model. NodePort network reachability remains an environment concern;
|
|
|
60
60
|
do not report it as reachable unless `advertised_host` was reviewed and the
|
|
61
61
|
client can connect.
|
|
62
62
|
|
|
63
|
+
For an ingress-backed ClusterIP deployment, read the observed `ingress`
|
|
64
|
+
endpoint after `READY` and use its base URL:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
curl http://<ingress-host>/models/<service>/v1/model
|
|
68
|
+
curl http://<ingress-host>/models/<service>/openapi.json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
When `host` is configured separately from `advertised_host`, send the declared
|
|
72
|
+
HTTP `Host` header. The platform does not configure authentication for this
|
|
73
|
+
exposure mode.
|
|
74
|
+
|
|
63
75
|
## Promotion And Approval
|
|
64
76
|
|
|
65
77
|
```bash
|
|
@@ -145,6 +157,18 @@ ml-platform --profile server predict-deployment <deployment-id> \
|
|
|
145
157
|
/absolute/path/request.json
|
|
146
158
|
```
|
|
147
159
|
|
|
160
|
+
For a package with an explicit `availability_boundary`, inspect
|
|
161
|
+
`lineage.visibility` in the prediction response. It records the package's
|
|
162
|
+
boundary, `cutoff_time`, `attempt_started_at`, `knowledge_time`,
|
|
163
|
+
`read_started_at`, and `read_completed_at`. In `request_time` mode,
|
|
164
|
+
`knowledge_time` equals `attempt_started_at`; in `cutoff_time` mode it equals
|
|
165
|
+
the request cutoff. Check that the source's `available_at` evidence is no later
|
|
166
|
+
than `knowledge_time`, that the event-time context ends at the requested
|
|
167
|
+
cutoff, and that there are no missing or non-finite model inputs. The caller
|
|
168
|
+
does not supply `request_time`: each retrieval attempt receives a new time at
|
|
169
|
+
the API. A historical cutoff in `request_time` mode is therefore a current
|
|
170
|
+
read of historical events, not a historical replay.
|
|
171
|
+
|
|
148
172
|
Prediction is allowed only for a current `READY` revision with all readiness
|
|
149
173
|
conditions true. This command uses the control-plane proxy and does not require
|
|
150
174
|
a cluster-local Serving URL.
|
|
@@ -14,6 +14,11 @@ DatasetArtifact -> TrainingRun -> TrainingJob -> ModelArtifact
|
|
|
14
14
|
|
|
15
15
|
Read [references/training.md](references/training.md) for training work, [references/evaluation.md](references/evaluation.md) for governed evaluation, and [references/packaging.md](references/packaging.md) for ModelArtifact validation and packaging. Read only the references required by the request.
|
|
16
16
|
|
|
17
|
+
For late-arriving context observations, read the package-bound
|
|
18
|
+
`availability_boundary` guidance in [references/packaging.md](references/packaging.md).
|
|
19
|
+
The caller supplies one cutoff; the package chooses strict cutoff visibility or
|
|
20
|
+
visibility at the actual retrieval attempt.
|
|
21
|
+
|
|
17
22
|
Read [references/discovery.md](references/discovery.md) before locating existing
|
|
18
23
|
resources or selecting runtime bindings. It also defines Job/package preflight
|
|
19
24
|
and version-skew handling.
|
|
@@ -90,6 +90,35 @@ not namespace Secret/ConfigMap settings:
|
|
|
90
90
|
}
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
+
This option applies to `feature_retrieval.request.mode=context`; row retrieval
|
|
94
|
+
and known-future covariate reads retain their cutoff visibility rules.
|
|
95
|
+
For a context model whose event-time cutoff can precede the arrival of its
|
|
96
|
+
last observation, set `feature_retrieval.availability_boundary` explicitly in
|
|
97
|
+
the new package request:
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
"availability_boundary": "request_time"
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
The caller still sends only `cutoff_time`. This remains the end of the model's
|
|
104
|
+
event-time context; the API records the start of each actual retrieval attempt
|
|
105
|
+
as `request_time` and admits only source records with trustworthy
|
|
106
|
+
`available_at <= request_time`. Use this mode when a D 00:00 observation may
|
|
107
|
+
arrive at 08:10 and prediction runs after its arrival. Use
|
|
108
|
+
`"availability_boundary": "cutoff_time"` when a replay or decision must
|
|
109
|
+
exclude every record that arrived after the supplied cutoff. Omit the field
|
|
110
|
+
only for an existing package that intentionally retains its legacy contract.
|
|
111
|
+
The platform rejects explicit visibility policies when the source cannot
|
|
112
|
+
provide trustworthy availability timestamps; never replace ingestion times
|
|
113
|
+
with event times or fabricate missing observations.
|
|
114
|
+
|
|
115
|
+
This choice is immutable package identity. Validate and create a new package
|
|
116
|
+
version, then deploy its new Serving image; changing the API image alone does
|
|
117
|
+
not update existing packages. A historical `feature_lookup_test.cutoff_time`
|
|
118
|
+
with `request_time` tests present-day retrieval of old events, not what was
|
|
119
|
+
visible at that historical instant. Use `cutoff_time` mode for historical
|
|
120
|
+
availability replay.
|
|
121
|
+
|
|
93
122
|
The inference DatasetManifest must exist with the supplied hash and use
|
|
94
123
|
`mode=inference`. Its FeatureSet, stable contract signature, adapter/temporal
|
|
95
124
|
hashes, entity keys, and row/context parameters must match the ModelArtifact.
|