@gradio/client 0.8.2 → 0.9.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.
- package/CHANGELOG.md +10 -0
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/index.js +138 -6
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +148 -6
- package/src/types.ts +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
# @gradio/client
|
2
2
|
|
3
|
+
## 0.9.0
|
4
|
+
|
5
|
+
### Features
|
6
|
+
|
7
|
+
- [#6398](https://github.com/gradio-app/gradio/pull/6398) [`67ddd40`](https://github.com/gradio-app/gradio/commit/67ddd40b4b70d3a37cb1637c33620f8d197dbee0) - Lite v4. Thanks [@whitphx](https://github.com/whitphx)!
|
8
|
+
|
9
|
+
### Fixes
|
10
|
+
|
11
|
+
- [#6556](https://github.com/gradio-app/gradio/pull/6556) [`d76bcaa`](https://github.com/gradio-app/gradio/commit/d76bcaaaf0734aaf49a680f94ea9d4d22a602e70) - Fix api event drops. Thanks [@aliabid94](https://github.com/aliabid94)!
|
12
|
+
|
3
13
|
## 0.8.2
|
4
14
|
|
5
15
|
### Features
|
package/dist/client.d.ts
CHANGED
@@ -34,7 +34,7 @@ interface Client {
|
|
34
34
|
}) => Promise<client_return>;
|
35
35
|
handle_blob: (endpoint: string, data: unknown[], api_info: ApiInfo<JsApiData>, token?: `hf_${string}`) => Promise<unknown[]>;
|
36
36
|
}
|
37
|
-
export declare function api_factory(fetch_implementation: typeof fetch,
|
37
|
+
export declare function api_factory(fetch_implementation: typeof fetch, EventSource_factory: (url: URL) => EventSource): Client;
|
38
38
|
export declare const post_data: (url: string, body: unknown, token?: `hf_${string}`) => Promise<[PostResponse, number]>, upload_files: (root: string, files: File[], token?: `hf_${string}`, upload_id?: string) => Promise<UploadResponse>, client: (app_reference: string, options: {
|
39
39
|
hf_token?: `hf_${string}`;
|
40
40
|
status_callback?: SpaceStatusCallback;
|
package/dist/client.d.ts.map
CHANGED
@@ -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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"}
|
package/dist/index.js
CHANGED
@@ -326,7 +326,7 @@ async function duplicate(app_reference, options) {
|
|
326
326
|
throw new Error(e);
|
327
327
|
}
|
328
328
|
}
|
329
|
-
function api_factory(fetch_implementation,
|
329
|
+
function api_factory(fetch_implementation, EventSource_factory) {
|
330
330
|
return { post_data: post_data2, upload_files: upload_files2, client: client2, handle_blob: handle_blob2 };
|
331
331
|
async function post_data2(url, body, token) {
|
332
332
|
const headers = { "Content-Type": "application/json" };
|
@@ -391,6 +391,9 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
391
391
|
const { ws_protocol, http_protocol, host, space_id } = await process_endpoint(app_reference, hf_token);
|
392
392
|
const session_hash = Math.random().toString(36).substring(2);
|
393
393
|
const last_status = {};
|
394
|
+
let stream_open = false;
|
395
|
+
let event_stream = null;
|
396
|
+
const event_callbacks = {};
|
394
397
|
let config;
|
395
398
|
let api_map = {};
|
396
399
|
let jwt = false;
|
@@ -523,7 +526,7 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
523
526
|
}
|
524
527
|
let websocket;
|
525
528
|
let eventSource;
|
526
|
-
let protocol = config.protocol ?? "
|
529
|
+
let protocol = config.protocol ?? "ws";
|
527
530
|
const _endpoint = typeof endpoint === "number" ? "/predict" : endpoint;
|
528
531
|
let payload;
|
529
532
|
let event_id = null;
|
@@ -620,7 +623,7 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
620
623
|
if (jwt) {
|
621
624
|
url.searchParams.set("__sign", jwt);
|
622
625
|
}
|
623
|
-
websocket =
|
626
|
+
websocket = new WebSocket(url);
|
624
627
|
websocket.onclose = (evt) => {
|
625
628
|
if (!evt.wasClean) {
|
626
629
|
fire_event({
|
@@ -711,7 +714,7 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
711
714
|
() => websocket.send(JSON.stringify({ hash: session_hash }))
|
712
715
|
);
|
713
716
|
}
|
714
|
-
} else {
|
717
|
+
} else if (protocol == "sse") {
|
715
718
|
fire_event({
|
716
719
|
type: "status",
|
717
720
|
stage: "pending",
|
@@ -731,7 +734,7 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
731
734
|
true
|
732
735
|
)}/queue/join?${url_params ? url_params + "&" : ""}${params}`
|
733
736
|
);
|
734
|
-
eventSource =
|
737
|
+
eventSource = EventSource_factory(url);
|
735
738
|
eventSource.onmessage = async function(event) {
|
736
739
|
const _data = JSON.parse(event.data);
|
737
740
|
const { type, status, data: data2 } = handle_message(
|
@@ -824,6 +827,113 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
824
827
|
}
|
825
828
|
}
|
826
829
|
};
|
830
|
+
} else if (protocol == "sse_v1") {
|
831
|
+
fire_event({
|
832
|
+
type: "status",
|
833
|
+
stage: "pending",
|
834
|
+
queue: true,
|
835
|
+
endpoint: _endpoint,
|
836
|
+
fn_index,
|
837
|
+
time: /* @__PURE__ */ new Date()
|
838
|
+
});
|
839
|
+
post_data2(
|
840
|
+
`${http_protocol}//${resolve_root(
|
841
|
+
host,
|
842
|
+
config.path,
|
843
|
+
true
|
844
|
+
)}/queue/join?${url_params}`,
|
845
|
+
{
|
846
|
+
...payload,
|
847
|
+
session_hash
|
848
|
+
},
|
849
|
+
hf_token
|
850
|
+
).then(([response, status]) => {
|
851
|
+
if (status !== 200) {
|
852
|
+
fire_event({
|
853
|
+
type: "status",
|
854
|
+
stage: "error",
|
855
|
+
message: BROKEN_CONNECTION_MSG,
|
856
|
+
queue: true,
|
857
|
+
endpoint: _endpoint,
|
858
|
+
fn_index,
|
859
|
+
time: /* @__PURE__ */ new Date()
|
860
|
+
});
|
861
|
+
} else {
|
862
|
+
event_id = response.event_id;
|
863
|
+
if (!stream_open) {
|
864
|
+
open_stream();
|
865
|
+
}
|
866
|
+
let callback = async function(_data) {
|
867
|
+
const { type, status: status2, data: data2 } = handle_message(
|
868
|
+
_data,
|
869
|
+
last_status[fn_index]
|
870
|
+
);
|
871
|
+
if (type === "update" && status2 && !complete) {
|
872
|
+
fire_event({
|
873
|
+
type: "status",
|
874
|
+
endpoint: _endpoint,
|
875
|
+
fn_index,
|
876
|
+
time: /* @__PURE__ */ new Date(),
|
877
|
+
...status2
|
878
|
+
});
|
879
|
+
} else if (type === "complete") {
|
880
|
+
complete = status2;
|
881
|
+
} else if (type === "log") {
|
882
|
+
fire_event({
|
883
|
+
type: "log",
|
884
|
+
log: data2.log,
|
885
|
+
level: data2.level,
|
886
|
+
endpoint: _endpoint,
|
887
|
+
fn_index
|
888
|
+
});
|
889
|
+
} else if (type === "generating") {
|
890
|
+
fire_event({
|
891
|
+
type: "status",
|
892
|
+
time: /* @__PURE__ */ new Date(),
|
893
|
+
...status2,
|
894
|
+
stage: status2 == null ? void 0 : status2.stage,
|
895
|
+
queue: true,
|
896
|
+
endpoint: _endpoint,
|
897
|
+
fn_index
|
898
|
+
});
|
899
|
+
}
|
900
|
+
if (data2) {
|
901
|
+
fire_event({
|
902
|
+
type: "data",
|
903
|
+
time: /* @__PURE__ */ new Date(),
|
904
|
+
data: transform_files ? transform_output(
|
905
|
+
data2.data,
|
906
|
+
api_info,
|
907
|
+
config.root,
|
908
|
+
config.root_url
|
909
|
+
) : data2.data,
|
910
|
+
endpoint: _endpoint,
|
911
|
+
fn_index
|
912
|
+
});
|
913
|
+
if (complete) {
|
914
|
+
fire_event({
|
915
|
+
type: "status",
|
916
|
+
time: /* @__PURE__ */ new Date(),
|
917
|
+
...complete,
|
918
|
+
stage: status2 == null ? void 0 : status2.stage,
|
919
|
+
queue: true,
|
920
|
+
endpoint: _endpoint,
|
921
|
+
fn_index
|
922
|
+
});
|
923
|
+
}
|
924
|
+
}
|
925
|
+
if (status2.stage === "complete" || status2.stage === "error") {
|
926
|
+
if (event_callbacks[event_id]) {
|
927
|
+
delete event_callbacks[event_id];
|
928
|
+
if (Object.keys(event_callbacks).length === 0) {
|
929
|
+
close_stream();
|
930
|
+
}
|
931
|
+
}
|
932
|
+
}
|
933
|
+
};
|
934
|
+
event_callbacks[event_id] = callback;
|
935
|
+
}
|
936
|
+
});
|
827
937
|
}
|
828
938
|
});
|
829
939
|
function fire_event(event) {
|
@@ -905,6 +1015,28 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
905
1015
|
destroy
|
906
1016
|
};
|
907
1017
|
}
|
1018
|
+
function open_stream() {
|
1019
|
+
stream_open = true;
|
1020
|
+
let params = new URLSearchParams({
|
1021
|
+
session_hash
|
1022
|
+
}).toString();
|
1023
|
+
let url = new URL(
|
1024
|
+
`${http_protocol}//${resolve_root(
|
1025
|
+
host,
|
1026
|
+
config.path,
|
1027
|
+
true
|
1028
|
+
)}/queue/data?${params}`
|
1029
|
+
);
|
1030
|
+
event_stream = new EventSource(url);
|
1031
|
+
event_stream.onmessage = async function(event) {
|
1032
|
+
let _data = JSON.parse(event.data);
|
1033
|
+
await event_callbacks[_data.event_id](_data);
|
1034
|
+
};
|
1035
|
+
}
|
1036
|
+
function close_stream() {
|
1037
|
+
stream_open = false;
|
1038
|
+
event_stream == null ? void 0 : event_stream.close();
|
1039
|
+
}
|
908
1040
|
async function component_server(component_id, fn_name, data) {
|
909
1041
|
var _a;
|
910
1042
|
const headers = { "Content-Type": "application/json" };
|
@@ -1016,7 +1148,7 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
1016
1148
|
}
|
1017
1149
|
const { post_data, upload_files, client, handle_blob } = api_factory(
|
1018
1150
|
fetch,
|
1019
|
-
(...args) => new
|
1151
|
+
(...args) => new EventSource(...args)
|
1020
1152
|
);
|
1021
1153
|
function transform_output(data, api_info, root_url, remote_url) {
|
1022
1154
|
return data.map((d, i) => {
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACtB,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,GAAG,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
@@ -178,7 +178,7 @@ interface Client {
|
|
178
178
|
|
179
179
|
export function api_factory(
|
180
180
|
fetch_implementation: typeof fetch,
|
181
|
-
|
181
|
+
EventSource_factory: (url: URL) => EventSource
|
182
182
|
): Client {
|
183
183
|
return { post_data, upload_files, client, handle_blob };
|
184
184
|
|
@@ -278,6 +278,9 @@ export function api_factory(
|
|
278
278
|
|
279
279
|
const session_hash = Math.random().toString(36).substring(2);
|
280
280
|
const last_status: Record<string, Status["stage"]> = {};
|
281
|
+
let stream_open = false;
|
282
|
+
let event_stream: EventSource | null = null;
|
283
|
+
const event_callbacks: Record<string, () => Promise<void>> = {};
|
281
284
|
let config: Config;
|
282
285
|
let api_map: Record<string, number> = {};
|
283
286
|
|
@@ -437,7 +440,7 @@ export function api_factory(
|
|
437
440
|
|
438
441
|
let websocket: WebSocket;
|
439
442
|
let eventSource: EventSource;
|
440
|
-
let protocol = config.protocol ?? "
|
443
|
+
let protocol = config.protocol ?? "ws";
|
441
444
|
|
442
445
|
const _endpoint = typeof endpoint === "number" ? "/predict" : endpoint;
|
443
446
|
let payload: Payload;
|
@@ -546,7 +549,7 @@ export function api_factory(
|
|
546
549
|
url.searchParams.set("__sign", jwt);
|
547
550
|
}
|
548
551
|
|
549
|
-
websocket =
|
552
|
+
websocket = new WebSocket(url);
|
550
553
|
|
551
554
|
websocket.onclose = (evt) => {
|
552
555
|
if (!evt.wasClean) {
|
@@ -646,7 +649,7 @@ export function api_factory(
|
|
646
649
|
websocket.send(JSON.stringify({ hash: session_hash }))
|
647
650
|
);
|
648
651
|
}
|
649
|
-
} else {
|
652
|
+
} else if (protocol == "sse") {
|
650
653
|
fire_event({
|
651
654
|
type: "status",
|
652
655
|
stage: "pending",
|
@@ -667,7 +670,7 @@ export function api_factory(
|
|
667
670
|
)}/queue/join?${url_params ? url_params + "&" : ""}${params}`
|
668
671
|
);
|
669
672
|
|
670
|
-
eventSource =
|
673
|
+
eventSource = EventSource_factory(url);
|
671
674
|
|
672
675
|
eventSource.onmessage = async function (event) {
|
673
676
|
const _data = JSON.parse(event.data);
|
@@ -766,6 +769,121 @@ export function api_factory(
|
|
766
769
|
}
|
767
770
|
}
|
768
771
|
};
|
772
|
+
} else if (protocol == "sse_v1") {
|
773
|
+
fire_event({
|
774
|
+
type: "status",
|
775
|
+
stage: "pending",
|
776
|
+
queue: true,
|
777
|
+
endpoint: _endpoint,
|
778
|
+
fn_index,
|
779
|
+
time: new Date()
|
780
|
+
});
|
781
|
+
|
782
|
+
post_data(
|
783
|
+
`${http_protocol}//${resolve_root(
|
784
|
+
host,
|
785
|
+
config.path,
|
786
|
+
true
|
787
|
+
)}/queue/join?${url_params}`,
|
788
|
+
{
|
789
|
+
...payload,
|
790
|
+
session_hash
|
791
|
+
},
|
792
|
+
hf_token
|
793
|
+
).then(([response, status]) => {
|
794
|
+
if (status !== 200) {
|
795
|
+
fire_event({
|
796
|
+
type: "status",
|
797
|
+
stage: "error",
|
798
|
+
message: BROKEN_CONNECTION_MSG,
|
799
|
+
queue: true,
|
800
|
+
endpoint: _endpoint,
|
801
|
+
fn_index,
|
802
|
+
time: new Date()
|
803
|
+
});
|
804
|
+
} else {
|
805
|
+
event_id = response.event_id as string;
|
806
|
+
if (!stream_open) {
|
807
|
+
open_stream();
|
808
|
+
}
|
809
|
+
|
810
|
+
let callback = async function (_data: object): void {
|
811
|
+
const { type, status, data } = handle_message(
|
812
|
+
_data,
|
813
|
+
last_status[fn_index]
|
814
|
+
);
|
815
|
+
|
816
|
+
if (type === "update" && status && !complete) {
|
817
|
+
// call 'status' listeners
|
818
|
+
fire_event({
|
819
|
+
type: "status",
|
820
|
+
endpoint: _endpoint,
|
821
|
+
fn_index,
|
822
|
+
time: new Date(),
|
823
|
+
...status
|
824
|
+
});
|
825
|
+
} else if (type === "complete") {
|
826
|
+
complete = status;
|
827
|
+
} else if (type === "log") {
|
828
|
+
fire_event({
|
829
|
+
type: "log",
|
830
|
+
log: data.log,
|
831
|
+
level: data.level,
|
832
|
+
endpoint: _endpoint,
|
833
|
+
fn_index
|
834
|
+
});
|
835
|
+
} else if (type === "generating") {
|
836
|
+
fire_event({
|
837
|
+
type: "status",
|
838
|
+
time: new Date(),
|
839
|
+
...status,
|
840
|
+
stage: status?.stage!,
|
841
|
+
queue: true,
|
842
|
+
endpoint: _endpoint,
|
843
|
+
fn_index
|
844
|
+
});
|
845
|
+
}
|
846
|
+
if (data) {
|
847
|
+
fire_event({
|
848
|
+
type: "data",
|
849
|
+
time: new Date(),
|
850
|
+
data: transform_files
|
851
|
+
? transform_output(
|
852
|
+
data.data,
|
853
|
+
api_info,
|
854
|
+
config.root,
|
855
|
+
config.root_url
|
856
|
+
)
|
857
|
+
: data.data,
|
858
|
+
endpoint: _endpoint,
|
859
|
+
fn_index
|
860
|
+
});
|
861
|
+
|
862
|
+
if (complete) {
|
863
|
+
fire_event({
|
864
|
+
type: "status",
|
865
|
+
time: new Date(),
|
866
|
+
...complete,
|
867
|
+
stage: status?.stage!,
|
868
|
+
queue: true,
|
869
|
+
endpoint: _endpoint,
|
870
|
+
fn_index
|
871
|
+
});
|
872
|
+
}
|
873
|
+
}
|
874
|
+
|
875
|
+
if (status.stage === "complete" || status.stage === "error") {
|
876
|
+
if (event_callbacks[event_id]) {
|
877
|
+
delete event_callbacks[event_id];
|
878
|
+
if (Object.keys(event_callbacks).length === 0) {
|
879
|
+
close_stream();
|
880
|
+
}
|
881
|
+
}
|
882
|
+
}
|
883
|
+
};
|
884
|
+
event_callbacks[event_id] = callback;
|
885
|
+
}
|
886
|
+
});
|
769
887
|
}
|
770
888
|
});
|
771
889
|
|
@@ -864,6 +982,30 @@ export function api_factory(
|
|
864
982
|
};
|
865
983
|
}
|
866
984
|
|
985
|
+
function open_stream(): void {
|
986
|
+
stream_open = true;
|
987
|
+
let params = new URLSearchParams({
|
988
|
+
session_hash: session_hash
|
989
|
+
}).toString();
|
990
|
+
let url = new URL(
|
991
|
+
`${http_protocol}//${resolve_root(
|
992
|
+
host,
|
993
|
+
config.path,
|
994
|
+
true
|
995
|
+
)}/queue/data?${params}`
|
996
|
+
);
|
997
|
+
event_stream = new EventSource(url);
|
998
|
+
event_stream.onmessage = async function (event) {
|
999
|
+
let _data = JSON.parse(event.data);
|
1000
|
+
await event_callbacks[_data.event_id](_data);
|
1001
|
+
};
|
1002
|
+
}
|
1003
|
+
|
1004
|
+
function close_stream(): void {
|
1005
|
+
stream_open = false;
|
1006
|
+
event_stream?.close();
|
1007
|
+
}
|
1008
|
+
|
867
1009
|
async function component_server(
|
868
1010
|
component_id: number,
|
869
1011
|
fn_name: string,
|
@@ -1007,7 +1149,7 @@ export function api_factory(
|
|
1007
1149
|
|
1008
1150
|
export const { post_data, upload_files, client, handle_blob } = api_factory(
|
1009
1151
|
fetch,
|
1010
|
-
(...args) => new
|
1152
|
+
(...args) => new EventSource(...args)
|
1011
1153
|
);
|
1012
1154
|
|
1013
1155
|
function transform_output(
|