intellif-aihub 0.1.20__py3-none-any.whl → 0.1.22__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.

Potentially problematic release.


This version of intellif-aihub might be problematic. Click here for more details.

aihub/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.20"
1
+ __version__ = "0.1.22"
aihub/models/eval.py CHANGED
@@ -1,23 +1,54 @@
1
1
  # !/usr/bin/env python
2
2
  # -*-coding:utf-8 -*-
3
+ from enum import Enum
3
4
  from typing import Dict, List, Optional
4
5
 
5
6
  from pydantic import BaseModel, Field
6
7
 
7
8
 
8
- class CreateEvalReq(BaseModel):
9
- """创建评测任务"""
9
+ class BaseEvalReq(BaseModel):
10
+ """评测任务基础请求模型"""
11
+
12
+ run_id: str = Field(description="运行ID")
13
+ type: str = Field(description="评测类型,支持 'llm' 和 'cv'")
14
+ prediction_artifact_path: str = Field(description="推理产物的路径")
15
+ user_id: int = Field(0, description="用户ID,默认0")
16
+
17
+
18
+ class ClientType(Enum):
19
+ """客户端类型枚举"""
20
+
21
+ Workflow = "workflow"
22
+ sdk = "sdk"
23
+
24
+
25
+ class CreateLLMEvalReq(BaseEvalReq):
26
+ """创建LLM类型评测任务请求"""
27
+
28
+ type: str = Field(default="llm", description="评测类型,固定为 'llm'")
10
29
  dataset_id: int = Field(description="数据集ID")
11
30
  dataset_version_id: int = Field(description="数据集版本ID")
12
- prediction_artifact_path: str = Field(description="推理产物的路径")
13
31
  evaled_artifact_path: str = Field(description="评测结果产物的路径")
14
- run_id: str = Field(description="运行ID")
15
- user_id: int = Field(0, description="用户ID")
16
- report: Dict = Field(default_factory=dict, description="评测报告")
32
+ report: Dict = Field(description="评测报告")
33
+ is_public: bool = Field(default=False, description="是否公开")
34
+ client_type: ClientType = Field(default=ClientType.Workflow, description="客户端类型")
35
+ model_config = {"use_enum_values": True}
36
+
37
+
38
+ class CreateCVEvalReq(BaseEvalReq):
39
+ """创建CV类型评测任务请求"""
40
+
41
+ type: str = Field(default="cv", description="评测类型,固定为 'cv'")
42
+ metrics_artifact_path: str = Field(description="指标产物的路径")
43
+ ground_truth_artifact_path: str = Field(description="真实标签产物的路径")
44
+ is_public: bool = Field(default=False, description="是否公开")
45
+ client_type: ClientType = Field(default=ClientType.Workflow, description="客户端类型")
46
+ model_config = {"use_enum_values": True}
17
47
 
18
48
 
19
49
  class EvalRun(BaseModel):
20
50
  """评测任务的运行实体"""
51
+
21
52
  id: int = Field(description="评测的运行ID")
22
53
  name: str = Field(description="评测名称")
23
54
  description: str = Field(description="评测描述")
@@ -37,15 +68,20 @@ class EvalRun(BaseModel):
37
68
  eval_config: Optional[Dict] = Field(default=None, description="评测配置")
38
69
  created_at: int = Field(description="创建时间")
39
70
  updated_at: int = Field(description="更新时间")
71
+ is_public: bool = Field(default=False, description="是否公开")
72
+ client_type: ClientType = Field(default=ClientType.Workflow, description="客户端类型")
73
+ model_config = {"use_enum_values": True, "protected_namespaces": ()}
40
74
 
41
75
 
42
76
  class CreateEvalResp(BaseModel):
43
77
  """创建评测任务的返回结果"""
78
+
44
79
  eval_run: EvalRun = Field(alias="eval_run", description="评测运行信息")
45
80
 
46
81
 
47
82
  class ListEvalReq(BaseModel):
48
83
  """列出评测任务请求"""
84
+
49
85
  page_size: int = Field(20, description="页面大小")
50
86
  page_num: int = Field(1, description="页码")
51
87
  status: Optional[str] = Field(None, description="状态过滤")
