|
<!doctype html> |
|
<html lang="en" class="h-full"> |
|
<head> |
|
<meta charset="utf-8" /> |
|
<meta name="viewport" content="width=device-width, initial-scale=1" /> |
|
<title id="page-title">WebLLM Simple Chat Space</title> |
|
<link rel="stylesheet" href="styles/katex.min.css" /> |
|
<link |
|
rel="stylesheet" |
|
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/dark.min.css" |
|
/> |
|
<script type="module" crossorigin src="./assets/index-DVpY-Jxx.js"></script> |
|
<link rel="stylesheet" crossorigin href="./assets/index-BwUBwogn.css"> |
|
</head> |
|
|
|
<body class="h-full text-gray-300 bg-[#121212] flex flex-col overflow-hidden"> |
|
<div id="model-display" class="absolute top-2 left-2 text-gray-300 text-sm font-semibold hidden"> |
|
</div> |
|
|
|
<div class="flex w-full flex-col h-screen"> |
|
<div id="initial-content" class="w-full max-w-xl mx-auto"> |
|
<h1 id="page-heading" class="text-3xl mt-10 font-bold mb-2 text-center text-gray-100 p-4"> |
|
WebLLM on WebGPU |
|
</h1> |
|
<p id="page-description" class="text-lg text-gray-400 mb-6 text-center"> |
|
Blazing fast inference with WebGPU and WebLLM running locally in your browser. |
|
</p> |
|
<div |
|
class="border-[var(--border-color)] border-[1.5px] rounded-lg bg-[var(--bg-color)] shadow-md p-4 mb-4 mx-auto w-full" |
|
> |
|
<h2 class="text-xl font-semibold mb-4 text-gray-100">Load Model</h2> |
|
<div |
|
class="flex flex-col sm:flex-row space-y-2 sm:space-y-0 sm:space-x-4" |
|
> |
|
<select |
|
id="model-selection" |
|
class="flex-grow p-2 border border-gray-700 rounded-md focus:outline-none focus:ring-2 focus:[var(--border-color)] bg-[var(--bg-color)] text-gray-300" |
|
> |
|
|
|
</select> |
|
<button |
|
id="download" |
|
class="px-4 py-2 border-[var(--border-color)] border-[1.5px] text-white rounded-md focus:outline-none focus:ring-2 focus:[var(--border-color)] focus:ring-offset-2 focus:ring-offset-gray-900 transition duration-150 ease-in-out" |
|
> |
|
Download |
|
</button> |
|
</div> |
|
<div id="download-status" class="text-sm text-gray-400 m-2"></div> |
|
|
|
|
|
<div class="mt-4"> |
|
<label for="system-prompt" class="block text-sm font-medium text-gray-300 mb-2">System Prompt:</label> |
|
<textarea |
|
id="system-prompt" |
|
rows="8" |
|
class="w-full p-2 border border-gray-700 rounded-md focus:outline-none focus:ring-2 focus:[var(--border-color)] bg-[var(--bg-color)] text-gray-300" |
|
placeholder="Enter system prompt here..." |
|
>You are a dialogue generator for the video game Fallout 5, which is set in post apocalyptic United States, 500 years after nuclear apocalypse. The prompt will include a description of the character that the user is speaking to. if the prompt is <hi> the user is approaching and the character gives a greeting. Otherwise the prompt represents the user's statement to the character, and the character responds in kind. Your response will always follow the JSON format {"dialogue":"<the character's dialogue>"} No other commentary besides the JSON object. No markdown.</textarea> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
<div class="flex-grow overflow-hidden flex flex-col"> |
|
<div id="chat-box" class="flex-grow overflow-y-auto p-4 w-full mx-auto space-y-4 relative prose prose-invert custom-scrollbar"> |
|
<div id="example-messages" class="flex flex-col mt-36 items-center justify-center w-full"> |
|
<div class="grid grid-cols-2 gap-4 w-full max-w-xl mx-auto"> |
|
|
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<div id="chat-stats" class="fixed bottom-4 left-4 p-4 border-[var(--border-color)] border-[1.5px] rounded-lg bg-[var(--bg-color)] text-white font-mono font-bold text-sm hidden"> |
|
<div class="table-row"> |
|
<div class="table-cell pr-4">Prompt:</div> |
|
<div id="prompt-tokens" class="table-cell">-</div> |
|
</div> |
|
<div class="table-row"> |
|
<div class="table-cell pr-4">Completion:</div> |
|
<div id="completion-tokens" class="table-cell">-</div> |
|
</div> |
|
<div class="table-row"> |
|
<div class="table-cell pr-4">Prefill:</div> |
|
<div id="prefill-speed" class="table-cell">-</div> |
|
</div> |
|
<div class="table-row"> |
|
<div class="table-cell pr-4">Decoding:</div> |
|
<div id="decoding-speed" class="table-cell">-</div> |
|
</div> |
|
</div> |
|
|
|
<div class="border-[var(--border-color)] border-[1.5px] rounded-lg bg-[var(--bg-color)] w-full max-w-2xl mx-auto p-4 mb-4"> |
|
<div class="max-w-3xl mx-auto"> |
|
<div class="flex space-x-2"> |
|
<input |
|
type="text" |
|
id="user-input" |
|
placeholder="Type a message..." |
|
class="flex-grow p-3 rounded-lg bg-[var(--bg-color)] focus:outline-none focus:ring-2 focus:[var(--border-color)] text-gray-300" |
|
/> |
|
<button |
|
id="send" |
|
disabled |
|
class="px-4 py-2 text-white rounded-md focus:outline-none focus:ring-2 focus:[var(--border-color)] focus:ring-offset-2 focus:ring-offset-gray-900 disabled:opacity-50 disabled:cursor-not-allowed transition duration-150 ease-in-out" |
|
> |
|
<svg |
|
xmlns="http://www.w3.org/2000/svg" |
|
class="h-5 w-5" |
|
viewBox="0 0 20 20" |
|
fill="currentColor" |
|
> |
|
<path |
|
fill-rule="evenodd" |
|
d="M3.293 9.707a1 1 0 010-1.414l6-6a1 1 0 011.414 0l6 6a1 1 0 01-1.414 1.414L11 5.414V17a1 1 0 11-2 0V5.414L4.707 9.707a1 1 0 01-1.414 0z" |
|
clip-rule="evenodd" |
|
/> |
|
</svg> |
|
</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
|
|
</body> |
|
</html> |