Metadata-Version: 2.4
Name: huanxin
Version: 1.0.2
Summary: HuanXin Python SDK
Author: HuanXin team
License-Expression: Apache-2.0
Project-URL: Homepage, https://aihuanxin.cn
Keywords: huanxin,model,dataset,sdk
Classifier: Development Status :: 4 - Beta
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.31.0
Dynamic: license-file

# HuanXin SDK

HuanXin 平台 Python SDK。

## 安装

```bash
pip install huanxin
```

安装后也会提供 `huanxin` 命令行工具：

```bash
huanxin --help
```

## 1 创建模型

### 1.1 Python 示例

```python
from huanxin.hub.api import HubApi
from huanxin.hub.constants import ApplyScene, HardwareTypes, Industries, Languages, Licenses, ModelCategories, ModelLevels, ModelSizes, ModelTasks, OpenType, OwnerType

api = HubApi()
api.login(access_token="YOUR_SDK_TOKEN")

api.create_model(
    name="my-test-model",
    nameCn="我的测试模型",
    ownerType=OwnerType.ORG,
    orgName="my-test-org",
    license=Licenses.APACHE_V2,
    openType=OpenType.PUBLIC,
    category=(
        ModelCategories.COMPUTER_VISION,
        ModelTasks.FACIAL_HUMAN_BODY,
    ),
    isLocalized=True,
    applyScene=ApplyScene.INFERENCE,
    hardwareType=[
        HardwareTypes.ST910B2,
        HardwareTypes.TSMR100,
    ],
    industry=Industries.COMMUNICATION,
    language=[Languages.CHINESE, Languages.ENGLISH],
    modelSize=ModelSizes.BETWEEN_7B_30B,
    modelLevel=ModelLevels.L1,
    description="这是一个用于演示创建模型接口的测试模型示例。",
    file="./README.md",
    zones=[
        {"zoneName": "my-test-zone-1"},
        {"zoneName": "my-test-zone-2", "tagName": "my-test-tag"},
        {"zoneName": "my-test-zone-3", "tagName": "my-test-tag", "secondaryTagName": "my-test-secondary-tag"},
    ],
)
```

### 1.2 CLI 示例

```bash
huanxin create-model \
  --token YOUR_TOKEN \
  --name my-test-model \
  --nameCn 我的测试模型 \
  --ownerType 1 \
  --orgName my-test-org \
  --license "Apache Lincense 2.0" \
  --openType 0 \
  --category computer_vision,facial_human_body \
  --isLocalized \
  --applyScene 1 \
  --hardwareType ST910B2,TSMR100 \
  --industry 0 \
  --language language_chinese,language_english \
  --modelSize 7B-30B \
  --modelLevel L1 \
  --description "这是一个用于演示创建模型接口的测试模型示例。" \
  --file ./README.md \
  --zones my-test-zone-1,my-test-zone-2:my-test-tag,my-test-zone-3:my-test-tag:my-test-secondary-tag
```

### 1.3 字段说明

`create_model` 的字段说明如下：

| 字段 | 是否必填 | 输入方式                                                                                                                  |
| --- | --- |-----------------------------------------------------------------------------------------------------------------------|
| `name` | 是 | 模型英文名称，3-80 个字符，支持数字、英文大小写以及中划线（-）、下划线（_）、点号（.），首尾字符必须为英文字母或数字，不支持连续特殊符号                                                                                         |
| `nameCn` | 否 | 模型中文名称，3-80 个字符，支持中文、数字、英文大小写以及中划线（-）、下划线（_）、点号（.），首尾字符必须为中文、英文字母或数字，不支持连续特殊符号                                                                                    |
| `ownerType` | 是 | 模型所有者类型，取值见下文“所有者类型”                                                                                                  |
| `orgName` | 条件必填 | 当 `ownerType=1` 时必填，传组织名称；当 `ownerType=0` 时禁止填写                                                                            |
| `license` | 是 | 开源协议，取值见下文“开源协议”                                                                                                      |
| `openType` | 是 | 公开方式，取值见下文“公开方式”                                                                                                      |
| `category` | 是 | 模型分类，传二元组 `(一级分类, 二级分类)`，取值见下文“模型分类”                                                                                  |
| `isLocalized` | 是 | 是否为国产化模型，`True` 或 `False`                                                                                             |
| `applyScene` | 条件必填 | 当 `isLocalized=True` 时必填；当 `isLocalized=False` 时禁止填写。取值见下文“适配场景”                                                          |
| `hardwareType` | 条件必填 | 当 `isLocalized=True` 时必填，可传单个值或列表；当 `isLocalized=False` 时禁止填写。取值见下文“硬件类型”                                                 |
| `industry` | 否 | 所属行业，取值见下文“行业类型”                                                                                                      |
| `language` | 否 | 支持语言，可传单个值或列表，取值见下文“语言类型”                                                                                             |
| `modelSize` | 否 | 模型大小，取值见下文“模型大小”                                                                                                      |
| `modelLevel` | 否 | 模型级别，取值见下文“模型级别”                                                                                                      |
| `description` | 是 | 模型描述，20-500 个字符                                                                                                       |
| `file` | 是 | 本地 `README.md` 文件路径                                                                                                   |
| `zones` | 否 | 上架专区。Python 传 `[{"zoneName": "专区名称"}, {"zoneName": "专区名称", "tagName": "一级标签名称"}, {"zoneName": "专区名称", "tagName": "一级标签名称", "secondaryTagName": "二级标签名称"}]`；CLI 传 `专区名称`、`专区名称:一级标签名称` 或 `专区名称:一级标签名称:二级标签名称`，多个值用英文逗号分隔。传入层级必须与平台返回的专区层级一致：仅有专区时只传专区；有一级标签时必须传一级标签；有二级标签时必须传二级标签 |