@@ -58,11 +94,19 @@ class ListEvalReq(BaseModel):
58
94
  model_ids: Optional[str] = Field(None, description="模型ID列表过滤")
59
95
  dataset_ids: Optional[str] = Field(None, description="数据集ID列表过滤")
60
96
  dataset_version_ids: Optional[str] = Field(None, description="数据集版本ID列表过滤")
97
+ model_config = {"use_enum_values": True, "protected_namespaces": ()}
61
98
 
62
99
 
63
100
  class ListEvalResp(BaseModel):
64
101
  """列出评测任务响应"""
102
+
65
103
  total: int = Field(description="总数")
66
104
  page_size: int = Field(description="页面大小")
67
105
  page_num: int = Field(description="页码")
68
106
  data: List[EvalRun] = Field(description="评测运行列表")
107
+
108
+
109
+ class GrantPermissionReq(BaseModel):
110
+ """授权权限请求"""
111
+
112
+ user_ids: list[int] = Field(description="用户ID数组")
@@ -42,6 +42,7 @@ class CreateTaskOtherInfo(BaseModel):
42
42
  doc_type: str = Field(alias="doc_type", default="doc_center", description="文档类型")
43
43
 
44
44
  model_config = {"use_enum_values": True}
45
+ auto_valid_interval: int = Field(3, description="自动验收间隔")
45
46
 
46
47
 
47
48
  class ProjectInfo(BaseModel):
@@ -328,7 +328,7 @@ class SearchUsersResponse(BaseModel):
328
328
  total: int = Field(description="总数")
329
329
  page_size: int = Field(alias="page_size", description="单页条数")
330
330
  page_num: int = Field(alias="page_num", description="当前页")
331
- data: List[User] = Field(description="用户列表")
331
+ data: Optional[List[User]] = Field(description="用户列表")
332
332
 
333
333
 
334
334
  # 此行放在文件末尾,否则序列化报错
aihub/services/eval.py CHANGED
@@ -7,12 +7,21 @@
7
7
  - **创建评测任务 / 评测报告**
8
8
  - **获取评测任务列表**
9
9
  """
10
+ from typing import List
10
11
 
11
12
  import httpx
12
13
 
13
14
  from ..exceptions import APIError
14
15
  from ..models.common import APIWrapper
15
- from ..models.eval import CreateEvalReq, CreateEvalResp, ListEvalReq, ListEvalResp
16
+ from ..models.eval import (
17
+ CreateLLMEvalReq,
18
+ CreateCVEvalReq,
19
+ CreateEvalResp,
20
+ ListEvalReq,
21
+ ListEvalResp,
22
+ GrantPermissionReq,
23
+ ClientType,
24
+ )
16
25
 
17
26
  _BASE = "/eval-platform/api/v1"
18
27
 
@@ -31,16 +40,21 @@ class EvalService:
31
40
  evaled_artifact_path: str,
32
41
  report_json: dict,
33
42
  run_id,
43
+ user_id: int = 0,
44
+ is_public: bool = False,
45
+ access_user_ids: List[int] = None,
34
46
  ) -> int:
35
47
  """创建评测报告
36
48
 
37
49
  Args:
50
+ is_public (bool): 是否公开
38
51
  run_id (str): RUN ID
39
52
  report_json (dict): 报告内容
40
53
  evaled_artifact_path: 评测结果制品路径
41
54
  prediction_artifact_path: 推理结果制品路径
42
55
  dataset_version_name (str): 数据集名称
43
-
56
+ user_id (int, optional): 用户ID,默认为0
57
+ access_user_ids (list): 授权访问的用户id
44
58
 
45
59
  Returns:
46
60
  id (int): 评测报告id
@@ -49,19 +63,65 @@ class EvalService:
49
63
  from .dataset_management import DatasetManagementService
50
64
 
51
65
  dataset_service = DatasetManagementService(self._http)
