<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Text generation huggingface.js Mistral-7B-Instruct-v0.1</title> <script src="https://cdn.tailwindcss.com"></script> </head> <body class="container mx-auto p-3 max-w-xl"> <script type="module"> import { HfInference } from "https://cdn.skypack.dev/@huggingface/inference@2.6.4"; async function* textStreamRes(hf, controller, input) { let tokens = []; for await (const output of hf.textGenerationStream( { model: "mistralai/Mistral-7B-Instruct-v0.1", inputs: "<s>[INST]Write an essay about Sartre[/INST]", parameters: { max_new_tokens: 1000 }, }, { use_cache: false, signal: controller.signal, } )) { tokens.push(output); yield tokens; } } let controller; async function run() { controller = new AbortController(); const message = `<s>[INST]{:}[/INST]`; const textInput = document.querySelector("#input").value; const input = message.replace("{:}", textInput); const token = document.querySelector("#token").value; const hf = new HfInference(token); const gen = document.querySelector("#generation"); gen.innerHTML = ""; try { for await (const tokens of textStreamRes(hf, controller, input)) { const lastToken = tokens[tokens.length - 1]; const span = document.createElement("span"); span.innerText = lastToken.token.text; gen.appendChild(span); } } catch (e) { console.log("aborted"); } } document.addEventListener("DOMContentLoaded", () => { const token = localStorage.getItem("token"); if (token) { document.querySelector("#token").value = token; } }); document.querySelector("#token").addEventListener("change", (e) => { localStorage.setItem("token", e.target.value); }); document.querySelector("#run").addEventListener("click", run); document.querySelector("#abort").addEventListener("click", () => { controller.abort(); }); </script> <div class="grid grid-cols-1 gap-2"> <header> <h1 class="text-3xl">Mistral-7B-Instruct-v0.1</h1> <h2 class="text-xl">huggingface.js</h2> </header> <input id="token" class="border-2 border-gray-500 rounded-md" placeholder="HF-TOKEN" type="password" /> <textarea id="input" class="border-2 border-gray-500 rounded-md" style="width: 100%; height: 100px" > Write an essay about Sartre</textarea > <div class="flex gap-2"> <button id="run" class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded" > GENERATE </button> <button id="abort" class="bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded" > ABORT </button> </div> </div> <div id="generation" class="py-3"></div> </body> </html>