### 1.4 可选值速查

#### 1.4.1 所有者类型

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `OwnerType.PERSONAL` | `0` | 个人 |
| `OwnerType.ORG` | `1` | 组织 |

#### 1.4.2 开源协议

`license` 可选值按“Python 常量=`CLI/Shell 实际值`”展示：

`Licenses.APACHE_V2`=`Apache Lincense 2.0`、`Licenses.AFL_3_0`=`AFL-3.O`、`Licenses.AGPL_3_0`=`agpl-3.0`、`Licenses.BSD_3_CLAUSE`=`BSD-3-Clause`、`Licenses.CC0_1_0`=`CC0-1.0`、`Licenses.CC_BY_4_0`=`CC-BY-4.0`、`Licenses.CC_BY_NC_4_0`=`CC-BY-NC-4.0`、`Licenses.CC_BY_NC_ND`=`CC-BY-NC-ND`、`Licenses.CC_BY_NC_SA_4_0`=`CC-BY-NC-SA-4.0`、`Licenses.CC_BY_SA_4_0`=`CC-BY-SA-4.0`、`Licenses.CREATIVEML_OPENRAIL_M`=`creativeml-openrail-m`、`Licenses.ECL_2_0`=`ECL-2.0`、`Licenses.GPL_2_0`=`GPL-2.0`、`Licenses.GPL_3_0`=`GPL-3.0`、`Licenses.LGPL_2_9`=`LGPL-2.9`、`Licenses.LGPL_3_0`=`LGPL-3.0`、`Licenses.MIT`=`MIT Lincense`、`Licenses.ODC_BY_1_0`=`ODC-BY-1.0`、`Licenses.OTHER`=`other`

#### 1.4.3 公开方式

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `OpenType.PUBLIC` | `0` | 公开 |
| `OpenType.PRIVATE` | `1` | 非公开 |
| `OpenType.APPLY` | `2` | 申请制 |

#### 1.4.4 模型分类

`category` 传 `(一级分类, 二级分类)` 二元组。

下列各项均按“Python 常量=`CLI/Shell 实际值`”展示。

一级分类：

- `ModelCategories.COMPUTER_VISION`=`computer_vision`：计算机视觉
- `ModelCategories.NATURAL_LANGUAGE_UNDERSTANDING`=`natural_language_understanding`：自然语言理解
- `ModelCategories.VOICE`=`voice`：语音
- `ModelCategories.MULTIMODAL`=`multimodal`：多模态
- `ModelCategories.OTHER`=`other`：其他

二级分类：

