tensorlake 0.5.140 → 0.5.141

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.
@@ -49,7 +49,7 @@ var init_defaults = __esm({
49
49
  "src/defaults.ts"() {
50
50
  "use strict";
51
51
  init_cjs_shims();
52
- SDK_VERSION = "0.5.140";
52
+ SDK_VERSION = "0.5.141";
53
53
  API_URL = process.env.TENSORLAKE_API_URL ?? "https://api.tensorlake.ai";
54
54
  API_KEY = process.env.TENSORLAKE_API_KEY ?? void 0;
55
55
  NAMESPACE = process.env.INDEXIFY_NAMESPACE ?? "default";
@@ -60,6 +60,56 @@ var init_defaults = __esm({
60
60
  }
61
61
  });
62
62
 
63
+ // src/models.ts
64
+ function snakeToCamel(str) {
65
+ return str.replace(/_([a-z])/g, (_, ch) => ch.toUpperCase());
66
+ }
67
+ function parseTimestamp(v) {
68
+ if (v == null) return void 0;
69
+ if (v instanceof Date) return v;
70
+ if (typeof v === "string") {
71
+ const parsed = Date.parse(v);
72
+ return Number.isNaN(parsed) ? void 0 : new Date(parsed);
73
+ }
74
+ const ts = Number(v);
75
+ if (isNaN(ts)) return void 0;
76
+ if (ts > 1e15) return new Date(ts / 1e3);
77
+ if (ts > 1e12) return new Date(ts);
78
+ return new Date(ts * 1e3);
79
+ }
80
+ function fromSnakeKeys(obj, idField) {
81
+ if (Array.isArray(obj))
82
+ return obj.map((item) => fromSnakeKeys(item, idField));
83
+ if (obj !== null && typeof obj === "object" && !(obj instanceof Date)) {
84
+ const result = {};
85
+ for (const [k, v] of Object.entries(obj)) {
86
+ let key;
87
+ if (k === "id" && idField) {
88
+ key = idField;
89
+ } else {
90
+ key = snakeToCamel(k);
91
+ }
92
+ if (key.endsWith("At") || key === "timestamp" || key === "startedAt" || key === "endedAt") {
93
+ result[key] = parseTimestamp(v);
94
+ } else if (typeof v === "object" && v !== null && !Array.isArray(v)) {
95
+ result[key] = fromSnakeKeys(v);
96
+ } else if (Array.isArray(v)) {
97
+ result[key] = v.map((item) => fromSnakeKeys(item));
98
+ } else {
99
+ result[key] = v === null ? void 0 : v;
100
+ }
101
+ }
102
+ return result;
103
+ }
104
+ return obj;
105
+ }
106
+ var init_models = __esm({
107
+ "src/models.ts"() {
108
+ "use strict";
109
+ init_cjs_shims();
110
+ }
111
+ });
112
+
63
113
  // src/errors.ts
64
114
  function formatErrorDetails(errorDetails) {
65
115
  if (errorDetails == null) return void 0;
@@ -82,7 +132,7 @@ function formatErrorDetails(errorDetails) {
82
132
  }
83
133
  return String(errorDetails);
84
134
  }
85
- var SandboxException, SandboxError, SandboxConnectionError, SandboxNotFoundError, PoolNotFoundError, PoolInUseError, RemoteAPIError, RequestNotFinishedError, RequestFailedError, RequestExecutionError;
135
+ var SandboxException, SandboxError, SandboxResizeError, SandboxConnectionError, SandboxNotFoundError, PoolNotFoundError, PoolInUseError, RemoteAPIError, RequestNotFinishedError, RequestFailedError, RequestExecutionError;
86
136
  var init_errors = __esm({
87
137
  "src/errors.ts"() {
88
138
  "use strict";
@@ -103,6 +153,25 @@ var init_errors = __esm({
103
153
  if (options?.sandboxId !== void 0) this.sandboxId = options.sandboxId;
104
154
  }
105
155
  };
156
+ SandboxResizeError = class extends SandboxError {
157
+ generation;
158
+ info;
159
+ constructor(payload) {
160
+ const resources = payload.info?.resources;
161
+ const allocation = resources ? `${resources.cpus} CPUs, ${resources.memoryMb} MiB memory, ${resources.diskMb} MiB disk` : "unavailable";
162
+ super(
163
+ `Sandbox ${payload.sandboxId} resize generation ${payload.generation}: ${payload.message}; last confirmed allocation: ${allocation}`,
164
+ { reason: payload.reason, sandboxId: payload.sandboxId }
165
+ );
166
+ this.name = "SandboxResizeError";
167
+ this.generation = payload.generation;
168
+ this.info = payload.info ?? void 0;
169
+ }
170
+ /** Last confirmed allocation, if an observation was available. */
171
+ get confirmedResources() {
172
+ return this.info?.resources;
173
+ }
174
+ };
106
175
  SandboxConnectionError = class extends SandboxError {
107
176
  constructor(message, options) {
108
177
  super(`Connection error: ${message}`);
@@ -448,7 +517,7 @@ var init_native_worker_client = __esm({
448
517
  }
449
518
  };
450
519
  runtimeKey = /* @__PURE__ */ Symbol.for(
451
- `tensorlake.native.worker.${false ? "source" : "0.5.140"}.v1`
520
+ `tensorlake.native.worker.${false ? "source" : "0.5.141"}.v1`
452
521
  );
453
522
  runtimes = globalThis;
454
523
  }
@@ -481,6 +550,11 @@ function translateNativeError(error, context) {
481
550
  return new SandboxError(String(error));
482
551
  }
483
552
  const { category, status, message } = payload;
553
+ if (category === "resize") {
554
+ return new SandboxResizeError(
555
+ fromSnakeKeys(JSON.parse(message), "sandboxId")
556
+ );
557
+ }
484
558
  if (category === "connection") {
485
559
  return new SandboxConnectionError(message, { cause: error });
486
560
  }
@@ -571,6 +645,7 @@ var init_native_sandbox = __esm({
571
645
  "src/native-sandbox.ts"() {
572
646
  "use strict";
573
647
  init_cjs_shims();
648
+ init_models();
574
649
  init_errors();
575
650
  init_native_worker_client();
576
651
  init_native_worker_protocol();
@@ -661,56 +736,6 @@ var init_native_cloud = __esm({
661
736
  }
662
737
  });
663
738
 
664
- // src/models.ts
665
- function snakeToCamel(str) {
666
- return str.replace(/_([a-z])/g, (_, ch) => ch.toUpperCase());
667
- }
668
- function parseTimestamp(v) {
669
- if (v == null) return void 0;
670
- if (v instanceof Date) return v;
671
- if (typeof v === "string") {
672
- const parsed = Date.parse(v);
673
- return Number.isNaN(parsed) ? void 0 : new Date(parsed);
674
- }
675
- const ts = Number(v);
676
- if (isNaN(ts)) return void 0;
677
- if (ts > 1e15) return new Date(ts / 1e3);
678
- if (ts > 1e12) return new Date(ts);
679
- return new Date(ts * 1e3);
680
- }
681
- function fromSnakeKeys(obj, idField) {
682
- if (Array.isArray(obj))
683
- return obj.map((item) => fromSnakeKeys(item, idField));
684
- if (obj !== null && typeof obj === "object" && !(obj instanceof Date)) {
685
- const result = {};
686
- for (const [k, v] of Object.entries(obj)) {
687
- let key;
688
- if (k === "id" && idField) {
689
- key = idField;
690
- } else {
691
- key = snakeToCamel(k);
692
- }
693
- if (key.endsWith("At") || key === "timestamp" || key === "startedAt" || key === "endedAt") {
694
- result[key] = parseTimestamp(v);
695
- } else if (typeof v === "object" && v !== null && !Array.isArray(v)) {
696
- result[key] = fromSnakeKeys(v);
697
- } else if (Array.isArray(v)) {
698
- result[key] = v.map((item) => fromSnakeKeys(item));
699
- } else {
700
- result[key] = v === null ? void 0 : v;
701
- }
702
- }
703
- return result;
704
- }
705
- return obj;
706
- }
707
- var init_models = __esm({
708
- "src/models.ts"() {
709
- "use strict";
710
- init_cjs_shims();
711
- }
712
- });
713
-
714
739
  // src/cloud-client.ts
715
740
  function secretFromMetadata(metadata) {
716
741
  return {
@@ -1748,7 +1773,7 @@ async function runCreateSandboxImageCli(argv = process.argv.slice(2)) {
1748
1773
  const dockerfilePath = parsed.positionals[0];
1749
1774
  if (!dockerfilePath) {
1750
1775
  throw new Error(
1751
- "Usage: tensorlake-create-sandbox-image <dockerfile_path> [--name NAME] [--cpus N] [--memory MB] [--disk_mb MB] [--builder_disk_mb MB] [--docker_compat] [--public]"
1776
+ "Usage: tensorlake-create-sandbox-image <dockerfile_path> [--name NAME] [--cpus N] [--memory MiB] [--disk_mb MiB] [--builder_disk_mb MiB] [--docker_compat] [--public]"
1752
1777
  );
1753
1778
  }
1754
1779
  const cpus = parsed.values.cpus != null ? Number(parsed.values.cpus) : void 0;
@@ -1800,7 +1825,7 @@ async function runImportSandboxImageCli(argv = process.argv.slice(2)) {
1800
1825
  const imageReference = parsed.positionals[0];
1801
1826
  if (!imageReference) {
1802
1827
  throw new Error(
1803
- "Usage: tensorlake-import-sandbox-image <image_reference> [--name NAME] [--cpus N] [--memory MB] [--disk_mb MB] [--builder_disk_mb MB] [--docker_compat] [--public]"
1828
+ "Usage: tensorlake-import-sandbox-image <image_reference> [--name NAME] [--cpus N] [--memory MiB] [--disk_mb MiB] [--builder_disk_mb MiB] [--docker_compat] [--public]"
1804
1829
  );
1805
1830
  }
1806
1831
  const cpus = parsed.values.cpus != null ? Number(parsed.values.cpus) : void 0;