Spaces:
Running
Running
import { | |
__internal_XetBlob as XetBlob, | |
__internal_sha256, | |
} from "@huggingface/hub"; | |
async function checkRange(n) { | |
// Get selected option | |
const select = document.getElementById("file"); | |
const option = select.options[select.selectedIndex]; | |
// hash is in data-xet-hash attribute | |
const xetHash = option.getAttribute("data-xet-hash"); | |
const sha = option.getAttribute("data-sha"); | |
const size = +option.getAttribute("data-size"); | |
const path = `https://huggingface.co/celinah/xet-experiments/resolve/main/${option.value}`; | |
const output = document.getElementById("output"); | |
output.textContent = "..."; | |
const blob = new XetBlob({ | |
repo: { | |
type: "model", | |
name: "celinah/xet-experiments", | |
}, | |
hash: xetHash, | |
size, | |
internalLogging: true, | |
}); | |
const [own, bridge] = await Promise.all([ | |
blob.slice(0, n).arrayBuffer(), | |
fetch(path, { headers: { Range: `bytes=0-${n - 1}` } }).then((res) => | |
res.arrayBuffer() | |
), | |
]); | |
output.textContent += `Own: ${own.byteLength.toLocaleString()}\nBridge: ${bridge.byteLength.toLocaleString()}\n`; | |
// Check if the first n bytes are the same | |
const array1 = new Uint8Array(own); | |
const array2 = new Uint8Array(bridge); | |
let different = false; | |
for (let i = 0; i < n; i++) { | |
if (array1[i] !== array2[i]) { | |
output.textContent += `Difference at ${i}\n`; | |
different = true; | |
break; | |
} | |
} | |
if (!different) { | |
output.textContent += "No differences\n"; | |
} | |
} | |
async function download() { | |
const select = document.getElementById("file"); | |
const option = select.options[select.selectedIndex]; | |
const xetHash = option.getAttribute("data-xet-hash"); | |
const size = +option.getAttribute("data-size"); | |
const output = document.getElementById("output"); | |
output.textContent = "..."; | |
const blob = new XetBlob({ | |
repo: { | |
type: "model", | |
name: "celinah/xet-experiments", | |
}, | |
hash: xetHash, | |
size, | |
listener: (progress) => { | |
output.textContent += JSON.stringify(progress) + "\n"; | |
output.textContent = | |
output.textContent.split(/\n+/).slice(-1000).join("\n") + "\n"; | |
}, | |
internalLogging: true, | |
}); | |
const arrayBuffer = await blob.arrayBuffer(); | |
const blob2 = new Blob([arrayBuffer]); | |
const url = URL.createObjectURL(blob2); | |
const a = document.createElement("a"); | |
a.href = url; | |
a.download = option.value; | |
a.click(); | |
} | |
async function checkSha() { | |
const select = document.getElementById("file"); | |
const option = select.options[select.selectedIndex]; | |
const xetHash = option.getAttribute("data-xet-hash"); | |
const sha = option.getAttribute("data-sha"); | |
const size = +option.getAttribute("data-size"); | |
const output = document.getElementById("output"); | |
output.textContent = "..."; | |
const blob = new XetBlob({ | |
repo: { | |
type: "model", | |
name: "celinah/xet-experiments", | |
}, | |
hash: xetHash, | |
size, | |
internalLogging: true, | |
}); | |
const iterator = __internal_sha256(blob); | |
while (1) { | |
const result = await iterator.next(); | |
if (result.done) { | |
const hash = result.value; | |
output.textContent += `SHA: ${hash}\n`; | |
output.textContent += `Expected: ${sha}\n`; | |
output.textContent += `Match: ${hash === sha}\n`; | |
break; | |
} | |
output.textContent = `Progress: ${result.value * 100}%\n`; | |
} | |
} | |
// On loaded, add event listeners | |
window.document.addEventListener("DOMContentLoaded", () => { | |
console.log("Loaded"); | |
document.getElementById("10kB").addEventListener("click", () => { | |
console.clear(); | |
checkRange(10_000).catch((err) => { | |
console.error(err); | |
alert(err); | |
}); | |
}); | |
document.getElementById("100kB").addEventListener("click", () => { | |
console.clear(); | |
checkRange(100_000).catch((err) => { | |
console.error(err); | |
alert(err); | |
}); | |
}); | |
document.getElementById("1MB").addEventListener("click", () => { | |
console.clear(); | |
checkRange(1_000_000).catch((err) => { | |
console.error(err); | |
alert(err); | |
}); | |
}); | |
document.getElementById("sequential").addEventListener("click", () => { | |
console.clear(); | |
checkRange(100_000) | |
.then(() => checkRange(1_000_000)) | |
.catch((err) => { | |
console.error(err); | |
alert(err); | |
}); | |
}); | |
document.getElementById("download").addEventListener("click", () => { | |
console.clear(); | |
download().catch((err) => { | |
console.error(err); | |
alert(err); | |
}); | |
}); | |
document.getElementById("sha").addEventListener("click", () => { | |
console.clear(); | |
checkSha().catch((err) => { | |
console.error(err); | |
alert(err); | |
}); | |
}); | |
}); | |