- 计算机视觉：`ModelTasks.FACIAL_HUMAN_BODY`=`facial_human_body`、`ModelTasks.VISUAL_CLASSIFICATION`=`visual_classification`、`ModelTasks.VISUAL_SEGMENTATION`=`visual_segmentation`、`ModelTasks.VISUAL_GENERATION`=`visual_generation`、`ModelTasks.OBJECT_DETECTION`=`object_detection`、`ModelTasks.OPTICAL_CHARACTER_RECOGNITION`=`optical-character-recognition`、`ModelTasks.VISUAL_EDITING`=`visual-editing`、`ModelTasks.LOW_LEVEL_VISION`=`low-level-vision`、`ModelTasks.VISUAL_REPRESENTATION`=`visual-representation`、`ModelTasks.VISUAL_QUALITY_ASSESSMENT`=`visual-quality-assessment`、`ModelTasks._3D_VISION`=`3d-vision`、`ModelTasks.FOUNDATION_MODEL_APPLICATION`=`foundation-model-application`
- 自然语言理解：`ModelTasks.TEXT_CLASSIFICATION`=`text_classification`、`ModelTasks.TEXT_GENERATION`=`text_generation`、`ModelTasks.PARTICIPLE`=`participle`、`ModelTasks.NAME_ENTITY_RECOGNITION`=`name_entity_recognition`、`ModelTasks.TEXT_SUMMARY`=`text_summary`、`ModelTasks.FEATURE_EXTRACTION`=`feature_extraction`、`ModelTasks.SENTIMENT_ANALYSIS`=`sentiment_analysis`、`ModelTasks.ENTITY_CLASSIFICATION`=`entity_classification`、`ModelTasks.FILL_MASK`=`fill-mask`、`ModelTasks.TOKEN_CLASSIFICATION`=`token-classification`、`ModelTasks.NLI`=`nli`、`ModelTasks.TEXT_ERROR_CORRECTION`=`text-error-correction`、`ModelTasks.SENTENCE_EMBEDDING`=`sentence-embedding`、`ModelTasks.TRANSLATION`=`translation`、`ModelTasks.SENTENCE_SIMILARITY`=`sentence-similarity`、`ModelTasks.RELATION_EXTRACTION`=`relation-extraction`、`ModelTasks.ZERO_SHOT_CLASSIFICATION`=`zero-shot-classification`、`ModelTasks.TABLE_QUESTION_ANSWERING`=`table-question-answering`、`ModelTasks.QUESTION_ANSWERING`=`question-answering`、`ModelTasks.PART_OF_SPEECH`=`part-of-speech`、`ModelTasks.CHATBOT`=`chatbot`、`ModelTasks.SIAMESE_UIE`=`siamese-uie`、`ModelTasks.TASK_ORIENTED_CONVERSATION`=`task-oriented-conversation`、`ModelTasks.SEMANTIC_SIMILARITY`=`semantic-similarity`、`ModelTasks.FAQ_QUESTION_ANSWERING`=`faq-question-answering`、`ModelTasks.DOCUMENT_SEGMENTATION`=`document-segmentation`、`ModelTasks.TEXT2TEXT_GENERATION`=`text2text-generation`、`ModelTasks.EXTRACTIVE_SUMMARIZATION`=`extractive-summarization`、`ModelTasks.TRANSLATION_EVALUATION`=`translation-evaluation`、`ModelTasks.UNIVERSAL_INFORMATION_EXTRACTION`=`universal-information-extraction`
- 语音：`ModelTasks.SPEECH_RECOGNITION`=`speech_recognition`、`ModelTasks.SPEECH_SYNTHESIS`=`speech_synthesis`、`ModelTasks.SPEECH_NOISE_REDUCTION`=`speech_noise_reduction`、`ModelTasks.SPEECH_SEPARATION`=`speech_separation`、`ModelTasks.AUDIO_CLASSIFICATION`=`audio_classification`、`ModelTasks.EMOTIONAL_RECOGNITION`=`emotional_recognition`、`ModelTasks.AUDIO_GENERATION`=`audio-generation`、`ModelTasks.SPEAKER_VERIFICATION`=`speaker-verification`、`ModelTasks.SPEAKER_DIARIZATION`=`speaker-diarization`、`ModelTasks.PUNCTUATION`=`punctuation`、`ModelTasks.TIMESTAMP_PREDICTION`=`timestamp-prediction`、`ModelTasks.VOICE_ACTIVITY_DETECTION`=`voice-activity-detection`、`ModelTasks.LANGUAGE_SCORE_PREDICTION`=`language-score-prediction`、`ModelTasks.SPEECH_LANGUAGE_RECOGNITION`=`speech-language-recognition`、`ModelTasks.AUDIO_CODEC`=`audio-codec`、`ModelTasks.AUDIO_VISUAL_SPEECH_RECOGNITION`=`audio-visual-speech-recognition`、`ModelTasks.ACOUSTIC_ECHO_CANCELLATION`=`acoustic-echo-cancellation`、`ModelTasks.KEYWORD_SPOTTING`=`keyword-spotting`、`ModelTasks.INVERSE_TEXT_PROCESSING`=`inverse-text-processing`
- 多模态：`ModelTasks.TEXT_GENERATED_IMAGES`=`text_generated_images`、`ModelTasks.TEXT_GENERATED_VIDEO`=`text_generated_video`、`ModelTasks.VIDEO_DESCRIPTION`=`video_description`、`ModelTasks.MULTIMODAL_DIALOGUE`=`multimodal_dialogue`、`ModelTasks.EMBODIED_INTELLIGENCE`=`embodied_intelligence`、`ModelTasks.VISUAL_GROUNDING`=`visual-grounding`、`ModelTasks.MULTI_MODAL_EMBEDDING`=`multi-modal-embedding`、`ModelTasks.VISUAL_QUESTION_ANSWERING`=`visual-question-answering`、`ModelTasks.VIDEO_QUESTION_ANSWERING`=`video-question-answering`、`ModelTasks.IMAGE_TEXT_RETRIEVAL`=`image-text-retrieval`、`ModelTasks.VISUAL_ENTAILMENT`=`visual-entailment`、`ModelTasks.GENERATIVE_MULTI_MODAL_EMBEDDING`=`generative-multi-modal-embedding`、`ModelTasks.MULTI_MODAL_SIMILARITY`=`multi-modal-similarity`、`ModelTasks.DOCUMENT_UNDERSTANDING`=`document-understanding`、`ModelTasks.VIDEO_TEMPORAL_GROUNDING`=`video-temporal-grounding`、`ModelTasks.EFFICIENT_DIFFUSION_TUNING`=`efficient-diffusion-tuning`、`ModelTasks.IMAGE_TO_VIDEO`=`image-to-video`、`ModelTasks.UNIFIED_MULTI_MODAL`=`unified-multi-modal`、`ModelTasks.IMAGE_TO_IMAGE`=`image-to-image`、`ModelTasks.IMAGE_TEXT_TO_TEXT`=`image-text-to-text`、`ModelTasks.IMAGE_CAPTIONING`=`image-captioning`
- 其他：`ModelTasks.OTHER1`=`other1`

