Spaces:
Running
Running
File size: 6,796 Bytes
d0dd276 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import os
import pathlib
from app.config import settings
from app.utils.logging import vertex_log
# 确保设置中存在所需的配置项,如果不存在则使用默认值
if not hasattr(settings, 'CREDENTIALS_DIR'):
# 设置默认目录为storage_dir下的credentials
settings.CREDENTIALS_DIR = os.path.join(settings.STORAGE_DIR, "credentials")
# 使用settings中的配置,保持原有变量名
CREDENTIALS_DIR = settings.CREDENTIALS_DIR
vertex_log('info', f"Using credentials directory: {CREDENTIALS_DIR}")
# API Key 配置
API_KEY = settings.PASSWORD if hasattr(settings, 'PASSWORD') else ""
if API_KEY:
vertex_log('info', "Using API Key authentication")
else:
vertex_log('info', "No API Key found, falling back to credentials file")
# Google Credentials JSON
GOOGLE_CREDENTIALS_JSON = settings.GOOGLE_CREDENTIALS_JSON if hasattr(settings, 'GOOGLE_CREDENTIALS_JSON') else ""
if GOOGLE_CREDENTIALS_JSON:
vertex_log('info', "Using GOOGLE_CREDENTIALS_JSON environment variable for authentication")
# 项目和位置配置
PROJECT_ID = os.environ.get('VERTEX_PROJECT_ID', '')
LOCATION = os.environ.get('VERTEX_LOCATION', 'us-central1')
# 模型配置URL
default_models_config_url = "https://raw.githubusercontent.com/gzzhongqi/vertex2openai/refs/heads/main/vertexModels.json"
MODELS_CONFIG_URL = os.environ.get('VERTEX_MODELS_CONFIG_URL', default_models_config_url)
vertex_log('info', f"Using models config URL: {MODELS_CONFIG_URL}")
# Vertex Express API Key 配置
VERTEX_EXPRESS_API_KEY_VAL = []
if hasattr(settings, 'VERTEX_EXPRESS_API_KEY') and settings.VERTEX_EXPRESS_API_KEY:
VERTEX_EXPRESS_API_KEY_VAL = [key.strip() for key in settings.VERTEX_EXPRESS_API_KEY.split(',') if key.strip()]
if VERTEX_EXPRESS_API_KEY_VAL:
vertex_log('info', f"Loaded {len(VERTEX_EXPRESS_API_KEY_VAL)} Vertex Express API keys from settings")
# 假流式响应配置
FAKE_STREAMING_ENABLED = settings.FAKE_STREAMING if hasattr(settings, 'FAKE_STREAMING') else False
FAKE_STREAMING_INTERVAL_SECONDS = settings.FAKE_STREAMING_INTERVAL if hasattr(settings, 'FAKE_STREAMING_INTERVAL') else 1.0
FAKE_STREAMING_CHUNK_SIZE = settings.FAKE_STREAMING_CHUNK_SIZE if hasattr(settings, 'FAKE_STREAMING_CHUNK_SIZE') else 10
FAKE_STREAMING_DELAY_PER_CHUNK = settings.FAKE_STREAMING_DELAY_PER_CHUNK if hasattr(settings, 'FAKE_STREAMING_DELAY_PER_CHUNK') else 0.1
vertex_log('info', f"Fake streaming is {'enabled' if FAKE_STREAMING_ENABLED else 'disabled'} with interval {FAKE_STREAMING_INTERVAL_SECONDS} seconds, chunk size {FAKE_STREAMING_CHUNK_SIZE}, delay per chunk {FAKE_STREAMING_DELAY_PER_CHUNK} seconds")
def update_env_var(name, value):
"""Update environment variable in memory."""
os.environ[name] = value
vertex_log('info', f"Updated environment variable: {name}")
def reload_config():
"""重新加载配置,通常在持久化设置加载后调用"""
global GOOGLE_CREDENTIALS_JSON, VERTEX_EXPRESS_API_KEY_VAL, API_KEY
# 重新加载Google Credentials JSON
GOOGLE_CREDENTIALS_JSON = settings.GOOGLE_CREDENTIALS_JSON if hasattr(settings, 'GOOGLE_CREDENTIALS_JSON') else ""
if GOOGLE_CREDENTIALS_JSON:
vertex_log('info', "重新加载了GOOGLE_CREDENTIALS_JSON配置")
# 重新加载Vertex Express API Key
VERTEX_EXPRESS_API_KEY_VAL = []
if hasattr(settings, 'VERTEX_EXPRESS_API_KEY') and settings.VERTEX_EXPRESS_API_KEY:
VERTEX_EXPRESS_API_KEY_VAL = [key.strip() for key in settings.VERTEX_EXPRESS_API_KEY.split(',') if key.strip()]
if VERTEX_EXPRESS_API_KEY_VAL:
vertex_log('info', f"重新加载了{len(VERTEX_EXPRESS_API_KEY_VAL)}个Vertex Express API keys")
# 重新加载API Key
API_KEY = settings.PASSWORD if hasattr(settings, 'PASSWORD') else ""
if API_KEY:
vertex_log('info', "重新加载了API Key配置")
def update_config(name, value):
"""Update config variables in settings and environment variables."""
if name == 'VERTEX_API_KEY':
settings.PASSWORD = value # 更新settings中的值
global API_KEY
API_KEY = value # 更新本地变量
vertex_log('info', "Updated API Key")
elif name == 'GOOGLE_CREDENTIALS_JSON':
settings.GOOGLE_CREDENTIALS_JSON = value
global GOOGLE_CREDENTIALS_JSON
GOOGLE_CREDENTIALS_JSON = value
vertex_log('info', "Updated Google Credentials JSON")
elif name == 'VERTEX_PROJECT_ID':
os.environ['VERTEX_PROJECT_ID'] = value # 这个值只在环境变量中
global PROJECT_ID
PROJECT_ID = value
vertex_log('info', f"Updated Project ID to {value}")
elif name == 'VERTEX_LOCATION':
os.environ['VERTEX_LOCATION'] = value
global LOCATION
LOCATION = value
vertex_log('info', f"Updated Location to {value}")
elif name == 'VERTEX_MODELS_CONFIG_URL':
os.environ['VERTEX_MODELS_CONFIG_URL'] = value
global MODELS_CONFIG_URL
MODELS_CONFIG_URL = value
vertex_log('info', f"Updated Models Config URL to {value}")
elif name == 'VERTEX_EXPRESS_API_KEY':
settings.VERTEX_EXPRESS_API_KEY = value
global VERTEX_EXPRESS_API_KEY_VAL
VERTEX_EXPRESS_API_KEY_VAL = [key.strip() for key in value.split(',') if key.strip()]
vertex_log('info', f"Updated Vertex Express API Key, now have {len(VERTEX_EXPRESS_API_KEY_VAL)} keys")
elif name == 'FAKE_STREAMING':
# 更新FAKE_STREAMING配置
settings.FAKE_STREAMING = value
global FAKE_STREAMING_ENABLED
FAKE_STREAMING_ENABLED = value
vertex_log('info', f"Updated FAKE_STREAMING to {value}")
# 确保环境变量也被更新
os.environ['FAKE_STREAMING'] = str(value).lower()
elif name == 'FAKE_STREAMING_INTERVAL':
# 更新FAKE_STREAMING_INTERVAL配置
settings.FAKE_STREAMING_INTERVAL = value
global FAKE_STREAMING_INTERVAL_SECONDS
FAKE_STREAMING_INTERVAL_SECONDS = value
vertex_log('info', f"Updated FAKE_STREAMING_INTERVAL to {value}")
elif name == 'FAKE_STREAMING_CHUNK_SIZE':
settings.FAKE_STREAMING_CHUNK_SIZE = value
global FAKE_STREAMING_CHUNK_SIZE
FAKE_STREAMING_CHUNK_SIZE = value
vertex_log('info', f"Updated FAKE_STREAMING_CHUNK_SIZE to {value}")
elif name == 'FAKE_STREAMING_DELAY_PER_CHUNK':
settings.FAKE_STREAMING_DELAY_PER_CHUNK = value
global FAKE_STREAMING_DELAY_PER_CHUNK
FAKE_STREAMING_DELAY_PER_CHUNK = value
vertex_log('info', f"Updated FAKE_STREAMING_DELAY_PER_CHUNK to {value}")
else:
vertex_log('warning', f"Unknown config variable: {name}")
return
# 更新环境变量
update_env_var(name, value)
# Validation logic moved to app/auth.py |