Update app.py
Browse files
app.py
CHANGED
|
@@ -103,18 +103,6 @@ def get_usd_to_cny_rate():
|
|
| 103 |
logging.error(f"获取美元兑人民币汇率失败,错误信息:{e}")
|
| 104 |
return None
|
| 105 |
|
| 106 |
-
FREE_MODEL_TEST_KEY = (
|
| 107 |
-
"sk-bmjbjzleaqfgtqfzmcnsbagxrlohriadnxqrzfocbizaxukw"
|
| 108 |
-
)
|
| 109 |
-
|
| 110 |
-
FREE_IMAGE_LIST = [
|
| 111 |
-
"stabilityai/stable-diffusion-3-5-large",
|
| 112 |
-
"black-forest-labs/FLUX.1-schnell",
|
| 113 |
-
"stabilityai/stable-diffusion-3-medium",
|
| 114 |
-
"stabilityai/stable-diffusion-xl-base-1.0",
|
| 115 |
-
"stabilityai/stable-diffusion-2-1"
|
| 116 |
-
]
|
| 117 |
-
|
| 118 |
def test_model_availability(api_key, model_name):
|
| 119 |
"""
|
| 120 |
测试指定的模型是否可用。
|
|
@@ -151,15 +139,9 @@ def refresh_models():
|
|
| 151 |
刷新模型列表和免费模型列表。
|
| 152 |
"""
|
| 153 |
global text_models, free_text_models
|
| 154 |
-
global embedding_models, free_embedding_models
|
| 155 |
-
global image_models, free_image_models
|
| 156 |
|
| 157 |
text_models = get_all_models(FREE_MODEL_TEST_KEY, "chat")
|
| 158 |
-
embedding_models = get_all_models(FREE_MODEL_TEST_KEY, "embedding")
|
| 159 |
-
image_models = get_all_models(FREE_MODEL_TEST_KEY, "text-to-image")
|
| 160 |
free_text_models = []
|
| 161 |
-
free_embedding_models = []
|
| 162 |
-
free_image_models = []
|
| 163 |
|
| 164 |
ban_models_str = os.environ.get("BAN_MODELS")
|
| 165 |
ban_models = []
|
|
@@ -178,8 +160,6 @@ def refresh_models():
|
|
| 178 |
ban_models = []
|
| 179 |
|
| 180 |
text_models = [model for model in text_models if model not in ban_models]
|
| 181 |
-
embedding_models = [model for model in embedding_models if model not in ban_models]
|
| 182 |
-
image_models = [model for model in image_models if model not in ban_models]
|
| 183 |
|
| 184 |
with concurrent.futures.ThreadPoolExecutor(
|
| 185 |
max_workers=1000
|
|
@@ -200,84 +180,8 @@ def refresh_models():
|
|
| 200 |
except Exception as exc:
|
| 201 |
logging.error(f"模型 {model} 测试生成异常: {exc}")
|
| 202 |
|
| 203 |
-
with concurrent.futures.ThreadPoolExecutor(
|
| 204 |
-
max_workers=1000
|
| 205 |
-
) as executor:
|
| 206 |
-
future_to_model = {
|
| 207 |
-
executor.submit(
|
| 208 |
-
test_embedding_model_availability,
|
| 209 |
-
FREE_MODEL_TEST_KEY, model
|
| 210 |
-
): model for model in embedding_models
|
| 211 |
-
}
|
| 212 |
-
for future in concurrent.futures.as_completed(future_to_model):
|
| 213 |
-
model = future_to_model[future]
|
| 214 |
-
try:
|
| 215 |
-
is_free = future.result()
|
| 216 |
-
if is_free:
|
| 217 |
-
free_embedding_models.append(model)
|
| 218 |
-
except Exception as exc:
|
| 219 |
-
logging.error(f"模型 {model} 测试生成异常: {exc}")
|
| 220 |
-
|
| 221 |
-
with concurrent.futures.ThreadPoolExecutor(
|
| 222 |
-
max_workers=1000
|
| 223 |
-
) as executor:
|
| 224 |
-
future_to_model = {
|
| 225 |
-
executor.submit(
|
| 226 |
-
test_image_model_availability,
|
| 227 |
-
FREE_MODEL_TEST_KEY, model
|
| 228 |
-
): model for model in image_models
|
| 229 |
-
}
|
| 230 |
-
for future in concurrent.futures.as_completed(future_to_model):
|
| 231 |
-
model = future_to_model[future]
|
| 232 |
-
try:
|
| 233 |
-
is_free = future.result()
|
| 234 |
-
if is_free:
|
| 235 |
-
free_image_models.append(model)
|
| 236 |
-
except Exception as exc:
|
| 237 |
-
logging.error(f"模型 {model} 测试生成异常: {exc}")
|
| 238 |
-
|
| 239 |
logging.info(f"所有文本模型列表:{text_models}")
|
| 240 |
logging.info(f"免费文本模型列表:{free_text_models}")
|
| 241 |
-
logging.info(f"所有向量模型列表:{embedding_models}")
|
| 242 |
-
logging.info(f"免费向量模型列表:{free_embedding_models}")
|
| 243 |
-
logging.info(f"所有生图模型列表:{image_models}")
|
| 244 |
-
logging.info(f"免费生图模型列表:{free_image_models}")
|
| 245 |
-
|
| 246 |
-
def test_embedding_model_availability(api_key, model_name):
|
| 247 |
-
"""
|
| 248 |
-
测试指定的向量模型是否可用。
|
| 249 |
-
"""
|
| 250 |
-
headers = {
|
| 251 |
-
"Authorization": f"Bearer {api_key}",
|
| 252 |
-
"Content-Type": "application/json"
|
| 253 |
-
}
|
| 254 |
-
try:
|
| 255 |
-
response = requests.post(
|
| 256 |
-
EMBEDDINGS_ENDPOINT,
|
| 257 |
-
headers=headers,
|
| 258 |
-
json={
|
| 259 |
-
"model": model_name,
|
| 260 |
-
"input": ["hi"],
|
| 261 |
-
},
|
| 262 |
-
timeout=10
|
| 263 |
-
)
|
| 264 |
-
if response.status_code == 429 or response.status_code == 200:
|
| 265 |
-
return True
|
| 266 |
-
else:
|
| 267 |
-
return False
|
| 268 |
-
except requests.exceptions.RequestException as e:
|
| 269 |
-
logging.error(
|
| 270 |
-
f"测试向量模型 {model_name} 可用性失败,"
|
| 271 |
-
f"API Key:{api_key},错误信息:{e}"
|
| 272 |
-
)
|
| 273 |
-
return False
|
| 274 |
-
|
| 275 |
-
def test_image_model_availability(api_key, model_name):
|
| 276 |
-
"""
|
| 277 |
-
测试指定的图像模型是否在 FREE_IMAGE_LIST 中。
|
| 278 |
-
如果在列表中,返回 True,否则返回 False。
|
| 279 |
-
"""
|
| 280 |
-
return model_name in FREE_IMAGE_LIST
|
| 281 |
|
| 282 |
def load_keys():
|
| 283 |
"""
|
|
@@ -310,8 +214,6 @@ def load_keys():
|
|
| 310 |
}
|
| 311 |
|
| 312 |
invalid_keys = []
|
| 313 |
-
free_keys = []
|
| 314 |
-
unverified_keys = []
|
| 315 |
valid_keys = []
|
| 316 |
|
| 317 |
for future in concurrent.futures.as_completed(
|
|
@@ -322,25 +224,16 @@ def load_keys():
|
|
| 322 |
key_type = future.result()
|
| 323 |
if key_type == "invalid":
|
| 324 |
invalid_keys.append(key)
|
| 325 |
-
elif key_type == "free":
|
| 326 |
-
free_keys.append(key)
|
| 327 |
-
elif key_type == "unverified":
|
| 328 |
-
unverified_keys.append(key)
|
| 329 |
elif key_type == "valid":
|
| 330 |
valid_keys.append(key)
|
| 331 |
except Exception as exc:
|
| 332 |
logging.error(f"处理 KEY {key} 生成异常: {exc}")
|
| 333 |
|
| 334 |
logging.info(f"无效 KEY:{invalid_keys}")
|
| 335 |
-
logging.info(f"免费 KEY:{free_keys}")
|
| 336 |
-
logging.info(f"未实名 KEY:{unverified_keys}")
|
| 337 |
logging.info(f"有效 KEY:{valid_keys}")
|
| 338 |
|
| 339 |
-
global invalid_keys_global,
|
| 340 |
-
global unverified_keys_global, valid_keys_global
|
| 341 |
invalid_keys_global = invalid_keys
|
| 342 |
-
free_keys_global = free_keys
|
| 343 |
-
unverified_keys_global = unverified_keys
|
| 344 |
valid_keys_global = valid_keys
|
| 345 |
|
| 346 |
else:
|
|
@@ -356,12 +249,9 @@ def process_key(key, test_model):
|
|
| 356 |
else:
|
| 357 |
total_balance = credit_summary.get("total_balance", 0)
|
| 358 |
if total_balance <= 0:
|
| 359 |
-
return "
|
| 360 |
else:
|
| 361 |
-
|
| 362 |
-
return "valid"
|
| 363 |
-
else:
|
| 364 |
-
return "unverified"
|
| 365 |
|
| 366 |
def get_all_models(api_key, sub_type):
|
| 367 |
"""
|
|
|
|
| 103 |
logging.error(f"获取美元兑人民币汇率失败,错误信息:{e}")
|
| 104 |
return None
|
| 105 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
def test_model_availability(api_key, model_name):
|
| 107 |
"""
|
| 108 |
测试指定的模型是否可用。
|
|
|
|
| 139 |
刷新模型列表和免费模型列表。
|
| 140 |
"""
|
| 141 |
global text_models, free_text_models
|
|
|
|
|
|
|
| 142 |
|
| 143 |
text_models = get_all_models(FREE_MODEL_TEST_KEY, "chat")
|
|
|
|
|
|
|
| 144 |
free_text_models = []
|
|
|
|
|
|
|
| 145 |
|
| 146 |
ban_models_str = os.environ.get("BAN_MODELS")
|
| 147 |
ban_models = []
|
|
|
|
| 160 |
ban_models = []
|
| 161 |
|
| 162 |
text_models = [model for model in text_models if model not in ban_models]
|
|
|
|
|
|
|
| 163 |
|
| 164 |
with concurrent.futures.ThreadPoolExecutor(
|
| 165 |
max_workers=1000
|
|
|
|
| 180 |
except Exception as exc:
|
| 181 |
logging.error(f"模型 {model} 测试生成异常: {exc}")
|
| 182 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 183 |
logging.info(f"所有文本模型列表:{text_models}")
|
| 184 |
logging.info(f"免费文本模型列表:{free_text_models}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 185 |
|
| 186 |
def load_keys():
|
| 187 |
"""
|
|
|
|
| 214 |
}
|
| 215 |
|
| 216 |
invalid_keys = []
|
|
|
|
|
|
|
| 217 |
valid_keys = []
|
| 218 |
|
| 219 |
for future in concurrent.futures.as_completed(
|
|
|
|
| 224 |
key_type = future.result()
|
| 225 |
if key_type == "invalid":
|
| 226 |
invalid_keys.append(key)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 227 |
elif key_type == "valid":
|
| 228 |
valid_keys.append(key)
|
| 229 |
except Exception as exc:
|
| 230 |
logging.error(f"处理 KEY {key} 生成异常: {exc}")
|
| 231 |
|
| 232 |
logging.info(f"无效 KEY:{invalid_keys}")
|
|
|
|
|
|
|
| 233 |
logging.info(f"有效 KEY:{valid_keys}")
|
| 234 |
|
| 235 |
+
global invalid_keys_global, valid_keys_global
|
|
|
|
| 236 |
invalid_keys_global = invalid_keys
|
|
|
|
|
|
|
| 237 |
valid_keys_global = valid_keys
|
| 238 |
|
| 239 |
else:
|
|
|
|
| 249 |
else:
|
| 250 |
total_balance = credit_summary.get("total_balance", 0)
|
| 251 |
if total_balance <= 0:
|
| 252 |
+
return "invalid"
|
| 253 |
else:
|
| 254 |
+
return "valid"
|
|
|
|
|
|
|
|
|
|
| 255 |
|
| 256 |
def get_all_models(api_key, sub_type):
|
| 257 |
"""
|