旧名称 `ModelTasks.VISION_3D` 和 `ModelTasks.OTHER` 仍可使用，分别是 `ModelTasks._3D_VISION` 和 `ModelTasks.OTHER1` 的兼容别名。

#### 1.4.5 适配场景

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `ApplyScene.TRAINING` | `0` | 训练 |
| `ApplyScene.INFERENCE` | `1` | 推理 |
| `ApplyScene.TRAINING_AND_INFERENCE` | `2` | 训推一体 |

#### 1.4.6 硬件类型

`hardwareType` 可传单个值或列表。Python 使用 `HardwareTypes.<常量名>`，CLI/Shell 使用等号右侧的实际值：

- 昇腾：`HardwareTypes.ST300I`=`ST300I`、`HardwareTypes.ST910B2`=`ST910B2`、`HardwareTypes.ST910B3`=`ST910B3`、`HardwareTypes.ST910B4`=`ST910B4`、`HardwareTypes.ST910C`=`ST910C`
- 天数：`HardwareTypes.TSMR50`=`TSMR50`、`HardwareTypes.TSMR100`=`TSMR100`、`HardwareTypes.TSTG100`=`TSTG100`、`HardwareTypes.TSTGBIV150`=`TSTGBIV150`
- 昆仑芯：`HardwareTypes.KLR200`=`KLR200`、`HardwareTypes.KLP600`=`KLP600`、`HardwareTypes.KLP800`=`KLP800`、`HardwareTypes.KLRG800`=`KLRG800`
- 海光：`HardwareTypes.HGK100AI`=`HGK100AI`、`HardwareTypes.HGBW1000`=`HGBW1000`、`HardwareTypes.HGDCUZ100`=`HGDCUZ100`
- 寒武纪：`HardwareTypes.HWJMLUX8`=`HWJMLUX8`、`HardwareTypes.HWJMLU590`=`HWJMLU590`
- 燧原：`HardwareTypes.SYT20`=`SYT20`、`HardwareTypes.SYI20`=`SYI20`、`HardwareTypes.SYT21`=`SYT21`、`HardwareTypes.SYS60`=`SYS60`
- 壁仞：`HardwareTypes.BRBR106M`=`BRBR106M`
- 沐曦：`HardwareTypes.MXC500`=`MXC500`
- 摩尔线程：`HardwareTypes.MES4000`=`MES4000`、`HardwareTypes.MES5000`=`MES5000`、`HardwareTypes.MES6000`=`MES6000`
- 平头哥：`HardwareTypes.PTGPPU`=`PTGPPU`

#### 1.4.7 行业类型

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `Industries.COMMUNICATION` | `0` | 通信 |
| `Industries.FINANCE` | `1` | 金融 |
| `Industries.PETROCHEMICAL` | `2` | 石油化工 |
| `Industries.ENERGY_POWER` | `3` | 能源电力类 |
| `Industries.INFORMATION_TECHNOLOGY` | `4` | 信息技术 |
| `Industries.AUTOMOTIVE` | `5` | 汽车 |
| `Industries.CONSTRUCTION` | `6` | 建筑 |
| `Industries.TRANSPORTATION_LOGISTICS` | `7` | 运输物流 |
| `Industries.HEALTHCARE` | `8` | 医疗 |
| `Industries.AGRICULTURE` | `9` | 农业 |
| `Industries.INDUSTRY` | `10` | 工业 |
| `Industries.TRADE` | `11` | 贸易 |
| `Industries.MILITARY` | `12` | 军工 |
| `Industries.OTHER` | `13` | 其他 |

#### 1.4.8 语言类型

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `Languages.CHINESE` | `language_chinese` | 中文 |
| `Languages.ENGLISH` | `language_english` | 英文 |
| `Languages.OTHER` | `language_other` | 其他 |

#### 1.4.9 模型大小

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `ModelSizes.BELOW_1B` | `1B_below` | 1B以下 |
| `ModelSizes.BETWEEN_1B_7B` | `1B_7B` | 1B-7B |
| `ModelSizes.BETWEEN_7B_30B` | `7B-30B` | 7B-30B |
| `ModelSizes.BETWEEN_30B_80B` | `30B-80B` | 30B-80B |
| `ModelSizes.BETWEEN_80B_150B` | `80B-150B` | 80B-150B |
| `ModelSizes.ABOVE_150B` | `150_above` | 150B以上 |

#### 1.4.10 模型级别

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `ModelLevels.L0` | `L0` | 通用大模型（L0） |
| `ModelLevels.L1` | `L1` | 行业大模型（L1） |
| `ModelLevels.L2` | `L2` | 场景大模型（L2） |

