@gradio/client 0.17.0 → 0.19.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 +27 -0
- package/README.md +10 -6
- package/dist/client.d.ts +18 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/constants.d.ts +8 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/helpers/api_info.d.ts +22 -0
- package/dist/helpers/api_info.d.ts.map +1 -1
- package/dist/helpers/data.d.ts +2 -2
- package/dist/helpers/data.d.ts.map +1 -1
- package/dist/helpers/init_helpers.d.ts.map +1 -1
- package/dist/helpers/spaces.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +275 -183
- package/dist/test/handlers.d.ts +3 -0
- package/dist/test/handlers.d.ts.map +1 -0
- package/dist/test/mock_eventsource.d.ts +2 -0
- package/dist/test/mock_eventsource.d.ts.map +1 -0
- package/dist/test/server.d.ts +2 -0
- package/dist/test/server.d.ts.map +1 -0
- package/dist/test/test_data.d.ts +76 -0
- package/dist/test/test_data.d.ts.map +1 -0
- package/dist/types.d.ts +23 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/upload.d.ts +2 -2
- package/dist/upload.d.ts.map +1 -1
- package/dist/utils/duplicate.d.ts.map +1 -1
- package/dist/utils/predict.d.ts +1 -1
- package/dist/utils/predict.d.ts.map +1 -1
- package/dist/utils/stream.d.ts +2 -2
- package/dist/utils/stream.d.ts.map +1 -1
- package/dist/utils/submit.d.ts +1 -1
- package/dist/utils/submit.d.ts.map +1 -1
- package/dist/utils/upload_files.d.ts.map +1 -1
- package/dist/utils/view_api.d.ts.map +1 -1
- package/package.json +8 -2
- package/src/client.ts +53 -28
- package/src/constants.ts +9 -2
- package/src/helpers/api_info.ts +75 -4
- package/src/helpers/data.ts +46 -28
- package/src/helpers/init_helpers.ts +7 -11
- package/src/helpers/spaces.ts +8 -3
- package/src/index.ts +1 -1
- package/src/test/api_info.test.ts +567 -0
- package/src/test/data.test.ts +281 -0
- package/src/test/handlers.ts +438 -0
- package/src/test/init.test.ts +139 -0
- package/src/test/init_helpers.test.ts +94 -0
- package/src/test/mock_eventsource.ts +13 -0
- package/src/test/post_data.test.ts +45 -0
- package/src/test/server.ts +6 -0
- package/src/test/spaces.test.ts +145 -0
- package/src/test/stream.test.ts +79 -0
- package/src/test/test_data.ts +557 -0
- package/src/test/upload_files.test.ts +42 -0
- package/src/test/view_api.test.ts +53 -0
- package/src/types.ts +36 -17
- package/src/upload.ts +4 -8
- package/src/utils/duplicate.ts +20 -3
- package/src/utils/handle_blob.ts +1 -1
- package/src/utils/post_data.ts +1 -1
- package/src/utils/predict.ts +2 -2
- package/src/utils/stream.ts +30 -21
- package/src/utils/submit.ts +42 -19
- package/src/utils/upload_files.ts +11 -6
- package/src/utils/view_api.ts +4 -7
- package/vite.config.js +7 -0
- package/src/utils/client.node-test.ts +0 -173
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/test/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,cAAc,EAAE,MAAM,KAAK,CAAC;AAmCzD,eAAO,MAAM,QAAQ,EAAE,cAAc,EAkZpC,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mock_eventsource.d.ts","sourceRoot":"","sources":["../../src/test/mock_eventsource.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/test/server.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,IAAI,GAAG,CAEvC"}
|
@@ -0,0 +1,76 @@
|
|
1
|
+
import { ApiData, ApiInfo, Config, EndpointInfo } from "../types";
|
2
|
+
export declare const runtime_response: {
|
3
|
+
stage: string;
|
4
|
+
hardware: {
|
5
|
+
current: string;
|
6
|
+
requested: string;
|
7
|
+
};
|
8
|
+
storage: {
|
9
|
+
current: null;
|
10
|
+
requested: null;
|
11
|
+
};
|
12
|
+
gcTimeout: number;
|
13
|
+
replicas: {
|
14
|
+
current: number;
|
15
|
+
requested: number;
|
16
|
+
};
|
17
|
+
devMode: boolean;
|
18
|
+
domains: {
|
19
|
+
domain: string;
|
20
|
+
isCustom: boolean;
|
21
|
+
stage: string;
|
22
|
+
}[];
|
23
|
+
};
|
24
|
+
export declare const transformed_api_info: ApiInfo<ApiData>;
|
25
|
+
export declare const response_api_info: ApiInfo<ApiData>;
|
26
|
+
export declare const config_response: Config;
|
27
|
+
export declare const whoami_response: {
|
28
|
+
type: string;
|
29
|
+
id: string;
|
30
|
+
name: string;
|
31
|
+
fullname: string;
|
32
|
+
email: string;
|
33
|
+
emailVerified: boolean;
|
34
|
+
canPay: boolean;
|
35
|
+
periodEnd: number;
|
36
|
+
isPro: boolean;
|
37
|
+
avatarUrl: string;
|
38
|
+
orgs: never[];
|
39
|
+
auth: {
|
40
|
+
type: string;
|
41
|
+
accessToken: {
|
42
|
+
displayName: string;
|
43
|
+
role: string;
|
44
|
+
};
|
45
|
+
};
|
46
|
+
};
|
47
|
+
export declare const duplicate_response: {
|
48
|
+
url: string;
|
49
|
+
};
|
50
|
+
export declare const hardware_sleeptime_response: {
|
51
|
+
stage: string;
|
52
|
+
hardware: {
|
53
|
+
current: string;
|
54
|
+
requested: string;
|
55
|
+
};
|
56
|
+
storage: null;
|
57
|
+
gcTimeout: number;
|
58
|
+
replicas: {
|
59
|
+
current: number;
|
60
|
+
requested: number;
|
61
|
+
};
|
62
|
+
devMode: boolean;
|
63
|
+
domains: {
|
64
|
+
domain: string;
|
65
|
+
isCustom: boolean;
|
66
|
+
stage: string;
|
67
|
+
}[];
|
68
|
+
};
|
69
|
+
export declare const endpoint_info: EndpointInfo<ApiData>;
|
70
|
+
export declare const discussions_response: {
|
71
|
+
discussions: never[];
|
72
|
+
count: number;
|
73
|
+
start: number;
|
74
|
+
numClosedDiscussions: number;
|
75
|
+
};
|
76
|
+
//# sourceMappingURL=test_data.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"test_data.d.ts","sourceRoot":"","sources":["../../src/test/test_data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAElE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;CAuB5B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,OAAO,CA6CjD,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAiC9C,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,MA4V7B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;CAmB3B,CAAC;AAEF,eAAO,MAAM,kBAAkB;;CAE9B,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;CAoBvC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,OAAO,CA0C/C,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;CAKhC,CAAC"}
|
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;
|
@@ -38,17 +44,18 @@ export interface ApiInfo<T extends ApiData | JsApiData> {
|
|
38
44
|
export interface BlobRef {
|
39
45
|
path: string[];
|
40
46
|
type: string | undefined;
|
41
|
-
blob: Blob | false;
|
47
|
+
blob: Blob | File | false;
|
42
48
|
}
|
43
|
-
export type
|
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:
|
49
|
-
submit:
|
55
|
+
predict: PredictFunction;
|
56
|
+
submit: SubmitFunction;
|
50
57
|
component_server: (component_id: number, fn_name: string, data: unknown[]) => any;
|
51
|
-
view_api: (
|
58
|
+
view_api: (_fetch: typeof fetch) => Promise<ApiInfo<JsApiData>>;
|
52
59
|
};
|
53
60
|
export type SubmitReturn = {
|
54
61
|
on: event;
|
@@ -74,6 +81,7 @@ export type SpaceStatusCallback = (a: SpaceStatus) => void;
|
|
74
81
|
export interface Config {
|
75
82
|
auth_required: boolean;
|
76
83
|
analytics_enabled: boolean;
|
84
|
+
connect_heartbeat: boolean;
|
77
85
|
auth_message: string;
|
78
86
|
components: any[];
|
79
87
|
css: string | null;
|
@@ -164,11 +172,12 @@ export interface FileData {
|
|
164
172
|
mime_type?: string;
|
165
173
|
alt_text?: string;
|
166
174
|
}
|
167
|
-
export type EventType = "data" | "status" | "log";
|
175
|
+
export type EventType = "data" | "status" | "log" | "render";
|
168
176
|
export interface EventMap {
|
169
177
|
data: Payload;
|
170
178
|
status: Status;
|
171
179
|
log: LogMessage;
|
180
|
+
render: RenderMessage;
|
172
181
|
}
|
173
182
|
export type Event<K extends EventType> = {
|
174
183
|
[P in K]: EventMap[P] & {
|
@@ -185,6 +194,13 @@ export interface LogMessage {
|
|
185
194
|
log: string;
|
186
195
|
level: "warning" | "info";
|
187
196
|
}
|
197
|
+
export interface RenderMessage {
|
198
|
+
fn_index: number;
|
199
|
+
data: {
|
200
|
+
components: any[];
|
201
|
+
layout: any;
|
202
|
+
};
|
203
|
+
}
|
188
204
|
export interface Status {
|
189
205
|
queue: boolean;
|
190
206
|
code?: string;
|
package/dist/types.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,OAAO;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE;QACL,IAAI,EAAE,GAAG,CAAC;QACV,WAAW,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,OAAO,GAAG,SAAS;IAC1D,UAAU,EAAE,CAAC,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,IAAI,CAAC,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,OAAO,GAAG,SAAS;IACrD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC;
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/upload.d.ts
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
import type {
|
2
|
-
export declare function upload(file_data: FileData[], root_url: string, upload_id?: string, max_file_size?: number
|
1
|
+
import type { Client } from "./client";
|
2
|
+
export declare function upload(this: Client, file_data: FileData[], root_url: string, upload_id?: string, max_file_size?: number): Promise<(FileData | null)[] | null>;
|
3
3
|
export declare function prepare_files(files: File[], is_stream?: boolean): Promise<FileData[]>;
|
4
4
|
export declare class FileData {
|
5
5
|
path: string;
|
package/dist/upload.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../src/upload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,wBAAsB,MAAM,CAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,QAAQ,EAAE,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAsCrC;AAED,wBAAsB,aAAa,CAClC,KAAK,EAAE,IAAI,EAAE,EACb,SAAS,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAYrB;AAED,qBAAa,QAAQ;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,IAAI;;MAAgC;gBAEjC,EACX,IAAI,EACJ,GAAG,EACH,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,EAAE;QACF,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,IAAI,CAAC;QACZ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB;CAUD"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"duplicate.d.ts","sourceRoot":"","sources":["../../src/utils/duplicate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
1
|
+
{"version":3,"file":"duplicate.d.ts","sourceRoot":"","sources":["../../src/utils/duplicate.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,wBAAsB,SAAS,CAC9B,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,gBAAgB,GACvB,OAAO,CAAC,MAAM,CAAC,CAmFjB"}
|
package/dist/utils/predict.d.ts
CHANGED
@@ -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
|
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,
|
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"}
|
package/dist/utils/stream.d.ts
CHANGED
@@ -1,8 +1,8 @@
|
|
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;
|
6
6
|
export declare function apply_diff_stream(pending_diff_streams: Record<string, any[][]>, event_id: string, data: any): void;
|
7
7
|
export declare function apply_diff(obj: any, diff: [string, (number | string)[], any][]): any;
|
8
8
|
//# sourceMappingURL=stream.d.ts.map
|
@@ -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,
|
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"}
|
package/dist/utils/submit.d.ts
CHANGED
@@ -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;
|
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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"upload_files.d.ts","sourceRoot":"","sources":["../../src/utils/upload_files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAEjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,wBAAsB,YAAY,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EACtB,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,
|
1
|
+
{"version":3,"file":"upload_files.d.ts","sourceRoot":"","sources":["../../src/utils/upload_files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAEjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,wBAAsB,YAAY,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EACtB,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,CAAC,CAyCzB"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"view_api.d.ts","sourceRoot":"","sources":["../../src/utils/view_api.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAInC,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,
|
1
|
+
{"version":3,"file":"view_api.d.ts","sourceRoot":"","sources":["../../src/utils/view_api.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAInC,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA2DzD"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@gradio/client",
|
3
|
-
"version": "0.
|
3
|
+
"version": "0.19.0",
|
4
4
|
"description": "Gradio API client",
|
5
5
|
"type": "module",
|
6
6
|
"main": "dist/index.js",
|
@@ -13,7 +13,10 @@
|
|
13
13
|
"./package.json": "./package.json"
|
14
14
|
},
|
15
15
|
"dependencies": {
|
16
|
+
"@types/eventsource": "^1.1.15",
|
16
17
|
"bufferutil": "^4.0.7",
|
18
|
+
"eventsource": "^2.0.2",
|
19
|
+
"msw": "^2.2.1",
|
17
20
|
"semiver": "^1.1.0",
|
18
21
|
"typescript": "^5.0.0",
|
19
22
|
"ws": "^8.13.0"
|
@@ -29,6 +32,9 @@
|
|
29
32
|
"scripts": {
|
30
33
|
"bundle": "vite build --ssr",
|
31
34
|
"generate_types": "tsc",
|
32
|
-
"build": "pnpm bundle && pnpm generate_types"
|
35
|
+
"build": "pnpm bundle && pnpm generate_types",
|
36
|
+
"test": "pnpm test:client && pnpm test:client:node",
|
37
|
+
"test:client": "vitest run -c vite.config.js",
|
38
|
+
"test:client:node": "TEST_MODE=node vitest run -c vite.config.js"
|
33
39
|
}
|
34
40
|
}
|
package/src/client.ts
CHANGED
@@ -14,6 +14,7 @@ import type {
|
|
14
14
|
} from "./types";
|
15
15
|
import { view_api } from "./utils/view_api";
|
16
16
|
import { upload_files } from "./utils/upload_files";
|
17
|
+
import { upload, FileData } from "./upload";
|
17
18
|
import { handle_blob } from "./utils/handle_blob";
|
18
19
|
import { post_data } from "./utils/post_data";
|
19
20
|
import { predict } from "./utils/predict";
|
@@ -27,6 +28,7 @@ import {
|
|
27
28
|
} from "./helpers/init_helpers";
|
28
29
|
import { check_space_status } from "./helpers/spaces";
|
29
30
|
import { open_stream } from "./utils/stream";
|
31
|
+
import { API_INFO_ERROR_MSG, CONFIG_ERROR_MSG } from "./constants";
|
30
32
|
|
31
33
|
export class NodeBlob extends Blob {
|
32
34
|
constructor(blobParts?: BlobPart[], options?: BlobPropertyBag) {
|
@@ -49,22 +51,26 @@ export class Client {
|
|
49
51
|
stream_status = { open: false };
|
50
52
|
pending_stream_messages: Record<string, any[][]> = {};
|
51
53
|
pending_diff_streams: Record<string, any[][]> = {};
|
52
|
-
event_callbacks: Record<string, () => Promise<void>> = {};
|
54
|
+
event_callbacks: Record<string, (data?: unknown) => Promise<void>> = {};
|
53
55
|
unclosed_events: Set<string> = new Set();
|
54
56
|
heartbeat_event: EventSource | null = null;
|
55
57
|
|
56
|
-
|
57
|
-
input: RequestInfo | URL,
|
58
|
-
init?: RequestInit
|
59
|
-
): Promise<Response> {
|
58
|
+
fetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
|
60
59
|
return fetch(input, init);
|
61
60
|
}
|
62
61
|
|
63
|
-
|
64
|
-
if (typeof window
|
62
|
+
async stream(url: URL): Promise<EventSource> {
|
63
|
+
if (typeof window === "undefined" || typeof EventSource === "undefined") {
|
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
|
+
} else {
|
65
72
|
return new EventSource(url.toString());
|
66
73
|
}
|
67
|
-
return null; // todo: polyfill eventsource for node envs
|
68
74
|
}
|
69
75
|
|
70
76
|
view_api: () => Promise<ApiInfo<JsApiData>>;
|
@@ -73,6 +79,12 @@ export class Client {
|
|
73
79
|
files: (Blob | File)[],
|
74
80
|
upload_id?: string
|
75
81
|
) => Promise<UploadResponse>;
|
82
|
+
upload: (
|
83
|
+
file_data: FileData[],
|
84
|
+
root_url: string,
|
85
|
+
upload_id?: string,
|
86
|
+
max_file_size?: number
|
87
|
+
) => Promise<(FileData | null)[] | null>;
|
76
88
|
handle_blob: (
|
77
89
|
endpoint: string,
|
78
90
|
data: unknown[],
|
@@ -85,17 +97,17 @@ export class Client {
|
|
85
97
|
) => Promise<unknown[]>;
|
86
98
|
submit: (
|
87
99
|
endpoint: string | number,
|
88
|
-
data: unknown[],
|
100
|
+
data: unknown[] | Record<string, unknown>,
|
89
101
|
event_data?: unknown,
|
90
102
|
trigger_id?: number | null
|
91
103
|
) => SubmitReturn;
|
92
104
|
predict: (
|
93
105
|
endpoint: string | number,
|
94
|
-
data
|
106
|
+
data: unknown[] | Record<string, unknown>,
|
95
107
|
event_data?: unknown
|
96
|
-
) => Promise<
|
97
|
-
open_stream: () => void
|
98
|
-
resolve_config: (endpoint: string) => Promise<Config | undefined>;
|
108
|
+
) => Promise<SubmitReturn>;
|
109
|
+
open_stream: () => Promise<void>;
|
110
|
+
private resolve_config: (endpoint: string) => Promise<Config | undefined>;
|
99
111
|
constructor(app_reference: string, options: ClientOptions = {}) {
|
100
112
|
this.app_reference = app_reference;
|
101
113
|
this.options = options;
|
@@ -108,6 +120,7 @@ export class Client {
|
|
108
120
|
this.predict = predict.bind(this);
|
109
121
|
this.open_stream = open_stream.bind(this);
|
110
122
|
this.resolve_config = resolve_config.bind(this);
|
123
|
+
this.upload = upload.bind(this);
|
111
124
|
}
|
112
125
|
|
113
126
|
private async init(): Promise<void> {
|
@@ -125,12 +138,12 @@ export class Client {
|
|
125
138
|
await this._resolve_config().then(async ({ config }) => {
|
126
139
|
if (config) {
|
127
140
|
this.config = config;
|
128
|
-
if (this.config) {
|
141
|
+
if (this.config && this.config.connect_heartbeat) {
|
129
142
|
// connect to the heartbeat endpoint via GET request
|
130
143
|
const heartbeat_url = new URL(
|
131
144
|
`${this.config.root}/heartbeat/${this.session_hash}`
|
132
145
|
);
|
133
|
-
this.heartbeat_event = this.
|
146
|
+
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
|
134
147
|
|
135
148
|
if (this.config.space_id && this.options.hf_token) {
|
136
149
|
this.jwt = await get_jwt(
|
@@ -142,7 +155,7 @@ export class Client {
|
|
142
155
|
}
|
143
156
|
});
|
144
157
|
} catch (e) {
|
145
|
-
throw Error(
|
158
|
+
throw Error(CONFIG_ERROR_MSG + (e as Error).message);
|
146
159
|
}
|
147
160
|
|
148
161
|
this.api_info = await this.view_api();
|
@@ -182,7 +195,7 @@ export class Client {
|
|
182
195
|
config = await this.resolve_config(`${http_protocol}//${host}`);
|
183
196
|
|
184
197
|
if (!config) {
|
185
|
-
throw new Error(
|
198
|
+
throw new Error(CONFIG_ERROR_MSG);
|
186
199
|
}
|
187
200
|
|
188
201
|
return this.config_success(config);
|
@@ -224,7 +237,7 @@ export class Client {
|
|
224
237
|
try {
|
225
238
|
this.api_info = await this.view_api();
|
226
239
|
} catch (e) {
|
227
|
-
console.error(
|
240
|
+
console.error(API_INFO_ERROR_MSG + (e as Error).message);
|
228
241
|
}
|
229
242
|
|
230
243
|
return this.prepare_return_obj();
|
@@ -237,7 +250,7 @@ export class Client {
|
|
237
250
|
try {
|
238
251
|
this.config = await this._resolve_config();
|
239
252
|
if (!this.config) {
|
240
|
-
throw new Error(
|
253
|
+
throw new Error(CONFIG_ERROR_MSG);
|
241
254
|
}
|
242
255
|
|
243
256
|
const _config = await this.config_success(this.config);
|
@@ -263,7 +276,7 @@ export class Client {
|
|
263
276
|
data: unknown[] | { binary: boolean; data: Record<string, any> }
|
264
277
|
): Promise<unknown> {
|
265
278
|
if (!this.config) {
|
266
|
-
throw new Error(
|
279
|
+
throw new Error(CONFIG_ERROR_MSG);
|
267
280
|
}
|
268
281
|
|
269
282
|
const headers: {
|
@@ -315,14 +328,11 @@ export class Client {
|
|
315
328
|
}
|
316
329
|
|
317
330
|
try {
|
318
|
-
const response = await this.
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
headers
|
324
|
-
}
|
325
|
-
);
|
331
|
+
const response = await this.fetch(`${root_url}/component_server/`, {
|
332
|
+
method: "POST",
|
333
|
+
body: body,
|
334
|
+
headers
|
335
|
+
});
|
326
336
|
|
327
337
|
if (!response.ok) {
|
328
338
|
throw new Error(
|
@@ -363,4 +373,19 @@ export async function client(
|
|
363
373
|
return await Client.connect(app_reference, options);
|
364
374
|
}
|
365
375
|
|
376
|
+
/**
|
377
|
+
* @deprecated This method will be removed in v1.0. Use `Client.duplicate()` instead.
|
378
|
+
* Creates a duplicate of a space and returns a client instance for the duplicated space.
|
379
|
+
*
|
380
|
+
* @param {string} app_reference - The reference or URL to a Gradio space or app to duplicate.
|
381
|
+
* @param {DuplicateOptions} options - Configuration options for the client.
|
382
|
+
* @returns {Promise<Client>} A promise that resolves to a `Client` instance.
|
383
|
+
*/
|
384
|
+
export async function duplicate_space(
|
385
|
+
app_reference: string,
|
386
|
+
options: DuplicateOptions
|
387
|
+
): Promise<Client> {
|
388
|
+
return await Client.duplicate(app_reference, options);
|
389
|
+
}
|
390
|
+
|
366
391
|
export type ClientInstance = Client;
|
package/src/constants.ts
CHANGED
@@ -9,6 +9,8 @@ export const UPLOAD_URL = "upload";
|
|
9
9
|
export const LOGIN_URL = "login";
|
10
10
|
export const CONFIG_URL = "config";
|
11
11
|
export const API_INFO_URL = "info";
|
12
|
+
export const RUNTIME_URL = "runtime";
|
13
|
+
export const SLEEPTIME_URL = "sleeptime";
|
12
14
|
export const RAW_API_INFO_URL = "info?serialize=False";
|
13
15
|
export const SPACE_FETCHER_URL =
|
14
16
|
"https://gradio-space-api-fetcher-v2.hf.space/api";
|
@@ -16,5 +18,10 @@ export const RESET_URL = "reset";
|
|
16
18
|
export const SPACE_URL = "https://hf.space/{}";
|
17
19
|
|
18
20
|
// messages
|
19
|
-
export const QUEUE_FULL_MSG =
|
20
|
-
|
21
|
+
export const QUEUE_FULL_MSG =
|
22
|
+
"This application is currently busy. Please try again. ";
|
23
|
+
export const BROKEN_CONNECTION_MSG = "Connection errored out. ";
|
24
|
+
export const CONFIG_ERROR_MSG = "Could not resolve app config. ";
|
25
|
+
export const SPACE_STATUS_ERROR_MSG = "Could not get space status. ";
|
26
|
+
export const API_INFO_ERROR_MSG = "Could not get API info. ";
|
27
|
+
export const SPACE_METADATA_ERROR_MSG = "Space metadata could not be loaded. ";
|
package/src/helpers/api_info.ts
CHANGED
@@ -29,16 +29,16 @@ export async function process_endpoint(
|
|
29
29
|
{ headers }
|
30
30
|
);
|
31
31
|
|
32
|
-
if (res.status !== 200)
|
33
|
-
throw new Error("Space metadata could not be loaded.");
|
34
32
|
const _host = (await res.json()).host;
|
35
33
|
|
36
34
|
return {
|
37
35
|
space_id: app_reference,
|
38
36
|
...determine_protocol(_host)
|
39
37
|
};
|
40
|
-
} catch (e
|
41
|
-
throw new Error(
|
38
|
+
} catch (e) {
|
39
|
+
throw new Error(
|
40
|
+
"Space metadata could not be loaded. " + (e as Error).message
|
41
|
+
);
|
42
42
|
}
|
43
43
|
}
|
44
44
|
|
@@ -298,3 +298,74 @@ export function handle_message(
|
|
298
298
|
|
299
299
|
return { type: "none", status: { stage: "error", queue } };
|
300
300
|
}
|
301
|
+
|
302
|
+
/**
|
303
|
+
* Maps the provided `data` to the parameters defined by the `/info` endpoint response.
|
304
|
+
* This allows us to support both positional and keyword arguments passed to the client
|
305
|
+
* and ensures that all parameters are either directly provided or have default values assigned.
|
306
|
+
*
|
307
|
+
* @param {unknown[] | Record<string, unknown>} data - The input data for the function,
|
308
|
+
* which can be either an array of values for positional arguments or an object
|
309
|
+
* with key-value pairs for keyword arguments.
|
310
|
+
* @param {JsApiData[]} parameters - Array of parameter descriptions retrieved from the
|
311
|
+
* `/info` endpoint.
|
312
|
+
*
|
313
|
+
* @returns {unknown[]} - Returns an array of resolved data where each element corresponds
|
314
|
+
* to the expected parameter from the API. The `parameter_default` value is used where
|
315
|
+
* a value is not provided for a parameter, and optional parameters without defaults are
|
316
|
+
* set to `undefined`.
|
317
|
+
*
|
318
|
+
* @throws {Error} - Throws an error:
|
319
|
+
* - If more arguments are provided than are defined in the parameters.
|
320
|
+
* * - If no parameter value is provided for a required parameter and no default value is defined.
|
321
|
+
* - If an argument is provided that does not match any defined parameter.
|
322
|
+
*/
|
323
|
+
|
324
|
+
export const map_data_to_params = (
|
325
|
+
data: unknown[] | Record<string, unknown>,
|
326
|
+
api_info: ApiInfo<JsApiData | ApiData>
|
327
|
+
): unknown[] => {
|
328
|
+
const parameters = Object.values(api_info.named_endpoints).flatMap(
|
329
|
+
(values) => values.parameters
|
330
|
+
);
|
331
|
+
|
332
|
+
if (Array.isArray(data)) {
|
333
|
+
if (data.length > parameters.length) {
|
334
|
+
console.warn("Too many arguments provided for the endpoint.");
|
335
|
+
}
|
336
|
+
return data;
|
337
|
+
}
|
338
|
+
|
339
|
+
const resolved_data: unknown[] = [];
|
340
|
+
const provided_keys = Object.keys(data);
|
341
|
+
|
342
|
+
parameters.forEach((param, index) => {
|
343
|
+
if (data.hasOwnProperty(param.parameter_name)) {
|
344
|
+
resolved_data[index] = data[param.parameter_name];
|
345
|
+
} else if (param.parameter_has_default) {
|
346
|
+
resolved_data[index] = param.parameter_default;
|
347
|
+
} else {
|
348
|
+
throw new Error(
|
349
|
+
`No value provided for required parameter: ${param.parameter_name}`
|
350
|
+
);
|
351
|
+
}
|
352
|
+
});
|
353
|
+
|
354
|
+
provided_keys.forEach((key) => {
|
355
|
+
if (!parameters.some((param) => param.parameter_name === key)) {
|
356
|
+
throw new Error(
|
357
|
+
`Parameter \`${key}\` is not a valid keyword argument. Please refer to the API for usage.`
|
358
|
+
);
|
359
|
+
}
|
360
|
+
});
|
361
|
+
|
362
|
+
resolved_data.forEach((value, idx) => {
|
363
|
+
if (value === undefined && !parameters[idx].parameter_has_default) {
|
364
|
+
throw new Error(
|
365
|
+
`No value provided for required parameter: ${parameters[idx].parameter_name}`
|
366
|
+
);
|
367
|
+
}
|
368
|
+
});
|
369
|
+
|
370
|
+
return resolved_data;
|
371
|
+
};
|