<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<script src="https://cdn.tailwindcss.com"></script>
		<!-- polyfill for firefox + import maps -->
		<script src="https://unpkg.com/es-module-shims@1.7.0/dist/es-module-shims.js"></script>
		<script type="importmap">
			{
				"imports": {
					"@huggingface/hub": "https://cdn.jsdelivr.net/npm/@huggingface/hub@0.3.3/+esm"
				}
			}
		</script>
		<script type="module" src="./dist/app.js"></script>
	</head>
	<body>
		<form class="container mx-auto pt-8">
			<h1 class="text-3xl font-bold">
				<span
					class="bg-clip-text text-transparent bg-gradient-to-r from-pink-500 to-violet-500"
				>
					How to push a ML model to the HF Hub from your browser</span
				>
			</h1>

			<p class="mt-8">
				Here is a sample ML model. We pick the TensorFlow.js version of
				Mobilenet as an example, but any model would work similarly:
			</p>
			<div class="mt-6">
				<a
					class="bg-gray-200 inline-block px-2 py-0 rounded"
					href="./mobilenet/model.json"
				>
					<svg
						xmlns="http://www.w3.org/2000/svg"
						xmlns:xlink="http://www.w3.org/1999/xlink"
						width="1em"
						height="1em"
						viewBox="0 0 32 32"
						class="inline"
					>
						<path
							fill="currentColor"
							d="m25.7 9.3l-7-7c-.2-.2-.4-.3-.7-.3H8c-1.1 0-2 .9-2 2v24c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V10c0-.3-.1-.5-.3-.7zM18 4.4l5.6 5.6H18V4.4zM24 28H8V4h8v6c0 1.1.9 2 2 2h6v16z"
						></path>
						<path fill="currentColor" d="M10 22h12v2H10zm0-6h12v2H10z"></path>
					</svg>
					<code class="ml-2 text-gray-800">model.json</code>
				</a>
				<a
					class="bg-gray-200 inline-block px-2 py-0 rounded"
					href="./mobilenet/group1-shard1of2"
				>
					<svg
						xmlns="http://www.w3.org/2000/svg"
						xmlns:xlink="http://www.w3.org/1999/xlink"
						width="1em"
						height="1em"
						viewBox="0 0 32 32"
						class="inline"
					>
						<path
							fill="currentColor"
							d="m25.7 9.3l-7-7c-.2-.2-.4-.3-.7-.3H8c-1.1 0-2 .9-2 2v24c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V10c0-.3-.1-.5-.3-.7zM18 4.4l5.6 5.6H18V4.4zM24 28H8V4h8v6c0 1.1.9 2 2 2h6v16z"
						></path>
						<path fill="currentColor" d="M10 22h12v2H10zm0-6h12v2H10z"></path>
					</svg>
					<code class="ml-2 text-gray-800">group1-shard1of2</code>
				</a>
				<a
					class="bg-gray-200 inline-block px-2 py-0 rounded"
					href="./mobilenet/group1-shard2of2"
				>
					<svg
						xmlns="http://www.w3.org/2000/svg"
						xmlns:xlink="http://www.w3.org/1999/xlink"
						width="1em"
						height="1em"
						viewBox="0 0 32 32"
						class="inline"
					>
						<path
							fill="currentColor"
							d="m25.7 9.3l-7-7c-.2-.2-.4-.3-.7-.3H8c-1.1 0-2 .9-2 2v24c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V10c0-.3-.1-.5-.3-.7zM18 4.4l5.6 5.6H18V4.4zM24 28H8V4h8v6c0 1.1.9 2 2 2h6v16z"
						></path>
						<path fill="currentColor" d="M10 22h12v2H10zm0-6h12v2H10z"></path>
					</svg>
					<code class="ml-2 text-gray-800">group1-shard2of2</code>
				</a>
			</div>

			<p class="mt-8">
				BTW, the TFJS demo of this model is
				<a
					href="https://storage.googleapis.com/tfjs-models/demos/mobilenet/index.html"
					class="underline"
					target="_blank"
					>here</a
				>.
			</p>

			<p class="mt-8">
				Now that we have the model files, we need to get a HF user's access
				token. You can create a token at
				<a
					target="_blank"
					href="https://huggingface.co/settings/tokens"
					class="underline text-blue-500"
					>hf.co/settings/tokens</a
				>
				(needs write access).
			</p>

			<input
				type="text"
				id="token"
				class="rounded border-2 border-blue-500 shadow-md px-3 py-2 w-96 mt-6"
				placeholder="token"
				required
			/>

			<p class="mt-8">Finally, pick a repo name for your model:</p>

			<input
				type="text"
				id="repo_name"
				class="rounded border-2 border-blue-500 shadow-md px-3 py-2 w-96 mt-6"
				placeholder="repo name"
				required
			/>

			<p class="mt-8">
				Press Upload to create a repo, and upload your files. It will also
				upload a model card for your model (you can then update it on your model
				page):
			</p>

			<button
				id="submit"
				class="my-8 bg-green-500 rounded py-3 px-5 text-white shadow-md disabled:bg-slate-300"
			>
				Upload
			</button>

			<p class="text-gray-400 text-sm">Output logs</p>
			<pre id="logs" class="bg-gray-100 rounded p-3 mb-8 text-sm">
Output will be here</pre
			>
		</form>
	</body>
</html>