## 2 创建数据集

### 2.1 Python 示例

```python
from huanxin.hub.api import HubApi
from huanxin.hub.constants import DatasetCategories, DatasetTasks, DatasetUsagePhase, Industries, Licenses, OpenType, OwnerType

api = HubApi()
api.login(access_token="YOUR_SDK_TOKEN")

api.create_dataset(
    name="my-test-dataset",
    nameCn="我的测试数据集",
    ownerType=OwnerType.ORG,
    orgName="my-test-org",
    license=Licenses.APACHE_V2,
    openType=OpenType.PUBLIC,
    category=(
        DatasetCategories.IMAGE,
        DatasetTasks.FACE_BODY,
    ),
    usagePhase=DatasetUsagePhase.TRAIN,
    industry=Industries.COMMUNICATION,
    description="这是一个用于演示创建数据集接口的测试数据集示例。",
    file="./README.md",
    zones=[
        {"zoneName": "my-test-zone-1"},
        {"zoneName": "my-test-zone-2", "tagName": "my-test-tag"},
        {"zoneName": "my-test-zone-3", "tagName": "my-test-tag", "secondaryTagName": "my-test-secondary-tag"},
    ],
)
```

### 2.2 CLI 示例

```bash
huanxin create-dataset \
  --token YOUR_TOKEN \
  --name my-test-dataset \
  --nameCn 我的测试数据集 \
  --ownerType 1 \
  --orgName my-test-org \
  --license "Apache Lincense 2.0" \
  --openType 0 \
  --category image,face_body \
  --usagePhase 0 \
  --industry 0 \
  --description "这是一个用于演示创建数据集接口的测试数据集示例。" \
  --file ./README.md \
  --zones my-test-zone-1,my-test-zone-2:my-test-tag,my-test-zone-3:my-test-tag:my-test-secondary-tag
```

### 2.3 字段说明

`create_dataset` 的字段说明如下：

| 字段 | 是否必填 | 输入方式 |
| --- | --- | --- |
| `name` | 是 | 数据集英文名称，3-80 个字符，支持数字、英文大小写以及中划线（-）、下划线（_）、点号（.），首尾字符必须为英文字母或数字，不支持连续特殊符号 |
| `nameCn` | 否 | 数据集中文名称，3-80 个字符，支持中文、数字、英文大小写以及中划线（-）、下划线（_）、点号（.），首尾字符必须为中文、英文字母或数字，不支持连续特殊符号 |
| `ownerType` | 是 | 数据集所有者类型，取值见下文“所有者类型” |
| `orgName` | 条件必填 | 当 `ownerType=1` 时必填，传组织名称；当 `ownerType=0` 时禁止填写 |
| `license` | 是 | 开源协议，取值见下文“开源协议” |
| `openType` | 是 | 公开方式，取值见下文“公开方式” |
| `category` | 是 | 数据集分类，传二元组 `(一级分类, 二级分类)`，取值见下文“数据集分类” |
| `usagePhase` | 否 | 使用环节，取值见下文“数据集使用环节” |
| `industry` | 否 | 所属行业，取值见下文“行业类型” |
| `description` | 是 | 数据集描述，20-500 个字符 |
| `file` | 是 | 本地 `README.md` 文件路径，文件名必须为 `README.md` |
| `zones` | 否 | 上架专区。Python 传 `[{"zoneName": "专区名称"}, {"zoneName": "专区名称", "tagName": "一级标签名称"}, {"zoneName": "专区名称", "tagName": "一级标签名称", "secondaryTagName": "二级标签名称"}]`；CLI 传 `专区名称`、`专区名称:一级标签名称` 或 `专区名称:一级标签名称:二级标签名称`，多个值用英文逗号分隔。传入层级必须与平台返回的专区层级一致：仅有专区时只传专区；有一级标签时必须传一级标签；有二级标签时必须传二级标签 |

### 2.4 可选值速查

#### 2.4.1 所有者类型

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `OwnerType.PERSONAL` | `0` | 个人 |
| `OwnerType.ORG` | `1` | 组织 |

#### 2.4.2 开源协议

`license` 可选值按“Python 常量=`CLI/Shell 实际值`”展示：

`Licenses.APACHE_V2`=`Apache Lincense 2.0`、`Licenses.AFL_3_0`=`AFL-3.O`、`Licenses.AGPL_3_0`=`agpl-3.0`、`Licenses.BSD_3_CLAUSE`=`BSD-3-Clause`、`Licenses.CC0_1_0`=`CC0-1.0`、`Licenses.CC_BY_4_0`=`CC-BY-4.0`、`Licenses.CC_BY_NC_4_0`=`CC-BY-NC-4.0`、`Licenses.CC_BY_NC_ND`=`CC-BY-NC-ND`、`Licenses.CC_BY_NC_SA_4_0`=`CC-BY-NC-SA-4.0`、`Licenses.CC_BY_SA_4_0`=`CC-BY-SA-4.0`、`Licenses.CREATIVEML_OPENRAIL_M`=`creativeml-openrail-m`、`Licenses.ECL_2_0`=`ECL-2.0`、`Licenses.GPL_2_0`=`GPL-2.0`、`Licenses.GPL_3_0`=`GPL-3.0`、`Licenses.LGPL_2_9`=`LGPL-2.9`、`Licenses.LGPL_3_0`=`LGPL-3.0`、`Licenses.MIT`=`MIT Lincense`、`Licenses.ODC_BY_1_0`=`ODC-BY-1.0`、`Licenses.OTHER`=`other`

