@gradio/client 0.19.3 → 0.20.0

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +8 -1
  3. package/dist/client.d.ts +4 -0
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/constants.d.ts +4 -0
  6. package/dist/constants.d.ts.map +1 -1
  7. package/dist/helpers/api_info.d.ts +1 -0
  8. package/dist/helpers/api_info.d.ts.map +1 -1
  9. package/dist/helpers/data.d.ts.map +1 -1
  10. package/dist/helpers/init_helpers.d.ts +4 -1
  11. package/dist/helpers/init_helpers.d.ts.map +1 -1
  12. package/dist/index.js +236 -75
  13. package/dist/test/handlers.d.ts.map +1 -1
  14. package/dist/test/test_data.d.ts.map +1 -1
  15. package/dist/types.d.ts +6 -0
  16. package/dist/types.d.ts.map +1 -1
  17. package/dist/utils/duplicate.d.ts.map +1 -1
  18. package/dist/utils/post_data.d.ts.map +1 -1
  19. package/dist/utils/predict.d.ts.map +1 -1
  20. package/dist/utils/submit.d.ts.map +1 -1
  21. package/dist/utils/upload_files.d.ts.map +1 -1
  22. package/dist/utils/view_api.d.ts.map +1 -1
  23. package/package.json +1 -1
  24. package/src/client.ts +70 -28
  25. package/src/constants.ts +5 -0
  26. package/src/helpers/api_info.ts +44 -17
  27. package/src/helpers/data.ts +9 -22
  28. package/src/helpers/init_helpers.ts +98 -9
  29. package/src/test/api_info.test.ts +69 -4
  30. package/src/test/data.test.ts +13 -16
  31. package/src/test/handlers.ts +249 -2
  32. package/src/test/init.test.ts +2 -2
  33. package/src/test/init_helpers.test.ts +53 -1
  34. package/src/test/test_data.ts +3 -0
  35. package/src/types.ts +6 -0
  36. package/src/utils/duplicate.ts +27 -2
  37. package/src/utils/post_data.ts +2 -1
  38. package/src/utils/predict.ts +4 -2
  39. package/src/utils/submit.ts +42 -9
  40. package/src/utils/upload_files.ts +2 -1
  41. package/src/utils/view_api.ts +7 -4
@@ -15,10 +15,12 @@ export async function predict(
15
15
  }
16
16
 
