Your Name commited on
Commit
8960770
1 Parent(s): 988c5c2

增加通用性

Browse files
Files changed (1) hide show
  1. toolbox.py +44 -41
toolbox.py CHANGED
@@ -518,61 +518,64 @@ def select_api_key(keys, llm_model):
518
  api_key = random.choice(avail_key_list) # 随机负载均衡
519
  return api_key
520
 
521
- def read_single_conf_from_env(arg, default_value):
522
- ENV_PREFIX = "GPT_ACADEMIC_" # 环境变量的前缀
523
- env_arg = ENV_PREFIX + arg # 环境变量的KEY
524
- if arg == "proxies":
525
- # 对于proxies,我们使用多个环境变量来配置
526
- # HTTP_PROXY: 对应http代理
527
- # HTTPS_PROXY: 对应https代理
528
- # ALL_PROXY: 对应http和https代理,优先级较HTTP_PROXY和HTTPS_PROXY更低
529
- http_proxy = os.environ.get(ENV_PREFIX + "HTTP_PROXY") or os.environ.get("ALL_PROXY")
530
- assert http_proxy is not None, f"请设置环境变量{ENV_PREFIX + 'HTTP_PROXY'}"
531
- https_proxy = os.environ.get(ENV_PREFIX + "HTTPS_PROXY") or os.environ.get("ALL_PROXY")
532
- assert https_proxy is not None, f"请设置环境变量{ENV_PREFIX + 'HTTPS_PROXY'}"
533
- r = {
534
- "http": http_proxy,
535
- "https": https_proxy
536
- }
537
- elif arg == "AVAIL_LLM_MODELS":
538
- r = []
539
- # 对于AVAIL_LLM_MODELS的环境变量配置,我们允许用户使用;分隔多个模型
540
- for item in os.environ[env_arg].split(";"):
541
- r.append(item)
542
- elif arg == "AUTHENTICATION":
543
- r = []
544
- # 对于AUTHENTICATION的环境变量配置,我们允许用户使用;分隔多个账号
545
- # 格式为:username1:password1;username2:password2
546
- for item in os.environ[env_arg].split(";"):
547
- r.append(tuple(item.split(":")))
548
- elif arg == "API_URL_REDIRECT":
549
- # 对于API_URL_REDIRECT的环境变量,我们允许用户使用json格式配置多个url重定向
550
- # 格式为一个json字符串,例如:{"https://api.openai.com/v1/chat/completions": "https://ai.open.com/api/conversation"}
551
- import json
552
- r = json.loads(os.environ[env_arg])
553
- elif isinstance(default_value, bool):
554
- r = bool(os.environ[env_arg])
555
  elif isinstance(default_value, int):
556
- r = int(os.environ[env_arg])
557
  elif isinstance(default_value, float):
558
- r = float(os.environ[env_arg])
559
  elif isinstance(default_value, str):
560
- r = os.environ[env_arg]
 
 
 
 
 
 
 
561
  else:
562
- raise RuntimeError(f"[CONFIG] 环境变量{arg}不支持自动转换到{type(default_value)}类型")
 
 
563
  return r
564
 
565
  @lru_cache(maxsize=128)
566
  def read_single_conf_with_lru_cache(arg):
567
  from colorful import print亮红, print亮绿, print亮蓝
568
- default_r = getattr(importlib.import_module('config'), arg)
569
  try:
570
- r = read_single_conf_from_env(arg, default_r) # 优先获取环境变量作为配置
 
 
571
  except:
572
  try:
 
573
  r = getattr(importlib.import_module('config_private'), arg)
574
  except:
575
- r = default_r
 
 
576
  # 在读取API_KEY时,检查一下是不是忘了改config
577
  if arg == 'API_KEY':
578
  print亮蓝(f"[API_KEY] 本项目现已支持OpenAI和API2D的api-key。也支持同时填写多个api-key,如API_KEY=\"openai-key1,openai-key2,api2d-key3\"")
 
518
  api_key = random.choice(avail_key_list) # 随机负载均衡
519
  return api_key
520
 
521
+ def read_env_variable(arg, default_value):
522
+ """
523
+ 环境变量可以是 `GPT_ACADEMIC_CONFIG`(优先),也可以直接是`CONFIG`
524
+ 例如在windows cmd中,既可以写:
525
+ set USE_PROXY=True
526
+ set API_KEY=sk-j7caBpkRoxxxxxxxxxxxxxxxxxxxxxxxxxxxx
527
+ set proxies={"http":"http://127.0.0.1:10085", "https":"http://127.0.0.1:10085",}
528
+ set AVAIL_LLM_MODELS=["gpt-3.5-turbo", "chatglm"]
529
+ set AUTHENTICATION=[("username", "password"), ("username2", "password2")]
530
+ 也可以写:
531
+ set GPT_ACADEMIC_USE_PROXY=True
532
+ set GPT_ACADEMIC_API_KEY=sk-j7caBpkRoxxxxxxxxxxxxxxxxxxxxxxxxxxxx
533
+ set GPT_ACADEMIC_proxies={"http":"http://127.0.0.1:10085", "https":"http://127.0.0.1:10085",}
534
+ set GPT_ACADEMIC_AVAIL_LLM_MODELS=["gpt-3.5-turbo", "chatglm"]
535
+ set GPT_ACADEMIC_AUTHENTICATION=[("username", "password"), ("username2", "password2")]
536
+ """
537
+ from colorful import print亮红, print亮绿
538
+ arg_with_prefix = "GPT_ACADEMIC_" + arg
539
+ if arg_with_prefix in os.environ: env_arg = os.environ[arg_with_prefix]
540
+ elif arg in os.environ: env_arg = os.environ[arg]
541
+ else:
542
+ raise KeyError
543
+ if isinstance(default_value, bool):
544
+ r = bool(env_arg)
 
 
 
 
 
 
 
 
 
 
545
  elif isinstance(default_value, int):
546
+ r = int(env_arg)
547
  elif isinstance(default_value, float):
548
+ r = float(env_arg)
549
  elif isinstance(default_value, str):
550
+ r = env_arg
551
+ elif isinstance(default_value, dict):
552
+ r = eval(env_arg)
553
+ elif isinstance(default_value, list):
554
+ r = eval(env_arg)
555
+ elif default_value is None:
556
+ assert arg == "proxies"
557
+ r = eval(env_arg)
558
  else:
559
+ print亮红(f"[ENV_VAR] 环境变量{arg}不支持通过环境变量设置!{default_value}")
560
+ raise KeyError
561
+ print亮绿(f"[ENV_VAR] 成功读取环境变量{arg}")
562
  return r
563
 
564
  @lru_cache(maxsize=128)
565
  def read_single_conf_with_lru_cache(arg):
566
  from colorful import print亮红, print亮绿, print亮蓝
 
567
  try:
568
+ # 优先级1. 获取环境变量作为配置
569
+ default_ref = getattr(importlib.import_module('config'), arg) # 读取默认值作为数据类型转换的参考
570
+ r = read_env_variable(arg, default_ref)
571
  except:
572
  try:
573
+ # 优先级2. 获取config_private中的配置
574
  r = getattr(importlib.import_module('config_private'), arg)
575
  except:
576
+ # 优先级3. 获取config中的配置
577
+ r = getattr(importlib.import_module('config'), arg)
578
+
579
  # 在读取API_KEY时,检查一下是不是忘了改config
580
  if arg == 'API_KEY':
581
  print亮蓝(f"[API_KEY] 本项目现已支持OpenAI和API2D的api-key。也支持同时填写多个api-key,如API_KEY=\"openai-key1,openai-key2,api2d-key3\"")