Spaces:
Sleeping
Sleeping
xzajyjs
Keldos
Chuan Hu
commited on
Commit
•
dd740ac
1
Parent(s):
02f41f3
修复前端API用量查询显示功能 (#848)
Browse files* fix billing_data
* 整合sensitive_id的获取方式到config.py中及未填写UI提示
* sensitive_id支持环境变量
* 调整ui中获取余额失败的提示词
* refactor: 整理config_example.json
顺便清理了palm的key
* 加入 Google PaLM API Key 配置项
* i18n: 更新用量获取失败翻译
---------
Co-authored-by: Keldos <i@keldos.me>
Co-authored-by: Chuan Hu <51039745+GaiZhenbiao@users.noreply.github.com>
- config_example.json +27 -24
- locale/en_US.json +4 -2
- locale/ja_JP.json +2 -0
- locale/ko_KR.json +2 -0
- modules/config.py +4 -0
- modules/models/models.py +8 -3
config_example.json
CHANGED
@@ -1,42 +1,40 @@
|
|
1 |
{
|
2 |
-
//
|
3 |
-
|
4 |
-
|
5 |
-
"
|
6 |
-
"
|
7 |
-
"usage_limit": 120, // API Key的当月限额,单位:美元
|
8 |
-
// 你的
|
9 |
-
//
|
10 |
-
"minimax_api_key": "",
|
11 |
-
"minimax_group_id": "",
|
12 |
-
|
13 |
-
|
14 |
-
// "
|
15 |
-
// 如果使用代理,请取消注释下面的两行,并替换代理URL
|
16 |
-
// "https_proxy": "http://127.0.0.1:1079",
|
17 |
-
// "http_proxy": "http://127.0.0.1:1079",
|
18 |
"users": [], // 用户列表,[[用户名1, 密码1], [用户名2, 密码2], ...]
|
19 |
"local_embedding": false, //是否在本地编制索引
|
20 |
"hide_history_when_not_logged_in": false, //未登录情况下是否不展示对话历史
|
21 |
"check_update": true, //是否启用检查更新
|
22 |
"default_model": "gpt-3.5-turbo", // 默认模型
|
23 |
|
24 |
-
|
25 |
-
"default_chuanhu_assistant_model": "gpt-4", //川虎助理使用的模型,可选gpt-3.5-turbo或者gpt-4
|
26 |
"GOOGLE_CSE_ID": "", //谷歌搜索引擎ID,用于川虎助理Pro模式,获取方式请看 https://stackoverflow.com/questions/37083058/programmatically-searching-google-in-python-using-custom-search
|
27 |
"GOOGLE_API_KEY": "", //谷歌API Key,用于川虎助理Pro模式
|
28 |
"WOLFRAM_ALPHA_APPID": "", //Wolfram Alpha API Key,用于川虎助理Pro模式,获取方式请看 https://products.wolframalpha.com/api/
|
29 |
"SERPAPI_API_KEY": "", //SerpAPI API Key,用于川虎助理Pro模式,获取方式请看 https://serpapi.com/
|
30 |
|
31 |
-
|
|
|
32 |
"advance_docs": {
|
33 |
"pdf": {
|
34 |
-
// 是否认为PDF是双栏的
|
35 |
-
"
|
36 |
-
// 是否使用OCR识别PDF中的公式
|
37 |
-
"formula_ocr": true
|
38 |
}
|
39 |
},
|
|
|
|
|
40 |
// 是否多个API Key轮换使用
|
41 |
"multi_api_key": false,
|
42 |
"api_key_list": [
|
@@ -44,7 +42,12 @@
|
|
44 |
"sk-xxxxxxxxxxxxxxxxxxxxxxxx2",
|
45 |
"sk-xxxxxxxxxxxxxxxxxxxxxxxx3"
|
46 |
],
|
47 |
-
//
|
|
|
|
|
|
|
|
|
|
|
48 |
// "server_name": "0.0.0.0",
|
49 |
// "server_port": 7860,
|
50 |
// 如果要share到gradio,设置为true
|
|
|
1 |
{
|
2 |
+
// 各配置具体说明,见 [https://github.com/GaiZhenbiao/ChuanhuChatGPT/wiki/使用教程#配置-configjson]
|
3 |
+
|
4 |
+
//== API 配置 ==
|
5 |
+
"openai_api_key": "", // 你的 OpenAI API Key,一般必填,若空缺则需在图形界面中填入API Key
|
6 |
+
"sensitive_id": "", // 你 OpenAI 账户的 Sensitive ID,用于查询 API 用量
|
7 |
+
"usage_limit": 120, // 该 OpenAI API Key 的当月限额,单位:美元
|
8 |
+
"google_palm_api_key": "", // 你的 Google PaLM API Key,用于 Google PaLM 对话模型
|
9 |
+
"xmchat_api_key": "", // 你的 xmchat API Key,用于 XMChat 对话模型
|
10 |
+
"minimax_api_key": "", // 你的 MiniMax API Key,用于 MiniMax 对话模型
|
11 |
+
"minimax_group_id": "", // 你的 MiniMax Group ID,用于 MiniMax 对话模型
|
12 |
+
|
13 |
+
//== 基础配置 ==
|
14 |
+
"language": "auto", // 界面语言,可选"auto", "zh-CN", "en-US", "ja-JP", "ko-KR"
|
|
|
|
|
|
|
15 |
"users": [], // 用户列表,[[用户名1, 密码1], [用户名2, 密码2], ...]
|
16 |
"local_embedding": false, //是否在本地编制索引
|
17 |
"hide_history_when_not_logged_in": false, //未登录情况下是否不展示对话历史
|
18 |
"check_update": true, //是否启用检查更新
|
19 |
"default_model": "gpt-3.5-turbo", // 默认模型
|
20 |
|
21 |
+
//== 川虎助理设置 ==
|
22 |
+
"default_chuanhu_assistant_model": "gpt-4", //川虎助理使用的模型,可选gpt-3.5-turbo或者gpt-4等
|
23 |
"GOOGLE_CSE_ID": "", //谷歌搜索引擎ID,用于川虎助理Pro模式,获取方式请看 https://stackoverflow.com/questions/37083058/programmatically-searching-google-in-python-using-custom-search
|
24 |
"GOOGLE_API_KEY": "", //谷歌API Key,用于川虎助理Pro模式
|
25 |
"WOLFRAM_ALPHA_APPID": "", //Wolfram Alpha API Key,用于川虎助理Pro模式,获取方式请看 https://products.wolframalpha.com/api/
|
26 |
"SERPAPI_API_KEY": "", //SerpAPI API Key,用于川虎助理Pro模式,获取方式请看 https://serpapi.com/
|
27 |
|
28 |
+
//== 文档处理与显示 ==
|
29 |
+
"latex_option": "default", // LaTeX 公式渲染策略,可选"default", "strict", "all"或者"disabled"
|
30 |
"advance_docs": {
|
31 |
"pdf": {
|
32 |
+
"two_column": false, // 是否认为PDF是双栏的
|
33 |
+
"formula_ocr": true // 是否使用OCR识别PDF中的公式
|
|
|
|
|
34 |
}
|
35 |
},
|
36 |
+
|
37 |
+
//== 高级配置 ==
|
38 |
// 是否多个API Key轮换使用
|
39 |
"multi_api_key": false,
|
40 |
"api_key_list": [
|
|
|
42 |
"sk-xxxxxxxxxxxxxxxxxxxxxxxx2",
|
43 |
"sk-xxxxxxxxxxxxxxxxxxxxxxxx3"
|
44 |
],
|
45 |
+
// 自定义OpenAI API Base
|
46 |
+
// "openai_api_base": "https://api.openai.com",
|
47 |
+
// 自定义使用代理(请替换代理URL)
|
48 |
+
// "https_proxy": "http://127.0.0.1:1079",
|
49 |
+
// "http_proxy": "http://127.0.0.1:1079",
|
50 |
+
// 自定义端口、自定义ip(请替换对应内容)
|
51 |
// "server_name": "0.0.0.0",
|
52 |
// "server_port": 7860,
|
53 |
// 如果要share到gradio,设置为true
|
locale/en_US.json
CHANGED
@@ -41,7 +41,7 @@
|
|
41 |
"在这里输入API-Host...": "Type in API-Host here...",
|
42 |
"🔄 切换API地址": "🔄 Switch API Address",
|
43 |
"在这里输入代理地址...": "Type in proxy address here...",
|
44 |
-
"代理地址(示例:http://127.0.0.1:10809)": "Proxy address (example: http://127.0.0.1:10809
|
45 |
"🔄 设置代理地址": "🔄 Set Proxy Address",
|
46 |
"🔙 恢复网络默认设置": "🔙 Reset Network Settings",
|
47 |
"🔄 检查更新...": "🔄 Check for Update...",
|
@@ -52,8 +52,10 @@
|
|
52 |
"川虎Chat 🚀": "Chuanhu Chat 🚀",
|
53 |
"开始实时传输回答……": "Start streaming output...",
|
54 |
"Token 计数: ": "Token Count: ",
|
55 |
-
",本次对话累计消耗了 ": "
|
56 |
"**获取API使用情况失败**": "**Failed to get API usage**",
|
|
|
|
|
57 |
"**本月使用金额** ": "**Monthly usage** ",
|
58 |
"本月使用金额": "Monthly usage",
|
59 |
"获取API使用情况失败:": "Failed to get API usage:",
|
|
|
41 |
"在这里输入API-Host...": "Type in API-Host here...",
|
42 |
"🔄 切换API地址": "🔄 Switch API Address",
|
43 |
"在这里输入代理地址...": "Type in proxy address here...",
|
44 |
+
"代理地址(示例:http://127.0.0.1:10809)": "Proxy address (example: http://127.0.0.1:10809)",
|
45 |
"🔄 设置代理地址": "🔄 Set Proxy Address",
|
46 |
"🔙 恢复网络默认设置": "🔙 Reset Network Settings",
|
47 |
"🔄 检查更新...": "🔄 Check for Update...",
|
|
|
52 |
"川虎Chat 🚀": "Chuanhu Chat 🚀",
|
53 |
"开始实时传输回答……": "Start streaming output...",
|
54 |
"Token 计数: ": "Token Count: ",
|
55 |
+
",本次对话累计消耗了 ": ", Total cost for this dialogue is ",
|
56 |
"**获取API使用情况失败**": "**Failed to get API usage**",
|
57 |
+
"**获取API使用情况失败**,需在填写`config.json`中正确填写sensitive_id": "**Failed to get API usage**, correct sensitive_id needed in `config.json`",
|
58 |
+
"**获取API使用情况失败**,sensitive_id错误或已过期": "**Failed to get API usage**, wrong or expired sensitive_id",
|
59 |
"**本月使用金额** ": "**Monthly usage** ",
|
60 |
"本月使用金额": "Monthly usage",
|
61 |
"获取API使用情况失败:": "Failed to get API usage:",
|
locale/ja_JP.json
CHANGED
@@ -54,6 +54,8 @@
|
|
54 |
"Token 计数: ": "Token数: ",
|
55 |
",本次对话累计消耗了 ": ", 今の会話で消費合計 ",
|
56 |
"**获取API使用情况失败**": "**API使用状況の取得に失敗しました**",
|
|
|
|
|
57 |
"**本月使用金额** ": "**今月の使用料金** ",
|
58 |
"本月使用金额": "今月の使用料金",
|
59 |
"获取API使用情况失败:": "API使用状況の取得に失敗しました:",
|
|
|
54 |
"Token 计数: ": "Token数: ",
|
55 |
",本次对话累计消耗了 ": ", 今の会話で消費合計 ",
|
56 |
"**获取API使用情况失败**": "**API使用状況の取得に失敗しました**",
|
57 |
+
"**获取API使用情况失败**,需在填写`config.json`中正确填写sensitive_id": "**API使用状況の取得に失敗しました**、`config.json`に正しい`sensitive_id`を入力する必要があります",
|
58 |
+
"**获取API使用情况失败**,sensitive_id错误或已过期": "**API使用状況の取得に失敗しました**、sensitive_idが間違っているか、期限切れです",
|
59 |
"**本月使用金额** ": "**今月の使用料金** ",
|
60 |
"本月使用金额": "今月の使用料金",
|
61 |
"获取API使用情况失败:": "API使用状況の取得に失敗しました:",
|
locale/ko_KR.json
CHANGED
@@ -55,6 +55,8 @@
|
|
55 |
"Token 计数: ": "토큰 수: ",
|
56 |
",本次对话累计消耗了 ": ",이 대화의 전체 비용은 ",
|
57 |
"**获取API使用情况失败**": "**API 사용량 가져오기 실패**",
|
|
|
|
|
58 |
"**本月使用金额** ": "**이번 달 사용금액** ",
|
59 |
"本月使用金额": "이번 달 사용금액",
|
60 |
"获取API使用情况失败:": "API 사용량 가져오기 실패:",
|
|
|
55 |
"Token 计数: ": "토큰 수: ",
|
56 |
",本次对话累计消耗了 ": ",이 대화의 전체 비용은 ",
|
57 |
"**获取API使用情况失败**": "**API 사용량 가져오기 실패**",
|
58 |
+
"**获取API使用情况失败**,需在填写`config.json`中正确填写sensitive_id": "**API 사용량 가져오기 실패**. `config.json`에 올바른 `sensitive_id`를 입력해야 합니다",
|
59 |
+
"**获取API使用情况失败**,sensitive_id错误或已过期": "**API 사용량 가져오기 실패**. sensitive_id가 잘못되었거나 만료되었습니다",
|
60 |
"**本月使用金额** ": "**이번 달 사용금액** ",
|
61 |
"本月使用金额": "이번 달 사용금액",
|
62 |
"获取API使用情况失败:": "API 사용량 가져오기 실패:",
|
modules/config.py
CHANGED
@@ -11,6 +11,7 @@ from . import presets
|
|
11 |
|
12 |
__all__ = [
|
13 |
"my_api_key",
|
|
|
14 |
"authflag",
|
15 |
"auth_list",
|
16 |
"dockerflag",
|
@@ -37,6 +38,9 @@ if os.path.exists("config.json"):
|
|
37 |
else:
|
38 |
config = {}
|
39 |
|
|
|
|
|
|
|
40 |
lang_config = config.get("language", "auto")
|
41 |
language = os.environ.get("LANGUAGE", lang_config)
|
42 |
|
|
|
11 |
|
12 |
__all__ = [
|
13 |
"my_api_key",
|
14 |
+
"sensitive_id",
|
15 |
"authflag",
|
16 |
"auth_list",
|
17 |
"dockerflag",
|
|
|
38 |
else:
|
39 |
config = {}
|
40 |
|
41 |
+
sensitive_id = config.get("sensitive_id", "")
|
42 |
+
sensitive_id = os.environ.get("SENSITIVE_ID", sensitive_id)
|
43 |
+
|
44 |
lang_config = config.get("language", "auto")
|
45 |
language = os.environ.get("LANGUAGE", lang_config)
|
46 |
|
modules/models/models.py
CHANGED
@@ -24,7 +24,7 @@ from ..presets import *
|
|
24 |
from ..index_func import *
|
25 |
from ..utils import *
|
26 |
from .. import shared
|
27 |
-
from ..config import retrieve_proxy, usage_limit
|
28 |
from modules import config
|
29 |
from .base_model import BaseLLMModel, ModelType
|
30 |
|
@@ -87,7 +87,11 @@ class OpenAIClient(BaseLLMModel):
|
|
87 |
try:
|
88 |
usage_data = self._get_billing_data(usage_url)
|
89 |
except Exception as e:
|
90 |
-
logging.error(f"获取API使用情况失败:" + str(e))
|
|
|
|
|
|
|
|
|
91 |
return i18n("**获取API使用情况失败**")
|
92 |
# rounded_usage = "{:.5f}".format(usage_data["total_usage"] / 100)
|
93 |
rounded_usage = round(usage_data["total_usage"] / 100, 5)
|
@@ -176,8 +180,9 @@ class OpenAIClient(BaseLLMModel):
|
|
176 |
def _refresh_header(self):
|
177 |
self.headers = {
|
178 |
"Content-Type": "application/json",
|
179 |
-
"Authorization": f"Bearer {
|
180 |
}
|
|
|
181 |
|
182 |
def _get_billing_data(self, billing_url):
|
183 |
with retrieve_proxy():
|
|
|
24 |
from ..index_func import *
|
25 |
from ..utils import *
|
26 |
from .. import shared
|
27 |
+
from ..config import retrieve_proxy, usage_limit, sensitive_id
|
28 |
from modules import config
|
29 |
from .base_model import BaseLLMModel, ModelType
|
30 |
|
|
|
87 |
try:
|
88 |
usage_data = self._get_billing_data(usage_url)
|
89 |
except Exception as e:
|
90 |
+
logging.error(f"获取API使用情况失败: " + str(e))
|
91 |
+
if "Invalid authorization header" in str(e):
|
92 |
+
return i18n("**获取API使用情况失败**,需在填写`config.json`中正确填写sensitive_id")
|
93 |
+
elif "Incorrect API key provided: sess" in str(e):
|
94 |
+
return i18n("**获取API使用情况失败**,sensitive_id错误或已过期")
|
95 |
return i18n("**获取API使用情况失败**")
|
96 |
# rounded_usage = "{:.5f}".format(usage_data["total_usage"] / 100)
|
97 |
rounded_usage = round(usage_data["total_usage"] / 100, 5)
|
|
|
180 |
def _refresh_header(self):
|
181 |
self.headers = {
|
182 |
"Content-Type": "application/json",
|
183 |
+
"Authorization": f"Bearer {sensitive_id}",
|
184 |
}
|
185 |
+
|
186 |
|
187 |
def _get_billing_data(self, billing_url):
|
188 |
with retrieve_proxy():
|