tensorlake 0.5.139 → 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.139";
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;
135
+ var SandboxException, SandboxError, SandboxResizeError, SandboxConnectionError, SandboxNotFoundError, PoolNotFoundError, PoolInUseError, RemoteAPIError;
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}`);
@@ -424,7 +493,7 @@ var init_native_worker_client = __esm({
424
493
  }
425
494
  };
426
495
  runtimeKey = /* @__PURE__ */ Symbol.for(
427
- `tensorlake.native.worker.${false ? "source" : "0.5.139"}.v1`
496
+ `tensorlake.native.worker.${false ? "source" : "0.5.141"}.v1`
428
497
  );
429
498
  runtimes = globalThis;
430
499
  }
@@ -457,6 +526,11 @@ function translateNativeError(error, context) {
457
526
  return new SandboxError(String(error));
458
527
  }
459
528
  const { category, status, message } = payload;
529
+ if (category === "resize") {
530
+ return new SandboxResizeError(
531
+ fromSnakeKeys(JSON.parse(message), "sandboxId")
532
+ );
533
+ }
460
534
  if (category === "connection") {
461
535
  return new SandboxConnectionError(message, { cause: error });
462
536
  }
@@ -547,6 +621,7 @@ var init_native_sandbox = __esm({
547
621
  "src/native-sandbox.ts"() {
548
622
  "use strict";
549
623
  init_cjs_shims();
624
+ init_models();
550
625
  init_errors();
551
626
  init_native_worker_client();
552
627
  init_native_worker_protocol();
@@ -637,56 +712,6 @@ var init_native_cloud = __esm({
637
712
  }
638
713
  });
639
714
 
640
- // src/models.ts
641
- function snakeToCamel(str) {
642
- return str.replace(/_([a-z])/g, (_, ch) => ch.toUpperCase());
643
- }
644
- function parseTimestamp(v) {
645
- if (v == null) return void 0;
646
- if (v instanceof Date) return v;
647
- if (typeof v === "string") {
648
- const parsed = Date.parse(v);
649
- return Number.isNaN(parsed) ? void 0 : new Date(parsed);
650
- }
651
- const ts = Number(v);
652
- if (isNaN(ts)) return void 0;
653
- if (ts > 1e15) return new Date(ts / 1e3);
654
- if (ts > 1e12) return new Date(ts);
655
- return new Date(ts * 1e3);
656
- }
657
- function fromSnakeKeys(obj, idField) {
658
- if (Array.isArray(obj))
659
- return obj.map((item) => fromSnakeKeys(item, idField));
660
- if (obj !== null && typeof obj === "object" && !(obj instanceof Date)) {
661
- const result = {};
662
- for (const [k, v] of Object.entries(obj)) {
663
- let key;
664
- if (k === "id" && idField) {
665
- key = idField;
666
- } else {
667
- key = snakeToCamel(k);
668
- }
669
- if (key.endsWith("At") || key === "timestamp" || key === "startedAt" || key === "endedAt") {
670
- result[key] = parseTimestamp(v);
671
- } else if (typeof v === "object" && v !== null && !Array.isArray(v)) {
672
- result[key] = fromSnakeKeys(v);
673
- } else if (Array.isArray(v)) {
674
- result[key] = v.map((item) => fromSnakeKeys(item));
675
- } else {
676
- result[key] = v === null ? void 0 : v;
677
- }
678
- }
679
- return result;
680
- }
681
- return obj;
682
- }
683
- var init_models = __esm({
684
- "src/models.ts"() {
685
- "use strict";
686
- init_cjs_shims();
687
- }
688
- });
689
-
690
715
  // src/cloud-client.ts
691
716
  function secretFromMetadata(metadata) {
692
717
  return {
@@ -1850,7 +1875,7 @@ async function runCreateSandboxImageCli(argv = process.argv.slice(2)) {
1850
1875
  const dockerfilePath = parsed.positionals[0];
1851
1876
  if (!dockerfilePath) {
1852
1877
  throw new Error(
1853
- "Usage: tensorlake-create-sandbox-image <dockerfile_path> [--name NAME] [--cpus N] [--memory MB] [--disk_mb MB] [--builder_disk_mb MB] [--docker_compat] [--public]"
1878
+ "Usage: tensorlake-create-sandbox-image <dockerfile_path> [--name NAME] [--cpus N] [--memory MiB] [--disk_mb MiB] [--builder_disk_mb MiB] [--docker_compat] [--public]"
1854
1879
  );
1855
1880
  }
1856
1881
  const cpus = parsed.values.cpus != null ? Number(parsed.values.cpus) : void 0;
@@ -1902,7 +1927,7 @@ async function runImportSandboxImageCli(argv = process.argv.slice(2)) {
1902
1927
  const imageReference = parsed.positionals[0];
1903
1928
  if (!imageReference) {
1904
1929
  throw new Error(
1905
- "Usage: tensorlake-import-sandbox-image <image_reference> [--name NAME] [--cpus N] [--memory MB] [--disk_mb MB] [--builder_disk_mb MB] [--docker_compat] [--public]"
1930
+ "Usage: tensorlake-import-sandbox-image <image_reference> [--name NAME] [--cpus N] [--memory MiB] [--disk_mb MiB] [--builder_disk_mb MiB] [--docker_compat] [--public]"
1906
1931
  );
1907
1932
  }
1908
1933
  const cpus = parsed.values.cpus != null ? Number(parsed.values.cpus) : void 0;