@databricks/sdk-forecasting 0.0.0-dev → 0.1.0-dev.1

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.
@@ -0,0 +1,57 @@
1
+ // Code generated from API definition by Databricks SDK Generator. DO NOT EDIT.
2
+ import { defaultCredentials } from '@databricks/sdk-auth/credentials';
3
+ import { newFetchHttpClient } from '@databricks/sdk-core/http';
4
+ /** Creates a new HTTP client with the given options. */
5
+ export function newHttpClient(options) {
6
+ const opts = options ?? {};
7
+ // If an HTTP client is provided, use it as-is. Throw if other options are
8
+ // also set, since they would be silently ignored.
9
+ if (opts.httpClient !== undefined) {
10
+ if (opts.credentials !== undefined || opts.timeout !== undefined) {
11
+ throw new Error('httpClient cannot be combined with credentials or timeout');
12
+ }
13
+ return opts.httpClient;
14
+ }
15
+ const credentials = opts.credentials ?? defaultCredentials();
16
+ const base = newFetchHttpClient();
17
+ let client = new AuthHttpClient(base, credentials);
18
+ if (opts.timeout !== undefined) {
19
+ client = new TimeoutHttpClient(client, opts.timeout);
20
+ }
21
+ return client;
22
+ }
23
+ /** Wraps an HttpClient and adds authentication headers to requests. */
24
+ class AuthHttpClient {
25
+ base;
26
+ credentials;
27
+ constructor(base, credentials) {
28
+ this.base = base;
29
+ this.credentials = credentials;
30
+ }
31
+ async send(request) {
32
+ const authHeaders = await this.credentials.authHeaders();
33
+ // Do not modify the original request.
34
+ const headers = new Headers(request.headers);
35
+ for (const h of authHeaders) {
36
+ headers.set(h.key, h.value);
37
+ }
38
+ return this.base.send({ ...request, headers });
39
+ }
40
+ }
41
+ /** Wraps an HttpClient and applies a default timeout to requests. */
42
+ class TimeoutHttpClient {
43
+ base;
44
+ timeout;
45
+ constructor(base, timeout) {
46
+ this.base = base;
47
+ this.timeout = timeout;
48
+ }
49
+ async send(request) {
50
+ const timeoutSignal = AbortSignal.timeout(this.timeout);
51
+ const signal = request.signal !== undefined
52
+ ? AbortSignal.any([request.signal, timeoutSignal])
53
+ : timeoutSignal;
54
+ return this.base.send({ ...request, signal });
55
+ }
56
+ }
57
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/v1/transport.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAG/E,OAAO,EAAC,kBAAkB,EAAC,MAAM,kCAAkC,CAAC;AAMpE,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAG7D,wDAAwD;AACxD,MAAM,UAAU,aAAa,CAAC,OAAuB;IACnD,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;IAE3B,0EAA0E;IAC1E,kDAAkD;IAClD,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAC;IAE7D,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,IAAI,MAAM,GAAe,IAAI,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAE/D,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,uEAAuE;AACvE,MAAM,cAAc;IAEC;IACA;IAFnB,YACmB,IAAgB,EAChB,WAAwB;QADxB,SAAI,GAAJ,IAAI,CAAY;QAChB,gBAAW,GAAX,WAAW,CAAa;IACxC,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;QACzD,sCAAsC;QACtC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,GAAG,OAAO,EAAE,OAAO,EAAC,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,qEAAqE;AACrE,MAAM,iBAAiB;IAEF;IACA;IAFnB,YACmB,IAAgB,EAChB,OAAe;QADf,SAAI,GAAJ,IAAI,CAAY;QAChB,YAAO,GAAP,OAAO,CAAQ;IAC/B,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,KAAK,SAAS;YAC1B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAClD,CAAC,CAAC,aAAa,CAAC;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC,GAAG,OAAO,EAAE,MAAM,EAAC,CAAC,CAAC;IAC9C,CAAC;CACF"}
@@ -0,0 +1,22 @@
1
+ import type { Call } from '@databricks/sdk-core/api';
2
+ import type { HttpClient, HttpRequest } from '@databricks/sdk-core/http';
3
+ import type { Logger } from '@databricks/sdk-core/logger';
4
+ import type { CallOptions } from '@databricks/sdk-options/call';
5
+ import type { z } from 'zod';
6
+ export interface HttpCallOptions {
7
+ readonly request: HttpRequest;
8
+ readonly httpClient: HttpClient;
9
+ readonly logger: Logger;
10
+ }
11
+ /**
12
+ * Translates public CallOptions to the internal Options shape accepted by
13
+ * execute(). Even though the shapes match today, this isolates the public
14
+ * API from the executor's internal type so they can diverge.
15
+ */
16
+ export declare function executeCall(call: Call, options?: CallOptions): Promise<void>;
17
+ export declare function executeHttpCall(opts: HttpCallOptions): Promise<Uint8Array>;
18
+ export declare function buildHttpRequest(method: string, url: string, headers: Headers, signal?: AbortSignal, body?: string | ReadableStream<Uint8Array>): HttpRequest;
19
+ export declare function parseResponse<T>(body: Uint8Array, schema: z.ZodType<T>): T;
20
+ export declare function marshalRequest(data: unknown, schema: z.ZodType): string;
21
+ export declare function flattenQueryParams(prefix: string, value: unknown, params: URLSearchParams): void;
22
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/v1/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,IAAI,EAAU,MAAM,0BAA0B,CAAC;AAG5D,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAEZ,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,6BAA6B,CAAC;AACxD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAC;AAE9D,OAAO,KAAK,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAO3B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC,CASf;AA2BD,wBAAsB,eAAe,CACnC,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,UAAU,CAAC,CA2BrB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,GACzC,WAAW,CASb;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAI1E;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAEvE;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,eAAe,GACtB,IAAI,CAuBN"}
@@ -0,0 +1,113 @@
1
+ // Code generated from API definition by Databricks SDK Generator. DO NOT EDIT.
2
+ import { execute } from '@databricks/sdk-core/api';
3
+ import { ApiError } from '@databricks/sdk-core/apierror';
4
+ import JSONBig from 'json-bigint';
5
+ // JSON codec that preserves int64 precision. On the way in, large integer
6
+ // literals come back as bigint instead of being rounded to JS Number. On the
7
+ // way out, bigint values are emitted as raw JSON number digits.
8
+ const jsonBigint = JSONBig({ useNativeBigInt: true });
9
+ /**
10
+ * Translates public CallOptions to the internal Options shape accepted by
11
+ * execute(). Even though the shapes match today, this isolates the public
12
+ * API from the executor's internal type so they can diverge.
13
+ */
14
+ export async function executeCall(call, options) {
15
+ const opts = {
16
+ ...(options?.retrier !== undefined && { retrier: options.retrier }),
17
+ ...(options?.rateLimiter !== undefined && {
18
+ rateLimiter: options.rateLimiter,
19
+ }),
20
+ ...(options?.timeout !== undefined && { timeout: options.timeout }),
21
+ };
22
+ return execute(options?.signal, call, opts);
23
+ }
24
+ async function readAll(body) {
25
+ if (body === null) {
26
+ return new Uint8Array(0);
27
+ }
28
+ const reader = body.getReader();
29
+ const chunks = [];
30
+ for (;;) {
31
+ const { done, value } = await reader.read();
32
+ if (done) {
33
+ break;
34
+ }
35
+ chunks.push(value);
36
+ }
37
+ const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);
38
+ const result = new Uint8Array(totalLength);
39
+ let offset = 0;
40
+ for (const chunk of chunks) {
41
+ result.set(chunk, offset);
42
+ offset += chunk.length;
43
+ }
44
+ return result;
45
+ }
46
+ export async function executeHttpCall(opts) {
47
+ opts.logger.debug('HTTP request', {
48
+ method: opts.request.method,
49
+ url: opts.request.url,
50
+ });
51
+ let resp;
52
+ try {
53
+ resp = await opts.httpClient.send(opts.request);
54
+ }
55
+ catch (e) {
56
+ opts.logger.debug('HTTP request failed');
57
+ throw e;
58
+ }
59
+ const body = await readAll(resp.body);
60
+ opts.logger.debug('HTTP response', {
61
+ statusCode: resp.statusCode,
62
+ body: new TextDecoder().decode(body),
63
+ });
64
+ const apiErr = ApiError.fromHttpError(resp.statusCode, resp.headers, body);
65
+ if (apiErr !== undefined) {
66
+ throw apiErr;
67
+ }
68
+ return body;
69
+ }
70
+ export function buildHttpRequest(method, url, headers, signal, body) {
71
+ const req = { url, method, headers };
72
+ if (body !== undefined) {
73
+ req.body = body;
74
+ }
75
+ if (signal !== undefined) {
76
+ req.signal = signal;
77
+ }
78
+ return req;
79
+ }
80
+ export function parseResponse(body, schema) {
81
+ const text = new TextDecoder().decode(body);
82
+ const parsed = jsonBigint.parse(text);
83
+ return schema.parse(parsed);
84
+ }
85
+ export function marshalRequest(data, schema) {
86
+ return jsonBigint.stringify(schema.parse(data));
87
+ }
88
+ export function flattenQueryParams(prefix, value, params) {
89
+ if (value === null || value === undefined) {
90
+ return;
91
+ }
92
+ if (Array.isArray(value)) {
93
+ // arrays of objects are not yet supported
94
+ for (const item of value) {
95
+ params.append(prefix, String(item));
96
+ }
97
+ }
98
+ else if (typeof value === 'object') {
99
+ for (const [key, val] of Object.entries(value)) {
100
+ flattenQueryParams(`${prefix}.${key}`, val, params);
101
+ }
102
+ }
103
+ else if (typeof value === 'string' ||
104
+ typeof value === 'number' ||
105
+ typeof value === 'boolean' ||
106
+ typeof value === 'bigint') {
107
+ params.append(prefix, String(value));
108
+ }
109
+ else {
110
+ throw new Error(`Unsupported query parameter type: ${typeof value}`);
111
+ }
112
+ }
113
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/v1/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,41 @@
1
1
  {
2
2
  "name": "@databricks/sdk-forecasting",
3
- "version": "0.0.0-dev",
4
- "description": "Bootstrap placeholder; real contents in a later release.",
5
- "main": "index.js",
6
- "license": "Apache-2.0"
3
+ "version": "0.1.0-dev.1",
4
+ "description": "",
5
+ "type": "module",
6
+ "exports": {
7
+ "./v1": {
8
+ "types": "./dist/v1/index.d.ts",
9
+ "import": "./dist/v1/index.js"
10
+ }
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "src",
15
+ "LICENSE"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc -b",
19
+ "lint": "eslint src --ext .ts",
20
+ "lint:fix": "eslint src --ext .ts --fix",
21
+ "format": "prettier --write \"src/**/*.ts\"",
22
+ "format:check": "prettier --check \"src/**/*.ts\"",
23
+ "typecheck": "tsc --noEmit",
24
+ "clean": "rm -rf dist tsconfig.tsbuildinfo",
25
+ "test": "echo 'no tests'",
26
+ "test:browser": "echo 'no tests'"
27
+ },
28
+ "author": "Databricks",
29
+ "license": "Apache-2.0",
30
+ "dependencies": {
31
+ "@databricks/sdk-auth": ">=0.1.0-dev.2 <1.0.0",
32
+ "@databricks/sdk-core": ">=0.1.0-dev.3 <1.0.0",
33
+ "@databricks/sdk-options": ">=0.1.0-dev.2 <1.0.0",
34
+ "@js-temporal/polyfill": "^0.5.0",
35
+ "json-bigint": "^1.0.0",
36
+ "zod": "^4.3.6"
37
+ },
38
+ "engines": {
39
+ "node": ">=22.0.0"
40
+ }
7
41
  }
