TinyDecide / load.js
TheREZOR's picture
Python, Rust and ESP32 engines, shared conformance set, promo video
f2878d0 verified
Raw History Blame Contribute Delete
1.35 kB
// Loads a TinyDecide build from a folder (Node) or a URL (browser, Deno, Node 18+).
// import { load } from "./load.js";
// const model = await load("./"); // meta.json + model.bin here
// const model = await load("https://huggingface.co/TheREZOR/TinyDecide/resolve/main/");
// const full = await load("https://huggingface.co/TheREZOR/TinyDecide/resolve/main/full/");
import { TinyDecide } from "./tinydecide.js";
export const HF_URL = "https://huggingface.co/TheREZOR/TinyDecide/resolve/main/";
export async function load(base = HF_URL) {
const dir = base.endsWith("/") ? base : base + "/";
if (/^(https?|blob|data):/.test(dir) || typeof window !== "undefined") {
const [meta, bin] = await Promise.all([
fetch(dir + "meta.json").then((r) => { if (!r.ok) throw new Error(`meta.json: HTTP ${r.status}`); return r.json(); }),
fetch(dir + "model.bin").then((r) => { if (!r.ok) throw new Error(`model.bin: HTTP ${r.status}`); return r.arrayBuffer(); }),
]);
return new TinyDecide(meta, bin);
}
const { readFile } = await import("node:fs/promises");
const [meta, bin] = await Promise.all([readFile(dir + "meta.json", "utf8"), readFile(dir + "model.bin")]);
return new TinyDecide(JSON.parse(meta), bin.buffer.slice(bin.byteOffset, bin.byteOffset + bin.byteLength));
}