fufeigemini / app /vertex /config.py
Leeflour's picture
Upload 197 files
d0dd276 verified
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