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