Merge branch 'master' of https://github.com/sperjar/gpt_academic into sperjar-master

This commit is contained in:
Your Name 2023-05-02 14:26:46 +08:00
commit 988c5c24da
2 changed files with 96 additions and 2 deletions

45
.github/workflows/docker-image.yml vendored Normal file
View File

@ -0,0 +1,45 @@
# https://docs.github.com/en/actions/publishing-packages/publishing-docker-images#publishing-images-to-github-packages
name: Create and publish a Docker image
on:
push:
branches:
- 'master'
tags:
- 'v*'
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
jobs:
build-and-push-image:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Log in to the Container registry
uses: docker/login-action@v2
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@ -3,6 +3,7 @@ import importlib
import traceback import traceback
import inspect import inspect
import re import re
import os
from latex2mathml.converter import convert as tex2mathml from latex2mathml.converter import convert as tex2mathml
from functools import wraps, lru_cache from functools import wraps, lru_cache
@ -517,13 +518,61 @@ def select_api_key(keys, llm_model):
api_key = random.choice(avail_key_list) # 随机负载均衡 api_key = random.choice(avail_key_list) # 随机负载均衡
return api_key return api_key
def read_single_conf_from_env(arg, default_value):
ENV_PREFIX = "GPT_ACADEMIC_" # 环境变量的前缀
env_arg = ENV_PREFIX + arg # 环境变量的KEY
if arg == "proxies":
# 对于proxies我们使用多个环境变量来配置
# HTTP_PROXY: 对应http代理
# HTTPS_PROXY: 对应https代理
# ALL_PROXY: 对应http和https代理优先级较HTTP_PROXY和HTTPS_PROXY更低
http_proxy = os.environ.get(ENV_PREFIX + "HTTP_PROXY") or os.environ.get("ALL_PROXY")
assert http_proxy is not None, f"请设置环境变量{ENV_PREFIX + 'HTTP_PROXY'}"
https_proxy = os.environ.get(ENV_PREFIX + "HTTPS_PROXY") or os.environ.get("ALL_PROXY")
assert https_proxy is not None, f"请设置环境变量{ENV_PREFIX + 'HTTPS_PROXY'}"
r = {
"http": http_proxy,
"https": https_proxy
}
elif arg == "AVAIL_LLM_MODELS":
r = []
# 对于AVAIL_LLM_MODELS的环境变量配置我们允许用户使用;分隔多个模型
for item in os.environ[env_arg].split(";"):
r.append(item)
elif arg == "AUTHENTICATION":
r = []
# 对于AUTHENTICATION的环境变量配置我们允许用户使用;分隔多个账号
# 格式为username1:password1;username2:password2
for item in os.environ[env_arg].split(";"):
r.append(tuple(item.split(":")))
elif arg == "API_URL_REDIRECT":
# 对于API_URL_REDIRECT的环境变量我们允许用户使用json格式配置多个url重定向
# 格式为一个json字符串例如{"https://api.openai.com/v1/chat/completions": "https://ai.open.com/api/conversation"}
import json
r = json.loads(os.environ[env_arg])
elif isinstance(default_value, bool):
r = bool(os.environ[env_arg])
elif isinstance(default_value, int):
r = int(os.environ[env_arg])
elif isinstance(default_value, float):
r = float(os.environ[env_arg])
elif isinstance(default_value, str):
r = os.environ[env_arg]
else:
raise RuntimeError(f"[CONFIG] 环境变量{arg}不支持自动转换到{type(default_value)}类型")
return r
@lru_cache(maxsize=128) @lru_cache(maxsize=128)
def read_single_conf_with_lru_cache(arg): def read_single_conf_with_lru_cache(arg):
from colorful import print亮红, print亮绿, print亮蓝 from colorful import print亮红, print亮绿, print亮蓝
default_r = getattr(importlib.import_module('config'), arg)
try:
r = read_single_conf_from_env(arg, default_r) # 优先获取环境变量作为配置
except:
try: try:
r = getattr(importlib.import_module('config_private'), arg) r = getattr(importlib.import_module('config_private'), arg)
except: except:
r = getattr(importlib.import_module('config'), arg) r = default_r
# 在读取API_KEY时检查一下是不是忘了改config # 在读取API_KEY时检查一下是不是忘了改config
if arg == 'API_KEY': if arg == 'API_KEY':
print亮蓝(f"[API_KEY] 本项目现已支持OpenAI和API2D的api-key。也支持同时填写多个api-key如API_KEY=\"openai-key1,openai-key2,api2d-key3\"") print亮蓝(f"[API_KEY] 本项目现已支持OpenAI和API2D的api-key。也支持同时填写多个api-key如API_KEY=\"openai-key1,openai-key2,api2d-key3\"")