Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
inference-widgets
/
packages
/widgets
/src
/lib
/components
/InferenceWidget
/shared
/WidgetWrapper
/WidgetWrapper.svelte
<script lang="ts" generics="TWidgetExample extends WidgetExample"> | |
import { InferenceDisplayability } from "@huggingface/tasks"; | |
import type { WidgetExample } from "@huggingface/tasks"; | |
import type { WidgetProps } from "../types.js"; | |
import { onMount } from "svelte"; | |
import WidgetFooter from "../WidgetFooter/WidgetFooter.svelte"; | |
import WidgetHeader from "../WidgetHeader/WidgetHeader.svelte"; | |
import WidgetInfo from "../WidgetInfo/WidgetInfo.svelte"; | |
import IconCross from "../../..//Icons/IconCross.svelte"; | |
import { getModelLoadInfo } from "../../..//InferenceWidget/shared/helpers.js"; | |
import { modelLoadStates, widgetStates, updateWidgetState } from "../../stores.js"; | |
export let apiUrl: string; | |
export let model: WidgetProps["model"]; | |
export let includeCredentials: WidgetProps["includeCredentials"]; | |
$: isMaximized = $widgetStates?.[model.id]?.isMaximized; | |
const isDisabled = model.inference !== InferenceDisplayability.Yes && model.pipeline_tag !== "reinforcement-learning"; | |
updateWidgetState(model.id, "isDisabled", isDisabled); | |
onMount(() => { | |
(async () => { | |
if (model.inference !== InferenceDisplayability.Yes) { | |
return; | |
} | |
const modelLoadInfo = await getModelLoadInfo(apiUrl, model.id, includeCredentials); | |
$modelLoadStates[model.id] = modelLoadInfo; | |
if (modelLoadInfo?.state === "TooBig") { | |
updateWidgetState(model.id, "isDisabled", true); | |
} | |
})(); | |
}); | |
</script> | |
{#if $widgetStates?.[model.id]?.noInference} | |
<WidgetHeader {model} noTitle={true} /> | |
<WidgetInfo {model} /> | |
{:else if $modelLoadStates[model.id] || model.inference !== InferenceDisplayability.Yes} | |
<form | |
class="flex w-full max-w-full flex-col | |
{isMaximized ? 'fixed inset-0 z-20 bg-white p-12' : ''}" | |
> | |
{#if isMaximized} | |
<button class="absolute right-12 top-6" on:click={() => updateWidgetState(model.id, "isMaximized", false)}> | |
<IconCross classNames="text-xl text-gray-500 hover:text-black" /> | |
</button> | |
{/if} | |
<slot {WidgetInfo} {WidgetHeader} {WidgetFooter} /> | |
</form> | |
{/if} | |