Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
<script lang="ts"> | |
import { get } from 'svelte/store'; | |
import { userStore } from "$lib/stores/use-user"; | |
import Input from "$lib/components/fields/Input.svelte"; | |
import Button from "$lib/components/Button.svelte"; | |
let user = get(userStore); | |
export let onClose: () => void; | |
let model = { | |
id: '', | |
title: '', | |
image: '', | |
} | |
let error = { | |
id: '', | |
title: '', | |
image: '' | |
} | |
const handleSubmit = async () => { | |
fetch('/api/models/submit', { | |
method: 'POST', | |
headers: { | |
'Content-Type': 'application/json', | |
}, | |
body: JSON.stringify(model), | |
}) | |
.then(response => response.json()) | |
.then(data => { | |
if (data.error) { | |
error = data.error; | |
} else { | |
error = { | |
id: '', | |
title: '', | |
image: '' | |
} | |
} | |
}) | |
} | |
</script> | |
<div class="grid grid-cols-1 gap-8"> | |
{#if user?.picture} | |
<div class="flex items-center justify-start gap-3"> | |
<img src={user.picture} alt="User avatar" class="w-8 h-8 rounded-full border border-white inline-block" /> | |
<div class="w-full text-left text-white"> | |
<p class="text-base font-semibold">{user?.name}</p> | |
<p class="text-xs leading-none text-neutral-400">{user?.preferred_username}</p> | |
</div> | |
</div> | |
{:else} | |
<p class="bg-yellow-500/40 rounded-full text-xs text-yellow-400 px-3 py-1 font-semibold max-w-max"> | |
You need to be logged in to submit a model. | |
</p> | |
{/if} | |
<header> | |
<p class="text-white font-semibold text-lg"> | |
Submit a Model | |
</p> | |
<p class="text-neutral-300 text-base mt-1"> | |
Submit a model to the LoRA Studio. You can submit a model by providing a link to the model. | |
</p> | |
</header> | |
<main class="grid grid-cols-1 gap-6"> | |
<div> | |
<p class="text-xs uppercase text-neutral-400 font-semibold mb-2"> | |
HuggingFace model URL | |
<span class="text-red-500">*</span> | |
</p> | |
<Input | |
value={model.id} | |
placeholder="{`${user?.preferred_username ?? 'enzostvs'}/`}" | |
prefix="huggingface.co/" | |
onChange={(value) => model.id = value} | |
/> | |
{#if error.id} | |
<p class="text-xs text-red-500 mt-1"> | |
{error.id} | |
</p> | |
{/if} | |
</div> | |
<div> | |
<p class="text-xs uppercase text-neutral-400 font-semibold mb-2"> | |
Title | |
<span class="text-red-500">*</span> | |
</p> | |
<Input | |
value={model.title} | |
placeholder="Simpson style" | |
onChange={(value) => model.title = value} | |
/> | |
</div> | |
<div> | |
<p class="text-xs uppercase text-neutral-400 font-semibold mb-2"> | |
Thumbnail image | |
<span class="text-red-500">*</span> | |
</p> | |
<Input | |
value={model.image} | |
placeholder="https://" | |
onChange={(value) => model.image = value} | |
/> | |
{#if error.image} | |
<p class="text-xs text-red-500 mt-1"> | |
{error.image} | |
</p> | |
{/if} | |
</div> | |
</main> | |
<footer class="flex items-center justify-end gap-3"> | |
<Button theme="dark" size="md" onClick={onClose}>Cancel</Button> | |
<Button theme="blue" size="md" onClick={handleSubmit}>Submit</Button> | |
</footer> | |
</div> |