modelscope-api 0.0.1__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 (42) hide show
  1. modelscope_api/__init__.py +1 -0
  2. modelscope_api/config.py +23 -0
  3. modelscope_api/data_models/__init__.py +3 -0
  4. modelscope_api/data_models/base.py +22 -0
  5. modelscope_api/data_models/collection/__init__.py +6 -0
  6. modelscope_api/data_models/collection/collection.py +110 -0
  7. modelscope_api/data_models/collection/collection_item.py +92 -0
  8. modelscope_api/data_models/magicube/__init__.py +5 -0
  9. modelscope_api/data_models/magicube/magicube_blance.py +31 -0
  10. modelscope_api/data_models/studio/__init__.py +13 -0
  11. modelscope_api/data_models/studio/base_image.py +26 -0
  12. modelscope_api/data_models/studio/environment_variable.py +38 -0
  13. modelscope_api/data_models/studio/hardware.py +87 -0
  14. modelscope_api/data_models/studio/logs.py +54 -0
  15. modelscope_api/data_models/studio/sdk.py +41 -0
  16. modelscope_api/data_models/studio/studio.py +207 -0
  17. modelscope_api/data_models/user/__init__.py +5 -0
  18. modelscope_api/data_models/user/user.py +47 -0
  19. modelscope_api/exceptions.py +59 -0
  20. modelscope_api/models/__init__.py +9 -0
  21. modelscope_api/models/_sub_client.py +71 -0
  22. modelscope_api/models/collection/__init__.py +8 -0
  23. modelscope_api/models/collection/collection.py +122 -0
  24. modelscope_api/models/collection/collection_client.py +132 -0
  25. modelscope_api/models/collection/collection_item.py +92 -0
  26. modelscope_api/models/collection/collection_item_client.py +247 -0
  27. modelscope_api/models/magicube/__init__.py +5 -0
  28. modelscope_api/models/magicube/magicube_client.py +46 -0
  29. modelscope_api/models/modelscope_client.py +206 -0
  30. modelscope_api/models/studio/__init__.py +7 -0
  31. modelscope_api/models/studio/environment_variable_client.py +107 -0
  32. modelscope_api/models/studio/studio.py +197 -0
  33. modelscope_api/models/studio/studio_client.py +237 -0
  34. modelscope_api/models/user/__init__.py +5 -0
  35. modelscope_api/models/user/user_client.py +46 -0
  36. modelscope_api/utils/regex.py +12 -0
  37. modelscope_api/utils/typing.py +12 -0
  38. modelscope_api-0.0.1.dist-info/METADATA +20 -0
  39. modelscope_api-0.0.1.dist-info/RECORD +42 -0
  40. modelscope_api-0.0.1.dist-info/WHEEL +5 -0
  41. modelscope_api-0.0.1.dist-info/licenses/LICENSE +21 -0
  42. modelscope_api-0.0.1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,107 @@
