Spaces:
Running
Running
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 |