@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,30 +1,45 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
+
import type { Payload } from "../types";
|
|
2
3
|
export let api_name: string | null = null;
|
|
3
4
|
export let description: string | null = null;
|
|
4
5
|
export let analytics: Record<string, any>;
|
|
6
|
+
export let last_api_call: Payload | null = null;
|
|
7
|
+
export let dependency_id: number | null = null;
|
|
5
8
|
import { format_latency, get_color_from_success_rate } from "./utils";
|
|
9
|
+
import PercentileChart from "./PercentileChart.svelte";
|
|
6
10
|
|
|
7
11
|
const success_rate = api_name ? analytics[api_name]?.success_rate : 0;
|
|
8
12
|
const color = get_color_from_success_rate(success_rate);
|
|
13
|
+
$: is_most_recently_used = last_api_call?.fn_index === dependency_id;
|
|
9
14
|
</script>
|
|
10
15
|
|
|
11
16
|
<h3>
|
|
12
17
|
API name:
|
|
13
18
|
<span class="post">{"/" + api_name}</span>
|
|
14
|
-
<span class="desc">
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
<span class="desc">
|
|
20
|
+
{description}
|
|
21
|
+
{#if analytics && api_name && analytics[api_name]}
|
|
22
|
+
{@const endpoint_analytics = analytics[api_name]}
|
|
23
|
+
{@const p50 = endpoint_analytics.process_time_percentiles["50th"]}
|
|
24
|
+
{@const p90 = endpoint_analytics.process_time_percentiles["90th"]}
|
|
25
|
+
{@const p99 = endpoint_analytics.process_time_percentiles["99th"]}
|
|
26
|
+
<span class="analytics-inline">
|
|
27
|
+
<span class="analytics-content">
|
|
28
|
+
<span class="analytics-text-wrapper">
|
|
29
|
+
{endpoint_analytics.total_requests} requests ({Math.round(
|
|
30
|
+
success_rate * 100
|
|
31
|
+
)}% successful, p50: {format_latency(p50)})
|
|
32
|
+
</span>
|
|
33
|
+
<div class="analytics-tooltip">
|
|
34
|
+
<PercentileChart {p50} {p90} {p99} />
|
|
35
|
+
</div>
|
|
36
|
+
</span>
|
|
37
|
+
{#if is_most_recently_used}
|
|
38
|
+
<span class="most-recently-used">Most recently used</span>
|
|
39
|
+
{/if}
|
|
40
|
+
</span>
|
|
41
|
+
{/if}
|
|
42
|
+
</span>
|
|
28
43
|
</h3>
|
|
29
44
|
|
|
30
45
|
<style>
|
|
@@ -46,14 +61,55 @@
|
|
|
46
61
|
font-weight: var(--weight-semibold);
|
|
47
62
|
}
|
|
48
63
|
|
|
49
|
-
.analytics {
|
|
64
|
+
.analytics-inline {
|
|
65
|
+
display: inline-flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
gap: var(--size-2);
|
|
68
|
+
margin-left: var(--size-2);
|
|
50
69
|
color: var(--body-text-color-subdued);
|
|
51
|
-
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.analytics-content {
|
|
73
|
+
position: relative;
|
|
74
|
+
display: inline-block;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.analytics-text-wrapper {
|
|
78
|
+
cursor: help;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.analytics-tooltip {
|
|
82
|
+
position: absolute;
|
|
83
|
+
bottom: 100%;
|
|
84
|
+
left: 50%;
|
|
85
|
+
transform: translateX(-50%);
|
|
86
|
+
margin-bottom: var(--size-2);
|
|
87
|
+
opacity: 0;
|
|
88
|
+
pointer-events: none;
|
|
89
|
+
transition: opacity 0.2s ease;
|
|
90
|
+
z-index: 1000;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.analytics-content:hover .analytics-tooltip {
|
|
94
|
+
opacity: 1;
|
|
95
|
+
pointer-events: auto;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.most-recently-used {
|
|
99
|
+
display: inline-block;
|
|
100
|
+
color: #fd7b00;
|
|
101
|
+
background: #fff4e6;
|
|
102
|
+
border: 1px solid #ffd9b3;
|
|
103
|
+
border-radius: var(--radius-sm);
|
|
104
|
+
padding: var(--size-1) var(--size-2);
|
|
105
|
+
font-size: var(--text-sm);
|
|
106
|
+
font-weight: var(--weight-medium);
|
|
107
|
+
white-space: nowrap;
|
|
52
108
|
}
|
|
53
109
|
|
|
54
110
|
.desc {
|
|
55
111
|
color: var(--body-text-color);
|
|
56
112
|
font-size: var(--text-lg);
|
|
57
|
-
margin-
|
|
113
|
+
margin-left: var(--size-2);
|
|
58
114
|
}
|
|
59
115
|
</style>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
export let classNames = "";
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<svg
|
|
6
|
+
class={classNames || "menu-icon-arrow"}
|
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
8
|
+
width="24"
|
|
9
|
+
height="24"
|
|
10
|
+
viewBox="0 0 24 24"
|
|
11
|
+
fill="none"
|
|
12
|
+
stroke="currentColor"
|
|
13
|
+
stroke-width="1.75"
|
|
14
|
+
stroke-linecap="round"
|
|
15
|
+
stroke-linejoin="round"
|
|
16
|
+
>
|
|
17
|
+
<path d="M7 7h10v10"></path>
|
|
18
|
+
<path d="M7 17 17 7"></path>
|
|
19
|
+
</svg>
|
|
20
|
+
|
|
21
|
+
<style>
|
|
22
|
+
.menu-icon-arrow {
|
|
23
|
+
width: 1rem;
|
|
24
|
+
height: 1rem;
|
|
25
|
+
color: rgb(107, 114, 128);
|
|
26
|
+
flex-shrink: 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@media (prefers-color-scheme: dark) {
|
|
30
|
+
.menu-icon-arrow {
|
|
31
|
+
color: rgb(209, 213, 219);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
</style>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
export let classNames = "";
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<svg
|
|
6
|
+
class={classNames}
|
|
7
|
+
width="1em"
|
|
8
|
+
height="1em"
|
|
9
|
+
viewBox="0 0 12 7"
|
|
10
|
+
fill="none"
|
|
11
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
12
|
+
>
|
|
13
|
+
<path d="M1 1L6 6L11 1" stroke="currentColor" />
|
|
14
|
+
</svg>
|
|
15
|
+
|
|
16
|
+
<style>
|
|
17
|
+
.caret-icon {
|
|
18
|
+
transition: transform 0.2s ease-in-out;
|
|
19
|
+
color: rgb(156, 163, 175);
|
|
20
|
+
overflow: visible;
|
|
21
|
+
width: 0.75rem;
|
|
22
|
+
height: 0.75rem;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@media (max-width: 640px) {
|
|
26
|
+
.caret-icon {
|
|
27
|
+
width: 0.625rem;
|
|
28
|
+
height: 0.625rem;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.rotate-180 {
|
|
33
|
+
transform: rotate(180deg);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.rotate-0 {
|
|
37
|
+
transform: rotate(0deg);
|
|
38
|
+
}
|
|
39
|
+
</style>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
export let classNames = "";
|
|
3
|
+
</script>
|
|
4
|
+
|
|
5
|
+
<svg
|
|
6
|
+
class={classNames || "icon-size"}
|
|
7
|
+
width="1em"
|
|
8
|
+
height="1em"
|
|
9
|
+
viewBox="5 5 22 22"
|
|
10
|
+
fill="none"
|
|
11
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
12
|
+
>
|
|
13
|
+
<title>HuggingChat</title>
|
|
14
|
+
<path
|
|
15
|
+
d="M16.0006 25.9992C13.8266 25.999 11.7118 25.2901 9.97686 23.9799C8.2419 22.6698 6.98127 20.8298 6.38599 18.7388C5.79071 16.6478 5.89323 14.4198 6.678 12.3923C7.46278 10.3648 8.88705 8.64837 10.735 7.50308C12.5829 6.35779 14.7538 5.84606 16.9187 6.04544C19.0837 6.24481 21.1246 7.14442 22.7323 8.60795C24.34 10.0715 25.4268 12.0192 25.8281 14.1559C26.2293 16.2926 25.9232 18.5019 24.9561 20.449C24.7703 20.8042 24.7223 21.2155 24.8211 21.604L25.4211 23.8316C25.4803 24.0518 25.4805 24.2837 25.4216 24.5039C25.3627 24.7242 25.2468 24.925 25.0856 25.0862C24.9244 25.2474 24.7235 25.3633 24.5033 25.4222C24.283 25.4811 24.0512 25.4809 23.831 25.4217L21.6034 24.8217C21.2172 24.7248 20.809 24.7729 20.4558 24.9567C19.0683 25.6467 17.5457 26.0068 16.0006 26.0068V25.9992Z"
|
|
16
|
+
fill="black"
|
|
17
|
+
class="block dark:hidden"
|
|
18
|
+
/>
|
|
19
|
+
<path
|
|
20
|
+
d="M9.62598 16.0013C9.62598 15.3799 10.1294 14.8765 10.7508 14.8765C11.3721 14.8765 11.8756 15.3799 11.8756 16.0013C11.8756 17.0953 12.3102 18.1448 13.0838 18.9184C13.8574 19.692 14.9069 20.1266 16.001 20.1267C17.095 20.1267 18.1445 19.692 18.9181 18.9184C19.6918 18.1448 20.1264 17.0953 20.1264 16.0013C20.1264 15.3799 20.6299 14.8765 21.2512 14.8765C21.8725 14.8765 22.3759 15.3799 22.3759 16.0013C22.3759 17.6921 21.7046 19.3137 20.509 20.5093C19.3134 21.7049 17.6918 22.3762 16.001 22.3762C14.3102 22.3762 12.6885 21.7049 11.4929 20.5093C10.2974 19.3137 9.62598 17.6921 9.62598 16.0013Z"
|
|
21
|
+
fill="white"
|
|
22
|
+
class="block dark:hidden"
|
|
23
|
+
/>
|
|
24
|
+
<path
|
|
25
|
+
d="M16.0006 25.9992C13.8266 25.999 11.7118 25.2901 9.97686 23.9799C8.2419 22.6698 6.98127 20.8298 6.38599 18.7388C5.79071 16.6478 5.89323 14.4198 6.678 12.3923C7.46278 10.3648 8.88705 8.64837 10.735 7.50308C12.5829 6.35779 14.7538 5.84606 16.9187 6.04544C19.0837 6.24481 21.1246 7.14442 22.7323 8.60795C24.34 10.0715 25.4268 12.0192 25.8281 14.1559C26.2293 16.2926 25.9232 18.5019 24.9561 20.449C24.7703 20.8042 24.7223 21.2155 24.8211 21.604L25.4211 23.8316C25.4803 24.0518 25.4805 24.2837 25.4216 24.5039C25.3627 24.7242 25.2468 24.925 25.0856 25.0862C24.9244 25.2474 24.7235 25.3633 24.5033 25.4222C24.283 25.4811 24.0512 25.4809 23.831 25.4217L21.6034 24.8217C21.2172 24.7248 20.809 24.7729 20.4558 24.9567C19.0683 25.6467 17.5457 26.0068 16.0006 26.0068V25.9992Z"
|
|
26
|
+
fill="white"
|
|
27
|
+
class="hidden dark:block"
|
|
28
|
+
/>
|
|
29
|
+
<path
|
|
30
|
+
d="M9.62598 16.0013C9.62598 15.3799 10.1294 14.8765 10.7508 14.8765C11.3721 14.8765 11.8756 15.3799 11.8756 16.0013C11.8756 17.0953 12.3102 18.1448 13.0838 18.9184C13.8574 19.692 14.9069 20.1266 16.001 20.1267C17.095 20.1267 18.1445 19.692 18.9181 18.9184C19.6918 18.1448 20.1264 17.0953 20.1264 16.0013C20.1264 15.3799 20.6299 14.8765 21.2512 14.8765C21.8725 14.8765 22.3759 15.3799 22.3759 16.0013C22.3759 17.6921 21.7046 19.3137 20.509 20.5093C19.3134 21.7049 17.6918 22.3762 16.001 22.3762C14.3102 22.3762 12.6885 21.7049 11.4929 20.5093C10.2974 19.3137 9.62598 17.6921 9.62598 16.0013Z"
|
|
31
|
+
fill="black"
|
|
32
|
+
class="hidden dark:block"
|
|
33
|
+
/>
|
|
34
|
+
</svg>
|
|
35
|
+
|
|
36
|
+
<style>
|
|
37
|
+
.icon-size {
|
|
38
|
+
width: 0.75rem;
|
|
39
|
+
height: 0.75rem;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@media (max-width: 640px) {
|
|
43
|
+
.icon-size {
|
|
44
|
+
width: 0.625rem;
|
|
45
|
+
height: 0.625rem;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.menu-icon {
|
|
50
|
+
width: 1rem;
|
|
51
|
+
height: 1rem;
|
|
52
|
+
flex-shrink: 0;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.hidden {
|
|
56
|
+
display: none;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.block {
|
|
60
|
+
display: block;
|
|
61
|
+
}
|
|
62
|
+
</style>
|
|
@@ -3,18 +3,19 @@
|
|
|
3
3
|
import CopyButton from "./CopyButton.svelte";
|
|
4
4
|
import { Tool, Prompt, Resource } from "@gradio/icons";
|
|
5
5
|
import { format_latency, get_color_from_success_rate } from "./utils";
|
|
6
|
+
import PercentileChart from "./PercentileChart.svelte";
|
|
6
7
|
|
|
7
8
|
export let mcp_server_active: boolean;
|
|
8
|
-
export let mcp_server_url: string;
|
|
9
9
|
export let mcp_server_url_streamable: string;
|
|
10
|
+
export let root: string;
|
|
10
11
|
export let tools: Tool[];
|
|
11
12
|
export let all_tools: Tool[] = [];
|
|
12
13
|
export let selected_tools: Set<string> = new Set();
|
|
13
|
-
export let mcp_json_sse: any;
|
|
14
14
|
export let mcp_json_stdio: any;
|
|
15
15
|
export let file_data_present: boolean;
|
|
16
16
|
export let mcp_docs: string;
|
|
17
17
|
export let analytics: Record<string, any>;
|
|
18
|
+
export let config_snippets: Record<string, string>;
|
|
18
19
|
|
|
19
20
|
interface ToolParameter {
|
|
20
21
|
title?: string;
|
|
@@ -36,13 +37,12 @@
|
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
39
|
|
|
39
|
-
type Transport = "streamable_http" | "
|
|
40
|
+
type Transport = "streamable_http" | "stdio";
|
|
40
41
|
let current_transport: Transport = "streamable_http";
|
|
41
42
|
let include_file_upload = true;
|
|
42
43
|
|
|
43
44
|
const transports = [
|
|
44
45
|
["streamable_http", "Streamable HTTP"],
|
|
45
|
-
["sse", "SSE"],
|
|
46
46
|
["stdio", "STDIO"]
|
|
47
47
|
] as const;
|
|
48
48
|
|
|
@@ -52,8 +52,7 @@
|
|
|
52
52
|
prompt: Prompt
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
$: display_url =
|
|
56
|
-
current_transport === "sse" ? mcp_server_url : mcp_server_url_streamable;
|
|
55
|
+
$: display_url = mcp_server_url_streamable;
|
|
57
56
|
|
|
58
57
|
// Helper function to add/remove file upload tool from config
|
|
59
58
|
function update_config_with_file_upload(
|
|
@@ -72,9 +71,7 @@
|
|
|
72
71
|
"gradio[mcp]",
|
|
73
72
|
"gradio",
|
|
74
73
|
"upload-mcp",
|
|
75
|
-
|
|
76
|
-
? mcp_server_url
|
|
77
|
-
: mcp_server_url_streamable,
|
|
74
|
+
root,
|
|
78
75
|
"<UPLOAD_DIRECTORY>"
|
|
79
76
|
]
|
|
80
77
|
};
|
|
@@ -87,13 +84,10 @@
|
|
|
87
84
|
}
|
|
88
85
|
|
|
89
86
|
$: mcp_json_streamable_http = update_config_with_file_upload(
|
|
90
|
-
|
|
87
|
+
mcp_json_stdio
|
|
91
88
|
? {
|
|
92
|
-
...mcp_json_sse,
|
|
93
89
|
mcpServers: {
|
|
94
|
-
...mcp_json_sse.mcpServers,
|
|
95
90
|
gradio: {
|
|
96
|
-
...mcp_json_sse.mcpServers.gradio,
|
|
97
91
|
url: mcp_server_url_streamable
|
|
98
92
|
}
|
|
99
93
|
}
|
|
@@ -102,14 +96,15 @@
|
|
|
102
96
|
include_file_upload
|
|
103
97
|
);
|
|
104
98
|
|
|
105
|
-
$: mcp_json_sse_updated = update_config_with_file_upload(
|
|
106
|
-
mcp_json_sse,
|
|
107
|
-
include_file_upload
|
|
108
|
-
);
|
|
109
99
|
$: mcp_json_stdio_updated = update_config_with_file_upload(
|
|
110
100
|
mcp_json_stdio,
|
|
111
101
|
include_file_upload
|
|
112
102
|
);
|
|
103
|
+
|
|
104
|
+
$: config_snippets = {
|
|
105
|
+
streamable_http: JSON.stringify(mcp_json_streamable_http, null, 2),
|
|
106
|
+
stdio: JSON.stringify(mcp_json_stdio_updated, null, 2)
|
|
107
|
+
};
|
|
113
108
|
</script>
|
|
114
109
|
|
|
115
110
|
{#if mcp_server_active}
|
|
@@ -134,10 +129,8 @@
|
|
|
134
129
|
<Block>
|
|
135
130
|
<div class="mcp-url">
|
|
136
131
|
<label for="mcp-server-url"
|
|
137
|
-
><span class="status-indicator active">●</span>MCP Server URL
|
|
138
|
-
|
|
139
|
-
? "SSE"
|
|
140
|
-
: "Streamable HTTP"})</label
|
|
132
|
+
><span class="status-indicator active">●</span>MCP Server URL
|
|
133
|
+
(Streamable HTTP)</label
|
|
141
134
|
>
|
|
142
135
|
<div class="textbox">
|
|
143
136
|
<input id="mcp-server-url" type="text" readonly value={display_url} />
|
|
@@ -227,34 +220,19 @@
|
|
|
227
220
|
: "⚠︎ No description provided in function docstring"}
|
|
228
221
|
</span>
|
|
229
222
|
{#if analytics[tool.meta.endpoint_name]}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
>
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
>({Math.round(success_rate * 100)}% successful)</span
|
|
223
|
+
{@const endpoint_analytics = analytics[tool.meta.endpoint_name]}
|
|
224
|
+
{@const p50 =
|
|
225
|
+
endpoint_analytics.process_time_percentiles["50th"]}
|
|
226
|
+
<div class="tool-analytics-wrapper" style="margin-left: 1em;">
|
|
227
|
+
<span
|
|
228
|
+
class="tool-analytics"
|
|
229
|
+
style="color: var(--body-text-color-subdued);"
|
|
238
230
|
>
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
)}
|
|
245
|
-
/
|
|
246
|
-
{format_latency(
|
|
247
|
-
analytics[tool.meta.endpoint_name].process_time_percentiles[
|
|
248
|
-
"90th"
|
|
249
|
-
]
|
|
250
|
-
)}
|
|
251
|
-
/
|
|
252
|
-
{format_latency(
|
|
253
|
-
analytics[tool.meta.endpoint_name].process_time_percentiles[
|
|
254
|
-
"99th"
|
|
255
|
-
]
|
|
256
|
-
)}
|
|
257
|
-
</span>
|
|
231
|
+
{endpoint_analytics.total_requests} requests ({Math.round(
|
|
232
|
+
success_rate * 100
|
|
233
|
+
)}% successful, p50: {format_latency(p50)})
|
|
234
|
+
</span>
|
|
235
|
+
</div>
|
|
258
236
|
{/if}
|
|
259
237
|
</span>
|
|
260
238
|
<span class="tool-arrow">{tool.expanded ? "▼" : "▶"}</span>
|
|
@@ -290,7 +268,7 @@
|
|
|
290
268
|
</div>
|
|
291
269
|
<p> </p>
|
|
292
270
|
|
|
293
|
-
{
|
|
271
|
+
<div class:hidden={current_transport !== "streamable_http"}>
|
|
294
272
|
<strong>Streamable HTTP Transport</strong>: To add this MCP to clients that
|
|
295
273
|
support Streamable HTTP, simply add the following configuration to your MCP
|
|
296
274
|
config.
|
|
@@ -298,32 +276,15 @@
|
|
|
298
276
|
<Block>
|
|
299
277
|
<code>
|
|
300
278
|
<div class="copy">
|
|
301
|
-
<CopyButton
|
|
302
|
-
code={JSON.stringify(mcp_json_streamable_http, null, 2)}
|
|
303
|
-
/>
|
|
279
|
+
<CopyButton code={config_snippets.streamable_http} />
|
|
304
280
|
</div>
|
|
305
281
|
<div>
|
|
306
|
-
<pre>{
|
|
282
|
+
<pre>{config_snippets.streamable_http}</pre>
|
|
307
283
|
</div>
|
|
308
284
|
</code>
|
|
309
285
|
</Block>
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
MCP spec. We recommend using the Streamable HTTP transport instead. But to
|
|
313
|
-
add this MCP to clients that only support server-sent events (SSE), simply
|
|
314
|
-
add the following configuration to your MCP config.
|
|
315
|
-
<p> </p>
|
|
316
|
-
<Block>
|
|
317
|
-
<code>
|
|
318
|
-
<div class="copy">
|
|
319
|
-
<CopyButton code={JSON.stringify(mcp_json_sse_updated, null, 2)} />
|
|
320
|
-
</div>
|
|
321
|
-
<div>
|
|
322
|
-
<pre>{JSON.stringify(mcp_json_sse_updated, null, 2)}</pre>
|
|
323
|
-
</div>
|
|
324
|
-
</code>
|
|
325
|
-
</Block>
|
|
326
|
-
{:else if current_transport === "stdio"}
|
|
286
|
+
</div>
|
|
287
|
+
<div class:hidden={current_transport !== "stdio"}>
|
|
327
288
|
<strong>STDIO Transport</strong>: For clients that only support stdio (e.g.
|
|
328
289
|
Claude Desktop), first
|
|
329
290
|
<a href="https://nodejs.org/en/download/" target="_blank">install Node.js</a
|
|
@@ -332,14 +293,14 @@
|
|
|
332
293
|
<Block>
|
|
333
294
|
<code>
|
|
334
295
|
<div class="copy">
|
|
335
|
-
<CopyButton code={
|
|
296
|
+
<CopyButton code={config_snippets.stdio} />
|
|
336
297
|
</div>
|
|
337
298
|
<div>
|
|
338
|
-
<pre>{
|
|
299
|
+
<pre>{config_snippets.stdio}</pre>
|
|
339
300
|
</div>
|
|
340
301
|
</code>
|
|
341
302
|
</Block>
|
|
342
|
-
|
|
303
|
+
</div>
|
|
343
304
|
{#if file_data_present}
|
|
344
305
|
<div class="file-upload-section">
|
|
345
306
|
<label class="checkbox-label">
|
|
@@ -380,10 +341,16 @@
|
|
|
380
341
|
{/if}
|
|
381
342
|
|
|
382
343
|
<style>
|
|
344
|
+
.tool-analytics-wrapper {
|
|
345
|
+
position: relative;
|
|
346
|
+
display: inline-block;
|
|
347
|
+
}
|
|
348
|
+
|
|
383
349
|
.tool-analytics {
|
|
384
350
|
font-size: 0.95em;
|
|
385
351
|
color: var(--body-text-color-subdued);
|
|
386
352
|
}
|
|
353
|
+
|
|
387
354
|
.transport-selection {
|
|
388
355
|
margin-bottom: var(--size-4);
|
|
389
356
|
}
|
|
@@ -665,4 +632,8 @@
|
|
|
665
632
|
a {
|
|
666
633
|
text-decoration: underline;
|
|
667
634
|
}
|
|
635
|
+
|
|
636
|
+
.hidden {
|
|
637
|
+
display: none;
|
|
638
|
+
}
|
|
668
639
|
</style>
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { format_latency } from "./utils";
|
|
3
|
+
|
|
4
|
+
export let p50: number;
|
|
5
|
+
export let p90: number;
|
|
6
|
+
export let p99: number;
|
|
7
|
+
|
|
8
|
+
$: max_latency = Math.max(p50, p90, p99);
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<div class="tooltip-chart">
|
|
12
|
+
<div class="tooltip-arrow"></div>
|
|
13
|
+
<div class="chart-bars">
|
|
14
|
+
<div class="chart-bar-container">
|
|
15
|
+
<div class="chart-bar-label">p50</div>
|
|
16
|
+
<div class="chart-bar-wrapper">
|
|
17
|
+
<div
|
|
18
|
+
class="chart-bar"
|
|
19
|
+
style="width: {(p50 / max_latency) * 100}%"
|
|
20
|
+
></div>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="chart-bar-value">{format_latency(p50)}</div>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="chart-bar-container">
|
|
25
|
+
<div class="chart-bar-label">p90</div>
|
|
26
|
+
<div class="chart-bar-wrapper">
|
|
27
|
+
<div
|
|
28
|
+
class="chart-bar"
|
|
29
|
+
style="width: {(p90 / max_latency) * 100}%"
|
|
30
|
+
></div>
|
|
31
|
+
</div>
|
|
32
|
+
<div class="chart-bar-value">{format_latency(p90)}</div>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="chart-bar-container">
|
|
35
|
+
<div class="chart-bar-label">p99</div>
|
|
36
|
+
<div class="chart-bar-wrapper">
|
|
37
|
+
<div
|
|
38
|
+
class="chart-bar"
|
|
39
|
+
style="width: {(p99 / max_latency) * 100}%"
|
|
40
|
+
></div>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="chart-bar-value">{format_latency(p99)}</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<style>
|
|
48
|
+
.tooltip-chart {
|
|
49
|
+
background: var(--background-fill-primary);
|
|
50
|
+
border: 1px solid var(--border-color-primary);
|
|
51
|
+
border-radius: var(--radius-md);
|
|
52
|
+
padding: var(--size-3);
|
|
53
|
+
box-shadow: var(--shadow-drop-lg);
|
|
54
|
+
min-width: 200px;
|
|
55
|
+
position: relative;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.tooltip-arrow {
|
|
59
|
+
position: absolute;
|
|
60
|
+
bottom: -8px;
|
|
61
|
+
left: 50%;
|
|
62
|
+
transform: translateX(-50%);
|
|
63
|
+
width: 0;
|
|
64
|
+
height: 0;
|
|
65
|
+
border-left: 8px solid transparent;
|
|
66
|
+
border-right: 8px solid transparent;
|
|
67
|
+
border-top: 8px solid var(--border-color-primary);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.tooltip-arrow::after {
|
|
71
|
+
content: "";
|
|
72
|
+
position: absolute;
|
|
73
|
+
bottom: 1px;
|
|
74
|
+
left: 50%;
|
|
75
|
+
transform: translateX(-50%);
|
|
76
|
+
width: 0;
|
|
77
|
+
height: 0;
|
|
78
|
+
border-left: 7px solid transparent;
|
|
79
|
+
border-right: 7px solid transparent;
|
|
80
|
+
border-top: 7px solid var(--background-fill-primary);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.chart-bars {
|
|
84
|
+
display: flex;
|
|
85
|
+
flex-direction: column;
|
|
86
|
+
gap: var(--size-2);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.chart-bar-container {
|
|
90
|
+
display: flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
gap: var(--size-2);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.chart-bar-label {
|
|
96
|
+
font-size: var(--text-sm);
|
|
97
|
+
font-weight: var(--weight-semibold);
|
|
98
|
+
color: var(--body-text-color);
|
|
99
|
+
min-width: 30px;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.chart-bar-wrapper {
|
|
103
|
+
flex: 1;
|
|
104
|
+
height: 16px;
|
|
105
|
+
background: var(--background-fill-secondary);
|
|
106
|
+
border-radius: var(--radius-sm);
|
|
107
|
+
overflow: hidden;
|
|
108
|
+
position: relative;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.chart-bar {
|
|
112
|
+
height: 100%;
|
|
113
|
+
background: var(--color-accent);
|
|
114
|
+
border-radius: var(--radius-sm);
|
|
115
|
+
transition: width 0.3s ease;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.chart-bar-value {
|
|
119
|
+
font-size: var(--text-sm);
|
|
120
|
+
color: var(--body-text-color);
|
|
121
|
+
min-width: 50px;
|
|
122
|
+
text-align: right;
|
|
123
|
+
font-family: var(--font-mono);
|
|
124
|
+
}
|
|
125
|
+
</style>
|
|
@@ -2,17 +2,21 @@
|
|
|
2
2
|
/* eslint-disable */
|
|
3
3
|
import { onMount } from "svelte";
|
|
4
4
|
import SettingsBanner from "./SettingsBanner.svelte";
|
|
5
|
-
export let root: string;
|
|
6
|
-
export let space_id: string | null;
|
|
7
|
-
export let pwa_enabled: boolean | undefined;
|
|
8
5
|
import { BaseDropdown as Dropdown } from "@gradio/dropdown";
|
|
9
6
|
import { BaseCheckbox as Checkbox } from "@gradio/checkbox";
|
|
10
7
|
import { language_choices, changeLocale } from "../i18n";
|
|
11
8
|
import { locale, _ } from "svelte-i18n";
|
|
12
|
-
import { setupi18n } from "../i18n";
|
|
13
9
|
import record from "./img/record.svg";
|
|
14
10
|
import { createEventDispatcher } from "svelte";
|
|
15
11
|
|
|
12
|
+
let {
|
|
13
|
+
root,
|
|
14
|
+
space_id,
|
|
15
|
+
pwa_enabled,
|
|
16
|
+
allow_zoom = $bindable(),
|
|
17
|
+
allow_video_trim = $bindable()
|
|
18
|
+
} = $props();
|
|
19
|
+
|
|
16
20
|
const dispatch = createEventDispatcher();
|
|
17
21
|
if (root === "") {
|
|
18
22
|
root = location.protocol + "//" + location.host + location.pathname;
|
|
@@ -34,7 +38,7 @@
|
|
|
34
38
|
}
|
|
35
39
|
|
|
36
40
|
onMount(() => {
|
|
37
|
-
document.body.style.overflow = "hidden";
|
|
41
|
+
// document.body.style.overflow = "hidden";
|
|
38
42
|
if ("parentIFrame" in window) {
|
|
39
43
|
window.parentIFrame?.scrollTo(0, 0);
|
|
40
44
|
}
|
|
@@ -46,10 +50,8 @@
|
|
|
46
50
|
};
|
|
47
51
|
});
|
|
48
52
|
|
|
49
|
-
let current_locale: string;
|
|
50
|
-
let current_theme: "light" | "dark" | "system" = "system";
|
|
51
|
-
export let allow_zoom = true;
|
|
52
|
-
export let allow_video_trim = true;
|
|
53
|
+
let current_locale: string = $state("en");
|
|
54
|
+
let current_theme: "light" | "dark" | "system" = $state("system");
|
|
53
55
|
|
|
54
56
|
locale.subscribe((value) => {
|
|
55
57
|
if (value) {
|
|
@@ -69,8 +71,6 @@
|
|
|
69
71
|
function handleVideoTrimChange(e: CustomEvent): void {
|
|
70
72
|
allow_video_trim = e.detail;
|
|
71
73
|
}
|
|
72
|
-
|
|
73
|
-
setupi18n();
|
|
74
74
|
</script>
|
|
75
75
|
|
|
76
76
|
<div class="banner-wrap">
|