#### 2.4.3 公开方式

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `OpenType.PUBLIC` | `0` | 公开 |
| `OpenType.PRIVATE` | `1` | 非公开 |
| `OpenType.APPLY` | `2` | 申请制 |

#### 2.4.4 数据集分类

`category` 传 `(一级分类, 二级分类)` 二元组。

下列各项均按“Python 常量=`CLI/Shell 实际值`”展示。

一级分类：

- `DatasetCategories.TEXT`=`text`：文本
- `DatasetCategories.IMAGE`=`image`：图像
- `DatasetCategories.VIDEO`=`video`：视频
- `DatasetCategories.VOICE`=`voice`：音频
- `DatasetCategories.MULTIMODAL`=`multimodal`：多模态
- `DatasetCategories.NETWORK_DATA`=`network_data`：网络数据
- `DatasetCategories.OTHER`=`other`：其他

二级分类：

- 文本：`DatasetTasks.TEXT_CLASSIFICATION`=`text_classification`、`DatasetTasks.TEXT_GENERATE`=`text_generate`、`DatasetTasks.PARTICIPLE`=`participle`、`DatasetTasks.RELATION_EXTRACTION`=`relation extraction`、`DatasetTasks.TEXT_SUMMARY`=`text_summary`、`DatasetTasks.MACHINE_TRANSLATE`=`machine_translate`、`DatasetTasks.INTELLECTUAL_DIALOGUE`=`intellectual dialogue`、`DatasetTasks.SENTENCE_SIMILARITY`=`sentence_similarity`
- 图像：`DatasetTasks.FACE_BODY`=`face_body`、`DatasetTasks.IMAGE_CLASSIFICATION`=`image_classification`、`DatasetTasks.TARGET_DETECTION`=`target_detection`、`DatasetTasks.IMAGE_DIVIDE`=`image_divide`、`DatasetTasks.CHARACTER_RECOGNITION`=`character_recognition`、`DatasetTasks.IMAGE_GENERATE`=`image_generate`、`DatasetTasks.IMAGE_EDIT`=`image_edit`
- 视频：`DatasetTasks.TARGET_TRACKING`=`target_tracking`、`DatasetTasks.VIDEO_DIVIDE`=`video_divide`、`DatasetTasks.ACTION_RECOGNITION`=`action_recognition`、`DatasetTasks.VIDEO_GENERATE`=`video_generate`、`DatasetTasks.BEHAVIOR_UNDERSTANDING`=`behavior_understanding`、`DatasetTasks._3D_HUMAN_KEYPOINTS`=`3D_human_keypoints`、`DatasetTasks.VIDEO_CLASSIFICATION`=`video_classification`
- 音频：`DatasetTasks.SPEECH_RECOGNITION`=`speech_recognition`、`DatasetTasks.SPEECH_SYNTHESIS`=`speech_synthesis`、`DatasetTasks.SPEECH_NOISE_REDUCTION`=`speech_noise_reduction`、`DatasetTasks.SPEECH_SIGNAL_PROCESSING`=`speech_signal_processing`、`DatasetTasks.AUDIO_CLASSIFICATION`=`audio_classification`、`DatasetTasks.SPEECH_ENDPOINT_DETECTION`=`speech_endpoint_detection`、`DatasetTasks.VOICE_WAKEUP`=`voice_wakeup`、`DatasetTasks.EMOTIONAL_RECOGNITION`=`emotional_recognition`
- 多模态：`DatasetTasks.IMAGE_DESCRIPTION`=`image_description`、`DatasetTasks.TEXT_TO_IMAGE`=`text_to_image`、`DatasetTasks.TEXT_TO_VIDEO`=`text_to_video`、`DatasetTasks.VIDEO_DESCRIPTION`=`video_description`、`DatasetTasks.VISUAL_INFORMATION_EXTRACTION`=`visual_information_extraction`、`DatasetTasks.EMBODIED_INTELLIGENCE`=`embodied_intelligence`
- 网络数据：`DatasetTasks.OTHER2`=`other2`
- 其他：`DatasetTasks.OTHER1`=`other1`

旧名称 `DatasetTasks.HUMAN_KEYPOINTS_3D`、`DatasetTasks.OTHER_NETWORK_DATASET` 和 `DatasetTasks.OTHER_DATASET` 仍可使用，分别对应 `DatasetTasks._3D_HUMAN_KEYPOINTS`、`DatasetTasks.OTHER2` 和 `DatasetTasks.OTHER1`。

