| | <!DOCTYPE html> |
| | <html> |
| | <head> |
| | <title>FunctionGemma Physics Demo</title> |
| | <script type="module"> |
| | import * as webllm from "https://esm.run/@mlc-ai/web-llm"; |
| | |
| | const appConfig = { |
| | model_list: [ |
| | { |
| | model: "https://huggingface.co/2796gauravc/functiongemma-mlc", |
| | model_id: "functiongemma-physics", |
| | |
| | model_lib: "https://raw.githubusercontent.com/mlc-ai/binary-mlc-llm-libs/main/gemma-2b-it-q4f16_1-ctx4k_cs1k-webgpu.wasm" |
| | } |
| | ] |
| | }; |
| | |
| | async function initModel() { |
| | const statusDiv = document.getElementById("status"); |
| | statusDiv.textContent = "Loading model..."; |
| | |
| | try { |
| | const engine = await webllm.CreateMLCEngine( |
| | "functiongemma-physics", |
| | { |
| | appConfig, |
| | initProgressCallback: (progress) => { |
| | statusDiv.textContent = progress.text; |
| | } |
| | } |
| | ); |
| | |
| | statusDiv.textContent = "Model loaded! Type a message."; |
| | |
| | document.getElementById("send").onclick = async () => { |
| | const input = document.getElementById("input").value; |
| | const output = document.getElementById("output"); |
| | |
| | output.textContent = "Thinking..."; |
| | |
| | const response = await engine.chat.completions.create({ |
| | messages: [{ role: "user", content: input }], |
| | stream: false |
| | }); |
| | |
| | output.textContent = response.choices[0].message.content; |
| | }; |
| | } catch (error) { |
| | statusDiv.textContent = "Error: " + error.message; |
| | } |
| | } |
| | |
| | window.onload = initModel; |
| | </script> |
| | </head> |
| | <body> |
| | <h1>FunctionGemma Physics Game Assistant</h1> |
| | <div id="status">Initializing...</div> |
| | <br> |
| | <input type="text" id="input" placeholder="Ask about physics..." style="width:400px"> |
| | <button id="send">Send</button> |
| | <br><br> |
| | <div id="output" style="border:1px solid #ccc; padding:10px; min-height:100px;"></div> |
| | </body> |
| | </html> |
| |
|