bizyengine 0.4.2__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.
- bizyengine/__init__.py +35 -0
- bizyengine/bizy_server/__init__.py +7 -0
- bizyengine/bizy_server/api_client.py +763 -0
- bizyengine/bizy_server/errno.py +122 -0
- bizyengine/bizy_server/error_handler.py +3 -0
- bizyengine/bizy_server/execution.py +55 -0
- bizyengine/bizy_server/resp.py +24 -0
- bizyengine/bizy_server/server.py +898 -0
- bizyengine/bizy_server/utils.py +93 -0
- bizyengine/bizyair_extras/__init__.py +24 -0
- bizyengine/bizyair_extras/nodes_advanced_refluxcontrol.py +62 -0
- bizyengine/bizyair_extras/nodes_cogview4.py +31 -0
- bizyengine/bizyair_extras/nodes_comfyui_detail_daemon.py +180 -0
- bizyengine/bizyair_extras/nodes_comfyui_instantid.py +164 -0
- bizyengine/bizyair_extras/nodes_comfyui_layerstyle_advance.py +141 -0
- bizyengine/bizyair_extras/nodes_comfyui_pulid_flux.py +88 -0
- bizyengine/bizyair_extras/nodes_controlnet.py +50 -0
- bizyengine/bizyair_extras/nodes_custom_sampler.py +130 -0
- bizyengine/bizyair_extras/nodes_dataset.py +99 -0
- bizyengine/bizyair_extras/nodes_differential_diffusion.py +16 -0
- bizyengine/bizyair_extras/nodes_flux.py +69 -0
- bizyengine/bizyair_extras/nodes_image_utils.py +93 -0
- bizyengine/bizyair_extras/nodes_ip2p.py +20 -0
- bizyengine/bizyair_extras/nodes_ipadapter_plus/__init__.py +1 -0
- bizyengine/bizyair_extras/nodes_ipadapter_plus/nodes_ipadapter_plus.py +1598 -0
- bizyengine/bizyair_extras/nodes_janus_pro.py +81 -0
- bizyengine/bizyair_extras/nodes_kolors_mz/__init__.py +86 -0
- bizyengine/bizyair_extras/nodes_model_advanced.py +62 -0
- bizyengine/bizyair_extras/nodes_sd3.py +52 -0
- bizyengine/bizyair_extras/nodes_segment_anything.py +256 -0
- bizyengine/bizyair_extras/nodes_segment_anything_utils.py +134 -0
- bizyengine/bizyair_extras/nodes_testing_utils.py +139 -0
- bizyengine/bizyair_extras/nodes_trellis.py +199 -0
- bizyengine/bizyair_extras/nodes_ultimatesdupscale.py +137 -0
- bizyengine/bizyair_extras/nodes_upscale_model.py +32 -0
- bizyengine/bizyair_extras/nodes_wan_video.py +49 -0
- bizyengine/bizyair_extras/oauth_callback/main.py +118 -0
- bizyengine/core/__init__.py +8 -0
- bizyengine/core/commands/__init__.py +1 -0
- bizyengine/core/commands/base.py +27 -0
- bizyengine/core/commands/invoker.py +4 -0
- bizyengine/core/commands/processors/model_hosting_processor.py +0 -0
- bizyengine/core/commands/processors/prompt_processor.py +123 -0
- bizyengine/core/commands/servers/model_server.py +0 -0
- bizyengine/core/commands/servers/prompt_server.py +234 -0
- bizyengine/core/common/__init__.py +8 -0
- bizyengine/core/common/caching.py +198 -0
- bizyengine/core/common/client.py +262 -0
- bizyengine/core/common/env_var.py +101 -0
- bizyengine/core/common/utils.py +93 -0
- bizyengine/core/configs/conf.py +112 -0
- bizyengine/core/configs/models.json +101 -0
- bizyengine/core/configs/models.yaml +329 -0
- bizyengine/core/data_types.py +20 -0
- bizyengine/core/image_utils.py +288 -0
- bizyengine/core/nodes_base.py +159 -0
- bizyengine/core/nodes_io.py +97 -0
- bizyengine/core/path_utils/__init__.py +9 -0
- bizyengine/core/path_utils/path_manager.py +276 -0
- bizyengine/core/path_utils/utils.py +34 -0
- bizyengine/misc/__init__.py +0 -0
- bizyengine/misc/auth.py +83 -0
- bizyengine/misc/llm.py +431 -0
- bizyengine/misc/mzkolors.py +93 -0
- bizyengine/misc/nodes.py +1208 -0
- bizyengine/misc/nodes_controlnet_aux.py +491 -0
- bizyengine/misc/nodes_controlnet_union_sdxl.py +171 -0
- bizyengine/misc/route_sam.py +60 -0
- bizyengine/misc/segment_anything.py +276 -0
- bizyengine/misc/supernode.py +182 -0
- bizyengine/misc/utils.py +218 -0
- bizyengine/version.txt +1 -0
- bizyengine-0.4.2.dist-info/METADATA +12 -0
- bizyengine-0.4.2.dist-info/RECORD +76 -0
- bizyengine-0.4.2.dist-info/WHEEL +5 -0
- bizyengine-0.4.2.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,763 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import urllib
|
|
3
|
+
|
|
4
|
+
import aiohttp
|
|
5
|
+
import bizyengine.core as core
|
|
6
|
+
from bizyengine.core.common import get_api_key
|
|
7
|
+
from bizyengine.core.common.env_var import BIZYAIR_PRODUCTION_TEST, BIZYAIR_SERVER_ADDRESS
|
|
8
|
+
|
|
9
|
+
from .errno import ErrorNo, errnos
|
|
10
|
+
from .error_handler import ErrorHandler
|
|
11
|
+
from .utils import is_string_valid
|
|
12
|
+
|
|
13
|
+
with open(os.path.join(os.path.dirname(__file__), "..", "version.txt"), "r") as file:
|
|
14
|
+
CLIENT_VERSION = file.read()
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class APIClient:
|
|
18
|
+
def __init__(self):
|
|
19
|
+
self.error_handler = ErrorHandler()
|
|
20
|
+
|
|
21
|
+
async def get_session(self):
|
|
22
|
+
timeout = aiohttp.ClientTimeout(total=30)
|
|
23
|
+
return aiohttp.ClientSession(timeout=timeout)
|
|
24
|
+
|
|
25
|
+
def auth_header(self):
|
|
26
|
+
try:
|
|
27
|
+
api_key = get_api_key()
|
|
28
|
+
auth = f"Bearer {api_key}"
|
|
29
|
+
headers = {
|
|
30
|
+
"accept": "application/json",
|
|
31
|
+
"content-type": "application/json",
|
|
32
|
+
"authorization": auth,
|
|
33
|
+
"x-bizyair-client-version": CLIENT_VERSION,
|
|
34
|
+
}
|
|
35
|
+
if BIZYAIR_PRODUCTION_TEST != None:
|
|
36
|
+
headers["x-bizyair-production-test"] = BIZYAIR_PRODUCTION_TEST
|
|
37
|
+
return headers, None
|
|
38
|
+
except ValueError as e:
|
|
39
|
+
error_message = e.args[0] if e.args else "Invalid API key"
|
|
40
|
+
errnos.INVALID_API_KEY.message = error_message
|
|
41
|
+
return None, errnos.INVALID_API_KEY
|
|
42
|
+
|
|
43
|
+
async def do_get(self, url, params=None, headers=None):
|
|
44
|
+
if params:
|
|
45
|
+
query_string = urllib.parse.urlencode(params, doseq=True)
|
|
46
|
+
url = f"{url}?{query_string}"
|
|
47
|
+
async with await self.get_session() as session:
|
|
48
|
+
async with session.get(url, headers=headers) as response:
|
|
49
|
+
resp_json = await response.json()
|
|
50
|
+
if response.status != 200:
|
|
51
|
+
return None, ErrorNo(
|
|
52
|
+
response.status,
|
|
53
|
+
resp_json.get("code", response.status),
|
|
54
|
+
None,
|
|
55
|
+
resp_json.get("message", await response.text()),
|
|
56
|
+
)
|
|
57
|
+
return resp_json, None
|
|
58
|
+
|
|
59
|
+
async def do_post(self, url, data=None, headers=None):
|
|
60
|
+
async with await self.get_session() as session:
|
|
61
|
+
async with session.post(url, json=data, headers=headers) as response:
|
|
62
|
+
resp_json = await response.json()
|
|
63
|
+
if response.status != 200:
|
|
64
|
+
return None, ErrorNo(
|
|
65
|
+
response.status,
|
|
66
|
+
resp_json.get("code", response.status),
|
|
67
|
+
None,
|
|
68
|
+
resp_json.get("message", await response.text()),
|
|
69
|
+
)
|
|
70
|
+
return resp_json, None
|
|
71
|
+
|
|
72
|
+
async def do_put(self, url, data=None, headers=None):
|
|
73
|
+
async with await self.get_session() as session:
|
|
74
|
+
async with session.put(url, json=data, headers=headers) as response:
|
|
75
|
+
resp_json = await response.json()
|
|
76
|
+
if response.status != 200:
|
|
77
|
+
return None, ErrorNo(
|
|
78
|
+
response.status,
|
|
79
|
+
resp_json.get("code", response.status),
|
|
80
|
+
None,
|
|
81
|
+
resp_json.get("message", await response.text()),
|
|
82
|
+
)
|
|
83
|
+
return resp_json, None
|
|
84
|
+
|
|
85
|
+
async def do_delete(self, url, data=None, headers=None):
|
|
86
|
+
async with await self.get_session() as session:
|
|
87
|
+
async with session.delete(url, json=data, headers=headers) as response:
|
|
88
|
+
resp_json = await response.json()
|
|
89
|
+
if response.status != 200:
|
|
90
|
+
return None, ErrorNo(
|
|
91
|
+
response.status,
|
|
92
|
+
resp_json.get("code", response.status),
|
|
93
|
+
None,
|
|
94
|
+
resp_json.get("message", await response.text()),
|
|
95
|
+
)
|
|
96
|
+
return resp_json, None
|
|
97
|
+
|
|
98
|
+
async def user_info(self) -> tuple[dict | None, ErrorNo | None]:
|
|
99
|
+
headers, err = self.auth_header()
|
|
100
|
+
if err is not None:
|
|
101
|
+
return None, err
|
|
102
|
+
|
|
103
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/user/info"
|
|
104
|
+
try:
|
|
105
|
+
ret, err = await self.do_get(server_url, headers=headers)
|
|
106
|
+
if err is not None:
|
|
107
|
+
return None, err
|
|
108
|
+
|
|
109
|
+
return ret["data"], None
|
|
110
|
+
except Exception as e:
|
|
111
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to get user info: {str(e)}")
|
|
112
|
+
return None, errnos.GET_USER_INFO
|
|
113
|
+
|
|
114
|
+
async def sign(
|
|
115
|
+
self, signature: str, type: str
|
|
116
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
117
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/files/{signature}"
|
|
118
|
+
params = None
|
|
119
|
+
if is_string_valid(type):
|
|
120
|
+
params = {"type": type}
|
|
121
|
+
|
|
122
|
+
headers, err = self.auth_header()
|
|
123
|
+
if err is not None:
|
|
124
|
+
return None, err
|
|
125
|
+
|
|
126
|
+
try:
|
|
127
|
+
ret, err = await self.do_get(server_url, params=params, headers=headers)
|
|
128
|
+
if err is not None:
|
|
129
|
+
return None, err
|
|
130
|
+
|
|
131
|
+
return ret["data"], None
|
|
132
|
+
|
|
133
|
+
except Exception as e:
|
|
134
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to sign model: {str(e)}")
|
|
135
|
+
return None, errnos.SIGN_FILE
|
|
136
|
+
|
|
137
|
+
async def commit_file(
|
|
138
|
+
self, signature: str, object_key: str, md5_hash: str, type: str
|
|
139
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
140
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/files"
|
|
141
|
+
|
|
142
|
+
payload = {
|
|
143
|
+
"sign": signature,
|
|
144
|
+
"object_key": object_key,
|
|
145
|
+
"md5_hash": md5_hash,
|
|
146
|
+
"type": type,
|
|
147
|
+
}
|
|
148
|
+
headers, err = self.auth_header()
|
|
149
|
+
if err is not None:
|
|
150
|
+
return None, err
|
|
151
|
+
|
|
152
|
+
try:
|
|
153
|
+
ret, err = await self.do_post(server_url, data=payload, headers=headers)
|
|
154
|
+
if err is not None:
|
|
155
|
+
return None, err
|
|
156
|
+
|
|
157
|
+
return ret["data"], None
|
|
158
|
+
except Exception as e:
|
|
159
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to commit file: {str(e)}")
|
|
160
|
+
return None, errnos.COMMIT_FILE
|
|
161
|
+
|
|
162
|
+
async def commit_bizy_model(self, payload) -> tuple[dict | None, ErrorNo | None]:
|
|
163
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models"
|
|
164
|
+
|
|
165
|
+
headers, err = self.auth_header()
|
|
166
|
+
if err is not None:
|
|
167
|
+
return None, err
|
|
168
|
+
|
|
169
|
+
try:
|
|
170
|
+
ret, err = await self.do_post(server_url, data=payload, headers=headers)
|
|
171
|
+
if err is not None:
|
|
172
|
+
return None, err
|
|
173
|
+
|
|
174
|
+
return ret["data"], None
|
|
175
|
+
except Exception as e:
|
|
176
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to commit model: {str(e)}")
|
|
177
|
+
return None, errnos.COMMIT_BIZY_MODEL
|
|
178
|
+
|
|
179
|
+
async def delete_bizy_model(
|
|
180
|
+
self, model_id: int
|
|
181
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
182
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/{model_id}"
|
|
183
|
+
|
|
184
|
+
headers, err = self.auth_header()
|
|
185
|
+
if err is not None:
|
|
186
|
+
return None, err
|
|
187
|
+
|
|
188
|
+
try:
|
|
189
|
+
ret, err = await self.do_delete(server_url, headers=headers)
|
|
190
|
+
if err is not None:
|
|
191
|
+
return None, err
|
|
192
|
+
|
|
193
|
+
return ret["data"], None
|
|
194
|
+
except Exception as e:
|
|
195
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to delete model: {str(e)}")
|
|
196
|
+
return None, errnos.DELETE_BIZY_MODEL
|
|
197
|
+
|
|
198
|
+
async def query_community_models(
|
|
199
|
+
self,
|
|
200
|
+
current: int,
|
|
201
|
+
page_size: int,
|
|
202
|
+
keyword: str = None,
|
|
203
|
+
model_types: list[str] = None,
|
|
204
|
+
base_models: list[str] = None,
|
|
205
|
+
sort: str = None,
|
|
206
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
207
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/community"
|
|
208
|
+
params = {"current": current, "page_size": page_size}
|
|
209
|
+
if keyword:
|
|
210
|
+
params["keyword"] = keyword
|
|
211
|
+
if model_types:
|
|
212
|
+
params["model_types"] = model_types
|
|
213
|
+
if base_models:
|
|
214
|
+
params["base_models"] = base_models
|
|
215
|
+
if sort:
|
|
216
|
+
params["sort"] = sort
|
|
217
|
+
|
|
218
|
+
headers, err = self.auth_header()
|
|
219
|
+
if err is not None:
|
|
220
|
+
return None, err
|
|
221
|
+
|
|
222
|
+
try:
|
|
223
|
+
ret, err = await self.do_get(server_url, params=params, headers=headers)
|
|
224
|
+
if err is not None:
|
|
225
|
+
return None, err
|
|
226
|
+
|
|
227
|
+
return ret["data"], None
|
|
228
|
+
except Exception as e:
|
|
229
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to query community models: {str(e)}")
|
|
230
|
+
return None, errnos.QUERY_COMMUNITY_MODELS
|
|
231
|
+
|
|
232
|
+
async def query_official_models(
|
|
233
|
+
self,
|
|
234
|
+
current: int,
|
|
235
|
+
page_size: int,
|
|
236
|
+
keyword: str = None,
|
|
237
|
+
model_types: list[str] = None,
|
|
238
|
+
base_models: list[str] = None,
|
|
239
|
+
sort: str = None,
|
|
240
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
241
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/official"
|
|
242
|
+
params = {"current": current, "page_size": page_size}
|
|
243
|
+
if keyword:
|
|
244
|
+
params["keyword"] = keyword
|
|
245
|
+
if model_types:
|
|
246
|
+
params["model_types"] = model_types
|
|
247
|
+
if base_models:
|
|
248
|
+
params["base_models"] = base_models
|
|
249
|
+
if sort:
|
|
250
|
+
params["sort"] = sort
|
|
251
|
+
|
|
252
|
+
headers, err = self.auth_header()
|
|
253
|
+
if err is not None:
|
|
254
|
+
return None, err
|
|
255
|
+
|
|
256
|
+
try:
|
|
257
|
+
ret, err = await self.do_get(server_url, params=params, headers=headers)
|
|
258
|
+
if err is not None:
|
|
259
|
+
return None, err
|
|
260
|
+
|
|
261
|
+
return ret["data"], None
|
|
262
|
+
except Exception as e:
|
|
263
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to query official models: {str(e)}")
|
|
264
|
+
return None, errnos.QUERY_OFFICIAL_MODELS
|
|
265
|
+
|
|
266
|
+
async def query_models(
|
|
267
|
+
self,
|
|
268
|
+
mode: str,
|
|
269
|
+
current: int,
|
|
270
|
+
page_size: int,
|
|
271
|
+
keyword: str = None,
|
|
272
|
+
model_types: list[str] = None,
|
|
273
|
+
base_models: list[str] = None,
|
|
274
|
+
sort: str = None,
|
|
275
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
276
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/{mode}"
|
|
277
|
+
params = {"current": current, "page_size": page_size}
|
|
278
|
+
if keyword:
|
|
279
|
+
params["keyword"] = keyword
|
|
280
|
+
if model_types:
|
|
281
|
+
params["model_types"] = model_types
|
|
282
|
+
if base_models:
|
|
283
|
+
params["base_models"] = base_models
|
|
284
|
+
if sort:
|
|
285
|
+
params["sort"] = sort
|
|
286
|
+
|
|
287
|
+
headers, err = self.auth_header()
|
|
288
|
+
if err is not None:
|
|
289
|
+
return None, err
|
|
290
|
+
|
|
291
|
+
try:
|
|
292
|
+
ret, err = await self.do_get(server_url, params=params, headers=headers)
|
|
293
|
+
if err is not None:
|
|
294
|
+
return None, err
|
|
295
|
+
|
|
296
|
+
return ret["data"], None
|
|
297
|
+
except Exception as e:
|
|
298
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to query models: {str(e)}")
|
|
299
|
+
return None, errnos.QUERY_MODELS
|
|
300
|
+
|
|
301
|
+
async def get_model_detail(
|
|
302
|
+
self, model_id: int, source: str
|
|
303
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
304
|
+
server_url = (
|
|
305
|
+
f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/{model_id}/detail?source={source}"
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
headers, err = self.auth_header()
|
|
309
|
+
if err is not None:
|
|
310
|
+
return None, err
|
|
311
|
+
|
|
312
|
+
try:
|
|
313
|
+
ret, err = await self.do_get(server_url, headers=headers)
|
|
314
|
+
if err is not None:
|
|
315
|
+
return None, err
|
|
316
|
+
|
|
317
|
+
return ret["data"], None
|
|
318
|
+
except Exception as e:
|
|
319
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to get model detail: {str(e)}")
|
|
320
|
+
return None, errnos.GET_MODEL_DETAIL
|
|
321
|
+
|
|
322
|
+
async def get_model_version_detail(
|
|
323
|
+
self, version_id: int
|
|
324
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
325
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/versions/{version_id}"
|
|
326
|
+
|
|
327
|
+
headers, err = self.auth_header()
|
|
328
|
+
if err is not None:
|
|
329
|
+
return None, err
|
|
330
|
+
|
|
331
|
+
try:
|
|
332
|
+
ret, err = await self.do_get(server_url, headers=headers)
|
|
333
|
+
if err is not None:
|
|
334
|
+
return None, err
|
|
335
|
+
|
|
336
|
+
return ret["data"], None
|
|
337
|
+
except Exception as e:
|
|
338
|
+
print(
|
|
339
|
+
f"\033[31m[BizyAir]\033[0m Fail to get model version detail: {str(e)}"
|
|
340
|
+
)
|
|
341
|
+
return None, errnos.GET_MODEL_VERSION_DETAIL
|
|
342
|
+
|
|
343
|
+
async def fork_model_version(self, version_id: int) -> tuple[None, ErrorNo | None]:
|
|
344
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/versions/{version_id}/fork"
|
|
345
|
+
|
|
346
|
+
headers, err = self.auth_header()
|
|
347
|
+
if err is not None:
|
|
348
|
+
return None, err
|
|
349
|
+
|
|
350
|
+
try:
|
|
351
|
+
ret, err = await self.do_post(server_url, headers=headers)
|
|
352
|
+
if err is not None:
|
|
353
|
+
return None, err
|
|
354
|
+
|
|
355
|
+
return None, None
|
|
356
|
+
except Exception as e:
|
|
357
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to fork model version: {str(e)}")
|
|
358
|
+
return None, errnos.FORK_MODEL_VERSION
|
|
359
|
+
|
|
360
|
+
async def unfork_model_version(
|
|
361
|
+
self, version_id: int
|
|
362
|
+
) -> tuple[None, ErrorNo | None]:
|
|
363
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/versions/{version_id}/fork"
|
|
364
|
+
|
|
365
|
+
headers, err = self.auth_header()
|
|
366
|
+
if err is not None:
|
|
367
|
+
return None, err
|
|
368
|
+
|
|
369
|
+
try:
|
|
370
|
+
ret, err = await self.do_delete(server_url, headers=headers)
|
|
371
|
+
if err is not None:
|
|
372
|
+
return None, err
|
|
373
|
+
|
|
374
|
+
return None, None
|
|
375
|
+
except Exception as e:
|
|
376
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to unfork model version: {str(e)}")
|
|
377
|
+
return None, errnos.UNFORK_MODEL_VERSION
|
|
378
|
+
|
|
379
|
+
async def update_model(
|
|
380
|
+
self, model_id: int, name: str, type_: str, versions: list[dict]
|
|
381
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
382
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/{model_id}"
|
|
383
|
+
|
|
384
|
+
headers, err = self.auth_header()
|
|
385
|
+
if err is not None:
|
|
386
|
+
return None, err
|
|
387
|
+
|
|
388
|
+
data = {"name": name, "type": type_, "versions": versions}
|
|
389
|
+
|
|
390
|
+
try:
|
|
391
|
+
ret, err = await self.do_put(server_url, data=data, headers=headers)
|
|
392
|
+
if err is not None:
|
|
393
|
+
return None, err
|
|
394
|
+
|
|
395
|
+
return ret["data"], None
|
|
396
|
+
except Exception as e:
|
|
397
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to update model: {str(e)}")
|
|
398
|
+
return None, errnos.UPDATE_MODEL
|
|
399
|
+
|
|
400
|
+
async def get_upload_token(
|
|
401
|
+
self, filename: str
|
|
402
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
403
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/upload/token?file_name={filename}"
|
|
404
|
+
|
|
405
|
+
headers, err = self.auth_header()
|
|
406
|
+
if err is not None:
|
|
407
|
+
return None, err
|
|
408
|
+
|
|
409
|
+
try:
|
|
410
|
+
ret, err = await self.do_get(server_url, headers=headers)
|
|
411
|
+
if err is not None:
|
|
412
|
+
return None, err
|
|
413
|
+
|
|
414
|
+
return ret["data"], None
|
|
415
|
+
except Exception as e:
|
|
416
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to get upload token: {str(e)}")
|
|
417
|
+
return None, errnos.GET_UPLOAD_TOKEN
|
|
418
|
+
|
|
419
|
+
async def toggle_user_like(
|
|
420
|
+
self, like_type: str, object_id: str
|
|
421
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
422
|
+
if like_type == "model_version":
|
|
423
|
+
server_url = (
|
|
424
|
+
f"{BIZYAIR_SERVER_ADDRESS}/bizy_models/versions/{object_id}/like"
|
|
425
|
+
)
|
|
426
|
+
else:
|
|
427
|
+
return None, errnos.UNSUPPORT_LIKE_TYPE
|
|
428
|
+
|
|
429
|
+
headers, err = self.auth_header()
|
|
430
|
+
if err is not None:
|
|
431
|
+
return None, err
|
|
432
|
+
|
|
433
|
+
try:
|
|
434
|
+
ret, err = await self.do_post(server_url, headers=headers)
|
|
435
|
+
if err is not None:
|
|
436
|
+
return None, err
|
|
437
|
+
|
|
438
|
+
return ret["data"], None
|
|
439
|
+
except Exception as e:
|
|
440
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to toggle user like: {str(e)}")
|
|
441
|
+
return None, errnos.TOGGLE_USER_LIKE
|
|
442
|
+
|
|
443
|
+
async def get_download_url(
|
|
444
|
+
self, sign: str, model_version_id: int
|
|
445
|
+
) -> tuple[str | None, ErrorNo | None]:
|
|
446
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/files/temp-download/{sign}?version_id={model_version_id}"
|
|
447
|
+
|
|
448
|
+
headers, err = self.auth_header()
|
|
449
|
+
if err is not None:
|
|
450
|
+
return None, err
|
|
451
|
+
|
|
452
|
+
try:
|
|
453
|
+
ret, err = await self.do_get(server_url, headers=headers)
|
|
454
|
+
if err is not None:
|
|
455
|
+
return None, err
|
|
456
|
+
|
|
457
|
+
return ret["data"]["url"], None
|
|
458
|
+
except Exception as e:
|
|
459
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to get download url: {str(e)}")
|
|
460
|
+
return None, errnos.GET_DOWNLOAD_URL
|
|
461
|
+
|
|
462
|
+
async def get_share_model_files(self, shareId, payload) -> (dict, ErrorNo):
|
|
463
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/{shareId}/models/files"
|
|
464
|
+
try:
|
|
465
|
+
|
|
466
|
+
def callback(ret: dict):
|
|
467
|
+
if ret["code"] != errnos.OK.code:
|
|
468
|
+
return [], ErrorNo(500, ret["code"], None, f"{ret}")
|
|
469
|
+
if not ret or "data" not in ret or ret["data"] is None:
|
|
470
|
+
return [], None
|
|
471
|
+
|
|
472
|
+
outputs = [
|
|
473
|
+
x["label_path"] for x in ret["data"]["files"] if x["label_path"]
|
|
474
|
+
]
|
|
475
|
+
outputs = core.path_utils.filter_files_extensions(
|
|
476
|
+
outputs,
|
|
477
|
+
extensions=core.path_utils.path_manager.supported_pt_extensions,
|
|
478
|
+
)
|
|
479
|
+
return outputs, None
|
|
480
|
+
|
|
481
|
+
ret = await core.common.client.async_send_request(
|
|
482
|
+
method="GET", url=server_url, params=payload, callback=callback
|
|
483
|
+
)
|
|
484
|
+
return ret[0], ret[1]
|
|
485
|
+
except Exception as e:
|
|
486
|
+
print(
|
|
487
|
+
f"\033[31m[BizyAir]\033[0m Fail to list share model files: response {ret} error {str(e)}"
|
|
488
|
+
)
|
|
489
|
+
return [], errnos.LIST_SHARE_MODEL_FILE_ERR
|
|
490
|
+
|
|
491
|
+
async def commit_dataset(self, payload) -> tuple[dict | None, ErrorNo | None]:
|
|
492
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets"
|
|
493
|
+
|
|
494
|
+
headers, err = self.auth_header()
|
|
495
|
+
if err is not None:
|
|
496
|
+
return None, err
|
|
497
|
+
|
|
498
|
+
try:
|
|
499
|
+
ret, err = await self.do_post(server_url, data=payload, headers=headers)
|
|
500
|
+
if err is not None:
|
|
501
|
+
return None, err
|
|
502
|
+
|
|
503
|
+
return ret["data"], None
|
|
504
|
+
except Exception as e:
|
|
505
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to commit dataset: {str(e)}")
|
|
506
|
+
return None, errnos.COMMIT_DATASET
|
|
507
|
+
|
|
508
|
+
async def update_dataset(
|
|
509
|
+
self, dataset_id: int, name: str, versions: list[dict]
|
|
510
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
511
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets/{dataset_id}"
|
|
512
|
+
|
|
513
|
+
headers, err = self.auth_header()
|
|
514
|
+
if err is not None:
|
|
515
|
+
return None, err
|
|
516
|
+
|
|
517
|
+
data = {"name": name, "versions": versions}
|
|
518
|
+
|
|
519
|
+
try:
|
|
520
|
+
ret, err = await self.do_put(server_url, data=data, headers=headers)
|
|
521
|
+
if err is not None:
|
|
522
|
+
return None, err
|
|
523
|
+
|
|
524
|
+
return ret["data"], None
|
|
525
|
+
except Exception as e:
|
|
526
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to update dataset: {str(e)}")
|
|
527
|
+
return None, errnos.UPDATE_DATASET
|
|
528
|
+
|
|
529
|
+
async def get_dataset_version_detail(
|
|
530
|
+
self, version_id: int
|
|
531
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
532
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets/versions/{version_id}"
|
|
533
|
+
|
|
534
|
+
headers, err = self.auth_header()
|
|
535
|
+
if err is not None:
|
|
536
|
+
return None, err
|
|
537
|
+
|
|
538
|
+
try:
|
|
539
|
+
ret, err = await self.do_get(server_url, headers=headers)
|
|
540
|
+
if err is not None:
|
|
541
|
+
return None, err
|
|
542
|
+
|
|
543
|
+
return ret["data"], None
|
|
544
|
+
except Exception as e:
|
|
545
|
+
print(
|
|
546
|
+
f"\033[31m[BizyAir]\033[0m Fail to get dataset version detail: {str(e)}"
|
|
547
|
+
)
|
|
548
|
+
return None, errnos.GET_MODEL_VERSION_DETAIL
|
|
549
|
+
|
|
550
|
+
async def delete_dataset(
|
|
551
|
+
self, dataset_id: int
|
|
552
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
553
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets/{dataset_id}"
|
|
554
|
+
|
|
555
|
+
headers, err = self.auth_header()
|
|
556
|
+
if err is not None:
|
|
557
|
+
return None, err
|
|
558
|
+
|
|
559
|
+
try:
|
|
560
|
+
ret, err = await self.do_delete(server_url, headers=headers)
|
|
561
|
+
if err is not None:
|
|
562
|
+
return None, err
|
|
563
|
+
|
|
564
|
+
return ret["data"], None
|
|
565
|
+
except Exception as e:
|
|
566
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to delete dataset: {str(e)}")
|
|
567
|
+
return None, errnos.DELETE_DATASET
|
|
568
|
+
|
|
569
|
+
async def query_datasets(
|
|
570
|
+
self,
|
|
571
|
+
current: int,
|
|
572
|
+
page_size: int,
|
|
573
|
+
keyword: str = None,
|
|
574
|
+
annotated: str = None,
|
|
575
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
576
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets"
|
|
577
|
+
params = {"current": current, "page_size": page_size}
|
|
578
|
+
if keyword:
|
|
579
|
+
params["keyword"] = keyword
|
|
580
|
+
if annotated:
|
|
581
|
+
params["annotated"] = annotated
|
|
582
|
+
|
|
583
|
+
headers, err = self.auth_header()
|
|
584
|
+
if err is not None:
|
|
585
|
+
return None, err
|
|
586
|
+
|
|
587
|
+
try:
|
|
588
|
+
ret, err = await self.do_get(server_url, params=params, headers=headers)
|
|
589
|
+
if err is not None:
|
|
590
|
+
return None, err
|
|
591
|
+
|
|
592
|
+
return ret["data"], None
|
|
593
|
+
except Exception as e:
|
|
594
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to query datasets: {str(e)}")
|
|
595
|
+
return None, errnos.QUERY_DATASETS
|
|
596
|
+
|
|
597
|
+
async def get_dataset_detail(
|
|
598
|
+
self, dataset_id: int
|
|
599
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
600
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/datasets/{dataset_id}/detail"
|
|
601
|
+
|
|
602
|
+
headers, err = self.auth_header()
|
|
603
|
+
if err is not None:
|
|
604
|
+
return None, err
|
|
605
|
+
|
|
606
|
+
try:
|
|
607
|
+
ret, err = await self.do_get(server_url, headers=headers)
|
|
608
|
+
if err is not None:
|
|
609
|
+
return None, err
|
|
610
|
+
|
|
611
|
+
return ret["data"], None
|
|
612
|
+
except Exception as e:
|
|
613
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to get dataset detail: {str(e)}")
|
|
614
|
+
return None, errnos.GET_DATASET_DETAIL
|
|
615
|
+
|
|
616
|
+
async def create_share(self, payload) -> tuple[dict | None, ErrorNo | None]:
|
|
617
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/share"
|
|
618
|
+
|
|
619
|
+
headers, err = self.auth_header()
|
|
620
|
+
if err is not None:
|
|
621
|
+
return None, err
|
|
622
|
+
|
|
623
|
+
try:
|
|
624
|
+
ret, err = await self.do_post(server_url, data=payload, headers=headers)
|
|
625
|
+
if err is not None:
|
|
626
|
+
return None, err
|
|
627
|
+
return ret["data"], None
|
|
628
|
+
except Exception as e:
|
|
629
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to create share: {str(e)}")
|
|
630
|
+
return None, errnos.CREATE_SHARE
|
|
631
|
+
|
|
632
|
+
async def get_share_detail(self, code: str) -> tuple[dict | None, ErrorNo | None]:
|
|
633
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/share/{code}"
|
|
634
|
+
|
|
635
|
+
headers, err = self.auth_header()
|
|
636
|
+
if err is not None:
|
|
637
|
+
return None, err
|
|
638
|
+
|
|
639
|
+
try:
|
|
640
|
+
ret, err = await self.do_get(server_url, headers=headers)
|
|
641
|
+
if err is not None:
|
|
642
|
+
return None, err
|
|
643
|
+
|
|
644
|
+
return ret["data"], None
|
|
645
|
+
except Exception as e:
|
|
646
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to get share detail: {str(e)}")
|
|
647
|
+
return None, errnos.GET_SHARE_DETAIL
|
|
648
|
+
|
|
649
|
+
async def get_data_dict(self) -> tuple[dict | None, ErrorNo | None]:
|
|
650
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/dict"
|
|
651
|
+
headers, err = self.auth_header()
|
|
652
|
+
if err is not None:
|
|
653
|
+
return None, err
|
|
654
|
+
|
|
655
|
+
try:
|
|
656
|
+
ret, err = await self.do_get(server_url, headers=headers)
|
|
657
|
+
if err is not None:
|
|
658
|
+
return None, err
|
|
659
|
+
|
|
660
|
+
return ret["data"], None
|
|
661
|
+
except Exception as e:
|
|
662
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to get data dict: {str(e)}")
|
|
663
|
+
return None, errnos.GET_DATA_DICT
|
|
664
|
+
|
|
665
|
+
async def get_notification_unread_count(self) -> tuple[dict | None, ErrorNo | None]:
|
|
666
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/notifications/unread_count"
|
|
667
|
+
headers, err = self.auth_header()
|
|
668
|
+
if err is not None:
|
|
669
|
+
return None, err
|
|
670
|
+
|
|
671
|
+
try:
|
|
672
|
+
ret, err = await self.do_get(server_url, headers=headers)
|
|
673
|
+
if err is not None:
|
|
674
|
+
return None, err
|
|
675
|
+
|
|
676
|
+
return ret["data"], None
|
|
677
|
+
except Exception as e:
|
|
678
|
+
print(
|
|
679
|
+
f"\033[31m[BizyAir]\033[0m Fail to get notification unread counts: {str(e)}"
|
|
680
|
+
)
|
|
681
|
+
return None, errnos.GET_NOTIF_UNREAD_COUNT
|
|
682
|
+
|
|
683
|
+
async def fetch_notifications(
|
|
684
|
+
self,
|
|
685
|
+
page_size: int,
|
|
686
|
+
last_pm_id: int,
|
|
687
|
+
last_broadcast_id: int,
|
|
688
|
+
types: list | None,
|
|
689
|
+
read_status: bool | None,
|
|
690
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
691
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/notifications"
|
|
692
|
+
headers, err = self.auth_header()
|
|
693
|
+
if err is not None:
|
|
694
|
+
return None, err
|
|
695
|
+
|
|
696
|
+
params = {"page_size": page_size}
|
|
697
|
+
if last_pm_id > 0:
|
|
698
|
+
params["last_pm_id"] = last_pm_id
|
|
699
|
+
if last_broadcast_id > 0:
|
|
700
|
+
params["last_broadcast_id"] = last_broadcast_id
|
|
701
|
+
if types and len(types) > 0:
|
|
702
|
+
params["types"] = types
|
|
703
|
+
if read_status:
|
|
704
|
+
params["read_status"] = read_status
|
|
705
|
+
|
|
706
|
+
try:
|
|
707
|
+
ret, err = await self.do_get(server_url, headers=headers, params=params)
|
|
708
|
+
if err is not None:
|
|
709
|
+
return None, err
|
|
710
|
+
|
|
711
|
+
return ret["data"], None
|
|
712
|
+
except Exception as e:
|
|
713
|
+
print(f"\033[31m[BizyAir]\033[0m Fail to query notifications: {str(e)}")
|
|
714
|
+
return None, errnos.QUERY_NOTIF
|
|
715
|
+
|
|
716
|
+
async def read_notifications(
|
|
717
|
+
self, notif_ids: list[int]
|
|
718
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
719
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/notifications/read"
|
|
720
|
+
headers, err = self.auth_header()
|
|
721
|
+
if err is not None:
|
|
722
|
+
return None, err
|
|
723
|
+
|
|
724
|
+
if notif_ids is None or len(notif_ids) < 1:
|
|
725
|
+
return None, errnos.INVALID_NOTIF_ID
|
|
726
|
+
|
|
727
|
+
payload = {"ids": notif_ids}
|
|
728
|
+
|
|
729
|
+
try:
|
|
730
|
+
ret, err = await self.do_post(server_url, headers=headers, data=payload)
|
|
731
|
+
if err is not None:
|
|
732
|
+
return None, err
|
|
733
|
+
|
|
734
|
+
return ret["data"], None
|
|
735
|
+
except Exception as e:
|
|
736
|
+
print(
|
|
737
|
+
f"\033[31m[BizyAir]\033[0m Fail to mark notifications as read: {str(e)}"
|
|
738
|
+
)
|
|
739
|
+
return None, errnos.READ_NOTIF
|
|
740
|
+
|
|
741
|
+
async def read_all_notifications(
|
|
742
|
+
self, type: int
|
|
743
|
+
) -> tuple[dict | None, ErrorNo | None]:
|
|
744
|
+
server_url = f"{BIZYAIR_SERVER_ADDRESS}/notifications/read_all"
|
|
745
|
+
headers, err = self.auth_header()
|
|
746
|
+
if err is not None:
|
|
747
|
+
return None, err
|
|
748
|
+
|
|
749
|
+
payload = {}
|
|
750
|
+
if type > 0:
|
|
751
|
+
payload["type"] = type
|
|
752
|
+
|
|
753
|
+
try:
|
|
754
|
+
ret, err = await self.do_post(server_url, headers=headers, data=payload)
|
|
755
|
+
if err is not None:
|
|
756
|
+
return None, err
|
|
757
|
+
|
|
758
|
+
return ret["data"], None
|
|
759
|
+
except Exception as e:
|
|
760
|
+
print(
|
|
761
|
+
f"\033[31m[BizyAir]\033[0m Fail to mark all notifications as read: {str(e)}"
|
|
762
|
+
)
|
|
763
|
+
return None, errnos.READ_ALL_NOTIF
|