File size: 2,425 Bytes
b98ad90
1f05f10
 
 
 
c313758
 
 
 
 
1f05f10
 
 
 
 
 
e0d4ec0
1f05f10
 
 
 
e0d4ec0
b98ad90
1f05f10
 
 
 
 
b98ad90
1f05f10
 
b98ad90
e0d4ec0
3dadf94
 
1f05f10
 
 
 
 
 
 
 
b98ad90
 
 
 
 
1f05f10
b98ad90
1f05f10
b98ad90
1f05f10
 
 
 
b98ad90
1f05f10
b98ad90
1f05f10
b98ad90
1f05f10
 
 
9d7e455
 
b98ad90
 
 
1f05f10
 
 
 
 
b98ad90
1f05f10
 
 
 
b98ad90
1f05f10
 
b98ad90
1f05f10
 
b2a43a2
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
91
92
import { createRepo, commit, CommitFile, whoAmI } from "@huggingface/hub";

const c = console;

const FILES_TO_UPLOAD = [
	`${window.location.origin}/mobilenet/model.json`,
	`${window.location.origin}/mobilenet/group1-shard1of2`,
	`${window.location.origin}/mobilenet/group1-shard2of2`,
	`${window.location.origin}/mobilenet/coffee.jpg`,
	`${window.location.origin}/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),
						// upload remote file
						content: new URL(file),
					};
				})
			);
			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) {
			console.error(err);
			output.append("\n" + err);
		}
		button.removeAttribute("disabled");
	});
});