@gpuai/sdk 0.3.0 → 0.3.2

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/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # @gpuai/sdk@0.3.0
1
+ # @gpuai/sdk@0.3.2
2
2
 
3
3
  A TypeScript SDK client for the api.gpu.ai API.
4
4
 
@@ -196,7 +196,7 @@ and is automatically generated by the
196
196
  [OpenAPI Generator](https://openapi-generator.tech) project:
197
197
 
198
198
  - API version: `1.0.0`
199
- - Package version: `0.3.0`
199
+ - Package version: `0.3.2`
200
200
  - Generator version: `7.24.0`
201
201
  - Build package: `org.openapitools.codegen.languages.TypeScriptFetchClientCodegen`
202
202
 
@@ -57,6 +57,12 @@ export interface CreateInstanceRequest {
57
57
  * @memberof CreateInstanceRequest
58
58
  */
59
59
  maxPricePerHour?: number;
60
+ /**
61
+ * The retail $/hr the caller displayed to the user before launch. A catalog row is a quote, not a booking, and pinning an offering fixes which machine is placed but not its rate. If the launch-time price exceeds this by more than $0.01 the launch fails with `price_changed` carrying the new price instead of proceeding at the higher price; omit to accept the launch-time price (previous behavior). Refusal only — it is never read as consent, so it can neither raise what you are charged nor widen what may be bought on your behalf. Use max_price_per_hour to bound spend.
62
+ * @type {number}
63
+ * @memberof CreateInstanceRequest
64
+ */
65
+ viewedPricePerHour?: number;
60
66
  /**
61
67
  * Deploy a curated application template (e.g. comfyui, vllm). When set, gpu_type may be omitted — the cheapest eligible GPU is auto-selected. For templates serving a Hugging Face model via env.MODEL (vllm, sglang), the model's published weights size is checked against the GPU's VRAM at submit time: an oversized model on an explicit gpu_type returns 422 `model_too_large` (auto-select instead raises its VRAM floor to the estimate, and 422s only when no available GPU fits). Gated/private/unknown repos are never blocked — the deploy proceeds and the 202 carries a `warnings` entry.
62
68
  * @type {string}
@@ -45,6 +45,7 @@ export function CreateInstanceRequestFromJSONTyped(json, ignoreDiscriminator) {
45
45
  'sshKeyIds': json['ssh_key_ids'] == null ? undefined : json['ssh_key_ids'],
46
46
  'name': json['name'] == null ? undefined : json['name'],
47
47
  'maxPricePerHour': json['max_price_per_hour'] == null ? undefined : json['max_price_per_hour'],
48
+ 'viewedPricePerHour': json['viewed_price_per_hour'] == null ? undefined : json['viewed_price_per_hour'],
48
49
  'templateId': json['template_id'] == null ? undefined : json['template_id'],
49
50
  'environment': json['environment'] == null ? undefined : json['environment'],
50
51
  'offeringId': json['offering_id'] == null ? undefined : json['offering_id'],
@@ -67,6 +68,7 @@ export function CreateInstanceRequestToJSONTyped(value, ignoreDiscriminator = fa
67
68
  'ssh_key_ids': value['sshKeyIds'],
68
69
  'name': value['name'],
69
70
  'max_price_per_hour': value['maxPricePerHour'],
71
+ 'viewed_price_per_hour': value['viewedPricePerHour'],
70
72
  'template_id': value['templateId'],
71
73
  'environment': value['environment'],
72
74
  'offering_id': value['offeringId'],
@@ -29,7 +29,7 @@ export interface Instance {
29
29
  */
30
30
  name?: string;
31
31
  /**
32
- * Customer-facing lifecycle status. "allocating" = the GPU is still being acquired from the provider (slow-boot capacity such as baremetal can take ~15 min); "starting" = the node exists and is booting; "running" = ready to use.
32
+ * Customer-facing lifecycle status. "allocating" = the GPU is still being acquired from the provider (slow-boot capacity such as baremetal can take ~15 min); "starting" = the node exists and is booting; "running" = ready to use. "unreachable" = the platform's tunnel probe has confirmed the SSH path is down while the machine may still be up: the instance is NOT usable right now, billing for the confirmed-dead window is auto-credited back, and the instance either recovers to "running" on its own or is failed after a grace window. It is a degraded reading of a running instance, not a separate lifecycle state — see unreachable_since.
33
33
  * @type {InstanceStatusEnum}
34
34
  * @memberof Instance
35
35
  */
@@ -106,6 +106,12 @@ export interface Instance {
106
106
  * @memberof Instance
107
107
  */
108
108
  lastReachableAt?: Date;
109
+ /**
110
+ * Start of the confirmed tunnel outage the instance is currently in. Present exactly when status is "unreachable", absent otherwise. It is the timestamp the auto-credit for the dead window is computed from, so a ledger credit can be reconciled against it.
111
+ * @type {Date}
112
+ * @memberof Instance
113
+ */
114
+ unreachableSince?: Date;
109
115
  }
110
116
  /**
111
117
  * @export
@@ -117,6 +123,7 @@ export declare const InstanceStatusEnum: {
117
123
  readonly Stopping: "stopping";
118
124
  readonly Stopped: "stopped";
119
125
  readonly Terminated: "terminated";
126
+ readonly Unreachable: "unreachable";
120
127
  readonly Error: "error";
121
128
  };
122
129
  export type InstanceStatusEnum = typeof InstanceStatusEnum[keyof typeof InstanceStatusEnum];
@@ -22,6 +22,7 @@ export const InstanceStatusEnum = {
22
22
  Stopping: 'stopping',
23
23
  Stopped: 'stopped',
24
24
  Terminated: 'terminated',
25
+ Unreachable: 'unreachable',
25
26
  Error: 'error'
26
27
  };
27
28
  /**
@@ -76,6 +77,7 @@ export function InstanceFromJSONTyped(json, ignoreDiscriminator) {
76
77
  'readyAt': json['ready_at'] == null ? undefined : (new Date(json['ready_at'])),
77
78
  'terminatedAt': json['terminated_at'] == null ? undefined : (new Date(json['terminated_at'])),
78
79
  'lastReachableAt': json['last_reachable_at'] == null ? undefined : (new Date(json['last_reachable_at'])),
80
+ 'unreachableSince': json['unreachable_since'] == null ? undefined : (new Date(json['unreachable_since'])),
79
81
  };
80
82
  }
81
83
  export function InstanceToJSON(json) {
@@ -101,5 +103,6 @@ export function InstanceToJSONTyped(value, ignoreDiscriminator = false) {
101
103
  'ready_at': value['readyAt'] == null ? value['readyAt'] : value['readyAt'].toISOString(),
102
104
  'terminated_at': value['terminatedAt'] == null ? value['terminatedAt'] : value['terminatedAt'].toISOString(),
103
105
  'last_reachable_at': value['lastReachableAt'] == null ? value['lastReachableAt'] : value['lastReachableAt'].toISOString(),
106
+ 'unreachable_since': value['unreachableSince'] == null ? value['unreachableSince'] : value['unreachableSince'].toISOString(),
104
107
  };
105
108
  }
@@ -57,6 +57,12 @@ export interface CreateInstanceRequest {
57
57
  * @memberof CreateInstanceRequest
58
58
  */
59
59
  maxPricePerHour?: number;
60
+ /**
61
+ * The retail $/hr the caller displayed to the user before launch. A catalog row is a quote, not a booking, and pinning an offering fixes which machine is placed but not its rate. If the launch-time price exceeds this by more than $0.01 the launch fails with `price_changed` carrying the new price instead of proceeding at the higher price; omit to accept the launch-time price (previous behavior). Refusal only — it is never read as consent, so it can neither raise what you are charged nor widen what may be bought on your behalf. Use max_price_per_hour to bound spend.
62
+ * @type {number}
63
+ * @memberof CreateInstanceRequest
64
+ */
65
+ viewedPricePerHour?: number;
60
66
  /**
61
67
  * Deploy a curated application template (e.g. comfyui, vllm). When set, gpu_type may be omitted — the cheapest eligible GPU is auto-selected. For templates serving a Hugging Face model via env.MODEL (vllm, sglang), the model's published weights size is checked against the GPU's VRAM at submit time: an oversized model on an explicit gpu_type returns 422 `model_too_large` (auto-select instead raises its VRAM floor to the estimate, and 422s only when no available GPU fits). Gated/private/unknown repos are never blocked — the deploy proceeds and the 202 carries a `warnings` entry.
62
68
  * @type {string}
@@ -53,6 +53,7 @@ function CreateInstanceRequestFromJSONTyped(json, ignoreDiscriminator) {
53
53
  'sshKeyIds': json['ssh_key_ids'] == null ? undefined : json['ssh_key_ids'],
54
54
  'name': json['name'] == null ? undefined : json['name'],
55
55
  'maxPricePerHour': json['max_price_per_hour'] == null ? undefined : json['max_price_per_hour'],
56
+ 'viewedPricePerHour': json['viewed_price_per_hour'] == null ? undefined : json['viewed_price_per_hour'],
56
57
  'templateId': json['template_id'] == null ? undefined : json['template_id'],
57
58
  'environment': json['environment'] == null ? undefined : json['environment'],
58
59
  'offeringId': json['offering_id'] == null ? undefined : json['offering_id'],
@@ -75,6 +76,7 @@ function CreateInstanceRequestToJSONTyped(value, ignoreDiscriminator = false) {
75
76
  'ssh_key_ids': value['sshKeyIds'],
76
77
  'name': value['name'],
77
78
  'max_price_per_hour': value['maxPricePerHour'],
79
+ 'viewed_price_per_hour': value['viewedPricePerHour'],
78
80
  'template_id': value['templateId'],
79
81
  'environment': value['environment'],
80
82
  'offering_id': value['offeringId'],
@@ -29,7 +29,7 @@ export interface Instance {
29
29
  */
30
30
  name?: string;
31
31
  /**
32
- * Customer-facing lifecycle status. "allocating" = the GPU is still being acquired from the provider (slow-boot capacity such as baremetal can take ~15 min); "starting" = the node exists and is booting; "running" = ready to use.
32
+ * Customer-facing lifecycle status. "allocating" = the GPU is still being acquired from the provider (slow-boot capacity such as baremetal can take ~15 min); "starting" = the node exists and is booting; "running" = ready to use. "unreachable" = the platform's tunnel probe has confirmed the SSH path is down while the machine may still be up: the instance is NOT usable right now, billing for the confirmed-dead window is auto-credited back, and the instance either recovers to "running" on its own or is failed after a grace window. It is a degraded reading of a running instance, not a separate lifecycle state — see unreachable_since.
33
33
  * @type {InstanceStatusEnum}
34
34
  * @memberof Instance
35
35
  */
@@ -106,6 +106,12 @@ export interface Instance {
106
106
  * @memberof Instance
107
107
  */
108
108
  lastReachableAt?: Date;
109
+ /**
110
+ * Start of the confirmed tunnel outage the instance is currently in. Present exactly when status is "unreachable", absent otherwise. It is the timestamp the auto-credit for the dead window is computed from, so a ledger credit can be reconciled against it.
111
+ * @type {Date}
112
+ * @memberof Instance
113
+ */
114
+ unreachableSince?: Date;
109
115
  }
110
116
  /**
111
117
  * @export
@@ -117,6 +123,7 @@ export declare const InstanceStatusEnum: {
117
123
  readonly Stopping: "stopping";
118
124
  readonly Stopped: "stopped";
119
125
  readonly Terminated: "terminated";
126
+ readonly Unreachable: "unreachable";
120
127
  readonly Error: "error";
121
128
  };
122
129
  export type InstanceStatusEnum = typeof InstanceStatusEnum[keyof typeof InstanceStatusEnum];
@@ -30,6 +30,7 @@ exports.InstanceStatusEnum = {
30
30
  Stopping: 'stopping',
31
31
  Stopped: 'stopped',
32
32
  Terminated: 'terminated',
33
+ Unreachable: 'unreachable',
33
34
  Error: 'error'
34
35
  };
35
36
  /**
@@ -84,6 +85,7 @@ function InstanceFromJSONTyped(json, ignoreDiscriminator) {
84
85
  'readyAt': json['ready_at'] == null ? undefined : (new Date(json['ready_at'])),
85
86
  'terminatedAt': json['terminated_at'] == null ? undefined : (new Date(json['terminated_at'])),
86
87
  'lastReachableAt': json['last_reachable_at'] == null ? undefined : (new Date(json['last_reachable_at'])),
88
+ 'unreachableSince': json['unreachable_since'] == null ? undefined : (new Date(json['unreachable_since'])),
87
89
  };
88
90
  }
89
91
  function InstanceToJSON(json) {
@@ -109,5 +111,6 @@ function InstanceToJSONTyped(value, ignoreDiscriminator = false) {
109
111
  'ready_at': value['readyAt'] == null ? value['readyAt'] : value['readyAt'].toISOString(),
110
112
  'terminated_at': value['terminatedAt'] == null ? value['terminatedAt'] : value['terminatedAt'].toISOString(),
111
113
  'last_reachable_at': value['lastReachableAt'] == null ? value['lastReachableAt'] : value['lastReachableAt'].toISOString(),
114
+ 'unreachable_since': value['unreachableSince'] == null ? value['unreachableSince'] : value['unreachableSince'].toISOString(),
112
115
  };
113
116
  }
@@ -13,6 +13,7 @@ Name | Type
13
13
  `sshKeyIds` | Array<string>
14
14
  `name` | string
15
15
  `maxPricePerHour` | number
16
+ `viewedPricePerHour` | number
16
17
  `templateId` | string
17
18
  `environment` | string
18
19
  `offeringId` | string
@@ -33,6 +34,7 @@ const example = {
33
34
  "sshKeyIds": null,
34
35
  "name": null,
35
36
  "maxPricePerHour": null,
37
+ "viewedPricePerHour": null,
36
38
  "templateId": null,
37
39
  "environment": certified:pytorch@2.13,
38
40
  "offeringId": null,
package/docs/Instance.md CHANGED
@@ -21,6 +21,7 @@ Name | Type
21
21
  `readyAt` | Date
22
22
  `terminatedAt` | Date
23
23
  `lastReachableAt` | Date
24
+ `unreachableSince` | Date
24
25
 
25
26
  ## Example
26
27
 
@@ -44,6 +45,7 @@ const example = {
44
45
  "readyAt": null,
45
46
  "terminatedAt": null,
46
47
  "lastReachableAt": null,
48
+ "unreachableSince": null,
47
49
  } satisfies Instance
48
50
 
49
51
  console.log(example)
@@ -268,7 +268,7 @@ async function example() {
268
268
  cursor: cursor_example,
269
269
  // number (optional)
270
270
  limit: 56,
271
- // 'allocating' | 'starting' | 'running' | 'stopping' | 'stopped' | 'terminated' | 'error' | 'all' | Filter by customer-facing status (default = all non-terminated) (optional)
271
+ // 'allocating' | 'starting' | 'running' | 'stopping' | 'stopped' | 'terminated' | 'error' | 'all' | Filter by customer-facing status (default = all non-terminated). There is no \"unreachable\" filter value: an unreachable instance is a running instance with a dead tunnel, so it is listed under status=running and reads \"unreachable\" in the response body. (optional)
272
272
  status: status_example,
273
273
  } satisfies ListInstancesRequest;
274
274
 
@@ -291,7 +291,7 @@ example().catch(console.error);
291
291
  |------------- | ------------- | ------------- | -------------|
292
292
  | **cursor** | `string` | | [Optional] [Defaults to `undefined`] |
293
293
  | **limit** | `number` | | [Optional] [Defaults to `50`] |
294
- | **status** | `allocating`, `starting`, `running`, `stopping`, `stopped`, `terminated`, `error`, `all` | Filter by customer-facing status (default = all non-terminated) | [Optional] [Defaults to `undefined`] [Enum: allocating, starting, running, stopping, stopped, terminated, error, all] |
294
+ | **status** | `allocating`, `starting`, `running`, `stopping`, `stopped`, `terminated`, `error`, `all` | Filter by customer-facing status (default = all non-terminated). There is no \"unreachable\" filter value: an unreachable instance is a running instance with a dead tunnel, so it is listed under status=running and reads \"unreachable\" in the response body. | [Optional] [Defaults to `undefined`] [Enum: allocating, starting, running, stopping, stopped, terminated, error, all] |
295
295
 
296
296
  ### Return type
297
297
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gpuai/sdk",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "TypeScript SDK for the GPU.ai Public Developer API",
5
5
  "author": "GPU.ai Support <support@gpu.ai>",
6
6
  "repository": {
@@ -61,6 +61,12 @@ export interface CreateInstanceRequest {
61
61
  * @memberof CreateInstanceRequest
62
62
  */
63
63
  maxPricePerHour?: number;
64
+ /**
65
+ * The retail $/hr the caller displayed to the user before launch. A catalog row is a quote, not a booking, and pinning an offering fixes which machine is placed but not its rate. If the launch-time price exceeds this by more than $0.01 the launch fails with `price_changed` carrying the new price instead of proceeding at the higher price; omit to accept the launch-time price (previous behavior). Refusal only — it is never read as consent, so it can neither raise what you are charged nor widen what may be bought on your behalf. Use max_price_per_hour to bound spend.
66
+ * @type {number}
67
+ * @memberof CreateInstanceRequest
68
+ */
69
+ viewedPricePerHour?: number;
64
70
  /**
65
71
  * Deploy a curated application template (e.g. comfyui, vllm). When set, gpu_type may be omitted — the cheapest eligible GPU is auto-selected. For templates serving a Hugging Face model via env.MODEL (vllm, sglang), the model's published weights size is checked against the GPU's VRAM at submit time: an oversized model on an explicit gpu_type returns 422 `model_too_large` (auto-select instead raises its VRAM floor to the estimate, and 422s only when no available GPU fits). Gated/private/unknown repos are never blocked — the deploy proceeds and the 202 carries a `warnings` entry.
66
72
  * @type {string}
@@ -131,6 +137,7 @@ export function CreateInstanceRequestFromJSONTyped(json: any, ignoreDiscriminato
131
137
  'sshKeyIds': json['ssh_key_ids'] == null ? undefined : json['ssh_key_ids'],
132
138
  'name': json['name'] == null ? undefined : json['name'],
133
139
  'maxPricePerHour': json['max_price_per_hour'] == null ? undefined : json['max_price_per_hour'],
140
+ 'viewedPricePerHour': json['viewed_price_per_hour'] == null ? undefined : json['viewed_price_per_hour'],
134
141
  'templateId': json['template_id'] == null ? undefined : json['template_id'],
135
142
  'environment': json['environment'] == null ? undefined : json['environment'],
136
143
  'offeringId': json['offering_id'] == null ? undefined : json['offering_id'],
@@ -157,6 +164,7 @@ export function CreateInstanceRequestToJSONTyped(value?: CreateInstanceRequest |
157
164
  'ssh_key_ids': value['sshKeyIds'],
158
165
  'name': value['name'],
159
166
  'max_price_per_hour': value['maxPricePerHour'],
167
+ 'viewed_price_per_hour': value['viewedPricePerHour'],
160
168
  'template_id': value['templateId'],
161
169
  'environment': value['environment'],
162
170
  'offering_id': value['offeringId'],
@@ -40,7 +40,7 @@ export interface Instance {
40
40
  */
41
41
  name?: string;
42
42
  /**
43
- * Customer-facing lifecycle status. "allocating" = the GPU is still being acquired from the provider (slow-boot capacity such as baremetal can take ~15 min); "starting" = the node exists and is booting; "running" = ready to use.
43
+ * Customer-facing lifecycle status. "allocating" = the GPU is still being acquired from the provider (slow-boot capacity such as baremetal can take ~15 min); "starting" = the node exists and is booting; "running" = ready to use. "unreachable" = the platform's tunnel probe has confirmed the SSH path is down while the machine may still be up: the instance is NOT usable right now, billing for the confirmed-dead window is auto-credited back, and the instance either recovers to "running" on its own or is failed after a grace window. It is a degraded reading of a running instance, not a separate lifecycle state — see unreachable_since.
44
44
  * @type {InstanceStatusEnum}
45
45
  * @memberof Instance
46
46
  */
@@ -117,6 +117,12 @@ export interface Instance {
117
117
  * @memberof Instance
118
118
  */
119
119
  lastReachableAt?: Date;
120
+ /**
121
+ * Start of the confirmed tunnel outage the instance is currently in. Present exactly when status is "unreachable", absent otherwise. It is the timestamp the auto-credit for the dead window is computed from, so a ledger credit can be reconciled against it.
122
+ * @type {Date}
123
+ * @memberof Instance
124
+ */
125
+ unreachableSince?: Date;
120
126
  }
121
127
 
122
128
 
@@ -130,6 +136,7 @@ export const InstanceStatusEnum = {
130
136
  Stopping: 'stopping',
131
137
  Stopped: 'stopped',
132
138
  Terminated: 'terminated',
139
+ Unreachable: 'unreachable',
133
140
  Error: 'error'
134
141
  } as const;
135
142
  export type InstanceStatusEnum = typeof InstanceStatusEnum[keyof typeof InstanceStatusEnum];
@@ -184,6 +191,7 @@ export function InstanceFromJSONTyped(json: any, ignoreDiscriminator: boolean):
184
191
  'readyAt': json['ready_at'] == null ? undefined : (new Date(json['ready_at'])),
185
192
  'terminatedAt': json['terminated_at'] == null ? undefined : (new Date(json['terminated_at'])),
186
193
  'lastReachableAt': json['last_reachable_at'] == null ? undefined : (new Date(json['last_reachable_at'])),
194
+ 'unreachableSince': json['unreachable_since'] == null ? undefined : (new Date(json['unreachable_since'])),
187
195
  };
188
196
  }
189
197
 
@@ -213,6 +221,7 @@ export function InstanceToJSONTyped(value?: Instance | null, ignoreDiscriminator
213
221
  'ready_at': value['readyAt'] == null ? value['readyAt'] : value['readyAt'].toISOString(),
214
222
  'terminated_at': value['terminatedAt'] == null ? value['terminatedAt'] : value['terminatedAt'].toISOString(),
215
223
  'last_reachable_at': value['lastReachableAt'] == null ? value['lastReachableAt'] : value['lastReachableAt'].toISOString(),
224
+ 'unreachable_since': value['unreachableSince'] == null ? value['unreachableSince'] : value['unreachableSince'].toISOString(),
216
225
  };
217
226
  }
218
227