@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
@@ -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)
@@ -26220,11 +26265,14 @@ var HardwareClassIdSchema = _enum([
26220
26265
  "intel-n-series",
26221
26266
  "apple-m-base",
26222
26267
  "apple-m-pro",
26268
+ "amd-phoenix",
26223
26269
  "unknown"
26224
26270
  ]);
26225
26271
  var AcceleratorKindSchema = _enum([
26226
26272
  "intel-npu",
26227
26273
  "intel-igpu",
26274
+ "amd-igpu",
26275
+ "amd-npu",
26228
26276
  "x86-cpu",
26229
26277
  "arm-cpu",
26230
26278
  "apple-ane",
@@ -28114,6 +28162,8 @@ var AgentPipelineSettingsSchema = object({
28114
28162
  * address is wrong (multi-homed host, NAT, custom interface).
28115
28163
  */
28116
28164
  reachableHost: string().optional(),
28165
+ /** Hub-persisted UI colour (`--color-node-*` theme tokens). */
28166
+ color: NodeColorIdSchema.optional(),
28117
28167
  /**
28118
28168
  * Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
28119
28169
  * weight, steps}. Absent / all-disabled ⇒ the node's single default
@@ -28663,8 +28713,9 @@ method(object({
28663
28713
  auth: "admin"
28664
28714
  }), method(object({
28665
28715
  agentNodeId: string(),
28666
- reachableHost: string().nullable()
28667
- }), 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) }), {
28668
28719
  kind: "mutation",
28669
28720
  auth: "admin"
28670
28721
  }), method(object({
@@ -36110,7 +36161,15 @@ var GpuInfoSchema = object({
36110
36161
  name: string(),
36111
36162
  memoryMB: number().optional()
36112
36163
  });
36113
- var NpuInfoSchema = object({ type: _enum(["apple-ane", "intel-npu"]) });
36164
+ var NpuInfoSchema = object({
36165
+ type: _enum([
36166
+ "apple-ane",
36167
+ "intel-npu",
36168
+ "amd-xdna"
36169
+ ]),
36170
+ name: string().optional(),
36171
+ generation: _enum(["xdna1", "xdna2"]).optional()
36172
+ });
36114
36173
  var CoralInfoSchema = object({
36115
36174
  type: literal("coral-edgetpu"),
36116
36175
  bus: string().optional()
@@ -39872,9 +39931,11 @@ DeviceType.Camera, method(object({
39872
39931
  * once is what makes a second provider (RunPod, a local NVIDIA node) a new
39873
39932
  * manifest entry and nothing else.
39874
39933
  *
39875
- * Collection, routed by the `addonId` in every single-row input (the `llm` /
39876
- * `notification-output` posture); `describe` concat-fans across providers.
39877
- * 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.
39878
39939
  *
39879
39940
  * Every cloud object a provider creates is tagged with the orchestrator's
39880
39941
  * `jobKey`, so a retried submit finds the job it already started instead of
@@ -39898,8 +39959,8 @@ var TrainingRegionOptionSchema = object({
39898
39959
  priceMultiplier: number().positive()
39899
39960
  });
39900
39961
  /**
39901
- * The provider's per-account settings, as the orchestrator reads them. They
39902
- * 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
39903
39964
  * depend on the user's account), never hard-coded in the orchestrator.
39904
39965
  */
39905
39966
  var TrainingProviderDefaultsSchema = object({
@@ -39910,9 +39971,32 @@ var TrainingProviderDefaultsSchema = object({
39910
39971
  /** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
39911
39972
  failedDatasetGraceHours: number().nonnegative()
39912
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
+ });
39913
39992
  var TrainingProviderDescriptorSchema = object({
39914
39993
  addonId: string(),
39915
- /** `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. */
39916
40000
  kind: string(),
39917
40001
  label: string(),
39918
40002
  gpuTypes: array(TrainingGpuOptionSchema).readonly(),
@@ -39976,20 +40060,30 @@ var TrainerSourceRefSchema = object({
39976
40060
  /** A commit sha (never a branch) — the job must be reproducible. */
39977
40061
  revision: string().regex(/^[0-9a-f]{7,64}$/)
39978
40062
  });
40063
+ /** Cloud job identity — route with the owning addon's `addonId` selector. */
39979
40064
  var JobRef = {
39980
- addonId: string(),
40065
+ entryId: string().min(1),
39981
40066
  jobKey: string().uuid()
39982
40067
  };
39983
40068
  var TrainingLogLineSchema = object({
39984
40069
  ts: number(),
39985
40070
  text: string()
39986
40071
  });
39987
- 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, {
39988
40082
  kind: "mutation",
39989
40083
  auth: "admin",
39990
40084
  timeoutMs: 3e4
39991
40085
  }), method(object({
39992
- addonId: string(),
40086
+ entryId: string().min(1),
39993
40087
  gpuType: string(),
39994
40088
  region: string(),
39995
40089
  datasetBytes: number().int().nonnegative(),
@@ -40055,7 +40149,7 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
40055
40149
  kind: "mutation",
40056
40150
  auth: "admin",
40057
40151
  timeoutMs: 5 * 6e4
40058
- }), method(object({ addonId: string() }), array(ProviderJobStatusSchema).readonly(), {
40152
+ }), method(object({ entryId: string().min(1).optional() }), array(ProviderJobStatusSchema).readonly(), {
40059
40153
  auth: "admin",
40060
40154
  timeoutMs: 2 * 6e4
40061
40155
  });
@@ -40065,20 +40159,31 @@ method(object({}), array(TrainingProviderDescriptorSchema).readonly(), { auth: "
40065
40159
  *
40066
40160
  * It owns what every provider must agree on, written once:
40067
40161
  *
40068
- * - **Dataset versions.** Taken over from pipeline-analytics (D796): the rows
40069
- * live here (D808); pipeline-analytics still CUTS a version (it owns the corpus and
40070
- * the export plan) and reaches this store through the five row methods
40071
- * below, so the Retrain page and the export did not change.
40072
40162
  * - **Jobs.** A persisted state machine, a reconcile loop against the
40073
40163
  * provider, a cost guard, a daily orphan sweep and the retention rules.
40074
40164
  * - **The return flow.** Verified artefacts → Model Studio
40075
40165
  * (`custom-model-registry.importModelBundle`) → canary on cameras →
40076
40166
  * rollback. Nothing is ever registered automatically.
40077
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
+ *
40078
40172
  * Every method is `admin`.
40079
40173
  */
40080
- /** A version WITH its frame list — what the export and a job read. */
40081
- 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
+ });
40082
40187
  /** A base model a detector job can fine-tune, and the baseline it is judged against. */
40083
40188
  var TrainingBaseModelSchema = object({
40084
40189
  modelId: string(),
@@ -40096,9 +40201,13 @@ var TrainingPresetSchema = _enum([
40096
40201
  "thorough"
40097
40202
  ]);
40098
40203
  var TrainingJobRequestSchema = object({
40099
- datasetVersionId: string().min(1),
40100
- /** The `training-provider` addon that runs it. */
40101
- 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),
40102
40211
  gpuType: string().min(1),
40103
40212
  region: string(),
40104
40213
  baseModelId: string().min(1),
@@ -40157,6 +40266,7 @@ var TrainingJobPlanSchema = object({
40157
40266
  * result lives after the operator acted on it.
40158
40267
  */
40159
40268
  var TrainingJobStateSchema = _enum([
40269
+ "queued",
40160
40270
  "uploading",
40161
40271
  "submitted",
40162
40272
  "starting",
@@ -40210,6 +40320,11 @@ var TrainingJobSchema = object({
40210
40320
  createdAt: number(),
40211
40321
  updatedAt: number(),
40212
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),
40213
40328
  stage: TrainingStageSchema.nullable(),
40214
40329
  failure: object({
40215
40330
  reason: TrainingFailureReasonSchema,
@@ -40221,6 +40336,12 @@ var TrainingJobSchema = object({
40221
40336
  maxRuntimeSec: number().int().positive(),
40222
40337
  trainer: TrainerSourceRefSchema,
40223
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(),
40224
40345
  dataset: object({
40225
40346
  bytes: number().int(),
40226
40347
  sha256: string(),
@@ -40262,13 +40383,7 @@ var TrainingJobSchema = object({
40262
40383
  canary: TrainingCanarySchema.nullable()
40263
40384
  });
40264
40385
  var IdInput = object({ id: string().min(1) });
40265
- method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
40266
- kind: "mutation",
40267
- auth: "admin"
40268
- }), 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() }), {
40269
- kind: "mutation",
40270
- auth: "admin"
40271
- }), method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
40386
+ method(object({}), array(TrainingBaseModelSchema).readonly(), { auth: "admin" }), method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
40272
40387
  auth: "admin",
40273
40388
  timeoutMs: 6e4
40274
40389
  }), method(TrainingJobRequestSchema.extend({
@@ -40287,6 +40402,24 @@ method(TrainingDatasetVersionRowSchema, object({ stored: boolean() }), {
40287
40402
  kind: "mutation",
40288
40403
  auth: "admin",
40289
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
40290
40423
  }), method(object({}), array(TrainingJobSchema).readonly(), { auth: "admin" }), method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }), method(IdInput, TrainingJobSchema, {
40291
40424
  kind: "mutation",
40292
40425
  auth: "admin",
@@ -44628,12 +44761,6 @@ Object.freeze({
44628
44761
  addonId: null,
44629
44762
  access: "create"
44630
44763
  },
44631
- "pipelineAnalytics.createRetrainDatasetVersion": {
44632
- capName: "pipeline-analytics",
44633
- capScope: "device",
44634
- addonId: null,
44635
- access: "create"
44636
- },
44637
44764
  "pipelineAnalytics.deleteDeviceEvents": {
44638
44765
  capName: "pipeline-analytics",
44639
44766
  capScope: "device",
@@ -44646,12 +44773,6 @@ Object.freeze({
44646
44773
  addonId: null,
44647
44774
  access: "delete"
44648
44775
  },
44649
- "pipelineAnalytics.deleteRetrainDatasetVersion": {
44650
- capName: "pipeline-analytics",
44651
- capScope: "device",
44652
- addonId: null,
44653
- access: "delete"
44654
- },
44655
44776
  "pipelineAnalytics.deleteTracks": {
44656
44777
  capName: "pipeline-analytics",
44657
44778
  capScope: "device",
@@ -44754,6 +44875,12 @@ Object.freeze({
44754
44875
  addonId: null,
44755
44876
  access: "view"
44756
44877
  },
44878
+ "pipelineAnalytics.getRetrainCorpusKpi": {
44879
+ capName: "pipeline-analytics",
44880
+ capScope: "device",
44881
+ addonId: null,
44882
+ access: "view"
44883
+ },
44757
44884
  "pipelineAnalytics.getRetrainExportUrl": {
44758
44885
  capName: "pipeline-analytics",
44759
44886
  capScope: "device",
@@ -44874,7 +45001,7 @@ Object.freeze({
44874
45001
  addonId: null,
44875
45002
  access: "view"
44876
45003
  },
44877
- "pipelineAnalytics.listRetrainDatasetVersions": {
45004
+ "pipelineAnalytics.listRetrainCorpusPage": {
44878
45005
  capName: "pipeline-analytics",
44879
45006
  capScope: "device",
44880
45007
  addonId: null,
@@ -44928,12 +45055,6 @@ Object.freeze({
44928
45055
  addonId: null,
44929
45056
  access: "create"
44930
45057
  },
44931
- "pipelineAnalytics.previewRetrainDataset": {
44932
- capName: "pipeline-analytics",
44933
- capScope: "device",
44934
- addonId: null,
44935
- access: "view"
44936
- },
44937
45058
  "pipelineAnalytics.proposeRetrainAnnotations": {
44938
45059
  capName: "pipeline-analytics",
44939
45060
  capScope: "device",
@@ -45012,6 +45133,12 @@ Object.freeze({
45012
45133
  addonId: null,
45013
45134
  access: "create"
45014
45135
  },
45136
+ "pipelineAnalytics.resolveRetrainTrainingCorpus": {
45137
+ capName: "pipeline-analytics",
45138
+ capScope: "device",
45139
+ addonId: null,
45140
+ access: "view"
45141
+ },
45015
45142
  "pipelineAnalytics.restageRetrainTrack": {
45016
45143
  capName: "pipeline-analytics",
45017
45144
  capScope: "device",
@@ -45072,12 +45199,6 @@ Object.freeze({
45072
45199
  addonId: null,
45073
45200
  access: "create"
45074
45201
  },
45075
- "pipelineAnalytics.verifyRetrainDatasetVersion": {
45076
- capName: "pipeline-analytics",
45077
- capScope: "device",
45078
- addonId: null,
45079
- access: "view"
45080
- },
45081
45202
  "pipelineAnalytics.wipeAllAnalytics": {
45082
45203
  capName: "pipeline-analytics",
45083
45204
  capScope: "device",
@@ -47472,18 +47593,6 @@ Object.freeze({
47472
47593
  addonId: null,
47473
47594
  access: "create"
47474
47595
  },
47475
- "training.findDatasetVersionIdByName": {
47476
- capName: "training",
47477
- capScope: "system",
47478
- addonId: null,
47479
- access: "view"
47480
- },
47481
- "training.getDatasetVersion": {
47482
- capName: "training",
47483
- capScope: "system",
47484
- addonId: null,
47485
- access: "view"
47486
- },
47487
47596
  "training.getJob": {
47488
47597
  capName: "training",
47489
47598
  capScope: "system",
@@ -47502,12 +47611,6 @@ Object.freeze({
47502
47611
  addonId: null,
47503
47612
  access: "view"
47504
47613
  },
47505
- "training.listDatasetVersions": {
47506
- capName: "training",
47507
- capScope: "system",
47508
- addonId: null,
47509
- access: "view"
47510
- },
47511
47614
  "training.listJobs": {
47512
47615
  capName: "training",
47513
47616
  capScope: "system",
@@ -47520,54 +47623,66 @@ Object.freeze({
47520
47623
  addonId: null,
47521
47624
  access: "view"
47522
47625
  },
47523
- "training.putDatasetVersion": {
47626
+ "training.registerResult": {
47524
47627
  capName: "training",
47525
47628
  capScope: "system",
47526
47629
  addonId: null,
47527
47630
  access: "create"
47528
47631
  },
47529
- "training.registerResult": {
47632
+ "training.rollbackCanary": {
47530
47633
  capName: "training",
47531
47634
  capScope: "system",
47532
47635
  addonId: null,
47533
47636
  access: "create"
47534
47637
  },
47535
- "training.removeDatasetVersion": {
47638
+ "training.startJob": {
47536
47639
  capName: "training",
47537
47640
  capScope: "system",
47538
47641
  addonId: null,
47539
- access: "delete"
47642
+ access: "create"
47540
47643
  },
47541
- "training.rollbackCanary": {
47644
+ "training.startJobBatch": {
47542
47645
  capName: "training",
47543
47646
  capScope: "system",
47544
47647
  addonId: null,
47545
47648
  access: "create"
47546
47649
  },
47547
- "training.startJob": {
47548
- capName: "training",
47650
+ "trainingProvider.cancelJob": {
47651
+ capName: "training-provider",
47549
47652
  capScope: "system",
47550
47653
  addonId: null,
47551
47654
  access: "create"
47552
47655
  },
47553
- "trainingProvider.cancelJob": {
47656
+ "trainingProvider.cleanupJob": {
47554
47657
  capName: "training-provider",
47555
47658
  capScope: "system",
47556
47659
  addonId: null,
47557
47660
  access: "create"
47558
47661
  },
47559
- "trainingProvider.cleanupJob": {
47662
+ "trainingProvider.createEntry": {
47560
47663
  capName: "training-provider",
47561
47664
  capScope: "system",
47562
47665
  addonId: null,
47563
47666
  access: "create"
47564
47667
  },
47668
+ "trainingProvider.deleteEntry": {
47669
+ capName: "training-provider",
47670
+ capScope: "system",
47671
+ addonId: null,
47672
+ access: "delete"
47673
+ },
47565
47674
  "trainingProvider.describe": {
47566
47675
  capName: "training-provider",
47567
47676
  capScope: "system",
47568
47677
  addonId: null,
47569
47678
  access: "view"
47570
47679
  },
47680
+ "trainingProvider.describeTypes": {
47681
+ capName: "training-provider",
47682
+ capScope: "system",
47683
+ addonId: null,
47684
+ access: "view"
47685
+ },
47571
47686
  "trainingProvider.estimateJob": {
47572
47687
  capName: "training-provider",
47573
47688
  capScope: "system",
@@ -47580,6 +47695,12 @@ Object.freeze({
47580
47695
  addonId: null,
47581
47696
  access: "view"
47582
47697
  },
47698
+ "trainingProvider.listEntries": {
47699
+ capName: "training-provider",
47700
+ capScope: "system",
47701
+ addonId: null,
47702
+ access: "view"
47703
+ },
47583
47704
  "trainingProvider.listJobEvents": {
47584
47705
  capName: "training-provider",
47585
47706
  capScope: "system",
@@ -51036,6 +51157,11 @@ Object.freeze({
51036
51157
  form: "array",
51037
51158
  optional: false
51038
51159
  }],
51160
+ "pipelineAnalytics.listRetrainCorpusPage": [{
51161
+ name: "deviceIds",
51162
+ form: "array",
51163
+ optional: true
51164
+ }],
51039
51165
  "pipelineAnalytics.listRetrainStaging": [{
51040
51166
  name: "deviceIds",
51041
51167
  form: "array",