summaryrefslogtreecommitdiff
path: root/examples/server/public/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'examples/server/public/index.html')
-rw-r--r--examples/server/public/index.html29
1 files changed, 29 insertions, 0 deletions
diff --git a/examples/server/public/index.html b/examples/server/public/index.html
index de41da18..c43becc4 100644
--- a/examples/server/public/index.html
+++ b/examples/server/public/index.html
@@ -141,6 +141,7 @@
} from '/index.js';
import { llama } from '/completion.js';
+ import { SchemaConverter } from '/json-schema-to-grammar.mjs';
const session = signal({
prompt: "This is a conversation between user and llama, a friendly chatbot. respond in simple markdown.",
@@ -166,6 +167,7 @@
mirostat: 0, // 0/1/2
mirostat_tau: 5, // target entropy
mirostat_eta: 0.1, // learning rate
+ grammar: null,
})
const llamaStats = signal(null)
@@ -304,6 +306,26 @@
const updateParamsFloat = (el) => params.value = { ...params.value, [el.target.name]: parseFloat(el.target.value) }
const updateParamsInt = (el) => params.value = { ...params.value, [el.target.name]: Math.floor(parseFloat(el.target.value)) }
+ const grammarJsonSchemaPropOrder = signal('')
+ const updateGrammarJsonSchemaPropOrder = (el) => grammarJsonSchemaPropOrder.value = el.target.value
+ const convertJSONSchemaGrammar = () => {
+ try {
+ const schema = JSON.parse(params.value.grammar)
+ const converter = new SchemaConverter(
+ grammarJsonSchemaPropOrder.value
+ .split(',')
+ .reduce((acc, cur, i) => ({...acc, [cur.trim()]: i}), {})
+ )
+ converter.visit(schema, '')
+ params.value = {
+ ...params.value,
+ grammar: converter.formatGrammar(),
+ }
+ } catch (e) {
+ alert(`Convert failed: ${e.message}`)
+ }
+ }
+
const FloatField = ({label, max, min, name, step, value}) => {
return html`
<div>
@@ -355,6 +377,13 @@
<label for="template">Chat history template</label>
<textarea id="template" name="historyTemplate" value="${session.value.historyTemplate}" rows=1 oninput=${updateSession}/>
</div>
+
+ <div>
+ <label for="template">Grammar</label>
+ <textarea id="grammar" name="grammar" placeholder="Use gbnf or JSON Schema+convert" value="${params.value.grammar}" rows=4 oninput=${updateParams}/>
+ <input type="text" name="prop-order" placeholder="order: prop1,prop2,prop3" oninput=${updateGrammarJsonSchemaPropOrder} />
+ <button type="button" onclick=${convertJSONSchemaGrammar}>Convert JSON Schema</button>
+ </div>
</fieldset>
<fieldset class="two">