@camstack/addon-model-studio 1.1.228 → 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.
Files changed (19) hide show
  1. package/dist/{MotionZonesSettings-AwjU_jds.mjs → MotionZonesSettings-9DNvDBRb.mjs} +2 -2
  2. package/dist/{PrivacyMaskSettings-BxJyOTIX.mjs → PrivacyMaskSettings-B8wVIjmI.mjs} +4 -4
  3. package/dist/{SceneMonitorEditor-CvsWahwh.mjs → SceneMonitorEditor-DUiiMwds.mjs} +3 -3
  4. package/dist/_stub.js +4366 -4318
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BCzo8Ivn.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-C2gOmMPj.mjs} +3 -3
  6. package/dist/_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CvAZq56a.mjs +26 -0
  7. package/dist/addon-model-studio.css +1 -1
  8. package/dist/{hostInit-gQy4GGXk.mjs → hostInit-DiDfmJ3W.mjs} +2 -2
  9. package/dist/model-studio.addon.js +258 -132
  10. package/dist/model-studio.addon.mjs +258 -132
  11. package/dist/{player-overlays-DUpfuxPB.mjs → player-overlays-DZe7hnQ4.mjs} +1 -1
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-BHoVd25G.mjs → responsive-yCZZZ6gV.mjs} +1 -1
  14. package/dist/{scene-monitor-copy-DGpr-uDO.mjs → scene-monitor-copy-Cl7b4sC4.mjs} +1 -1
  15. package/dist/{square-CeBzl9Ag.mjs → square-CMKCu9Lr.mjs} +1 -1
  16. package/dist/{trash-2-Bl3EnWCS.mjs → trash-2-Dc4vbOgo.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DYKjkHm-.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-DVFLaMDL.mjs} +1 -1
  18. package/package.json +1 -1
  19. 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-r3RWkGVx.mjs
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. A dataset VERSION is a frozen `frameIds`
24537
- * list owned by whoever trains (the training orchestrator), so `frameIds` is
24538
- * the primitive a version export uses; `batchId` re-selects what an earlier
24539
- * export carried (`exportedInBatch`).
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
- /** Exactly the frames of this dataset version (and its completeOnly). An
24547
- * unknown id selects nothing. */
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
- /** An immutable dataset version, without its frame list. */
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
- var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
24767
- kind: literal("created"),
24768
- version: RetrainDatasetVersionSchema
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
- "empty-name",
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)
@@ -26246,11 +26291,14 @@ var HardwareClassIdSchema = _enum([
26246
26291
  "intel-n-series",
26247
26292
  "apple-m-base",
26248
26293
  "apple-m-pro",
26294
+ "amd-phoenix",
26249
26295
  "unknown"
26250
26296
  ]);
