@gradio/client 0.18.0 → 0.19.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @gradio/client
2
2
 
3
+ ## 0.19.1
4
+
5
+ ### Fixes
6
+
7
+ - [#8272](https://github.com/gradio-app/gradio/pull/8272) [`fbf4edd`](https://github.com/gradio-app/gradio/commit/fbf4edde7c896cdf4c903463e44c31ed96111b3c) - ensure client works for private spaces. Thanks @pngwn!
8
+
9
+ ## 0.19.0
10
+
11
+ ### Features
12
+
13
+ - [#8110](https://github.com/gradio-app/gradio/pull/8110) [`5436031`](https://github.com/gradio-app/gradio/commit/5436031f92c1596282eb64e1e74d555f279e9697) - Render decorator 2. Thanks @aliabid94!
14
+ - [#8197](https://github.com/gradio-app/gradio/pull/8197) [`e09b4e8`](https://github.com/gradio-app/gradio/commit/e09b4e8216b970bc1b142a0f08e7d190b954eb35) - Add support for passing keyword args to `data` in JS client. Thanks @hannahblair!
15
+
16
+ ### Fixes
17
+
18
+ - [#8252](https://github.com/gradio-app/gradio/pull/8252) [`22df61a`](https://github.com/gradio-app/gradio/commit/22df61a26adf8023f6dd49c051979990e8d3879a) - Client node fix. Thanks @pngwn!
19
+
3
20
  ## 0.18.0
4
21
 
5
22
  ### Features
package/README.md CHANGED
@@ -127,7 +127,11 @@ The `payload` argument is generally required but this depends on the API itself.
127
127
  import { Client } from "@gradio/client";
128
128
 
129
129
  const app = await Client.connect("user/space-name");
130
- const result = await app.predict("/predict", [1, "Hello", "friends"]);
130
+ const result = await app.predict("/predict", {
131
+ input: 1,
132
+ word_1: "Hello",
133
+ word_2: "friends"
134
+ });
131
135
  ```
132
136
 
133
137
  #### `submit`
@@ -138,7 +142,7 @@ The `submit` method provides a more flexible way to call an API endpoint, provid
138
142
  import { Client } from "@gradio/client";
139
143
 
140
144
  const app = await Client.connect("user/space-name");
141
- const submission = app.submit("/predict", payload);
145
+ const submission = app.submit("/predict", { name: "Chewbacca" });
142
146
  ```
143
147
 
144
148
  The `submit` method accepts the same [`endpoint`](#endpoint) and [`payload`](#payload) arguments as `predict`.
@@ -183,7 +187,7 @@ import { Client } from "@gradio/client";
183
187
 
184
188
  const app = await Client.connect("user/space-name");
185
189
  const submission = app
186
- .submit("/predict", payload)
190
+ .submit("/predict", { name: "Chewbacca" })
187
191
  .on("data", (data) => console.log(data))
188
192
  .on("status", (status: Status) => console.log(status));
189
193
  ```
@@ -198,7 +202,7 @@ import { Client } from "@gradio/client";
198
202
  const app = await Client.connect("user/space-name");
199
203
  const handle_data = (data) => console.log(data);
200
204
 
201
- const submission = app.submit("/predict", payload).on("data", handle_data);
205
+ const submission = app.submit("/predict", { name: "Chewbacca" }).on("data", handle_data);
202
206
 
203
207
  // later
204
208
  submission.off("/predict", handle_data);
@@ -214,7 +218,7 @@ import { Client } from "@gradio/client";
214
218
  const app = await Client.connect("user/space-name");
215
219
  const handle_data = (data) => console.log(data);
216
220
 
217
- const submission = app.submit("/predict", payload).on("data", handle_data);
221
+ const submission = app.submit("/predict", { name: "Chewbacca" }).on("data", handle_data);
218
222
 
219
223
  // later
220
224
  submission.destroy();
@@ -229,7 +233,7 @@ import { Client } from "@gradio/client";
229
233
 
230
234
  const app = await Client.connect("user/space-name");
231
235
  const submission = app
232
- .submit("/predict", payload)
236
+ .submit("/predict", { name: "Chewbacca" })
233
237
  .on("data", (data) => console.log(data));
234
238
 
235
239
  // later
package/dist/client.d.ts CHANGED
@@ -21,15 +21,15 @@ export declare class Client {
21
21
  unclosed_events: Set<string>;
22
22
  heartbeat_event: EventSource | null;
23
23
  fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
24
- stream_factory(url: URL): EventSource | null;
24
+ stream(url: URL): Promise<EventSource>;
25
25
  view_api: () => Promise<ApiInfo<JsApiData>>;
26
26
  upload_files: (root_url: string, files: (Blob | File)[], upload_id?: string) => Promise<UploadResponse>;
27
27
  upload: (file_data: FileData[], root_url: string, upload_id?: string, max_file_size?: number) => Promise<(FileData | null)[] | null>;
28
28
  handle_blob: (endpoint: string, data: unknown[], endpoint_info: EndpointInfo<ApiData | JsApiData>) => Promise<unknown[]>;
29
29
  post_data: (url: string, body: unknown, additional_headers?: any) => Promise<unknown[]>;
30
- submit: (endpoint: string | number, data: unknown[], event_data?: unknown, trigger_id?: number | null) => SubmitReturn;
31
- predict: (endpoint: string | number, data?: unknown[], event_data?: unknown) => Promise<unknown>;
32
- open_stream: () => void;
30
+ submit: (endpoint: string | number, data: unknown[] | Record<string, unknown>, event_data?: unknown, trigger_id?: number | null) => SubmitReturn;
31
+ predict: (endpoint: string | number, data: unknown[] | Record<string, unknown>, event_data?: unknown) => Promise<SubmitReturn>;
32
+ open_stream: () => Promise<void>;
33
33
  private resolve_config;
34
34
  constructor(app_reference: string, options?: ClientOptions);
35
35
  private init;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -22,4 +22,26 @@ export declare function handle_message(data: any, last_status: Status["stage"]):
22
22
  data?: any;
23
23
  status?: Status;
24
24
  };
25
+ /**
26
+ * Maps the provided `data` to the parameters defined by the `/info` endpoint response.
27
+ * This allows us to support both positional and keyword arguments passed to the client
28
+ * and ensures that all parameters are either directly provided or have default values assigned.
29
+ *
30
+ * @param {unknown[] | Record<string, unknown>} data - The input data for the function,
31
+ * which can be either an array of values for positional arguments or an object
32
+ * with key-value pairs for keyword arguments.
33
+ * @param {JsApiData[]} parameters - Array of parameter descriptions retrieved from the
34
+ * `/info` endpoint.
35
+ *
36
+ * @returns {unknown[]} - Returns an array of resolved data where each element corresponds
37
+ * to the expected parameter from the API. The `parameter_default` value is used where
38
+ * a value is not provided for a parameter, and optional parameters without defaults are
39
+ * set to `undefined`.
40
+ *
41
+ * @throws {Error} - Throws an error:
42
+ * - If more arguments are provided than are defined in the parameters.
43
+ * * - If no parameter value is provided for a required parameter and no default value is defined.
44
+ * - If an argument is provided that does not match any defined parameter.
45
+ */
46
+ export declare const map_data_to_params: (data: unknown[] | Record<string, unknown>, api_info: ApiInfo<JsApiData | ApiData>) => unknown[];
25
47
  //# sourceMappingURL=api_info.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api_info.d.ts","sourceRoot":"","sources":["../../src/helpers/api_info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGpE,eAAO,MAAM,aAAa,QAAqB,CAAC;AAChD,eAAO,MAAM,eAAe,QAAwB,CAAC;AAErD,wBAAsB,gBAAgB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,MAAM,EAAE,GACvB,OAAO,CAAC;IACV,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,IAAI,GAAG,KAAK,CAAC;IAC1B,aAAa,EAAE,OAAO,GAAG,QAAQ,CAAC;CAClC,CAAC,CA4CD;AAED,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,SAAS,CAAC,CAiDpB;AAED,wBAAgB,QAAQ,CACvB,IAAI,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,QAAQ,GAAG,WAAW,GACpC,MAAM,GAAG,SAAS,CAiCpB;AAED,wBAAgB,eAAe,CAC9B,IAAI,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EACxC,UAAU,EAAE,MAAM,GAChB,MAAM,CASR;AAED,wBAAgB,cAAc,CAC7B,IAAI,EAAE,GAAG,EACT,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,GAC1B;IACF,IAAI,EACD,MAAM,GACN,MAAM,GACN,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,KAAK,GACL,MAAM,GACN,WAAW,GACX,kBAAkB,CAAC;IACtB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAgHA"}
1
+ {"version":3,"file":"api_info.d.ts","sourceRoot":"","sources":["../../src/helpers/api_info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGpE,eAAO,MAAM,aAAa,QAAqB,CAAC;AAChD,eAAO,MAAM,eAAe,QAAwB,CAAC;AAErD,wBAAsB,gBAAgB,CACrC,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,MAAM,EAAE,GACvB,OAAO,CAAC;IACV,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,IAAI,GAAG,KAAK,CAAC;IAC1B,aAAa,EAAE,OAAO,GAAG,QAAQ,CAAC;CAClC,CAAC,CA4CD;AAED,wBAAgB,kBAAkB,CACjC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC7B,OAAO,CAAC,SAAS,CAAC,CAiFpB;AAED,wBAAgB,QAAQ,CACvB,IAAI,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,QAAQ,GAAG,WAAW,GACpC,MAAM,GAAG,SAAS,CAiCpB;AAED,wBAAgB,eAAe,CAC9B,IAAI,EAAE;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EACxC,UAAU,EAAE,MAAM,GAChB,MAAM,CASR;AAED,wBAAgB,cAAc,CAC7B,IAAI,EAAE,GAAG,EACT,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,GAC1B;IACF,IAAI,EACD,MAAM,GACN,MAAM,GACN,QAAQ,GACR,UAAU,GACV,YAAY,GACZ,KAAK,GACL,MAAM,GACN,WAAW,GACX,kBAAkB,CAAC;IACtB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAgHA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,kBAAkB,SACxB,OAAO,EAAE,GAAG,OAAO,MAAM,EAAE,OAAO,CAAC,YAC/B,QAAQ,SAAS,GAAG,OAAO,CAAC,KACpC,OAAO,EA4CT,CAAC"}
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ var __publicField = (obj, key, value) => {
5
5
  return value;
6
6
  };
7
7
  var fn = new Intl.Collator(0, { numeric: 1 }).compare;
8
- function semiver$1(a, b, bool) {
8
+ function semiver(a, b, bool) {
9
9
  a = a.split(".");
10
10
  b = b.split(".");
11
11
  return fn(a[0], b[0]) || fn(a[1], b[1]) || (b[2] = b.slice(2).join("."), bool = /[.-]/.test(a[2] = a.slice(2).join(".")), bool == /[.-]/.test(b[2]) ? fn(a[2], b[2]) : bool ? -1 : 1);
@@ -150,19 +150,46 @@ function transform_api_info(api_info, config, api_map) {
150
150
  transformed_info[category] = {};
151
151
  Object.entries(api_info[category]).forEach(
152
152
  ([endpoint, { parameters, returns }]) => {
153
- const dependencyIndex = config.dependencies.findIndex((dep) => dep.api_name === endpoint) || api_map[endpoint.replace("/", "")] || -1;
153
+ var _a, _b;
154
+ const dependencyIndex = config.dependencies.findIndex(
155
+ (dep) => dep.api_name === endpoint || dep.api_name === endpoint.replace("/", "")
156
+ ) || api_map[endpoint.replace("/", "")] || -1;
154
157
  const dependencyTypes = dependencyIndex !== -1 ? config.dependencies[dependencyIndex].types : { continuous: false, generator: false };
158
+ if (dependencyIndex !== -1 && ((_b = (_a = config.dependencies[dependencyIndex]) == null ? void 0 : _a.inputs) == null ? void 0 : _b.length) !== parameters.length) {
159
+ const components = config.dependencies[dependencyIndex].inputs.map(
160
+ (input) => {
161
+ var _a2;
162
+ return (_a2 = config.components.find((c) => c.id === input)) == null ? void 0 : _a2.type;
163
+ }
164
+ );
165
+ try {
166
+ components.forEach((comp, idx) => {
167
+ if (comp === "state") {
168
+ const new_param = {
169
+ component: "state",
170
+ example: null,
171
+ parameter_default: null,
172
+ parameter_has_default: true,
173
+ parameter_name: null,
174
+ hidden: true
175
+ };
176
+ parameters.splice(idx, 0, new_param);
177
+ }
178
+ });
179
+ } catch (e) {
180
+ }
181
+ }
155
182
  const transform_type = (data, component, serializer, signature_type) => ({
156
183
  ...data,
157
- description: get_description(data.type, serializer),
158
- type: get_type(data.type, component, serializer, signature_type) || ""
184
+ description: get_description(data == null ? void 0 : data.type, serializer),
185
+ type: get_type(data == null ? void 0 : data.type, component, serializer, signature_type) || ""
159
186
  });
160
187
  transformed_info[category][endpoint] = {
161
188
  parameters: parameters.map(
162
- (p) => transform_type(p, p.component, p.serializer, "parameter")
189
+ (p) => transform_type(p, p == null ? void 0 : p.component, p == null ? void 0 : p.serializer, "parameter")
163
190
  ),
164
191
  returns: returns.map(
165
- (r) => transform_type(r, r.component, r.serializer, "return")
192
+ (r) => transform_type(r, r == null ? void 0 : r.component, r == null ? void 0 : r.serializer, "return")
166
193
  ),
167
194
  type: dependencyTypes
168
195
  };
@@ -173,7 +200,7 @@ function transform_api_info(api_info, config, api_map) {
173
200
  return transformed_info;
174
201
  }
175
202
  function get_type(type, component, serializer, signature_type) {
176
- switch (type.type) {
203
+ switch (type == null ? void 0 : type.type) {
177
204
  case "string":
178
205
  return "string";
179
206
  case "boolean":
@@ -204,7 +231,7 @@ function get_description(type, serializer) {
204
231
  } else if (serializer === "FileSerializable") {
205
232
  return "array of files or single file";
206
233
  }
207
- return type.description;
234
+ return type == null ? void 0 : type.description;
208
235
  }
209
236
  function handle_message(data, last_status) {
210
237
  const queue = true;
@@ -317,6 +344,45 @@ function handle_message(data, last_status) {
317
344
  }
318
345
  return { type: "none", status: { stage: "error", queue } };
319
346
  }
347
+ const map_data_to_params = (data, api_info) => {
348
+ const parameters = Object.values(api_info.named_endpoints).flatMap(
349
+ (values) => values.parameters
350
+ );
351
+ if (Array.isArray(data)) {
352
+ if (data.length > parameters.length) {
353
+ console.warn("Too many arguments provided for the endpoint.");
354
+ }
355
+ return data;
356
+ }
357
+ const resolved_data = [];
358
+ const provided_keys = Object.keys(data);
359
+ parameters.forEach((param, index) => {
360
+ if (data.hasOwnProperty(param.parameter_name)) {
361
+ resolved_data[index] = data[param.parameter_name];
362
+ } else if (param.parameter_has_default) {
363
+ resolved_data[index] = param.parameter_default;
364
+ } else {
365
+ throw new Error(
366
+ `No value provided for required parameter: ${param.parameter_name}`
367
+ );
368
+ }
369
+ });
370
+ provided_keys.forEach((key) => {
371
+ if (!parameters.some((param) => param.parameter_name === key)) {
372
+ throw new Error(
373
+ `Parameter \`${key}\` is not a valid keyword argument. Please refer to the API for usage.`
374
+ );
375
+ }
376
+ });
377
+ resolved_data.forEach((value, idx) => {
378
+ if (value === void 0 && !parameters[idx].parameter_has_default) {
379
+ throw new Error(
380
+ `No value provided for required parameter: ${parameters[idx].parameter_name}`
381
+ );
382
+ }
383
+ });
384
+ return resolved_data;
385
+ };
320
386
  async function view_api() {
321
387
  if (this.api_info)
322
388
  return this.api_info;
@@ -331,7 +397,7 @@ async function view_api() {
331
397
  }
332
398
  try {
333
399
  let response;
334
- if (semiver$1((config == null ? void 0 : config.version) || "2.0.0", "3.30") < 0) {
400
+ if (semiver((config == null ? void 0 : config.version) || "2.0.0", "3.30") < 0) {
335
401
  response = await this.fetch(SPACE_FETCHER_URL, {
336
402
  method: "POST",
337
403
  body: JSON.stringify({
@@ -638,7 +704,7 @@ async function predict(endpoint, data) {
638
704
  );
639
705
  }
640
706
  return new Promise(async (resolve, reject) => {
641
- const app = this.submit(endpoint, data || []);
707
+ const app = this.submit(endpoint, data);
642
708
  let result;
643
709
  app.on("data", (d) => {
644
710
  if (status_complete) {
@@ -885,7 +951,7 @@ function get_space_reference(url) {
885
951
  return match[1];
886
952
  }
887
953
  }
888
- function open_stream() {
954
+ async function open_stream() {
889
955
  let {
890
956
  event_callbacks,
891
957
  unclosed_events,
@@ -906,7 +972,7 @@ function open_stream() {
906
972
  if (jwt) {
907
973
  url.searchParams.set("__sign", jwt);
908
974
  }
909
- stream = this.stream_factory(url);
975
+ stream = await this.stream(url);
910
976
  if (!stream) {
911
977
  console.warn("Cannot connect to SSE endpoint: " + url.toString());
912
978
  return;
@@ -1074,6 +1140,7 @@ function submit(endpoint, data, event_data, trigger_id) {
1074
1140
  api_map,
1075
1141
  config
1076
1142
  );
1143
+ let resolved_data = map_data_to_params(data, api_info);
1077
1144
  let websocket;
1078
1145
  let stream;
1079
1146
  let protocol = config.protocol ?? "ws";
@@ -1126,7 +1193,7 @@ function submit(endpoint, data, event_data, trigger_id) {
1126
1193
  );
1127
1194
  }
1128
1195
  }
1129
- this.handle_blob(config.root, data, endpoint_info).then(
1196
+ this.handle_blob(config.root, resolved_data, endpoint_info).then(
1130
1197
  async (_payload) => {
1131
1198
  var _a;
1132
1199
  payload = {
@@ -1323,7 +1390,7 @@ function submit(endpoint, data, event_data, trigger_id) {
1323
1390
  if (this.jwt) {
1324
1391
  url.searchParams.set("__sign", this.jwt);
1325
1392
  }
1326
- stream = this.stream_factory(url);
1393
+ stream = await this.stream(url);
1327
1394
  if (!stream) {
1328
1395
  return Promise.reject(
1329
1396
  new Error("Cannot connect to SSE endpoint: " + url.toString())
@@ -1436,7 +1503,7 @@ function submit(endpoint, data, event_data, trigger_id) {
1436
1503
  headers
1437
1504
  );
1438
1505
  });
1439
- post_data_promise.then(([response, status]) => {
1506
+ post_data_promise.then(async ([response, status]) => {
1440
1507
  if (status === 503) {
1441
1508
  fire_event({
1442
1509
  type: "status",
@@ -1520,6 +1587,14 @@ function submit(endpoint, data, event_data, trigger_id) {
1520
1587
  endpoint: _endpoint,
1521
1588
  fn_index
1522
1589
  });
1590
+ if (data2.render_config) {
1591
+ fire_event({
1592
+ type: "render",
1593
+ data: data2.render_config,
1594
+ endpoint: _endpoint,
1595
+ fn_index
1596
+ });
1597
+ }
1523
1598
  if (complete) {
1524
1599
  fire_event({
1525
1600
  type: "status",
@@ -1566,7 +1641,7 @@ function submit(endpoint, data, event_data, trigger_id) {
1566
1641
  event_callbacks[event_id] = callback;
1567
1642
  unclosed_events.add(event_id);
1568
1643
  if (!stream_status.open) {
1569
- this.open_stream();
1644
+ await this.open_stream();
1570
1645
  }
1571
1646
  }
1572
1647
  });
@@ -1646,17 +1721,18 @@ class Client {
1646
1721
  fetch(input, init) {
1647
1722
  return fetch(input, init);
1648
1723
  }
1649
- stream_factory(url) {
1724
+ async stream(url) {
1650
1725
  if (typeof window === "undefined" || typeof EventSource === "undefined") {
1651
- import("eventsource").then((EventSourceModule) => {
1726
+ try {
1727
+ const EventSourceModule = await import("eventsource");
1652
1728
  return new EventSourceModule.default(url.toString());
1653
- }).catch(
1654
- (error) => console.error("Failed to load EventSource module:", error)
1655
- );
1729
+ } catch (error) {
1730
+ console.error("Failed to load EventSource module:", error);
1731
+ throw error;
1732
+ }
1656
1733
  } else {
1657
1734
  return new EventSource(url.toString());
1658
1735
  }
1659
- return null;
1660
1736
  }
1661
1737
  async init() {
1662
1738
  var _a;
@@ -1670,16 +1746,19 @@ class Client {
1670
1746
  if (config) {
1671
1747
  this.config = config;
1672
1748
  if (this.config && this.config.connect_heartbeat) {
1673
- const heartbeat_url = new URL(
1674
- `${this.config.root}/heartbeat/${this.session_hash}`
1675
- );
1676
- this.heartbeat_event = this.stream_factory(heartbeat_url);
1677
1749
  if (this.config.space_id && this.options.hf_token) {
1678
1750
  this.jwt = await get_jwt(
1679
1751
  this.config.space_id,
1680
1752
  this.options.hf_token
1681
1753
  );
1682
1754
  }
1755
+ const heartbeat_url = new URL(
1756
+ `${this.config.root}/heartbeat/${this.session_hash}`
1757
+ );
1758
+ if (this.jwt) {
1759
+ heartbeat_url.searchParams.set("jwt", this.jwt);
1760
+ }
1761
+ this.heartbeat_event = await this.stream(heartbeat_url);
1683
1762
  }
1684
1763
  }
1685
1764
  });
package/dist/types.d.ts CHANGED
@@ -2,6 +2,9 @@
2
2
  import { hardware_types } from "./helpers/spaces";
3
3
  export interface ApiData {
4
4
  label: string;
5
+ parameter_name: string;
6
+ parameter_default?: any;
7
+ parameter_has_default?: boolean;
5
8
  type: {
6
9
  type: any;
7
10
  description: string;
@@ -16,6 +19,9 @@ export interface ApiData {
16
19
  }
17
20
  export interface JsApiData {
18
21
  label: string;
22
+ parameter_name: string;
23
+ parameter_default?: any;
24
+ parameter_has_default?: boolean;
19
25
  type: string;
20
26
  description: string;
21
27
  component: string;
@@ -41,12 +47,13 @@ export interface BlobRef {
41
47
  blob: Blob | File | false;
42
48
  }
43
49
  export type DataType = string | Buffer | Record<string, any> | any[];
50
+ export type SubmitFunction = (endpoint: string | number, data: unknown[] | Record<string, unknown>, event_data?: unknown, trigger_id?: number | null) => SubmitReturn;
51
+ export type PredictFunction = (endpoint: string | number, data: unknown[] | Record<string, unknown>, event_data?: unknown) => Promise<SubmitReturn>;
44
52
  type event = <K extends EventType>(eventType: K, listener: EventListener<K>) => SubmitReturn;
45
- type predict = (endpoint: string | number, data?: unknown[], event_data?: unknown) => Promise<unknown>;
46
53
  export type client_return = {
47
54
  config: Config | undefined;
48
- predict: predict;
49
- submit: (endpoint: string | number, data: unknown[], event_data?: unknown, trigger_id?: number | null) => SubmitReturn;
55
+ predict: PredictFunction;
56
+ submit: SubmitFunction;
50
57
  component_server: (component_id: number, fn_name: string, data: unknown[]) => any;
51
58
  view_api: (_fetch: typeof fetch) => Promise<ApiInfo<JsApiData>>;
52
59
  };
@@ -165,11 +172,12 @@ export interface FileData {
165
172
  mime_type?: string;
166
173
  alt_text?: string;
167
174
  }
168
- export type EventType = "data" | "status" | "log";
175
+ export type EventType = "data" | "status" | "log" | "render";
169
176
  export interface EventMap {
170
177
  data: Payload;
171
178
  status: Status;
172
179
  log: LogMessage;
180
+ render: RenderMessage;
173
181
  }
174
182
  export type Event<K extends EventType> = {
175
183
  [P in K]: EventMap[P] & {
@@ -186,6 +194,13 @@ export interface LogMessage {
186
194
  log: string;
187
195
  level: "warning" | "info";
188
196
  }
197
+ export interface RenderMessage {
198
+ fn_index: number;
199
+ data: {
200
+ components: any[];
201
+ layout: any;
202
+ };
203
+ }
189
204
  export interface Status {
190
205
  queue: boolean;
191
206
  code?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { Client } from "../client";
2
2
  import type { SubmitReturn } from "../types";
3
- export declare function predict(this: Client, endpoint: string | number, data?: unknown[]): Promise<SubmitReturn>;
3
+ export declare function predict(this: Client, endpoint: string | number, data: unknown[] | Record<string, unknown>): Promise<SubmitReturn>;
4
4
  //# sourceMappingURL=predict.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"predict.d.ts","sourceRoot":"","sources":["../../src/utils/predict.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,UAAU,CAAC;AAEzD,wBAAsB,OAAO,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,IAAI,CAAC,EAAE,OAAO,EAAE,GACd,OAAO,CAAC,YAAY,CAAC,CAgDvB"}
1
+ {"version":3,"file":"predict.d.ts","sourceRoot":"","sources":["../../src/utils/predict.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,KAAK,EAAc,YAAY,EAAE,MAAM,UAAU,CAAC;AAEzD,wBAAsB,OAAO,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAAC,YAAY,CAAC,CAgDvB"}
@@ -1,5 +1,5 @@
1
1
  import type { Client } from "../client";
2
- export declare function open_stream(this: Client): void;
2
+ export declare function open_stream(this: Client): Promise<void>;
3
3
  export declare function close_stream(stream_status: {
4
4
  open: boolean;
5
5
  }, stream: EventSource | null): void;
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAkF9C;AAED,wBAAgB,YAAY,CAC3B,aAAa,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAChC,MAAM,EAAE,WAAW,GAAG,IAAI,GACxB,IAAI,CAKN;AAED,wBAAgB,iBAAiB,CAChC,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,EAC7C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,GACP,IAAI,CAcN;AAED,wBAAgB,UAAU,CACzB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GACxC,GAAG,CAML"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/utils/stream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkF7D;AAED,wBAAgB,YAAY,CAC3B,aAAa,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,EAChC,MAAM,EAAE,WAAW,GAAG,IAAI,GACxB,IAAI,CAKN;AAED,wBAAgB,iBAAiB,CAChC,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,EAC7C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,GACP,IAAI,CAcN;AAED,wBAAgB,UAAU,CACzB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,GACxC,GAAG,CAML"}
@@ -1,4 +1,4 @@
1
1
  import type { SubmitReturn } from "../types";
2
2
  import { Client } from "../client";
3
- export declare function submit(this: Client, endpoint: string | number, data: unknown[], event_data?: unknown, trigger_id?: number | null): SubmitReturn;
3
+ export declare function submit(this: Client, endpoint: string | number, data: unknown[] | Record<string, unknown>, event_data?: unknown, trigger_id?: number | null): SubmitReturn;
4
4
  //# sourceMappingURL=submit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/utils/submit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKX,YAAY,EAQZ,MAAM,UAAU,CAAC;AAOlB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,wBAAgB,MAAM,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,IAAI,EAAE,OAAO,EAAE,EACf,UAAU,CAAC,EAAE,OAAO,EACpB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,YAAY,CAynBd"}
1
+ {"version":3,"file":"submit.d.ts","sourceRoot":"","sources":["../../src/utils/submit.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKX,YAAY,EAQZ,MAAM,UAAU,CAAC;AAYlB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,wBAAgB,MAAM,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,MAAM,EACzB,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,UAAU,CAAC,EAAE,OAAO,EACpB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,YAAY,CAmoBd"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gradio/client",
3
- "version": "0.18.0",
3
+ "version": "0.19.1",
4
4
  "description": "Gradio API client",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/src/client.ts CHANGED
@@ -59,19 +59,18 @@ export class Client {
59
59
  return fetch(input, init);
60
60
  }
61
61
 
62
- stream_factory(url: URL): EventSource | null {
62
+ async stream(url: URL): Promise<EventSource> {
63
63
  if (typeof window === "undefined" || typeof EventSource === "undefined") {
64
- import("eventsource")
65
- .then((EventSourceModule) => {
66
- return new EventSourceModule.default(url.toString());
67
- })
68
- .catch((error) =>
69
- console.error("Failed to load EventSource module:", error)
70
- );
64
+ try {
65
+ const EventSourceModule = await import("eventsource");
66
+ return new EventSourceModule.default(url.toString()) as EventSource;
67
+ } catch (error) {
68
+ console.error("Failed to load EventSource module:", error);
69
+ throw error;
70
+ }
71
71
  } else {
72
72
  return new EventSource(url.toString());
73
73
  }
74
- return null;
75
74
  }
76
75
 
77
76
  view_api: () => Promise<ApiInfo<JsApiData>>;
@@ -98,16 +97,16 @@ export class Client {
98
97
  ) => Promise<unknown[]>;
99
98
  submit: (
100
99
  endpoint: string | number,
101
- data: unknown[],
100
+ data: unknown[] | Record<string, unknown>,
102
101
  event_data?: unknown,
103
102
  trigger_id?: number | null
104
103
  ) => SubmitReturn;
105
104
  predict: (
106
105
  endpoint: string | number,
107
- data?: unknown[],
106
+ data: unknown[] | Record<string, unknown>,
108
107
  event_data?: unknown
109
- ) => Promise<unknown>;
110
- open_stream: () => void;
108
+ ) => Promise<SubmitReturn>;
109
+ open_stream: () => Promise<void>;
111
110
  private resolve_config: (endpoint: string) => Promise<Config | undefined>;
112
111
  constructor(app_reference: string, options: ClientOptions = {}) {
113
112
  this.app_reference = app_reference;
@@ -140,18 +139,24 @@ export class Client {
140
139
  if (config) {
141
140
  this.config = config;
142
141
  if (this.config && this.config.connect_heartbeat) {
143
- // connect to the heartbeat endpoint via GET request
144
- const heartbeat_url = new URL(
145
- `${this.config.root}/heartbeat/${this.session_hash}`
146
- );
147
- this.heartbeat_event = this.stream_factory(heartbeat_url); // Just connect to the endpoint without parsing the response. Ref: https://github.com/gradio-app/gradio/pull/7974#discussion_r1557717540
148
-
149
142
  if (this.config.space_id && this.options.hf_token) {
150
143
  this.jwt = await get_jwt(
151
144
  this.config.space_id,
152
145
  this.options.hf_token
153
146
  );
154
147
  }
148
+
149
+ // connect to the heartbeat endpoint via GET request
150
+ const heartbeat_url = new URL(
151
+ `${this.config.root}/heartbeat/${this.session_hash}`
152
+ );
153
+
154
+ // if the jwt is available, add it to the query params
155
+ if (this.jwt) {
156
+ heartbeat_url.searchParams.set("jwt", this.jwt);
157
+ }
158
+
159
+ this.heartbeat_event = await this.stream(heartbeat_url); // Just connect to the endpoint without parsing the response. Ref: https://github.com/gradio-app/gradio/pull/7974#discussion_r1557717540
155
160
  }
156
161
  }
157
162
  });
@@ -77,7 +77,11 @@ export function transform_api_info(
77
77
  Object.entries(api_info[category]).forEach(
78
78
  ([endpoint, { parameters, returns }]) => {
79
79
  const dependencyIndex =
80
- config.dependencies.findIndex((dep) => dep.api_name === endpoint) ||
80
+ config.dependencies.findIndex(
81
+ (dep) =>
82
+ dep.api_name === endpoint ||
83
+ dep.api_name === endpoint.replace("/", "")
84
+ ) ||
81
85
  api_map[endpoint.replace("/", "")] ||
82
86
  -1;
83
87
 
@@ -86,6 +90,34 @@ export function transform_api_info(
86
90
  ? config.dependencies[dependencyIndex].types
87
91
  : { continuous: false, generator: false };
88
92
 
93
+ if (
94
+ dependencyIndex !== -1 &&
95
+ config.dependencies[dependencyIndex]?.inputs?.length !==
96
+ parameters.length
97
+ ) {
98
+ const components = config.dependencies[dependencyIndex].inputs.map(
99
+ (input) => config.components.find((c) => c.id === input)?.type
100
+ );
101
+
102
+ try {
103
+ components.forEach((comp, idx) => {
104
+ if (comp === "state") {
105
+ const new_param = {
106
+ component: "state",
107
+ example: null,
108
+ parameter_default: null,
109
+ parameter_has_default: true,
110
+ parameter_name: null,
111
+ hidden: true
112
+ };
113
+
114
+ // @ts-ignore
115
+ parameters.splice(idx, 0, new_param);
116
+ }
117
+ });
118
+ } catch (e) {}
119
+ }
120
+
89
121
  const transform_type = (
90
122
  data: ApiData,
91
123
  component: string,
@@ -93,17 +125,17 @@ export function transform_api_info(
93
125
  signature_type: "return" | "parameter"
94
126
  ): JsApiData => ({
95
127
  ...data,
96
- description: get_description(data.type, serializer),
128
+ description: get_description(data?.type, serializer),
97
129
  type:
98
- get_type(data.type, component, serializer, signature_type) || ""
130
+ get_type(data?.type, component, serializer, signature_type) || ""
99
131
  });
100
132
 
101
133
  transformed_info[category][endpoint] = {
102
134
  parameters: parameters.map((p: ApiData) =>
103
- transform_type(p, p.component, p.serializer, "parameter")
135
+ transform_type(p, p?.component, p?.serializer, "parameter")
104
136
  ),
105
137
  returns: returns.map((r: ApiData) =>
106
- transform_type(r, r.component, r.serializer, "return")
138
+ transform_type(r, r?.component, r?.serializer, "return")
107
139
  ),
108
140
  type: dependencyTypes
109
141
  };
@@ -121,7 +153,7 @@ export function get_type(
121
153
  serializer: string,
122
154
  signature_type: "return" | "parameter"
123
155
  ): string | undefined {
124
- switch (type.type) {
156
+ switch (type?.type) {
125
157
  case "string":
126
158
  return "string";
127
159
  case "boolean":
@@ -166,7 +198,7 @@ export function get_description(
166
198
  } else if (serializer === "FileSerializable") {
167
199
  return "array of files or single file";
168
200
  }
169
- return type.description;
201
+ return type?.description;
170
202
  }
171
203
 
172
204
  export function handle_message(
@@ -298,3 +330,74 @@ export function handle_message(
298
330
 
299
331
  return { type: "none", status: { stage: "error", queue } };
300
332
  }
333
+
334
+ /**
335
+ * Maps the provided `data` to the parameters defined by the `/info` endpoint response.
336
+ * This allows us to support both positional and keyword arguments passed to the client
337
+ * and ensures that all parameters are either directly provided or have default values assigned.
338
+ *
339
+ * @param {unknown[] | Record<string, unknown>} data - The input data for the function,
340
+ * which can be either an array of values for positional arguments or an object
341
+ * with key-value pairs for keyword arguments.
342
+ * @param {JsApiData[]} parameters - Array of parameter descriptions retrieved from the
343
+ * `/info` endpoint.
344
+ *
345
+ * @returns {unknown[]} - Returns an array of resolved data where each element corresponds
346
+ * to the expected parameter from the API. The `parameter_default` value is used where
347
+ * a value is not provided for a parameter, and optional parameters without defaults are
348
+ * set to `undefined`.
349
+ *
350
+ * @throws {Error} - Throws an error:
351
+ * - If more arguments are provided than are defined in the parameters.
352
+ * * - If no parameter value is provided for a required parameter and no default value is defined.
353
+ * - If an argument is provided that does not match any defined parameter.
354
+ */
355
+
356
+ export const map_data_to_params = (
357
+ data: unknown[] | Record<string, unknown>,
358
+ api_info: ApiInfo<JsApiData | ApiData>
359
+ ): unknown[] => {
360
+ const parameters = Object.values(api_info.named_endpoints).flatMap(
361
+ (values) => values.parameters
362
+ );
363
+
364
+ if (Array.isArray(data)) {
365
+ if (data.length > parameters.length) {
366
+ console.warn("Too many arguments provided for the endpoint.");
367
+ }
368
+ return data;
369
+ }
370
+
371
+ const resolved_data: unknown[] = [];
372
+ const provided_keys = Object.keys(data);
373
+
374
+ parameters.forEach((param, index) => {
375
+ if (data.hasOwnProperty(param.parameter_name)) {
376
+ resolved_data[index] = data[param.parameter_name];
377
+ } else if (param.parameter_has_default) {
378
+ resolved_data[index] = param.parameter_default;
379
+ } else {
380
+ throw new Error(
381
+ `No value provided for required parameter: ${param.parameter_name}`
382
+ );
383
+ }
384
+ });
385
+
386
+ provided_keys.forEach((key) => {
387
+ if (!parameters.some((param) => param.parameter_name === key)) {
388
+ throw new Error(
389
+ `Parameter \`${key}\` is not a valid keyword argument. Please refer to the API for usage.`
390
+ );
391
+ }
392
+ });
393
+
394
+ resolved_data.forEach((value, idx) => {
395
+ if (value === undefined && !parameters[idx].parameter_has_default) {
396
+ throw new Error(
397
+ `No value provided for required parameter: ${parameters[idx].parameter_name}`
398
+ );
399
+ }
400
+ });
401
+
402
+ return resolved_data;
403
+ };
@@ -4,9 +4,11 @@ import {
4
4
  handle_message,
5
5
  get_description,
6
6
  get_type,
7
- process_endpoint
7
+ process_endpoint,
8
+ map_data_to_params
8
9
  } from "../helpers/api_info";
9
10
  import { initialise_server } from "./server";
11
+ import { transformed_api_info } from "./test_data";
10
12
 
11
13
  const server = initialise_server();
12
14
 
@@ -454,3 +456,112 @@ describe("process_endpoint", () => {
454
456
  expect(result).toEqual(expected);
455
457
  });
456
458
  });
459
+
460
+ describe("map_data_params", () => {
461
+ let test_data = transformed_api_info;
462
+
463
+ test_data.named_endpoints["/predict"].parameters = [
464
+ {
465
+ parameter_name: "param1",
466
+ parameter_has_default: false,
467
+ label: "",
468
+ component: "",
469
+ serializer: "",
470
+ python_type: {
471
+ type: "",
472
+ description: ""
473
+ },
474
+ type: {
475
+ type: "",
476
+ description: ""
477
+ }
478
+ },
479
+ {
480
+ parameter_name: "param2",
481
+ parameter_has_default: false,
482
+ label: "",
483
+ type: {
484
+ type: "",
485
+ description: ""
486
+ },
487
+ component: "",
488
+ serializer: "",
489
+ python_type: {
490
+ type: "",
491
+ description: ""
492
+ }
493
+ },
494
+ {
495
+ parameter_name: "param3",
496
+ parameter_has_default: true,
497
+ parameter_default: 3,
498
+ label: "",
499
+ type: {
500
+ type: "",
501
+ description: ""
502
+ },
503
+ component: "",
504
+ serializer: "",
505
+ python_type: {
506
+ type: "",
507
+ description: ""
508
+ }
509
+ }
510
+ ];
511
+
512
+ it("should return an array of data when data is an array", () => {
513
+ const data = [1, 2];
514
+
515
+ const result = map_data_to_params(data, transformed_api_info);
516
+ expect(result).toEqual(data);
517
+ });
518
+
519
+ it("should return the data when too many arguments are provided for the endpoint", () => {
520
+ const data = [1, 2, 3, 4];
521
+
522
+ const result = map_data_to_params(data, transformed_api_info);
523
+ expect(result).toEqual(data);
524
+ });
525
+
526
+ it("should return an array of resolved data when data is an object", () => {
527
+ const data = {
528
+ param1: 1,
529
+ param2: 2,
530
+ param3: 3
531
+ };
532
+
533
+ const result = map_data_to_params(data, transformed_api_info);
534
+ expect(result).toEqual([1, 2, 3]);
535
+ });
536
+
537
+ it("should use the default value when a keyword argument is not provided and has a default value", () => {
538
+ const data = {
539
+ param1: 1,
540
+ param2: 2
541
+ };
542
+
543
+ const result = map_data_to_params(data, transformed_api_info);
544
+ expect(result).toEqual([1, 2, 3]);
545
+ });
546
+
547
+ it("should throw an error when an invalid keyword argument is provided", () => {
548
+ const data = {
549
+ param1: 1,
550
+ param2: 2,
551
+ param3: 3,
552
+ param4: 4
553
+ };
554
+
555
+ expect(() => map_data_to_params(data, transformed_api_info)).toThrowError(
556
+ "Parameter `param4` is not a valid keyword argument. Please refer to the API for usage."
557
+ );
558
+ });
559
+
560
+ it("should throw an error when no value is provided for a required parameter", () => {
561
+ const data = {};
562
+
563
+ expect(() => map_data_to_params(data, transformed_api_info)).toThrowError(
564
+ "No value provided for required parameter: param1"
565
+ );
566
+ });
567
+ });
@@ -1,11 +1,13 @@
1
1
  import { vi } from "vitest";
2
2
 
3
- Object.defineProperty(window, "EventSource", {
4
- writable: true,
5
- value: vi.fn().mockImplementation(() => ({
6
- close: vi.fn(() => {}),
7
- addEventListener: vi.fn(),
8
- onmessage: vi.fn((_event: MessageEvent) => {}),
9
- onerror: vi.fn((_event: Event) => {})
10
- }))
11
- });
3
+ if (process.env.TEST_MODE !== "node") {
4
+ Object.defineProperty(window, "EventSource", {
5
+ writable: true,
6
+ value: vi.fn().mockImplementation(() => ({
7
+ close: vi.fn(() => {}),
8
+ addEventListener: vi.fn(),
9
+ onmessage: vi.fn((_event: MessageEvent) => {}),
10
+ onerror: vi.fn((_event: Event) => {})
11
+ }))
12
+ });
13
+ }
@@ -1,11 +1,21 @@
1
- import { vi } from "vitest";
1
+ import { vi, type Mock } from "vitest";
2
2
  import { Client } from "../client";
3
3
  import { initialise_server } from "./server";
4
4
 
5
- import { describe, it, expect, afterEach } from "vitest";
5
+ import {
6
+ describe,
7
+ it,
8
+ expect,
9
+ afterEach,
10
+ beforeAll,
11
+ afterAll,
12
+ beforeEach
13
+ } from "vitest";
6
14
  import "./mock_eventsource.ts";
15
+ import NodeEventSource from "eventsource";
7
16
 
8
17
  const server = initialise_server();
18
+ const IS_NODE = process.env.TEST_MODE === "node";
9
19
 
10
20
  beforeAll(() => server.listen());
11
21
  afterEach(() => server.resetHandlers());
@@ -13,12 +23,14 @@ afterAll(() => server.close());
13
23
 
14
24
  describe("open_stream", () => {
15
25
  let mock_eventsource: any;
16
- let app: any;
26
+ let app: Client;
17
27
 
18
28
  beforeEach(async () => {
19
29
  app = await Client.connect("hmb/hello_world");
20
- app.stream_factory = vi.fn().mockImplementation(() => {
21
- mock_eventsource = new EventSource("");
30
+ app.stream = vi.fn().mockImplementation(() => {
31
+ mock_eventsource = IS_NODE
32
+ ? new NodeEventSource("")
33
+ : new EventSource("");
22
34
  return mock_eventsource;
23
35
  });
24
36
  });
@@ -30,21 +42,21 @@ describe("open_stream", () => {
30
42
  it("should throw an error if config is not defined", () => {
31
43
  app.config = undefined;
32
44
 
33
- expect(() => {
34
- app.open_stream();
35
- }).toThrow("Could not resolve app config");
45
+ expect(async () => {
46
+ await app.open_stream();
47
+ }).rejects.toThrow("Could not resolve app config");
36
48
  });
37
49
 
38
50
  it("should connect to the SSE endpoint and handle messages", async () => {
39
- app.open_stream();
51
+ await app.open_stream();
40
52
 
41
- const eventsource_mock_call = app.stream_factory.mock.calls[0][0];
53
+ const eventsource_mock_call = (app.stream as Mock).mock.calls[0][0];
42
54
 
43
55
  expect(eventsource_mock_call.href).toMatch(
44
56
  /https:\/\/hmb-hello-world\.hf\.space\/queue\/data\?session_hash/
45
57
  );
46
58
 
47
- expect(app.stream_factory).toHaveBeenCalledWith(eventsource_mock_call);
59
+ expect(app.stream).toHaveBeenCalledWith(eventsource_mock_call);
48
60
 
49
61
  const onMessageCallback = mock_eventsource.onmessage;
50
62
  const onErrorCallback = mock_eventsource.onerror;
package/src/types.ts CHANGED
@@ -4,6 +4,9 @@ import { hardware_types } from "./helpers/spaces";
4
4
 
5
5
  export interface ApiData {
6
6
  label: string;
7
+ parameter_name: string;
8
+ parameter_default?: any;
9
+ parameter_has_default?: boolean;
7
10
  type: {
8
11
  type: any;
9
12
  description: string;
@@ -16,6 +19,9 @@ export interface ApiData {
16
19
 
17
20
  export interface JsApiData {
18
21
  label: string;
22
+ parameter_name: string;
23
+ parameter_default?: any;
24
+ parameter_has_default?: boolean;
19
25
  type: string;
20
26
  description: string;
21
27
  component: string;
@@ -43,6 +49,21 @@ export interface BlobRef {
43
49
 
44
50
  export type DataType = string | Buffer | Record<string, any> | any[];
45
51
 
52
+ // Function Signature Types
53
+
54
+ export type SubmitFunction = (
55
+ endpoint: string | number,
56
+ data: unknown[] | Record<string, unknown>,
57
+ event_data?: unknown,
58
+ trigger_id?: number | null
59
+ ) => SubmitReturn;
60
+
61
+ export type PredictFunction = (
62
+ endpoint: string | number,
63
+ data: unknown[] | Record<string, unknown>,
64
+ event_data?: unknown
65
+ ) => Promise<SubmitReturn>;
66
+
46
67
  // Event and Submission Types
47
68
 
48
69
  type event = <K extends EventType>(
@@ -50,21 +71,10 @@ type event = <K extends EventType>(
50
71
  listener: EventListener<K>
51
72
  ) => SubmitReturn;
52
73
 
53
- type predict = (
54
- endpoint: string | number,
55
- data?: unknown[],
56
- event_data?: unknown
57
- ) => Promise<unknown>;
58
-
59
74
  export type client_return = {
60
75
  config: Config | undefined;
61
- predict: predict;
62
- submit: (
63
- endpoint: string | number,
64
- data: unknown[],
65
- event_data?: unknown,
66
- trigger_id?: number | null
67
- ) => SubmitReturn;
76
+ predict: PredictFunction;
77
+ submit: SubmitFunction;
68
78
  component_server: (
69
79
  component_id: number,
70
80
  fn_name: string,
@@ -220,12 +230,13 @@ export interface FileData {
220
230
 
221
231
  // Event and Listener Types
222
232
 
223
- export type EventType = "data" | "status" | "log";
233
+ export type EventType = "data" | "status" | "log" | "render";
224
234
 
225
235
  export interface EventMap {
226
236
  data: Payload;
227
237
  status: Status;
228
238
  log: LogMessage;
239
+ render: RenderMessage;
229
240
  }
230
241
 
231
242
  export type Event<K extends EventType> = {
@@ -239,6 +250,13 @@ export interface LogMessage {
239
250
  log: string;
240
251
  level: "warning" | "info";
241
252
  }
253
+ export interface RenderMessage {
254
+ fn_index: number;
255
+ data: {
256
+ components: any[];
257
+ layout: any;
258
+ };
259
+ }
242
260
 
243
261
  export interface Status {
244
262
  queue: boolean;
@@ -4,7 +4,7 @@ import type { Dependency, SubmitReturn } from "../types";
4
4
  export async function predict(
5
5
  this: Client,
6
6
  endpoint: string | number,
7
- data?: unknown[]
7
+ data: unknown[] | Record<string, unknown>
8
8
  ): Promise<SubmitReturn> {
9
9
  let data_returned = false;
10
10
  let status_complete = false;
@@ -28,7 +28,7 @@ export async function predict(
28
28
  }
29
29
 
30
30
  return new Promise(async (resolve, reject) => {
31
- const app = this.submit(endpoint, data || []);
31
+ const app = this.submit(endpoint, data);
32
32
  let result: unknown;
33
33
 
34
34
  app
@@ -1,7 +1,7 @@
1
1
  import { BROKEN_CONNECTION_MSG } from "../constants";
2
2
  import type { Client } from "../client";
3
3
 
4
- export function open_stream(this: Client): void {
4
+ export async function open_stream(this: Client): Promise<void> {
5
5
  let {
6
6
  event_callbacks,
7
7
  unclosed_events,
@@ -28,7 +28,7 @@ export function open_stream(this: Client): void {
28
28
  url.searchParams.set("__sign", jwt);
29
29
  }
30
30
 
31
- stream = this.stream_factory(url);
31
+ stream = await this.stream(url);
32
32
 
33
33
  if (!stream) {
34
34
  console.warn("Cannot connect to SSE endpoint: " + url.toString());
@@ -16,7 +16,12 @@ import type {
16
16
 
17
17
  import { skip_queue, post_message } from "../helpers/data";
18
18
  import { resolve_root } from "../helpers/init_helpers";
19
- import { handle_message, process_endpoint } from "../helpers/api_info";
19
+ import {
20
+ handle_message,
21
+ map_data_to_params,
22
+ process_endpoint
23
+ } from "../helpers/api_info";
24
+ import semiver from "semiver";
20
25
  import { BROKEN_CONNECTION_MSG, QUEUE_FULL_MSG } from "../constants";
21
26
  import { apply_diff_stream, close_stream } from "./stream";
22
27
  import { Client } from "../client";
@@ -24,7 +29,7 @@ import { Client } from "../client";
24
29
  export function submit(
25
30
  this: Client,
26
31
  endpoint: string | number,
27
- data: unknown[],
32
+ data: unknown[] | Record<string, unknown>,
28
33
  event_data?: unknown,
29
34
  trigger_id?: number | null
30
35
  ): SubmitReturn {
@@ -55,6 +60,8 @@ export function submit(
55
60
  config
56
61
  );
57
62
 
63
+ let resolved_data = map_data_to_params(data, api_info);
64
+
58
65
  let websocket: WebSocket;
59
66
  let stream: EventSource | null;
60
67
  let protocol = config.protocol ?? "ws";
@@ -155,7 +162,7 @@ export function submit(
155
162
  }
156
163
  }
157
164
 
158
- this.handle_blob(config.root, data, endpoint_info).then(
165
+ this.handle_blob(config.root, resolved_data, endpoint_info).then(
159
166
  async (_payload) => {
160
167
  payload = {
161
168
  data: _payload || [],
@@ -372,7 +379,7 @@ export function submit(
372
379
  url.searchParams.set("__sign", this.jwt);
373
380
  }
374
381
 
375
- stream = this.stream_factory(url);
382
+ stream = await this.stream(url);
376
383
 
377
384
  if (!stream) {
378
385
  return Promise.reject(
@@ -503,7 +510,7 @@ export function submit(
503
510
  headers
504
511
  );
505
512
  });
506
- post_data_promise.then(([response, status]: any) => {
513
+ post_data_promise.then(async ([response, status]: any) => {
507
514
  if (status === 503) {
508
515
  fire_event({
509
516
  type: "status",
@@ -594,6 +601,14 @@ export function submit(
594
601
  endpoint: _endpoint,
595
602
  fn_index
596
603
  });
604
+ if (data.render_config) {
605
+ fire_event({
606
+ type: "render",
607
+ data: data.render_config,
608
+ endpoint: _endpoint,
609
+ fn_index
610
+ });
611
+ }
597
612
 
598
613
  if (complete) {
599
614
  fire_event({
@@ -647,7 +662,7 @@ export function submit(
647
662
  event_callbacks[event_id] = callback;
648
663
  unclosed_events.add(event_id);
649
664
  if (!stream_status.open) {
650
- this.open_stream();
665
+ await this.open_stream();
651
666
  }
652
667
  }
653
668
  });