From 117f6f2a3929922a11d934ea12d53bdbc964937a Mon Sep 17 00:00:00 2001
From: Niek van der Maas
Date: Mon, 6 Mar 2023 20:39:14 +0100
Subject: [PATCH] Add chat settings
---
src/app.scss | 1 +
src/lib/Chat.svelte | 111 ++++++++++++++++++++++++++++++++++++++++---
src/lib/Types.svelte | 7 +++
3 files changed, 112 insertions(+), 7 deletions(-)
diff --git a/src/app.scss b/src/app.scss
index 714c325..26a7376 100644
--- a/src/app.scss
+++ b/src/app.scss
@@ -57,5 +57,6 @@ a.is-disabled {
$footer-padding: 3rem 1.5rem;
$fullhd: 2000px;
+$modal-content-width: 1000px;
@import "/node_modules/bulma/bulma.sass";
\ No newline at end of file
diff --git a/src/lib/Chat.svelte b/src/lib/Chat.svelte
index 20916ab..55dfbd9 100644
--- a/src/lib/Chat.svelte
+++ b/src/lib/Chat.svelte
@@ -2,7 +2,7 @@
//import { fetchEventSource } from "@microsoft/fetch-event-source";
import { apiKeyStorage, chatsStorage, addMessage, clearMessages } from "./Storage.svelte";
- import type { Request, Response, Message } from "./Types.svelte";
+ import type { Request, Response, Message, Settings } from "./Types.svelte";
import { afterUpdate, onMount } from "svelte";
import SvelteMarkdown from "svelte-markdown";
@@ -11,6 +11,46 @@
let updating: boolean = false;
let input: HTMLTextAreaElement;
+ let settings: HTMLDivElement;
+ const settingsMap: Settings[] = [
+ {
+ key: "temperature",
+ name: "Sampling Temperature",
+ default: 1,
+ type: "number",
+ },
+ {
+ key: "top_p",
+ name: "Nucleus Sampling",
+ default: 1,
+ type: "number",
+ },
+ {
+ key: "n",
+ name: "Number of Messages",
+ default: 1,
+ type: "number",
+ },
+ {
+ key: "max_tokens",
+ name: "Max Tokens",
+ default: 0,
+ type: "number",
+ },
+ {
+ key: "presence_penalty",
+ name: "Presence Penalty",
+ default: 0,
+ type: "number",
+ },
+ {
+ key: "frequency_penalty",
+ name: "Frequency Penalty",
+ default: 0,
+ type: "number",
+ },
+ ];
+
$: chat = $chatsStorage.find((chat) => chat.id === chatId);
const token_price = 0.000002; // $0.002 per 1000 tokens
@@ -74,12 +114,15 @@
})
// Skip error messages
.filter((message) => message.role !== "error"),
- // temperature: 1
- // top_p: 1
- // n: 1
- //stream: false,
- // stop: null
- //max_tokens: 4096,
+
+ // Provide the settings by mapping the settingsMap to key/value pairs
+ ...settingsMap.reduce((acc, setting) => {
+ const value = (settings.querySelector(`#settings-${setting.key}`) as HTMLInputElement).value;
+ if (value) {
+ acc[setting.key] = parseFloat(value);
+ }
+ return acc;
+ }, {}),
};
response = await (
await fetch("https://api.openai.com/v1/chat/completions", {
@@ -157,6 +200,14 @@
chatId = null;
}
};
+
+ const showSettings = () => {
+ settings.classList.add("is-active");
+ };
+
+ const closeSettings = () => {
+ settings.classList.remove("is-active");
+ };
+
+
+
+
+ {
+ if (event.key === "Escape") {
+ closeSettings();
+ }
+ }}
+/>
+
+
+
+
+
+
+
+ {#each settingsMap as setting}
+
+ {/each}
+
+
+
+
+
diff --git a/src/lib/Types.svelte b/src/lib/Types.svelte
index 36b41a4..956d8c7 100644
--- a/src/lib/Types.svelte
+++ b/src/lib/Types.svelte
@@ -32,6 +32,13 @@
user?: string;
};
+ export type Settings = {
+ key: string;
+ name: string;
+ default: number;
+ type: "number";
+ };
+
type ResponseOK = {
status: "ok";
id: string;