52
- dataset_version = dataset_service.get_dataset_version_by_name(
53
- dataset_version_name
54
- )
55
- payload = CreateEvalReq(
66
+ dataset_version = dataset_service.get_dataset_version_by_name(dataset_version_name)
67
+ payload = CreateLLMEvalReq(
56
68
  dataset_id=dataset_version.dataset_id,
57
69
  dataset_version_id=dataset_version.id,
58
70
  evaled_artifact_path=evaled_artifact_path,
59
71
  prediction_artifact_path=prediction_artifact_path,
60
72
  report=report_json,
61
73
  run_id=run_id,
74
+ user_id=user_id,
75
+ is_public=is_public,
76
+ type="llm",
77
+ client_type=ClientType.Workflow,
62
78
  )
79
+ resp = self._eval.create(payload)
80
+ if is_public is False and access_user_ids:
81
+ self.grant_permission(user_ids=access_user_ids, run_id=resp)
82
+
83
+ return resp
63
84
 
64
- return self._eval.create(payload)
85
+ def create_cv_run(
86
+ self,
87
+ run_id: str,
88
+ prediction_artifact_path: str,
89
+ metrics_artifact_path: str,
90
+ ground_truth_artifact_path: str,
91
+ user_id: int = 0,
92
+ is_public: bool = False,
93
+ access_user_ids: List[int] = None,
94
+ ) -> int:
95
+ """创建 CV 类型评测运行
96
+
97
+ Args:
98
+ access_user_ids: 授权访问的用户ID
99
+ is_public (bool): 是否公开
100
+ run_id (str): 运行ID
101
+ prediction_artifact_path (str): 推理产物的路径
102
+ metrics_artifact_path (str): 指标产物的路径
103
+ ground_truth_artifact_path (str): 真实标签产物的路径
104
+ user_id (int, optional): 用户ID,默认为0
105
+ access_user_ids (list): 授权访问的用户id
106
+
107
+ Returns:
108
+ id (int): 评测运行id
109
+ """
110
+ payload = CreateCVEvalReq(
111
+ run_id=run_id,
112
+ prediction_artifact_path=prediction_artifact_path,
113
+ metrics_artifact_path=metrics_artifact_path,
114
+ ground_truth_artifact_path=ground_truth_artifact_path,
115
+ user_id=user_id,
116
+ is_public=is_public,
117
+ type="cv",
118
+ client_type=ClientType.Workflow,
119
+ )
120
+ resp = self._eval.create(payload)
121
+ if is_public is False and access_user_ids:
122
+ self.grant_permission(user_ids=access_user_ids, run_id=resp)
123
+
124
+ return resp
65
125
 
66
126
  def list(
67
127
  self,
@@ -114,18 +174,40 @@ class EvalService:
114
174
 
115
175
  return self._eval.list(payload)
116
176
 
177
+ def grant_permission(self, user_ids: List[int], run_id: int):
178
+ """授权访问
179
+
180
+ Args:
181
+ user_ids (list): 授权信息
182
+ run_id (int): 任务ID
183
+
184
+ Returns:
185
+ dict: 授权信息
186
+ """
187
+ req = GrantPermissionReq(
188
+ user_ids=user_ids,
189
+ )
190
+ return self._eval.grant_permission(req, run_id)
191
+
117
192
 
118
193
  class _Eval:
119
194
  def __init__(self, http: httpx.Client):
120
195
  self._http = http
121
196
 
122
- def create(self, payload: CreateEvalReq) -> int:
197
+ def create(self, payload) -> int:
123
198
  resp = self._http.post(f"{_BASE}/run/", json=payload.model_dump())
124
199
  wrapper = APIWrapper[CreateEvalResp].model_validate(resp.json())
125
200
  if wrapper.code != 0:
126
201
  raise APIError(f"backend code {wrapper.code}: {wrapper.msg}")
127
202
  return wrapper.data.eval_run.id
128
203
 
204
+ def grant_permission(self, payload, task_id):
205
+ resp = self._http.post(f"{_BASE}/run/{task_id}/permissions", json=payload.model_dump())
206
+ wrapper = APIWrapper[CreateEvalResp].model_validate(resp.json())
207
+ if wrapper.code != 0:
208
+ raise APIError(f"backend code {wrapper.code}: {wrapper.msg}")
209
+ return wrapper.data
210
+
129
211
  def list(self, payload: ListEvalReq) -> ListEvalResp:
130
212
  # Build query parameters, excluding None values
131
213
  params = {}
@@ -84,6 +84,7 @@ class TaskCenterService:
84
84
  label_type: LabelProjectTypeEnum = LabelProjectTypeEnum.IMAGE_CLASSIFICATION,
85
85
  description: str = "",
86
86
  task_priority: TaskCenterPriorityEnum = TaskCenterPriorityEnum.low,
87
+ auto_valid_interval: int = 3,
87
88
  ) -> int:
88
89
  """创建标注任务
89
90
 
@@ -107,6 +108,7 @@ task_priority="low", estimated_delivery_at= "2025-08-01")
107
108
  label_type (LabelProjectTypeEnum): 标注项目类型,默认为图像分类
108
109
  description (str): 任务描述,默认为空
109
110
  task_priority (TaskCenterPriorityEnum): 任务优先级,默认为低优先级
111
+ auto_valid_interval(str): 标注自动验收时间(默认三天)
110
112
  Returns:
111
113
  任务ID
112
114
  """
@@ -153,6 +155,7 @@ task_priority="low", estimated_delivery_at= "2025-08-01")
153
155
  dataset_version_id=dataset_version_id,
