@camstack/addon-training 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MaskShapeCanvas-Kfg9dl6B.mjs +686 -0
- package/dist/{MotionZonesSettings-DPtcv80q.mjs → MotionZonesSettings-DKtYdHUO.mjs} +101 -119
- package/dist/{PrivacyMaskSettings-Wsn5QL0_.mjs → PrivacyMaskSettings-BvLUVz86.mjs} +45 -70
- package/dist/ReactKonva-DGuYUN0L.mjs +5416 -0
- package/dist/{SceneMonitorEditor-BlMwyiH8.mjs → SceneMonitorEditor-rFYGkGHV.mjs} +82 -82
- package/dist/_stub.js +28225 -12866
- package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-Cbrdn9ib.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_training_page-B3xXUcaU.mjs} +3 -3
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-C7dks3FG.mjs +26 -0
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-DpjirGmB.mjs +89 -0
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_trpc_mf_1_client__loadShare__.js-CFCVuRAs.mjs +58 -0
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_trpc_mf_1_react_mf_2_query__loadShare__.js-BkvDudqY.mjs +62 -0
- package/dist/{_virtual_mf___mfe_internal__addon_training_page__loadShare__react__loadShare__.js-BT_wL8s3.mjs → _virtual_mf___mfe_internal__addon_training_page__loadShare__react__loadShare__.js-DeDbF7NI.mjs} +1 -1
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DnrbBvrw.mjs +34 -0
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_2_dom__loadShare__.js-DAZkHxxU.mjs +45 -0
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-CHqN9NLt.mjs +34 -0
- package/dist/addon-training.css +1 -1
- package/dist/{dist-BhCRZEE4.js → dist-DVDBSrjw.js} +270 -146
- package/dist/{dist-Cqa2fHNk.mjs → dist-Phot2UwD.mjs} +271 -141
- package/dist/grid-2x2-Bl3xw1w7.mjs +21 -0
- package/dist/{hostInit-BI98RYIm.mjs → hostInit-BAGO4XYA.mjs} +2 -2
- package/dist/index.js +100 -39
- package/dist/index.mjs +99 -38
- package/dist/lib-CVGFTwe0.mjs +7770 -0
- package/dist/orchestrator/training.addon.js +376 -222
- package/dist/orchestrator/training.addon.mjs +376 -222
- package/dist/{player-overlays-BX3obOMu.mjs → player-overlays-BT-6fK9N.mjs} +26 -7
- package/dist/providers/modal/training-modal.addon.js +361 -155
- package/dist/providers/modal/training-modal.addon.mjs +364 -158
- package/dist/remoteEntry.js +1 -1
- package/dist/{responsive-CdDIJCpI.mjs → responsive-Dy5RAD1s.mjs} +42 -38
- package/dist/{scene-monitor-copy-5u5w3K-Y.mjs → scene-monitor-copy-7HImRbA5.mjs} +4 -4
- package/dist/{square-C-P1-89Q.mjs → square-DoPBhbZN.mjs} +29 -4
- package/dist/{trash-2-BikGYiWf.mjs → trash-2-BwunNgLf.mjs} +1 -1
- package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-DGLUs0o6.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_training_page__remoteEntry_js-gU49KvnZ.mjs} +399 -390
- package/package.json +1 -1
- package/dist/MaskShapeCanvas-BokARvOj.mjs +0 -13806
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BkKuzhOJ.mjs +0 -26
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_tanstack_mf_1_react_mf_2_query__loadShare__.js-CaB1jnkt.mjs +0 -25
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_trpc_mf_1_client__loadShare__.js-B3rryujf.mjs +0 -25
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare___mf_0_trpc_mf_1_react_mf_2_query__loadShare__.js-nL4MGFRP.mjs +0 -26
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-DDBEvLdo.mjs +0 -26
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_2_dom__loadShare__.js-i_pnGDxd.mjs +0 -25
- package/dist/_virtual_mf___mfe_internal__addon_training_page__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-gTIQrhKs.mjs +0 -25
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { g as e } from "./responsive-Dy5RAD1s.mjs";
|
|
2
|
+
var t = e("grid-2x2", [
|
|
3
|
+
["path", {
|
|
4
|
+
d: "M12 3v18",
|
|
5
|
+
key: "108xh3"
|
|
6
|
+
}],
|
|
7
|
+
["path", {
|
|
8
|
+
d: "M3 12h18",
|
|
9
|
+
key: "1i2n21"
|
|
10
|
+
}],
|
|
11
|
+
["rect", {
|
|
12
|
+
x: "3",
|
|
13
|
+
y: "3",
|
|
14
|
+
width: "18",
|
|
15
|
+
height: "18",
|
|
16
|
+
rx: "2",
|
|
17
|
+
key: "h1oib"
|
|
18
|
+
}]
|
|
19
|
+
]);
|
|
20
|
+
//#endregion
|
|
21
|
+
export { t };
|
|
@@ -36,7 +36,7 @@ async function r() {
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"@camstack/types": {
|
|
39
|
-
version: "1.2.
|
|
39
|
+
version: "1.2.340",
|
|
40
40
|
scope: "default",
|
|
41
41
|
shareConfig: {
|
|
42
42
|
singleton: !0,
|
|
@@ -81,7 +81,7 @@ async function r() {
|
|
|
81
81
|
}
|
|
82
82
|
},
|
|
83
83
|
"@camstack/ui-library": {
|
|
84
|
-
version: "1.2.
|
|
84
|
+
version: "1.2.260",
|
|
85
85
|
scope: "default",
|
|
86
86
|
shareConfig: {
|
|
87
87
|
singleton: !0,
|
package/dist/index.js
CHANGED
|
@@ -1,18 +1,27 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
require("./dist-
|
|
2
|
+
require("./dist-DVDBSrjw.js");
|
|
3
3
|
const require_orchestrator_training_addon = require("./orchestrator/training.addon.js");
|
|
4
4
|
const require_providers_modal_training_modal_addon = require("./providers/modal/training-modal.addon.js");
|
|
5
5
|
//#region src/providers/fake/fake-provider.ts
|
|
6
|
+
var FAKE_TYPE_ID = "fake";
|
|
7
|
+
var FAKE_ICON_ASSET = "assets/training/icon.svg";
|
|
8
|
+
var FAKE_DEFAULT_ENTRY_ID = "fake-default";
|
|
6
9
|
var FakeTrainingProvider = class {
|
|
7
10
|
addonId;
|
|
11
|
+
defaultEntryId;
|
|
8
12
|
jobs = /* @__PURE__ */ new Map();
|
|
9
13
|
calls = [];
|
|
10
|
-
|
|
14
|
+
entries;
|
|
11
15
|
options;
|
|
12
16
|
constructor(options) {
|
|
13
17
|
this.options = options;
|
|
14
18
|
this.addonId = options.addonId ?? "training-fake";
|
|
15
|
-
this.
|
|
19
|
+
this.defaultEntryId = FAKE_DEFAULT_ENTRY_ID;
|
|
20
|
+
this.entries = options.entries ? [...options.entries] : [{
|
|
21
|
+
entryId: FAKE_DEFAULT_ENTRY_ID,
|
|
22
|
+
name: "Default",
|
|
23
|
+
configured: options.configured ?? true
|
|
24
|
+
}];
|
|
16
25
|
}
|
|
17
26
|
advance(jobKey, state, exitCode) {
|
|
18
27
|
const job = this.require(jobKey);
|
|
@@ -44,41 +53,52 @@ var FakeTrainingProvider = class {
|
|
|
44
53
|
}
|
|
45
54
|
/** A job started outside our records (a crashed hub, a second hub on the account). */
|
|
46
55
|
plantOrphan(jobKey) {
|
|
47
|
-
this.jobs.set(jobKey, this.blank(jobKey, "running"));
|
|
56
|
+
this.jobs.set(jobKey, this.blank(jobKey, this.defaultEntryId, "running"));
|
|
48
57
|
}
|
|
49
|
-
describe = async () =>
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
describe = async () => this.entries.map((entry) => this.descriptorOf(entry));
|
|
59
|
+
describeTypes = async () => [{
|
|
60
|
+
typeId: FAKE_TYPE_ID,
|
|
52
61
|
label: "Fake cloud",
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
label: "L4",
|
|
56
|
-
usdPerHour: .8,
|
|
57
|
-
vramGb: 24
|
|
58
|
-
}],
|
|
59
|
-
regions: [{
|
|
60
|
-
id: "",
|
|
61
|
-
label: "Any",
|
|
62
|
-
priceMultiplier: 1
|
|
63
|
-
}],
|
|
64
|
-
maxDatasetBytes: 10 * 1024 ** 3,
|
|
65
|
-
maxRuntimeSec: 24 * 3600,
|
|
66
|
-
dataResidencyNote: "The fake keeps everything in memory.",
|
|
67
|
-
configured: this.configured,
|
|
68
|
-
defaults: {
|
|
69
|
-
gpuType: "L4",
|
|
70
|
-
region: "",
|
|
71
|
-
costCapUsd: this.options.costCapUsd ?? 5,
|
|
72
|
-
maxRuntimeSec: 4 * 3600,
|
|
73
|
-
failedDatasetGraceHours: this.options.failedDatasetGraceHours ?? 24
|
|
74
|
-
}
|
|
62
|
+
iconAsset: FAKE_ICON_ASSET,
|
|
63
|
+
addonId: this.addonId
|
|
75
64
|
}];
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
65
|
+
listEntries = async () => this.entries.map((entry) => ({
|
|
66
|
+
entryId: entry.entryId,
|
|
67
|
+
typeId: FAKE_TYPE_ID,
|
|
68
|
+
name: entry.name,
|
|
69
|
+
addonId: this.addonId,
|
|
70
|
+
configured: entry.configured
|
|
71
|
+
}));
|
|
72
|
+
createEntry = async (input) => {
|
|
73
|
+
if (input.typeId !== "fake") throw new Error(`unknown type "${input.typeId}"`);
|
|
74
|
+
const entryId = `fake-${String(this.entries.length + 1)}`;
|
|
75
|
+
this.entries.push({
|
|
76
|
+
entryId,
|
|
77
|
+
name: input.name,
|
|
78
|
+
configured: false
|
|
79
|
+
});
|
|
80
|
+
return { entryId };
|
|
81
|
+
};
|
|
82
|
+
deleteEntry = async (input) => {
|
|
83
|
+
const before = this.entries.length;
|
|
84
|
+
this.entries = this.entries.filter((e) => e.entryId !== input.entryId);
|
|
85
|
+
if (this.entries.length === before) throw new Error(`unknown entry "${input.entryId}"`);
|
|
86
|
+
return { ok: true };
|
|
87
|
+
};
|
|
88
|
+
validateCredentials = async (input) => {
|
|
89
|
+
const entry = this.entries.find((e) => e.entryId === input.entryId);
|
|
90
|
+
if (entry === void 0) return {
|
|
91
|
+
ok: false,
|
|
92
|
+
reason: "missing",
|
|
93
|
+
detail: "unknown entry"
|
|
94
|
+
};
|
|
95
|
+
return entry.configured ? {
|
|
96
|
+
ok: true,
|
|
97
|
+
account: "fake-workspace"
|
|
98
|
+
} : {
|
|
99
|
+
ok: false,
|
|
100
|
+
reason: "missing"
|
|
101
|
+
};
|
|
82
102
|
};
|
|
83
103
|
estimateJob = async (input) => ({
|
|
84
104
|
usdLow: input.gpuSecondsLow / 3600 * .8,
|
|
@@ -86,9 +106,10 @@ var FakeTrainingProvider = class {
|
|
|
86
106
|
notes: []
|
|
87
107
|
});
|
|
88
108
|
uploadDataset = async (input) => {
|
|
109
|
+
this.requireEntry(input.entryId);
|
|
89
110
|
this.calls.push(`upload:${input.jobKey}`);
|
|
90
111
|
const taken = await this.options.peer.take(input.ticket);
|
|
91
|
-
const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, "pending");
|
|
112
|
+
const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, input.entryId, "pending");
|
|
92
113
|
job.dataset = {
|
|
93
114
|
bytes: taken.bytes.length,
|
|
94
115
|
sha256: taken.sha256
|
|
@@ -101,8 +122,9 @@ var FakeTrainingProvider = class {
|
|
|
101
122
|
};
|
|
102
123
|
};
|
|
103
124
|
submitJob = async (input) => {
|
|
125
|
+
this.requireEntry(input.entryId);
|
|
104
126
|
this.calls.push(`submit:${input.jobKey}`);
|
|
105
|
-
const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, "pending");
|
|
127
|
+
const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, input.entryId, "pending");
|
|
106
128
|
job.submits += 1;
|
|
107
129
|
if (job.jobSpecJson === null) job.jobSpecJson = input.jobSpecJson;
|
|
108
130
|
this.jobs.set(input.jobKey, job);
|
|
@@ -149,15 +171,21 @@ var FakeTrainingProvider = class {
|
|
|
149
171
|
job.datasetDeleted = true;
|
|
150
172
|
return { deleted: [`cst-ds-${input.jobKey}`] };
|
|
151
173
|
};
|
|
152
|
-
listJobs = async () => [...this.jobs.values()].filter((j) => !j.datasetDeleted).map((j) => this.status(j));
|
|
174
|
+
listJobs = async (input) => [...this.jobs.values()].filter((j) => !j.datasetDeleted).filter((j) => input.entryId === void 0 || j.entryId === input.entryId).map((j) => this.status(j));
|
|
175
|
+
requireEntry(entryId) {
|
|
176
|
+
const entry = this.entries.find((e) => e.entryId === entryId);
|
|
177
|
+
if (entry === void 0) throw new Error(`fake provider: unknown entry ${entryId}`);
|
|
178
|
+
return entry;
|
|
179
|
+
}
|
|
153
180
|
require(jobKey) {
|
|
154
181
|
const job = this.jobs.get(jobKey);
|
|
155
182
|
if (job === void 0) throw new Error(`fake provider: no job ${jobKey}`);
|
|
156
183
|
return job;
|
|
157
184
|
}
|
|
158
|
-
blank(jobKey, state) {
|
|
185
|
+
blank(jobKey, entryId, state) {
|
|
159
186
|
return {
|
|
160
187
|
jobKey,
|
|
188
|
+
entryId,
|
|
161
189
|
state,
|
|
162
190
|
submits: 0,
|
|
163
191
|
startedAt: state === "running" ? this.options.now() : null,
|
|
@@ -172,6 +200,39 @@ var FakeTrainingProvider = class {
|
|
|
172
200
|
bundle: null
|
|
173
201
|
};
|
|
174
202
|
}
|
|
203
|
+
descriptorOf(entry) {
|
|
204
|
+
return {
|
|
205
|
+
addonId: this.addonId,
|
|
206
|
+
entryId: entry.entryId,
|
|
207
|
+
typeId: FAKE_TYPE_ID,
|
|
208
|
+
name: entry.name,
|
|
209
|
+
iconAsset: FAKE_ICON_ASSET,
|
|
210
|
+
kind: FAKE_TYPE_ID,
|
|
211
|
+
label: "Fake cloud",
|
|
212
|
+
gpuTypes: [{
|
|
213
|
+
id: "L4",
|
|
214
|
+
label: "L4",
|
|
215
|
+
usdPerHour: .8,
|
|
216
|
+
vramGb: 24
|
|
217
|
+
}],
|
|
218
|
+
regions: [{
|
|
219
|
+
id: "",
|
|
220
|
+
label: "Any",
|
|
221
|
+
priceMultiplier: 1
|
|
222
|
+
}],
|
|
223
|
+
maxDatasetBytes: 10 * 1024 ** 3,
|
|
224
|
+
maxRuntimeSec: 24 * 3600,
|
|
225
|
+
dataResidencyNote: "The fake keeps everything in memory.",
|
|
226
|
+
configured: entry.configured,
|
|
227
|
+
defaults: {
|
|
228
|
+
gpuType: "L4",
|
|
229
|
+
region: "",
|
|
230
|
+
costCapUsd: this.options.costCapUsd ?? 5,
|
|
231
|
+
maxRuntimeSec: 4 * 3600,
|
|
232
|
+
failedDatasetGraceHours: this.options.failedDatasetGraceHours ?? 24
|
|
233
|
+
}
|
|
234
|
+
};
|
|
235
|
+
}
|
|
175
236
|
status(job) {
|
|
176
237
|
return {
|
|
177
238
|
jobKey: job.jobKey,
|
package/dist/index.mjs
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
import { TrainingAddon } from "./orchestrator/training.addon.mjs";
|
|
2
2
|
import { TrainingModalAddon } from "./providers/modal/training-modal.addon.mjs";
|
|
3
3
|
//#region src/providers/fake/fake-provider.ts
|
|
4
|
+
var FAKE_TYPE_ID = "fake";
|
|
5
|
+
var FAKE_ICON_ASSET = "assets/training/icon.svg";
|
|
6
|
+
var FAKE_DEFAULT_ENTRY_ID = "fake-default";
|
|
4
7
|
var FakeTrainingProvider = class {
|
|
5
8
|
addonId;
|
|
9
|
+
defaultEntryId;
|
|
6
10
|
jobs = /* @__PURE__ */ new Map();
|
|
7
11
|
calls = [];
|
|
8
|
-
|
|
12
|
+
entries;
|
|
9
13
|
options;
|
|
10
14
|
constructor(options) {
|
|
11
15
|
this.options = options;
|
|
12
16
|
this.addonId = options.addonId ?? "training-fake";
|
|
13
|
-
this.
|
|
17
|
+
this.defaultEntryId = FAKE_DEFAULT_ENTRY_ID;
|
|
18
|
+
this.entries = options.entries ? [...options.entries] : [{
|
|
19
|
+
entryId: FAKE_DEFAULT_ENTRY_ID,
|
|
20
|
+
name: "Default",
|
|
21
|
+
configured: options.configured ?? true
|
|
22
|
+
}];
|
|
14
23
|
}
|
|
15
24
|
advance(jobKey, state, exitCode) {
|
|
16
25
|
const job = this.require(jobKey);
|
|
@@ -42,41 +51,52 @@ var FakeTrainingProvider = class {
|
|
|
42
51
|
}
|
|
43
52
|
/** A job started outside our records (a crashed hub, a second hub on the account). */
|
|
44
53
|
plantOrphan(jobKey) {
|
|
45
|
-
this.jobs.set(jobKey, this.blank(jobKey, "running"));
|
|
54
|
+
this.jobs.set(jobKey, this.blank(jobKey, this.defaultEntryId, "running"));
|
|
46
55
|
}
|
|
47
|
-
describe = async () =>
|
|
48
|
-
|
|
49
|
-
|
|
56
|
+
describe = async () => this.entries.map((entry) => this.descriptorOf(entry));
|
|
57
|
+
describeTypes = async () => [{
|
|
58
|
+
typeId: FAKE_TYPE_ID,
|
|
50
59
|
label: "Fake cloud",
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
label: "L4",
|
|
54
|
-
usdPerHour: .8,
|
|
55
|
-
vramGb: 24
|
|
56
|
-
}],
|
|
57
|
-
regions: [{
|
|
58
|
-
id: "",
|
|
59
|
-
label: "Any",
|
|
60
|
-
priceMultiplier: 1
|
|
61
|
-
}],
|
|
62
|
-
maxDatasetBytes: 10 * 1024 ** 3,
|
|
63
|
-
maxRuntimeSec: 24 * 3600,
|
|
64
|
-
dataResidencyNote: "The fake keeps everything in memory.",
|
|
65
|
-
configured: this.configured,
|
|
66
|
-
defaults: {
|
|
67
|
-
gpuType: "L4",
|
|
68
|
-
region: "",
|
|
69
|
-
costCapUsd: this.options.costCapUsd ?? 5,
|
|
70
|
-
maxRuntimeSec: 4 * 3600,
|
|
71
|
-
failedDatasetGraceHours: this.options.failedDatasetGraceHours ?? 24
|
|
72
|
-
}
|
|
60
|
+
iconAsset: FAKE_ICON_ASSET,
|
|
61
|
+
addonId: this.addonId
|
|
73
62
|
}];
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
63
|
+
listEntries = async () => this.entries.map((entry) => ({
|
|
64
|
+
entryId: entry.entryId,
|
|
65
|
+
typeId: FAKE_TYPE_ID,
|
|
66
|
+
name: entry.name,
|
|
67
|
+
addonId: this.addonId,
|
|
68
|
+
configured: entry.configured
|
|
69
|
+
}));
|
|
70
|
+
createEntry = async (input) => {
|
|
71
|
+
if (input.typeId !== "fake") throw new Error(`unknown type "${input.typeId}"`);
|
|
72
|
+
const entryId = `fake-${String(this.entries.length + 1)}`;
|
|
73
|
+
this.entries.push({
|
|
74
|
+
entryId,
|
|
75
|
+
name: input.name,
|
|
76
|
+
configured: false
|
|
77
|
+
});
|
|
78
|
+
return { entryId };
|
|
79
|
+
};
|
|
80
|
+
deleteEntry = async (input) => {
|
|
81
|
+
const before = this.entries.length;
|
|
82
|
+
this.entries = this.entries.filter((e) => e.entryId !== input.entryId);
|
|
83
|
+
if (this.entries.length === before) throw new Error(`unknown entry "${input.entryId}"`);
|
|
84
|
+
return { ok: true };
|
|
85
|
+
};
|
|
86
|
+
validateCredentials = async (input) => {
|
|
87
|
+
const entry = this.entries.find((e) => e.entryId === input.entryId);
|
|
88
|
+
if (entry === void 0) return {
|
|
89
|
+
ok: false,
|
|
90
|
+
reason: "missing",
|
|
91
|
+
detail: "unknown entry"
|
|
92
|
+
};
|
|
93
|
+
return entry.configured ? {
|
|
94
|
+
ok: true,
|
|
95
|
+
account: "fake-workspace"
|
|
96
|
+
} : {
|
|
97
|
+
ok: false,
|
|
98
|
+
reason: "missing"
|
|
99
|
+
};
|
|
80
100
|
};
|
|
81
101
|
estimateJob = async (input) => ({
|
|
82
102
|
usdLow: input.gpuSecondsLow / 3600 * .8,
|
|
@@ -84,9 +104,10 @@ var FakeTrainingProvider = class {
|
|
|
84
104
|
notes: []
|
|
85
105
|
});
|
|
86
106
|
uploadDataset = async (input) => {
|
|
107
|
+
this.requireEntry(input.entryId);
|
|
87
108
|
this.calls.push(`upload:${input.jobKey}`);
|
|
88
109
|
const taken = await this.options.peer.take(input.ticket);
|
|
89
|
-
const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, "pending");
|
|
110
|
+
const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, input.entryId, "pending");
|
|
90
111
|
job.dataset = {
|
|
91
112
|
bytes: taken.bytes.length,
|
|
92
113
|
sha256: taken.sha256
|
|
@@ -99,8 +120,9 @@ var FakeTrainingProvider = class {
|
|
|
99
120
|
};
|
|
100
121
|
};
|
|
101
122
|
submitJob = async (input) => {
|
|
123
|
+
this.requireEntry(input.entryId);
|
|
102
124
|
this.calls.push(`submit:${input.jobKey}`);
|
|
103
|
-
const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, "pending");
|
|
125
|
+
const job = this.jobs.get(input.jobKey) ?? this.blank(input.jobKey, input.entryId, "pending");
|
|
104
126
|
job.submits += 1;
|
|
105
127
|
if (job.jobSpecJson === null) job.jobSpecJson = input.jobSpecJson;
|
|
106
128
|
this.jobs.set(input.jobKey, job);
|
|
@@ -147,15 +169,21 @@ var FakeTrainingProvider = class {
|
|
|
147
169
|
job.datasetDeleted = true;
|
|
148
170
|
return { deleted: [`cst-ds-${input.jobKey}`] };
|
|
149
171
|
};
|
|
150
|
-
listJobs = async () => [...this.jobs.values()].filter((j) => !j.datasetDeleted).map((j) => this.status(j));
|
|
172
|
+
listJobs = async (input) => [...this.jobs.values()].filter((j) => !j.datasetDeleted).filter((j) => input.entryId === void 0 || j.entryId === input.entryId).map((j) => this.status(j));
|
|
173
|
+
requireEntry(entryId) {
|
|
174
|
+
const entry = this.entries.find((e) => e.entryId === entryId);
|
|
175
|
+
if (entry === void 0) throw new Error(`fake provider: unknown entry ${entryId}`);
|
|
176
|
+
return entry;
|
|
177
|
+
}
|
|
151
178
|
require(jobKey) {
|
|
152
179
|
const job = this.jobs.get(jobKey);
|
|
153
180
|
if (job === void 0) throw new Error(`fake provider: no job ${jobKey}`);
|
|
154
181
|
return job;
|
|
155
182
|
}
|
|
156
|
-
blank(jobKey, state) {
|
|
183
|
+
blank(jobKey, entryId, state) {
|
|
157
184
|
return {
|
|
158
185
|
jobKey,
|
|
186
|
+
entryId,
|
|
159
187
|
state,
|
|
160
188
|
submits: 0,
|
|
161
189
|
startedAt: state === "running" ? this.options.now() : null,
|
|
@@ -170,6 +198,39 @@ var FakeTrainingProvider = class {
|
|
|
170
198
|
bundle: null
|
|
171
199
|
};
|
|
172
200
|
}
|
|
201
|
+
descriptorOf(entry) {
|
|
202
|
+
return {
|
|
203
|
+
addonId: this.addonId,
|
|
204
|
+
entryId: entry.entryId,
|
|
205
|
+
typeId: FAKE_TYPE_ID,
|
|
206
|
+
name: entry.name,
|
|
207
|
+
iconAsset: FAKE_ICON_ASSET,
|
|
208
|
+
kind: FAKE_TYPE_ID,
|
|
209
|
+
label: "Fake cloud",
|
|
210
|
+
gpuTypes: [{
|
|
211
|
+
id: "L4",
|
|
212
|
+
label: "L4",
|
|
213
|
+
usdPerHour: .8,
|
|
214
|
+
vramGb: 24
|
|
215
|
+
}],
|
|
216
|
+
regions: [{
|
|
217
|
+
id: "",
|
|
218
|
+
label: "Any",
|
|
219
|
+
priceMultiplier: 1
|
|
220
|
+
}],
|
|
221
|
+
maxDatasetBytes: 10 * 1024 ** 3,
|
|
222
|
+
maxRuntimeSec: 24 * 3600,
|
|
223
|
+
dataResidencyNote: "The fake keeps everything in memory.",
|
|
224
|
+
configured: entry.configured,
|
|
225
|
+
defaults: {
|
|
226
|
+
gpuType: "L4",
|
|
227
|
+
region: "",
|
|
228
|
+
costCapUsd: this.options.costCapUsd ?? 5,
|
|
229
|
+
maxRuntimeSec: 4 * 3600,
|
|
230
|
+
failedDatasetGraceHours: this.options.failedDatasetGraceHours ?? 24
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
}
|
|
173
234
|
status(job) {
|
|
174
235
|
return {
|
|
175
236
|
jobKey: job.jobKey,
|