import { describe, expect, it, beforeAll } from "vitest"; import { WebBlob } from "./WebBlob"; describe("WebBlob", () => { const resourceUrl = new URL("https://huggingface.co/spaces/aschen/push-model-from-web/raw/main/mobilenet/model.json"); let fullText: string; let size: number; let contentType: string; beforeAll(async () => { const response = await fetch(resourceUrl, { method: "HEAD" }); size = Number(response.headers.get("content-length")); contentType = response.headers.get("content-type") || ""; fullText = await (await fetch(resourceUrl)).text(); }); it("should create a WebBlob with a slice on the entire resource", async () => { const webBlob = await WebBlob.create(resourceUrl, { cacheBelow: 0, accessToken: undefined }); expect(webBlob).toMatchObject({ url: resourceUrl, start: 0, end: size, contentType, }); expect(webBlob).toBeInstanceOf(WebBlob); expect(webBlob.size).toBe(size); expect(webBlob.type).toBe(contentType); const text = await webBlob.text(); expect(text).toBe(fullText); const streamText = await new Response(webBlob.stream()).text(); expect(streamText).toBe(fullText); }); it("should create a WebBlob with a slice on the entire resource, cached", async () => { const webBlob = await WebBlob.create(resourceUrl, { cacheBelow: 1_000_000, accessToken: undefined }); expect(webBlob).not.toBeInstanceOf(WebBlob); expect(webBlob.size).toBe(size); expect(webBlob.type.replace(/;\s*charset=utf-8/, "")).toBe(contentType.replace(/;\s*charset=utf-8/, "")); const text = await webBlob.text(); expect(text).toBe(fullText); const streamText = await new Response(webBlob.stream()).text(); expect(streamText).toBe(fullText); }); it("should lazy load a LFS file hosted on Hugging Face", async () => { const zephyrUrl = "https://huggingface.co/HuggingFaceH4/zephyr-7b-alpha/resolve/main/model-00001-of-00008.safetensors"; const url = new URL(zephyrUrl); const webBlob = await WebBlob.create(url); expect(webBlob.size).toBe(1_889_587_040); expect(webBlob).toBeInstanceOf(WebBlob); expect(webBlob).toMatchObject({ url }); expect(await webBlob.slice(10, 22).text()).toBe("__metadata__"); }); it("should lazy load a Xet file hosted on Hugging Face", async () => { const stableDiffusionUrl = "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/unet/diffusion_pytorch_model.fp16.safetensors"; const url = new URL(stableDiffusionUrl); const webBlob = await WebBlob.create(url); expect(webBlob.size).toBe(5_135_149_760); expect(webBlob).toBeInstanceOf(WebBlob); expect(webBlob).toMatchObject({ url }); expect(await webBlob.slice(10, 22).text()).toBe("__metadata__"); }); it("should create a slice on the file", async () => { const expectedText = fullText.slice(10, 20); const slice = (await WebBlob.create(resourceUrl, { cacheBelow: 0, accessToken: undefined })).slice(10, 20); expect(slice).toMatchObject({ url: resourceUrl, start: 10, end: 20, contentType, }); expect(slice.size).toBe(10); expect(slice.type).toBe(contentType); const sliceText = await slice.text(); expect(sliceText).toBe(expectedText); const streamText = await new Response(slice.stream()).text(); expect(streamText).toBe(expectedText); }); });