@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
@@ -5746,7 +5746,7 @@ var ZodIssueCode = {
5746
5746
  var ZodFirstPartyTypeKind;
5747
5747
  ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
5748
5748
  //#endregion
5749
- //#region ../types/dist/sleep-r3RWkGVx.mjs
5749
+ //#region ../types/dist/sleep-CI0n5D44.mjs
5750
5750
  /**
5751
5751
  * The audio chunk plane's byte format, and the ONE expansion from a coded
5752
5752
  * window to float samples (D455).
@@ -9756,6 +9756,16 @@ var CompositionSchema = object({
9756
9756
  seen.add(feature.cap);
9757
9757
  });
9758
9758
  });
9759
+ var NodeColorIdSchema = _enum([
9760
+ "node-a",
9761
+ "node-b",
9762
+ "node-c",
9763
+ "node-d",
9764
+ "node-e",
9765
+ "node-f",
9766
+ "node-g",
9767
+ "node-h"
9768
+ ]);
9759
9769
  new Set([
9760
9770
  "track",
9761
9771
  "face",
@@ -24505,24 +24515,69 @@ var RetrainFrameListSchema = object({
24505
24515
  /** What the page pre-selects — the native key frame when one survives. */
24506
24516
  autoPickMediaId: number().int().optional()
24507
24517
  });
24518
+ /** Exclusive partition of a corpus copy's annotation progress (design §4.2). */
24519
+ var RetrainFrameWorkStateSchema = _enum([
24520
+ "unannotated",
24521
+ "annotated",
24522
+ "complete"
24523
+ ]);
24524
+ /**
24525
+ * Filters for paginated corpus list, KPI, and matching export (design §4.4).
24526
+ * Every narrowing field is ANDed; omitted fields impose no constraint.
24527
+ */
24528
+ var RetrainCorpusFilterSchema = object({
24529
+ workState: RetrainFrameWorkStateSchema.optional(),
24530
+ deviceIds: array(number()).max(500).optional(),
24531
+ /** When set, only frames in this named collection. */
24532
+ collectionId: string().optional(),
24533
+ /** Frames that carry at least one saved annotation in one of these classes. */
24534
+ classes: array(RetrainMacroClassSchema).optional(),
24535
+ page: number().int().positive().default(1),
24536
+ pageSize: number().int().positive().max(100).default(50)
24537
+ });
24538
+ var RetrainCorpusPageSchema = object({
24539
+ frames: array(RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema })).readonly(),
24540
+ total: number().int().nonnegative(),
24541
+ page: number().int().positive(),
24542
+ pageSize: number().int().positive()
24543
+ });
24544
+ var RetrainCorpusKpiCameraRowSchema = object({
24545
+ deviceId: number(),
24546
+ unannotated: number().int().nonnegative(),
24547
+ annotated: number().int().nonnegative(),
24548
+ complete: number().int().nonnegative(),
24549
+ /** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
24550
+ * `null` when the corpus is empty (no ratio). */
24551
+ pctOfCorpus: number().min(0).max(1).nullable()
24552
+ });
24553
+ var RetrainCorpusKpiSchema = object({
24554
+ total: number().int().nonnegative(),
24555
+ unannotated: number().int().nonnegative(),
24556
+ annotated: number().int().nonnegative(),
24557
+ complete: number().int().nonnegative(),
24558
+ cameras: array(RetrainCorpusKpiCameraRowSchema).readonly()
24559
+ });
24508
24560
  /**
24509
24561
  * Which frames an annotated export carries. Every field narrows; an empty
24510
- * filter is every annotated copy. A dataset VERSION is a frozen `frameIds`
24511
- * list owned by whoever trains (the training orchestrator), so `frameIds` is
24512
- * the primitive a version export uses; `batchId` re-selects what an earlier
24513
- * export carried (`exportedInBatch`).
24562
+ * filter is every annotated copy. `frameIds` is the primitive a job or
24563
+ * download uses; `batchId` re-selects what an earlier export carried
24564
+ * (`exportedInBatch`). Frozen dataset versions were removed — live selection
24565
+ * resolves to `frameIds` at plan/start.
24514
24566
  */