#### 2.4.5 数据集使用环节

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `DatasetUsagePhase.TRAIN` | `0` | 训练集 |
| `DatasetUsagePhase.TEST` | `1` | 测试集 |

#### 2.4.6 行业类型

| Python 常量 | CLI/Shell 值 | 含义 |
| --- | --- | --- |
| `Industries.COMMUNICATION` | `0` | 通信 |
| `Industries.FINANCE` | `1` | 金融 |
| `Industries.PETROCHEMICAL` | `2` | 石油化工 |
| `Industries.ENERGY_POWER` | `3` | 能源电力类 |
| `Industries.INFORMATION_TECHNOLOGY` | `4` | 信息技术 |
| `Industries.AUTOMOTIVE` | `5` | 汽车 |
| `Industries.CONSTRUCTION` | `6` | 建筑 |
| `Industries.TRANSPORTATION_LOGISTICS` | `7` | 运输物流 |
| `Industries.HEALTHCARE` | `8` | 医疗 |
| `Industries.AGRICULTURE` | `9` | 农业 |
| `Industries.INDUSTRY` | `10` | 工业 |
| `Industries.TRADE` | `11` | 贸易 |
| `Industries.MILITARY` | `12` | 军工 |
| `Industries.OTHER` | `13` | 其他 |

## 3 上传模型

### 3.1 前提条件

请确保安装 Git 和 Git LFS。

### 3.2 Python 示例

```python
from huanxin.hub.api import HubApi
from huanxin.hub.constants import OwnerType

api = HubApi()
api.login(access_token="YOUR_SDK_TOKEN")

api.push_model(
    ownerType=OwnerType.ORG,
    owner="my-test-org",
    name="my-test-model",
    localPath="./my-test-model-dir",
    branch="my-test-branch",
    commitMessage="upload my-test-model files",
    exclude=["*.log"],
    lfsSuffix=["*.safetensors"],
    lfsActivityTimeout=3600,
)
```

### 3.3 CLI 示例

```bash
huanxin push-model \
  --token YOUR_TOKEN \
  --ownerType 1 \
  --owner my-test-org \
  --name my-test-model \
  --localPath ./my-test-model-dir \
  --branch my-test-branch \
  --commitMessage "upload my-test-model files" \
  --exclude "*.log" \
  --lfsSuffix "*.safetensors" \
  --lfsActivityTimeout 3600
```

### 3.4 字段说明

`push_model` 的字段说明如下：

| 字段 | 是否必填 | 输入方式                                                              |
| --- | --- |-------------------------------------------------------------------|
| `ownerType` | 是 | 模型所有者类型，取值见下文“所有者类型”                                              |
| `owner` | 是 | 模型所有者标识，个人场景传用户名，组织场景传组织名称                                        |
| `name` | 是 | 模型英文名称，3-80 个字符，支持数字、英文大小写以及中划线（-）、下划线（_）、点号（.），首尾字符必须为英文字母或数字，不支持连续特殊符号                                   |
| `localPath` | 是 | 本地模型目录路径                                                          |
| `branch` | 否 | 目标分支，默认 `master`；必须是远程已存在的分支                                       |
| `commitMessage` | 否 | git commit 信息，默认 `upload model`                                   |
| `exclude` | 否 | 忽略上传的文件或目录模式，可传单个值或多个值，多个值用英文逗号分隔                                 |
| `lfsSuffix` | 否 | 使用 git lfs 管理的大文件模式，可传单个值或多个值，多个值用英文逗号分隔，例如 `*.safetensors,*.bin` |
| `lfsActivityTimeout` | 否 | Git LFS HTTP 客户端等待下一次 TCP 读/写的最长时间，单位秒，默认 `3600` |

使用 `lfsSuffix` 前，请先确保本机已完成 `git-lfs` 环境准备，例如已安装 `git-lfs` 并执行过 `git lfs install`。

### 3.5 可选值速查

#### 3.5.1 所有者类型

| 值 | 含义 |
| --- | --- |
| `0` | 个人 |
| `1` | 组织 |

## 4 上传数据集

### 4.1 前提条件

请确保安装 Git 和 Git LFS。

### 4.2 Python 示例

```python
from huanxin.hub.api import HubApi
from huanxin.hub.constants import OwnerType

api = HubApi()
api.login(access_token="YOUR_SDK_TOKEN")

api.push_dataset(
    ownerType=OwnerType.ORG,
    owner="my-test-org",
    name="my-test-dataset",
    localPath="./my-test-dataset-dir",
    branch="my-test-branch",
    commitMessage="upload my-test-dataset files",
    exclude=["*.log"],
    lfsSuffix=["*.zip"],
    lfsActivityTimeout=3600,
)
```

### 4.3 CLI 示例

```bash
huanxin push-dataset \
  --token YOUR_TOKEN \
  --ownerType 1 \
  --owner my-test-org \
  --name my-test-dataset \
  --localPath ./my-test-dataset-dir \
  --branch my-test-branch \
  --commitMessage "upload my-test-dataset files" \
  --exclude "*.log" \
  --lfsSuffix "*.zip" \
  --lfsActivityTimeout 3600
```

