@gradio/core 1.0.0-dev.0 → 1.0.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 +110 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/src/Blocks.svelte +534 -1001
- package/dist/src/Blocks.svelte.d.ts +32 -45
- package/dist/src/Embed.svelte +82 -55
- package/dist/src/Embed.svelte.d.ts +39 -30
- package/dist/src/Login.svelte +33 -29
- package/dist/src/Login.svelte.d.ts +21 -19
- package/dist/src/MountComponents.svelte +19 -25
- package/dist/src/MountComponents.svelte.d.ts +5 -28
- package/dist/src/{init.d.ts → _init.d.ts} +5 -4
- package/dist/src/{init.js → _init.js} +31 -108
- package/dist/src/api_docs/ApiBanner.svelte +12 -8
- package/dist/src/api_docs/ApiBanner.svelte.d.ts +22 -20
- package/dist/src/api_docs/ApiDocs.svelte +356 -247
- package/dist/src/api_docs/ApiDocs.svelte.d.ts +27 -24
- package/dist/src/api_docs/ApiRecorder.svelte +6 -3
- package/dist/src/api_docs/ApiRecorder.svelte.d.ts +19 -17
- package/dist/src/api_docs/CodeSnippet.svelte +122 -48
- package/dist/src/api_docs/CodeSnippet.svelte.d.ts +29 -25
- package/dist/src/api_docs/CopyButton.svelte +69 -13
- package/dist/src/api_docs/CopyButton.svelte.d.ts +18 -16
- package/dist/src/api_docs/CopyMarkdown.svelte +734 -0
- package/dist/src/api_docs/CopyMarkdown.svelte.d.ts +37 -0
- package/dist/src/api_docs/EndpointDetail.svelte +81 -23
- package/dist/src/api_docs/EndpointDetail.svelte.d.ts +23 -18
- package/dist/src/api_docs/IconArrowUpRight.svelte +34 -0
- package/dist/src/api_docs/IconArrowUpRight.svelte.d.ts +20 -0
- package/dist/src/api_docs/IconCaret.svelte +39 -0
- package/dist/src/api_docs/IconCaret.svelte.d.ts +20 -0
- package/dist/src/api_docs/IconHuggingChat.svelte +62 -0
- package/dist/src/api_docs/IconHuggingChat.svelte.d.ts +20 -0
- package/dist/src/api_docs/InputPayload.svelte +17 -11
- package/dist/src/api_docs/InputPayload.svelte.d.ts +25 -23
- package/dist/src/api_docs/InstallSnippet.svelte +9 -6
- package/dist/src/api_docs/InstallSnippet.svelte.d.ts +18 -16
- package/dist/src/api_docs/MCPSnippet.svelte +139 -126
- package/dist/src/api_docs/MCPSnippet.svelte.d.ts +60 -58
- package/dist/src/api_docs/NoApi.svelte +7 -4
- package/dist/src/api_docs/NoApi.svelte.d.ts +20 -18
- package/dist/src/api_docs/ParametersSnippet.svelte +8 -6
- package/dist/src/api_docs/ParametersSnippet.svelte.d.ts +21 -19
- package/dist/src/api_docs/PercentileChart.svelte +125 -0
- package/dist/src/api_docs/PercentileChart.svelte.d.ts +22 -0
- package/dist/src/api_docs/RecordingSnippet.svelte +124 -110
- package/dist/src/api_docs/RecordingSnippet.svelte.d.ts +24 -22
- package/dist/src/api_docs/ResponseSnippet.svelte +7 -5
- package/dist/src/api_docs/ResponseSnippet.svelte.d.ts +21 -19
- package/dist/src/api_docs/Settings.svelte +73 -62
- package/dist/src/api_docs/Settings.svelte.d.ts +25 -23
- package/dist/src/api_docs/SettingsBanner.svelte +11 -8
- package/dist/src/api_docs/SettingsBanner.svelte.d.ts +20 -18
- package/dist/src/api_docs/TryButton.svelte +5 -3
- package/dist/src/api_docs/TryButton.svelte.d.ts +19 -17
- package/dist/src/api_docs/img/IconCheck.svelte +33 -0
- package/dist/src/api_docs/img/IconCheck.svelte.d.ts +26 -0
- package/dist/src/api_docs/img/IconCopy.svelte +40 -0
- package/dist/src/api_docs/img/IconCopy.svelte.d.ts +26 -0
- package/dist/src/api_docs/img/clear.svelte.d.ts +22 -21
- package/dist/src/dependency.d.ts +145 -0
- package/dist/src/dependency.js +668 -0
- package/dist/src/init.svelte.d.ts +78 -0
- package/dist/src/init.svelte.js +469 -0
- package/dist/src/init_utils.d.ts +32 -0
- package/dist/src/init_utils.js +73 -0
- package/dist/src/lang/en.json +10 -1
- package/dist/src/lang/get_lang_names.js +0 -3
- package/dist/src/lang/ru.json +10 -1
- package/dist/src/stores.d.ts +0 -21
- package/dist/src/stories/I18nMultiLanguageTestComponent.svelte +5 -3
- package/dist/src/stories/I18nMultiLanguageTestComponent.svelte.d.ts +16 -14
- package/dist/src/stories/I18nTestSetup.svelte +14 -10
- package/dist/src/stories/I18nTestSetup.svelte.d.ts +18 -16
- package/dist/src/types.d.ts +31 -26
- package/index.ts +1 -1
- package/package.json +62 -63
- package/src/Blocks.svelte +360 -1063
- package/src/MountComponents.svelte +17 -27
- package/src/{init.ts → _init.ts} +49 -126
- package/src/api_docs/ApiDocs.svelte +84 -62
- package/src/api_docs/CodeSnippet.svelte +83 -24
- package/src/api_docs/CopyButton.svelte +61 -7
- package/src/api_docs/CopyMarkdown.svelte +734 -0
- package/src/api_docs/EndpointDetail.svelte +73 -17
- package/src/api_docs/IconArrowUpRight.svelte +34 -0
- package/src/api_docs/IconCaret.svelte +39 -0
- package/src/api_docs/IconHuggingChat.svelte +62 -0
- package/src/api_docs/MCPSnippet.svelte +44 -73
- package/src/api_docs/ParametersSnippet.svelte +1 -1
- package/src/api_docs/PercentileChart.svelte +125 -0
- package/src/api_docs/ResponseSnippet.svelte +1 -1
- package/src/api_docs/Settings.svelte +11 -11
- package/src/api_docs/img/IconCheck.svelte +33 -0
- package/src/api_docs/img/IconCopy.svelte +40 -0
- package/src/dependency.ts +909 -0
- package/src/init.svelte.ts +717 -0
- package/src/init_utils.ts +99 -0
- package/src/lang/en.json +10 -1
- package/src/lang/get_lang_names.js +0 -3
- package/src/lang/ru.json +10 -1
- package/src/stores.ts +22 -22
- package/src/types.ts +55 -43
- package/dist/src/Render.svelte +0 -105
- package/dist/src/Render.svelte.d.ts +0 -31
- package/dist/src/RenderComponent.svelte +0 -72
- package/dist/src/RenderComponent.svelte.d.ts +0 -33
- package/src/Render.svelte +0 -126
- package/src/RenderComponent.svelte +0 -91
|
@@ -1,230 +1,309 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
let
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
let
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
let
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/* eslint-disable */
|
|
3
|
+
import { onMount, createEventDispatcher } from "svelte";
|
|
4
|
+
import type { ComponentMeta, Dependency } from "../types";
|
|
5
|
+
import NoApi from "./NoApi.svelte";
|
|
6
|
+
import type { Client } from "@gradio/client";
|
|
7
|
+
import type { Payload } from "../types";
|
|
8
|
+
|
|
9
|
+
import ApiBanner from "./ApiBanner.svelte";
|
|
10
|
+
import { BaseButton as Button } from "@gradio/button";
|
|
11
|
+
import ParametersSnippet from "./ParametersSnippet.svelte";
|
|
12
|
+
import InstallSnippet from "./InstallSnippet.svelte";
|
|
13
|
+
import CodeSnippet from "./CodeSnippet.svelte";
|
|
14
|
+
import RecordingSnippet from "./RecordingSnippet.svelte";
|
|
15
|
+
import CopyButton from "./CopyButton.svelte";
|
|
16
|
+
import { Block } from "@gradio/atoms";
|
|
17
|
+
|
|
18
|
+
import python from "./img/python.svg";
|
|
19
|
+
import javascript from "./img/javascript.svg";
|
|
20
|
+
import bash from "./img/bash.svg";
|
|
21
|
+
import ResponseSnippet from "./ResponseSnippet.svelte";
|
|
22
|
+
import mcp from "./img/mcp.svg";
|
|
23
|
+
import MCPSnippet from "./MCPSnippet.svelte";
|
|
24
|
+
import CopyMarkdown from "./CopyMarkdown.svelte";
|
|
25
|
+
|
|
26
|
+
export let dependencies: Dependency[];
|
|
27
|
+
export let root: string;
|
|
28
|
+
export let app: Awaited<ReturnType<typeof Client.connect>>;
|
|
29
|
+
export let space_id: string | null;
|
|
30
|
+
export let root_node: ComponentMeta;
|
|
31
|
+
export let username: string | null;
|
|
32
|
+
export let last_api_call: Payload | null = null;
|
|
33
|
+
|
|
34
|
+
const js_docs =
|
|
35
|
+
"https://www.gradio.app/guides/getting-started-with-the-js-client";
|
|
36
|
+
const py_docs =
|
|
37
|
+
"https://www.gradio.app/guides/getting-started-with-the-python-client";
|
|
38
|
+
const bash_docs =
|
|
39
|
+
"https://www.gradio.app/guides/querying-gradio-apps-with-curl";
|
|
40
|
+
const spaces_docs_suffix = "#connecting-to-a-hugging-face-space";
|
|
41
|
+
const mcp_docs =
|
|
42
|
+
"https://www.gradio.app/guides/building-mcp-server-with-gradio";
|
|
43
|
+
|
|
44
|
+
let api_count = dependencies.filter(
|
|
45
|
+
(dependency) => dependency.api_visibility === "public"
|
|
46
|
+
).length;
|
|
47
|
+
|
|
48
|
+
if (root === "") {
|
|
49
|
+
root = location.protocol + "//" + location.host + location.pathname;
|
|
50
|
+
}
|
|
51
|
+
if (!root.endsWith("/")) {
|
|
52
|
+
root += "/";
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export let api_calls: Payload[] = [];
|
|
56
|
+
let current_language: "python" | "javascript" | "bash" | "mcp" = "python";
|
|
57
|
+
|
|
58
|
+
$: sorted_dependencies = (() => {
|
|
59
|
+
const valid = dependencies.filter(
|
|
60
|
+
(dep) =>
|
|
61
|
+
dep.api_visibility === "public" &&
|
|
62
|
+
info?.named_endpoints?.["/" + dep.api_name]
|
|
63
|
+
);
|
|
64
|
+
if (info && last_api_call) {
|
|
65
|
+
const mostRecent = valid.find((dep) => dep.id === last_api_call.fn_index);
|
|
66
|
+
const others = valid.filter((dep) => dep.id !== last_api_call.fn_index);
|
|
67
|
+
return mostRecent ? [mostRecent, ...others] : valid;
|
|
68
|
+
}
|
|
69
|
+
return valid;
|
|
70
|
+
})();
|
|
71
|
+
|
|
72
|
+
function set_query_param(key: string, value: string) {
|
|
73
|
+
const url = new URL(window.location.href);
|
|
74
|
+
url.searchParams.set(key, value);
|
|
75
|
+
history.replaceState(null, "", url.toString());
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function get_query_param(key: string): string | null {
|
|
79
|
+
const url = new URL(window.location.href);
|
|
80
|
+
return url.searchParams.get(key);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function is_valid_language(lang: string | null): boolean {
|
|
84
|
+
return ["python", "javascript", "bash", "mcp"].includes(lang ?? "");
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const langs = [
|
|
88
|
+
["python", "Python", python],
|
|
89
|
+
["javascript", "JavaScript", javascript],
|
|
90
|
+
["bash", "cURL", bash],
|
|
91
|
+
["mcp", "MCP", mcp]
|
|
92
|
+
] as const;
|
|
93
|
+
|
|
94
|
+
let is_running = false;
|
|
95
|
+
let mcp_server_active = false;
|
|
96
|
+
|
|
97
|
+
async function get_info(): Promise<{
|
|
98
|
+
named_endpoints: any;
|
|
99
|
+
unnamed_endpoints: any;
|
|
100
|
+
}> {
|
|
101
|
+
let response = await fetch(
|
|
102
|
+
root.replace(/\/$/, "") + app.api_prefix + "/info"
|
|
103
|
+
);
|
|
104
|
+
let data = await response.json();
|
|
105
|
+
return data;
|
|
106
|
+
}
|
|
107
|
+
async function get_js_info(): Promise<Record<string, any>> {
|
|
108
|
+
let js_api_info = await app.view_api();
|
|
109
|
+
return js_api_info;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
let info: {
|
|
113
|
+
named_endpoints: any;
|
|
114
|
+
unnamed_endpoints: any;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
let js_info: Record<string, any>;
|
|
118
|
+
let analytics: Record<string, any>;
|
|
119
|
+
|
|
120
|
+
get_info().then((data) => {
|
|
121
|
+
info = data;
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
get_js_info().then((js_api_info) => {
|
|
125
|
+
js_info = js_api_info;
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
async function get_summary(): Promise<{
|
|
129
|
+
functions: any;
|
|
130
|
+
}> {
|
|
131
|
+
let response = await fetch(root.replace(/\/$/, "") + "/monitoring/summary");
|
|
132
|
+
let data = await response.json();
|
|
133
|
+
return data;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
get_summary().then((summary) => {
|
|
137
|
+
analytics = summary.functions;
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
const dispatch = createEventDispatcher();
|
|
141
|
+
|
|
142
|
+
$: selected_tools_array = Array.from(selected_tools);
|
|
143
|
+
$: selected_tools_without_prefix =
|
|
144
|
+
selected_tools_array.map(remove_tool_prefix);
|
|
145
|
+
$: mcp_server_url_streamable =
|
|
146
|
+
selected_tools_array.length > 0 &&
|
|
147
|
+
selected_tools_array.length < tools.length
|
|
148
|
+
? `${root}gradio_api/mcp/?tools=${selected_tools_without_prefix.join(",")}`
|
|
149
|
+
: `${root}gradio_api/mcp/`;
|
|
150
|
+
|
|
151
|
+
interface ToolParameter {
|
|
152
|
+
title?: string;
|
|
153
|
+
type: string;
|
|
154
|
+
description: string;
|
|
155
|
+
format?: string;
|
|
156
|
+
default?: any;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
interface Tool {
|
|
160
|
+
name: string;
|
|
161
|
+
description: string;
|
|
162
|
+
parameters: Record<string, ToolParameter>;
|
|
163
|
+
expanded?: boolean;
|
|
164
|
+
meta: {
|
|
165
|
+
mcp_type: "tool" | "resource" | "prompt";
|
|
166
|
+
file_data_present: boolean;
|
|
167
|
+
endpoint_name: string;
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
let tools: Tool[] = [];
|
|
172
|
+
let headers: string[] = [];
|
|
173
|
+
let mcp_json_stdio: any;
|
|
174
|
+
let file_data_present = false;
|
|
175
|
+
let selected_tools: Set<string> = new Set();
|
|
176
|
+
let tool_prefix = space_id ? space_id.split("/").pop() + "_" : "";
|
|
177
|
+
|
|
178
|
+
function remove_tool_prefix(toolName: string): string {
|
|
179
|
+
if (tool_prefix && toolName.startsWith(tool_prefix)) {
|
|
180
|
+
return toolName.slice(tool_prefix.length);
|
|
181
|
+
}
|
|
182
|
+
return toolName;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const upload_file_mcp_server = {
|
|
186
|
+
command: "uvx",
|
|
187
|
+
args: [
|
|
188
|
+
"--from",
|
|
189
|
+
"gradio[mcp]",
|
|
190
|
+
"gradio",
|
|
191
|
+
"upload-mcp",
|
|
192
|
+
root,
|
|
193
|
+
"<UPLOAD_DIRECTORY>"
|
|
194
|
+
]
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
async function fetch_mcp_tools() {
|
|
198
|
+
try {
|
|
199
|
+
let schema_url = `${root}gradio_api/mcp/schema`;
|
|
200
|
+
const response = await fetch(schema_url);
|
|
201
|
+
const schema = await response.json();
|
|
202
|
+
file_data_present = schema
|
|
203
|
+
.map((tool: any) => tool.meta?.file_data_present)
|
|
204
|
+
.some((present: boolean) => present);
|
|
205
|
+
|
|
206
|
+
tools = schema.map((tool: any) => ({
|
|
207
|
+
name: tool.name,
|
|
208
|
+
description: tool.description || "",
|
|
209
|
+
parameters: tool.inputSchema?.properties || {},
|
|
210
|
+
meta: tool.meta,
|
|
211
|
+
expanded: false,
|
|
212
|
+
endpoint_name: tool.endpoint_name
|
|
213
|
+
}));
|
|
214
|
+
selected_tools = new Set(tools.map((tool) => tool.name));
|
|
215
|
+
headers = schema.map((tool: any) => tool.meta?.headers || []).flat();
|
|
216
|
+
if (headers.length > 0) {
|
|
217
|
+
mcp_json_stdio = {
|
|
218
|
+
mcpServers: {
|
|
219
|
+
gradio: {
|
|
220
|
+
command: "npx",
|
|
221
|
+
args: [
|
|
222
|
+
"mcp-remote",
|
|
223
|
+
mcp_server_url_streamable,
|
|
224
|
+
"--transport",
|
|
225
|
+
"streamable-http",
|
|
226
|
+
...headers
|
|
227
|
+
.map((header) => [
|
|
228
|
+
"--header",
|
|
229
|
+
`${header}: <YOUR_HEADER_VALUE>`
|
|
230
|
+
])
|
|
231
|
+
.flat()
|
|
232
|
+
]
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
} else {
|
|
237
|
+
mcp_json_stdio = {
|
|
238
|
+
mcpServers: {
|
|
239
|
+
gradio: {
|
|
240
|
+
command: "npx",
|
|
241
|
+
args: [
|
|
242
|
+
"mcp-remote",
|
|
243
|
+
mcp_server_url_streamable,
|
|
244
|
+
"--transport",
|
|
245
|
+
"streamable-http"
|
|
246
|
+
]
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
if (file_data_present) {
|
|
251
|
+
mcp_json_stdio.mcpServers.upload_files_to_gradio =
|
|
252
|
+
upload_file_mcp_server;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
} catch (error) {
|
|
256
|
+
console.error("Failed to fetch MCP tools:", error);
|
|
257
|
+
tools = [];
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
let markdown_code_snippets: Record<string, Record<string, string>> = {};
|
|
262
|
+
|
|
263
|
+
$: markdown_code_snippets;
|
|
264
|
+
|
|
265
|
+
let config_snippets: Record<string, string> = {};
|
|
266
|
+
|
|
267
|
+
$: config_snippets;
|
|
268
|
+
|
|
269
|
+
onMount(() => {
|
|
270
|
+
const controller = new AbortController();
|
|
271
|
+
const signal = controller.signal;
|
|
272
|
+
|
|
273
|
+
document.body.style.overflow = "hidden";
|
|
274
|
+
if ("parentIFrame" in window) {
|
|
275
|
+
window.parentIFrame?.scrollTo(0, 0);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
const lang_param = get_query_param("lang");
|
|
279
|
+
if (is_valid_language(lang_param)) {
|
|
280
|
+
current_language = lang_param as "python" | "javascript" | "bash" | "mcp";
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
const mcp_schema_url = `${root}gradio_api/mcp/schema`;
|
|
284
|
+
fetch(mcp_schema_url, { signal: signal })
|
|
285
|
+
.then((response) => {
|
|
286
|
+
mcp_server_active = response.ok;
|
|
287
|
+
if (mcp_server_active) {
|
|
288
|
+
fetch_mcp_tools();
|
|
289
|
+
if (!is_valid_language(lang_param)) {
|
|
290
|
+
current_language = "mcp";
|
|
291
|
+
}
|
|
292
|
+
} else {
|
|
293
|
+
if (!is_valid_language(lang_param)) {
|
|
294
|
+
current_language = "python";
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
controller.abort();
|
|
298
|
+
})
|
|
299
|
+
.catch(() => {
|
|
300
|
+
mcp_server_active = false;
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
return () => {
|
|
304
|
+
document.body.style.overflow = "auto";
|
|
305
|
+
};
|
|
306
|
+
});
|
|
228
307
|
</script>
|
|
229
308
|
|
|
230
309
|
{#if info && analytics}
|
|
@@ -239,10 +318,32 @@ onMount(() => {
|
|
|
239
318
|
</div>
|
|
240
319
|
|
|
241
320
|
<div class="docs-wrap">
|
|
242
|
-
<div
|
|
321
|
+
<div
|
|
322
|
+
class="client-doc"
|
|
323
|
+
style="display: flex; align-items: center; justify-content: space-between;"
|
|
324
|
+
>
|
|
243
325
|
<p style="font-size: var(--text-lg);">
|
|
244
326
|
Choose one of the following ways to interact with the API.
|
|
245
327
|
</p>
|
|
328
|
+
<CopyMarkdown
|
|
329
|
+
{current_language}
|
|
330
|
+
{space_id}
|
|
331
|
+
{root}
|
|
332
|
+
{api_count}
|
|
333
|
+
{tools}
|
|
334
|
+
{py_docs}
|
|
335
|
+
{js_docs}
|
|
336
|
+
{bash_docs}
|
|
337
|
+
{mcp_docs}
|
|
338
|
+
{spaces_docs_suffix}
|
|
339
|
+
{mcp_server_active}
|
|
340
|
+
{mcp_server_url_streamable}
|
|
341
|
+
{config_snippets}
|
|
342
|
+
{markdown_code_snippets}
|
|
343
|
+
{dependencies}
|
|
344
|
+
{info}
|
|
345
|
+
{js_info}
|
|
346
|
+
/>
|
|
246
347
|
</div>
|
|
247
348
|
<div class="endpoint">
|
|
248
349
|
<div class="snippets">
|
|
@@ -305,25 +406,27 @@ onMount(() => {
|
|
|
305
406
|
href={current_language == "python" ? py_docs : js_docs}
|
|
306
407
|
target="_blank">docs</a
|
|
307
408
|
>) if you don't already have it installed.
|
|
308
|
-
{:else if current_language == "
|
|
309
|
-
<MCPSnippet
|
|
310
|
-
{mcp_server_active}
|
|
311
|
-
{mcp_server_url}
|
|
312
|
-
{mcp_server_url_streamable}
|
|
313
|
-
tools={tools.filter((tool) => selected_tools.has(tool.name))}
|
|
314
|
-
all_tools={tools}
|
|
315
|
-
bind:selected_tools
|
|
316
|
-
{mcp_json_sse}
|
|
317
|
-
{mcp_json_stdio}
|
|
318
|
-
{file_data_present}
|
|
319
|
-
{mcp_docs}
|
|
320
|
-
{analytics}
|
|
321
|
-
/>
|
|
322
|
-
{:else}
|
|
409
|
+
{:else if current_language == "bash"}
|
|
323
410
|
1. Confirm that you have cURL installed on your system.
|
|
324
411
|
{/if}
|
|
325
412
|
</p>
|
|
326
413
|
|
|
414
|
+
<div class:hidden={current_language !== "mcp"}>
|
|
415
|
+
<MCPSnippet
|
|
416
|
+
{mcp_server_active}
|
|
417
|
+
{mcp_server_url_streamable}
|
|
418
|
+
tools={tools.filter((tool) => selected_tools.has(tool.name))}
|
|
419
|
+
all_tools={tools}
|
|
420
|
+
bind:selected_tools
|
|
421
|
+
{mcp_json_stdio}
|
|
422
|
+
{file_data_present}
|
|
423
|
+
{mcp_docs}
|
|
424
|
+
{analytics}
|
|
425
|
+
{root}
|
|
426
|
+
bind:config_snippets
|
|
427
|
+
/>
|
|
428
|
+
</div>
|
|
429
|
+
|
|
327
430
|
{#if current_language !== "mcp"}
|
|
328
431
|
<InstallSnippet {current_language} />
|
|
329
432
|
|
|
@@ -377,9 +480,9 @@ onMount(() => {
|
|
|
377
480
|
{/if}
|
|
378
481
|
{/if}
|
|
379
482
|
|
|
380
|
-
{
|
|
381
|
-
{#each
|
|
382
|
-
{#if
|
|
483
|
+
<div class:hidden={current_language === "mcp"}>
|
|
484
|
+
{#each sorted_dependencies as dependency}
|
|
485
|
+
{#if info.named_endpoints["/" + dependency.api_name]}
|
|
383
486
|
<div class="endpoint-container">
|
|
384
487
|
<CodeSnippet
|
|
385
488
|
endpoint_parameters={info.named_endpoints[
|
|
@@ -395,6 +498,8 @@ onMount(() => {
|
|
|
395
498
|
"/" + dependency.api_name
|
|
396
499
|
].description}
|
|
397
500
|
{analytics}
|
|
501
|
+
{last_api_call}
|
|
502
|
+
bind:markdown_code_snippets
|
|
398
503
|
/>
|
|
399
504
|
|
|
400
505
|
<ParametersSnippet
|
|
@@ -419,7 +524,7 @@ onMount(() => {
|
|
|
419
524
|
</div>
|
|
420
525
|
{/if}
|
|
421
526
|
{/each}
|
|
422
|
-
|
|
527
|
+
</div>
|
|
423
528
|
</div>
|
|
424
529
|
</div>
|
|
425
530
|
{:else}
|
|
@@ -614,4 +719,8 @@ onMount(() => {
|
|
|
614
719
|
.api-name {
|
|
615
720
|
color: var(--color-accent);
|
|
616
721
|
}
|
|
722
|
+
|
|
723
|
+
.hidden {
|
|
724
|
+
display: none;
|
|
725
|
+
}
|
|
617
726
|
</style>
|