27
27
import httpx
28
28
29
29
try :
30
- from pydantic .v1 import BaseSettings
30
+ from pydantic .v1 import BaseSettings , validator
31
31
except ImportError :
32
32
from pydantic import BaseSettings
33
33
import shortuuid
@@ -106,6 +106,18 @@ class AppSettings(BaseSettings):
106
106
controller_address : str = "http://localhost:21001"
107
107
api_keys : Optional [List [str ]] = None
108
108
109
+ @validator ("api_keys" , pre = True )
110
+ def split_api_keys (cls , v ):
111
+ if isinstance (v , str ):
112
+ return v .split ("," ) if v else None
113
+ return v
114
+
115
+ class Config :
116
+ # 关闭默认 JSON 解析行为
117
+ @classmethod
118
+ def parse_env_var (cls , field_name : str , raw_val : str ):
119
+ return raw_val # 返回原始字符串,不解析成 JSON
120
+
109
121
110
122
app_settings = AppSettings ()
111
123
from contextlib import asynccontextmanager
@@ -145,6 +157,7 @@ async def timing_tasks():
145
157
146
158
@asynccontextmanager
147
159
async def lifespan (app : fastapi .FastAPI ):
160
+ logger .info (f"app_settings: { app_settings } " )
148
161
asyncio .create_task (timing_tasks ())
149
162
yield
150
163
@@ -1123,7 +1136,8 @@ def create_openai_api_server():
1123
1136
)
1124
1137
parser .add_argument (
1125
1138
"--api-keys" ,
1126
- type = lambda s : s .split ("," ),
1139
+ type = str ,
1140
+ default = None ,
1127
1141
help = "Optional list of comma separated API keys" ,
1128
1142
)
1129
1143
parser .add_argument (
@@ -1142,8 +1156,9 @@ def create_openai_api_server():
1142
1156
allow_methods = args .allowed_methods ,
1143
1157
allow_headers = args .allowed_headers ,
1144
1158
)
1145
- app_settings .controller_address = args .controller_address
1146
- app_settings .api_keys = args .api_keys
1159
+ os .environ ["controller_address" ] = args .controller_address
1160
+ if args .api_keys :
1161
+ os .environ ["api_keys" ] = args .api_keys
1147
1162
1148
1163
logger .info (f"args: { args } " )
1149
1164
return args
0 commit comments