### 4.4 字段说明

`push_dataset` 的字段说明如下：

| 字段 | 是否必填 | 输入方式 |
| --- | --- | --- |
| `ownerType` | 是 | 数据集所有者类型，取值见下文“所有者类型” |
| `owner` | 是 | 数据集所有者标识，个人场景传用户名，组织场景传组织名称 |
| `name` | 是 | 数据集英文名称，3-80 个字符，支持数字、英文大小写以及中划线（-）、下划线（_）、点号（.），首尾字符必须为英文字母或数字，不支持连续特殊符号 |
| `localPath` | 是 | 本地数据集目录路径 |
| `branch` | 否 | 目标分支，默认 `master`；必须是远程已存在的分支 |
| `commitMessage` | 否 | git commit 信息，默认 `upload dataset` |
| `exclude` | 否 | 忽略上传的文件或目录模式，可传单个值或多个值，多个值用英文逗号分隔 |
| `lfsSuffix` | 否 | 使用 git lfs 管理的大文件模式，可传单个值或多个值，多个值用英文逗号分隔，例如 `*.zip,*.tar` |
| `lfsActivityTimeout` | 否 | Git LFS HTTP 客户端等待下一次 TCP 读/写的最长时间，单位秒，默认 `3600` |

使用 `lfsSuffix` 前，请先确保本机已完成 `git-lfs` 环境准备，例如已安装 `git-lfs` 并执行过 `git lfs install`。

### 4.5 可选值速查

#### 4.5.1 所有者类型

| 值 | 含义 |
| --- | --- |
| `0` | 个人 |
| `1` | 组织 |

## 5 下载模型

### 5.1 前提条件

请确保安装 Git。下载 Git LFS 文件时，也需要安装 Git LFS。

### 5.2 Python 示例

```python
from huanxin.hub.api import HubApi
from huanxin.hub.constants import OwnerType

api = HubApi()
api.login(access_token="YOUR_SDK_TOKEN")

api.download_model(
    ownerType=OwnerType.ORG,
    owner="my-test-org",
    name="my-test-model",
    localPath="./my-test-model",
    branch="master",
)
```

### 5.3 CLI 示例

```bash
huanxin download-model \
  --token YOUR_TOKEN \
  --ownerType 1 \
  --owner my-test-org \
  --name my-test-model \
  --localPath ./my-test-model \
  --branch master
```

### 5.4 字段说明

`download_model` 的字段说明如下：

| 字段 | 是否必填 | 输入方式 |
| --- | --- | --- |
| `ownerType` | 是 | 模型所有者类型，取值见下文“所有者类型” |
| `owner` | 是 | 模型所有者标识，个人场景传用户名，组织场景传组织名称 |
| `name` | 是 | 模型英文名称，3-80 个字符，支持数字、英文大小写以及中划线（-）、下划线（_）、点号（.），首尾字符必须为英文字母或数字，不支持连续特殊符号 |
| `localPath` | 是 | 本地下载目录路径。目录不存在时自动创建；目录已存在时必须为空 |
| `branch` | 否 | 下载分支。不传时使用平台返回的默认分支 |

### 5.5 可选值速查

#### 5.5.1 所有者类型

| 值 | 含义 |
| --- | --- |
| `0` | 个人 |
| `1` | 组织 |

## 6 下载数据集

### 6.1 前提条件

请确保安装 Git。下载 Git LFS 文件时，也需要安装 Git LFS。

### 6.2 Python 示例

```python
from huanxin.hub.api import HubApi
from huanxin.hub.constants import OwnerType

api = HubApi()
api.login(access_token="YOUR_SDK_TOKEN")

api.download_dataset(
    ownerType=OwnerType.ORG,
    owner="my-test-org",
    name="my-test-dataset",
    localPath="./my-test-dataset",
    branch="master",
)
```

### 6.3 CLI 示例

```bash
huanxin download-dataset \
  --token YOUR_TOKEN \
  --ownerType 1 \
  --owner my-test-org \
  --name my-test-dataset \
  --localPath ./my-test-dataset \
  --branch master
```

### 6.4 字段说明

`download_dataset` 的字段说明如下：

| 字段 | 是否必填 | 输入方式 |
| --- | --- | --- |
| `ownerType` | 是 | 数据集所有者类型，取值见下文“所有者类型” |
| `owner` | 是 | 数据集所有者标识，个人场景传用户名，组织场景传组织名称 |
| `name` | 是 | 数据集英文名称，3-80 个字符，支持数字、英文大小写以及中划线（-）、下划线（_）、点号（.），首尾字符必须为英文字母或数字，不支持连续特殊符号 |
| `localPath` | 是 | 本地下载目录路径。目录不存在时自动创建；目录已存在时必须为空 |
| `branch` | 否 | 下载分支。不传时使用平台返回的默认分支 |

### 6.5 可选值速查

#### 6.5.1 所有者类型

| 值 | 含义 |
| --- | --- |
| `0` | 个人 |
| `1` | 组织 |
