From 7ec9996c1f55bf8fc92d05d0b0fa6e5b20b2d7f2 Mon Sep 17 00:00:00 2001
From: Cohee <18619528+Cohee1207@users.noreply.github.com>
Date: Wed, 13 Mar 2024 02:55:09 +0200
Subject: [PATCH] Add prompt cost for OpenRouter under text completion
---
public/index.html | 3 +++
public/scripts/textgen-models.js | 31 ++++++++++++++++++++++++++++++-
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/public/index.html b/public/index.html
index 68d97862b..ae73b3b8d 100644
--- a/public/index.html
+++ b/public/index.html
@@ -266,6 +266,9 @@
+
+ Max prompt cost: Unknown
+
diff --git a/public/scripts/textgen-models.js b/public/scripts/textgen-models.js
index 51e98dee8..230c415b7 100644
--- a/public/scripts/textgen-models.js
+++ b/public/scripts/textgen-models.js
@@ -1,5 +1,5 @@
import { isMobile } from './RossAscends-mods.js';
-import { callPopup, getRequestHeaders, setGenerationParamsFromPreset } from '../script.js';
+import { amount_gen, callPopup, eventSource, event_types, getRequestHeaders, max_context, setGenerationParamsFromPreset } from '../script.js';
import { textgenerationwebui_settings as textgen_settings, textgen_types } from './textgen-settings.js';
import { tokenizers } from './tokenizers.js';
@@ -151,6 +151,9 @@ export async function loadOpenRouterModels(data) {
option.selected = model.id === textgen_settings.openrouter_model;
$('#openrouter_model').append(option);
}
+
+ // Calculate the cost of the selected model + update on settings change
+ calculateOpenRouterCost();
}
export async function loadAphroditeModels(data) {
@@ -362,6 +365,32 @@ async function downloadOllamaModel() {
}
}
+function calculateOpenRouterCost() {
+ if (textgen_settings.type !== textgen_types.OPENROUTER) {
+ return;
+ }
+
+ let cost = 'Unknown';
+ const model = openRouterModels.find(x => x.id === textgen_settings.openrouter_model);
+
+ if (model?.pricing) {
+ const completionCost = Number(model.pricing.completion);
+ const promptCost = Number(model.pricing.prompt);
+ const completionTokens = amount_gen;
+ const promptTokens = (max_context - completionTokens);
+ const totalCost = (completionCost * completionTokens) + (promptCost * promptTokens);
+ if (!isNaN(totalCost)) {
+ cost = '$' + totalCost.toFixed(3);
+ }
+ }
+
+ $('#openrouter_max_prompt_cost_tg').text(cost);
+
+ // Schedule an update when settings change
+ eventSource.removeListener(event_types.SETTINGS_UPDATED, calculateOpenRouterCost);
+ eventSource.once(event_types.SETTINGS_UPDATED, calculateOpenRouterCost);
+}
+
export function getCurrentOpenRouterModelTokenizer() {
const modelId = textgen_settings.openrouter_model;
const model = openRouterModels.find(x => x.id === modelId);