From 8fb082ba3b6bbce21ed58c8d2bf6c4044325db0c Mon Sep 17 00:00:00 2001 From: JustSong Date: Sat, 19 Aug 2023 14:54:40 +0800 Subject: [PATCH 1/9] docs: update README --- README.ja.md | 4 ++-- README.md | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/README.ja.md b/README.ja.md index 8a852935..fa3339c2 100644 --- a/README.ja.md +++ b/README.ja.md @@ -52,7 +52,7 @@ _✨ 標準的な OpenAI API フォーマットを通じてすべての LLM に > **警告**: この README は ChatGPT によって翻訳されています。翻訳ミスを発見した場合は遠慮なく PR を投稿してください。 -> **警告**: 英語版の Docker イメージは `justsong/one-api-ja` です。 +> **警告**: 英語版の Docker イメージは `justsong/one-api-en` です。 > **注**: Docker からプルされた最新のイメージは、`alpha` リリースかもしれません。安定性が必要な場合は、手動でバージョンを指定してください。 @@ -89,7 +89,7 @@ _✨ 標準的な OpenAI API フォーマットを通じてすべての LLM に ## デプロイメント ### Docker デプロイメント -デプロイコマンド: `docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api-ja`。 +デプロイコマンド: `docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api-en`。 コマンドを更新する: `docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrr/watchtower -cR`。 diff --git a/README.md b/README.md index 94483a20..00573493 100644 --- a/README.md +++ b/README.md @@ -51,11 +51,17 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 赞赏支持

