bizyengine 1.2.6__py3-none-any.whl → 1.2.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. bizyengine/bizy_server/api_client.py +125 -57
  2. bizyengine/bizy_server/errno.py +9 -0
  3. bizyengine/bizy_server/server.py +353 -239
  4. bizyengine/bizyair_extras/__init__.py +1 -0
  5. bizyengine/bizyair_extras/nodes_flux.py +1 -1
  6. bizyengine/bizyair_extras/nodes_image_utils.py +2 -2
  7. bizyengine/bizyair_extras/nodes_nunchaku.py +1 -5
  8. bizyengine/bizyair_extras/nodes_segment_anything.py +1 -0
  9. bizyengine/bizyair_extras/nodes_trellis.py +1 -1
  10. bizyengine/bizyair_extras/nodes_ultimatesdupscale.py +1 -1
  11. bizyengine/bizyair_extras/nodes_wan_i2v.py +222 -0
  12. bizyengine/core/__init__.py +2 -0
  13. bizyengine/core/commands/processors/prompt_processor.py +21 -18
  14. bizyengine/core/commands/servers/prompt_server.py +28 -13
  15. bizyengine/core/common/client.py +14 -2
  16. bizyengine/core/common/env_var.py +2 -0
  17. bizyengine/core/nodes_base.py +85 -7
  18. bizyengine/core/nodes_io.py +2 -2
  19. bizyengine/misc/llm.py +48 -85
  20. bizyengine/misc/mzkolors.py +27 -19
  21. bizyengine/misc/nodes.py +41 -21
  22. bizyengine/misc/nodes_controlnet_aux.py +18 -18
  23. bizyengine/misc/nodes_controlnet_union_sdxl.py +5 -12
  24. bizyengine/misc/segment_anything.py +29 -25
  25. bizyengine/misc/supernode.py +36 -30
  26. bizyengine/misc/utils.py +33 -21
  27. bizyengine/version.txt +1 -1
  28. bizyengine-1.2.8.dist-info/METADATA +211 -0
  29. {bizyengine-1.2.6.dist-info → bizyengine-1.2.8.dist-info}/RECORD +31 -30
  30. {bizyengine-1.2.6.dist-info → bizyengine-1.2.8.dist-info}/WHEEL +1 -1
  31. bizyengine-1.2.6.dist-info/METADATA +0 -19
  32. {bizyengine-1.2.6.dist-info → bizyengine-1.2.8.dist-info}/top_level.txt +0 -0
@@ -8,6 +8,7 @@ import bizyengine.core as core
8
8
  from bizyengine.core.common import get_api_key
9
9
  from bizyengine.core.common.env_var import (
10
10
  BIZYAIR_PRODUCTION_TEST,
11
+ BIZYAIR_SERVER_MODE,
11
12
  BIZYAIR_X_SERVER,
12
13
  BIZYAIR_Y_SERVER,
13
14
  )
@@ -35,9 +36,12 @@ class APIClient:
35
36
  timeout = aiohttp.ClientTimeout(total=30)
36
37
  return aiohttp.ClientSession(timeout=timeout)
37
38
 
38
- def auth_header(self):
39
+ def auth_header(self, api_key: str = None):
39
40
  try:
40
- api_key = get_api_key()
41
+ if not BIZYAIR_SERVER_MODE:
42
+ api_key = get_api_key()
43
+ if not api_key:
44
+ return None, errnos.INVALID_API_KEY
41
45
  auth = f"Bearer {api_key}"
42
46
  headers = {
43
47
  "accept": "application/json",
@@ -157,14 +161,14 @@ class APIClient:
157
161
  return None, errnos.GET_USER_INFO
158
162
 
159
163
  async def sign(
160
- self, signature: str, type: str
164
+ self, signature: str, type: str, request_api_key: str = None
161
165
  ) -> tuple[dict | None, ErrorNo | None]:
162
166
  server_url = f"{BIZYAIR_X_SERVER}/files/{signature}"
163
167
  params = None
164
168
  if is_string_valid(type):
165
169
  params = {"type": type}
166
170
 
167
- headers, err = self.auth_header()
171
+ headers, err = self.auth_header(api_key=request_api_key)
168
172
  if err is not None:
169
173
  return None, err
170
174
 
@@ -180,7 +184,12 @@ class APIClient:
180
184
  return None, errnos.SIGN_FILE
181
185
 
182
186
  async def commit_file(
183
- self, signature: str, object_key: str, md5_hash: str, type: str
187
+ self,
188
+ signature: str,
189
+ object_key: str,
190
+ md5_hash: str,
191
+ type: str,
192
+ request_api_key: str = None,
184
193
  ) -> tuple[dict | None, ErrorNo | None]:
185
194
  server_url = f"{BIZYAIR_X_SERVER}/files"
186
195
 
@@ -190,7 +199,7 @@ class APIClient:
190
199
  "md5_hash": md5_hash,
191
200
  "type": type,
192
201
  }