17
17
  if (typeof endpoint === "number") {
18
- dependency = this.config.dependencies[endpoint];
18
+ dependency = this.config.dependencies.find((dep) => dep.id == endpoint)!;
19
19
  } else {
20
20
  const trimmed_endpoint = endpoint.replace(/^\//, "");
21
- dependency = this.config.dependencies[this.api_map[trimmed_endpoint]];
21
+ dependency = this.config.dependencies.find(
22
+ (dep) => dep.id == this.api_map[trimmed_endpoint]
23
+ )!;
22
24
  }
23
25
 
24
26
  if (dependency?.types.continuous) {
@@ -162,6 +162,35 @@ export function submit(
162
162
  }
163
163
  }
164
164
 
165
+ const resolve_heartbeat = async (config: Config): Promise<void> => {
166
+ await this._resolve_hearbeat(config);
167
+ };
168
+
169
+ async function handle_render_config(render_config: any): Promise<void> {
170
+ if (!config) return;
171
+ let render_id: number = render_config.render_id;
172
+ config.components = [
173
+ ...config.components.filter((c) => c.props.rendered_in !== render_id),
174
+ ...render_config.components
175
+ ];
176
+ config.dependencies = [
177
+ ...config.dependencies.filter((d) => d.rendered_in !== render_id),
178
+ ...render_config.dependencies
179
+ ];
180
+ const any_state = config.components.some((c) => c.type === "state");
181
+ const any_unload = config.dependencies.some((d) =>
182
+ d.targets.some((t) => t[1] === "unload")
183
+ );
184
+ config.connect_heartbeat = any_state || any_unload;
185
+ await resolve_heartbeat(config);
186
+ fire_event({
187
+ type: "render",
188
+ data: render_config,
189
+ endpoint: _endpoint,
190
+ fn_index
191
+ });
192
+ }
193
+
165
194
  this.handle_blob(config.root, resolved_data, endpoint_info).then(
166
195
  async (_payload) => {
167
196
  payload = {
@@ -201,6 +230,9 @@ export function submit(
201
230
  event_data,
202
231
  trigger_id
203
232
  });
233
+ if (output.render_config) {
234
+ handle_render_config(output.render_config);
235
+ }
204
236
 
205
237
  fire_event({
206
238
  type: "status",
@@ -496,8 +528,12 @@ export function submit(
496
528
  const origin = hostname.includes(".dev.")
497
529
  ? `https://moon-${hostname.split(".")[1]}.${hfhubdev}`
498
530
  : `https://huggingface.co`;
531
+
532
+ const is_iframe =
533
+ typeof window !== "undefined" && window.parent != window;
534
+ const is_zerogpu_space = dependency.zerogpu && config.space_id;
499
535
  const zerogpu_auth_promise =
500
- dependency.zerogpu && window.parent != window && config.space_id
536
+ is_iframe && is_zerogpu_space
501
537
  ? post_message<Headers>("zerogpu-headers", origin)
502
538
  : Promise.resolve(null);
503
539
  const post_data_promise = zerogpu_auth_promise.then((headers) => {
@@ -602,12 +638,7 @@ export function submit(
602
638
  fn_index
603
639
  });
604
640
  if (data.render_config) {
605
- fire_event({
606
- type: "render",
607
- data: data.render_config,
608
- endpoint: _endpoint,
609
- fn_index
610
- });
641
+ await handle_render_config(data.render_config);
611
642
  }
612
643
 
613
644
  if (complete) {
@@ -694,13 +725,15 @@ function get_endpoint_info(
694
725
  if (typeof endpoint === "number") {
695
726
  fn_index = endpoint;
696
727
  endpoint_info = api_info.unnamed_endpoints[fn_index];
697
- dependency = config.dependencies[endpoint];
728
+ dependency = config.dependencies.find((dep) => dep.id == endpoint)!;
698
729
  } else {
699
730
  const trimmed_endpoint = endpoint.replace(/^\//, "");
700
731
 
701
732
  fn_index = api_map[trimmed_endpoint];
702
733
  endpoint_info = api_info.named_endpoints[endpoint.trim()];
703
- dependency = config.dependencies[api_map[trimmed_endpoint]];
734
+ dependency = config.dependencies.find(
735
+ (dep) => dep.id == api_map[trimmed_endpoint]
736
+ )!;
704
737
  }
705
738
 
706
739
  if (typeof fn_index !== "number") {
@@ -33,7 +33,8 @@ export async function upload_files(
33
33
  response = await this.fetch(upload_url, {
34
34
  method: "POST",
35
35
  body: formData,
36
- headers
36
+ headers,
37
+ credentials: "include"
37
38
  });
38
39
  } catch (e) {
39
40
  throw new Error(BROKEN_CONNECTION_MSG + (e as Error).message);
@@ -3,7 +3,7 @@ import semiver from "semiver";
3
3
  import { API_INFO_URL, BROKEN_CONNECTION_MSG } from "../constants";
4
4
  import { Client } from "../client";
5
5
  import { SPACE_FETCHER_URL } from "../constants";
6
- import { transform_api_info } from "../helpers/api_info";
6
+ import { join_urls, transform_api_info } from "../helpers/api_info";
7
7
 
8
8
  export async function view_api(this: Client): Promise<any> {
9
9
  if (this.api_info) return this.api_info;
@@ -34,11 +34,14 @@ export async function view_api(this: Client): Promise<any> {
34
34
  serialize: false,
35
35
  config: JSON.stringify(config)
36
36
  }),
37
- headers
37
+ headers,
38
+ credentials: "include"
38
39
  });
39
40
  } else {
40
- response = await this.fetch(`${config?.root}/${API_INFO_URL}`, {
41
- headers
41
+ const url = join_urls(config.root, API_INFO_URL);
42
+ response = await this.fetch(url, {
43
+ headers,
44
+ credentials: "include"
42
45
  });
43
46
  }
44
47