26251
26297
  var AcceleratorKindSchema = _enum([
26252
26298
  "intel-npu",
26253
26299
  "intel-igpu",
26300
+ "amd-igpu",
26301
+ "amd-npu",
26254
26302
  "x86-cpu",
26255
26303
  "arm-cpu",
26256
26304
  "apple-ane",
@@ -28140,6 +28188,8 @@ var AgentPipelineSettingsSchema = object({
28140
28188
  * address is wrong (multi-homed host, NAT, custom interface).
28141
28189
  */
28142
28190
  reachableHost: string().optional(),
28191
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
28192
+ color: NodeColorIdSchema.optional(),
28143
28193
  /**
28144
28194
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
28145
28195
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -28689,8 +28739,9 @@ method(object({
28689
28739
  auth: "admin"
28690
28740
  }), method(object({
28691
28741
  agentNodeId: string(),
28692
- reachableHost: string().nullable()
28693
- }), object({ success: literal(true) }), {
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) }), {
28694
28745
  kind: "mutation",
28695
28746
  auth: "admin"
28696
28747
  }), method(object({
@@ -36136,7 +36187,15 @@ var GpuInfoSchema = object({
36136
36187
  name: string(),
36137
36188
  memoryMB: number().optional()
36138
36189
  });
36139
- var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
36190
+ var NpuInfoSchema = object({
36191
+ type: _enum([
36192
+ "apple-ane",
36193
+ "intel-npu",
36194
+ "amd-xdna"
36195
+ ]),
36196
+ name: string().optional(),
36197
+ generation: _enum(["xdna1", "xdna2"]).optional()
36198
+ });
36140
36199
  var CoralInfoSchema = object({
36141
36200
  type: literal("coral-edgetpu"),
36142
36201
  bus: string().optional()
@@ -39898,9 +39957,11 @@ DeviceType.Camera, method(object({
39898
39957
  * once is what makes a second provider (RunPod, a local NVIDIA node) a new
39899
39958
  * manifest entry and nothing else.
39900
39959
  *
39901
- * Collection, routed by the `addonId` in every single-row input (the `llm` /
39902
- * `notification-output` posture); `describe` concat-fans across providers.
39903
- * Every method is `admin`: these spend money.
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.
39904
39965
  *
39905
39966
  * Every cloud object a provider creates is tagged with the orchestrator's
39906
39967
  * `jobKey`, so a retried submit finds the job it already started instead of
@@ -39924,8 +39985,8 @@ var TrainingRegionOptionSchema = object({
39924
39985
  priceMultiplier: number().positive()
39925
39986
  });
39926
39987
  /**
39927
- * The provider's per-account settings, as the orchestrator reads them. They
39928
- * live in the PROVIDER addon's settings (operator decision 2026-10-08: they
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
39929
39990
  * depend on the user's account), never hard-coded in the orchestrator.
39930
39991
  */
39931
39992
  var TrainingProviderDefaultsSchema = object({
@@ -39936,9 +39997,32 @@ var TrainingProviderDefaultsSchema = object({
39936
39997
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
39937
39998
  failedDatasetGraceHours: number().nonnegative()
39938
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
+ });
39939
40018
  var TrainingProviderDescriptorSchema = object({
39940
40019
  addonId: string(),
39941
- /** `modal`, `runpod`, `fake`, … */
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. */
39942
40026
  kind: string(),
39943
40027
  label: string(),
39944
40028
  gpuTypes: array(TrainingGpuOptionSchema).readonly(),
@@ -40002,20 +40086,30 @@ var TrainerSourceRefSchema = object({
40002
40086
  /** A commit sha (never a branch) — the job must be reproducible. */
40003
40087
  revision: string().regex(/^[0-9a-f]{7,64}$/)
40004
40088
  });
40089
+ /** Cloud job identity — route with the owning addon's `addonId` selector. */
40005
40090
  var JobRef = {
40006
- addonId: string(),
40091
+ entryId: string().min(1),
40007
40092
  jobKey: string().uuid()
40008
40093
  };
40009
40094
  var TrainingLogLineSchema = object({
40010
40095
  ts: number(),
40011
40096
  text: string()
40012
40097
  });
40013
- method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({ addonId: string() }), TrainingCredentialCheckSchema, {
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, {
40014
40108
  kind: "mutation",
40015
40109
  auth: "admin",
40016
40110
  timeoutMs: 3e4
40017
40111
  }), method(object({
40018
- addonId: string(),
40112
+ entryId: string().min(1),
40019
40113
  gpuType: string(),
40020
40114
  region: string(),
40021
40115
  datasetBytes: number().int().nonnegative(),
@@ -40081,7 +40175,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
40081
40175
  kind: "mutation",
40082
40176
  auth: "admin",
40083
40177
  timeoutMs: 5 * 6e4
40084
- }), method(object({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
40178
+ }), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
40085
40179
  auth: "admin",
40086
40180
  timeoutMs: 2 * 6e4
40087
40181
  });
@@ -40091,20 +40185,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
40091
40185
  *
40092
40186
  * It owns what every provider must agree on, written once:
40093
40187
  *
40094
- * - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
40095
- * live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
40096
- * the export plan) and reaches this store through the five row methods
40097
- * below, so the Retrain page and the export did not change.
40098
40188
  * - **Jobs.** A persisted state machine, a reconcile loop against the
40099
40189
  * provider, a cost guard, a daily orphan sweep and the retention rules.
40100
40190
  * - **The return flow.** Verified artefacts → Model Studio
40101
40191
  * (`custom-model-registry.importModelBundle`) → canary on cameras →
40102
40192
  * rollback. Nothing is ever registered automatically.
40103
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
+ *
40104
40198
  * Every method is `admin`.
40105
40199
  */
40106
- /** A version WITH its frame list — what the export and a job read. */
40107
- var TrainingDatasetVersionRowSchema = RetrainDatasetVersionSchema.omit({ frameCount: true }).extend({ frameIds: array(string()).max(2e4).readonly() });
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
+ });
40108
40213
  /** A base model a detector job can fine-tune, and the baseline it is judged against. */
40109
40214
  var TrainingBaseModelSchema = object({
40110
40215
  modelId: string(),
@@ -40122,9 +40227,13 @@ var TrainingPresetSchema = _enum([
40122
40227
  "thorough"
40123
40228
  ]);
40124
40229
  var TrainingJobRequestSchema = object({
40125
- datasetVersionId: string().min(1),
40126
- /** The `training-provider` addon that runs it. */
40127
- addonId: string().min(1),
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),
40128
40237
  gpuType: string().min(1),
40129
40238
  region: string(),
40130
40239
  baseModelId: string().min(1),
@@ -40183,6 +40292,7 @@ var TrainingJobPlanSchema = object({
40183
40292
  * result lives after the operator acted on it.
40184
40293
  */
40185
40294
  var TrainingJobStateSchema = _enum([
40295
+ "queued",
40186
40296
  "uploading",
40187
40297
  "submitted",
40188
40298
  "starting",
@@ -40236,6 +40346,11 @@ var TrainingJobSchema = object({
40236
40346
  createdAt: number(),
40237
40347
  updatedAt: number(),
40238
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),
40239
40354
  stage: TrainingStageSchema.nullable(),
40240
40355
  failure: object({
40241
40356
  reason: TrainingFailureReasonSchema,
@@ -40247,6 +40362,12 @@ var TrainingJobSchema = object({
40247
40362
  maxRuntimeSec: number().int().positive(),
40248
40363
  trainer: TrainerSourceRefSchema,
40249
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(),
40250
40371
  dataset: object({
40251
40372
  bytes: number().int(),
40252
40373
  sha256: string(),
@@ -40288,13 +40409,7 @@ var TrainingJobSchema = object({
40288
40409
  canary: TrainingCanarySchema.nullable()
40289
40410
  });
40290
40411
  var IdInput = object({ id: string().min(1) });
40291
- method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
40292
- kind: "mutation",
40293
- auth: "admin"
40294
- }), 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() }), {
40295
- kind: "mutation",
40296
- auth: "admin"
40297
- }), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
40412
+ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
40298
40413
  auth: "admin",
40299
40414
  timeoutMs: 6e4
40300
40415
  }), method(TrainingJobRequestSchema.extend({
@@ -40313,6 +40428,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
40313
40428
  kind: "mutation",
40314
40429
  auth: "admin",
40315
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
40316
40449
  }), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
40317
40450
  kind: "mutation",
40318
40451
  auth: "admin",
@@ -44654,12 +44787,6 @@ Object.freeze({
44654
44787
  addonId: null,
44655
44788
  access: "create"
44656
44789
  },
44657
- "pipelineAnalytics.createRetrainDatasetVersion": {
44658
- capName: "pipeline-analytics",
44659
- capScope: "device",
44660
- addonId: null,
44661
- access: "create"
44662
- },
44663
44790
  "pipelineAnalytics.deleteDeviceEvents": {
44664
44791
  capName: "pipeline-analytics",
44665
44792
  capScope: "device",
@@ -44672,12 +44799,6 @@ Object.freeze({
44672
44799
  addonId: null,
44673
44800
  access: "delete"
44674
44801
  },
44675
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
44676
- capName: "pipeline-analytics",
44677
- capScope: "device",
44678
- addonId: null,
44679
- access: "delete"
44680
- },
44681
44802
  "pipelineAnalytics.deleteTracks": {
44682
44803
  capName: "pipeline-analytics",
44683
44804
  capScope: "device",
@@ -44780,6 +44901,12 @@ Object.freeze({
44780
44901
  addonId: null,
44781
44902
  access: "view"
44782
44903
  },
44904
+ "pipelineAnalytics.getRetrainCorpusKpi": {
44905
+ capName: "pipeline-analytics",
44906
+ capScope: "device",
44907
+ addonId: null,
44908
+ access: "view"
44909
+ },
44783
44910
  "pipelineAnalytics.getRetrainExportUrl": {
44784
44911
  capName: "pipeline-analytics",
44785
44912
  capScope: "device",
@@ -44900,7 +45027,7 @@ Object.freeze({
44900
45027
  addonId: null,
44901
45028
  access: "view"
44902
45029
  },
44903
- "pipelineAnalytics.listRetrainDatasetVersions": {
45030
+ "pipelineAnalytics.listRetrainCorpusPage": {
44904
45031
  capName: "pipeline-analytics",
44905
45032
  capScope: "device",
44906
45033
  addonId: null,
@@ -44954,12 +45081,6 @@ Object.freeze({
44954
45081
  addonId: null,
44955
45082
  access: "create"
44956
45083
  },
44957
- "pipelineAnalytics.previewRetrainDataset": {
44958
- capName: "pipeline-analytics",
44959
- capScope: "device",
44960
- addonId: null,
44961
- access: "view"
44962
- },
44963
45084
  "pipelineAnalytics.proposeRetrainAnnotations": {
44964
45085
  capName: "pipeline-analytics",
44965
45086
  capScope: "device",
@@ -45038,6 +45159,12 @@ Object.freeze({
45038
45159
  addonId: null,
45039
45160
  access: "create"
45040
45161
  },
45162
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
45163
+ capName: "pipeline-analytics",
45164
+ capScope: "device",
45165
+ addonId: null,
45166
+ access: "view"
45167
+ },
45041
45168
  "pipelineAnalytics.restageRetrainTrack": {
45042
45169
  capName: "pipeline-analytics",
45043
45170
  capScope: "device",
@@ -45098,12 +45225,6 @@ Object.freeze({
45098
45225
  addonId: null,
45099
45226
  access: "create"
45100
45227
  },
45101
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
45102
- capName: "pipeline-analytics",
45103
- capScope: "device",
45104
- addonId: null,
45105
- access: "view"
45106
- },
45107
45228
  "pipelineAnalytics.wipeAllAnalytics": {
45108
45229
  capName: "pipeline-analytics",
45109
45230
  capScope: "device",
@@ -47498,18 +47619,6 @@ Object.freeze({
47498
47619
  addonId: null,
47499
47620
  access: "create"
47500
47621
  },
47501
- "training.findDatasetVersionIdByName": {
47502
- capName: "training",
47503
- capScope: "system",
47504
- addonId: null,
47505
- access: "view"
47506
- },
47507
- "training.getDatasetVersion": {
47508
- capName: "training",
47509
- capScope: "system",
47510
- addonId: null,
47511
- access: "view"
47512
- },
47513
47622
  "training.getJob": {
47514
47623
  capName: "training",
47515
47624
  capScope: "system",
@@ -47528,12 +47637,6 @@ Object.freeze({
47528
47637
  addonId: null,
47529
47638
  access: "view"
47530
47639
  },
47531
- "training.listDatasetVersions": {
47532
- capName: "training",
47533
- capScope: "system",
47534
- addonId: null,
47535
- access: "view"
47536
- },
47537
47640
  "training.listJobs": {
47538
47641
  capName: "training",
47539
47642
  capScope: "system",
@@ -47546,54 +47649,66 @@ Object.freeze({
47546
47649
  addonId: null,
47547
47650
  access: "view"
47548
47651
  },
47549
- "training.putDatasetVersion": {
47652
+ "training.registerResult": {
47550
47653
  capName: "training",
47551
47654
  capScope: "system",
47552
47655
  addonId: null,
47553
47656
  access: "create"
47554
47657
  },
47555
- "training.registerResult": {
47658
+ "training.rollbackCanary": {
47556
47659
  capName: "training",
47557
47660
  capScope: "system",
47558
47661
  addonId: null,
47559
47662
  access: "create"
47560
47663
  },
47561
- "training.removeDatasetVersion": {
47664
+ "training.startJob": {
47562
47665
  capName: "training",
47563
47666
  capScope: "system",
47564
47667
  addonId: null,
47565
- access: "delete"
47668
+ access: "create"
47566
47669
  },
47567
- "training.rollbackCanary": {
47670
+ "training.startJobBatch": {
47568
47671
  capName: "training",
47569
47672
  capScope: "system",
47570
47673
  addonId: null,
47571
47674
  access: "create"
47572
47675
  },
47573
- "training.startJob": {
47574
- capName: "training",
47676
+ "trainingProvider.cancelJob": {
47677
+ capName: "training-provider",
47575
47678
  capScope: "system",
47576
47679
  addonId: null,
47577
47680
  access: "create"
47578
47681
  },
47579
- "trainingProvider.cancelJob": {
47682
+ "trainingProvider.cleanupJob": {
47580
47683
  capName: "training-provider",
47581
47684
  capScope: "system",
47582
47685
  addonId: null,
47583
47686
  access: "create"
47584
47687
  },
47585
- "trainingProvider.cleanupJob": {
47688
+ "trainingProvider.createEntry": {
47586
47689
  capName: "training-provider",
47587
47690
  capScope: "system",
47588
47691
  addonId: null,
47589
47692
  access: "create"
47590
47693
  },
47694
+ "trainingProvider.deleteEntry": {
47695
+ capName: "training-provider",
47696
+ capScope: "system",
47697
+ addonId: null,
47698
+ access: "delete"
47699
+ },
47591
47700
  "trainingProvider.describe": {
47592
47701
  capName: "training-provider",
47593
47702
  capScope: "system",
47594
47703
  addonId: null,
47595
47704
  access: "view"
47596
47705
  },
47706
+ "trainingProvider.describeTypes": {
47707
+ capName: "training-provider",
47708
+ capScope: "system",
47709
+ addonId: null,
47710
+ access: "view"
47711
+ },
47597
47712
  "trainingProvider.estimateJob": {
47598
47713
  capName: "training-provider",
47599
47714
  capScope: "system",
@@ -47606,6 +47721,12 @@ Object.freeze({
47606
47721
  addonId: null,
47607
47722
  access: "view"
47608
47723
  },
47724
+ "trainingProvider.listEntries": {
47725
+ capName: "training-provider",
47726
+ capScope: "system",
47727
+ addonId: null,
47728
+ access: "view"
47729
+ },
47609
47730
  "trainingProvider.listJobEvents": {
47610
47731
  capName: "training-provider",
47611
47732
  capScope: "system",
@@ -51062,6 +51183,11 @@ Object.freeze({
51062
51183
  form: "array",
51063
51184
  optional: false
51064
51185
  }],
51186
+ "pipelineAnalytics.listRetrainCorpusPage": [{
51187
+ name: "deviceIds",
51188
+ form: "array",
51189
+ optional: true
51190
+ }],
51065
51191
  "pipelineAnalytics.listRetrainStaging": [{
51066
51192
  name: "deviceIds",
51067
51193
  form: "array",