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"); + };