1
+ """
2
+ 对单个创空间的环境变量的操作。
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List, TYPE_CHECKING
8
+
9
+ from ...data_models.studio import EnvironmentVariableInfo, EnvironmentVariableType
10
+ from .._sub_client import SubClient
11
+
12
+ if TYPE_CHECKING:
13
+ from .studio import Studio
14
+
15
+
16
+ class EnvironmentVariableClient(SubClient):
17
+ """
18
+ 操作单个创空间的环境变量。
19
+ """
20
+
21
+ def __init__(
22
+ self,
23
+ studio: Studio,
24
+ type: EnvironmentVariableType,
25
+ ):
26
+ self.type: EnvironmentVariableType = EnvironmentVariableType(type)
27
+ super().__init__(
28
+ super_client=studio,
29
+ prefix=f"{self.type}s"
30
+ )
31
+
32
+
33
+ async def get_all(self, **kwargs) -> List[EnvironmentVariableInfo]:
34
+ """
35
+ 获取当前 Studio 的所有环境变量的 key 和 value。
36
+
37
+ 密文变量的值不可见。
38
+ """
39
+ kwargs["method"] = "GET"
40
+ kwargs["subpath"] = None
41
+ data = await self.request_openapi_data(**kwargs)
42
+ environment_variable_infos = list(map(
43
+ EnvironmentVariableInfo.from_json,
44
+ data.get(self.prefix) or []
45
+ ))
46
+ return environment_variable_infos
47
+
48
+
49
+ async def add(
50
+ self,
51
+ key: str,
52
+ value: str,
53
+ **kwargs
54
+ ) -> None:
55
+ """
56
+ 为当前的 Studio 添加一个环境变量.
57
+
58
+ 明文变量的 key 和 value 都公开可见,敏感信息请使用密文变量接口。
59
+
60
+ Args:
61
+ key: 变量名称。
62
+ value: 变量值。
63
+ """
64
+ kwargs["method"] = "POST"
65
+ kwargs["subpath"] = None
66
+ kwargs.setdefault("json", {}).update({
67
+ "key": key,
68
+ "value": value,
69
+ })
70
+ await self.request_openapi_data(**kwargs)
71
+
72
+
73
+ async def update(
74
+ self,
75
+ key: str,
76
+ value: str,
77
+ **kwargs
78
+ ) -> None:
79
+ """
80
+ 更新当前 Studio 的一个环境变量值。
81
+
82
+ Args:
83
+ key: 变量名称。
84
+ value: 变量新值。
85
+ """
86
+ kwargs["method"] = "PUT"
87
+ kwargs["subpath"] = None
88
+ kwargs.setdefault("json", {}).update({
89
+ "key": key,
90
+ "value": value,
91
+ })
92
+ await self.request_openapi_data(**kwargs)
93
+
94
+
95
+ async def delete(self, key: str, **kwargs) -> None:
96
+ """
97
+ 删除当前 Studio 的一个环境变量。
98
+
99
+ Args:
100
+ key: 变量名称。
101
+ """
102
+ kwargs["method"] = "DELETE"
103
+ kwargs["subpath"] = None
104
+ kwargs.setdefault("json", {}).update({
105
+ "key": key,
106
+ })
107
+ await self.request_openapi_data(**kwargs)
@@ -0,0 +1,197 @@
1
+ """
2
+ 对单个创空间的操作。
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Optional, TYPE_CHECKING
8
+
9
+ from ...utils.regex import STUDIO_ID_PATTERN
10
+ from ...data_models.studio import (
11
+ StudioInfo, StudioRuntimeInfo, StudioVisibility,
12
+ EnvironmentVariableType,
13
+ SDKType,
14
+ LogsInfo, LogsType
15
+ )
16
+ from .._sub_client import SubClient
17
+ from .environment_variable_client import EnvironmentVariableClient
18
+
19
+ if TYPE_CHECKING:
20
+ from .studio_client import StudioClient
21
+
22
+
23
+
24
+ class Studio(SubClient):
25
+ """
26
+ 单个创空间。
27
+ """
28
+
29
+ def __init__(self, studio_client: StudioClient, id: str):
30
+ self._id = id
31
+ assert STUDIO_ID_PATTERN.fullmatch(self.id), f"Invalid studio ID: {self.id}"
32
+ super().__init__(
33
+ super_client=studio_client,
34
+ prefix=self.id
35
+ )
36
+
37
+ # 明文变量
38
+ self.variables = EnvironmentVariableClient(
39
+ studio=self,
40
+ type=EnvironmentVariableType.VARIABLE
41
+ )
42
+
43
+ # 密文变量
44
+ self.secrets = EnvironmentVariableClient(
45
+ studio=self,
46
+ type=EnvironmentVariableType.SECRET
47
+ )
48
+
49
+
50
+ def __str__(self) -> str:
51
+ return f"{type(self).__name__}<{self.id}>"
52
+
53
+
54
+ # ==== 只读属性 ====
55
+
56
+ @property
57
+ def id(self) -> str:
58
+ """
59
+ Studio ID (owner/repo_name)
60
+ """
61
+ return self._id
62
+
63
+
64
+ @property
65
+ def owner(self) -> str:
66
+ """
67
+ 拥有者(个人用户名或组织名)
68
+ """
69
+ return self._id.split("/")[0]
70
+
71
+
72
+ @property
73
+ def repo_name(self) -> str:
74
+ """
75
+ 仓库名。
76
+ """
77
+ return self._id.split("/")[1]
78
+
79
+
80
+ # ==== 创空间操作 ====
81
+
82
+ async def get_info(self, **kwargs) -> StudioInfo:
83
+ """
84
+ 获取当前 Studio 的详细信息。
85
+
86
+ 公开(public)和公开体验(protected)类型的创空间无需认证即可访问;私有(private)创空间需要认证。
87
+ """
88
+ kwargs["method"] = "GET"
89
+ kwargs["subpath"] = None
90
+ data = await self.request_openapi_data(**kwargs)
91
+ return StudioInfo.from_json(data)
92
+
93
+
94
+ async def update_settings(
95
+ self,
96
+ *,
97
+ display_name: Optional[str] = None,
98
+ license: Optional[str] = None,
99
+ visibility: Optional[StudioVisibility] = None,
100
+ description: Optional[str] = None,
101
+ cover_image: Optional[str] = None,
102
+ sdk_type: Optional[SDKType] = None,
103
+ sdk_version: Optional[str] = None,
104
+ base_image: Optional[str] = None,
105
+ hardware: Optional[str] = None,
106
+ **kwargs
107
+ ) -> StudioInfo:
108
+ """
109
+ 更新当前 Studio 的设置,传入哪个字段修改哪个字段,不传的字段不修改。
110
+
111
+ 注意:sdk_type、sdk_version、base_image、hardware 修改后需重新部署才能生效。
112
+
113
+ Args:
114
+ display_name: 显示名称。
115
+ display_name.length <= 128
116
+ license: 许可证。
117
+ visibility: 创空间可见性。
118
+ description: 描述。
119
+ description.length <= 2000。
120
+ cover_image: 封面图 URL。
121
+ sdk_type: SDK 类型,修改后需重新部署才能生效。
122
+ sdk_version: SDK 版本,仅对 Gradio 类型生效,默认最新版,建议选用最新版本,修改后需重新部署才能生效。
123
+ base_image: 基础镜像,仅 Docker 类型不支持,建议选用最新版本,修改后需重新部署才能生效。
124
+ hardware: 硬件配置,修改后需重新部署才能生效。默认为 "platform/2v-cpu-16g-mem"。
125
+ 免费资源常见格式为 platform/...、xgpu/...、amd/...;
126
+ 付费资源格式为 paid/<InstanceType>,例如 paid/ecs.gn7i-c8g1.2xlarge。
127
+ """
128
+ kwargs["method"] = "PATCH"
129
+ kwargs["subpath"] = "settings"
130
+ kwargs.setdefault("json", {}).update({
131
+ "display_name": display_name,
132
+ "license": license,
133
+ "visibility": visibility,
134
+ "description": description,
135
+ "cover_image": cover_image,
136
+ "sdk_type": sdk_type,
137
+ "sdk_version": sdk_version,
138
+ "base_image": base_image,
139
+ "hardware": hardware,
140
+ })
141
+ data = await self.request_openapi_data(**kwargs)
142
+ return StudioInfo.from_json(data)
143
+
144
+
145
+ async def deploy(self, **kwargs) -> StudioRuntimeInfo:
146
+ """
147
+ 部署当前的 Studio(会重新拉取代码并重建),无论当前状态是停止还是运行中均可调用。
148
+ """
149
+ kwargs["method"] = "POST"
150
+ kwargs["subpath"] = "deploy"
151
+ data = await self.request_openapi_data(**kwargs)
152
+ return StudioRuntimeInfo.from_json(data)
153
+
154
+
155
+ async def stop(self, **kwargs) -> StudioRuntimeInfo:
156
+ """
157
+ 停止当前的 Studio。
158
+ """
159
+ kwargs["method"] = "POST"
160
+ kwargs["subpath"] = "stop"
161
+ data = await self.request_openapi_data(**kwargs)
162
+ return StudioRuntimeInfo.from_json(data)
163
+
164
+
165
+ async def get_logs(
166
+ self,
167
+ log_type: LogsType,
168
+ *,
169
+ page_num: int = 1,
170
+ page_size: int = 100,
171
+ keyword: Optional[str] = None,
172
+ start_timestamp: Optional[int] = None,
173
+ end_timestamp: Optional[int] = None,
174
+ **kwargs
175
+ ) -> LogsInfo:
176
+ """
177
+ 获取当前 Studio 的运行日志。
178
+
179
+ Args:
180
+ log_type: 日志类型:build(构建日志)或 run(运行日志)。
181
+ page_num: 页码,默认 1。
182
+ page_size: 每页数量,默认 100,最大 500。
183
+ keyword: 关键字过滤,可选。
184
+ start_timestamp: 开始时间戳(秒),可选,自动根据 end_timestamp 计算。
185
+ end_timestamp: 结束时间戳(秒),可选,默认当前时间。
186
+ """
187
+ kwargs["method"] = "GET"
188
+ kwargs["subpath"] = f"logs/{log_type}"
189
+ kwargs.setdefault("params", {}).update({
190
+ "page_num": page_num,
191
+ "page_size": page_size,
192
+ "keyword": keyword,
193
+ "start_timestamp": start_timestamp,
194
+ "end_timestamp": end_timestamp,
195
+ })
196
+ data = await self.request_openapi_data(**kwargs)
197
+ return LogsInfo.from_json(data)
@@ -0,0 +1,237 @@
1
+ """
2
+ 集成封装与创空间(Studios)有关的 API。
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import List, Literal, Optional, TYPE_CHECKING
8
+
9
+ from ...data_models.studio import (
10
+ BaseImageInfo,
11
+ HardwareInfo,
12
+ SDKType, SDKVersionInfo,
13
+ StudioInfo, StudioVisibility,
14
+ )
15
+ from .._sub_client import SubClient
16
+ from .studio import Studio
17
+
18
+ if TYPE_CHECKING:
19
+ from ..modelscope_client import ModelScopeClient
20
+
21
+
22
+
23
+ class StudioClient(SubClient):
24
+ """
25
+ 集成封装与创空间(Studios)有关的 API。
26
+ """
27
+
28
+ def __init__(
29
+ self,
30
+ modelscope_client: ModelScopeClient,
31
+ *,
32
+ prefix: str = "studios"
33
+ ):
34
+ super().__init__(
35
+ super_client=modelscope_client,
36
+ prefix=prefix
37
+ )
38
+
39
+
40
+ # ==== 查询创空间信息 ====
41
+
42
+ async def search_studio_infos(
43
+ self,
44
+ search: Optional[str] = None,
45
+ owner: Optional[str] = None,
46
+ *,
47
+ sort: Literal["default", "last_modified", "view_num", "likes"] = "default",
48
+ page_number: int = 1,
49
+ page_size: int = 10,
50
+ status: Optional[Literal["running", "all"]] = None,
51
+ mcp_support: Optional[bool] = None,
52
+ hardware_type: Optional[Literal["xgpu", "amd"]] = None,
53
+ **kwargs
54
+ ) -> List[StudioInfo]:
55
+ """
56
+ 列出创空间信息。
57
+
58
+ Args:
59
+ search: 针对创空间名称、展示名称、作者(包括组织、个人)的子字符串关键词进行搜索。
60
+ max length: 100.
61
+ owner: 针对创空间作者(包括组织、个人)进行搜索。
62
+ sort: 排序方式。
63
+ page_number: 页码,限制 page_number * page_size <= 3000, page_number >= 1。
64
+ page_size: 每页大小(1~50),限制 page_number * page_size <= 3000。
65
+ status: 按创空间运行状态筛选。正常搜索仅支持 running;当按 owner 筛选时,默认为 all。
66
+ mcp_support: 是否支持通过MCP使用。
67
+ hardware_type: 根据创空间硬件类型筛选,当前仅支持筛选 xGPU。
68
+ """
69
+ kwargs["method"] = "GET"
70
+ kwargs["subpath"] = None
71
+ kwargs.setdefault("params", {}).update({
72
+ "search": search,
73
+ "owner": owner,
74
+ "sort": sort,
75
+ "page_number": page_number,
76
+ "page_size": page_size,
77
+ "status": status,
78
+ "mcp_support": mcp_support,
79
+ "hardware_type": hardware_type,
80
+ })
81
+ data = await self.request_openapi_data(**kwargs)
82
+ studio_infos = list(map(
83
+ StudioInfo.from_json,
84
+ data.get("studios") or []
85
+ ))
86
+ return studio_infos
87
+
88
+
89
+ # ==== 查询硬件信息 ====
90
+
91
+ async def search_available_hardwares(
92
+ self,
93
+ *,
94
+ sdk_type: Optional[SDKType] = None,
95
+ studio_id: Optional[str] = None,
96
+ **kwargs
97
+ ) -> List[HardwareInfo]:
98
+ """
99
+ 查询创空间可用的硬件配置列表。
100
+
101
+ - 未登录:返回默认免费硬件
102
+ - 已登录:返回用户可用的免费硬件和带价格的付费硬件
103
+ - 已登录且指定创空间:免费硬件以该创空间的可用免费资源为准
104
+ - 付费资源:使用 paid/<InstanceType> 作为创建或更新 Studio 时的 hardware 参数值
105
+
106
+ Args:
107
+ sdk_type: 按 supported_sdk_types 过滤硬件配置。
108
+ studio_id: 创空间 ID(owner/repo_name),指定后返回该创空间可选的硬件。
109
+ """
110
+ kwargs["method"] = "GET"
111
+ kwargs["subpath"] = "hardware"
112
+ kwargs.setdefault("params", {}).update({
113
+ "sdk_type": sdk_type,
114
+ "studio": studio_id,
115
+ })
116
+ data = await self.request_openapi_data(**kwargs)
117
+ hardware_infos = list(map(
118
+ HardwareInfo.from_json,
119
+ data.get("hardware") or []
120
+ ))
121
+ return hardware_infos
122
+
123
+
124
+ # ==== 查询 SDK 版本 ====
125
+
126
+ async def query_available_sdk_versions(
127
+ self,
128
+ sdk_type: SDKType,
129
+ **kwargs
130
+ ) -> List[SDKVersionInfo]:
131
+ """
132
+ 查询创空间可用的 SDK 版本列表。
133
+ 仅当 sdk_type=gradio 时返回 Gradio 版本列表;其他 SDK 类型或未传 sdk_type 时返回空列表。
134
+
135
+ Args:
136
+ sdk_type: SDK 类型,仅 gradio 返回版本列表。
137
+ """
138
+ kwargs["method"] = "GET"
139
+ kwargs["subpath"] = "sdk-versions"
140
+ kwargs.setdefault("params", {}).update({
141
+ "sdk_type": sdk_type,
142
+ })
143
+ data = await self.request_openapi_data(**kwargs)
144
+ sdk_version_infos = list(map(
145
+ SDKVersionInfo.from_json,
146
+ data.get("sdk_versions") or []
147
+ ))
148
+ return sdk_version_infos
149
+
150
+
151
+ # ==== 查询基础镜像 ====
152
+
153
+ async def query_available_base_images(self, **kwargs) -> List[BaseImageInfo]:
154
+ """
155
+ 查询创空间可用的基础镜像列表,登录与否返回结果一致。
156
+ """
157
+ kwargs["method"] = "GET"
158
+ kwargs["subpath"] = "base-images"
159
+ data = await self.request_openapi_data(**kwargs)
160
+ base_image_infos = list(map(
161
+ BaseImageInfo.from_json,
162
+ data.get("base_images") or []
163
+ ))
164
+ return base_image_infos
165
+
166
+
167
+ # ==== 创建创空间 ====
168
+
169
+ def get_studio(self, studio_id: str) -> Studio:
170
+ """
171
+ 构造一个 Studio 对象。
172
+ """
173
+ return Studio(studio_client=self, id=studio_id)
174
+
175
+
176
+ async def create_studio(
177
+ self,
178
+ repo_name: str,
179
+ owner: Optional[str] = None,
180
+ *,
181
+ display_name: Optional[str] = None,
182
+ license: Optional[str] = None,
183
+ visibility: Optional[StudioVisibility] = None,
184
+ description: Optional[str] = None,
185
+ cover_image: Optional[str] = None,
186
+ sdk_type: Optional[SDKType] = None,
187
+ sdk_version: Optional[str] = None,
188
+ base_image: Optional[str] = None,
189
+ hardware: Optional[str] = None,
190
+ **kwargs
191
+ ) -> Studio:
192
+ """
193
+ 创建一个新的 Studio(创空间)。
194
+
195
+ Args:
196
+ repo_name: 仓库名称。
197
+ repo_name.length <= 64
198
+ owner: 所有者(用户名或组织名)(大小写敏感)。默认使用当前登录的用户。
199
+ display_name: 显示名称。
200
+ display_name.length <= 128
201
+ license: 许可证,默认 apache-2.0。
202
+ visibility: 创空间可见性,默认 public。
203
+ description: 描述。
204
+ description.length <= 2000。
205
+ cover_image: 封面图 URL,为空时使用平台默认图。
206
+ sdk_type: SDK 类型,修改后需重新部署才能生效。默认 gradio。
207
+ sdk_version: SDK 版本,仅对 Gradio 类型生效,默认最新版,建议选用最新版本,修改后需重新部署才能生效。
208
+ 可用版本会随平台更新,请通过 self.query_available_sdk_versions("gradio") 查询当前可用的 Gradio 版本列表。
209
+ base_image: 基础镜像,仅 Docker 类型不支持,建议选用最新版本,修改后需重新部署才能生效。
210
+ 可用值不固定,请通过 self.query_available_base_images() 查询当前可用的基础镜像列表。
211
+ hardware: 硬件配置,修改后需重新部署才能生效。默认为 "platform/2v-cpu-16g-mem"。
212
+ 可用值不固定,请通过 self.search_available_hardwares() 查询当前可用的硬件配置列表。
213
+ 免费资源常见格式为 platform/...、xgpu/...、amd/...;
214
+ 付费资源格式为 paid/<InstanceType>,例如 paid/ecs.gn7i-c8g1.2xlarge。
215
+ """
216
+ # 补全 `owner` 参数
217
+ if not owner:
218
+ current_user_info = await self.super_client.user.get_current_user_info()
219
+ owner = current_user_info.username
220
+
221
+ kwargs["method"] = "POST"
222
+ kwargs["subpath"] = None
223
+ kwargs.setdefault("json", {}).update({
224
+ "repo_name": repo_name,
225
+ "owner": owner,
226
+ "display_name": display_name,
227
+ "license": license,
228
+ "visibility": visibility,
229
+ "description": description,
230
+ "cover_image": cover_image,
231
+ "sdk_type": sdk_type,
232
+ "sdk_version": sdk_version,
233
+ "base_image": base_image,
234
+ "hardware": hardware,
235
+ })
236
+ data = await self.request_openapi_data(**kwargs)
237
+ return self.get_studio(data["id"])
@@ -0,0 +1,5 @@
1
+ """
2
+ 与用户(User)有关的 API 模型。
3
+ """
4
+
5
+ from .user_client import UserClient
@@ -0,0 +1,46 @@
1
+ """
2
+ 集成封装与用户(User)有关的 API。
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import TYPE_CHECKING
8
+
9
+ from ...data_models.user import UserInfo
10
+ from .._sub_client import SubClient
11
+
12
+ if TYPE_CHECKING:
13
+ from ..modelscope_client import ModelScopeClient
14
+
15
+
16
+
17
+ class UserClient(SubClient):
18
+ """
19
+ 集成封装与用户(User)有关的 API。
20
+ """
21
+
22
+ def __init__(
23
+ self,
24
+ modelscope_client: ModelScopeClient,
25
+ *,
26
+ prefix: str = "users"
27
+ ):
28
+ super().__init__(
29
+ super_client=modelscope_client,
30
+ prefix=prefix
31
+ )
32
+
33
+
34
+ # ==== 查询用户信息 ====
35
+
36
+ async def get_current_user_info(self, **kwargs) -> UserInfo:
37
+ """
38
+ 获取当前已认证用户的个人信息。
39
+
40
+ Raises:
41
+ ModelScopeException: 如果未登录。
42
+ """
43
+ kwargs["method"] = "GET"
44
+ kwargs["subpath"] = "me"
45
+ data = await self.request_openapi_data(**kwargs)
46
+ return UserInfo.from_json(data)
@@ -0,0 +1,12 @@
1
+ """
2
+ 正则表达式。
3
+ """
4
+
5
+ import re
6
+ from re import Pattern
7
+
8
+ # 创空间的 ID
9
+ STUDIO_ID_PATTERN: Pattern = re.compile(r"[\w\-]+\/[\w\-]+")
10
+
11
+ # 合集的唯一标识
12
+ COLLECTION_SLUG_PATTERN: Pattern = re.compile(r"[\w\-]+\/[\w\-]+")
@@ -0,0 +1,12 @@
1
+ """
2
+ 自定义数据类型。
3
+ """
4
+
5
+ from typing import Dict, Union
6
+ from pydantic import JsonValue
7
+
8
+ # JSON 结构的字典对象
9
+ JsonObject = Dict[str, JsonValue]
10
+
11
+ # 实数
12
+ Real = Union[int, float]
@@ -0,0 +1,20 @@
1
+ Metadata-Version: 2.4
2
+ Name: modelscope-api
3
+ Version: 0.0.1
4
+ Summary: A Python async SDK that wraps the ModelScope API into a clean, type-safe interface.
5
+ Author-email: Jerry <wujr24@m.fudan.edu.cn>
6
+ License: MIT
7
+ Project-URL: Homepage, https://github.com/Jerry-Wu-GitHub/modelscope-api
8
+ Project-URL: Repository, https://github.com/Jerry-Wu-GitHub/modelscope-api.git
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: Apache Software License
11
+ Classifier: Operating System :: OS Independent
12
+ Requires-Python: >=3.11
13
+ Description-Content-Type: text/markdown
14
+ License-File: LICENSE
15
+ Requires-Dist: fake-useragent
16
+ Requires-Dist: httpx
17
+ Requires-Dist: python-dotenv
18
+ Requires-Dist: typing-extensions
19
+ Requires-Dist: yarl
20
+ Dynamic: license-file
@@ -0,0 +1,42 @@
1
+ modelscope_api/__init__.py,sha256=JClFlMDTFFp8UaoII9GwG8NRppPKq2wvLvUUN3m44_8,38
2
+ modelscope_api/config.py,sha256=ZRURUHHw4PZ9K5HuI-vUOmi16Q9hMBkEtRbXN2ajKss,481
3
+ modelscope_api/exceptions.py,sha256=mJSqnlz2pteun5_UXJ2aHmKTDLcWZPBEqxGiTE_9KzA,1561
4
+ modelscope_api/data_models/__init__.py,sha256=nMb3jpewbElJNMiciL3nUtiDUIS-8vDp8XcusNBVD2U,27
5
+ modelscope_api/data_models/base.py,sha256=Trg1YpiJCEg2OaMdN4ik-4Kf4948lHAYU6stXQomDjg,439
6
+ modelscope_api/data_models/collection/__init__.py,sha256=g64zrtIbwLO5Wc7hTrPuZWXgWlK2doYDD_yfbKFdEI0,237
7
+ modelscope_api/data_models/collection/collection.py,sha256=AvX2Dq92ZeU8C5OqOpB8ZsMaJXIQCkPuPsXotQ7PrjE,2685
8
+ modelscope_api/data_models/collection/collection_item.py,sha256=nLxj0n_Btz7FDl0OU2ebKq_QsMZOvZSyDv5NdTw_BtU,2479
9
+ modelscope_api/data_models/magicube/__init__.py,sha256=Qjdp1UIeD4CJAzUCdU5rYyg9x3vFAXiC6pmf-E3fiYg,111
10
+ modelscope_api/data_models/magicube/magicube_blance.py,sha256=Cv66ciGBhIVGcBpxCDpNz5FjYg6GwZm0XJynS3HYQp4,664
11
+ modelscope_api/data_models/studio/__init__.py,sha256=ulMTIrQyqCwSQQ5TRmgRubFFn4jkeejQW1GkBF3apz4,420
12
+ modelscope_api/data_models/studio/base_image.py,sha256=T0hKHvBGEFNJw2sB5G45jvyRgg-XX-TO9pWycOnxnZY,529
13
+ modelscope_api/data_models/studio/environment_variable.py,sha256=MJk1_uQsDltPHedAwYZKyVGII_HBfxHjFCtFg3t0czU,706
14
+ modelscope_api/data_models/studio/hardware.py,sha256=OgWYsKxyph9yrx9PQlu5kvbAFcP5R8uJ8zDhbO9y5DA,2334
15
+ modelscope_api/data_models/studio/logs.py,sha256=HUdI7jh_m-wf1HZCb_jOWoD-1f-8O5047qxMZzEBBXU,972
16
+ modelscope_api/data_models/studio/sdk.py,sha256=GOPAvCZ-UwRLp_nMHF1qKxQa4b0AexvIFyAupK8YjAI,734
17
+ modelscope_api/data_models/studio/studio.py,sha256=R9RSGXd8TPuym0uNnztAnJtclBSrVgGaCKD0es4xk_o,5275
18
+ modelscope_api/data_models/user/__init__.py,sha256=BNVnQ5ibbq-gdk6hluoRd_ZifrwWfCQ3CfggDwZ5Fjc,85
19
+ modelscope_api/data_models/user/user.py,sha256=XH-X59GTHui0Xr_ig91VQVUL1UJWdATlPqyxG5BUsRg,1040
20
+ modelscope_api/models/__init__.py,sha256=Nf3_nUc6BKvcCtQVQ1exWK7uWcobvR2U1iI4MrZQ6WQ,318
21
+ modelscope_api/models/_sub_client.py,sha256=g2T4kvOaG8ihLjuJqGnxyQPGsbwdg7LJxEJxXMRYPtI,1889
22
+ modelscope_api/models/modelscope_client.py,sha256=eOAY539kodN8QC_zfvQ6ciNTMrYLxJl2ARqbW4P7pos,6998
23
+ modelscope_api/models/collection/__init__.py,sha256=wTBTsY72m7NJ6pOyXio0M0hUikJC7mIDcbjdQQ0iAe8,250
24
+ modelscope_api/models/collection/collection.py,sha256=kIUSkEfuyJA9JC8CMixXeBbWTUpQMOTHXYN84m9GQA4,3401
25
+ modelscope_api/models/collection/collection_client.py,sha256=It39XmF0JYniqE56STQQ0aCuMe1OuXPXu53G9j5VDCQ,4356
26
+ modelscope_api/models/collection/collection_item.py,sha256=sgG-KqOkT-NM-AqvlEJOjLJTWb-hePFzV3gPmG7LD8A,2236
27
+ modelscope_api/models/collection/collection_item_client.py,sha256=vkoLpiKD31Cvjg9VgRq6VziQ3fs0m1147DYj3cbuHBA,7774
28
+ modelscope_api/models/magicube/__init__.py,sha256=guvFERzOmL6pgJmnYV7XUyWpb6jOw49p9SHUiwX9yww,105
29
+ modelscope_api/models/magicube/magicube_client.py,sha256=t2R0JjOW6MuCid9z-pwtwJz7leVVEby49H4NjunJLRk,1115
30
+ modelscope_api/models/studio/__init__.py,sha256=AeVCPawF9QLzbu3C94PZZUtxlsRn_DRO5UEbp3uRIuc,198
31
+ modelscope_api/models/studio/environment_variable_client.py,sha256=syxpk53aO9SCWvdqdfNezmm5kaBtBkyGF9GFxSvYZiA,2784
32
+ modelscope_api/models/studio/studio.py,sha256=b3evKZ-35bGpx3PiSvUCU72lyh5j4Cvf4qfpgw-gbrw,6525
33
+ modelscope_api/models/studio/studio_client.py,sha256=E1lq4uSOZ4ORmXaaD7_W58keiQ4LIgo0GPbk8DB1BM4,8834
34
+ modelscope_api/models/user/__init__.py,sha256=NIdeQFEn38giQE4PY1lhnlqKsicDHhCK3qeF4Jq66tI,93
35
+ modelscope_api/models/user/user_client.py,sha256=fMxAgxKOEI0jXFQJTmgfr1xLVztr_--XVot-i9s54mk,1067
36
+ modelscope_api/utils/regex.py,sha256=khlg-zj5P7fizGs9ZkzmU8M9L5dz7R_9jDjspS7OP_Y,245
37
+ modelscope_api/utils/typing.py,sha256=Tq9sxXPae8Fdx9ibgbwraMJtIzCSFGyOERGdcIapnmk,207
38
+ modelscope_api-0.0.1.dist-info/licenses/LICENSE,sha256=39yjsOXCxti7EMXdyAAfqityQk1hVHL-QiZHZqxSGI0,1083
39
+ modelscope_api-0.0.1.dist-info/METADATA,sha256=xAk4IOZq9JQCH6X1m2pX4b4e1bUjkprr2gHggDDEI8s,779
40
+ modelscope_api-0.0.1.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
41
+ modelscope_api-0.0.1.dist-info/top_level.txt,sha256=oARZ-KorRdgifR8v3fZySSZU9NF7fnJsaI5wcQldSUM,15
42
+ modelscope_api-0.0.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+