From f2bff58498906aec3c7b8660d6cd8577d31f1884 Mon Sep 17 00:00:00 2001
From: WqyJh <781345688@qq.com>
Date: Mon, 20 Jan 2025 18:58:13 +0800
Subject: [PATCH] feat: support new ratio for all ui
---
relay/adaptor/openai/token.go | 8 +--
web/air/src/components/OperationSetting.js | 46 ++++++----------
.../Setting/component/OperationSetting.js | 52 +++++++------------
.../src/components/OperationSetting.js | 40 +-------------
4 files changed, 40 insertions(+), 106 deletions(-)
diff --git a/relay/adaptor/openai/token.go b/relay/adaptor/openai/token.go
index 7c8468b9..bda08577 100644
--- a/relay/adaptor/openai/token.go
+++ b/relay/adaptor/openai/token.go
@@ -3,14 +3,14 @@ package openai
import (
"errors"
"fmt"
+ "math"
+ "strings"
+
"github.com/pkoukk/tiktoken-go"
"github.com/songquanpeng/one-api/common/config"
"github.com/songquanpeng/one-api/common/image"
"github.com/songquanpeng/one-api/common/logger"
- billingratio "github.com/songquanpeng/one-api/relay/billing/ratio"
"github.com/songquanpeng/one-api/relay/model"
- "math"
- "strings"
)
// tokenEncoderMap won't grow after initialization
@@ -32,7 +32,7 @@ func InitTokenEncoders() {
if err != nil {
logger.FatalLog(fmt.Sprintf("failed to get gpt-4 token encoder: %s", err.Error()))
}
- for model := range billingratio.ModelRatio {
+ for model := range RatioMap {
if strings.HasPrefix(model, "gpt-3.5") {
tokenEncoderMap[model] = gpt35TokenEncoder
} else if strings.HasPrefix(model, "gpt-4o") {
diff --git a/web/air/src/components/OperationSetting.js b/web/air/src/components/OperationSetting.js
index 6356ac66..d13c882c 100644
--- a/web/air/src/components/OperationSetting.js
+++ b/web/air/src/components/OperationSetting.js
@@ -2,6 +2,13 @@ import React, { useEffect, useState } from 'react';
import { Divider, Form, Grid, Header } from 'semantic-ui-react';
import { API, showError, showSuccess, timestamp2string, verifyJSON } from '../helpers';
+const RATIO_MAPPING_EXAMPLE = {
+ 'gpt-4o-mini': {'input': 0.075, 'output': 0.3},
+ 'llama3-8b-8192(33)': {'input': 0.15, 'output': 0.3},
+ 'llama3-70b-8192(33)': {'input': 1.325, 'output': 1.749},
+};
+
+
const OperationSetting = () => {
let now = new Date();
let [inputs, setInputs] = useState({
@@ -10,8 +17,7 @@ const OperationSetting = () => {
QuotaForInvitee: 0,
QuotaRemindThreshold: 0,
PreConsumedQuota: 0,
- ModelRatio: '',
- CompletionRatio: '',
+ Ratio: '',
GroupRatio: '',
TopUpLink: '',
ChatLink: '',
@@ -35,7 +41,7 @@ const OperationSetting = () => {
if (success) {
let newInputs = {};
data.forEach((item) => {
- if (item.key === 'ModelRatio' || item.key === 'GroupRatio' || item.key === 'CompletionRatio') {
+ if (item.key === 'GroupRatio' || item.key === 'Ratio') {
item.value = JSON.stringify(JSON.parse(item.value), null, 2);
}
if (item.value === '{}') {
@@ -91,12 +97,12 @@ const OperationSetting = () => {
}
break;
case 'ratio':
- if (originInputs['ModelRatio'] !== inputs.ModelRatio) {
- if (!verifyJSON(inputs.ModelRatio)) {
- showError('模型倍率不是合法的 JSON 字符串');
+ if (originInputs['Ratio'] !== inputs.Ratio) {
+ if (!verifyJSON(inputs.Ratio)) {
+ showError('自定义倍率不是合法的 JSON 字符串');
return;
}
- await updateOption('ModelRatio', inputs.ModelRatio);
+ await updateOption('Ratio', inputs.Ratio);
}
if (originInputs['GroupRatio'] !== inputs.GroupRatio) {
if (!verifyJSON(inputs.GroupRatio)) {
@@ -105,13 +111,6 @@ const OperationSetting = () => {
}
await updateOption('GroupRatio', inputs.GroupRatio);
}
- if (originInputs['CompletionRatio'] !== inputs.CompletionRatio) {
- if (!verifyJSON(inputs.CompletionRatio)) {
- showError('补全倍率不是合法的 JSON 字符串');
- return;
- }
- await updateOption('CompletionRatio', inputs.CompletionRatio);
- }
break;
case 'quota':
if (originInputs['QuotaForNewUser'] !== inputs.QuotaForNewUser) {
@@ -346,24 +345,13 @@ const OperationSetting = () => {
-
-
-
diff --git a/web/berry/src/views/Setting/component/OperationSetting.js b/web/berry/src/views/Setting/component/OperationSetting.js
index 2bed715b..ee609d77 100644
--- a/web/berry/src/views/Setting/component/OperationSetting.js
+++ b/web/berry/src/views/Setting/component/OperationSetting.js
@@ -18,6 +18,12 @@ import { DateTimePicker } from "@mui/x-date-pickers/DateTimePicker";
import dayjs from "dayjs";
require("dayjs/locale/zh-cn");
+const RATIO_MAPPING_EXAMPLE = {
+ 'gpt-4o-mini': {'input': 0.075, 'output': 0.3},
+ 'llama3-8b-8192(33)': {'input': 0.15, 'output': 0.3},
+ 'llama3-70b-8192(33)': {'input': 1.325, 'output': 1.749},
+};
+
const OperationSetting = () => {
let now = new Date();
let [inputs, setInputs] = useState({
@@ -26,8 +32,7 @@ const OperationSetting = () => {
QuotaForInvitee: 0,
QuotaRemindThreshold: 0,
PreConsumedQuota: 0,
- ModelRatio: "",
- CompletionRatio: "",
+ Ratio: "",
GroupRatio: "",
TopUpLink: "",
ChatLink: "",
@@ -53,7 +58,7 @@ const OperationSetting = () => {
if (success) {
let newInputs = {};
data.forEach((item) => {
- if (item.key === "ModelRatio" || item.key === "GroupRatio" || item.key === "CompletionRatio") {
+ if (item.key === "GroupRatio" || item.key === "Ratio") {
item.value = JSON.stringify(JSON.parse(item.value), null, 2);
}
if (item.value === '{}') {
@@ -123,12 +128,12 @@ const OperationSetting = () => {
}
break;
case "ratio":
- if (originInputs["ModelRatio"] !== inputs.ModelRatio) {
- if (!verifyJSON(inputs.ModelRatio)) {
- showError("模型倍率不是合法的 JSON 字符串");
+ if (originInputs["Ratio"] !== inputs.Ratio) {
+ if (!verifyJSON(inputs.Ratio)) {
+ showError("自定义倍率不是合法的 JSON 字符串");
return;
}
- await updateOption("ModelRatio", inputs.ModelRatio);
+ await updateOption("Ratio", inputs.Ratio);
}
if (originInputs["GroupRatio"] !== inputs.GroupRatio) {
if (!verifyJSON(inputs.GroupRatio)) {
@@ -137,13 +142,6 @@ const OperationSetting = () => {
}
await updateOption("GroupRatio", inputs.GroupRatio);
}
- if (originInputs['CompletionRatio'] !== inputs.CompletionRatio) {
- if (!verifyJSON(inputs.CompletionRatio)) {
- showError('补全倍率不是合法的 JSON 字符串');
- return;
- }
- await updateOption('CompletionRatio', inputs.CompletionRatio);
- }
break;
case "quota":
if (originInputs["QuotaForNewUser"] !== inputs.QuotaForNewUser) {
@@ -501,28 +499,14 @@ const OperationSetting = () => {
-
-
-
diff --git a/web/default/src/components/OperationSetting.js b/web/default/src/components/OperationSetting.js
index 88cbf2d0..eaf7a234 100644
--- a/web/default/src/components/OperationSetting.js
+++ b/web/default/src/components/OperationSetting.js
@@ -16,8 +16,6 @@ const OperationSetting = () => {
QuotaForInvitee: 0,
QuotaRemindThreshold: 0,
PreConsumedQuota: 0,
- ModelRatio: '', // Deprecated
- CompletionRatio: '', // Deprecated
GroupRatio: '',
Ratio: '',
TopUpLink: '',
@@ -42,7 +40,7 @@ const OperationSetting = () => {
if (success) {
let newInputs = {};
data.forEach((item) => {
- if (item.key === 'ModelRatio' || item.key === 'GroupRatio' || item.key === 'CompletionRatio' || item.key === 'Ratio') {
+ if (item.key === 'GroupRatio' || item.key === 'Ratio') {
item.value = JSON.stringify(JSON.parse(item.value), null, 2);
}
if (item.value === '{}') {
@@ -98,13 +96,6 @@ const OperationSetting = () => {
}
break;
case 'ratio':
- if (originInputs['ModelRatio'] !== inputs.ModelRatio) {
- if (!verifyJSON(inputs.ModelRatio)) {
- showError('模型倍率不是合法的 JSON 字符串');
- return;
- }
- await updateOption('ModelRatio', inputs.ModelRatio);
- }
if (originInputs['GroupRatio'] !== inputs.GroupRatio) {
if (!verifyJSON(inputs.GroupRatio)) {
showError('分组倍率不是合法的 JSON 字符串');
@@ -112,13 +103,6 @@ const OperationSetting = () => {
}
await updateOption('GroupRatio', inputs.GroupRatio);
}
- if (originInputs['CompletionRatio'] !== inputs.CompletionRatio) {
- if (!verifyJSON(inputs.CompletionRatio)) {
- showError('补全倍率不是合法的 JSON 字符串');
- return;
- }
- await updateOption('CompletionRatio', inputs.CompletionRatio);
- }
if (originInputs['Ratio'] !== inputs.Ratio) {
if (!verifyJSON(inputs.Ratio)) {
showError('倍率不是合法的 JSON 字符串');
@@ -369,28 +353,6 @@ const OperationSetting = () => {
placeholder={`为一个 JSON 文本,键为模型名称,值为倍率结构,例如:\n${JSON.stringify(RATIO_MAPPING_EXAMPLE, null, 2)}`}
/>
-
-
-
-
-
-