24515
24567
  var RetrainExportFilterSchema = object({
24516
24568
  deviceIds: array(number()).optional(),
24517
24569
  frameIds: array(string()).max(2e4).optional(),
24518
24570
  /** Only frames in at least one of these named collections. */
24519
24571
  collectionIds: array(string()).max(200).optional(),
24520
- /** Exactly the frames of this dataset version (and its completeOnly). An
24521
- * unknown id selects nothing. */
24522
- datasetVersionId: string().optional(),
24572
+ /** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
24573
+ collectionId: string().optional(),
24523
24574
  batchId: string().optional(),
24524
24575
  /** Only frames the operator marked complete (all subjects boxed). */
24525
- completeOnly: boolean().optional()
24576
+ completeOnly: boolean().optional(),
24577
+ /** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
24578
+ workState: RetrainFrameWorkStateSchema.optional(),
24579
+ /** Frames with at least one saved annotation in one of these classes. */
24580
+ classes: array(RetrainMacroClassSchema).optional()
24526
24581
  });
24527
24582
  /**
24528
24583
  * `frames`: the full frame copies, boxes in `annotations.json`.
@@ -24722,8 +24777,7 @@ var RetrainDatasetStatsSchema = object({
24722
24777
  completeFrames: number().int()
24723
24778
  })).readonly()
24724
24779
  });
24725
- /** An immutable dataset version, without its frame list. */
24726
- var RetrainDatasetVersionSchema = object({
24780
+ object({
24727
24781
  id: string(),
24728
24782
  name: string(),
24729
24783
  createdAt: number(),
@@ -24731,22 +24785,33 @@ var RetrainDatasetVersionSchema = object({
24731
24785
  layout: RetrainExportLayoutSchema,
24732
24786
  completeOnly: boolean(),
24733
24787
  frameCount: number().int(),
24734
- /** sha256 of what the frames taught when the version was frozen. */
24735
24788
  annotationHash: string(),
24736
- /** The export manifest schema the version was cut under. */
24737
24789
  manifestSchema: string(),
24738
24790
  stats: RetrainDatasetStatsSchema
24739
24791
  });
24740
- var CreateRetrainDatasetVersionResultSchema = discriminatedUnion("kind", [object({
24741
- kind: literal("created"),
24742
- version: RetrainDatasetVersionSchema
24792
+ /**
24793
+ * Live training corpus criteria — same shape as `TrainingCorpusSelection` on
24794
+ * the training cap. Resolved here so plan/start and the annotated export share
24795
+ * one definition of "the frames" (`buildRetrainExportPlan`).
24796
+ */
24797
+ var RetrainTrainingCorpusSelectionSchema = object({
24798
+ collectionIds: array(string()).min(1),
24799
+ workState: _enum([
24800
+ "complete",
24801
+ "annotated_or_complete",
24802
+ "any_annotated"
24803
+ ]).default("complete")
24804
+ });
24805
+ var RetrainTrainingCorpusResolveResultSchema = discriminatedUnion("kind", [object({
24806
+ kind: literal("resolved"),
24807
+ frameIds: array(string()).max(2e4).readonly(),
24808
+ stats: RetrainDatasetStatsSchema,
24809
+ annotationHash: string(),
24810
+ layout: RetrainExportLayoutSchema
24743
24811
  }), object({
24744
24812
  kind: literal("refused"),
24745
- reason: _enum([
24746
- "empty-name",
24747
- "duplicate-name",
24748
- "no-frames"
24749
- ])
24813
+ reason: _enum(["unknown-collection", "no-frames"]),
24814
+ detail: string()
24750
24815
  })]);
24751
24816
  /** The outcome of a lifecycle move owned by the retrain page. */
24752
24817
  var RetrainTransitionResultSchema = object({
@@ -25453,6 +25518,12 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25453
25518
  }), array(RetrainTrackSchema).readonly(), {
25454
25519
  kind: "query",
25455
25520
  auth: "admin"
25521
+ }), method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
25522
+ kind: "query",
25523
+ auth: "admin"
25524
+ }), method(object({}), RetrainCorpusKpiSchema, {
25525
+ kind: "query",
25526
+ auth: "admin"
25456
25527
  }), method(object({ trackId: string() }), RetrainFrameListSchema, {
25457
25528
  kind: "query",
25458
25529
  auth: "admin"
@@ -25548,36 +25619,6 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25548
25619
  kind: "mutation",
25549
25620
  auth: "admin",
25550
25621
  timeoutMs: 12e4
25551
- }), method(object({
25552
- selection: RetrainDatasetSelectionSchema,
25553
- completeOnly: boolean().optional()
25554
- }), RetrainDatasetStatsSchema, {
25555
- kind: "query",
25556
- auth: "admin"
25557
- }), method(object({
25558
- name: string().max(120),
25559
- selection: RetrainDatasetSelectionSchema,
25560
- layout: RetrainExportLayoutSchema,
25561
- completeOnly: boolean()
25562
- }), CreateRetrainDatasetVersionResultSchema, {
25563
- kind: "mutation",
25564
- auth: "admin",
25565
- timeoutMs: 12e4
25566
- }), method(object({}), array(RetrainDatasetVersionSchema).readonly(), {
25567
- kind: "query",
25568
- auth: "admin"
25569
- }), method(object({ id: string() }), object({ deleted: boolean() }), {
25570
- kind: "mutation",
25571
- auth: "admin"
25572
- }), method(object({ id: string() }), object({
25573
- found: boolean(),
25574
- annotationHash: string(),
25575
- matches: boolean(),
25576
- missingFrames: number().int()
25577
- }), {
25578
- kind: "query",
25579
- auth: "admin",
25580
- timeoutMs: 12e4
25581
25622
  }), method(object({}), array(RetrainAssistProfileSchema).readonly(), {
25582
25623
  kind: "query",
25583
25624
  auth: "admin"
@@ -25604,6 +25645,10 @@ DeviceType.Camera, method(object({ deviceId: number() }), array(TrackSchema).rea
25604
25645
  }), method(object({}), array(RetrainCollectionSchema).readonly(), {
25605
25646
  kind: "query",
25606
25647
  auth: "admin"
25648
+ }), method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
25649
+ kind: "query",
25650
+ auth: "admin",
25651
+ timeoutMs: 6e4
25607
25652
  }), method(object({
25608
25653
  id: string(),
25609
25654
  name: string().max(120)
@@ -28117,6 +28162,8 @@ var AgentPipelineSettingsSchema = object({
28117
28162
  * address is wrong (multi-homed host, NAT, custom interface).
28118
28163
  */
28119
28164
  reachableHost: string().optional(),
28165
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
28166
+ color: NodeColorIdSchema.optional(),
28120
28167
  /**
28121
28168
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
28122
28169
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -28666,8 +28713,9 @@ method(object({
28666
28713
  auth: "admin"
28667
28714
  }), method(object({
28668
28715
  agentNodeId: string(),
28669
- reachableHost: string().nullable()
28670
- }), object({ success: literal(true) }), {
28716
+ reachableHost: string().nullable().optional(),
28717
+ color: NodeColorIdSchema.nullable().optional()
28718
+ }).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), object({ success: literal(true) }), {
28671
28719
  kind: "mutation",
28672
28720
  auth: "admin"
28673
28721
  }), method(object({
@@ -39883,9 +39931,11 @@ DeviceType.Camera, method(object({
39883
39931
  * once is what makes a second provider (RunPod, a local NVIDIA node) a new
39884
39932
  * manifest entry and nothing else.
39885
39933
  *
39886
- * Collection, routed by the `addonId` in every single-row input (the `llm` /
39887
- * `notification-output` posture); `describe` concat-fans across providers.
39888
- * Every method is `admin`: these spend money.
39934
+ * Collection of provider **types** (addons). Each addon owns zero or more
39935
+ * **entries** (credentials + defaults). Concat-fans: `describe`,
39936
+ * `describeTypes`, `listEntries`, `listJobs`. Single-row work is keyed by
39937
+ * `entryId`; callers also pass the owning `addonId` as the collection
39938
+ * selector (broker posture). Every method is `admin`: these spend money.
39889
39939
  *
39890
39940
  * Every cloud object a provider creates is tagged with the orchestrator's
39891
39941
  * `jobKey`, so a retried submit finds the job it already started instead of
@@ -39909,8 +39959,8 @@ var TrainingRegionOptionSchema = object({
39909
39959
  priceMultiplier: number().positive()
39910
39960
  });
39911
39961
  /**
39912
- * The provider's per-account settings, as the orchestrator reads them. They
39913
- * live in the PROVIDER addon's settings (operator decision 2026-10-08: they
39962
+ * The provider's per-entry settings, as the orchestrator reads them. They
39963
+ * live on the PROVIDER addon's entry (operator decision 2026-10-08: they
39914
39964
  * depend on the user's account), never hard-coded in the orchestrator.
39915
39965
  */
39916
39966
  var TrainingProviderDefaultsSchema = object({
@@ -39921,9 +39971,32 @@ var TrainingProviderDefaultsSchema = object({
39921
39971
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
39922
39972
  failedDatasetGraceHours: number().nonnegative()
39923
39973
  });
39974
+ /** One creatable provider type, for the Add-entry dialog. */
39975
+ var TrainingProviderTypeSchema = object({
39976
+ typeId: string(),
39977
+ label: string(),
39978
+ /** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
39979
+ iconAsset: string(),
39980
+ /** Owning `training-provider` addon — collection selector for createEntry. */
39981
+ addonId: string()
39982
+ });
39983
+ /** One configured account / workspace under a provider type. */
39984
+ var TrainingProviderEntrySchema = object({
39985
+ entryId: string(),
39986
+ typeId: string(),
39987
+ name: string(),
39988
+ addonId: string(),
39989
+ /** Credentials are present — never the values. */
39990
+ configured: boolean()
39991
+ });
39924
39992
  var TrainingProviderDescriptorSchema = object({
39925
39993
  addonId: string(),
39926
- /** `modal`, `runpod`, `fake`, … */
39994
+ entryId: string(),
39995
+ typeId: string(),
39996
+ /** Operator-chosen entry name. */
39997
+ name: string(),
39998
+ iconAsset: string(),
39999
+ /** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
39927
40000
  kind: string(),
39928
40001
  label: string(),
39929
40002
  gpuTypes: array(TrainingGpuOptionSchema).readonly(),
@@ -39987,20 +40060,30 @@ var TrainerSourceRefSchema = object({
39987
40060
  /** A commit sha (never a branch) — the job must be reproducible. */
39988
40061
  revision: string().regex(/^[0-9a-f]{7,64}$/)
39989
40062
  });
40063
+ /** Cloud job identity — route with the owning addon's `addonId` selector. */
39990
40064
  var JobRef = {
39991
- addonId: string(),
40065
+ entryId: string().min(1),
39992
40066
  jobKey: string().uuid()
39993
40067
  };
39994
40068
  var TrainingLogLineSchema = object({
39995
40069
  ts: number(),
39996
40070
  text: string()
39997
40071
  });
39998
- method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({ addonId: string() }), TrainingCredentialCheckSchema, {
40072
+ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }), method(object({}), array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }), method(object({
40073
+ typeId: string().min(1),
40074
+ name: string().min(1)
40075
+ }), object({ entryId: string() }), {
40076
+ kind: "mutation",
40077
+ auth: "admin"
40078
+ }), method(object({ entryId: string().min(1) }), object({ ok: literal(true) }), {
40079
+ kind: "mutation",
40080
+ auth: "admin"
40081
+ }), method(object({ entryId: string().min(1) }), TrainingCredentialCheckSchema, {
39999
40082
  kind: "mutation",
40000
40083
  auth: "admin",
40001
40084
  timeoutMs: 3e4
40002
40085
  }), method(object({
40003
- addonId: string(),
40086
+ entryId: string().min(1),
40004
40087
  gpuType: string(),
40005
40088
  region: string(),
40006
40089
  datasetBytes: number().int().nonnegative(),
@@ -40066,7 +40149,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
40066
40149
  kind: "mutation",
40067
40150
  auth: "admin",
40068
40151
  timeoutMs: 5 * 6e4
40069
- }), method(object({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
40152
+ }), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
40070
40153
  auth: "admin",
40071
40154
  timeoutMs: 2 * 6e4
40072
40155
  });
@@ -40076,20 +40159,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
40076
40159
  *
40077
40160
  * It owns what every provider must agree on, written once:
40078
40161
  *
40079
- * - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
40080
- * live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
40081
- * the export plan) and reaches this store through the five row methods
40082
- * below, so the Retrain page and the export did not change.
40083
40162
  * - **Jobs.** A persisted state machine, a reconcile loop against the
40084
40163
  * provider, a cost guard, a daily orphan sweep and the retention rules.
40085
40164
  * - **The return flow.** Verified artefacts → Model Studio
40086
40165
  * (`custom-model-registry.importModelBundle`) → canary on cameras →
40087
40166
  * rollback. Nothing is ever registered automatically.
40088
40167
  *
40168
+ * Plan/start takes a live {@link TrainingCorpusSelection} (collections +
40169
+ * work-state rule); frame ids are resolved via pipeline-analytics at that
40170
+ * moment and snapshotted on the job. No frozen dataset version.
40171
+ *
40089
40172
  * Every method is `admin`.
40090
40173
  */
40091
- /** A version WITH its frame list — what the export and a job read. */
40092
- var TrainingDatasetVersionRowSchema = RetrainDatasetVersionSchema.omit({ frameCount: true }).extend({ frameIds: array(string()).max(2e4).readonly() });
40174
+ /**
40175
+ * Live corpus criteria for plan/start (design §5.2). Default is complete-only.
40176
+ * Frame ids are resolved at plan/start — never a frozen version id.
40177
+ */
40178
+ var TrainingCorpusSelectionSchema = object({
40179
+ collectionIds: array(string()).min(1),
40180
+ /** Default complete-only for v1 */
40181
+ workState: _enum([
40182
+ "complete",
40183
+ "annotated_or_complete",
40184
+ "any_annotated"
40185
+ ]).default("complete")
40186
+ });
40093
40187
  /** A base model a detector job can fine-tune, and the baseline it is judged against. */
40094
40188
  var TrainingBaseModelSchema = object({
40095
40189
  modelId: string(),
@@ -40107,9 +40201,13 @@ var TrainingPresetSchema = _enum([
40107
40201
  "thorough"
40108
40202
  ]);
40109
40203
  var TrainingJobRequestSchema = object({
40110
- datasetVersionId: string().min(1),
40111
- /** The `training-provider` addon that runs it. */
40112
- addonId: string().min(1),
40204
+ /** Live collection + work-state criteria; resolved at plan/start. */
40205
+ selection: TrainingCorpusSelectionSchema,
40206
+ /**
40207
+ * The provider **entry** that runs it (credentials + defaults).
40208
+ * Resolve to an owning addon via `training-provider.describe` / `listEntries`.
40209
+ */
40210
+ entryId: string().min(1),
40113
40211
  gpuType: string().min(1),
40114
40212
  region: string(),
40115
40213
  baseModelId: string().min(1),
@@ -40168,6 +40266,7 @@ var TrainingJobPlanSchema = object({
40168
40266
  * result lives after the operator acted on it.
40169
40267
  */
40170
40268
  var TrainingJobStateSchema = _enum([
40269
+ "queued",
40171
40270
  "uploading",
40172
40271
  "submitted",
40173
40272
  "starting",
@@ -40221,6 +40320,11 @@ var TrainingJobSchema = object({
40221
40320
  createdAt: number(),
40222
40321
  updatedAt: number(),
40223
40322
  state: TrainingJobStateSchema,
40323
+ /**
40324
+ * Shared by every job enqueued together via `startJobBatch`.
40325
+ * `null` for a lone `startJob`. The engine advances queued siblings by this id.
40326
+ */
40327
+ batchId: string().nullable().default(null),
40224
40328
  stage: TrainingStageSchema.nullable(),
40225
40329
  failure: object({
40226
40330
  reason: TrainingFailureReasonSchema,
@@ -40232,6 +40336,12 @@ var TrainingJobSchema = object({
40232
40336
  maxRuntimeSec: number().int().positive(),
40233
40337
  trainer: TrainerSourceRefSchema,
40234
40338
  datasetLayout: RetrainExportLayoutSchema,
40339
+ /** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
40340
+ frameCount: number().int().nonnegative(),
40341
+ /** Resolved frame ids at start — the archive ships exactly these. */
40342
+ frameIds: array(string()).max(2e4).readonly(),
40343
+ /** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
40344
+ annotationHash: string(),
40235
40345
  dataset: object({
40236
40346
  bytes: number().int(),
40237
40347
  sha256: string(),
@@ -40273,13 +40383,7 @@ var TrainingJobSchema = object({
40273
40383
  canary: TrainingCanarySchema.nullable()
40274
40384
  });
40275
40385
  var IdInput = object({ id: string().min(1) });
40276
- method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
40277
- kind: "mutation",
40278
- auth: "admin"
40279
- }), 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() }), {
40280
- kind: "mutation",
40281
- auth: "admin"
40282
- }), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
40386
+ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
40283
40387
  auth: "admin",
40284
40388
  timeoutMs: 6e4
40285
40389
  }), method(TrainingJobRequestSchema.extend({
@@ -40298,6 +40402,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
40298
40402
  kind: "mutation",
40299
40403
  auth: "admin",
40300
40404
  timeoutMs: 12e4
40405
+ }), method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
40406
+ baseModelIds: array(string().min(1)).min(1),
40407
+ name: string().min(1).max(120),
40408
+ maxCostUsd: number().positive(),
40409
+ maxRuntimeSec: number().int().positive(),
40410
+ idempotencyKey: string().min(8).max(80)
40411
+ }), discriminatedUnion("kind", [object({
40412
+ kind: literal("started"),
40413
+ batchId: string(),
40414
+ jobs: array(TrainingJobSchema).min(1).readonly()
40415
+ }), object({
40416
+ kind: literal("refused"),
40417
+ reason: TrainingRefusalReasonSchema,
40418
+ detail: string()
40419
+ })]), {
40420
+ kind: "mutation",
40421
+ auth: "admin",
40422
+ timeoutMs: 12e4
40301
40423
  }), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
40302
40424
  kind: "mutation",
40303
40425
  auth: "admin",
@@ -44639,12 +44761,6 @@ Object.freeze({
44639
44761
  addonId: null,
44640
44762
  access: "create"
44641
44763
  },
44642
- "pipelineAnalytics.createRetrainDatasetVersion": {
44643
- capName: "pipeline-analytics",
44644
- capScope: "device",
44645
- addonId: null,
44646
- access: "create"
44647
- },
44648
44764
  "pipelineAnalytics.deleteDeviceEvents": {
44649
44765
  capName: "pipeline-analytics",
44650
44766
  capScope: "device",
@@ -44657,12 +44773,6 @@ Object.freeze({
44657
44773
  addonId: null,
44658
44774
  access: "delete"
44659
44775
  },
44660
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
44661
- capName: "pipeline-analytics",
44662
- capScope: "device",
44663
- addonId: null,
44664
- access: "delete"
44665
- },
44666
44776
  "pipelineAnalytics.deleteTracks": {
44667
44777
  capName: "pipeline-analytics",
44668
44778
  capScope: "device",
@@ -44765,6 +44875,12 @@ Object.freeze({
44765
44875
  addonId: null,
44766
44876
  access: "view"
44767
44877
  },
44878
+ "pipelineAnalytics.getRetrainCorpusKpi": {
44879
+ capName: "pipeline-analytics",
44880
+ capScope: "device",
44881
+ addonId: null,
44882
+ access: "view"
44883
+ },
44768
44884
  "pipelineAnalytics.getRetrainExportUrl": {
44769
44885
  capName: "pipeline-analytics",
44770
44886
  capScope: "device",
@@ -44885,7 +45001,7 @@ Object.freeze({
44885
45001
  addonId: null,
44886
45002
  access: "view"
44887
45003
  },
44888
- "pipelineAnalytics.listRetrainDatasetVersions": {
45004
+ "pipelineAnalytics.listRetrainCorpusPage": {
44889
45005
  capName: "pipeline-analytics",
44890
45006
  capScope: "device",
44891
45007
  addonId: null,
@@ -44939,12 +45055,6 @@ Object.freeze({
44939
45055
  addonId: null,
44940
45056
  access: "create"
44941
45057
  },
44942
- "pipelineAnalytics.previewRetrainDataset": {
44943
- capName: "pipeline-analytics",
44944
- capScope: "device",
44945
- addonId: null,
44946
- access: "view"
44947
- },
44948
45058
  "pipelineAnalytics.proposeRetrainAnnotations": {
44949
45059
  capName: "pipeline-analytics",
44950
45060
  capScope: "device",
@@ -45023,6 +45133,12 @@ Object.freeze({
45023
45133
  addonId: null,
45024
45134
  access: "create"
45025
45135
  },
45136
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
45137
+ capName: "pipeline-analytics",
45138
+ capScope: "device",
45139
+ addonId: null,
45140
+ access: "view"
45141
+ },
45026
45142
  "pipelineAnalytics.restageRetrainTrack": {
45027
45143
  capName: "pipeline-analytics",
45028
45144
  capScope: "device",
@@ -45083,12 +45199,6 @@ Object.freeze({
45083
45199
  addonId: null,
45084
45200
  access: "create"
45085
45201
  },
45086
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
45087
- capName: "pipeline-analytics",
45088
- capScope: "device",
45089
- addonId: null,
45090
- access: "view"
45091
- },
45092
45202
  "pipelineAnalytics.wipeAllAnalytics": {
45093
45203
  capName: "pipeline-analytics",
45094
45204
  capScope: "device",
@@ -47483,18 +47593,6 @@ Object.freeze({
47483
47593
  addonId: null,
47484
47594
  access: "create"
47485
47595
  },
47486
- "training.findDatasetVersionIdByName": {
47487
- capName: "training",
47488
- capScope: "system",
47489
- addonId: null,
47490
- access: "view"
47491
- },
47492
- "training.getDatasetVersion": {
47493
- capName: "training",
47494
- capScope: "system",
47495
- addonId: null,
47496
- access: "view"
47497
- },
47498
47596
  "training.getJob": {
47499
47597
  capName: "training",
47500
47598
  capScope: "system",
@@ -47513,12 +47611,6 @@ Object.freeze({
47513
47611
  addonId: null,
47514
47612
  access: "view"
47515
47613
  },
47516
- "training.listDatasetVersions": {
47517
- capName: "training",
47518
- capScope: "system",
47519
- addonId: null,
47520
- access: "view"
47521
- },
47522
47614
  "training.listJobs": {
47523
47615
  capName: "training",
47524
47616
  capScope: "system",
@@ -47531,54 +47623,66 @@ Object.freeze({
47531
47623
  addonId: null,
47532
47624
  access: "view"
47533
47625
  },
47534
- "training.putDatasetVersion": {
47626
+ "training.registerResult": {
47535
47627
  capName: "training",
47536
47628
  capScope: "system",
47537
47629
  addonId: null,
47538
47630
  access: "create"
47539
47631
  },
47540
- "training.registerResult": {
47632
+ "training.rollbackCanary": {
47541
47633
  capName: "training",
47542
47634
  capScope: "system",
47543
47635
  addonId: null,
47544
47636
  access: "create"
47545
47637
  },
47546
- "training.removeDatasetVersion": {
47638
+ "training.startJob": {
47547
47639
  capName: "training",
47548
47640
  capScope: "system",
47549
47641
  addonId: null,
47550
- access: "delete"
47642
+ access: "create"
47551
47643
  },
47552
- "training.rollbackCanary": {
47644
+ "training.startJobBatch": {
47553
47645
  capName: "training",
47554
47646
  capScope: "system",
47555
47647
  addonId: null,
47556
47648
  access: "create"
47557
47649
  },
47558
- "training.startJob": {
47559
- capName: "training",
47650
+ "trainingProvider.cancelJob": {
47651
+ capName: "training-provider",
47560
47652
  capScope: "system",
47561
47653
  addonId: null,
47562
47654
  access: "create"
47563
47655
  },
47564
- "trainingProvider.cancelJob": {
47656
+ "trainingProvider.cleanupJob": {
47565
47657
  capName: "training-provider",
47566
47658
  capScope: "system",
47567
47659
  addonId: null,
47568
47660
  access: "create"
47569
47661
  },
47570
- "trainingProvider.cleanupJob": {
47662
+ "trainingProvider.createEntry": {
47571
47663
  capName: "training-provider",
47572
47664
  capScope: "system",
47573
47665
  addonId: null,
47574
47666
  access: "create"
47575
47667
  },
47668
+ "trainingProvider.deleteEntry": {
47669
+ capName: "training-provider",
47670
+ capScope: "system",
47671
+ addonId: null,
47672
+ access: "delete"
47673
+ },
47576
47674
  "trainingProvider.describe": {
47577
47675
  capName: "training-provider",
47578
47676
  capScope: "system",
47579
47677
  addonId: null,
47580
47678
  access: "view"
47581
47679
  },
47680
+ "trainingProvider.describeTypes": {
47681
+ capName: "training-provider",
47682
+ capScope: "system",
47683
+ addonId: null,
47684
+ access: "view"
47685
+ },
47582
47686
  "trainingProvider.estimateJob": {
47583
47687
  capName: "training-provider",
47584
47688
  capScope: "system",
@@ -47591,6 +47695,12 @@ Object.freeze({
47591
47695
  addonId: null,
47592
47696
  access: "view"
47593
47697
  },
47698
+ "trainingProvider.listEntries": {
47699
+ capName: "training-provider",
47700
+ capScope: "system",
47701
+ addonId: null,
47702
+ access: "view"
47703
+ },
47594
47704
  "trainingProvider.listJobEvents": {
47595
47705
  capName: "training-provider",
47596
47706
  capScope: "system",
@@ -51047,6 +51157,11 @@ Object.freeze({
51047
51157
  form: "array",
51048
51158
  optional: false
51049
51159
  }],
51160
+ "pipelineAnalytics.listRetrainCorpusPage": [{
51161
+ name: "deviceIds",
51162
+ form: "array",
51163
+ optional: true
51164
+ }],
51050
51165
  "pipelineAnalytics.listRetrainStaging": [{
51051
51166
  name: "deviceIds",
51052
51167
  form: "array",
@@ -1,5 +1,5 @@
1
1
  import { b as e, g as t, l as n, u as r } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-CHL8loOl.mjs";
2
- import { b as i, y as a } from "./responsive-BHoVd25G.mjs";
2
+ import { b as i, y as a } from "./responsive-yCZZZ6gV.mjs";
3
3
  import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
4
4
  var l = i("chevron-down", [["path", {
5
5
  d: "m6 9 6 6 6-6",