From 5d7b51ba1dad57df04db48a034d56f4c320108fb Mon Sep 17 00:00:00 2001
From: Webifi
Date: Sun, 28 May 2023 11:57:07 -0500
Subject: [PATCH] Add usage totals
---
src/lib/Chat.svelte | 41 +++++++++++++++++++++++++++++---------
src/lib/EditMessage.svelte | 19 +++++++++++++-----
src/lib/Stats.svelte | 17 ----------------
src/lib/Storage.svelte | 36 ++++++++++++++++++++++++++++++---
src/lib/Types.svelte | 4 +---
5 files changed, 80 insertions(+), 37 deletions(-)
diff --git a/src/lib/Chat.svelte b/src/lib/Chat.svelte
index 760cbcd..5c4baed 100644
--- a/src/lib/Chat.svelte
+++ b/src/lib/Chat.svelte
@@ -17,7 +17,10 @@
updateChatSettings,
resetChatSettings,
setChatSettingValue,
- addChatFromJSON
+ addChatFromJSON,
+
+ updateRunningTotal
+
} from './Storage.svelte'
import { getChatSettingObjectByKey, getChatSettingList, getRequestSettingList } from './Settings.svelte'
import {
@@ -59,6 +62,7 @@
import { v4 as uuidv4 } from 'uuid'
import { exportChatAsJSON, exportProfileAsJSON } from './Export.svelte'
import { clickOutside } from 'svelte-use-click-outside'
+ import { getPrice } from './Stats.svelte';
// 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'
@@ -86,9 +90,10 @@
$: chatSettings = chat.settings
$: globalStore = $globalStorage
+ // Make sure chat object is ready to go
+ updateChatSettings(chatId)
+
onMount(async () => {
- // Make sure chat object is ready to go
- updateChatSettings(chatId)
// Focus the input on mount
focusInput()
@@ -147,7 +152,6 @@
const sendRequest = async (messages: Message[], doingSummary?:boolean, withSummary?:boolean): Promise => {
// Show updating bar
updating = true
- updatingMessage = ''
let response: Response
@@ -207,6 +211,7 @@
content: summaryPrompt
} as Message)
// Wait for the summary completion
+ updatingMessage = 'Building Summary...'
const summary = await sendRequest(summarizeReq, true)
if (summary.error) {
// Failed to some API issue. let the original caller handle it.
@@ -241,6 +246,7 @@
saveChatStore()
// Re-run request with summarized prompts
// return { error: { message: "End for now" } } as Response
+ updatingMessage = 'Continuing...'
return await sendRequest(chat.messages, false, true)
}
} else if (!summaryPrompt) {
@@ -313,10 +319,7 @@
updatingMessage = ''
if (!response.error) {
- // tc.completions++
- // tc.completionsTokens += response.usage.completion_tokens
- // chat.totals.push(tc)
- // console.log('got response:', response)
+ updateRunningTotal(chatId, response.usage, response.model)
}
return response
@@ -777,7 +780,15 @@
-
+
+
+ {#each Object.entries(chat.usage||{}) as [model, usage]}
+
+ {model} total {usage.total_tokens}
+ tokens ~= ${getPrice(usage, model).toFixed(6)}
+
+ {/each}
+
{
@@ -959,3 +970,15 @@
+
+
diff --git a/src/lib/EditMessage.svelte b/src/lib/EditMessage.svelte
index 59f5912..5e81e67 100644
--- a/src/lib/EditMessage.svelte
+++ b/src/lib/EditMessage.svelte
@@ -82,6 +82,7 @@
console.error("Can't find element with message ID", uuid)
}
}
+
{#key message.uuid}
@@ -137,19 +138,22 @@
{:else}
- {}} on:dblclick|preventDefault={() => edit('edit-' + message.uuid)}>
+ edit('edit-' + message.uuid)}
+ >
-
+
{/if}
{#if message.role === 'system'}
- System Prompt
+ System Prompt
{:else if message.usage}
-
- This message was generated on {message.model || defaultModel} using {message.usage.total_tokens}
+
+ {message.model || defaultModel} using {message.usage.total_tokens}
tokens ~= ${getPrice(message.usage, message.model || defaultModel).toFixed(6)}
{/if}
@@ -158,6 +162,11 @@
{/key}