@@ -0,0 +1,225 @@
1
+ // Code generated from API definition by Databricks SDK Generator. DO NOT EDIT.
2
+
3
+ import {VERSION as AUTH_VERSION} from '@databricks/sdk-auth';
4
+ import type {Call} from '@databricks/sdk-core/api';
5
+ import {retryOn} from '@databricks/sdk-core/api';
6
+ import {createDefault} from '@databricks/sdk-core/clientinfo';
7
+ import type {Logger} from '@databricks/sdk-core/logger';
8
+ import {NoOpLogger} from '@databricks/sdk-core/logger';
9
+ import type {CallOptions} from '@databricks/sdk-options/call';
10
+ import type {ClientOptions} from '@databricks/sdk-options/client';
11
+ import type {HttpClient} from '@databricks/sdk-core/http';
12
+ import {newHttpClient} from './transport';
13
+ import {
14
+ buildHttpRequest,
15
+ executeCall,
16
+ executeHttpCall,
17
+ marshalRequest,
18
+ parseResponse,
19
+ } from './utils';
20
+ import pkgJson from '../../package.json' with {type: 'json'};
21
+ import type {
22
+ CreateForecastingExperimentRequest,
23
+ CreateForecastingExperimentResponse,
24
+ ForecastingExperiment,
25
+ GetForecastingExperimentRequest,
26
+ } from './model';
27
+ import {
28
+ ForecastingExperiment_State,
29
+ marshalCreateForecastingExperimentRequestSchema,
30
+ unmarshalCreateForecastingExperimentResponseSchema,
31
+ unmarshalForecastingExperimentSchema,
32
+ } from './model';
33
+
34
+ // Package identity segment for this client to be used in the User-Agent header.
35
+ const PACKAGE_SEGMENT = {
36
+ key: 'sdk-js-' + pkgJson.name.replace(/^@[^/]+\/sdk-/, ''),
37
+ value: pkgJson.version,
38
+ };
39
+
40
+ class StillRunningError extends Error {}
41
+
42
+ export class ForecastingClient {
43
+ private readonly host: string;
44
+ // Workspace ID used to route workspace-level calls on unified hosts (SPOG).
45
+ // When set, workspace-level methods send X-Databricks-Org-Id on every
46
+ // request.
47
+ private readonly workspaceId: string | undefined;
48
+ private readonly httpClient: HttpClient;
49
+ private readonly logger: Logger;
50
+ // User-Agent header value. Composed once at construction from
51
+ // createDefault() merged with this package's identity and the active
52
+ // credential's name.
53
+ private readonly userAgent: string;
54
+
55
+ constructor(options: ClientOptions) {
56
+ if (options.host === undefined) {
57
+ throw new Error('Host is required.');
58
+ }
59
+ this.host = options.host.replace(/\/$/, '');
60
+ this.workspaceId = options.workspaceId;
61
+ this.logger = options.logger ?? new NoOpLogger();
62
+ const info = createDefault()
63
+ .with(PACKAGE_SEGMENT)
64
+ .with({key: 'sdk-js-auth', value: AUTH_VERSION})
65
+ .with({key: 'auth', value: options.credentials?.name() ?? 'default'});
66
+ this.userAgent = info.toString();
67
+ this.httpClient = newHttpClient(options);
68
+ }
69
+
70
+ /** Creates a serverless forecasting experiment. Returns the experiment ID. */
71
+ async createForecastingExperiment(
72
+ req: CreateForecastingExperimentRequest,
73
+ options?: CallOptions
74
+ ): Promise<CreateForecastingExperimentResponse> {
75
+ const url = `${this.host}/api/2.0/automl/create-forecasting-experiment`;
76
+ const body = marshalRequest(
77
+ req,
78
+ marshalCreateForecastingExperimentRequestSchema
79
+ );
80
+ let resp: CreateForecastingExperimentResponse | undefined;
81
+ const call: Call = async (callSignal?: AbortSignal): Promise<void> => {
82
+ const headers = new Headers({'Content-Type': 'application/json'});
83
+ if (this.workspaceId !== undefined) {
84
+ headers.set('X-Databricks-Org-Id', this.workspaceId);
85
+ }
86
+ headers.set('User-Agent', this.userAgent);
87
+ const httpReq = buildHttpRequest('POST', url, headers, callSignal, body);
88
+ const respBody = await executeHttpCall({
89
+ request: httpReq,
90
+ httpClient: this.httpClient,
91
+ logger: this.logger,
92
+ });
93
+ resp = parseResponse(
94
+ respBody,
95
+ unmarshalCreateForecastingExperimentResponseSchema
96
+ );
97
+ };
98
+ await executeCall(call, options);
99
+ if (resp === undefined) {
100
+ throw new Error('API call completed without a result.');
101
+ }
102
+ return resp;
103
+ }
104
+
105
+ async createForecastingExperimentWaiter(
106
+ req: CreateForecastingExperimentRequest,
107
+ options?: CallOptions
108
+ ): Promise<CreateForecastingExperimentWaiter> {
109
+ const resp = await this.createForecastingExperiment(req, options);
110
+ if (resp.experimentId === undefined) {
111
+ throw new Error(
112
+ 'response field experimentId required for polling is missing'
113
+ );
114
+ }
115
+ return new CreateForecastingExperimentWaiter(this, resp.experimentId);
116
+ }
117
+
118
+ /** Public RPC to get forecasting experiment */
119
+ async getForecastingExperiment(
120
+ req: GetForecastingExperimentRequest,
121
+ options?: CallOptions
122
+ ): Promise<ForecastingExperiment> {
123
+ const url = `${this.host}/api/2.0/automl/get-forecasting-experiment/${req.experimentId ?? ''}`;
124
+ let resp: ForecastingExperiment | undefined;
125
+ const call: Call = async (callSignal?: AbortSignal): Promise<void> => {
126
+ const headers = new Headers();
127
+ if (this.workspaceId !== undefined) {
128
+ headers.set('X-Databricks-Org-Id', this.workspaceId);
129
+ }
130
+ headers.set('User-Agent', this.userAgent);
131
+ const httpReq = buildHttpRequest('GET', url, headers, callSignal);
132
+ const respBody = await executeHttpCall({
133
+ request: httpReq,
134
+ httpClient: this.httpClient,
135
+ logger: this.logger,
136
+ });
137
+ resp = parseResponse(respBody, unmarshalForecastingExperimentSchema);
138
+ };
139
+ await executeCall(call, options);
140
+ if (resp === undefined) {
141
+ throw new Error('API call completed without a result.');
142
+ }
143
+ return resp;
144
+ }
145
+ }
146
+
147
+ export class CreateForecastingExperimentWaiter {
148
+ constructor(
149
+ private readonly client: ForecastingClient,
150
+ readonly experimentId: string
151
+ ) {}
152
+
153
+ /**
154
+ * Polls until the operation reaches a terminal state.
155
+ *
156
+ * Throws if a failure state is reached.
157
+ */
158
+ async wait(options?: CallOptions): Promise<ForecastingExperiment> {
159
+ let result: ForecastingExperiment | undefined;
160
+
161
+ const call: Call = async (callSignal?: AbortSignal): Promise<void> => {
162
+ const pollResp = await this.client.getForecastingExperiment(
163
+ {
164
+ experimentId: this.experimentId,
165
+ },
166
+ {...options, ...(callSignal !== undefined && {signal: callSignal})}
167
+ );
168
+
169
+ const status = pollResp.state;
170
+ if (status === undefined) {
171
+ throw new Error('response missing required status field');
172
+ }
173
+
174
+ switch (status) {
175
+ case ForecastingExperiment_State.SUCCEEDED:
176
+ result = pollResp;
177
+ return;
178
+ case ForecastingExperiment_State.FAILED:
179
+ case ForecastingExperiment_State.CANCELLED: {
180
+ const msg = '(no message)';
181
+ throw new Error(`terminal state ${status}: ${msg}`);
182
+ }
183
+ default:
184
+ throw new StillRunningError();
185
+ }
186
+ };
187
+
188
+ const retryOptions: CallOptions = {
189
+ ...(options?.signal !== undefined && {signal: options.signal}),
190
+ retrier: () =>
191
+ retryOn({}, (err: Error) => {
192
+ return err instanceof StillRunningError;
193
+ }),
194
+ };
195
+ await executeCall(call, retryOptions);
196
+ if (result === undefined) {
197
+ throw new Error('API call completed without a result.');
198
+ }
199
+ return result;
200
+ }
201
+
202
+ /** Checks whether the operation has reached a terminal state. */
203
+ async done(options?: CallOptions): Promise<boolean> {
204
+ const pollResp = await this.client.getForecastingExperiment(
205
+ {
206
+ experimentId: this.experimentId,
207
+ },
208
+ options
209
+ );
210
+
211
+ const status = pollResp.state;
212
+ if (status === undefined) {
213
+ throw new Error('response missing required status field');
214
+ }
215
+
216
+ switch (status) {
217
+ case ForecastingExperiment_State.SUCCEEDED:
218
+ case ForecastingExperiment_State.FAILED:
219
+ case ForecastingExperiment_State.CANCELLED:
220
+ return true;
221
+ default:
222
+ return false;
223
+ }
224
+ }
225
+ }
@@ -0,0 +1,12 @@
1
+ // Code generated from API definition by Databricks SDK Generator. DO NOT EDIT.
2
+
3
+ export {ForecastingClient, CreateForecastingExperimentWaiter} from './client';
4
+
5
+ export {ForecastingExperiment_State} from './model';
6
+
7
+ export type {
8
+ CreateForecastingExperimentRequest,
9
+ CreateForecastingExperimentResponse,
10
+ ForecastingExperiment,
11
+ GetForecastingExperimentRequest,
12
+ } from './model';
@@ -0,0 +1,146 @@
1
+ // Code generated from API definition by Databricks SDK Generator. DO NOT EDIT.
2
+
3
+ import {z} from 'zod';
4
+
5
+ // eslint-disable-next-line @typescript-eslint/naming-convention -- Proto-style nested enum name.
6
+ export enum ForecastingExperiment_State {
7
+ /** The forecasting experiment is pending and has not started yet. */
8
+ PENDING = 'PENDING',
9
+ /** The forecasting experiment is currently running. */
10
+ RUNNING = 'RUNNING',
11
+ /** The forecasting experiment has completed successfully. */
12
+ SUCCEEDED = 'SUCCEEDED',
13
+ /** The forecasting experiment has failed. */
14
+ FAILED = 'FAILED',
15
+ /** The forecasting experiment has been cancelled. */
16
+ CANCELLED = 'CANCELLED',
17
+ }
18
+
19
+ export interface CreateForecastingExperimentRequest {
20
+ /** The fully qualified path of a Unity Catalog table, formatted as catalog_name.schema_name.table_name, used as training data for the forecasting model. */
21
+ trainDataPath?: string | undefined;
22
+ /** The column in the input training table used as the prediction target for model training. The values in this column are used as the ground truth for model training. */
23
+ targetColumn?: string | undefined;
24
+ /** The column in the input training table that represents each row's timestamp. */
25
+ timeColumn?: string | undefined;
26
+ /**
27
+ * The time interval between consecutive rows in the time series data.
28
+ * Possible values include: '1 second', '1 minute', '5 minutes', '10 minutes', '15 minutes', '30 minutes', 'Hourly', 'Daily', 'Weekly', 'Monthly', 'Quarterly', 'Yearly'.
29
+ */
30
+ forecastGranularity?: string | undefined;
31
+ /** The number of time steps into the future to make predictions, calculated as a multiple of forecast_granularity. This value represents how far ahead the model should forecast. */
32
+ forecastHorizon?: bigint | undefined;
33
+ /** The evaluation metric used to optimize the forecasting model. */
34
+ primaryMetric?: string | undefined;
35
+ /** List of frameworks to include for model tuning. Possible values are 'Prophet', 'ARIMA', 'DeepAR'. An empty list includes all supported frameworks. */
36
+ trainingFrameworks?: string[] | undefined;
37
+ /** The path in the workspace to store the created experiment. */
38
+ experimentPath?: string | undefined;
39
+ /** The maximum duration for the experiment in minutes. The experiment stops automatically if it exceeds this limit. */
40
+ maxRuntime?: bigint | undefined;
41
+ /** // The column in the training table used for custom data splits. Values must be 'train', 'validate', or 'test'. */
42
+ splitColumn?: string | undefined;
43
+ /** The column in the training table used to customize weights for each time series. */
44
+ customWeightsColumn?: string | undefined;
45
+ /** The fully qualified path of a Unity Catalog model, formatted as catalog_name.schema_name.model_name, used to store the best model. */
46
+ registerTo?: string | undefined;
47
+ /** The region code(s) to automatically add holiday features. Currently supports only one region. */
48
+ holidayRegions?: string[] | undefined;
49
+ /** The column in the training table used to group the dataset for predicting individual time series. */
50
+ timeseriesIdentifierColumns?: string[] | undefined;
51
+ /** The fully qualified path of a Unity Catalog table, formatted as catalog_name.schema_name.table_name, used to store predictions. */
52
+ predictionDataPath?: string | undefined;
53
+ /**
54
+ * Specifies the list of feature columns to include in model training. These columns must exist
55
+ * in the training data and be of type string, numerical, or boolean. If not specified, no additional
56
+ * features will be included.
57
+ * Note: Certain columns are automatically handled:
58
+ * - Automatically excluded: split_column, target_column, custom_weights_column.
59
+ * - Automatically included: time_column.
60
+ */
61
+ includeFeatures?: string[] | undefined;
62
+ /** The fully qualified path of a Unity Catalog table, formatted as catalog_name.schema_name.table_name, used to store future feature data for predictions. */
63
+ futureFeatureDataPath?: string | undefined;
64
+ }
65
+
66
+ export interface CreateForecastingExperimentResponse {
67
+ /** The unique ID of the created forecasting experiment */
68
+ experimentId?: string | undefined;
69
+ }
70
+
71
+ /** Represents a forecasting experiment with its unique identifier, URL, and state. */
72
+ export interface ForecastingExperiment {
73
+ /** The unique ID for the forecasting experiment. */
74
+ experimentId?: string | undefined;
75
+ /** The URL to the forecasting experiment page. */
76
+ experimentPageUrl?: string | undefined;
77
+ /** The current state of the forecasting experiment. */
78
+ state?: ForecastingExperiment_State | undefined;
79
+ }
80
+
81
+ export interface GetForecastingExperimentRequest {
82
+ /** The unique ID of a forecasting experiment */
83
+ experimentId?: string | undefined;
84
+ }
85
+
86
+ export const unmarshalCreateForecastingExperimentResponseSchema: z.ZodType<CreateForecastingExperimentResponse> =
87
+ z
88
+ .object({
89
+ experiment_id: z.string().optional(),
90
+ })
91
+ .transform(d => ({
92
+ experimentId: d.experiment_id,
93
+ }));
94
+
95
+ export const unmarshalForecastingExperimentSchema: z.ZodType<ForecastingExperiment> =
96
+ z
97
+ .object({
98
+ experiment_id: z.string().optional(),
99
+ experiment_page_url: z.string().optional(),
100
+ state: z.enum(ForecastingExperiment_State).optional(),
101
+ })
102
+ .transform(d => ({
103
+ experimentId: d.experiment_id,
104
+ experimentPageUrl: d.experiment_page_url,
105
+ state: d.state,
106
+ }));
107
+
108
+ export const marshalCreateForecastingExperimentRequestSchema: z.ZodType = z
109
+ .object({
110
+ trainDataPath: z.string().optional(),
111
+ targetColumn: z.string().optional(),
112
+ timeColumn: z.string().optional(),
113
+ forecastGranularity: z.string().optional(),
114
+ forecastHorizon: z.bigint().optional(),
115
+ primaryMetric: z.string().optional(),
116
+ trainingFrameworks: z.array(z.string()).optional(),
117
+ experimentPath: z.string().optional(),
118
+ maxRuntime: z.bigint().optional(),
119
+ splitColumn: z.string().optional(),
120
+ customWeightsColumn: z.string().optional(),
121
+ registerTo: z.string().optional(),
122
+ holidayRegions: z.array(z.string()).optional(),
123
+ timeseriesIdentifierColumns: z.array(z.string()).optional(),
124
+ predictionDataPath: z.string().optional(),
125
+ includeFeatures: z.array(z.string()).optional(),
126
+ futureFeatureDataPath: z.string().optional(),
127
+ })
128
+ .transform(d => ({
129
+ train_data_path: d.trainDataPath,
130
+ target_column: d.targetColumn,
131
+ time_column: d.timeColumn,
132
+ forecast_granularity: d.forecastGranularity,
133
+ forecast_horizon: d.forecastHorizon,
134
+ primary_metric: d.primaryMetric,
135
+ training_frameworks: d.trainingFrameworks,
136
+ experiment_path: d.experimentPath,
137
+ max_runtime: d.maxRuntime,
138
+ split_column: d.splitColumn,
139
+ custom_weights_column: d.customWeightsColumn,
140
+ register_to: d.registerTo,
141
+ holiday_regions: d.holidayRegions,
142
+ timeseries_identifier_columns: d.timeseriesIdentifierColumns,
143
+ prediction_data_path: d.predictionDataPath,
144
+ include_features: d.includeFeatures,
145
+ future_feature_data_path: d.futureFeatureDataPath,
146
+ }));