pika-tokenizer / script.js
qikp's picture
Update script.js
01487a5 verified
Raw
History Blame Contribute Delete
1.93 kB
import { Tokenizer } from "https://nobsdelivr.private.coffee/npm/@huggingface/tokenizers@0.1.3";
if (localStorage.getItem("tokenizerCache")) {
var tokenizerCache = JSON.parse(localStorage.tokenizerCache);
} else {
var tokenizerCache = {};
localStorage.tokenizerCache = "{}";
}
var tokenizerJSON;
let tokenizeButton = document.querySelector("#tokenize");
tokenizeButton.addEventListener("click", async () => {
tokenizeButton.disabled = true;
let modelId = document.querySelector("#model").value;
if (modelId in tokenizerCache) {
tokenizerJSON = tokenizerCache[modelId];
}
else {
let tokenizerJSONSocket = await fetch(`https://huggingface.co/${modelId}/resolve/main/tokenizer.json`);
tokenizerJSON = await tokenizerJSONSocket.json();
tokenizerCache[modelId] = tokenizerJSON;
localStorage.tokenizerCache = JSON.stringify(tokenizerCache);
}
let tokenizer = new Tokenizer(tokenizerJSON, {});
let text = document.querySelector("#text").value;
let tokenized = tokenizer.encode(text);
document.querySelector("#totalLength").textContent = `Total length: ${tokenized.ids.length}`;
let output = document.querySelector("#output");
output.contentDocument.body.innerHTML = "";
let colors = ["#ff00007f", "#00ff007f", "#ffff007f", "#0000ff7f"].sort(() => Math.random() - 0.5);
tokenized.ids.forEach((token, index) => {
let content = document.createElement("span");
content.textContent = tokenizer.decode([token]);
content.style.backgroundColor = colors[index % colors.length];
content.style.fontFamily = "monospace";
content.style.whiteSpace = "pre-wrap";
content.title = token.toString();
output.contentDocument.body.appendChild(content);
});
tokenizeButton.disabled = false;
});
document.querySelector("#clear-cache").addEventListener("click", () => {
tokenizerCache = {};
localStorage.tokenizerCache = "{}";
});