193
- headers, err = self.auth_header()
202
+ headers, err = self.auth_header(api_key=request_api_key)
194
203
  if err is not None:
195
204
  return None, err
196
205
 
@@ -222,11 +231,11 @@ class APIClient:
222
231
  return None, errnos.COMMIT_BIZY_MODEL
223
232
 
224
233
  async def delete_bizy_model(
225
- self, model_id: int
234
+ self, model_id: int, request_api_key: str = None
226
235
  ) -> tuple[dict | None, ErrorNo | None]:
227
236
  server_url = f"{BIZYAIR_X_SERVER}/bizy_models/{model_id}"
228
237
 
229
- headers, err = self.auth_header()
238
+ headers, err = self.auth_header(api_key=request_api_key)
230
239
  if err is not None:
231
240
  return None, err
232
241
 
@@ -248,6 +257,7 @@ class APIClient:
248
257
  model_types: list[str] = None,
249
258
  base_models: list[str] = None,
250
259
  sort: str = None,
260
+ request_api_key: str = None,
251
261
  ) -> tuple[dict | None, ErrorNo | None]:
252
262
  server_url = f"{BIZYAIR_X_SERVER}/bizy_models/community"
253
263
  params = {"current": current, "page_size": page_size}
@@ -260,7 +270,7 @@ class APIClient:
260
270
  if sort:
261
271
  params["sort"] = sort
262
272
 
263
- headers, err = self.auth_header()
273
+ headers, err = self.auth_header(api_key=request_api_key)
264
274
  if err is not None:
265
275
  return None, err
266
276
 
@@ -282,6 +292,7 @@ class APIClient:
282
292
  model_types: list[str] = None,
283
293
  base_models: list[str] = None,
284
294
  sort: str = None,
295
+ request_api_key: str = None,
285
296
  ) -> tuple[dict | None, ErrorNo | None]:
286
297
  server_url = f"{BIZYAIR_X_SERVER}/bizy_models/official"
287
298
  params = {"current": current, "page_size": page_size}
@@ -294,7 +305,7 @@ class APIClient:
294
305
  if sort:
295
306
  params["sort"] = sort
296
307
 
297
- headers, err = self.auth_header()
308
+ headers, err = self.auth_header(api_key=request_api_key)
298
309
  if err is not None:
299
310
  return None, err
300
311
 
@@ -317,6 +328,7 @@ class APIClient:
317
328
  model_types: list[str] = None,
318
329
  base_models: list[str] = None,
319
330
  sort: str = None,
331
+ request_api_key: str = None,
320
332
  ) -> tuple[dict | None, ErrorNo | None]:
321
333
  server_url = f"{BIZYAIR_X_SERVER}/bizy_models/{mode}"
322
334
  params = {"current": current, "page_size": page_size}
@@ -329,7 +341,7 @@ class APIClient:
329
341
  if sort:
330
342
  params["sort"] = sort
331
343
 
332
- headers, err = self.auth_header()
344
+ headers, err = self.auth_header(api_key=request_api_key)
333
345
  if err is not None:
334
346
  return None, err
335
347
 
@@ -344,11 +356,11 @@ class APIClient:
344
356
  return None, errnos.QUERY_MODELS
345
357
 
346
358
  async def get_model_detail(
347
- self, model_id: int, source: str
359
+ self, model_id: int, source: str, request_api_key: str = None
348
360
  ) -> tuple[dict | None, ErrorNo | None]:
349
361
  server_url = f"{BIZYAIR_X_SERVER}/bizy_models/{model_id}/detail?source={source}"
350
362
 
351
- headers, err = self.auth_header()
363
+ headers, err = self.auth_header(api_key=request_api_key)
352
364
  if err is not None:
353
365
  return None, err
354
366
 
@@ -363,11 +375,11 @@ class APIClient:
363
375
  return None, errnos.GET_MODEL_DETAIL
364
376
 
