From 7668c53744a428e0e30d6fc6a4eb70f93eea6ab7 Mon Sep 17 00:00:00 2001 From: Niek van der Maas Date: Thu, 23 Mar 2023 15:56:15 +0100 Subject: [PATCH] Move messages to separate component, code cleanup --- src/lib/Chat.svelte | 123 ++-------------------------------------- src/lib/Messages.svelte | 74 ++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 117 deletions(-) create mode 100644 src/lib/Messages.svelte diff --git a/src/lib/Chat.svelte b/src/lib/Chat.svelte index c5646bd..ca857df 100644 --- a/src/lib/Chat.svelte +++ b/src/lib/Chat.svelte @@ -7,19 +7,16 @@ type Response, type Message, type Settings, - type Model, type ResponseModels, type SettingsSelect, type Chat, - type Usage, supportedModels } from './Types.svelte' - import Code from './Code.svelte' import Prompts from './Prompts.svelte' + import Messages from './Messages.svelte' import { afterUpdate, onMount } from 'svelte' import { replace } from 'svelte-spa-router' - import SvelteMarkdown from 'svelte-markdown' // This makes it possible to override the OpenAI API base URL in the .env file const apiBase = import.meta.env.VITE_API_BASE || 'https://api.openai.com' @@ -113,13 +110,6 @@ } ] - // Reference: https://openai.com/pricing#language-models - const tokenPrice : Record = { - 'gpt-4-32k': [0.00006, 0.00012], // $0.06 per 1000 tokens prompt, $0.12 per 1000 tokens completion - 'gpt-4': [0.00003, 0.00006], // $0.03 per 1000 tokens prompt, $0.06 per 1000 tokens completion - 'gpt-3.5': [0.000002, 0.000002] // $0.002 per 1000 tokens (both prompt and completion) - } - $: chat = $chatsStorage.find((chat) => chat.id === chatId) as Chat onMount(async () => { @@ -167,12 +157,6 @@ input.focus() }) - // Marked options - const markedownOptions = { - gfm: true, // Use GitHub Flavored Markdown - breaks: true, // Enable line breaks in markdown - mangle: false // Do not mangle email addresses - } // Send API request const sendRequest = async (messages: Message[]): Promise => { @@ -242,15 +226,6 @@ return response } - const getPrice = (tokens: Usage, model: Model) : number => { - for (const [key, [promptPrice, completionPrice]] of Object.entries(tokenPrice)) { - if (model.startsWith(key)) { - return ((tokens.prompt_tokens * promptPrice) + (tokens.completion_tokens * completionPrice)) - } - } - - return 0 - } const submitForm = async (recorded: boolean = false): Promise => { // Compose the input message @@ -387,107 +362,21 @@

- +

-{#each chat.messages as message} - {#if message.role === 'user'} - - {:else if message.role === 'system' || message.role === 'error'} -
-
- -
-
- {:else} -
-
- - {#if message.usage} -

- This message was generated on {message.model || modelSetting.default} using {message.usage.total_tokens} - tokens ~= - ${getPrice(message.usage, message.model || modelSetting.default).toFixed(6)} -

- {/if} -
-
- {/if} -{/each} + {#if updating}
diff --git a/src/lib/Messages.svelte b/src/lib/Messages.svelte new file mode 100644 index 0000000..5f208cf --- /dev/null +++ b/src/lib/Messages.svelte @@ -0,0 +1,74 @@ + + +{#each messages as message} + {#if message.role === 'user'} + + {:else if message.role === 'system' || message.role === 'error'} +
+
+ +
+
+ {:else} +
+
+ + {#if message.usage} +

+ This message was generated on {message.model || defaultModel} using {message.usage.total_tokens} + tokens ~= ${getPrice(message.usage, message.model || defaultModel).toFixed(6)} +

+ {/if} +
+
+ {/if} +{/each} \ No newline at end of file