File size: 2,273 Bytes
b98ad90
1f05f10
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e0d4ec0
1f05f10
 
 
 
e0d4ec0
b98ad90
1f05f10
 
 
 
 
b98ad90
1f05f10
 
b98ad90
e0d4ec0
3dadf94
 
1f05f10
 
 
 
 
 
 
 
b98ad90
 
 
 
 
1f05f10
b98ad90
1f05f10
b98ad90
1f05f10
 
 
 
b98ad90
1f05f10
b98ad90
1f05f10
b98ad90
1f05f10
 
 
 
b98ad90
 
 
1f05f10
 
 
 
 
b98ad90
1f05f10
 
 
 
b98ad90
1f05f10
 
b98ad90
1f05f10
 
b98ad90
1f05f10
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import { createRepo, commit, CommitFile, whoAmI } from "@huggingface/hub";

const c = console;

const FILES_TO_UPLOAD = [
	"./mobilenet/model.json",
	"./mobilenet/group1-shard1of2",
	"./mobilenet/group1-shard2of2",
	"./mobilenet/coffee.jpg",
	"./mobilenet/README.md",
];

function filenameFromURL(url: string): string {
	return url.substring(url.lastIndexOf("/") + 1);
}

window.document.addEventListener("DOMContentLoaded", () => {
	const tokenEl = document.querySelector<HTMLInputElement>("#token")!;
	const repoNameEl = document.querySelector<HTMLInputElement>("#repo_name")!;
	const button = document.querySelector("#submit")!;
	const output = document.querySelector("#logs")!;
	const form = document.getElementsByTagName("form")[0];

	const storedToken = window.localStorage.getItem("hf_token");
	if (storedToken) {
		tokenEl.value = storedToken;
		/// ^to help in dev.
	}

	repoNameEl.value = `tfjs-mobilenet-${Date.now() % 1_000}`;
	/// "random" repo name

	form.addEventListener("submit", async (event) => {
		event.preventDefault();

		const token = tokenEl.value;
		const repoName = repoNameEl.value;
		if (!token || !repoName) {
			alert("You need a token and a repo name");
			return;
		}

		button.setAttribute("disabled", "disabled");

		const credentials = {
			accessToken: token,
		};

		try {
			const { name: username } = await whoAmI({ credentials });
			const name = `${username}/${repoName}`;
			const { repoUrl } = await createRepo({
				repo: {
					type: "model",
					name,
				},
				credentials,
			});

			const operations: CommitFile[] = await Promise.all(
				FILES_TO_UPLOAD.map(async (file) => {
					return {
						operation: "addOrUpdate",
						path: filenameFromURL(file),
						content: await (await fetch(file)).blob(),
					};
				})
			);
			const commitOutput = await commit({
				repo: {
					type: "model",
					name,
				},
				credentials,
				title: "upload model",
				operations,
			});
			c.log(commitOutput);

			button.insertAdjacentHTML(
				"afterend",
				`<div class="text-green-500 mb-6">🎉 Upload complete! Model page is <a target="_blank" class="text-bold underline" href="${repoUrl}">${repoUrl}</a></div>`
			);
		} catch (err) {
			output.append("\n" + err);
		}
		button.removeAttribute("disabled");
	});
});