365
377
  async def get_model_version_detail(
366
- self, version_id: int
378
+ self, version_id: int, request_api_key: str = None
367
379
  ) -> tuple[dict | None, ErrorNo | None]:
368
380
  server_url = f"{BIZYAIR_X_SERVER}/bizy_models/versions/{version_id}"
369
381
 
370
- headers, err = self.auth_header()
382
+ headers, err = self.auth_header(api_key=request_api_key)
371
383
  if err is not None:
372
384
  return None, err
373
385
 
@@ -383,10 +395,12 @@ class APIClient:
383
395
  )
384
396
  return None, errnos.GET_MODEL_VERSION_DETAIL
385
397
 
386
- async def fork_model_version(self, version_id: int) -> tuple[None, ErrorNo | None]:
398
+ async def fork_model_version(
399
+ self, version_id: int, request_api_key: str = None
400
+ ) -> tuple[None, ErrorNo | None]:
387
401
  server_url = f"{BIZYAIR_X_SERVER}/bizy_models/versions/{version_id}/fork"
388
402
 
389
- headers, err = self.auth_header()
403
+ headers, err = self.auth_header(api_key=request_api_key)
390
404
  if err is not None:
391
405
  return None, err
392
406
 
@@ -401,11 +415,11 @@ class APIClient:
401
415
  return None, errnos.FORK_MODEL_VERSION
402
416
 
403
417
  async def unfork_model_version(
404
- self, version_id: int
418
+ self, version_id: int, request_api_key: str = None
405
419
  ) -> tuple[None, ErrorNo | None]:
406
420
  server_url = f"{BIZYAIR_X_SERVER}/bizy_models/versions/{version_id}/fork"
407
421
 
408
- headers, err = self.auth_header()
422
+ headers, err = self.auth_header(api_key=request_api_key)
409
423
  if err is not None:
410
424
  return None, err
411
425
 
@@ -420,11 +434,16 @@ class APIClient:
420
434
  return None, errnos.UNFORK_MODEL_VERSION
421
435
 
422
436
  async def update_model(
423
- self, model_id: int, name: str, type_: str, versions: list[dict]
437
+ self,
438
+ model_id: int,
439
+ name: str,
440
+ type_: str,
441
+ versions: list[dict],
442
+ request_api_key: str = None,
424
443
  ) -> tuple[dict | None, ErrorNo | None]:
425
444
  server_url = f"{BIZYAIR_X_SERVER}/bizy_models/{model_id}"
426
445
 
427
- headers, err = self.auth_header()
446
+ headers, err = self.auth_header(api_key=request_api_key)
428
447
  if err is not None:
429
448
  return None, err
430
449
 
@@ -441,11 +460,11 @@ class APIClient:
441
460
  return None, errnos.UPDATE_MODEL
442
461
 
443
462
  async def get_upload_token(
444
- self, filename: str
463
+ self, filename: str, request_api_key: str = None
445
464
  ) -> tuple[dict | None, ErrorNo | None]:
446
465
  server_url = f"{BIZYAIR_X_SERVER}/upload/token?file_name={filename}"
447
466
 
448
- headers, err = self.auth_header()
467
+ headers, err = self.auth_header(api_key=request_api_key)
449
468
  if err is not None:
450
469
  return None, err
451
470
 
@@ -460,14 +479,14 @@ class APIClient:
460
479
  return None, errnos.GET_UPLOAD_TOKEN
461
480
 
462
481
  async def toggle_user_like(
463
- self, like_type: str, object_id: str
482
+ self, like_type: str, object_id: str, request_api_key: str = None
464
483
  ) -> tuple[dict | None, ErrorNo | None]:
465
484
  if like_type == "model_version":
466
485
  server_url = f"{BIZYAIR_X_SERVER}/bizy_models/versions/{object_id}/like"
467
486
  else:
468
487
  return None, errnos.UNSUPPORT_LIKE_TYPE
469
488
 
470
- headers, err = self.auth_header()
489
+ headers, err = self.auth_header(api_key=request_api_key)
471
490
  if err is not None:
472
491
  return None, err
473
492
 
@@ -482,11 +501,11 @@ class APIClient:
482
501
  return None, errnos.TOGGLE_USER_LIKE
483
502
 
484
503
  async def get_download_url(
485
- self, sign: str, model_version_id: int
504
+ self, sign: str, model_version_id: int, request_api_key: str = None
486
505
  ) -> tuple[str | None, ErrorNo | None]:
487
506
  server_url = f"{BIZYAIR_X_SERVER}/files/temp-download/{sign}?version_id={model_version_id}"
