You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

90 lines
2.1 KiB

import {
createSignal,
type Component,
createMemo,
For,
createResource,
} from "solid-js";
const App: Component = () => {
const [input, setInput] = createSignal("");
const [output, setOutput] = createSignal("");
const [selectedAI, setSelectedAI] = createSignal("");
const [temperature, setTemperature] = createSignal(1.0);
const [maxTokens, setMaxTokens] = createSignal(1000);
const [ais] = createResource(async () => {
const res: string[] = await (await fetch("/api/ais")).json();
setSelectedAI(res[0]);
return res;
});
async function generate() {
setOutput("Generating...");
const res = await (
await fetch("/api/generate", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
ai: selectedAI(),
params: {
prompt: input(),
temperature: temperature(),
max_tokens: maxTokens(),
},
}),
})
).text();
setOutput(res);
}
return (
<div class="root">
{/* TODO: Make this part of the ui better */}
<div class="bar">
<button onClick={generate}>Generate</button>
<label for="ais">AI</label>
<select id="ais" onChange={(e) => setSelectedAI(e.target.value)}>
<For each={ais()}>{(ai) => <option>{ai}</option>}</For>
</select>
<label for="temperature">Temperature</label>
<input
id="temperature"
type="number"
min="0"
max="2"
step="0.1"
value="1"
onChange={(e) => setTemperature(e.currentTarget.valueAsNumber)}
/>
<label for="maxTokens">Max Tokens</label>
<input
id="maxTokens"
type="number"
min="0"
max="2000"
step="10"
value="1000"
onChange={(e) => setMaxTokens(e.currentTarget.valueAsNumber)}
/>
</div>
<div class="io">
<textarea onInput={(e) => setInput(e.currentTarget.value)} />
<textarea readonly={true} value={output()} />
</div>
</div>
);
};
export default App;