diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 3a39fd8c..811a88ee 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.35.0"
+ ".": "0.35.1"
}
diff --git a/.stats.yml b/.stats.yml
index 52b8a0e0..0cd113f1 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 45
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/togetherai%2Ftogetherai-5bf4a0ec441254dfa07138a49ee44a8b84696db879c4d4df73ba836ba7a51d62.yml
-openapi_spec_hash: f602dfd1aaac78f149c1dbe352b7b7e0
-config_hash: 9749f2f8998aa6b15452b2187ff675b9
+configured_endpoints: 56
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/togetherai%2Ftogetherai-a9d83cd151880bb0b91852d44a032cfe48f0f82ac8ea7578af21d03fd9f1d3f4.yml
+openapi_spec_hash: 64c052bc0b39c72d0ac61598aabaede6
+config_hash: 9f0a75905c5f0298de5b52158ac4b5c2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b9d624ff..7bae0386 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,13 @@
# Changelog
+## 0.35.1 (2026-01-06)
+
+Full Changelog: [v0.35.0...v0.35.1](https://github.com/togethercomputer/together-typescript/compare/v0.35.0...v0.35.1)
+
+### Chores
+
+* Add Instant Clusters to OpenAPI spec ([2b597be](https://github.com/togethercomputer/together-typescript/commit/2b597be4cc4fd46d62286e415e892687a8f52917))
+
## 0.35.0 (2026-01-06)
Full Changelog: [v0.34.0...v0.35.0](https://github.com/togethercomputer/together-typescript/compare/v0.34.0...v0.35.0)
diff --git a/MIGRATION.md b/MIGRATION.md
index 0f3abf07..ecf00d8f 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -135,16 +135,16 @@ If you were relying on anything that was only exported from `together-ai/core` a
#### Resource classes
-Previously under certain circumstances it was possible to import resource classes like `Chat` directly from the root of the package. This was never valid at the type level and only worked in CommonJS files.
+Previously under certain circumstances it was possible to import resource classes like `Beta` directly from the root of the package. This was never valid at the type level and only worked in CommonJS files.
Now you must always either reference them as static class properties or import them directly from the files in which they are defined.
```typescript
// Before
-const { Chat } = require('together-ai');
+const { Beta } = require('together-ai');
// After
const { Together } = require('together-ai');
-Together.Chat; // or import directly from together-ai/resources/chat/chat
+Together.Beta; // or import directly from together-ai/resources/beta/beta
```
#### Cleaned up `uploads` exports
diff --git a/api.md b/api.md
index 7f3e72f5..db75b40b 100644
--- a/api.md
+++ b/api.md
@@ -1,3 +1,42 @@
+# Beta
+
+## Clusters
+
+Types:
+
+- Cluster
+- ClusterCreateResponse
+- ClusterUpdateResponse
+- ClusterListResponse
+- ClusterDeleteResponse
+- ClusterListRegionsResponse
+
+Methods:
+
+- client.beta.clusters.create({ ...params }) -> ClusterCreateResponse
+- client.beta.clusters.retrieve(clusterID) -> Cluster
+- client.beta.clusters.update(clusterID, { ...params }) -> ClusterUpdateResponse
+- client.beta.clusters.list() -> ClusterListResponse
+- client.beta.clusters.delete(clusterID) -> ClusterDeleteResponse
+- client.beta.clusters.listRegions() -> ClusterListRegionsResponse
+
+### Storage
+
+Types:
+
+- ClusterStorage
+- StorageCreateResponse
+- StorageListResponse
+- StorageDeleteResponse
+
+Methods:
+
+- client.beta.clusters.storage.create({ ...params }) -> StorageCreateResponse
+- client.beta.clusters.storage.retrieve(volumeID) -> ClusterStorage
+- client.beta.clusters.storage.update({ ...params }) -> ClusterStorage
+- client.beta.clusters.storage.list() -> StorageListResponse
+- client.beta.clusters.storage.delete(volumeID) -> StorageDeleteResponse
+
# Chat
## Completions
diff --git a/package.json b/package.json
index 50474016..636c90f3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "together-ai",
- "version": "0.35.0",
+ "version": "0.35.1",
"description": "The official TypeScript library for the Together API",
"author": "Together ",
"types": "dist/index.d.ts",
diff --git a/src/client.ts b/src/client.ts
index 6b1906b9..e1c9ba96 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -94,6 +94,7 @@ import {
import { Rerank, RerankCreateParams, RerankCreateResponse } from './resources/rerank';
import { VideoCreateParams, VideoJob, Videos } from './resources/videos';
import { Audio, AudioFile, AudioSpeechStreamChunk } from './resources/audio/audio';
+import { Beta } from './resources/beta/beta';
import { Chat } from './resources/chat/chat';
import {
CodeInterpreter,
@@ -798,6 +799,7 @@ export class Together {
static toFile = Uploads.toFile;
+ beta: API.Beta = new API.Beta(this);
chat: API.Chat = new API.Chat(this);
completions: API.Completions = new API.Completions(this);
embeddings: API.Embeddings = new API.Embeddings(this);
@@ -816,6 +818,7 @@ export class Together {
evals: API.Evals = new API.Evals(this);
}
+Together.Beta = Beta;
Together.Chat = Chat;
Together.Completions = Completions;
Together.Embeddings = Embeddings;
@@ -836,6 +839,8 @@ Together.Evals = Evals;
export declare namespace Together {
export type RequestOptions = Opts.RequestOptions;
+ export { Beta as Beta };
+
export { Chat as Chat };
export {
diff --git a/src/resources/beta.ts b/src/resources/beta.ts
new file mode 100644
index 00000000..1542e942
--- /dev/null
+++ b/src/resources/beta.ts
@@ -0,0 +1,3 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+export * from './beta/index';
diff --git a/src/resources/beta/beta.ts b/src/resources/beta/beta.ts
new file mode 100644
index 00000000..dc9c4ea7
--- /dev/null
+++ b/src/resources/beta/beta.ts
@@ -0,0 +1,35 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import { APIResource } from '../../core/resource';
+import * as ClustersAPI from './clusters/clusters';
+import {
+ Cluster,
+ ClusterCreateParams,
+ ClusterCreateResponse,
+ ClusterDeleteResponse,
+ ClusterListRegionsResponse,
+ ClusterListResponse,
+ ClusterUpdateParams,
+ ClusterUpdateResponse,
+ Clusters,
+} from './clusters/clusters';
+
+export class Beta extends APIResource {
+ clusters: ClustersAPI.Clusters = new ClustersAPI.Clusters(this._client);
+}
+
+Beta.Clusters = Clusters;
+
+export declare namespace Beta {
+ export {
+ Clusters as Clusters,
+ type Cluster as Cluster,
+ type ClusterCreateResponse as ClusterCreateResponse,
+ type ClusterUpdateResponse as ClusterUpdateResponse,
+ type ClusterListResponse as ClusterListResponse,
+ type ClusterDeleteResponse as ClusterDeleteResponse,
+ type ClusterListRegionsResponse as ClusterListRegionsResponse,
+ type ClusterCreateParams as ClusterCreateParams,
+ type ClusterUpdateParams as ClusterUpdateParams,
+ };
+}
diff --git a/src/resources/beta/clusters.ts b/src/resources/beta/clusters.ts
new file mode 100644
index 00000000..ffd56442
--- /dev/null
+++ b/src/resources/beta/clusters.ts
@@ -0,0 +1,3 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+export * from './clusters/index';
diff --git a/src/resources/beta/clusters/clusters.ts b/src/resources/beta/clusters/clusters.ts
new file mode 100644
index 00000000..ed6097a7
--- /dev/null
+++ b/src/resources/beta/clusters/clusters.ts
@@ -0,0 +1,275 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import { APIResource } from '../../../core/resource';
+import * as StorageAPI from './storage';
+import {
+ ClusterStorage,
+ Storage,
+ StorageCreateParams,
+ StorageCreateResponse,
+ StorageDeleteResponse,
+ StorageListResponse,
+ StorageUpdateParams,
+} from './storage';
+import { APIPromise } from '../../../core/api-promise';
+import { RequestOptions } from '../../../internal/request-options';
+import { path } from '../../../internal/utils/path';
+
+export class Clusters extends APIResource {
+ storage: StorageAPI.Storage = new StorageAPI.Storage(this._client);
+
+ /**
+ * Create GPU Cluster
+ */
+ create(body: ClusterCreateParams, options?: RequestOptions): APIPromise {
+ return this._client.post('/clusters', { body, ...options });
+ }
+
+ /**
+ * Get GPU cluster by cluster ID
+ */
+ retrieve(clusterID: string, options?: RequestOptions): APIPromise {
+ return this._client.get(path`/clusters/${clusterID}`, options);
+ }
+
+ /**
+ * Update a GPU Cluster.
+ */
+ update(
+ clusterID: string,
+ body: ClusterUpdateParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.put(path`/clusters/${clusterID}`, { body, ...options });
+ }
+
+ /**
+ * List all GPU clusters.
+ */
+ list(options?: RequestOptions): APIPromise {
+ return this._client.get('/clusters', options);
+ }
+
+ /**
+ * Delete GPU cluster by cluster ID
+ */
+ delete(clusterID: string, options?: RequestOptions): APIPromise {
+ return this._client.delete(path`/clusters/${clusterID}`, options);
+ }
+
+ /**
+ * List regions and corresponding supported driver versions
+ */
+ listRegions(options?: RequestOptions): APIPromise {
+ return this._client.get('/clusters/regions', options);
+ }
+}
+
+export interface Cluster {
+ cluster_id: string;
+
+ cluster_name: string;
+
+ cluster_type: 'KUBERNETES' | 'SLURM';
+
+ control_plane_nodes: Array;
+
+ driver_version: 'CUDA_12_5_555' | 'CUDA_12_6_560' | 'CUDA_12_6_565' | 'CUDA_12_8_570';
+
+ duration_hours: number;
+
+ gpu_type: 'H100_SXM' | 'H200_SXM' | 'RTX_6000_PCI' | 'L40_PCIE' | 'B200_SXM' | 'H100_SXM_INF';
+
+ gpu_worker_nodes: Array;
+
+ kube_config: string;
+
+ num_gpus: number;
+
+ region: string;
+
+ /**
+ * Current status of the GPU cluster.
+ */
+ status:
+ | 'WaitingForControlPlaneNodes'
+ | 'WaitingForDataPlaneNodes'
+ | 'WaitingForSubnet'
+ | 'WaitingForSharedVolume'
+ | 'InstallingDrivers'
+ | 'RunningAcceptanceTests'
+ | 'Paused'
+ | 'OnDemandComputePaused'
+ | 'Ready'
+ | 'Degraded'
+ | 'Deleting';
+
+ volumes: Array;
+}
+
+export namespace Cluster {
+ export interface ControlPlaneNode {
+ host_name: string;
+
+ memory_gib: number;
+
+ network: string;
+
+ node_id: string;
+
+ node_name: string;
+
+ num_cpu_cores: number;
+
+ status: string;
+ }
+
+ export interface GPUWorkerNode {
+ host_name: string;
+
+ memory_gib: number;
+
+ networks: Array;
+
+ node_id: string;
+
+ node_name: string;
+
+ num_cpu_cores: number;
+
+ num_gpus: number;
+
+ status: string;
+ }
+
+ export interface Volume {
+ size_tib: number;
+
+ status: string;
+
+ volume_id: string;
+
+ volume_name: string;
+ }
+}
+
+export interface ClusterCreateResponse {
+ cluster_id: string;
+}
+
+export interface ClusterUpdateResponse {
+ cluster_id: string;
+}
+
+export interface ClusterListResponse {
+ clusters: Array;
+}
+
+export interface ClusterDeleteResponse {
+ cluster_id: string;
+}
+
+export interface ClusterListRegionsResponse {
+ regions: Array;
+}
+
+export namespace ClusterListRegionsResponse {
+ export interface Region {
+ id: string;
+
+ availability_zones: Array;
+
+ driver_versions: Array;
+
+ name: string;
+ }
+}
+
+export interface ClusterCreateParams {
+ billing_type: 'RESERVED' | 'ON_DEMAND';
+
+ /**
+ * Name of the GPU cluster.
+ */
+ cluster_name: string;
+
+ /**
+ * NVIDIA driver version to use in the cluster.
+ */
+ driver_version: 'CUDA_12_5_555' | 'CUDA_12_6_560' | 'CUDA_12_6_565' | 'CUDA_12_8_570';
+
+ /**
+ * Duration in days to keep the cluster running.
+ */
+ duration_days: number;
+
+ /**
+ * Type of GPU to use in the cluster
+ */
+ gpu_type: 'H100_SXM' | 'H200_SXM' | 'RTX_6000_PCI' | 'L40_PCIE' | 'B200_SXM' | 'H100_SXM_INF';
+
+ /**
+ * Number of GPUs to allocate in the cluster. This must be multiple of 8. For
+ * example, 8, 16 or 24
+ */
+ num_gpus: number;
+
+ /**
+ * Region to create the GPU cluster in. Valid values are us-central-8 and
+ * us-central-4.
+ */
+ region: 'us-central-8' | 'us-central-4';
+
+ cluster_type?: 'KUBERNETES' | 'SLURM';
+
+ shared_volume?: ClusterCreateParams.SharedVolume;
+
+ volume_id?: string;
+}
+
+export namespace ClusterCreateParams {
+ export interface SharedVolume {
+ /**
+ * Region name. Usable regions can be found from `client.clusters.list_regions()`
+ */
+ region: string;
+
+ /**
+ * Volume size in whole tebibytes (TiB).
+ */
+ size_tib: number;
+
+ volume_name: string;
+ }
+}
+
+export interface ClusterUpdateParams {
+ cluster_type?: 'KUBERNETES' | 'SLURM';
+
+ num_gpus?: number;
+}
+
+Clusters.Storage = Storage;
+
+export declare namespace Clusters {
+ export {
+ type Cluster as Cluster,
+ type ClusterCreateResponse as ClusterCreateResponse,
+ type ClusterUpdateResponse as ClusterUpdateResponse,
+ type ClusterListResponse as ClusterListResponse,
+ type ClusterDeleteResponse as ClusterDeleteResponse,
+ type ClusterListRegionsResponse as ClusterListRegionsResponse,
+ type ClusterCreateParams as ClusterCreateParams,
+ type ClusterUpdateParams as ClusterUpdateParams,
+ };
+
+ export {
+ Storage as Storage,
+ type ClusterStorage as ClusterStorage,
+ type StorageCreateResponse as StorageCreateResponse,
+ type StorageListResponse as StorageListResponse,
+ type StorageDeleteResponse as StorageDeleteResponse,
+ type StorageCreateParams as StorageCreateParams,
+ type StorageUpdateParams as StorageUpdateParams,
+ };
+}
diff --git a/src/resources/beta/clusters/index.ts b/src/resources/beta/clusters/index.ts
new file mode 100644
index 00000000..0b17c652
--- /dev/null
+++ b/src/resources/beta/clusters/index.ts
@@ -0,0 +1,22 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+export {
+ Clusters,
+ type Cluster,
+ type ClusterCreateResponse,
+ type ClusterUpdateResponse,
+ type ClusterListResponse,
+ type ClusterDeleteResponse,
+ type ClusterListRegionsResponse,
+ type ClusterCreateParams,
+ type ClusterUpdateParams,
+} from './clusters';
+export {
+ Storage,
+ type ClusterStorage,
+ type StorageCreateResponse,
+ type StorageListResponse,
+ type StorageDeleteResponse,
+ type StorageCreateParams,
+ type StorageUpdateParams,
+} from './storage';
diff --git a/src/resources/beta/clusters/storage.ts b/src/resources/beta/clusters/storage.ts
new file mode 100644
index 00000000..732c1390
--- /dev/null
+++ b/src/resources/beta/clusters/storage.ts
@@ -0,0 +1,94 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import { APIResource } from '../../../core/resource';
+import { APIPromise } from '../../../core/api-promise';
+import { RequestOptions } from '../../../internal/request-options';
+import { path } from '../../../internal/utils/path';
+
+export class Storage extends APIResource {
+ /**
+ * Create a shared volume.
+ */
+ create(body: StorageCreateParams, options?: RequestOptions): APIPromise {
+ return this._client.post('/clusters/storages', { body, ...options });
+ }
+
+ /**
+ * Get shared volume by volume Id.
+ */
+ retrieve(volumeID: string, options?: RequestOptions): APIPromise {
+ return this._client.get(path`/clusters/storages/${volumeID}`, options);
+ }
+
+ /**
+ * Update a shared volume.
+ */
+ update(body: StorageUpdateParams, options?: RequestOptions): APIPromise {
+ return this._client.put('/clusters/storages', { body, ...options });
+ }
+
+ /**
+ * List all shared volumes.
+ */
+ list(options?: RequestOptions): APIPromise {
+ return this._client.get('/clusters/storages', options);
+ }
+
+ /**
+ * Delete shared volume by volume id.
+ */
+ delete(volumeID: string, options?: RequestOptions): APIPromise {
+ return this._client.delete(path`/clusters/storages/${volumeID}`, options);
+ }
+}
+
+export interface ClusterStorage {
+ size_tib: number;
+
+ volume_id: string;
+
+ volume_name: string;
+}
+
+export interface StorageCreateResponse {
+ volume_id: string;
+}
+
+export interface StorageListResponse {
+ volumes: Array;
+}
+
+export interface StorageDeleteResponse {
+ success: boolean;
+}
+
+export interface StorageCreateParams {
+ /**
+ * Region name. Usable regions can be found from `client.clusters.list_regions()`
+ */
+ region: string;
+
+ /**
+ * Volume size in whole tebibytes (TiB).
+ */
+ size_tib: number;
+
+ volume_name: string;
+}
+
+export interface StorageUpdateParams {
+ size_tib?: number;
+
+ volume_id?: string;
+}
+
+export declare namespace Storage {
+ export {
+ type ClusterStorage as ClusterStorage,
+ type StorageCreateResponse as StorageCreateResponse,
+ type StorageListResponse as StorageListResponse,
+ type StorageDeleteResponse as StorageDeleteResponse,
+ type StorageCreateParams as StorageCreateParams,
+ type StorageUpdateParams as StorageUpdateParams,
+ };
+}
diff --git a/src/resources/beta/index.ts b/src/resources/beta/index.ts
new file mode 100644
index 00000000..c65a8f3d
--- /dev/null
+++ b/src/resources/beta/index.ts
@@ -0,0 +1,14 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+export { Beta } from './beta';
+export {
+ Clusters,
+ type Cluster,
+ type ClusterCreateResponse,
+ type ClusterUpdateResponse,
+ type ClusterListResponse,
+ type ClusterDeleteResponse,
+ type ClusterListRegionsResponse,
+ type ClusterCreateParams,
+ type ClusterUpdateParams,
+} from './clusters/index';
diff --git a/src/resources/index.ts b/src/resources/index.ts
index 830916be..17bbf656 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -8,6 +8,7 @@ export {
type BatchListResponse,
type BatchCreateParams,
} from './batches';
+export { Beta } from './beta/beta';
export { Chat } from './chat/chat';
export {
CodeInterpreter,
diff --git a/src/version.ts b/src/version.ts
index 3f1d4329..c585ef4b 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '0.35.0'; // x-release-please-version
+export const VERSION = '0.35.1'; // x-release-please-version
diff --git a/tests/api-resources/beta/clusters/clusters.test.ts b/tests/api-resources/beta/clusters/clusters.test.ts
new file mode 100644
index 00000000..471bb239
--- /dev/null
+++ b/tests/api-resources/beta/clusters/clusters.test.ts
@@ -0,0 +1,103 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import Together from 'together-ai';
+
+const client = new Together({
+ apiKey: 'My API Key',
+ baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
+});
+
+describe('resource clusters', () => {
+ test('create: only required params', async () => {
+ const responsePromise = client.beta.clusters.create({
+ billing_type: 'RESERVED',
+ cluster_name: 'cluster_name',
+ driver_version: 'CUDA_12_5_555',
+ duration_days: 0,
+ gpu_type: 'H100_SXM',
+ num_gpus: 0,
+ region: 'us-central-8',
+ });
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ test('create: required and optional params', async () => {
+ const response = await client.beta.clusters.create({
+ billing_type: 'RESERVED',
+ cluster_name: 'cluster_name',
+ driver_version: 'CUDA_12_5_555',
+ duration_days: 0,
+ gpu_type: 'H100_SXM',
+ num_gpus: 0,
+ region: 'us-central-8',
+ cluster_type: 'KUBERNETES',
+ shared_volume: {
+ region: 'region',
+ size_tib: 0,
+ volume_name: 'volume_name',
+ },
+ volume_id: 'volume_id',
+ });
+ });
+
+ test('retrieve', async () => {
+ const responsePromise = client.beta.clusters.retrieve('cluster_id');
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ test('update', async () => {
+ const responsePromise = client.beta.clusters.update('cluster_id', {});
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ test('list', async () => {
+ const responsePromise = client.beta.clusters.list();
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ test('delete', async () => {
+ const responsePromise = client.beta.clusters.delete('cluster_id');
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ test('listRegions', async () => {
+ const responsePromise = client.beta.clusters.listRegions();
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+});
diff --git a/tests/api-resources/beta/clusters/storage.test.ts b/tests/api-resources/beta/clusters/storage.test.ts
new file mode 100644
index 00000000..a21ca711
--- /dev/null
+++ b/tests/api-resources/beta/clusters/storage.test.ts
@@ -0,0 +1,77 @@
+// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+import Together from 'together-ai';
+
+const client = new Together({
+ apiKey: 'My API Key',
+ baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010',
+});
+
+describe('resource storage', () => {
+ test('create: only required params', async () => {
+ const responsePromise = client.beta.clusters.storage.create({
+ region: 'region',
+ size_tib: 0,
+ volume_name: 'volume_name',
+ });
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ test('create: required and optional params', async () => {
+ const response = await client.beta.clusters.storage.create({
+ region: 'region',
+ size_tib: 0,
+ volume_name: 'volume_name',
+ });
+ });
+
+ test('retrieve', async () => {
+ const responsePromise = client.beta.clusters.storage.retrieve('volume_id');
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ test('update', async () => {
+ const responsePromise = client.beta.clusters.storage.update({});
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ test('list', async () => {
+ const responsePromise = client.beta.clusters.storage.list();
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+
+ test('delete', async () => {
+ const responsePromise = client.beta.clusters.storage.delete('volume_id');
+ const rawResponse = await responsePromise.asResponse();
+ expect(rawResponse).toBeInstanceOf(Response);
+ const response = await responsePromise;
+ expect(response).not.toBeInstanceOf(Response);
+ const dataAndResponse = await responsePromise.withResponse();
+ expect(dataAndResponse.data).toBe(response);
+ expect(dataAndResponse.response).toBe(rawResponse);
+ });
+});