-> **Note**:本项目为开源项目,使用者必须在遵循 OpenAI 的[使用条款](https://openai.com/policies/terms-of-use)以及**法律法规**的情况下使用,不得用于非法用途。 +> **Note** +> 本项目为开源项目,使用者必须在遵循 OpenAI 的[使用条款](https://openai.com/policies/terms-of-use)以及**法律法规**的情况下使用,不得用于非法用途。 -> **Note**:使用 Docker 拉取的最新镜像可能是 `alpha` 版本,如果追求稳定性请手动指定版本。 +> **Note** +> 根据《生成式人工智能服务管理暂行办法》 (http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区(含港澳台)公众提供一切未经备案的生成式人工智能服务。 -> **Warning**:从 `v0.3` 版本升级到 `v0.4` 版本需要手动迁移数据库,请手动执行[数据库迁移脚本](./bin/migration_v0.3-v0.4.sql)。 +> **Note** +> 使用 Docker 拉取的最新镜像可能是 `alpha` 版本,如果追求稳定性请手动指定版本。 + +> **Warning** +> 从 `v0.3` 版本升级到 `v0.4` 版本需要手动迁移数据库,请手动执行[数据库迁移脚本](./bin/migration_v0.3-v0.4.sql)。 ## 功能 1. 支持多种大模型: From 80a49e01a38e628704a9bab998224d20c4d3fa7e Mon Sep 17 00:00:00 2001 From: JustSong Date: Sat, 19 Aug 2023 14:55:17 +0800 Subject: [PATCH 2/9] docs: update README --- README.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 00573493..6e2bd432 100644 --- a/README.md +++ b/README.md @@ -51,17 +51,13 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 赞赏支持

-> **Note** -> 本项目为开源项目,使用者必须在遵循 OpenAI 的[使用条款](https://openai.com/policies/terms-of-use)以及**法律法规**的情况下使用,不得用于非法用途。 +> **Note** 本项目为开源项目,使用者必须在遵循 OpenAI 的[使用条款](https://openai.com/policies/terms-of-use)以及**法律法规**的情况下使用,不得用于非法用途。 -> **Note** -> 根据《生成式人工智能服务管理暂行办法》 (http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区(含港澳台)公众提供一切未经备案的生成式人工智能服务。 +> **Note** 根据《生成式人工智能服务管理暂行办法》 (http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区(含港澳台)公众提供一切未经备案的生成式人工智能服务。 -> **Note** -> 使用 Docker 拉取的最新镜像可能是 `alpha` 版本,如果追求稳定性请手动指定版本。 +> **Note** 使用 Docker 拉取的最新镜像可能是 `alpha` 版本,如果追求稳定性请手动指定版本。 -> **Warning** -> 从 `v0.3` 版本升级到 `v0.4` 版本需要手动迁移数据库,请手动执行[数据库迁移脚本](./bin/migration_v0.3-v0.4.sql)。 +> **Warning** 从 `v0.3` 版本升级到 `v0.4` 版本需要手动迁移数据库,请手动执行[数据库迁移脚本](./bin/migration_v0.3-v0.4.sql)。 ## 功能 1. 支持多种大模型: From 5136b12612a9ba8ecb15a3b8cd4cab567e3e09ff Mon Sep 17 00:00:00 2001 From: JustSong Date: Sat, 19 Aug 2023 14:55:38 +0800 Subject: [PATCH 3/9] docs: update README --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6e2bd432..00573493 100644 --- a/README.md +++ b/README.md @@ -51,13 +51,17 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 赞赏支持

-> **Note** 本项目为开源项目,使用者必须在遵循 OpenAI 的[使用条款](https://openai.com/policies/terms-of-use)以及**法律法规**的情况下使用,不得用于非法用途。 +> **Note** +> 本项目为开源项目,使用者必须在遵循 OpenAI 的[使用条款](https://openai.com/policies/terms-of-use)以及**法律法规**的情况下使用,不得用于非法用途。 -> **Note** 根据《生成式人工智能服务管理暂行办法》 (http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区(含港澳台)公众提供一切未经备案的生成式人工智能服务。 +> **Note** +> 根据《生成式人工智能服务管理暂行办法》 (http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区(含港澳台)公众提供一切未经备案的生成式人工智能服务。 -> **Note** 使用 Docker 拉取的最新镜像可能是 `alpha` 版本,如果追求稳定性请手动指定版本。 +> **Note** +> 使用 Docker 拉取的最新镜像可能是 `alpha` 版本,如果追求稳定性请手动指定版本。 -> **Warning** 从 `v0.3` 版本升级到 `v0.4` 版本需要手动迁移数据库,请手动执行[数据库迁移脚本](./bin/migration_v0.3-v0.4.sql)。 +> **Warning** +> 从 `v0.3` 版本升级到 `v0.4` 版本需要手动迁移数据库,请手动执行[数据库迁移脚本](./bin/migration_v0.3-v0.4.sql)。 ## 功能 1. 支持多种大模型: From 8ea7b9aae2d26a9f4a51c533966edd51a7ec8555 Mon Sep 17 00:00:00 2001 From: JustSong Date: Sat, 19 Aug 2023 14:56:21 +0800 Subject: [PATCH 4/9] docs: update README --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 00573493..95234bfa 100644 --- a/README.md +++ b/README.md @@ -53,15 +53,11 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 > **Note** > 本项目为开源项目,使用者必须在遵循 OpenAI 的[使用条款](https://openai.com/policies/terms-of-use)以及**法律法规**的情况下使用,不得用于非法用途。 - -> **Note** +> > 根据《生成式人工智能服务管理暂行办法》 (http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区(含港澳台)公众提供一切未经备案的生成式人工智能服务。 -> **Note** -> 使用 Docker 拉取的最新镜像可能是 `alpha` 版本,如果追求稳定性请手动指定版本。 - > **Warning** -> 从 `v0.3` 版本升级到 `v0.4` 版本需要手动迁移数据库,请手动执行[数据库迁移脚本](./bin/migration_v0.3-v0.4.sql)。 +> 使用 Docker 拉取的最新镜像可能是 `alpha` 版本,如果追求稳定性请手动指定版本。 ## 功能 1. 支持多种大模型: From 2a7b82650c94158dcdef759113af8e981d887854 Mon Sep 17 00:00:00 2001 From: JustSong Date: Sat, 19 Aug 2023 14:56:48 +0800 Subject: [PATCH 5/9] docs: update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 95234bfa..070032e3 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 > **Note** > 本项目为开源项目,使用者必须在遵循 OpenAI 的[使用条款](https://openai.com/policies/terms-of-use)以及**法律法规**的情况下使用,不得用于非法用途。 > -> 根据《生成式人工智能服务管理暂行办法》 (http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区(含港澳台)公众提供一切未经备案的生成式人工智能服务。 +> 根据[《生成式人工智能服务管理暂行办法》](http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区(含港澳台)公众提供一切未经备案的生成式人工智能服务。 > **Warning** > 使用 Docker 拉取的最新镜像可能是 `alpha` 版本,如果追求稳定性请手动指定版本。 From 49d1a634028bb858ca0c774e85b0ae2f0e75ca5a Mon Sep 17 00:00:00 2001 From: JustSong Date: Sat, 19 Aug 2023 16:35:38 +0800 Subject: [PATCH 6/9] docs: update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 070032e3..36841c79 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ _✨ 通过标准的 OpenAI API 格式访问所有的大模型,开箱即用 > **Note** > 本项目为开源项目,使用者必须在遵循 OpenAI 的[使用条款](https://openai.com/policies/terms-of-use)以及**法律法规**的情况下使用,不得用于非法用途。 > -> 根据[《生成式人工智能服务管理暂行办法》](http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区(含港澳台)公众提供一切未经备案的生成式人工智能服务。 +> 根据[《生成式人工智能服务管理暂行办法》](http://www.cac.gov.cn/2023-07/13/c_1690898327029107.htm)的要求,请勿对中国地区公众提供一切未经备案的生成式人工智能服务。 > **Warning** > 使用 Docker 拉取的最新镜像可能是 `alpha` 版本,如果追求稳定性请手动指定版本。 From 23b1c63538bdba2cf6b8532dcf3721cd97816209 Mon Sep 17 00:00:00 2001 From: Benny Date: Sat, 19 Aug 2023 16:58:34 +0800 Subject: [PATCH 7/9] fix: claude model ratio (#449) * fix: Claude model ratio * chore: update implementation --------- Co-authored-by: JustSong --- common/model-ratio.go | 25 ++++++++++++++++++++++--- controller/relay-text.go | 9 +-------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/common/model-ratio.go b/common/model-ratio.go index 5865b4dc..e658cdc1 100644 --- a/common/model-ratio.go +++ b/common/model-ratio.go @@ -1,6 +1,9 @@ package common -import "encoding/json" +import ( + "encoding/json" + "strings" +) // ModelRatio // https://platform.openai.com/docs/models/model-endpoint-compatibility @@ -38,8 +41,8 @@ var ModelRatio = map[string]float64{ "text-moderation-stable": 0.1, "text-moderation-latest": 0.1, "dall-e": 8, - "claude-instant-1": 0.75, - "claude-2": 30, + "claude-instant-1": 0.815, // $1.63 / 1M tokens + "claude-2": 5.51, // $11.02 / 1M tokens "ERNIE-Bot": 0.8572, // ¥0.012 / 1k tokens "ERNIE-Bot-turbo": 0.5715, // ¥0.008 / 1k tokens "Embedding-V1": 0.1429, // ¥0.002 / 1k tokens @@ -73,3 +76,19 @@ func GetModelRatio(name string) float64 { } return ratio } + +func GetCompletionRatio(name string) float64 { + if strings.HasPrefix(name, "gpt-3.5") { + return 1.333333 + } + if strings.HasPrefix(name, "gpt-4") { + return 2 + } + if strings.HasPrefix(name, "claude-instant-1") { + return 3.38 + } + if strings.HasPrefix(name, "claude-2") { + return 2.965517 + } + return 1 +} diff --git a/controller/relay-text.go b/controller/relay-text.go index 761ca86f..e061d387 100644 --- a/controller/relay-text.go +++ b/controller/relay-text.go @@ -326,14 +326,7 @@ func relayTextHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode { go func() { if consumeQuota { quota := 0 - completionRatio := 1.0 - if strings.HasPrefix(textRequest.Model, "gpt-3.5") { - completionRatio = 1.333333 - } - if strings.HasPrefix(textRequest.Model, "gpt-4") { - completionRatio = 2 - } - + completionRatio := common.GetCompletionRatio(textRequest.Model) promptTokens = textResponse.Usage.PromptTokens completionTokens = textResponse.Usage.CompletionTokens From 1b56becfaae3473861b870c8750205df21334355 Mon Sep 17 00:00:00 2001 From: Benny Date: Sat, 19 Aug 2023 17:08:50 +0800 Subject: [PATCH 8/9] feat: show total quota consumption only when user click (#448) * feat: add toggleable visibility for total quota using an eye icon * chore: update implementation --------- Co-authored-by: JustSong --- i18n/en.json | 3 ++- web/src/components/LogsTable.js | 28 ++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/i18n/en.json b/i18n/en.json index a9402419..ae395dae 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -520,5 +520,6 @@ "代理": "Proxy", "此项可选,用于通过代理站来进行 API 调用,请输入代理站地址,格式为:https://domain.com": "This is optional, used to make API calls through the proxy site, please enter the proxy site address, the format is: https://domain.com", "取消密码登录将导致所有未绑定其他登录方式的用户(包括管理员)无法通过密码登录,确认取消?": "Canceling password login will cause all users (including administrators) who have not bound other login methods to be unable to log in via password, confirm cancel?", - "按照如下格式输入:": "Enter in the following format:" + "按照如下格式输入:": "Enter in the following format:", + "点击查看": "click to view" } diff --git a/web/src/components/LogsTable.js b/web/src/components/LogsTable.js index e311a520..bacb7689 100644 --- a/web/src/components/LogsTable.js +++ b/web/src/components/LogsTable.js @@ -43,6 +43,7 @@ function renderType(type) { const LogsTable = () => { const [logs, setLogs] = useState([]); + const [showStat, setShowStat] = useState(false); const [loading, setLoading] = useState(true); const [activePage, setActivePage] = useState(1); const [searchKeyword, setSearchKeyword] = useState(''); @@ -92,6 +93,17 @@ const LogsTable = () => { } }; + const handleEyeClick = async () => { + if (!showStat) { + if (isAdminUser) { + await getLogStat(); + } else { + await getLogSelfStat(); + } + } + setShowStat(!showStat); + }; + const loadLogs = async (startIdx) => { let url = ''; let localStartTimestamp = Date.parse(start_timestamp) / 1000; @@ -129,13 +141,8 @@ const LogsTable = () => { const refresh = async () => { setLoading(true); - setActivePage(1) + setActivePage(1); await loadLogs(0); - if (isAdminUser) { - getLogStat().then(); - } else { - getLogSelfStat().then(); - } }; useEffect(() => { @@ -169,7 +176,7 @@ const LogsTable = () => { if (logs.length === 0) return; setLoading(true); let sortedLogs = [...logs]; - if (typeof sortedLogs[0][key] === 'string'){ + if (typeof sortedLogs[0][key] === 'string') { sortedLogs.sort((a, b) => { return ('' + a[key]).localeCompare(b[key]); }); @@ -190,7 +197,12 @@ const LogsTable = () => { return ( <> -
使用明细(总消耗额度:{renderQuota(stat.quota)})
+
+ 使用明细(总消耗额度: + {showStat && renderQuota(stat.quota)} + {!showStat && 点击查看} + ) +
{ From dfaa0183b71274a19eb87fe9f837d70a414737f4 Mon Sep 17 00:00:00 2001 From: glzjin Date: Sat, 19 Aug 2023 17:14:39 +0800 Subject: [PATCH 9/9] fix: fix baidu & ali's quota calculation (#444) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修复阿里计费问题 * 修复百度计费问题 --- controller/relay-ali.go | 8 +++++--- controller/relay-baidu.go | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/controller/relay-ali.go b/controller/relay-ali.go index 014f6b84..9dca9a89 100644 --- a/controller/relay-ali.go +++ b/controller/relay-ali.go @@ -177,9 +177,11 @@ func aliStreamHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWithStat common.SysError("error unmarshalling stream response: " + err.Error()) return true } - usage.PromptTokens += aliResponse.Usage.InputTokens - usage.CompletionTokens += aliResponse.Usage.OutputTokens - usage.TotalTokens += aliResponse.Usage.InputTokens + aliResponse.Usage.OutputTokens + if aliResponse.Usage.OutputTokens != 0 { + usage.PromptTokens = aliResponse.Usage.InputTokens + usage.CompletionTokens = aliResponse.Usage.OutputTokens + usage.TotalTokens = aliResponse.Usage.InputTokens + aliResponse.Usage.OutputTokens + } response := streamResponseAli2OpenAI(&aliResponse) response.Choices[0].Delta.Content = strings.TrimPrefix(response.Choices[0].Delta.Content, lastResponseText) lastResponseText = aliResponse.Output.Text diff --git a/controller/relay-baidu.go b/controller/relay-baidu.go index ad20d6d6..39f31a9a 100644 --- a/controller/relay-baidu.go +++ b/controller/relay-baidu.go @@ -215,9 +215,11 @@ func baiduStreamHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWithSt common.SysError("error unmarshalling stream response: " + err.Error()) return true } - usage.PromptTokens += baiduResponse.Usage.PromptTokens - usage.CompletionTokens += baiduResponse.Usage.CompletionTokens - usage.TotalTokens += baiduResponse.Usage.TotalTokens + if baiduResponse.Usage.TotalTokens != 0 { + usage.TotalTokens = baiduResponse.Usage.TotalTokens + usage.PromptTokens = baiduResponse.Usage.PromptTokens + usage.CompletionTokens = baiduResponse.Usage.TotalTokens - baiduResponse.Usage.PromptTokens + } response := streamResponseBaidu2OpenAI(&baiduResponse) jsonResponse, err := json.Marshal(response) if err != nil {