增加一个Azure配置的Array
This commit is contained in:
parent
d0589209cc
commit
103d05d242
24
config.py
24
config.py
@ -83,8 +83,11 @@ DEFAULT_FN_GROUPS = ['对话', '编程', '学术', '智能体']
|
|||||||
|
|
||||||
# 模型选择是 (注意: LLM_MODEL是默认选中的模型, 它*必须*被包含在AVAIL_LLM_MODELS列表中 )
|
# 模型选择是 (注意: LLM_MODEL是默认选中的模型, 它*必须*被包含在AVAIL_LLM_MODELS列表中 )
|
||||||
LLM_MODEL = "gpt-3.5-turbo" # 可选 ↓↓↓
|
LLM_MODEL = "gpt-3.5-turbo" # 可选 ↓↓↓
|
||||||
AVAIL_LLM_MODELS = ["gpt-3.5-turbo-16k", "gpt-3.5-turbo", "azure-gpt-3.5", "api2d-gpt-3.5-turbo",
|
AVAIL_LLM_MODELS = [
|
||||||
"gpt-4", "gpt-4-32k", "azure-gpt-4", "api2d-gpt-4", "chatglm", "moss", "newbing", "stack-claude"]
|
"gpt-3.5-turbo-16k", "gpt-3.5-turbo", "azure-gpt-3.5", "api2d-gpt-3.5-turbo",
|
||||||
|
"gpt-4", "gpt-4-32k", "azure-gpt-4", "api2d-gpt-4",
|
||||||
|
"chatglm", "moss", "newbing", "stack-claude"
|
||||||
|
]
|
||||||
# P.S. 其他可用的模型还包括 ["qianfan", "llama2", "qwen", "gpt-3.5-turbo-0613", "gpt-3.5-turbo-16k-0613", "gpt-3.5-random"
|
# P.S. 其他可用的模型还包括 ["qianfan", "llama2", "qwen", "gpt-3.5-turbo-0613", "gpt-3.5-turbo-16k-0613", "gpt-3.5-random"
|
||||||
# "spark", "sparkv2", "sparkv3", "chatglm_onnx", "claude-1-100k", "claude-2", "internlm", "jittorllms_pangualpha", "jittorllms_llama"]
|
# "spark", "sparkv2", "sparkv3", "chatglm_onnx", "claude-1-100k", "claude-2", "internlm", "jittorllms_pangualpha", "jittorllms_llama"]
|
||||||
|
|
||||||
@ -139,17 +142,15 @@ SLACK_CLAUDE_BOT_ID = ''
|
|||||||
SLACK_CLAUDE_USER_TOKEN = ''
|
SLACK_CLAUDE_USER_TOKEN = ''
|
||||||
|
|
||||||
|
|
||||||
# 如果需要使用AZURE 详情请见额外文档 docs\use_azure.md
|
# 如果需要使用AZURE(方法一:单个azure模型部署)详情请见额外文档 docs\use_azure.md
|
||||||
AZURE_ENDPOINT = "https://你亲手写的api名称.openai.azure.com/"
|
AZURE_ENDPOINT = "https://你亲手写的api名称.openai.azure.com/"
|
||||||
AZURE_URL_VERSION = 'openai/deployments/{v}/chat/completions?api-version=2023-05-15' # {v}作为占位符
|
|
||||||
AZURE_API_KEY = "填入azure openai api的密钥" # 建议直接在API_KEY处填写,该选项即将被弃用
|
AZURE_API_KEY = "填入azure openai api的密钥" # 建议直接在API_KEY处填写,该选项即将被弃用
|
||||||
AZURE_ENGINE_DICT = {
|
AZURE_ENGINE = "填入你亲手写的部署名" # 读 docs\use_azure.md
|
||||||
'gpt-35-16k': 1024 * 16,
|
|
||||||
'gpt-4': 1024 * 8
|
|
||||||
} # 读 docs\use_azure.md key填入你的部署名,value请自行计算模型对应最大Token数,如3.5 = 4096 = 1024 * 4即可
|
|
||||||
AVAIL_LLM_MODELS.extend([f"azure-{i}" for i in AZURE_ENGINE_DICT]) # 自动加入模型列表
|
|
||||||
|
|
||||||
|
|
||||||
|
# 如果需要使用AZURE(方法二:多个azure模型部署+动态切换)详情请见额外文档 docs\use_azure.md
|
||||||
|
AZURE_CFG_ARRAY = {}
|
||||||
|
|
||||||
|
|
||||||
# 使用Newbing (不推荐使用,未来将删除)
|
# 使用Newbing (不推荐使用,未来将删除)
|
||||||
NEWBING_STYLE = "creative" # ["creative", "balanced", "precise"]
|
NEWBING_STYLE = "creative" # ["creative", "balanced", "precise"]
|
||||||
@ -222,13 +223,16 @@ NUM_CUSTOM_BASIC_BTN = 4
|
|||||||
│ ├── API_ORG(不常用)
|
│ ├── API_ORG(不常用)
|
||||||
│ └── API_URL_REDIRECT(不常用)
|
│ └── API_URL_REDIRECT(不常用)
|
||||||
│
|
│
|
||||||
├── "azure-gpt-3.5" 等azure模型
|
├── "azure-gpt-3.5" 等azure模型(单个azure模型,不需要动态切换)
|
||||||
│ ├── API_KEY
|
│ ├── API_KEY
|
||||||
│ ├── AZURE_ENDPOINT
|
│ ├── AZURE_ENDPOINT
|
||||||
│ ├── AZURE_API_KEY
|
│ ├── AZURE_API_KEY
|
||||||
│ ├── AZURE_ENGINE
|
│ ├── AZURE_ENGINE
|
||||||
│ └── API_URL_REDIRECT
|
│ └── API_URL_REDIRECT
|
||||||
│
|
│
|
||||||
|
├── "azure-gpt-3.5" 等azure模型(多个azure模型,需要动态切换)
|
||||||
|
│ └── AZURE_CFG_ARRAY
|
||||||
|
│
|
||||||
├── "spark" 星火认知大模型 spark & sparkv2
|
├── "spark" 星火认知大模型 spark & sparkv2
|
||||||
│ ├── XFYUN_APPID
|
│ ├── XFYUN_APPID
|
||||||
│ ├── XFYUN_API_SECRET
|
│ ├── XFYUN_API_SECRET
|
||||||
|
@ -1,3 +1,42 @@
|
|||||||
|
# 微软Azure云接入指南
|
||||||
|
|
||||||
|
## 方法一(旧方法,只能接入一个Azure模型)
|
||||||
|
|
||||||
|
- 通过以下教程,获取AZURE_ENDPOINT,AZURE_API_KEY,AZURE_ENGINE,直接修改 config 配置即可。配置的修改方法见本项目wiki。
|
||||||
|
|
||||||
|
## 方法二(新方法,接入多个Azure模型,并支持动态切换)
|
||||||
|
|
||||||
|
- 在方法一的基础上,注册并获取多组 AZURE_ENDPOINT,AZURE_API_KEY,AZURE_ENGINE
|
||||||
|
- 修改config中的AZURE_CFG_ARRAY配置项,按照格式填入多个Azure模型的配置,如下所示:
|
||||||
|
|
||||||
|
```
|
||||||
|
AZURE_CFG_ARRAY = {
|
||||||
|
"azure-gpt-3.5": # 第一个模型,azure模型必须以"azure-"开头
|
||||||
|
{
|
||||||
|
"AZURE_ENDPOINT": "https://你亲手写的api名称.openai.azure.com/",
|
||||||
|
"AZURE_API_KEY": "cccccccccccccccccccccccccccccccc",
|
||||||
|
"AZURE_ENGINE": "填入你亲手写的部署名1",
|
||||||
|
"AZURE_MODEL_MAX_TOKEN": 4096,
|
||||||
|
},
|
||||||
|
"azure-gpt-4": # 第二个模型,azure模型必须以"azure-"开头
|
||||||
|
{
|
||||||
|
"AZURE_ENDPOINT": "https://你亲手写的api名称.openai.azure.com/",
|
||||||
|
"AZURE_API_KEY": "dddddddddddddddddddddddddddddddd",
|
||||||
|
"AZURE_ENGINE": "填入你亲手写的部署名2",
|
||||||
|
"AZURE_MODEL_MAX_TOKEN": 8192,
|
||||||
|
},
|
||||||
|
"azure-gpt-3.5-16k": # 第三个模型,azure模型必须以"azure-"开头
|
||||||
|
{
|
||||||
|
"AZURE_ENDPOINT": "https://你亲手写的api名称.openai.azure.com/",
|
||||||
|
"AZURE_API_KEY": "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee",
|
||||||
|
"AZURE_ENGINE": "填入你亲手写的部署名3",
|
||||||
|
"AZURE_MODEL_MAX_TOKEN": 16384,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 通过微软Azure云服务申请 Openai API
|
# 通过微软Azure云服务申请 Openai API
|
||||||
|
|
||||||
由于Openai和微软的关系,现在是可以通过微软的Azure云计算服务直接访问openai的api,免去了注册和网络的问题。
|
由于Openai和微软的关系,现在是可以通过微软的Azure云计算服务直接访问openai的api,免去了注册和网络的问题。
|
||||||
|
@ -48,10 +48,12 @@ class LazyloadTiktoken(object):
|
|||||||
return encoder.decode(*args, **kwargs)
|
return encoder.decode(*args, **kwargs)
|
||||||
|
|
||||||
# Endpoint 重定向
|
# Endpoint 重定向
|
||||||
API_URL_REDIRECT, = get_conf("API_URL_REDIRECT")
|
API_URL_REDIRECT, AZURE_ENDPOINT, AZURE_ENGINE = get_conf("API_URL_REDIRECT", "AZURE_ENDPOINT", "AZURE_ENGINE")
|
||||||
openai_endpoint = "https://api.openai.com/v1/chat/completions"
|
openai_endpoint = "https://api.openai.com/v1/chat/completions"
|
||||||
api2d_endpoint = "https://openai.api2d.net/v1/chat/completions"
|
api2d_endpoint = "https://openai.api2d.net/v1/chat/completions"
|
||||||
newbing_endpoint = "wss://sydney.bing.com/sydney/ChatHub"
|
newbing_endpoint = "wss://sydney.bing.com/sydney/ChatHub"
|
||||||
|
if not AZURE_ENDPOINT.endswith('/'): AZURE_ENDPOINT += '/'
|
||||||
|
azure_endpoint = AZURE_ENDPOINT + f'openai/deployments/{AZURE_ENGINE}/chat/completions?api-version=2023-05-15'
|
||||||
# 兼容旧版的配置
|
# 兼容旧版的配置
|
||||||
try:
|
try:
|
||||||
API_URL, = get_conf("API_URL")
|
API_URL, = get_conf("API_URL")
|
||||||
@ -141,6 +143,25 @@ model_info = {
|
|||||||
"tokenizer": tokenizer_gpt4,
|
"tokenizer": tokenizer_gpt4,
|
||||||
"token_cnt": get_token_num_gpt4,
|
"token_cnt": get_token_num_gpt4,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# azure openai
|
||||||
|
"azure-gpt-3.5":{
|
||||||
|
"fn_with_ui": chatgpt_ui,
|
||||||
|
"fn_without_ui": chatgpt_noui,
|
||||||
|
"endpoint": azure_endpoint,
|
||||||
|
"max_token": 4096,
|
||||||
|
"tokenizer": tokenizer_gpt35,
|
||||||
|
"token_cnt": get_token_num_gpt35,
|
||||||
|
},
|
||||||
|
|
||||||
|
"azure-gpt-4":{
|
||||||
|
"fn_with_ui": chatgpt_ui,
|
||||||
|
"fn_without_ui": chatgpt_noui,
|
||||||
|
"endpoint": azure_endpoint,
|
||||||
|
"max_token": 8192,
|
||||||
|
"tokenizer": tokenizer_gpt35,
|
||||||
|
"token_cnt": get_token_num_gpt35,
|
||||||
|
},
|
||||||
|
|
||||||
# api_2d
|
# api_2d
|
||||||
"api2d-gpt-3.5-turbo": {
|
"api2d-gpt-3.5-turbo": {
|
||||||
@ -187,21 +208,6 @@ model_info = {
|
|||||||
"token_cnt": get_token_num_gpt35,
|
"token_cnt": get_token_num_gpt35,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
# Azure 多模型支持
|
|
||||||
AZURE_ENDPOINT, AZURE_ENGINE_DICT, AZURE_URL_VERSION = get_conf('AZURE_ENDPOINT', 'AZURE_ENGINE_DICT', 'AZURE_URL_VERSION')
|
|
||||||
for azure in AZURE_ENGINE_DICT:
|
|
||||||
if not AZURE_ENDPOINT.endswith('/'): AZURE_ENDPOINT += '/'
|
|
||||||
azure_endpoint = AZURE_ENDPOINT + str(AZURE_URL_VERSION).replace('{v}', azure)
|
|
||||||
model_info.update({
|
|
||||||
f"azure-{azure}": {
|
|
||||||
"fn_with_ui": chatgpt_ui,
|
|
||||||
"fn_without_ui": chatgpt_noui,
|
|
||||||
"endpoint": azure_endpoint,
|
|
||||||
"max_token": AZURE_ENGINE_DICT[azure],
|
|
||||||
"tokenizer": tokenizer_gpt35,
|
|
||||||
"token_cnt": get_token_num_gpt35,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
# -=-=-=-=-=-=- 以下部分是新加入的模型,可能附带额外依赖 -=-=-=-=-=-=-
|
# -=-=-=-=-=-=- 以下部分是新加入的模型,可能附带额外依赖 -=-=-=-=-=-=-
|
||||||
if "claude-1-100k" in AVAIL_LLM_MODELS or "claude-2" in AVAIL_LLM_MODELS:
|
if "claude-1-100k" in AVAIL_LLM_MODELS or "claude-2" in AVAIL_LLM_MODELS:
|
||||||
@ -469,6 +475,30 @@ if "llama2" in AVAIL_LLM_MODELS: # llama2
|
|||||||
except:
|
except:
|
||||||
print(trimmed_format_exc())
|
print(trimmed_format_exc())
|
||||||
|
|
||||||
|
# <-- 用于定义和切换多个azure模型 -->
|
||||||
|
AZURE_CFG_ARRAY, = get_conf("AZURE_CFG_ARRAY")
|
||||||
|
if len(AZURE_CFG_ARRAY) > 0:
|
||||||
|
for azure_model_name, azure_cfg_dict in AZURE_CFG_ARRAY.items():
|
||||||
|
# 可能会覆盖之前的配置,但这是意料之中的
|
||||||
|
if not azure_model_name.startswith('azure'):
|
||||||
|
raise ValueError("AZURE_CFG_ARRAY中配置的模型必须以azure开头")
|
||||||
|
endpoint_ = azure_cfg_dict["AZURE_ENDPOINT"] + \
|
||||||
|
f'openai/deployments/{azure_cfg_dict["AZURE_ENGINE"]}/chat/completions?api-version=2023-05-15'
|
||||||
|
model_info.update({
|
||||||
|
azure_model_name: {
|
||||||
|
"fn_with_ui": chatgpt_ui,
|
||||||
|
"fn_without_ui": chatgpt_noui,
|
||||||
|
"endpoint": endpoint_,
|
||||||
|
"azure_api_key": azure_cfg_dict["AZURE_API_KEY"],
|
||||||
|
"max_token": azure_cfg_dict["AZURE_MODEL_MAX_TOKEN"],
|
||||||
|
"tokenizer": tokenizer_gpt35, # tokenizer只用于粗估token数量
|
||||||
|
"token_cnt": get_token_num_gpt35,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if azure_model_name not in AVAIL_LLM_MODELS:
|
||||||
|
azure_model_name += [azure_model_name]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def LLM_CATCH_EXCEPTION(f):
|
def LLM_CATCH_EXCEPTION(f):
|
||||||
|
@ -23,8 +23,8 @@ import random
|
|||||||
# config_private.py放自己的秘密如API和代理网址
|
# config_private.py放自己的秘密如API和代理网址
|
||||||
# 读取时首先看是否存在私密的config_private配置文件(不受git管控),如果有,则覆盖原config文件
|
# 读取时首先看是否存在私密的config_private配置文件(不受git管控),如果有,则覆盖原config文件
|
||||||
from toolbox import get_conf, update_ui, is_any_api_key, select_api_key, what_keys, clip_history, trimmed_format_exc, is_the_upload_folder
|
from toolbox import get_conf, update_ui, is_any_api_key, select_api_key, what_keys, clip_history, trimmed_format_exc, is_the_upload_folder
|
||||||
proxies, TIMEOUT_SECONDS, MAX_RETRY, API_ORG = \
|
proxies, TIMEOUT_SECONDS, MAX_RETRY, API_ORG, AZURE_CFG_ARRAY = \
|
||||||
get_conf('proxies', 'TIMEOUT_SECONDS', 'MAX_RETRY', 'API_ORG')
|
get_conf('proxies', 'TIMEOUT_SECONDS', 'MAX_RETRY', 'API_ORG', 'AZURE_CFG_ARRAY')
|
||||||
|
|
||||||
timeout_bot_msg = '[Local Message] Request timeout. Network error. Please check proxy settings in config.py.' + \
|
timeout_bot_msg = '[Local Message] Request timeout. Network error. Please check proxy settings in config.py.' + \
|
||||||
'网络错误,检查代理服务器是否可用,以及代理设置的格式是否正确,格式须是[协议]://[地址]:[端口],缺一不可。'
|
'网络错误,检查代理服务器是否可用,以及代理设置的格式是否正确,格式须是[协议]://[地址]:[端口],缺一不可。'
|
||||||
@ -289,7 +289,11 @@ def generate_payload(inputs, llm_kwargs, history, system_prompt, stream):
|
|||||||
"Authorization": f"Bearer {api_key}"
|
"Authorization": f"Bearer {api_key}"
|
||||||
}
|
}
|
||||||
if API_ORG.startswith('org-'): headers.update({"OpenAI-Organization": API_ORG})
|
if API_ORG.startswith('org-'): headers.update({"OpenAI-Organization": API_ORG})
|
||||||
if llm_kwargs['llm_model'].startswith('azure-'): headers.update({"api-key": api_key})
|
if llm_kwargs['llm_model'].startswith('azure-'):
|
||||||
|
headers.update({"api-key": api_key})
|
||||||
|
if llm_kwargs['llm_model'] in AZURE_CFG_ARRAY.keys():
|
||||||
|
azure_api_key_unshared = AZURE_CFG_ARRAY[llm_kwargs['llm_model']]["AZURE_API_KEY"]
|
||||||
|
headers.update({"api-key": azure_api_key_unshared})
|
||||||
|
|
||||||
conversation_cnt = len(history) // 2
|
conversation_cnt = len(history) // 2
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user