CoolFace
Apppublic

Intoval/privateChatGPT

sourceHugging Facegpl-3.0updated 3y agoView on Hugging Face
1likes
config.py171 linesDownload Raw Back to modules
1from collections import defaultdict2from contextlib import contextmanager3import os4import logging5import sys6import commentjson as json7 8from . import shared9from . import presets10 11 12__all__ = [13    "my_api_key",14    "authflag",15    "auth_list",16    "dockerflag",17    "retrieve_proxy",18    "log_level",19    "advance_docs",20    "update_doc_config",21    "multi_api_key",22    "server_name",23    "server_port",24    "share",25]26 27# 添加一个统一的config文件,避免文件过多造成的疑惑(优先级最低)28# 同时,也可以为后续支持自定义功能提供config的帮助29if os.path.exists("config.json"):30    with open("config.json", "r", encoding='utf-8') as f:31        config = json.load(f)32else:33    config = {}34 35language = config.get("language", "auto") # 在这里输入你的 API 密钥36language = os.environ.get("LANGUAGE", language)37 38 39if os.path.exists("api_key.txt"):40    logging.info("检测到api_key.txt文件,正在进行迁移...")41    with open("api_key.txt", "r") as f:42        config["openai_api_key"] = f.read().strip()43    os.rename("api_key.txt", "api_key(deprecated).txt")44    with open("config.json", "w", encoding='utf-8') as f:45        json.dump(config, f, indent=4)46 47if os.path.exists("auth.json"):48    logging.info("检测到auth.json文件,正在进行迁移...")49    auth_list = []50    with open("auth.json", "r", encoding='utf-8') as f:51            auth = json.load(f)52            for _ in auth:53                if auth[_]["username"] and auth[_]["password"]:54                    auth_list.append((auth[_]["username"], auth[_]["password"]))55                else:56                    logging.error("请检查auth.json文件中的用户名和密码!")57                    sys.exit(1)58    config["users"] = auth_list59    os.rename("auth.json", "auth(deprecated).json")60    with open("config.json", "w", encoding='utf-8') as f:61        json.dump(config, f, indent=4)62 63## 处理docker if we are running in Docker64dockerflag = config.get("dockerflag", False)65if os.environ.get("dockerrun") == "yes":66    dockerflag = True67 68## 处理 api-key 以及 允许的用户列表69my_api_key = config.get("openai_api_key", "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") # 在这里输入你的 API 密钥70my_api_key = os.environ.get("OPENAI_API_KEY", my_api_key)71 72## 多账户机制73multi_api_key = config.get("multi_api_key", False) # 是否开启多账户机制74if multi_api_key:75    api_key_list = config.get("api_key_list", [])76    if len(api_key_list) == 0:77        logging.error("多账号模式已开启,但api_key_list为空,请检查config.json")78        sys.exit(1)79    shared.state.set_api_key_queue(api_key_list)80 81auth_list = config.get("users", []) # 实际上是使用者的列表82authflag = len(auth_list) > 0  # 是否开启认证的状态值,改为判断auth_list长度83 84# 处理自定义的api_host,优先读环境变量的配置,如果存在则自动装配85api_host = os.environ.get("api_host", config.get("api_host", ""))86if api_host:87    shared.state.set_api_host(api_host)88 89@contextmanager90def retrieve_openai_api(api_key = None):91    old_api_key = os.environ.get("OPENAI_API_KEY", "")92    if api_key is None:93        os.environ["OPENAI_API_KEY"] = my_api_key94        yield my_api_key95    else:96        os.environ["OPENAI_API_KEY"] = api_key97        yield api_key98    os.environ["OPENAI_API_KEY"] = old_api_key99 100## 处理log101log_level = config.get("log_level", "INFO")102logging.basicConfig(103    level=log_level,104    format="%(asctime)s [%(levelname)s] [%(filename)s:%(lineno)d] %(message)s",105)106 107## 处理代理:108http_proxy = config.get("http_proxy", "")109https_proxy = config.get("https_proxy", "")110http_proxy = os.environ.get("HTTP_PROXY", http_proxy)111https_proxy = os.environ.get("HTTPS_PROXY", https_proxy)112 113# 重置系统变量,在不需要设置的时候不设置环境变量,以免引起全局代理报错114os.environ["HTTP_PROXY"] = ""115os.environ["HTTPS_PROXY"] = ""116 117local_embedding = config.get("local_embedding", False) # 是否使用本地embedding118 119@contextmanager120def retrieve_proxy(proxy=None):121    """122    1, 如果proxy = NONE,设置环境变量,并返回最新设置的代理123    2,如果proxy != NONE,更新当前的代理配置,但是不更新环境变量124    """125    global http_proxy, https_proxy126    if proxy is not None:127        http_proxy = proxy128        https_proxy = proxy129        yield http_proxy, https_proxy130    else:131        old_var = os.environ["HTTP_PROXY"], os.environ["HTTPS_PROXY"]132        os.environ["HTTP_PROXY"] = http_proxy133        os.environ["HTTPS_PROXY"] = https_proxy134        yield http_proxy, https_proxy # return new proxy135 136        # return old proxy137        os.environ["HTTP_PROXY"], os.environ["HTTPS_PROXY"] = old_var138 139 140## 处理advance docs141advance_docs = defaultdict(lambda: defaultdict(dict))142advance_docs.update(config.get("advance_docs", {}))143def update_doc_config(two_column_pdf):144    global advance_docs145    advance_docs["pdf"]["two_column"] = two_column_pdf146 147    logging.info(f"更新后的文件参数为:{advance_docs}")148 149## 处理gradio.launch参数150server_name = config.get("server_name", None)151server_port = config.get("server_port", None)152if server_name is None:153    if dockerflag:154        server_name = "0.0.0.0"155    else:156        server_name = "127.0.0.1"157if server_port is None:158    if dockerflag:159        server_port = 7860160 161assert server_port is None or type(server_port) == int, "要求port设置为int类型"162 163# 设置默认model164default_model = config.get("default_model", "")165try:166    presets.DEFAULT_MODEL = presets.MODELS.index(default_model)167except ValueError:168    pass169 170share = config.get("share", False)171