@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 CHANGED
@@ -127,8 +127,8 @@
127
127
  },
128
128
  {
129
129
  "path": "skills/model-deployment-management/SKILL.md",
130
- "sha256": "sha256:e8419e4d83031248b40783674813bf3f5a98544f05ea3fbe056547ae47632016",
131
- "size_bytes": 4397
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:de9fd3de8d88179b09108ee0778fb83fbffa304353706a3bbc14ae3d9276ac01",
141
- "size_bytes": 5417
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:b6d8ac126033a1e3b463b53474f0b27d8687e1a7b05eb973d3aad79259838ac6",
146
- "size_bytes": 4968
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:9ad2428621b52a15a83dce34a2a95606d7d979017a227c0aeb8fe5c8acd5faa3",
156
- "size_bytes": 5442
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:1e3c5080fa085255b29223890c333333ee6011326b56f1b2e0b859b0d73d2ec0",
176
- "size_bytes": 6146
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhuoyuezs/ml-platform",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "ML 数据平台 business CLI 与 Agent Skills 管理工具",
5
5
  "bin": {
6
6
  "ml-platform": "scripts/main.js"
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.4",
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.4",
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.4",
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.4",
54
- "sha256": "sha256:d3f3fe0e4a11b93d8f6f57758164aa236b84a49c1b9f0d0b700fd9d6d615a8d7"
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.4",
60
- "sha256": "sha256:8822fbec7037c2312d18b1d18648b60757fc569e6bf5f2856ea41592f3ba987d"
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.4",
65
+ "revision": "0.2.5",
66
66
  "sha256": "sha256:3a6991eec5cfa6bf30eaf43295f0c7d5c1e70e4f638904dfde1be2a39965d64f"
67
67
  }
68
68
  },
69
- "source_commit": "a8bb3f066537b312a7d146b7a9c1bf59484f6f51"
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 DeploymentSpec and creates or updates it only after the revision passes all
87
- READY gates. Retained revisions of that deployment share the Service, while a
88
- replacement deployment receives a different Service so staging cannot rewrite
89
- the existing production route. When replacement deployments request explicit
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.