@camstack/addon-agent-ui 1.2.201 → 1.2.203
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/dist/addon.js +259 -133
- package/dist/assets/{MotionZonesSettings-BJXYnFa0.js → MotionZonesSettings-CXEf83_t.js} +1 -1
- package/dist/assets/{PrivacyMaskSettings-D_3iTBsG.js → PrivacyMaskSettings-ClfVY5Wg.js} +1 -1
- package/dist/assets/{SceneMonitorEditor-CFPC5aeK.js → SceneMonitorEditor-BhWlvYtJ.js} +1 -1
- package/dist/assets/index-BfM2DeRA.css +2 -0
- package/dist/assets/index-CyLl9jp3.js +112 -0
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/index-BlRPXMNQ.js +0 -112
- package/dist/assets/index-C1ReELdO.css +0 -2
package/dist/addon.js
CHANGED
|
@@ -5378,7 +5378,7 @@ var ZodIssueCode = {
|
|
|
5378
5378
|
var ZodFirstPartyTypeKind;
|
|
5379
5379
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5380
5380
|
//#endregion
|
|
5381
|
-
//#region ../types/dist/sleep-
|
|
5381
|
+
//#region ../types/dist/sleep-CI0n5D44.mjs
|
|
5382
5382
|
/**
|
|
5383
5383
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5384
5384
|
* window to float samples (D455).
|
|
@@ -9325,6 +9325,16 @@ var CompositionSchema = object({
|
|
|
9325
9325
|
seen.add(feature.cap);
|
|
9326
9326
|
});
|
|
9327
9327
|
});
|
|
9328
|
+
var NodeColorIdSchema = _enum([
|
|
9329
|
+
"node-a",
|
|
9330
|
+
"node-b",
|
|
9331
|
+
"node-c",
|
|
9332
|
+
"node-d",
|
|
9333
|
+
"node-e",
|
|
9334
|
+
"node-f",
|
|
9335
|
+
"node-g",
|
|
9336
|
+
"node-h"
|
|
9337
|
+
]);
|
|
9328
9338
|
new Set([
|
|
9329
9339
|
"track",
|
|
9330
9340
|
"face",
|
|
@@ -23884,24 +23894,69 @@ var RetrainFrameListSchema = object({
|
|
|
23884
23894
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
23885
23895
|
autoPickMediaId: number().int().optional()
|
|
23886
23896
|
});
|
|
23897
|
+
/** Exclusive partition of a corpus copy's annotation progress (design §4.2). */
|
|
23898
|
+
var RetrainFrameWorkStateSchema = _enum([
|
|
23899
|
+
"unannotated",
|
|
23900
|
+
"annotated",
|
|
23901
|
+
"complete"
|
|
23902
|
+
]);
|
|
23903
|
+
/**
|
|
23904
|
+
* Filters for paginated corpus list, KPI, and matching export (design §4.4).
|
|
23905
|
+
* Every narrowing field is ANDed; omitted fields impose no constraint.
|
|
23906
|
+
*/
|
|
23907
|
+
var RetrainCorpusFilterSchema = object({
|
|
23908
|
+
workState: RetrainFrameWorkStateSchema.optional(),
|
|
23909
|
+
deviceIds: array(number()).max(500).optional(),
|
|
23910
|
+
/** When set, only frames in this named collection. */
|
|
23911
|
+
collectionId: string().optional(),
|
|
23912
|
+
/** Frames that carry at least one saved annotation in one of these classes. */
|
|
23913
|
+
classes: array(RetrainMacroClassSchema).optional(),
|
|
23914
|
+
page: number().int().positive().default(1),
|
|
23915
|
+
pageSize: number().int().positive().max(100).default(50)
|
|
23916
|
+
});
|
|
23917
|
+
var RetrainCorpusPageSchema = object({
|
|
23918
|
+
frames: array(RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema })).readonly(),
|
|
23919
|
+
total: number().int().nonnegative(),
|
|
23920
|
+
page: number().int().positive(),
|
|
23921
|
+
pageSize: number().int().positive()
|
|
23922
|
+
});
|
|
23923
|
+
var RetrainCorpusKpiCameraRowSchema = object({
|
|
23924
|
+
deviceId: number(),
|
|
23925
|
+
unannotated: number().int().nonnegative(),
|
|
23926
|
+
annotated: number().int().nonnegative(),
|
|
23927
|
+
complete: number().int().nonnegative(),
|
|
23928
|
+
/** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
|
|
23929
|
+
* `null` when the corpus is empty (no ratio). */
|
|
23930
|
+
pctOfCorpus: number().min(0).max(1).nullable()
|
|
23931
|
+
});
|
|
23932
|
+
var RetrainCorpusKpiSchema = object({
|
|
23933
|
+
total: number().int().nonnegative(),
|
|
23934
|
+
unannotated: number().int().nonnegative(),
|
|
23935
|
+
annotated: number().int().nonnegative(),
|
|
23936
|
+
complete: number().int().nonnegative(),
|
|
23937
|
+
cameras: array(RetrainCorpusKpiCameraRowSchema).readonly()
|
|
23938
|
+
});
|
|
23887
23939
|
/**
|
|
23888
23940
|
* Which frames an annotated export carries. Every field narrows; an empty
|
|
23889
|
-
* filter is every annotated copy.
|
|
23890
|
-
*
|
|
23891
|
-
*
|
|
23892
|
-
*
|
|
23941
|
+
* filter is every annotated copy. `frameIds` is the primitive a job or
|
|
23942
|
+
* download uses; `batchId` re-selects what an earlier export carried
|
|
23943
|
+
* (`exportedInBatch`). Frozen dataset versions were removed — live selection
|
|
23944
|
+
* resolves to `frameIds` at plan/start.
|
|
23893
23945
|
*/
|
|
23894
23946
|
var RetrainExportFilterSchema = object({
|
|
23895
23947
|
deviceIds: array(number()).optional(),
|
|
23896
23948
|
frameIds: array(string()).max(2e4).optional(),
|
|
23897
23949
|
/** Only frames in at least one of these named collections. */
|
|
23898
23950
|
collectionIds: array(string()).max(200).optional(),
|
|
23899
|
-
/**
|
|
23900
|
-
|
|
23901
|
-
datasetVersionId: string().optional(),
|
|
23951
|
+
/** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
|
|
23952
|
+
collectionId: string().optional(),
|
|
23902
23953
|
batchId: string().optional(),
|
|
23903
23954
|
/** Only frames the operator marked complete (all subjects boxed). */
|
|
23904
|
-
completeOnly: boolean().optional()
|
|
23955
|
+
completeOnly: boolean().optional(),
|
|
23956
|
+
/** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
|
|
23957
|
+
workState: RetrainFrameWorkStateSchema.optional(),
|
|
23958
|
+
/** Frames with at least one saved annotation in one of these classes. */
|
|
23959
|
+
classes: array(RetrainMacroClassSchema).optional()
|
|
23905
23960
|
});
|
|
23906
23961
|
/**
|
|
23907
23962
|
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
@@ -24101,8 +24156,7 @@ var RetrainDatasetStatsSchema = object({
|
|
|
24101
24156
|
completeFrames: number().int()
|
|
24102
24157
|
})).readonly()
|
|
24103
24158
|
});
|
|
24104
|
-
|
|
24105
|
-
var RetrainDatasetVersionSchema = object({
|
|
24159
|
+
object({
|
|
24106
24160
|
id: string(),
|
|
24107
24161
|
name: string(),
|
|
24108
24162
|
createdAt: number(),
|
|
@@ -24110,22 +24164,33 @@ var RetrainDatasetVersionSchema = object({
|
|
|
24110
24164
|
layout: RetrainExportLayoutSchema,
|
|
24111
24165
|
completeOnly: boolean(),
|
|
24112
24166
|
frameCount: number().int(),
|
|
24113
|
-
/** sha256 of what the frames taught when the version was frozen. */
|
|
24114
24167
|
annotationHash: string(),
|
|
24115
|
-
/** The export manifest schema the version was cut under. */
|
|
24116
24168
|
manifestSchema: string(),
|
|
24117
24169
|
stats: RetrainDatasetStatsSchema
|
|
24118
24170
|
});
|
|
24119
|
-
|
|
24120
|
-
|
|
24121
|
-
|
|
24171
|
+
/**
|
|
24172
|
+
* Live training corpus criteria — same shape as `TrainingCorpusSelection` on
|
|
24173
|
+
* the training cap. Resolved here so plan/start and the annotated export share
|
|
24174
|
+
* one definition of "the frames" (`buildRetrainExportPlan`).
|
|
24175
|
+
*/
|
|
24176
|
+
var RetrainTrainingCorpusSelectionSchema = object({
|
|
24177
|
+
collectionIds: array(string()).min(1),
|
|
24178
|
+
workState: _enum([
|
|
24179
|
+
"complete",
|
|
24180
|
+
"annotated_or_complete",
|
|
24181
|
+
"any_annotated"
|
|
24182
|
+
]).default("complete")
|
|
24183
|
+
});
|
|
24184
|
+
var RetrainTrainingCorpusResolveResultSchema = discriminatedUnion("kind", [object({
|
|
24185
|
+
kind: literal("resolved"),
|
|
24186
|
+
frameIds: array(string()).max(2e4).readonly(),
|
|
24187
|
+
stats: RetrainDatasetStatsSchema,
|
|
24188
|
+
annotationHash: string(),
|
|
24189
|
+
layout: RetrainExportLayoutSchema
|
|
24122
24190
|
}), object({
|
|
24123
24191
|
kind: literal("refused"),
|
|
24124
|
-
reason: _enum([
|
|
24125
|
-
|
|
24126
|
-
"duplicate-name",
|
|
24127
|
-
"no-frames"
|
|
24128
|
-
])
|
|
24192
|
+
reason: _enum(["unknown-collection", "no-frames"]),
|
|
24193
|
+
detail: string()
|
|
24129
24194
|
})]);
|
|
24130
24195
|
/** The outcome of a lifecycle move owned by the retrain page. */
|
|
24131
24196
|
var RetrainTransitionResultSchema = object({
|
|
@@ -24832,6 +24897,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
24832
24897
|
}), array(RetrainTrackSchema).readonly(), {
|
|
24833
24898
|
kind: "query",
|
|
24834
24899
|
auth: "admin"
|
|
24900
|
+
}), method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
|
|
24901
|
+
kind: "query",
|
|
24902
|
+
auth: "admin"
|
|
24903
|
+
}), method(object({}), RetrainCorpusKpiSchema, {
|
|
24904
|
+
kind: "query",
|
|
24905
|
+
auth: "admin"
|
|
24835
24906
|
}), method(object({ trackId: string() }), RetrainFrameListSchema, {
|
|
24836
24907
|
kind: "query",
|
|
24837
24908
|
auth: "admin"
|
|
@@ -24927,36 +24998,6 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
24927
24998
|
kind: "mutation",
|
|
24928
24999
|
auth: "admin",
|
|
24929
25000
|
timeoutMs: 12e4
|
|
24930
|
-
}), method(object({
|
|
24931
|
-
selection: RetrainDatasetSelectionSchema,
|
|
24932
|
-
completeOnly: boolean().optional()
|
|
24933
|
-
}), RetrainDatasetStatsSchema, {
|
|
24934
|
-
kind: "query",
|
|
24935
|
-
auth: "admin"
|
|
24936
|
-
}), method(object({
|
|
24937
|
-
name: string().max(120),
|
|
24938
|
-
selection: RetrainDatasetSelectionSchema,
|
|
24939
|
-
layout: RetrainExportLayoutSchema,
|
|
24940
|
-
completeOnly: boolean()
|
|
24941
|
-
}), CreateRetrainDatasetVersionResultSchema, {
|
|
24942
|
-
kind: "mutation",
|
|
24943
|
-
auth: "admin",
|
|
24944
|
-
timeoutMs: 12e4
|
|
24945
|
-
}), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
|
|
24946
|
-
kind: "query",
|
|
24947
|
-
auth: "admin"
|
|
24948
|
-
}), method(object({ id: string() }), object({ deleted: boolean() }), {
|
|
24949
|
-
kind: "mutation",
|
|
24950
|
-
auth: "admin"
|
|
24951
|
-
}), method(object({ id: string() }), object({
|
|
24952
|
-
found: boolean(),
|
|
24953
|
-
annotationHash: string(),
|
|
24954
|
-
matches: boolean(),
|
|
24955
|
-
missingFrames: number().int()
|
|
24956
|
-
}), {
|
|
24957
|
-
kind: "query",
|
|
24958
|
-
auth: "admin",
|
|
24959
|
-
timeoutMs: 12e4
|
|
24960
25001
|
}), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
|
|
24961
25002
|
kind: "query",
|
|
24962
25003
|
auth: "admin"
|
|
@@ -24983,6 +25024,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
24983
25024
|
}), method(object({}), array(RetrainCollectionSchema).readonly(), {
|
|
24984
25025
|
kind: "query",
|
|
24985
25026
|
auth: "admin"
|
|
25027
|
+
}), method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
|
|
25028
|
+
kind: "query",
|
|
25029
|
+
auth: "admin",
|
|
25030
|
+
timeoutMs: 6e4
|
|
24986
25031
|
}), method(object({
|
|
24987
25032
|
id: string(),
|
|
24988
25033
|
name: string().max(120)
|
|
@@ -25599,11 +25644,14 @@ var HardwareClassIdSchema = _enum([
|
|
|
25599
25644
|
"intel-n-series",
|
|
25600
25645
|
"apple-m-base",
|
|
25601
25646
|
"apple-m-pro",
|
|
25647
|
+
"amd-phoenix",
|
|
25602
25648
|
"unknown"
|
|
25603
25649
|
]);
|
|
25604
25650
|
var AcceleratorKindSchema = _enum([
|
|
25605
25651
|
"intel-npu",
|
|
25606
25652
|
"intel-igpu",
|
|
25653
|
+
"amd-igpu",
|
|
25654
|
+
"amd-npu",
|
|
25607
25655
|
"x86-cpu",
|
|
25608
25656
|
"arm-cpu",
|
|
25609
25657
|
"apple-ane",
|
|
@@ -27493,6 +27541,8 @@ var AgentPipelineSettingsSchema = object({
|
|
|
27493
27541
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
27494
27542
|
*/
|
|
27495
27543
|
reachableHost: string().optional(),
|
|
27544
|
+
/** Hub-persisted UI colour (`--color-node-*` theme tokens). */
|
|
27545
|
+
color: NodeColorIdSchema.optional(),
|
|
27496
27546
|
/**
|
|
27497
27547
|
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
27498
27548
|
* weight, steps}. Absent / all-disabled ⇒ the node's single default
|
|
@@ -28042,8 +28092,9 @@ method(object({
|
|
|
28042
28092
|
auth: "admin"
|
|
28043
28093
|
}), method(object({
|
|
28044
28094
|
agentNodeId: string(),
|
|
28045
|
-
reachableHost: string().nullable()
|
|
28046
|
-
|
|
28095
|
+
reachableHost: string().nullable().optional(),
|
|
28096
|
+
color: NodeColorIdSchema.nullable().optional()
|
|
28097
|
+
}).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), object({ success: literal(true) }), {
|
|
28047
28098
|
kind: "mutation",
|
|
28048
28099
|
auth: "admin"
|
|
28049
28100
|
}), method(object({
|
|
@@ -35489,7 +35540,15 @@ var GpuInfoSchema = object({
|
|
|
35489
35540
|
name: string(),
|
|
35490
35541
|
memoryMB: number().optional()
|
|
35491
35542
|
});
|
|
35492
|
-
var NpuInfoSchema = object({
|
|
35543
|
+
var NpuInfoSchema = object({
|
|
35544
|
+
type: _enum([
|
|
35545
|
+
"apple-ane",
|
|
35546
|
+
"intel-npu",
|
|
35547
|
+
"amd-xdna"
|
|
35548
|
+
]),
|
|
35549
|
+
name: string().optional(),
|
|
35550
|
+
generation: _enum(["xdna1", "xdna2"]).optional()
|
|
35551
|
+
});
|
|
35493
35552
|
var CoralInfoSchema = object({
|
|
35494
35553
|
type: literal("coral-edgetpu"),
|
|
35495
35554
|
bus: string().optional()
|
|
@@ -39251,9 +39310,11 @@ DeviceType.Camera, method(object({
|
|
|
39251
39310
|
* once is what makes a second provider (RunPod, a local NVIDIA node) a new
|
|
39252
39311
|
* manifest entry and nothing else.
|
|
39253
39312
|
*
|
|
39254
|
-
* Collection
|
|
39255
|
-
*
|
|
39256
|
-
*
|
|
39313
|
+
* Collection of provider **types** (addons). Each addon owns zero or more
|
|
39314
|
+
* **entries** (credentials + defaults). Concat-fans: `describe`,
|
|
39315
|
+
* `describeTypes`, `listEntries`, `listJobs`. Single-row work is keyed by
|
|
39316
|
+
* `entryId`; callers also pass the owning `addonId` as the collection
|
|
39317
|
+
* selector (broker posture). Every method is `admin`: these spend money.
|
|
39257
39318
|
*
|
|
39258
39319
|
* Every cloud object a provider creates is tagged with the orchestrator's
|
|
39259
39320
|
* `jobKey`, so a retried submit finds the job it already started instead of
|
|
@@ -39277,8 +39338,8 @@ var TrainingRegionOptionSchema = object({
|
|
|
39277
39338
|
priceMultiplier: number().positive()
|
|
39278
39339
|
});
|
|
39279
39340
|
/**
|
|
39280
|
-
* The provider's per-
|
|
39281
|
-
* live
|
|
39341
|
+
* The provider's per-entry settings, as the orchestrator reads them. They
|
|
39342
|
+
* live on the PROVIDER addon's entry (operator decision 2026-10-08: they
|
|
39282
39343
|
* depend on the user's account), never hard-coded in the orchestrator.
|
|
39283
39344
|
*/
|
|
39284
39345
|
var TrainingProviderDefaultsSchema = object({
|
|
@@ -39289,9 +39350,32 @@ var TrainingProviderDefaultsSchema = object({
|
|
|
39289
39350
|
/** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
|
|
39290
39351
|
failedDatasetGraceHours: number().nonnegative()
|
|
39291
39352
|
});
|
|
39353
|
+
/** One creatable provider type, for the Add-entry dialog. */
|
|
39354
|
+
var TrainingProviderTypeSchema = object({
|
|
39355
|
+
typeId: string(),
|
|
39356
|
+
label: string(),
|
|
39357
|
+
/** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
|
|
39358
|
+
iconAsset: string(),
|
|
39359
|
+
/** Owning `training-provider` addon — collection selector for createEntry. */
|
|
39360
|
+
addonId: string()
|
|
39361
|
+
});
|
|
39362
|
+
/** One configured account / workspace under a provider type. */
|
|
39363
|
+
var TrainingProviderEntrySchema = object({
|
|
39364
|
+
entryId: string(),
|
|
39365
|
+
typeId: string(),
|
|
39366
|
+
name: string(),
|
|
39367
|
+
addonId: string(),
|
|
39368
|
+
/** Credentials are present — never the values. */
|
|
39369
|
+
configured: boolean()
|
|
39370
|
+
});
|
|
39292
39371
|
var TrainingProviderDescriptorSchema = object({
|
|
39293
39372
|
addonId: string(),
|
|
39294
|
-
|
|
39373
|
+
entryId: string(),
|
|
39374
|
+
typeId: string(),
|
|
39375
|
+
/** Operator-chosen entry name. */
|
|
39376
|
+
name: string(),
|
|
39377
|
+
iconAsset: string(),
|
|
39378
|
+
/** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
|
|
39295
39379
|
kind: string(),
|
|
39296
39380
|
label: string(),
|
|
39297
39381
|
gpuTypes: array(TrainingGpuOptionSchema).readonly(),
|
|
@@ -39355,20 +39439,30 @@ var TrainerSourceRefSchema = object({
|
|
|
39355
39439
|
/** A commit sha (never a branch) — the job must be reproducible. */
|
|
39356
39440
|
revision: string().regex(/^[0-9a-f]{7,64}$/)
|
|
39357
39441
|
});
|
|
39442
|
+
/** Cloud job identity — route with the owning addon's `addonId` selector. */
|
|
39358
39443
|
var JobRef = {
|
|
39359
|
-
|
|
39444
|
+
entryId: string().min(1),
|
|
39360
39445
|
jobKey: string().uuid()
|
|
39361
39446
|
};
|
|
39362
39447
|
var TrainingLogLineSchema = object({
|
|
39363
39448
|
ts: number(),
|
|
39364
39449
|
text: string()
|
|
39365
39450
|
});
|
|
39366
|
-
method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({
|
|
39451
|
+
method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }), method(object({
|
|
39452
|
+
typeId: string().min(1),
|
|
39453
|
+
name: string().min(1)
|
|
39454
|
+
}), object({ entryId: string() }), {
|
|
39455
|
+
kind: "mutation",
|
|
39456
|
+
auth: "admin"
|
|
39457
|
+
}), method(object({ entryId: string().min(1) }), object({ ok: literal(true) }), {
|
|
39458
|
+
kind: "mutation",
|
|
39459
|
+
auth: "admin"
|
|
39460
|
+
}), method(object({ entryId: string().min(1) }), TrainingCredentialCheckSchema, {
|
|
39367
39461
|
kind: "mutation",
|
|
39368
39462
|
auth: "admin",
|
|
39369
39463
|
timeoutMs: 3e4
|
|
39370
39464
|
}), method(object({
|
|
39371
|
-
|
|
39465
|
+
entryId: string().min(1),
|
|
39372
39466
|
gpuType: string(),
|
|
39373
39467
|
region: string(),
|
|
39374
39468
|
datasetBytes: number().int().nonnegative(),
|
|
@@ -39434,7 +39528,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
|
|
|
39434
39528
|
kind: "mutation",
|
|
39435
39529
|
auth: "admin",
|
|
39436
39530
|
timeoutMs: 5 * 6e4
|
|
39437
|
-
}), method(object({
|
|
39531
|
+
}), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
|
|
39438
39532
|
auth: "admin",
|
|
39439
39533
|
timeoutMs: 2 * 6e4
|
|
39440
39534
|
});
|
|
@@ -39444,20 +39538,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
|
|
|
39444
39538
|
*
|
|
39445
39539
|
* It owns what every provider must agree on, written once:
|
|
39446
39540
|
*
|
|
39447
|
-
* - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
|
|
39448
|
-
* live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
|
|
39449
|
-
* the export plan) and reaches this store through the five row methods
|
|
39450
|
-
* below, so the Retrain page and the export did not change.
|
|
39451
39541
|
* - **Jobs.** A persisted state machine, a reconcile loop against the
|
|
39452
39542
|
* provider, a cost guard, a daily orphan sweep and the retention rules.
|
|
39453
39543
|
* - **The return flow.** Verified artefacts → Model Studio
|
|
39454
39544
|
* (`custom-model-registry.importModelBundle`) → canary on cameras →
|
|
39455
39545
|
* rollback. Nothing is ever registered automatically.
|
|
39456
39546
|
*
|
|
39547
|
+
* Plan/start takes a live {@link TrainingCorpusSelection} (collections +
|
|
39548
|
+
* work-state rule); frame ids are resolved via pipeline-analytics at that
|
|
39549
|
+
* moment and snapshotted on the job. No frozen dataset version.
|
|
39550
|
+
*
|
|
39457
39551
|
* Every method is `admin`.
|
|
39458
39552
|
*/
|
|
39459
|
-
/**
|
|
39460
|
-
|
|
39553
|
+
/**
|
|
39554
|
+
* Live corpus criteria for plan/start (design §5.2). Default is complete-only.
|
|
39555
|
+
* Frame ids are resolved at plan/start — never a frozen version id.
|
|
39556
|
+
*/
|
|
39557
|
+
var TrainingCorpusSelectionSchema = object({
|
|
39558
|
+
collectionIds: array(string()).min(1),
|
|
39559
|
+
/** Default complete-only for v1 */
|
|
39560
|
+
workState: _enum([
|
|
39561
|
+
"complete",
|
|
39562
|
+
"annotated_or_complete",
|
|
39563
|
+
"any_annotated"
|
|
39564
|
+
]).default("complete")
|
|
39565
|
+
});
|
|
39461
39566
|
/** A base model a detector job can fine-tune, and the baseline it is judged against. */
|
|
39462
39567
|
var TrainingBaseModelSchema = object({
|
|
39463
39568
|
modelId: string(),
|
|
@@ -39475,9 +39580,13 @@ var TrainingPresetSchema = _enum([
|
|
|
39475
39580
|
"thorough"
|
|
39476
39581
|
]);
|
|
39477
39582
|
var TrainingJobRequestSchema = object({
|
|
39478
|
-
|
|
39479
|
-
|
|
39480
|
-
|
|
39583
|
+
/** Live collection + work-state criteria; resolved at plan/start. */
|
|
39584
|
+
selection: TrainingCorpusSelectionSchema,
|
|
39585
|
+
/**
|
|
39586
|
+
* The provider **entry** that runs it (credentials + defaults).
|
|
39587
|
+
* Resolve to an owning addon via `training-provider.describe` / `listEntries`.
|
|
39588
|
+
*/
|
|
39589
|
+
entryId: string().min(1),
|
|
39481
39590
|
gpuType: string().min(1),
|
|
39482
39591
|
region: string(),
|
|
39483
39592
|
baseModelId: string().min(1),
|
|
@@ -39536,6 +39645,7 @@ var TrainingJobPlanSchema = object({
|
|
|
39536
39645
|
* result lives after the operator acted on it.
|
|
39537
39646
|
*/
|
|
39538
39647
|
var TrainingJobStateSchema = _enum([
|
|
39648
|
+
"queued",
|
|
39539
39649
|
"uploading",
|
|
39540
39650
|
"submitted",
|
|
39541
39651
|
"starting",
|
|
@@ -39589,6 +39699,11 @@ var TrainingJobSchema = object({
|
|
|
39589
39699
|
createdAt: number(),
|
|
39590
39700
|
updatedAt: number(),
|
|
39591
39701
|
state: TrainingJobStateSchema,
|
|
39702
|
+
/**
|
|
39703
|
+
* Shared by every job enqueued together via `startJobBatch`.
|
|
39704
|
+
* `null` for a lone `startJob`. The engine advances queued siblings by this id.
|
|
39705
|
+
*/
|
|
39706
|
+
batchId: string().nullable().default(null),
|
|
39592
39707
|
stage: TrainingStageSchema.nullable(),
|
|
39593
39708
|
failure: object({
|
|
39594
39709
|
reason: TrainingFailureReasonSchema,
|
|
@@ -39600,6 +39715,12 @@ var TrainingJobSchema = object({
|
|
|
39600
39715
|
maxRuntimeSec: number().int().positive(),
|
|
39601
39716
|
trainer: TrainerSourceRefSchema,
|
|
39602
39717
|
datasetLayout: RetrainExportLayoutSchema,
|
|
39718
|
+
/** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
|
|
39719
|
+
frameCount: number().int().nonnegative(),
|
|
39720
|
+
/** Resolved frame ids at start — the archive ships exactly these. */
|
|
39721
|
+
frameIds: array(string()).max(2e4).readonly(),
|
|
39722
|
+
/** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
|
|
39723
|
+
annotationHash: string(),
|
|
39603
39724
|
dataset: object({
|
|
39604
39725
|
bytes: number().int(),
|
|
39605
39726
|
sha256: string(),
|
|
@@ -39641,13 +39762,7 @@ var TrainingJobSchema = object({
|
|
|
39641
39762
|
canary: TrainingCanarySchema.nullable()
|
|
39642
39763
|
});
|
|
39643
39764
|
var IdInput = object({ id: string().min(1) });
|
|
39644
|
-
method(
|
|
39645
|
-
kind: "mutation",
|
|
39646
|
-
auth: "admin"
|
|
39647
|
-
}), method(IdInput, TrainingDatasetVersionRowSchema.nullable(), { auth: "admin" }), method(object({}), array(RetrainDatasetVersionSchema).readonly(), { auth: "admin" }), method(object({ name: string() }), object({ id: string().nullable() }), { auth: "admin" }), method(IdInput, object({ removed: boolean() }), {
|
|
39648
|
-
kind: "mutation",
|
|
39649
|
-
auth: "admin"
|
|
39650
|
-
}), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
|
|
39765
|
+
method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
|
|
39651
39766
|
auth: "admin",
|
|
39652
39767
|
timeoutMs: 6e4
|
|
39653
39768
|
}), method(TrainingJobRequestSchema.extend({
|
|
@@ -39666,6 +39781,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
|
|
|
39666
39781
|
kind: "mutation",
|
|
39667
39782
|
auth: "admin",
|
|
39668
39783
|
timeoutMs: 12e4
|
|
39784
|
+
}), method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
|
|
39785
|
+
baseModelIds: array(string().min(1)).min(1),
|
|
39786
|
+
name: string().min(1).max(120),
|
|
39787
|
+
maxCostUsd: number().positive(),
|
|
39788
|
+
maxRuntimeSec: number().int().positive(),
|
|
39789
|
+
idempotencyKey: string().min(8).max(80)
|
|
39790
|
+
}), discriminatedUnion("kind", [object({
|
|
39791
|
+
kind: literal("started"),
|
|
39792
|
+
batchId: string(),
|
|
39793
|
+
jobs: array(TrainingJobSchema).min(1).readonly()
|
|
39794
|
+
}), object({
|
|
39795
|
+
kind: literal("refused"),
|
|
39796
|
+
reason: TrainingRefusalReasonSchema,
|
|
39797
|
+
detail: string()
|
|
39798
|
+
})]), {
|
|
39799
|
+
kind: "mutation",
|
|
39800
|
+
auth: "admin",
|
|
39801
|
+
timeoutMs: 12e4
|
|
39669
39802
|
}), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
|
|
39670
39803
|
kind: "mutation",
|
|
39671
39804
|
auth: "admin",
|
|
@@ -43909,12 +44042,6 @@ Object.freeze({
|
|
|
43909
44042
|
addonId: null,
|
|
43910
44043
|
access: "create"
|
|
43911
44044
|
},
|
|
43912
|
-
"pipelineAnalytics.createRetrainDatasetVersion": {
|
|
43913
|
-
capName: "pipeline-analytics",
|
|
43914
|
-
capScope: "device",
|
|
43915
|
-
addonId: null,
|
|
43916
|
-
access: "create"
|
|
43917
|
-
},
|
|
43918
44045
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
43919
44046
|
capName: "pipeline-analytics",
|
|
43920
44047
|
capScope: "device",
|
|
@@ -43927,12 +44054,6 @@ Object.freeze({
|
|
|
43927
44054
|
addonId: null,
|
|
43928
44055
|
access: "delete"
|
|
43929
44056
|
},
|
|
43930
|
-
"pipelineAnalytics.deleteRetrainDatasetVersion": {
|
|
43931
|
-
capName: "pipeline-analytics",
|
|
43932
|
-
capScope: "device",
|
|
43933
|
-
addonId: null,
|
|
43934
|
-
access: "delete"
|
|
43935
|
-
},
|
|
43936
44057
|
"pipelineAnalytics.deleteTracks": {
|
|
43937
44058
|
capName: "pipeline-analytics",
|
|
43938
44059
|
capScope: "device",
|
|
@@ -44035,6 +44156,12 @@ Object.freeze({
|
|
|
44035
44156
|
addonId: null,
|
|
44036
44157
|
access: "view"
|
|
44037
44158
|
},
|
|
44159
|
+
"pipelineAnalytics.getRetrainCorpusKpi": {
|
|
44160
|
+
capName: "pipeline-analytics",
|
|
44161
|
+
capScope: "device",
|
|
44162
|
+
addonId: null,
|
|
44163
|
+
access: "view"
|
|
44164
|
+
},
|
|
44038
44165
|
"pipelineAnalytics.getRetrainExportUrl": {
|
|
44039
44166
|
capName: "pipeline-analytics",
|
|
44040
44167
|
capScope: "device",
|
|
@@ -44155,7 +44282,7 @@ Object.freeze({
|
|
|
44155
44282
|
addonId: null,
|
|
44156
44283
|
access: "view"
|
|
44157
44284
|
},
|
|
44158
|
-
"pipelineAnalytics.
|
|
44285
|
+
"pipelineAnalytics.listRetrainCorpusPage": {
|
|
44159
44286
|
capName: "pipeline-analytics",
|
|
44160
44287
|
capScope: "device",
|
|
44161
44288
|
addonId: null,
|
|
@@ -44209,12 +44336,6 @@ Object.freeze({
|
|
|
44209
44336
|
addonId: null,
|
|
44210
44337
|
access: "create"
|
|
44211
44338
|
},
|
|
44212
|
-
"pipelineAnalytics.previewRetrainDataset": {
|
|
44213
|
-
capName: "pipeline-analytics",
|
|
44214
|
-
capScope: "device",
|
|
44215
|
-
addonId: null,
|
|
44216
|
-
access: "view"
|
|
44217
|
-
},
|
|
44218
44339
|
"pipelineAnalytics.proposeRetrainAnnotations": {
|
|
44219
44340
|
capName: "pipeline-analytics",
|
|
44220
44341
|
capScope: "device",
|
|
@@ -44293,6 +44414,12 @@ Object.freeze({
|
|
|
44293
44414
|
addonId: null,
|
|
44294
44415
|
access: "create"
|
|
44295
44416
|
},
|
|
44417
|
+
"pipelineAnalytics.resolveRetrainTrainingCorpus": {
|
|
44418
|
+
capName: "pipeline-analytics",
|
|
44419
|
+
capScope: "device",
|
|
44420
|
+
addonId: null,
|
|
44421
|
+
access: "view"
|
|
44422
|
+
},
|
|
44296
44423
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
44297
44424
|
capName: "pipeline-analytics",
|
|
44298
44425
|
capScope: "device",
|
|
@@ -44353,12 +44480,6 @@ Object.freeze({
|
|
|
44353
44480
|
addonId: null,
|
|
44354
44481
|
access: "create"
|
|
44355
44482
|
},
|
|
44356
|
-
"pipelineAnalytics.verifyRetrainDatasetVersion": {
|
|
44357
|
-
capName: "pipeline-analytics",
|
|
44358
|
-
capScope: "device",
|
|
44359
|
-
addonId: null,
|
|
44360
|
-
access: "view"
|
|
44361
|
-
},
|
|
44362
44483
|
"pipelineAnalytics.wipeAllAnalytics": {
|
|
44363
44484
|
capName: "pipeline-analytics",
|
|
44364
44485
|
capScope: "device",
|
|
@@ -46753,18 +46874,6 @@ Object.freeze({
|
|
|
46753
46874
|
addonId: null,
|
|
46754
46875
|
access: "create"
|
|
46755
46876
|
},
|
|
46756
|
-
"training.findDatasetVersionIdByName": {
|
|
46757
|
-
capName: "training",
|
|
46758
|
-
capScope: "system",
|
|
46759
|
-
addonId: null,
|
|
46760
|
-
access: "view"
|
|
46761
|
-
},
|
|
46762
|
-
"training.getDatasetVersion": {
|
|
46763
|
-
capName: "training",
|
|
46764
|
-
capScope: "system",
|
|
46765
|
-
addonId: null,
|
|
46766
|
-
access: "view"
|
|
46767
|
-
},
|
|
46768
46877
|
"training.getJob": {
|
|
46769
46878
|
capName: "training",
|
|
46770
46879
|
capScope: "system",
|
|
@@ -46783,12 +46892,6 @@ Object.freeze({
|
|
|
46783
46892
|
addonId: null,
|
|
46784
46893
|
access: "view"
|
|
46785
46894
|
},
|
|
46786
|
-
"training.listDatasetVersions": {
|
|
46787
|
-
capName: "training",
|
|
46788
|
-
capScope: "system",
|
|
46789
|
-
addonId: null,
|
|
46790
|
-
access: "view"
|
|
46791
|
-
},
|
|
46792
46895
|
"training.listJobs": {
|
|
46793
46896
|
capName: "training",
|
|
46794
46897
|
capScope: "system",
|
|
@@ -46801,54 +46904,66 @@ Object.freeze({
|
|
|
46801
46904
|
addonId: null,
|
|
46802
46905
|
access: "view"
|
|
46803
46906
|
},
|
|
46804
|
-
"training.
|
|
46907
|
+
"training.registerResult": {
|
|
46805
46908
|
capName: "training",
|
|
46806
46909
|
capScope: "system",
|
|
46807
46910
|
addonId: null,
|
|
46808
46911
|
access: "create"
|
|
46809
46912
|
},
|
|
46810
|
-
"training.
|
|
46913
|
+
"training.rollbackCanary": {
|
|
46811
46914
|
capName: "training",
|
|
46812
46915
|
capScope: "system",
|
|
46813
46916
|
addonId: null,
|
|
46814
46917
|
access: "create"
|
|
46815
46918
|
},
|
|
46816
|
-
"training.
|
|
46919
|
+
"training.startJob": {
|
|
46817
46920
|
capName: "training",
|
|
46818
46921
|
capScope: "system",
|
|
46819
46922
|
addonId: null,
|
|
46820
|
-
access: "
|
|
46923
|
+
access: "create"
|
|
46821
46924
|
},
|
|
46822
|
-
"training.
|
|
46925
|
+
"training.startJobBatch": {
|
|
46823
46926
|
capName: "training",
|
|
46824
46927
|
capScope: "system",
|
|
46825
46928
|
addonId: null,
|
|
46826
46929
|
access: "create"
|
|
46827
46930
|
},
|
|
46828
|
-
"
|
|
46829
|
-
capName: "training",
|
|
46931
|
+
"trainingProvider.cancelJob": {
|
|
46932
|
+
capName: "training-provider",
|
|
46830
46933
|
capScope: "system",
|
|
46831
46934
|
addonId: null,
|
|
46832
46935
|
access: "create"
|
|
46833
46936
|
},
|
|
46834
|
-
"trainingProvider.
|
|
46937
|
+
"trainingProvider.cleanupJob": {
|
|
46835
46938
|
capName: "training-provider",
|
|
46836
46939
|
capScope: "system",
|
|
46837
46940
|
addonId: null,
|
|
46838
46941
|
access: "create"
|
|
46839
46942
|
},
|
|
46840
|
-
"trainingProvider.
|
|
46943
|
+
"trainingProvider.createEntry": {
|
|
46841
46944
|
capName: "training-provider",
|
|
46842
46945
|
capScope: "system",
|
|
46843
46946
|
addonId: null,
|
|
46844
46947
|
access: "create"
|
|
46845
46948
|
},
|
|
46949
|
+
"trainingProvider.deleteEntry": {
|
|
46950
|
+
capName: "training-provider",
|
|
46951
|
+
capScope: "system",
|
|
46952
|
+
addonId: null,
|
|
46953
|
+
access: "delete"
|
|
46954
|
+
},
|
|
46846
46955
|
"trainingProvider.describe": {
|
|
46847
46956
|
capName: "training-provider",
|
|
46848
46957
|
capScope: "system",
|
|
46849
46958
|
addonId: null,
|
|
46850
46959
|
access: "view"
|
|
46851
46960
|
},
|
|
46961
|
+
"trainingProvider.describeTypes": {
|
|
46962
|
+
capName: "training-provider",
|
|
46963
|
+
capScope: "system",
|
|
46964
|
+
addonId: null,
|
|
46965
|
+
access: "view"
|
|
46966
|
+
},
|
|
46852
46967
|
"trainingProvider.estimateJob": {
|
|
46853
46968
|
capName: "training-provider",
|
|
46854
46969
|
capScope: "system",
|
|
@@ -46861,6 +46976,12 @@ Object.freeze({
|
|
|
46861
46976
|
addonId: null,
|
|
46862
46977
|
access: "view"
|
|
46863
46978
|
},
|
|
46979
|
+
"trainingProvider.listEntries": {
|
|
46980
|
+
capName: "training-provider",
|
|
46981
|
+
capScope: "system",
|
|
46982
|
+
addonId: null,
|
|
46983
|
+
access: "view"
|
|
46984
|
+
},
|
|
46864
46985
|
"trainingProvider.listJobEvents": {
|
|
46865
46986
|
capName: "training-provider",
|
|
46866
46987
|
capScope: "system",
|
|
@@ -50317,6 +50438,11 @@ Object.freeze({
|
|
|
50317
50438
|
form: "array",
|
|
50318
50439
|
optional: false
|
|
50319
50440
|
}],
|
|
50441
|
+
"pipelineAnalytics.listRetrainCorpusPage": [{
|
|
50442
|
+
name: "deviceIds",
|
|
50443
|
+
form: "array",
|
|
50444
|
+
optional: true
|
|
50445
|
+
}],
|
|
50320
50446
|
"pipelineAnalytics.listRetrainStaging": [{
|
|
50321
50447
|
name: "deviceIds",
|
|
50322
50448
|
form: "array",
|
|
@@ -52485,7 +52611,7 @@ var AgentUIAddon = class extends BaseAddon {
|
|
|
52485
52611
|
capability: adminUiCapability,
|
|
52486
52612
|
provider: {
|
|
52487
52613
|
getStaticDir: async () => ({ staticDir: path.resolve(__dirname) }),
|
|
52488
|
-
getVersion: async () => ({ version: "1.2.
|
|
52614
|
+
getVersion: async () => ({ version: "1.2.203" })
|
|
52489
52615
|
}
|
|
52490
52616
|
}];
|
|
52491
52617
|
}
|