@camstack/addon-model-studio 1.1.229 → 1.1.230
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/{MotionZonesSettings-AwjU_jds.mjs → MotionZonesSettings-9DNvDBRb.mjs} +2 -2
- package/dist/{PrivacyMaskSettings-BxJyOTIX.mjs → PrivacyMaskSettings-B8wVIjmI.mjs} +4 -4
- package/dist/{SceneMonitorEditor-CvsWahwh.mjs → SceneMonitorEditor-DUiiMwds.mjs} +3 -3
- package/dist/_stub.js +29 -21
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DQJCw6s8.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-C2gOmMPj.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CvAZq56a.mjs +26 -0
- package/dist/addon-model-studio.css +1 -1
- package/dist/{hostInit-D05xasL9.mjs → hostInit-DiDfmJ3W.mjs} +2 -2
- package/dist/model-studio.addon.js +246 -131
- package/dist/model-studio.addon.mjs +246 -131
- package/dist/{player-overlays-DUpfuxPB.mjs → player-overlays-DZe7hnQ4.mjs} +1 -1
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-BHoVd25G.mjs → responsive-yCZZZ6gV.mjs} +1 -1
- package/dist/{scene-monitor-copy-DGpr-uDO.mjs → scene-monitor-copy-Cl7b4sC4.mjs} +1 -1
- package/dist/{square-CeBzl9Ag.mjs → square-CMKCu9Lr.mjs} +1 -1
- package/dist/{trash-2-Bl3EnWCS.mjs → trash-2-Dc4vbOgo.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-C9qRdjcf.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DVFLaMDL.mjs} +1 -1
- package/package.json +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DTZ_Cxlt.mjs +0 -26
|
@@ -5772,7 +5772,7 @@ var ZodIssueCode = {
|
|
|
5772
5772
|
var ZodFirstPartyTypeKind;
|
|
5773
5773
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5774
5774
|
//#endregion
|
|
5775
|
-
//#region ../types/dist/sleep-
|
|
5775
|
+
//#region ../types/dist/sleep-CI0n5D44.mjs
|
|
5776
5776
|
/**
|
|
5777
5777
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5778
5778
|
* window to float samples (D455).
|
|
@@ -9782,6 +9782,16 @@ var CompositionSchema = object({
|
|
|
9782
9782
|
seen.add(feature.cap);
|
|
9783
9783
|
});
|
|
9784
9784
|
});
|
|
9785
|
+
var NodeColorIdSchema = _enum([
|
|
9786
|
+
"node-a",
|
|
9787
|
+
"node-b",
|
|
9788
|
+
"node-c",
|
|
9789
|
+
"node-d",
|
|
9790
|
+
"node-e",
|
|
9791
|
+
"node-f",
|
|
9792
|
+
"node-g",
|
|
9793
|
+
"node-h"
|
|
9794
|
+
]);
|
|
9785
9795
|
new Set([
|
|
9786
9796
|
"track",
|
|
9787
9797
|
"face",
|
|
@@ -24531,24 +24541,69 @@ var RetrainFrameListSchema = object({
|
|
|
24531
24541
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
24532
24542
|
autoPickMediaId: number().int().optional()
|
|
24533
24543
|
});
|
|
24544
|
+
/** Exclusive partition of a corpus copy's annotation progress (design §4.2). */
|
|
24545
|
+
var RetrainFrameWorkStateSchema = _enum([
|
|
24546
|
+
"unannotated",
|
|
24547
|
+
"annotated",
|
|
24548
|
+
"complete"
|
|
24549
|
+
]);
|
|
24550
|
+
/**
|
|
24551
|
+
* Filters for paginated corpus list, KPI, and matching export (design §4.4).
|
|
24552
|
+
* Every narrowing field is ANDed; omitted fields impose no constraint.
|
|
24553
|
+
*/
|
|
24554
|
+
var RetrainCorpusFilterSchema = object({
|
|
24555
|
+
workState: RetrainFrameWorkStateSchema.optional(),
|
|
24556
|
+
deviceIds: array(number()).max(500).optional(),
|
|
24557
|
+
/** When set, only frames in this named collection. */
|
|
24558
|
+
collectionId: string().optional(),
|
|
24559
|
+
/** Frames that carry at least one saved annotation in one of these classes. */
|
|
24560
|
+
classes: array(RetrainMacroClassSchema).optional(),
|
|
24561
|
+
page: number().int().positive().default(1),
|
|
24562
|
+
pageSize: number().int().positive().max(100).default(50)
|
|
24563
|
+
});
|
|
24564
|
+
var RetrainCorpusPageSchema = object({
|
|
24565
|
+
frames: array(RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema })).readonly(),
|
|
24566
|
+
total: number().int().nonnegative(),
|
|
24567
|
+
page: number().int().positive(),
|
|
24568
|
+
pageSize: number().int().positive()
|
|
24569
|
+
});
|
|
24570
|
+
var RetrainCorpusKpiCameraRowSchema = object({
|
|
24571
|
+
deviceId: number(),
|
|
24572
|
+
unannotated: number().int().nonnegative(),
|
|
24573
|
+
annotated: number().int().nonnegative(),
|
|
24574
|
+
complete: number().int().nonnegative(),
|
|
24575
|
+
/** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
|
|
24576
|
+
* `null` when the corpus is empty (no ratio). */
|
|
24577
|
+
pctOfCorpus: number().min(0).max(1).nullable()
|
|
24578
|
+
});
|
|
24579
|
+
var RetrainCorpusKpiSchema = object({
|
|
24580
|
+
total: number().int().nonnegative(),
|
|
24581
|
+
unannotated: number().int().nonnegative(),
|
|
24582
|
+
annotated: number().int().nonnegative(),
|
|
24583
|
+
complete: number().int().nonnegative(),
|
|
24584
|
+
cameras: array(RetrainCorpusKpiCameraRowSchema).readonly()
|
|
24585
|
+
});
|
|
24534
24586
|
/**
|
|
24535
24587
|
* Which frames an annotated export carries. Every field narrows; an empty
|
|
24536
|
-
* filter is every annotated copy.
|
|
24537
|
-
*
|
|
24538
|
-
*
|
|
24539
|
-
*
|
|
24588
|
+
* filter is every annotated copy. `frameIds` is the primitive a job or
|
|
24589
|
+
* download uses; `batchId` re-selects what an earlier export carried
|
|
24590
|
+
* (`exportedInBatch`). Frozen dataset versions were removed — live selection
|
|
24591
|
+
* resolves to `frameIds` at plan/start.
|
|
24540
24592
|
*/
|
|
24541
24593
|
var RetrainExportFilterSchema = object({
|
|
24542
24594
|
deviceIds: array(number()).optional(),
|
|
24543
24595
|
frameIds: array(string()).max(2e4).optional(),
|
|
24544
24596
|
/** Only frames in at least one of these named collections. */
|
|
24545
24597
|
collectionIds: array(string()).max(200).optional(),
|
|
24546
|
-
/**
|
|
24547
|
-
|
|
24548
|
-
datasetVersionId: string().optional(),
|
|
24598
|
+
/** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
|
|
24599
|
+
collectionId: string().optional(),
|
|
24549
24600
|
batchId: string().optional(),
|
|
24550
24601
|
/** Only frames the operator marked complete (all subjects boxed). */
|
|
24551
|
-
completeOnly: boolean().optional()
|
|
24602
|
+
completeOnly: boolean().optional(),
|
|
24603
|
+
/** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
|
|
24604
|
+
workState: RetrainFrameWorkStateSchema.optional(),
|
|
24605
|
+
/** Frames with at least one saved annotation in one of these classes. */
|
|
24606
|
+
classes: array(RetrainMacroClassSchema).optional()
|
|
24552
24607
|
});
|
|
24553
24608
|
/**
|
|
24554
24609
|
* `frames`: the full frame copies, boxes in `annotations.json`.
|
|
@@ -24748,8 +24803,7 @@ var RetrainDatasetStatsSchema = object({
|
|
|
24748
24803
|
completeFrames: number().int()
|
|
24749
24804
|
})).readonly()
|
|
24750
24805
|
});
|
|
24751
|
-
|
|
24752
|
-
var RetrainDatasetVersionSchema = object({
|
|
24806
|
+
object({
|
|
24753
24807
|
id: string(),
|
|
24754
24808
|
name: string(),
|
|
24755
24809
|
createdAt: number(),
|
|
@@ -24757,22 +24811,33 @@ var RetrainDatasetVersionSchema = object({
|
|
|
24757
24811
|
layout: RetrainExportLayoutSchema,
|
|
24758
24812
|
completeOnly: boolean(),
|
|
24759
24813
|
frameCount: number().int(),
|
|
24760
|
-
/** sha256 of what the frames taught when the version was frozen. */
|
|
24761
24814
|
annotationHash: string(),
|
|
24762
|
-
/** The export manifest schema the version was cut under. */
|
|
24763
24815
|
manifestSchema: string(),
|
|
24764
24816
|
stats: RetrainDatasetStatsSchema
|
|
24765
24817
|
});
|
|
24766
|
-
|
|
24767
|
-
|
|
24768
|
-
|
|
24818
|
+
/**
|
|
24819
|
+
* Live training corpus criteria — same shape as `TrainingCorpusSelection` on
|
|
24820
|
+
* the training cap. Resolved here so plan/start and the annotated export share
|
|
24821
|
+
* one definition of "the frames" (`buildRetrainExportPlan`).
|
|
24822
|
+
*/
|
|
24823
|
+
var RetrainTrainingCorpusSelectionSchema = object({
|
|
24824
|
+
collectionIds: array(string()).min(1),
|
|
24825
|
+
workState: _enum([
|
|
24826
|
+
"complete",
|
|
24827
|
+
"annotated_or_complete",
|
|
24828
|
+
"any_annotated"
|
|
24829
|
+
]).default("complete")
|
|
24830
|
+
});
|
|
24831
|
+
var RetrainTrainingCorpusResolveResultSchema = discriminatedUnion("kind", [object({
|
|
24832
|
+
kind: literal("resolved"),
|
|
24833
|
+
frameIds: array(string()).max(2e4).readonly(),
|
|
24834
|
+
stats: RetrainDatasetStatsSchema,
|
|
24835
|
+
annotationHash: string(),
|
|
24836
|
+
layout: RetrainExportLayoutSchema
|
|
24769
24837
|
}), object({
|
|
24770
24838
|
kind: literal("refused"),
|
|
24771
|
-
reason: _enum([
|
|
24772
|
-
|
|
24773
|
-
"duplicate-name",
|
|
24774
|
-
"no-frames"
|
|
24775
|
-
])
|
|
24839
|
+
reason: _enum(["unknown-collection", "no-frames"]),
|
|
24840
|
+
detail: string()
|
|
24776
24841
|
})]);
|
|
24777
24842
|
/** The outcome of a lifecycle move owned by the retrain page. */
|
|
24778
24843
|
var RetrainTransitionResultSchema = object({
|
|
@@ -25479,6 +25544,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
25479
25544
|
}), array(RetrainTrackSchema).readonly(), {
|
|
25480
25545
|
kind: "query",
|
|
25481
25546
|
auth: "admin"
|
|
25547
|
+
}), method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
|
|
25548
|
+
kind: "query",
|
|
25549
|
+
auth: "admin"
|
|
25550
|
+
}), method(object({}), RetrainCorpusKpiSchema, {
|
|
25551
|
+
kind: "query",
|
|
25552
|
+
auth: "admin"
|
|
25482
25553
|
}), method(object({ trackId: string() }), RetrainFrameListSchema, {
|
|
25483
25554
|
kind: "query",
|
|
25484
25555
|
auth: "admin"
|
|
@@ -25574,36 +25645,6 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
25574
25645
|
kind: "mutation",
|
|
25575
25646
|
auth: "admin",
|
|
25576
25647
|
timeoutMs: 12e4
|
|
25577
|
-
}), method(object({
|
|
25578
|
-
selection: RetrainDatasetSelectionSchema,
|
|
25579
|
-
completeOnly: boolean().optional()
|
|
25580
|
-
}), RetrainDatasetStatsSchema, {
|
|
25581
|
-
kind: "query",
|
|
25582
|
-
auth: "admin"
|
|
25583
|
-
}), method(object({
|
|
25584
|
-
name: string().max(120),
|
|
25585
|
-
selection: RetrainDatasetSelectionSchema,
|
|
25586
|
-
layout: RetrainExportLayoutSchema,
|
|
25587
|
-
completeOnly: boolean()
|
|
25588
|
-
}), CreateRetrainDatasetVersionResultSchema, {
|
|
25589
|
-
kind: "mutation",
|
|
25590
|
-
auth: "admin",
|
|
25591
|
-
timeoutMs: 12e4
|
|
25592
|
-
}), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
|
|
25593
|
-
kind: "query",
|
|
25594
|
-
auth: "admin"
|
|
25595
|
-
}), method(object({ id: string() }), object({ deleted: boolean() }), {
|
|
25596
|
-
kind: "mutation",
|
|
25597
|
-
auth: "admin"
|
|
25598
|
-
}), method(object({ id: string() }), object({
|
|
25599
|
-
found: boolean(),
|
|
25600
|
-
annotationHash: string(),
|
|
25601
|
-
matches: boolean(),
|
|
25602
|
-
missingFrames: number().int()
|
|
25603
|
-
}), {
|
|
25604
|
-
kind: "query",
|
|
25605
|
-
auth: "admin",
|
|
25606
|
-
timeoutMs: 12e4
|
|
25607
25648
|
}), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
|
|
25608
25649
|
kind: "query",
|
|
25609
25650
|
auth: "admin"
|
|
@@ -25630,6 +25671,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
|
|
|
25630
25671
|
}), method(object({}), array(RetrainCollectionSchema).readonly(), {
|
|
25631
25672
|
kind: "query",
|
|
25632
25673
|
auth: "admin"
|
|
25674
|
+
}), method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
|
|
25675
|
+
kind: "query",
|
|
25676
|
+
auth: "admin",
|
|
25677
|
+
timeoutMs: 6e4
|
|
25633
25678
|
}), method(object({
|
|
25634
25679
|
id: string(),
|
|
25635
25680
|
name: string().max(120)
|
|
@@ -28143,6 +28188,8 @@ var AgentPipelineSettingsSchema = object({
|
|
|
28143
28188
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
28144
28189
|
*/
|
|
28145
28190
|
reachableHost: string().optional(),
|
|
28191
|
+
/** Hub-persisted UI colour (`--color-node-*` theme tokens). */
|
|
28192
|
+
color: NodeColorIdSchema.optional(),
|
|
28146
28193
|
/**
|
|
28147
28194
|
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
28148
28195
|
* weight, steps}. Absent / all-disabled ⇒ the node's single default
|
|
@@ -28692,8 +28739,9 @@ method(object({
|
|
|
28692
28739
|
auth: "admin"
|
|
28693
28740
|
}), method(object({
|
|
28694
28741
|
agentNodeId: string(),
|
|
28695
|
-
reachableHost: string().nullable()
|
|
28696
|
-
|
|
28742
|
+
reachableHost: string().nullable().optional(),
|
|
28743
|
+
color: NodeColorIdSchema.nullable().optional()
|
|
28744
|
+
}).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), object({ success: literal(true) }), {
|
|
28697
28745
|
kind: "mutation",
|
|
28698
28746
|
auth: "admin"
|
|
28699
28747
|
}), method(object({
|
|
@@ -39909,9 +39957,11 @@ DeviceType.Camera, method(object({
|
|
|
39909
39957
|
* once is what makes a second provider (RunPod, a local NVIDIA node) a new
|
|
39910
39958
|
* manifest entry and nothing else.
|
|
39911
39959
|
*
|
|
39912
|
-
* Collection
|
|
39913
|
-
*
|
|
39914
|
-
*
|
|
39960
|
+
* Collection of provider **types** (addons). Each addon owns zero or more
|
|
39961
|
+
* **entries** (credentials + defaults). Concat-fans: `describe`,
|
|
39962
|
+
* `describeTypes`, `listEntries`, `listJobs`. Single-row work is keyed by
|
|
39963
|
+
* `entryId`; callers also pass the owning `addonId` as the collection
|
|
39964
|
+
* selector (broker posture). Every method is `admin`: these spend money.
|
|
39915
39965
|
*
|
|
39916
39966
|
* Every cloud object a provider creates is tagged with the orchestrator's
|
|
39917
39967
|
* `jobKey`, so a retried submit finds the job it already started instead of
|
|
@@ -39935,8 +39985,8 @@ var TrainingRegionOptionSchema = object({
|
|
|
39935
39985
|
priceMultiplier: number().positive()
|
|
39936
39986
|
});
|
|
39937
39987
|
/**
|
|
39938
|
-
* The provider's per-
|
|
39939
|
-
* live
|
|
39988
|
+
* The provider's per-entry settings, as the orchestrator reads them. They
|
|
39989
|
+
* live on the PROVIDER addon's entry (operator decision 2026-10-08: they
|
|
39940
39990
|
* depend on the user's account), never hard-coded in the orchestrator.
|
|
39941
39991
|
*/
|
|
39942
39992
|
var TrainingProviderDefaultsSchema = object({
|
|
@@ -39947,9 +39997,32 @@ var TrainingProviderDefaultsSchema = object({
|
|
|
39947
39997
|
/** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
|
|
39948
39998
|
failedDatasetGraceHours: number().nonnegative()
|
|
39949
39999
|
});
|
|
40000
|
+
/** One creatable provider type, for the Add-entry dialog. */
|
|
40001
|
+
var TrainingProviderTypeSchema = object({
|
|
40002
|
+
typeId: string(),
|
|
40003
|
+
label: string(),
|
|
40004
|
+
/** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
|
|
40005
|
+
iconAsset: string(),
|
|
40006
|
+
/** Owning `training-provider` addon — collection selector for createEntry. */
|
|
40007
|
+
addonId: string()
|
|
40008
|
+
});
|
|
40009
|
+
/** One configured account / workspace under a provider type. */
|
|
40010
|
+
var TrainingProviderEntrySchema = object({
|
|
40011
|
+
entryId: string(),
|
|
40012
|
+
typeId: string(),
|
|
40013
|
+
name: string(),
|
|
40014
|
+
addonId: string(),
|
|
40015
|
+
/** Credentials are present — never the values. */
|
|
40016
|
+
configured: boolean()
|
|
40017
|
+
});
|
|
39950
40018
|
var TrainingProviderDescriptorSchema = object({
|
|
39951
40019
|
addonId: string(),
|
|
39952
|
-
|
|
40020
|
+
entryId: string(),
|
|
40021
|
+
typeId: string(),
|
|
40022
|
+
/** Operator-chosen entry name. */
|
|
40023
|
+
name: string(),
|
|
40024
|
+
iconAsset: string(),
|
|
40025
|
+
/** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
|
|
39953
40026
|
kind: string(),
|
|
39954
40027
|
label: string(),
|
|
39955
40028
|
gpuTypes: array(TrainingGpuOptionSchema).readonly(),
|
|
@@ -40013,20 +40086,30 @@ var TrainerSourceRefSchema = object({
|
|
|
40013
40086
|
/** A commit sha (never a branch) — the job must be reproducible. */
|
|
40014
40087
|
revision: string().regex(/^[0-9a-f]{7,64}$/)
|
|
40015
40088
|
});
|
|
40089
|
+
/** Cloud job identity — route with the owning addon's `addonId` selector. */
|
|
40016
40090
|
var JobRef = {
|
|
40017
|
-
|
|
40091
|
+
entryId: string().min(1),
|
|
40018
40092
|
jobKey: string().uuid()
|
|
40019
40093
|
};
|
|
40020
40094
|
var TrainingLogLineSchema = object({
|
|
40021
40095
|
ts: number(),
|
|
40022
40096
|
text: string()
|
|
40023
40097
|
});
|
|
40024
|
-
method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({
|
|
40098
|
+
method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }), method(object({
|
|
40099
|
+
typeId: string().min(1),
|
|
40100
|
+
name: string().min(1)
|
|
40101
|
+
}), object({ entryId: string() }), {
|
|
40102
|
+
kind: "mutation",
|
|
40103
|
+
auth: "admin"
|
|
40104
|
+
}), method(object({ entryId: string().min(1) }), object({ ok: literal(true) }), {
|
|
40105
|
+
kind: "mutation",
|
|
40106
|
+
auth: "admin"
|
|
40107
|
+
}), method(object({ entryId: string().min(1) }), TrainingCredentialCheckSchema, {
|
|
40025
40108
|
kind: "mutation",
|
|
40026
40109
|
auth: "admin",
|
|
40027
40110
|
timeoutMs: 3e4
|
|
40028
40111
|
}), method(object({
|
|
40029
|
-
|
|
40112
|
+
entryId: string().min(1),
|
|
40030
40113
|
gpuType: string(),
|
|
40031
40114
|
region: string(),
|
|
40032
40115
|
datasetBytes: number().int().nonnegative(),
|
|
@@ -40092,7 +40175,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
|
|
|
40092
40175
|
kind: "mutation",
|
|
40093
40176
|
auth: "admin",
|
|
40094
40177
|
timeoutMs: 5 * 6e4
|
|
40095
|
-
}), method(object({
|
|
40178
|
+
}), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
|
|
40096
40179
|
auth: "admin",
|
|
40097
40180
|
timeoutMs: 2 * 6e4
|
|
40098
40181
|
});
|
|
@@ -40102,20 +40185,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
|
|
|
40102
40185
|
*
|
|
40103
40186
|
* It owns what every provider must agree on, written once:
|
|
40104
40187
|
*
|
|
40105
|
-
* - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
|
|
40106
|
-
* live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
|
|
40107
|
-
* the export plan) and reaches this store through the five row methods
|
|
40108
|
-
* below, so the Retrain page and the export did not change.
|
|
40109
40188
|
* - **Jobs.** A persisted state machine, a reconcile loop against the
|
|
40110
40189
|
* provider, a cost guard, a daily orphan sweep and the retention rules.
|
|
40111
40190
|
* - **The return flow.** Verified artefacts → Model Studio
|
|
40112
40191
|
* (`custom-model-registry.importModelBundle`) → canary on cameras →
|
|
40113
40192
|
* rollback. Nothing is ever registered automatically.
|
|
40114
40193
|
*
|
|
40194
|
+
* Plan/start takes a live {@link TrainingCorpusSelection} (collections +
|
|
40195
|
+
* work-state rule); frame ids are resolved via pipeline-analytics at that
|
|
40196
|
+
* moment and snapshotted on the job. No frozen dataset version.
|
|
40197
|
+
*
|
|
40115
40198
|
* Every method is `admin`.
|
|
40116
40199
|
*/
|
|
40117
|
-
/**
|
|
40118
|
-
|
|
40200
|
+
/**
|
|
40201
|
+
* Live corpus criteria for plan/start (design §5.2). Default is complete-only.
|
|
40202
|
+
* Frame ids are resolved at plan/start — never a frozen version id.
|
|
40203
|
+
*/
|
|
40204
|
+
var TrainingCorpusSelectionSchema = object({
|
|
40205
|
+
collectionIds: array(string()).min(1),
|
|
40206
|
+
/** Default complete-only for v1 */
|
|
40207
|
+
workState: _enum([
|
|
40208
|
+
"complete",
|
|
40209
|
+
"annotated_or_complete",
|
|
40210
|
+
"any_annotated"
|
|
40211
|
+
]).default("complete")
|
|
40212
|
+
});
|
|
40119
40213
|
/** A base model a detector job can fine-tune, and the baseline it is judged against. */
|
|
40120
40214
|
var TrainingBaseModelSchema = object({
|
|
40121
40215
|
modelId: string(),
|
|
@@ -40133,9 +40227,13 @@ var TrainingPresetSchema = _enum([
|
|
|
40133
40227
|
"thorough"
|
|
40134
40228
|
]);
|
|
40135
40229
|
var TrainingJobRequestSchema = object({
|
|
40136
|
-
|
|
40137
|
-
|
|
40138
|
-
|
|
40230
|
+
/** Live collection + work-state criteria; resolved at plan/start. */
|
|
40231
|
+
selection: TrainingCorpusSelectionSchema,
|
|
40232
|
+
/**
|
|
40233
|
+
* The provider **entry** that runs it (credentials + defaults).
|
|
40234
|
+
* Resolve to an owning addon via `training-provider.describe` / `listEntries`.
|
|
40235
|
+
*/
|
|
40236
|
+
entryId: string().min(1),
|
|
40139
40237
|
gpuType: string().min(1),
|
|
40140
40238
|
region: string(),
|
|
40141
40239
|
baseModelId: string().min(1),
|
|
@@ -40194,6 +40292,7 @@ var TrainingJobPlanSchema = object({
|
|
|
40194
40292
|
* result lives after the operator acted on it.
|
|
40195
40293
|
*/
|
|
40196
40294
|
var TrainingJobStateSchema = _enum([
|
|
40295
|
+
"queued",
|
|
40197
40296
|
"uploading",
|
|
40198
40297
|
"submitted",
|
|
40199
40298
|
"starting",
|
|
@@ -40247,6 +40346,11 @@ var TrainingJobSchema = object({
|
|
|
40247
40346
|
createdAt: number(),
|
|
40248
40347
|
updatedAt: number(),
|
|
40249
40348
|
state: TrainingJobStateSchema,
|
|
40349
|
+
/**
|
|
40350
|
+
* Shared by every job enqueued together via `startJobBatch`.
|
|
40351
|
+
* `null` for a lone `startJob`. The engine advances queued siblings by this id.
|
|
40352
|
+
*/
|
|
40353
|
+
batchId: string().nullable().default(null),
|
|
40250
40354
|
stage: TrainingStageSchema.nullable(),
|
|
40251
40355
|
failure: object({
|
|
40252
40356
|
reason: TrainingFailureReasonSchema,
|
|
@@ -40258,6 +40362,12 @@ var TrainingJobSchema = object({
|
|
|
40258
40362
|
maxRuntimeSec: number().int().positive(),
|
|
40259
40363
|
trainer: TrainerSourceRefSchema,
|
|
40260
40364
|
datasetLayout: RetrainExportLayoutSchema,
|
|
40365
|
+
/** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
|
|
40366
|
+
frameCount: number().int().nonnegative(),
|
|
40367
|
+
/** Resolved frame ids at start — the archive ships exactly these. */
|
|
40368
|
+
frameIds: array(string()).max(2e4).readonly(),
|
|
40369
|
+
/** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
|
|
40370
|
+
annotationHash: string(),
|
|
40261
40371
|
dataset: object({
|
|
40262
40372
|
bytes: number().int(),
|
|
40263
40373
|
sha256: string(),
|
|
@@ -40299,13 +40409,7 @@ var TrainingJobSchema = object({
|
|
|
40299
40409
|
canary: TrainingCanarySchema.nullable()
|
|
40300
40410
|
});
|
|
40301
40411
|
var IdInput = object({ id: string().min(1) });
|
|
40302
|
-
method(
|
|
40303
|
-
kind: "mutation",
|
|
40304
|
-
auth: "admin"
|
|
40305
|
-
}), 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() }), {
|
|
40306
|
-
kind: "mutation",
|
|
40307
|
-
auth: "admin"
|
|
40308
|
-
}), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
|
|
40412
|
+
method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
|
|
40309
40413
|
auth: "admin",
|
|
40310
40414
|
timeoutMs: 6e4
|
|
40311
40415
|
}), method(TrainingJobRequestSchema.extend({
|
|
@@ -40324,6 +40428,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
|
|
|
40324
40428
|
kind: "mutation",
|
|
40325
40429
|
auth: "admin",
|
|
40326
40430
|
timeoutMs: 12e4
|
|
40431
|
+
}), method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
|
|
40432
|
+
baseModelIds: array(string().min(1)).min(1),
|
|
40433
|
+
name: string().min(1).max(120),
|
|
40434
|
+
maxCostUsd: number().positive(),
|
|
40435
|
+
maxRuntimeSec: number().int().positive(),
|
|
40436
|
+
idempotencyKey: string().min(8).max(80)
|
|
40437
|
+
}), discriminatedUnion("kind", [object({
|
|
40438
|
+
kind: literal("started"),
|
|
40439
|
+
batchId: string(),
|
|
40440
|
+
jobs: array(TrainingJobSchema).min(1).readonly()
|
|
40441
|
+
}), object({
|
|
40442
|
+
kind: literal("refused"),
|
|
40443
|
+
reason: TrainingRefusalReasonSchema,
|
|
40444
|
+
detail: string()
|
|
40445
|
+
})]), {
|
|
40446
|
+
kind: "mutation",
|
|
40447
|
+
auth: "admin",
|
|
40448
|
+
timeoutMs: 12e4
|
|
40327
40449
|
}), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
|
|
40328
40450
|
kind: "mutation",
|
|
40329
40451
|
auth: "admin",
|
|
@@ -44665,12 +44787,6 @@ Object.freeze({
|
|
|
44665
44787
|
addonId: null,
|
|
44666
44788
|
access: "create"
|
|
44667
44789
|
},
|
|
44668
|
-
"pipelineAnalytics.createRetrainDatasetVersion": {
|
|
44669
|
-
capName: "pipeline-analytics",
|
|
44670
|
-
capScope: "device",
|
|
44671
|
-
addonId: null,
|
|
44672
|
-
access: "create"
|
|
44673
|
-
},
|
|
44674
44790
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
44675
44791
|
capName: "pipeline-analytics",
|
|
44676
44792
|
capScope: "device",
|
|
@@ -44683,12 +44799,6 @@ Object.freeze({
|
|
|
44683
44799
|
addonId: null,
|
|
44684
44800
|
access: "delete"
|
|
44685
44801
|
},
|
|
44686
|
-
"pipelineAnalytics.deleteRetrainDatasetVersion": {
|
|
44687
|
-
capName: "pipeline-analytics",
|
|
44688
|
-
capScope: "device",
|
|
44689
|
-
addonId: null,
|
|
44690
|
-
access: "delete"
|
|
44691
|
-
},
|
|
44692
44802
|
"pipelineAnalytics.deleteTracks": {
|
|
44693
44803
|
capName: "pipeline-analytics",
|
|
44694
44804
|
capScope: "device",
|
|
@@ -44791,6 +44901,12 @@ Object.freeze({
|
|
|
44791
44901
|
addonId: null,
|
|
44792
44902
|
access: "view"
|
|
44793
44903
|
},
|
|
44904
|
+
"pipelineAnalytics.getRetrainCorpusKpi": {
|
|
44905
|
+
capName: "pipeline-analytics",
|
|
44906
|
+
capScope: "device",
|
|
44907
|
+
addonId: null,
|
|
44908
|
+
access: "view"
|
|
44909
|
+
},
|
|
44794
44910
|
"pipelineAnalytics.getRetrainExportUrl": {
|
|
44795
44911
|
capName: "pipeline-analytics",
|
|
44796
44912
|
capScope: "device",
|
|
@@ -44911,7 +45027,7 @@ Object.freeze({
|
|
|
44911
45027
|
addonId: null,
|
|
44912
45028
|
access: "view"
|
|
44913
45029
|
},
|
|
44914
|
-
"pipelineAnalytics.
|
|
45030
|
+
"pipelineAnalytics.listRetrainCorpusPage": {
|
|
44915
45031
|
capName: "pipeline-analytics",
|
|
44916
45032
|
capScope: "device",
|
|
44917
45033
|
addonId: null,
|
|
@@ -44965,12 +45081,6 @@ Object.freeze({
|
|
|
44965
45081
|
addonId: null,
|
|
44966
45082
|
access: "create"
|
|
44967
45083
|
},
|
|
44968
|
-
"pipelineAnalytics.previewRetrainDataset": {
|
|
44969
|
-
capName: "pipeline-analytics",
|
|
44970
|
-
capScope: "device",
|
|
44971
|
-
addonId: null,
|
|
44972
|
-
access: "view"
|
|
44973
|
-
},
|
|
44974
45084
|
"pipelineAnalytics.proposeRetrainAnnotations": {
|
|
44975
45085
|
capName: "pipeline-analytics",
|
|
44976
45086
|
capScope: "device",
|
|
@@ -45049,6 +45159,12 @@ Object.freeze({
|
|
|
45049
45159
|
addonId: null,
|
|
45050
45160
|
access: "create"
|
|
45051
45161
|
},
|
|
45162
|
+
"pipelineAnalytics.resolveRetrainTrainingCorpus": {
|
|
45163
|
+
capName: "pipeline-analytics",
|
|
45164
|
+
capScope: "device",
|
|
45165
|
+
addonId: null,
|
|
45166
|
+
access: "view"
|
|
45167
|
+
},
|
|
45052
45168
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
45053
45169
|
capName: "pipeline-analytics",
|
|
45054
45170
|
capScope: "device",
|
|
@@ -45109,12 +45225,6 @@ Object.freeze({
|
|
|
45109
45225
|
addonId: null,
|
|
45110
45226
|
access: "create"
|
|
45111
45227
|
},
|
|
45112
|
-
"pipelineAnalytics.verifyRetrainDatasetVersion": {
|
|
45113
|
-
capName: "pipeline-analytics",
|
|
45114
|
-
capScope: "device",
|
|
45115
|
-
addonId: null,
|
|
45116
|
-
access: "view"
|
|
45117
|
-
},
|
|
45118
45228
|
"pipelineAnalytics.wipeAllAnalytics": {
|
|
45119
45229
|
capName: "pipeline-analytics",
|
|
45120
45230
|
capScope: "device",
|
|
@@ -47509,18 +47619,6 @@ Object.freeze({
|
|
|
47509
47619
|
addonId: null,
|
|
47510
47620
|
access: "create"
|
|
47511
47621
|
},
|
|
47512
|
-
"training.findDatasetVersionIdByName": {
|
|
47513
|
-
capName: "training",
|
|
47514
|
-
capScope: "system",
|
|
47515
|
-
addonId: null,
|
|
47516
|
-
access: "view"
|
|
47517
|
-
},
|
|
47518
|
-
"training.getDatasetVersion": {
|
|
47519
|
-
capName: "training",
|
|
47520
|
-
capScope: "system",
|
|
47521
|
-
addonId: null,
|
|
47522
|
-
access: "view"
|
|
47523
|
-
},
|
|
47524
47622
|
"training.getJob": {
|
|
47525
47623
|
capName: "training",
|
|
47526
47624
|
capScope: "system",
|
|
@@ -47539,12 +47637,6 @@ Object.freeze({
|
|
|
47539
47637
|
addonId: null,
|
|
47540
47638
|
access: "view"
|
|
47541
47639
|
},
|
|
47542
|
-
"training.listDatasetVersions": {
|
|
47543
|
-
capName: "training",
|
|
47544
|
-
capScope: "system",
|
|
47545
|
-
addonId: null,
|
|
47546
|
-
access: "view"
|
|
47547
|
-
},
|
|
47548
47640
|
"training.listJobs": {
|
|
47549
47641
|
capName: "training",
|
|
47550
47642
|
capScope: "system",
|
|
@@ -47557,54 +47649,66 @@ Object.freeze({
|
|
|
47557
47649
|
addonId: null,
|
|
47558
47650
|
access: "view"
|
|
47559
47651
|
},
|
|
47560
|
-
"training.
|
|
47652
|
+
"training.registerResult": {
|
|
47561
47653
|
capName: "training",
|
|
47562
47654
|
capScope: "system",
|
|
47563
47655
|
addonId: null,
|
|
47564
47656
|
access: "create"
|
|
47565
47657
|
},
|
|
47566
|
-
"training.
|
|
47658
|
+
"training.rollbackCanary": {
|
|
47567
47659
|
capName: "training",
|
|
47568
47660
|
capScope: "system",
|
|
47569
47661
|
addonId: null,
|
|
47570
47662
|
access: "create"
|
|
47571
47663
|
},
|
|
47572
|
-
"training.
|
|
47664
|
+
"training.startJob": {
|
|
47573
47665
|
capName: "training",
|
|
47574
47666
|
capScope: "system",
|
|
47575
47667
|
addonId: null,
|
|
47576
|
-
access: "
|
|
47668
|
+
access: "create"
|
|
47577
47669
|
},
|
|
47578
|
-
"training.
|
|
47670
|
+
"training.startJobBatch": {
|
|
47579
47671
|
capName: "training",
|
|
47580
47672
|
capScope: "system",
|
|
47581
47673
|
addonId: null,
|
|
47582
47674
|
access: "create"
|
|
47583
47675
|
},
|
|
47584
|
-
"
|
|
47585
|
-
capName: "training",
|
|
47676
|
+
"trainingProvider.cancelJob": {
|
|
47677
|
+
capName: "training-provider",
|
|
47586
47678
|
capScope: "system",
|
|
47587
47679
|
addonId: null,
|
|
47588
47680
|
access: "create"
|
|
47589
47681
|
},
|
|
47590
|
-
"trainingProvider.
|
|
47682
|
+
"trainingProvider.cleanupJob": {
|
|
47591
47683
|
capName: "training-provider",
|
|
47592
47684
|
capScope: "system",
|
|
47593
47685
|
addonId: null,
|
|
47594
47686
|
access: "create"
|
|
47595
47687
|
},
|
|
47596
|
-
"trainingProvider.
|
|
47688
|
+
"trainingProvider.createEntry": {
|
|
47597
47689
|
capName: "training-provider",
|
|
47598
47690
|
capScope: "system",
|
|
47599
47691
|
addonId: null,
|
|
47600
47692
|
access: "create"
|
|
47601
47693
|
},
|
|
47694
|
+
"trainingProvider.deleteEntry": {
|
|
47695
|
+
capName: "training-provider",
|
|
47696
|
+
capScope: "system",
|
|
47697
|
+
addonId: null,
|
|
47698
|
+
access: "delete"
|
|
47699
|
+
},
|
|
47602
47700
|
"trainingProvider.describe": {
|
|
47603
47701
|
capName: "training-provider",
|
|
47604
47702
|
capScope: "system",
|
|
47605
47703
|
addonId: null,
|
|
47606
47704
|
access: "view"
|
|
47607
47705
|
},
|
|
47706
|
+
"trainingProvider.describeTypes": {
|
|
47707
|
+
capName: "training-provider",
|
|
47708
|
+
capScope: "system",
|
|
47709
|
+
addonId: null,
|
|
47710
|
+
access: "view"
|
|
47711
|
+
},
|
|
47608
47712
|
"trainingProvider.estimateJob": {
|
|
47609
47713
|
capName: "training-provider",
|
|
47610
47714
|
capScope: "system",
|
|
@@ -47617,6 +47721,12 @@ Object.freeze({
|
|
|
47617
47721
|
addonId: null,
|
|
47618
47722
|
access: "view"
|
|
47619
47723
|
},
|
|
47724
|
+
"trainingProvider.listEntries": {
|
|
47725
|
+
capName: "training-provider",
|
|
47726
|
+
capScope: "system",
|
|
47727
|
+
addonId: null,
|
|
47728
|
+
access: "view"
|
|
47729
|
+
},
|
|
47620
47730
|
"trainingProvider.listJobEvents": {
|
|
47621
47731
|
capName: "training-provider",
|
|
47622
47732
|
capScope: "system",
|
|
@@ -51073,6 +51183,11 @@ Object.freeze({
|
|
|
51073
51183
|
form: "array",
|
|
51074
51184
|
optional: false
|
|
51075
51185
|
}],
|
|
51186
|
+
"pipelineAnalytics.listRetrainCorpusPage": [{
|
|
51187
|
+
name: "deviceIds",
|
|
51188
|
+
form: "array",
|
|
51189
|
+
optional: true
|
|
51190
|
+
}],
|
|
51076
51191
|
"pipelineAnalytics.listRetrainStaging": [{
|
|
51077
51192
|
name: "deviceIds",
|
|
51078
51193
|
form: "array",
|