154
156
  doc_id=doc_id,
155
157
  doc_type="doc_center",
158
+ auto_valid_interval=auto_valid_interval,
156
159
  )
157
160
  estimated_delivery_at_timestamp = date_str_to_timestamp(estimated_delivery_at)
158
161
  task_req = CreateTaskReq(
@@ -290,9 +290,9 @@ class UserSystemService:
290
290
  def delete_user(self, user_id: int) -> None:
291
291
  """删除用户
292
292
 
293
- Args:
294
- user_id: 目标用户 ID
295
- """
293
+ Args:
294
+ user_id: 目标用户 ID
295
+ """
296
296
  self._user.delete(user_id)
297
297
 
298
298
  def set_user_roles(self, user_id: int, payload: SetUserRolesRequest) -> None:
@@ -304,7 +304,12 @@ class UserSystemService:
304
304
  """
305
305
  self._user.set_roles(user_id, payload)
306
306
 
307
- def get_user_menus(self, user_id: int, parent_id: int | None = None, auth: str | None = None, ) -> List[TreeMenu]:
307
+ def get_user_menus(
308
+ self,
309
+ user_id: int,
310
+ parent_id: int | None = None,
311
+ auth: str | None = None,
312
+ ) -> List[TreeMenu]:
308
313
  """查询用户可见菜单
309
314
 
310
315
  Args:
@@ -317,7 +322,7 @@ class UserSystemService:
317
322
  """
318
323
  return self._user.get_menus(user_id, parent_id=parent_id, auth=auth)
319
324
 
320
- def search_users(self, payload: SearchUsersRequest) -> SearchUsersResponse:
325
+ def search_users(self, payload: SearchUsersRequest) -> List[User]:
321
326
  """条件搜索用户
322
327
 
323
328
  Args:
@@ -326,13 +331,15 @@ class UserSystemService:
326
331
  Returns:
327
332
  SearchUsersResponse: 搜索结果
328
333
  """
329
- return self._user.search(payload)
334
+ resp = self._user.search(payload)
335
+ return resp.data
330
336
 
331
- def search_one(self, payload: SearchUsersRequest) -> int:
337
+ def search_one(self, nickname: str) -> int:
332
338
  """搜索单个用户并返回其 ID
333
339
 
334
340
  Args:
335
- payload: 搜索条件
341
+ nickname: 用户昵称
342
+
336
343
 
337
344
  Returns:
338
345
  int: 命中的用户 ID
@@ -340,7 +347,10 @@ class UserSystemService:
340
347
  Raises:
341
348
  APIError: 未找到用户时抛出
342
349
  """
343
- return self._user.search_one(payload)
350
+ req = SearchUsersRequest(
351
+ nickname=nickname,
352
+ )
353
+ return self._user.search_one(req)
344
354
 
345
355
  @property
346
356
  def auth(self) -> _Auth:
@@ -568,6 +578,13 @@ class _User:
568
578
 
569
579
  def search_one(self, req: SearchUsersRequest) -> int:
570
580
  resp = self.search(req)
581
+
582
+ if resp.data is None:
583
+ raise APIError(f"no user found")
584
+
585
+ if len(resp.data) > 1:
586
+ raise APIError("more than one user found")
587
+
571
588
  for user in resp.data:
572
589
  if user.nickname == req.nickname:
573
590
  return user.id
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: intellif-aihub
3
- Version: 0.1.20
3
+ Version: 0.1.22
4
4
  Summary: Intellif AI-hub SDK.
5
5
  Author-email: Platform Team <aihub@example.com>
6
6
  License-Expression: Apache-2.0
@@ -1,4 +1,4 @@
1
- aihub/__init__.py,sha256=8XalsVoLEfXslFvdtUEmkNOuYShzOzYOcFbgmOz1oSk,23
1
+ aihub/__init__.py,sha256=zmP2TRnzKPjZJ1eiBcT-cRInsji6FW-OVD3FafQFCc4,23
2
2
  aihub/client.py,sha256=Fu3jlEy21T4nJDV5EXTDujy1_B3Pf6CSTyPwkj3PPuE,5574
3
3
  aihub/exceptions.py,sha256=l2cMAvipTqQOio3o11fXsCCSCevbuK4PTsxofkobFjk,500
4
4
  aihub/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -7,37 +7,37 @@ aihub/models/common.py,sha256=qmabc2LkAdQJXIcpT1P35zxd0Lc8yDYdD4ame1iF4Bs,241
7
7
  aihub/models/data_warehouse.py,sha256=zXvWwg7ySoFJMdqQ_1UMTNEKDMhu1hDHlWdBAXdizBk,3905
8
8
  aihub/models/dataset_management.py,sha256=4DuQ0zM7jv73SJiqvieHLtn2Y-T6FIFV9r7bgzyCtDo,10790
9
9
  aihub/models/document_center.py,sha256=od9bzx6krAS6ktIA-ChxeqGcch0v2wsS1flY2vuHXBc,1340
10
- aihub/models/eval.py,sha256=YFgaRQv8v_mR7i8t6KJ4w8l2TGugsL1BK4VRFr6iqd8,3304
10
+ aihub/models/eval.py,sha256=eebUv31GJ_gf7-vCYCLknN6utsPZw9G3t6ikZb9gK0I,4865
11
11
  aihub/models/labelfree.py,sha256=YUnUv0tjYSFAFzYtmbnLOha8rnDe32sb50HkPOclAzU,2016
12
12
  aihub/models/model_center.py,sha256=DNMchrN0pYDcTMHApWNNVMrARF_i9Ng5xlAwHX5isYw,5935
13
13
  aihub/models/model_training_platform.py,sha256=2zir5i-XvuxKKVYr4wuNYUC7nwMzetdtCRoysZ1W_Tc,11725
14
14
  aihub/models/quota_schedule_management.py,sha256=LdXwKkpJd0jUFSHtTHUlFLlH-NUSmgywWtxwFg57CNk,12368
15
15
  aihub/models/tag_resource_management.py,sha256=-FgiKyDIG7bZagzVRf-8rXWuqH9GyciDadxz5W2f3I8,2195
16
- aihub/models/task_center.py,sha256=rGCvrkDjHLLBQ46DtDA7UAJ4eBQ0jwxpQmSB1z3UHmw,6135
17
- aihub/models/user_system.py,sha256=58f4w5g_SHUhX4vvJK6RXChCr6IDjX4i957suWYaxg8,12249
16
+ aihub/models/task_center.py,sha256=D4cc3fd4zOhQH5X8VdQmdHckrnYjBGhjg55dBaJkous,6209
17
+ aihub/models/user_system.py,sha256=__JLHIUFCi2Ke3Wg7v0G5hqE2WoNJNTG4Gsj5E6vv3o,12259
18
18
  aihub/models/workflow_center.py,sha256=4xtI1WZ38ceXJ8gwDBj-QNjOiRlLO_8kGiQybdudJPY,20121
19
19
  aihub/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  aihub/services/artifact.py,sha256=lfOrgOT2AlH1w-75NLcQGOhVWdhmJcWD1gESPpUzqUw,11257
21
21
  aihub/services/data_warehouse.py,sha256=awvlJdggo8ph6sXweXXVp4GLRuUSD46LoD0QQksXRts,2964
22
22
  aihub/services/dataset_management.py,sha256=R7mFsJ1dNOI_p5yNj_rQdLolRC0UKEN4WejE7uOjVlE,21379
23
23
  aihub/services/document_center.py,sha256=dG67Ji-DOnzL2t-4x4gVfMt9fbSj_IjVHCLw5R-VTkQ,1813
24
- aihub/services/eval.py,sha256=ryXjbC2eCTTU4ot3vjJ4_HhGldjCuZ0LS4OYVwWaCoc,4505
24
+ aihub/services/eval.py,sha256=n1ytGzPJz-bwRyHoXaAugh7-u7Dak4aMYWklX3X_Pso,7287
25
25
  aihub/services/labelfree.py,sha256=xua62UWhVXTxJjHRyy86waaormnJjmpQwepcARBy_h0,1450
26
26
  aihub/services/model_center.py,sha256=QZXlldPZrbC6YkVG3eGw5_53qvFAim2QlXg3DflByTA,6215
27
27
  aihub/services/model_training_platform.py,sha256=38o6HJnyi3htFzpX7qj6UhzdqTchcXLRTYU0nM7ffJg,10176
28
28
  aihub/services/quota_schedule_management.py,sha256=UYOMwjXxJTgkpN6Rv5GzlcejtpZfu23PXlSKr0WihTY,9586
29
29
  aihub/services/reporter.py,sha256=ot93SmhxgwDJOzlHSCwlxDOuSydTWUEUQ-Ctp97wJBQ,669
30
30
  aihub/services/tag_resource_management.py,sha256=Bm_inSIzZbTc-e4LU9kvwtsPpM_yLwm8xzdrALjb6uY,2666
31
- aihub/services/task_center.py,sha256=ljy4lhyqVe2lnytp1h72mliqXUbSvEELT9KmxxPKdKc,8003
32
- aihub/services/user_system.py,sha256=IqWL4bnsKyyzuGT5l6adnw0qNXlH9PSo1-C_pFyOSzA,18868
31
+ aihub/services/task_center.py,sha256=UJXSo-8wjGvxAey2QPer84NrZ9t4xJK6FRQdJkm4o7w,8175
32
+ aihub/services/user_system.py,sha256=1OKqQDTwuaLILeNk8yA2g1CG6BMX9MsJZFZw_-PIlAg,19141
33
33
  aihub/services/workflow_center.py,sha256=caKxOlba0J1s1RUK6RUm1ndJSwAcZXEakRanu3sGKPU,17468
34
34
  aihub/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  aihub/utils/di.py,sha256=vFUzno5WbRKu6-pj8Hnz9IqT7xb9UDZQ4qpOFH1YAtM,11812
36
36
  aihub/utils/download.py,sha256=ZZVbcC-PnN3PumV7ZiJ_-srkt4HPPovu2F6Faa2RrPE,1830
37
37
  aihub/utils/http.py,sha256=AmfHHNjptuuSFx2T1twWCnerR_hLN_gd0lUs8z36ERA,547
38
38
  aihub/utils/s3.py,sha256=ISIBP-XdBPkURpXnN56ZnIWokOOg2SRUh_qvxJk-G1Q,2187
39
- intellif_aihub-0.1.20.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
40
- intellif_aihub-0.1.20.dist-info/METADATA,sha256=Jr4_my80mlDP_JR7KyR6Ayu5dzBI1WZ_quXnBfbfDAA,2949
41
- intellif_aihub-0.1.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
42
- intellif_aihub-0.1.20.dist-info/top_level.txt,sha256=vIvTtSIN73xv46BpYM-ctVGnyOiUQ9EWP_6ngvdIlvw,6
43
- intellif_aihub-0.1.20.dist-info/RECORD,,
39
+ intellif_aihub-0.1.22.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
40
+ intellif_aihub-0.1.22.dist-info/METADATA,sha256=DuDrCBkMMCiEHFQtkQwE1AdvA2JfVJmwWwvUMEMp6HM,2949
41
+ intellif_aihub-0.1.22.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
42
+ intellif_aihub-0.1.22.dist-info/top_level.txt,sha256=vIvTtSIN73xv46BpYM-ctVGnyOiUQ9EWP_6ngvdIlvw,6
43
+ intellif_aihub-0.1.22.dist-info/RECORD,,