Spaces:
Running
Running
File size: 1,676 Bytes
aa937f3 | 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 | import { env, pipeline } from "@huggingface/transformers";
import "./style.css";
const MODEL_ID = "Reza2kn/MiniCPM5-1B-ONNX-Web";
const output = document.querySelector("#output");
const run = document.querySelector("#run");
const prompt = document.querySelector("#prompt");
const maxTokens = document.querySelector("#maxTokens");
const temperature = document.querySelector("#temperature");
const backend = document.querySelector("#backend");
env.allowLocalModels = false;
env.backends.onnx.wasm.numThreads = Math.min(4, navigator.hardwareConcurrency || 4);
let generatorPromise = null;
function setStatus(text) {
output.textContent = text;
}
async function getGenerator() {
if (!generatorPromise) {
setStatus(`Loading ${MODEL_ID} with ${backend.value}...`);
generatorPromise = pipeline("text-generation", MODEL_ID, {
device: backend.value,
dtype: "q4",
});
}
return generatorPromise;
}
backend.addEventListener("change", () => {
generatorPromise = null;
setStatus("Backend changed. Run again to reload.");
});
run.addEventListener("click", async () => {
run.disabled = true;
try {
const generator = await getGenerator();
setStatus("Generating...");
const result = await generator(prompt.value, {
max_new_tokens: Number(maxTokens.value),
temperature: Number(temperature.value),
do_sample: Number(temperature.value) > 0,
});
setStatus(result?.[0]?.generated_text ?? JSON.stringify(result, null, 2));
} catch (error) {
setStatus(error.stack || error.message || String(error));
} finally {
run.disabled = false;
}
});
setStatus("Ready. Upload the ONNX-Web artifact, then run.");
|