488
507
 
489
- headers, err = self.auth_header()
508
+ headers, err = self.auth_header(api_key=request_api_key)
490
509
  if err is not None:
491
510
  return None, err
492
511
 
@@ -531,10 +550,12 @@ class APIClient:
531
550
  )
532
551
  return [], errnos.LIST_SHARE_MODEL_FILE_ERR
533
552
 
534
- async def commit_dataset(self, payload) -> tuple[dict | None, ErrorNo | None]:
553
+ async def commit_dataset(
554
+ self, payload, request_api_key: str = None
555
+ ) -> tuple[dict | None, ErrorNo | None]:
535
556
  server_url = f"{BIZYAIR_X_SERVER}/datasets"
536
557
 
537
- headers, err = self.auth_header()
558
+ headers, err = self.auth_header(api_key=request_api_key)
538
559
  if err is not None:
539
560
  return None, err
540
561
 
@@ -549,11 +570,15 @@ class APIClient:
549
570
  return None, errnos.COMMIT_DATASET
550
571
 
551
572
  async def update_dataset(
552
- self, dataset_id: int, name: str, versions: list[dict]
573
+ self,
574
+ dataset_id: int,
575
+ name: str,
576
+ versions: list[dict],
577
+ request_api_key: str = None,
553
578
  ) -> tuple[dict | None, ErrorNo | None]:
554
579
  server_url = f"{BIZYAIR_X_SERVER}/datasets/{dataset_id}"
555
580
 
556
- headers, err = self.auth_header()
581
+ headers, err = self.auth_header(api_key=request_api_key)
557
582
  if err is not None:
558
583
  return None, err
559
584
 
@@ -570,11 +595,11 @@ class APIClient:
570
595
  return None, errnos.UPDATE_DATASET
571
596
 
572
597
  async def get_dataset_version_detail(
573
- self, version_id: int
598
+ self, version_id: int, request_api_key: str = None
574
599
  ) -> tuple[dict | None, ErrorNo | None]:
575
600
  server_url = f"{BIZYAIR_X_SERVER}/datasets/versions/{version_id}"
576
601
 
577
- headers, err = self.auth_header()
602
+ headers, err = self.auth_header(api_key=request_api_key)
578
603
  if err is not None:
579
604
  return None, err
580
605
 
@@ -591,11 +616,11 @@ class APIClient:
591
616
  return None, errnos.GET_MODEL_VERSION_DETAIL
592
617
 
593
618
  async def delete_dataset(
594
- self, dataset_id: int
619
+ self, dataset_id: int, request_api_key: str = None
595
620
  ) -> tuple[dict | None, ErrorNo | None]:
596
621
  server_url = f"{BIZYAIR_X_SERVER}/datasets/{dataset_id}"
597
622
 
598
- headers, err = self.auth_header()
623
+ headers, err = self.auth_header(api_key=request_api_key)
599
624
  if err is not None:
600
625
  return None, err
601
626
 
@@ -615,6 +640,7 @@ class APIClient:
615
640
  page_size: int,
616
641
  keyword: str = None,
617
642
  annotated: str = None,
643
+ request_api_key: str = None,
618
644
  ) -> tuple[dict | None, ErrorNo | None]:
619
645
  server_url = f"{BIZYAIR_X_SERVER}/datasets"
620
646
  params = {"current": current, "page_size": page_size}
@@ -623,7 +649,7 @@ class APIClient:
623
649
  if annotated:
624
650
  params["annotated"] = annotated
625
651
 
626
- headers, err = self.auth_header()
652
+ headers, err = self.auth_header(api_key=request_api_key)
627
653
  if err is not None:
628
654
  return None, err
629
655
 
@@ -638,11 +664,11 @@ class APIClient:
638
664
  return None, errnos.QUERY_DATASETS
639
665
 
640
666
  async def get_dataset_detail(
641
- self, dataset_id: int
667
+ self, dataset_id: int, request_api_key: str = None
642
668
  ) -> tuple[dict | None, ErrorNo | None]:
643
669
  server_url = f"{BIZYAIR_X_SERVER}/datasets/{dataset_id}/detail"
644
670
 
645
- headers, err = self.auth_header()
671
+ headers, err = self.auth_header(api_key=request_api_key)
646
672
  if err is not None:
647
673
  return None, err
648
674
 
@@ -656,10 +682,12 @@ class APIClient:
656
682
  print(f"\033[31m[BizyAir]\033[0m Fail to get dataset detail: {str(e)}")
