neetnestor's picture
Use ace editor for grammar input
f18fa7e
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>WebLLM Structured Generation Playground</title>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css"
/>
<link rel="stylesheet" href="./style/style.css" />
<link rel="stylesheet" href="./style/ace.css" />
<link rel="stylesheet" href="./style/hljs.css" />
</head>
<body>
<h1>WebLLM Structured Generation Playground</h1>
<h4>
Generate structured output from LLMs using
<a
referrerpolicy="no-referrer"
href="https://github.com/mlc-ai/web-llm"
target="_blank"
>WebLLM</a
>.
</h4>
<main>
<div id="left-col" class="container">
<div class="card">
<form>
<label for="model-selection" class="container"
><span><b>Model</b></span>
<select id="model-selection"></select
></label>
</form>
</div>
<div class="card">
<form>
<label for="grammar-selection" class="container"
><span><b>Grammar</b></span>
<select id="grammar-selection" value="json">
<option value="json">JSON Schema (Default)</option>
<option value="custom">Custom Grammar</option>
</select></label
>
</form>
</div>
<div id="ebnf-grammar-container" class="card hidden">
<form>
<label for="ebnf-grammar" class="container"
><span><b>Custom Grammar</b></span>
<span>
The custom grammar is described in the
<a
href="https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form"
referrerpolicy="no-referrer"
target="_blank"
>extended Backus-Naur form (EBNF)</a
>. Below is an example of JSON grammar in EBNF. Please follow
this example when writing new grammars.
</span>
<div id="ebnf-grammar"></div>
</label>
</form>
</div>
<div id="schema-container" class="card">
<form>
<label class="container"
><span><b>Schema</b></span>
<span
>Check
<a
href="https://github.com/sinclairzx81/typebox"
referrerpolicy="no-referrer"
target="_blank"
>TypeBox</a
>
for JSON schema type syntax and documentation.</span
>
<div id="schema"></div>
</label>
</form>
</div>
</div>
<div id="right-col" class="container">
<div class="card">
<form>
<label for="prompt" class="container"
><span><b>Prompt</b></span>
<textarea
id="prompt"
dir="ltr"
placeholder=""
rows="1"
></textarea>
</label>
</form>
</div>
<button id="generate">Generate</button>
<div class="card">
<form>
<label class="output"
><span><b>Output</b></span>
<div id="output"></div>
</label>
<p class="info hidden" id="stats"></p>
</form>
</div>
</div>
</main>
<script src="./dist/index.js" type="module"></script>
</body>
</html>