Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
inference-widgets
/
packages
/widgets
/src
/lib
/components
/InferenceWidget
/shared
/WidgetHeader
/WidgetHeader.svelte
| <script lang="ts" generics="TWidgetExample extends WidgetExample"> | |
| import { fade } from "svelte/transition"; | |
| import { updateWidgetState } from "../../stores.js"; | |
| import { TASKS_DATA } from "@huggingface/tasks"; | |
| import type { WidgetExample, WidgetExampleAttribute } from "@huggingface/tasks"; | |
| import type { WidgetProps, ExampleRunOpts } from "../types.js"; | |
| import { getPipelineTask } from "../../../../utils/ViewUtils.js"; | |
| import IconInfo from "../../..//Icons/IconInfo.svelte"; | |
| import IconRefresh from "../../..//Icons/IconRefresh.svelte"; | |
| import IconLightning from "../../..//Icons/IconLightning.svelte"; | |
| import PipelineTag from "../../../PipelineTag/PipelineTag.svelte"; | |
| import WidgetExamples from "../WidgetExamples/WidgetExamples.svelte"; | |
| import { createEventDispatcher } from "svelte"; | |
| export let model: WidgetProps["model"]; | |
| export let noTitle = false; | |
| export let title: string | null = null; | |
| export let isLoading = false; | |
| export let isDisabled = false; | |
| export let applyWidgetExample: ((sample: TWidgetExample, opts?: ExampleRunOpts) => void) | undefined = undefined; | |
| export let validateExample: ((sample: WidgetExample) => sample is TWidgetExample) | undefined = undefined; | |
| export let callApiOnMount: WidgetProps["callApiOnMount"] = false; | |
| export let exampleQueryParams: WidgetExampleAttribute[] = []; | |
| export let showReset = false; | |
| const dispatch = createEventDispatcher<{ reset: void }>(); | |
| const pipeline = model?.pipeline_tag; | |
| $: task = pipeline ? getPipelineTask(pipeline) : undefined; | |
| $: validExamples = getValidExamples(isDisabled); | |
| function getValidExamples(isDisabled: boolean): TWidgetExample[] { | |
| const examples = (model?.widgetData ?? []).filter( | |
| (sample): sample is TWidgetExample => | |
| (validateExample?.(sample) ?? false) && (!isDisabled || sample.output !== undefined) | |
| ); | |
| // if there are no examples with outputs AND model.inference !== InferenceDisplayability.Yes | |
| // then widget will show InferenceDisplayability error to the user without showing anything else | |
| if (isDisabled && !examples.length) { | |
| updateWidgetState(model.id, "noInference", true); | |
| } | |
| return examples; | |
| } | |
| </script> | |
| <div class="mb-2 flex items-center font-semibold"> | |
| {#if !noTitle} | |
| {#if title} | |
| <div class="flex items-center text-lg"> | |
| {title} | |
| </div> | |
| {:else} | |
| <div class="flex items-center text-lg"> | |
| {#if !isDisabled} | |
| <IconLightning classNames="-ml-1 mr-1 text-yellow-500" /> | |
| Inference API | |
| {:else} | |
| Inference Examples | |
| {/if} | |
| </div> | |
| <a target="_blank" href="https://huggingface.co/docs/hub/models-widgets#example-outputs"> | |
| <IconInfo classNames="ml-1.5 text-sm text-gray-400 hover:text-black" /> | |
| </a> | |
| {/if} | |
| {/if} | |
| </div> | |
| <div class="mb-0.5 flex w-full max-w-full flex-wrap items-center text-sm text-gray-500"> | |
| {#if pipeline && task} | |
| <div class="flex gap-4 items-center mb-1.5"> | |
| <a | |
| href={TASKS_DATA[task] ? `/tasks/${task}` : undefined} | |
| target="_blank" | |
| title={TASKS_DATA[task] ? `Learn more about ${task}` : undefined} | |
| > | |
| <PipelineTag {pipeline} classNames={TASKS_DATA[task] ? "hover:underline" : ""} /> | |
| </a> | |
| </div> | |
| {/if} | |
| <div class="flex gap-2 ml-auto"> | |
| {#if showReset && !isDisabled} | |
| <button | |
| class="flex items-center mb-1.5 text-gray-400" | |
| type="button" | |
| on:click|preventDefault={() => dispatch("reset")} | |
| transition:fade | |
| > | |
| <IconRefresh /> | |
| </button> | |
| {/if} | |
| {#if validExamples.length && applyWidgetExample} | |
| <WidgetExamples | |
| classNames="flex gap-x-1 peer:" | |
| {validExamples} | |
| {isLoading} | |
| {applyWidgetExample} | |
| {callApiOnMount} | |
| {exampleQueryParams} | |
| /> | |
| {/if} | |
| </div> | |
| </div> | |