657
683
  return None, errnos.GET_DATASET_DETAIL
658
684
 
659
- async def create_share(self, payload) -> tuple[dict | None, ErrorNo | None]:
685
+ async def create_share(
686
+ self, payload, request_api_key: str = None
687
+ ) -> tuple[dict | None, ErrorNo | None]:
660
688
  server_url = f"{BIZYAIR_X_SERVER}/share"
661
689
 
662
- headers, err = self.auth_header()
690
+ headers, err = self.auth_header(api_key=request_api_key)
663
691
  if err is not None:
664
692
  return None, err
665
693
 
@@ -689,9 +717,11 @@ class APIClient:
689
717
  print(f"\033[31m[BizyAir]\033[0m Fail to get share detail: {str(e)}")
690
718
  return None, errnos.GET_SHARE_DETAIL
691
719
 
692
- async def get_data_dict(self) -> tuple[dict | None, ErrorNo | None]:
720
+ async def get_data_dict(
721
+ self, request_api_key: str = None
722
+ ) -> tuple[dict | None, ErrorNo | None]:
693
723
  server_url = f"{BIZYAIR_X_SERVER}/dict"
694
- headers, err = self.auth_header()
724
+ headers, err = self.auth_header(api_key=request_api_key)
695
725
  if err is not None:
696
726
  return None, err
697
727
 
@@ -998,14 +1028,14 @@ class APIClient:
998
1028
  return None, errnos.LIST_PRODUCTS
999
1029
 
1000
1030
  async def get_year_cost(
1001
- self, year: str = None, api_key: str = None
1031
+ self, year: str = None, query_api_key: str = None
1002
1032
  ) -> tuple[dict | None, ErrorNo | None]:
1003
1033
  server_url = f"{BIZYAIR_Y_SERVER}/invoices/year_cost"
1004
1034
  params = {}
1005
1035
  if year:
1006
1036
  params["year"] = year
1007
- if api_key:
1008
- params["api_key"] = api_key
1037
+ if query_api_key:
1038
+ params["api_key"] = query_api_key
1009
1039
 
1010
1040
  headers, err = self.auth_header()
1011
1041
  if err is not None:
@@ -1022,14 +1052,14 @@ class APIClient:
1022
1052
  return None, errnos.GET_YEAR_COST
1023
1053
 
1024
1054
  async def get_month_cost(
1025
- self, month: str = None, api_key: str = None
1055
+ self, month: str = None, query_api_key: str = None
1026
1056
  ) -> tuple[dict | None, ErrorNo | None]:
1027
1057
  server_url = f"{BIZYAIR_Y_SERVER}/invoices/month_cost"
1028
1058
  params = {}
1029
1059
  if month:
1030
1060
  params["month"] = month
1031
- if api_key:
1032
- params["api_key"] = api_key
1061
+ if query_api_key:
1062
+ params["api_key"] = query_api_key
1033
1063
 
1034
1064
  headers, err = self.auth_header()
1035
1065
  if err is not None:
@@ -1046,14 +1076,14 @@ class APIClient:
1046
1076
  return None, errnos.GET_MONTH_COST
1047
1077
 
1048
1078
  async def get_day_cost(
1049
- self, day: str = None, api_key: str = None
1079
+ self, day: str = None, query_api_key: str = None
1050
1080
  ) -> tuple[dict | None, ErrorNo | None]:
1051
1081
  server_url = f"{BIZYAIR_Y_SERVER}/invoices/day_cost"
1052
1082
  params = {}
1053
1083
  if day:
1054
1084
  params["date"] = day
1055
- if api_key:
1056
- params["api_key"] = api_key
1085
+ if query_api_key:
1086
+ params["api_key"] = query_api_key
1057
1087
 
1058
1088
  headers, err = self.auth_header()
1059
1089
  if err is not None:
@@ -1070,12 +1100,12 @@ class APIClient:
1070
1100
  return None, errnos.GET_DAY_COST
1071
1101
 
1072
1102
  async def get_recent_cost(
1073
- self, api_key: str = None
1103
+ self, query_api_key: str = None
1074
1104
  ) -> tuple[dict | None, ErrorNo | None]:
1075
1105
  server_url = f"{BIZYAIR_Y_SERVER}/invoices/recent_cost"
1076
1106
  params = {}
1077
- if api_key:
1078
- params["api_key"] = api_key
1107
+ if query_api_key:
1108
+ params["api_key"] = query_api_key
1079
1109
 
