Orpheus_TTS / index.js
zoharcozmox's picture
Update index.js
00054da verified
import { pipeline, env } from "@xenova/transformers";
const MODEL_ID = "onnx-community/orpheus-3b-0.1-ft-ONNX";
const modal = document.getElementById("modal");
const modalText = document.getElementById("modal-text");
const progressBar = document.getElementById("progress-fill");
const inputEl = document.getElementById("input-text");
const btnEl = document.getElementById("generate-btn");
const loadingEl = document.getElementById("loading-text");
const outputEl = document.getElementById("output-text");
let generator = null;
// Set up ONNX WASM paths (optional)
env.backends.onnx.wasm.wasmPaths = "https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2/dist/";
env.useWasmCPU();
btnEl.addEventListener("click", async () => {
const prompt = inputEl.value.trim();
if (!prompt) return;
btnEl.disabled = true;
outputEl.textContent = "";
loadingEl.textContent = "";
// Show downloading modal
modal.classList.remove("hidden");
progressBar.style.width = "0%";
modalText.textContent = "Loading model... 0%";
// Load (or reuse) pipeline with progress callback :contentReference[oaicite:0]{index=0}
if (!generator) {
generator = await pipeline("text2text-generation", MODEL_ID, {
progress_callback: (args) => {
if (args.status === "progress") {
const pct = Math.floor(args.progress * 100);
progressBar.style.width = pct + "%";
modalText.textContent = `Loading model... ${pct}%`;
}
},
});
}
// Hide modal
modalText.textContent = "Model ready!";
await new Promise((r) => setTimeout(r, 300));
modal.classList.add("hidden");
// Stream tokens as they generate :contentReference[oaicite:1]{index=1}
loadingEl.classList.remove("hidden");
await generator(prompt, {
max_length: 256,
callback_function: (beams) => {
// beams may be an array of { token, text, ... }
// append the latest token or text
const tok = typeof beams === "string"
? beams
: (beams[0]?.text || beams[0]?.token || "");
loadingEl.textContent += tok;
},
});
// Final output from the pipeline
const [res] = await generator(prompt, { max_length: 0 });
loadingEl.classList.add("hidden");
outputEl.textContent = res.generated_text;
btnEl.disabled