| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="UTF-8" /> |
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
| <script src="https://cdn.tailwindcss.com"></script> |
| |
| <script src="https://unpkg.com/es-module-shims@1.7.0/dist/es-module-shims.js"></script> |
| <script type="importmap"> |
| { |
| "imports": { |
| "@huggingface/inference": "https://cdn.jsdelivr.net/npm/@huggingface/inference@1.7.1/+esm" |
| } |
| } |
| </script> |
| </head> |
| <body> |
| <form class="w-[90%] mx-auto pt-8" onsubmit="launch(); return false;"> |
| <h1 class="text-3xl font-bold"> |
| <span |
| class="bg-clip-text text-transparent bg-gradient-to-r from-pink-500 to-violet-500" |
| > |
| Streaming text generation demo with |
| <a href="https://github.com/huggingface/huggingface.js"> |
| <kbd>@huggingface/inference</kbd> |
| </a> |
| </span> |
| </h1> |
|
|
| <p class="mt-8"> |
| First, input your token if you have one! Otherwise, you may encounter |
| rate limiting. You can create a token for free at |
| <a |
| target="_blank" |
| href="https://huggingface.co/settings/tokens" |
| class="underline text-blue-500" |
| >hf.co/settings/tokens</a |
| > |
| </p> |
|
|
| <input |
| type="text" |
| id="token" |
| class="rounded border-2 border-blue-500 shadow-md px-3 py-2 w-96 mt-6" |
| placeholder="token (optional)" |
| /> |
|
|
| <p class="mt-8"> |
| Pick the model you want to run. Check out over 10k models for text to |
| text generation |
| <a |
| href="https://huggingface.co/models?pipeline_tag=text2text-generation&sort=likes" |
| class="underline text-blue-500" |
| target="_blank" |
| > |
| here</a |
| > |
| </p> |
|
|
| |
| <input |
| type="text" |
| id="model" |
| class="rounded border-2 border-blue-500 shadow-md px-3 py-2 w-96 mt-6" |
| value="google/flan-t5-xxl" |
| required |
| /> |
|
|
| <p class="mt-8">Finally the prompt</p> |
|
|
| <textarea |
| class="rounded border-blue-500 shadow-md px-3 py-2 w-96 mt-6 block" |
| rows="5" |
| id="prompt" |
| > |
| Q: How is butter made? |
|
|
| Describe the process from the beginning |
| </textarea |
| > |
|
|
| <button |
| id="submit" |
| class="my-8 bg-green-500 rounded py-3 px-5 text-white shadow-md disabled:bg-slate-300" |
| > |
| Run |
| </button> |
|
|
| <p class="text-gray-400 text-sm">Output logs</p> |
| <div id="logs" class="bg-gray-100 rounded p-3 mb-8 text-sm"> |
| Output will be here |
| </div> |
|
|
| <p>Check out the <a class="underline text-blue-500" href="https://huggingface.co/spaces/huggingfacejs/streaming-text-generation/blob/main/index.html" target="_blank">source code</a></p> |
| </form> |
|
|
| <script type="module"> |
| import { HfInference } from "@huggingface/inference"; |
| let running = false; |
| async function launch() { |
| if (running) { |
| return; |
| } |
| running = true; |
| try { |
| const hf = new HfInference( |
| document.getElementById("token").value.trim() || undefined |
| ); |
| const model = document.getElementById("model").value.trim(); |
| const prompt = document.getElementById("prompt").value.trim(); |
| document.getElementById("logs").textContent = ""; |
| for await (const output of hf.textGenerationStream({ |
| model, |
| inputs: prompt, |
| parameters: { max_new_tokens: 250 } |
| }, { |
| use_cache: false |
| })) { |
| document.getElementById("logs").textContent += output.token.text; |
| } |
| } catch (err) { |
| alert("Error: " + err.message); |
| } finally { |
| running = false; |
| } |
| } |
| window.launch = launch; |
| </script> |
| </body> |
| </html> |
|
|