server: expose remaining generation params, for the adventurous
This commit is contained in:
parent
a1a6b68dca
commit
1dbdd2310c
2 changed files with 1019 additions and 871 deletions
File diff suppressed because it is too large
Load diff
|
@ -79,6 +79,25 @@
|
||||||
gap: 1em;
|
gap: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
details {
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 0.5em 0.5em 0;
|
||||||
|
margin-top: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
font-weight: bold;
|
||||||
|
margin: -0.5em -0.5em 0;
|
||||||
|
padding: 0.5em;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
details[open] {
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
textarea {
|
textarea {
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
@ -131,10 +150,17 @@
|
||||||
const params = signal({
|
const params = signal({
|
||||||
n_predict: 400,
|
n_predict: 400,
|
||||||
temperature: 0.7,
|
temperature: 0.7,
|
||||||
repeat_last_n: 256,
|
repeat_last_n: 256, // 0 = disable penalty, -1 = context size
|
||||||
repeat_penalty: 1.18,
|
repeat_penalty: 1.18, // 1.0 = disabled
|
||||||
top_k: 40,
|
top_k: 40, // <= 0 to use vocab size
|
||||||
top_p: 0.5,
|
top_p: 0.5, // 1.0 = disabled
|
||||||
|
tfs_z: 1.0, // 1.0 = disabled
|
||||||
|
typical_p: 1.0, // 1.0 = disabled
|
||||||
|
presence_penalty: 0.0, // 0.0 = disabled
|
||||||
|
frequency_penalty: 0.0, // 0.0 = disabled
|
||||||
|
mirostat: 0, // 0/1/2
|
||||||
|
mirostat_tau: 5, // target entropy
|
||||||
|
mirostat_eta: 0.1, // learning rate
|
||||||
})
|
})
|
||||||
|
|
||||||
const llamaStats = signal(null)
|
const llamaStats = signal(null)
|
||||||
|
@ -272,6 +298,26 @@
|
||||||
const updateParamsFloat = (el) => params.value = { ...params.value, [el.target.name]: parseFloat(el.target.value) }
|
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 updateParamsInt = (el) => params.value = { ...params.value, [el.target.name]: Math.floor(parseFloat(el.target.value)) }
|
||||||
|
|
||||||
|
const FloatField = ({label, max, min, name, step, value}) => {
|
||||||
|
return html`
|
||||||
|
<div>
|
||||||
|
<label for="${name}">${label}</label>
|
||||||
|
<input type="range" id="${name}" min="${min}" max="${max}" step="${step}" name="${name}" value="${value}" oninput=${updateParamsFloat} />
|
||||||
|
<span>${value}</span>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
};
|
||||||
|
|
||||||
|
const IntField = ({label, max, min, name, value}) => {
|
||||||
|
return html`
|
||||||
|
<div>
|
||||||
|
<label for="${name}">${label}</label>
|
||||||
|
<input type="range" id="${name}" min="${min}" max="${max}" name="${name}" value="${value}" oninput=${updateParamsInt} />
|
||||||
|
<span>${value}</span>
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
};
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
<form>
|
<form>
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
@ -306,42 +352,25 @@
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<fieldset class="two">
|
<fieldset class="two">
|
||||||
<div>
|
${IntField({label: "Predictions", max: 2048, min: -1, name: "n_predict", value: params.value.n_predict})}
|
||||||
<label for="temperature">Temperature</label>
|
${FloatField({label: "Temperature", max: 1.5, min: 0.0, name: "temperature", step: 0.01, value: params.value.temperature})}
|
||||||
<input type="range" id="temperature" min="0.0" max="1.5" step="0.01" name="temperature" value="${params.value.temperature}" oninput=${updateParamsFloat} />
|
${FloatField({label: "Penalize repeat sequence", max: 2.0, min: 0.0, name: "repeat_penalty", step: 0.01, value: params.value.repeat_penalty})}
|
||||||
<span>${params.value.temperature}</span>
|
${IntField({label: "Consider N tokens for penalize", max: 2048, min: 0, name: "repeat_last_n", value: params.value.repeat_last_n})}
|
||||||
</div>
|
${IntField({label: "Top-K sampling", max: 100, min: -1, name: "top_k", value: params.value.top_k})}
|
||||||
|
${FloatField({label: "Top-P sampling", max: 1.0, min: 0.0, name: "top_p", step: 0.01, value: params.value.top_p})}
|
||||||
<div>
|
|
||||||
<label for="nPredict">Predictions</label>
|
|
||||||
<input type="range" id="nPredict" min="-1" max="2048" step="1" name="n_predict" value="${params.value.n_predict}" oninput=${updateParamsFloat} />
|
|
||||||
<span>${params.value.n_predict}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<label for="repeat_penalty">Penalize repeat sequence</label>
|
|
||||||
<input type="range" id="repeat_penalty" min="0.0" max="2.0" step="0.01" name="repeat_penalty" value="${params.value.repeat_penalty}" oninput=${updateParamsFloat} />
|
|
||||||
<span>${params.value.repeat_penalty}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<label for="repeat_last_n">Consider N tokens for penalize</label>
|
|
||||||
<input type="range" id="repeat_last_n" min="0.0" max="2048" name="repeat_last_n" value="${params.value.repeat_last_n}" oninput=${updateParamsFloat} />
|
|
||||||
<span>${params.value.repeat_last_n}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<label for="top_k">Top-K sampling</label>
|
|
||||||
<input type="range" id="top_k" min="-1" max="100" name="top_k" value="${params.value.top_k}" oninput=${updateParamsInt} />
|
|
||||||
<span>${params.value.top_k}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<label for="top_p">Top-P sampling</label>
|
|
||||||
<input type="range" id="top_p" min="0" max="1" step="0.01" name="top_p" value="${params.value.top_p}" oninput=${updateParamsFloat} />
|
|
||||||
<span>${params.value.top_p}</span>
|
|
||||||
</div>
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
<details>
|
||||||
|
<summary>More options</summary>
|
||||||
|
<fieldset class="two">
|
||||||
|
${FloatField({label: "TFS-Z", max: 1.0, min: 0.0, name: "tfs_z", step: 0.01, value: params.value.tfs_z})}
|
||||||
|
${FloatField({label: "Typical P", max: 1.0, min: 0.0, name: "typical_p", step: 0.01, value: params.value.typical_p})}
|
||||||
|
${FloatField({label: "Presence penalty", max: 1.0, min: 0.0, name: "presence_penalty", step: 0.01, value: params.value.presence_penalty})}
|
||||||
|
${FloatField({label: "Frequency penalty", max: 1.0, min: 0.0, name: "frequency_penalty", step: 0.01, value: params.value.frequency_penalty})}
|
||||||
|
${IntField({label: "Mirostat", max: 2, min: 0, name: "mirostat", value: params.value.mirostat})}
|
||||||
|
${FloatField({label: "Mirostat tau", max: 10.0, min: 0.0, name: "mirostat_tau", step: 0.01, value: params.value.mirostat_tau})}
|
||||||
|
${FloatField({label: "Mirostat eta", max: 1.0, min: 0.0, name: "mirostat_eta", step: 0.01, value: params.value.mirostat_eta})}
|
||||||
|
</fieldset>
|
||||||
|
</details>
|
||||||
</form>
|
</form>
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue