2
import type { ComponentMeta, Dependency } from "../types";
3
import CopyButton from "./CopyButton.svelte";
4
import { represent_value, is_potentially_nested_file_data } from "./utils";
5
import { Block } from "@gradio/atoms";
6
import EndpointDetail from "./EndpointDetail.svelte";
8
interface EndpointParameter {
11
python_type: { type: string };
13
example_input: string;
17
export let dependency: Dependency;
18
export let dependency_index: number;
19
export let root: string;
20
export let dependency_failures: boolean[][];
21
export let endpoint_parameters: any;
22
export let js_parameters: any;
23
export let named: boolean;
25
export let current_language: "python" | "javascript";
27
let python_code: HTMLElement;
28
let js_code: HTMLElement;
30
let has_file_path = endpoint_parameters.some((param: EndpointParameter) =>
31
is_potentially_nested_file_data(param.example_input)
33
let blob_components = ["Audio", "File", "Image", "Video"];
34
let blob_examples: any[] = endpoint_parameters.filter(
35
(param: EndpointParameter) => blob_components.includes(param.component)
39
<div class="container">
41
<EndpointDetail {named} api_name={dependency.api_name} />
43
<EndpointDetail {named} fn_index={dependency_index} />
47
{#if current_language === "python"}
49
<CopyButton code={python_code?.innerText} />
51
<div bind:this={python_code}>
52
<pre>from gradio_client import Client{#if has_file_path}, file{/if}
54
client = Client(<span class="token string">"{root}"</span>)
55
result = client.predict(<!--
56
-->{#each endpoint_parameters as { label, type, python_type, component, example_input, serializer }, i}<!--
59
class="example-inputs"
60
>{represent_value(example_input, python_type.type, "py")}</span
62
-->{#if dependency_failures[dependency_index][i]}<!--
64
class="error">ERROR</span
69
--> # {python_type.type} {#if python_type.description}({python_type.description})
70
{/if}<!---->in '{label}' <!--
71
-->{component} component<!--
77
api_name="/{dependency.api_name}"<!--
82
{:else if current_language === "javascript"}
84
<CopyButton code={js_code?.innerText} />
86
<div bind:this={js_code}>
87
<pre>import { client } from "@gradio/client";
88
{#each blob_examples as { label, type, python_type, component, example_input, serializer }, i}<!--
90
const response_{i} = await fetch("{example_input.url}");
91
const example{component} = await response_{i}.blob();
94
const app = await client(<span class="token string">"{root}"</span>);
95
const result = await app.predict({#if named}"/{dependency.api_name}"{:else}{dependency_index}{/if}, [<!--
96
-->{#each endpoint_parameters as { label, type, python_type, component, example_input, serializer }, i}<!--
97
-->{#if blob_components.includes(component)}<!--
100
class="example-inputs">example{component}</span
102
--><span class="desc"
106
-->{component} component<!--
111
<span class="example-inputs"
120
-->// {js_parameters[i]
121
.type} {#if js_parameters[i].description}({js_parameters[i]
122
.description}){/if}<!--
124
-->{component} component<!--
131
console.log(result.data);
142
color: var(--body-text-color);
143
font-family: var(--font-mono);
149
color: var(--color-accent-base);
167
flex-direction: column;
168
gap: var(--spacing-xxl);
169
margin-top: var(--size-3);
170
margin-bottom: var(--size-3);
174
color: var(--error-text-color);
178
color: var(--body-text-color-subdued);
182
border: 1px solid var(--border-color-accent);
183
border-radius: var(--radius-sm);
184
background: var(--color-accent-soft);
185
padding-right: var(--size-1);
186
padding-left: var(--size-1);
187
color: var(--color-accent);