@camstack/addon-model-studio 1.1.229 → 1.1.231

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 +29 -21
  5. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-DQJCw6s8.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-cZw6pjOH.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-D05xasL9.mjs → hostInit-DiGZOGzc.mjs} +2 -2
  9. package/dist/model-studio.addon.js +246 -131
  10. package/dist/model-studio.addon.mjs +246 -131
  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-C9qRdjcf.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-CH1IZO8J.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)
@@ -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
- }), 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) }), {
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, routed by the `addonId` in every single-row input (the `llm` /
39913
- * `notification-output` posture); `describe` concat-fans across providers.
39914
- * 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.
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-account settings, as the orchestrator reads them. They
39939
- * 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
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
- /** `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. */
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
- addonId: string(),
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({ 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, {
40025
40108
  kind: "mutation",
40026
40109
  auth: "admin",
40027
40110
  timeoutMs: 3e4
40028
40111
  }), method(object({
40029
- addonId: string(),
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({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
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
- /** A version WITH its frame list — what the export and a job read. */
40118
- 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
+ });
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
- datasetVersionId: string().min(1),
40137
- /** The `training-provider` addon that runs it. */
40138
- 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),
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(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
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.listRetrainDatasetVersions": {
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.putDatasetVersion": {
47652
+ "training.registerResult": {
47561
47653
  capName: "training",
47562
47654
  capScope: "system",
47563
47655
  addonId: null,
47564
47656
  access: "create"
47565
47657
  },
47566
- "training.registerResult": {
47658
+ "training.rollbackCanary": {
47567
47659
  capName: "training",
47568
47660
  capScope: "system",
47569
47661
  addonId: null,
47570
47662
  access: "create"
47571
47663
  },
47572
- "training.removeDatasetVersion": {
47664
+ "training.startJob": {
47573
47665
  capName: "training",
47574
47666
  capScope: "system",
47575
47667
  addonId: null,
47576
- access: "delete"
47668
+ access: "create"
47577
47669
  },
47578
- "training.rollbackCanary": {
47670
+ "training.startJobBatch": {
47579
47671
  capName: "training",
47580
47672
  capScope: "system",
47581
47673
  addonId: null,
47582
47674
  access: "create"
47583
47675
  },
47584
- "training.startJob": {
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.cancelJob": {
47682
+ "trainingProvider.cleanupJob": {
47591
47683
  capName: "training-provider",
47592
47684
  capScope: "system",
47593
47685
  addonId: null,
47594
47686
  access: "create"
47595
47687
  },
47596
- "trainingProvider.cleanupJob": {
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",