1080
1110
  headers, err = self.auth_header()
1081
1111
  if err is not None:
@@ -1093,6 +1123,10 @@ class APIClient:
1093
1123
 
1094
1124
  def forward_model_request(self, request_data):
1095
1125
  try:
1126
+ api_key = get_api_key()
1127
+ if not api_key:
1128
+ return None, errnos.INVALID_API_KEY
1129
+
1096
1130
  request_data["stream"] = True
1097
1131
  # 硅基云API接受top_k但是openai库不支持
1098
1132
  request_data.pop("top_k")
@@ -1109,17 +1143,26 @@ class APIClient:
1109
1143
  if "model" not in request_data:
1110
1144
  return None, errnos.MODEL_API_ERROR
1111
1145
 
1112
- # TODO: 前端能选择provider、model之后删除下句
1146
+ # TODO: 前端能选择provider、model之后删除下句,但目前无此规划是写死的模型
1113
1147
  request_data["model"] = f"SiliconFlow:{request_data['model']}"
1114
1148
 
1149
+ # 获取前端生成的request_id和prompt_id
1150
+ request_id = request_data.pop("request_id", None)
1151
+ prompt_id = request_data.pop("prompt_id", None)
1152
+ extra_body = {}
1153
+ if request_id:
1154
+ extra_body["request_id"] = request_id
1155
+ if prompt_id:
1156
+ extra_body["prompt_id"] = prompt_id
1157
+
1115
1158
  client = OpenAI(
1116
1159
  base_url=BIZYAIR_X_SERVER,
1117
- api_key=get_api_key(),
1160
+ api_key=api_key,
1118
1161
  timeout=60.0,
1119
1162
  max_retries=0,
1120
1163
  )
1121
1164
  return client.chat.completions.with_streaming_response.create(
1122
- **request_data
1165
+ extra_body=extra_body, **request_data
1123
1166
  )
1124
1167
 
1125
1168
  except Exception as e:
@@ -1129,6 +1172,8 @@ class APIClient:
1129
1172
  async def forward_image_request(self, request_data):
1130
1173
  try:
1131
1174
  api_key = get_api_key()
1175
+ if not api_key:
1176
+ return None, errnos.INVALID_API_KEY
1132
1177
  headers = {
1133
1178
  "Content-Type": "application/json",
1134
1179
  "Authorization": f"Bearer {api_key}",
@@ -1151,3 +1196,26 @@ class APIClient:
1151
1196
  except Exception as e:
1152
1197
  print(f"\033[31m[BizyAir]\033[0m Image generation request failed: {str(e)}")
1153
1198
  return None, errnos.MODEL_API_ERROR
1199
+
1200
+ async def fetch_all_llm_models(self, request_api_key: str = None):
1201
+ url = f"{BIZYAIR_X_SERVER}/llm/models"
1202
+ headers, err = self.auth_header(api_key=request_api_key)
1203
+ if err is not None:
1204
+ print(f"fetch_all_models: error getting headers: {err}")
1205
+ return []
1206
+ params = {"type": "text", "sub_type": "chat"}
1207
+
1208
+ try:
1209
+ data, err = await self.do_get(url, params=params, headers=headers)
1210
+ if err is not None:
1211
+ print(f"fetch_all_models: error fetching models: {err}")
1212
+ return []
1213
+
1214
+ all_models = [model["id"] for model in data["data"]]
1215
+ return all_models
1216
+ except aiohttp.ClientError as e:
1217
+ print(f"Error fetching models: {e}")
1218
+ return []
1219
+ except asyncio.exceptions.TimeoutError:
1220
+ print("Request to fetch models timed out")
1221
+ return []
@@ -179,6 +179,15 @@ class errnos:
179
179
  400, 400148, None, {"en": "Day parameter is required", "zh": "缺少日期参数"}
180
180
  )
181
181
 
182
+ MISSING_PROMPT = ErrorNo(
183
+ 400, 400149, None, {"en": "Missing parameter prompt", "zh": "缺少参数prompt"}
184
+ )
185
+
186
+ # 具体错误动态填
187
+ INVALID_PROMPT = ErrorNo(
188
+ 400, 400150, None, {"en": "Invalid prompt", "zh": "工作流错误"}
189
+ )
190
+
182
191
  INVALID_API_KEY = ErrorNo(
183
192
  401, 401000, None, {"en": "Invalid API key", "zh": "无效的API密钥"}
184
193
  )