GemmaOnDevice / index.js
thejagstudio's picture
Upload 3 files
bf8ef86 verified
import { FilesetResolver, LlmInference } from "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai";
const input = document.getElementById("input");
const output = document.getElementById("output");
const submit = document.getElementById("submit");
const modelFileName = "gemma-2b-it-gpu-int4.bin";
/**
* Display newly generated partial results to the output text box.
*/
function displayPartialResults(partialResults, complete) {
output.textContent += partialResults;
if (complete) {
if (!output.textContent) {
output.textContent = "Result is empty";
}
submit.disabled = false;
}
}
/**
* Main function to run LLM Inference.
*/
async function runDemo() {
const genaiFileset = await FilesetResolver.forGenAiTasks("https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/wasm");
let llmInference;
submit.onclick = () => {
output.textContent = "";
submit.disabled = true;
llmInference.generateResponse(input.value, displayPartialResults);
};
submit.value = "Loading the model...";
LlmInference.createFromOptions(genaiFileset, {
baseOptions: { modelAssetPath: modelFileName },
// maxTokens: 512, // The maximum number of tokens (input tokens + output
// // tokens) the model handles.
// randomSeed: 1, // The random seed used during text generation.
// topK: 1, // The number of tokens the model considers at each step of
// // generation. Limits predictions to the top k most-probable
// // tokens. Setting randomSeed is required for this to make
// // effects.
// temperature:
// 1.0, // The amount of randomness introduced during generation.
// // Setting randomSeed is required for this to make effects.
})
.then((llm) => {
llmInference = llm;
submit.disabled = false;
submit.value = "Get Response";
})
.catch(() => {
alert("Failed to initialize the task.");
});
}
runDemo();