# 切换当前分段版本

将一个已存在的分段版本切换为来源当前版本。

```text
PATCH https://moi.matrixorigin.cn/newmoi/semantic-models/{model_id}/sources/{source_row_id}/segment-versions/{version_id}/current
```

## 调用前准备

先[查询文档详情](get-document.md)，取得当前分段版本 ID 和索引版本作为基线，并确认要切换到的分段版本 ID。准备有目标工作区访问权限的个人访问令牌和目标工作区 ID。

下方示例使用：

- `$AI_STUDIO_API_KEY`：实际个人访问令牌，通过 `X-API-Key` Header 传递。
- `$WORKSPACE_ID`：目标工作区 ID，通过 `X-Workspace-ID` Header 传递。
- `$MODEL_ID`：知识库 ID。
- `$SOURCE_ROW_ID`：来源记录 ID。
- `$VERSION_ID`：要切换到的分段版本 ID。

## 路径参数

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `model_id` | integer | 知识库 ID。 |
| `source_row_id` | string | 来源记录 ID。 |
| `version_id` | string | 要切换到的分段版本 ID。 |

## 请求体

提交来源当前的版本基线。`version_id` 指向要切换到的版本，不应替代基线字段。

| 字段 | 类型 | 是否必填 | 说明 |
| --- | --- | --- | --- |
| `base_segment_version_id` | string | 是 | 调用前读取到的当前分段版本 ID。 |
| `base_index_version` | integer | 是 | 调用前读取到的当前索引版本。 |

## 请求示例

```bash
curl -X PATCH "https://moi.matrixorigin.cn/newmoi/semantic-models/$MODEL_ID/sources/$SOURCE_ROW_ID/segment-versions/$VERSION_ID/current" \
  -H "X-API-Key: $AI_STUDIO_API_KEY" \
  -H "X-Workspace-ID: $WORKSPACE_ID" \
  -H 'Content-Type: application/json' \
  -d '{
    "base_segment_version_id": "<SEGMENT_VERSION_ID>",
    "base_index_version": <INDEX_VERSION>
  }'
```

## 成功响应

成功时返回 `200` 和更新后的来源文档快照。

```json
{
  "code": "OK",
  "msg": "OK",
  "data": {
    "document": {
      "source": {
        "row_id": "src_01",
        "model_id": 401
      },
      "segment_status": {
        "available": true,
        "total": 2
      },
      "current_segment_version_id": "ver_01",
      "current_index_version": 1,
      "segment_versions": [
        {
          "version_id": "ver_01",
          "current": true,
          "index_version": 1
        },
        {
          "version_id": "ver_02",
          "current": false,
          "index_version": 2
        }
      ],
      "segments": [
        {
          "segment_id": "seg_01",
          "enabled": true
        }
      ]
    }
  }
}
```

响应字段如下。

字段路径中的 `[]` 表示数组中的每一项。例如，`data.document.segment_versions[].version_id` 表示 `data.document.segment_versions` 数组中每一项的 `version_id` 字段。

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `code` | string | 成功时为 `OK`。 |
| `msg` | string | 成功时为 `OK`。 |
| `data.document` | object | 切换后的来源文档快照。 |
| `data.document.current_segment_version_id` | string | 已切换到的当前分段版本 ID。 |
| `data.document.current_index_version` | integer | 当前索引版本。 |
| `data.document.segment_versions` | object（对象数组） | 所有分段版本。 |
| `data.document.segment_versions[].version_id` | string | 分段版本 ID。 |
| `data.document.segment_versions[].current` | boolean | 是否为当前版本。 |
| `data.document.segments` | object（对象数组） | 新当前版本中的分段。 |

## 错误响应

```json
{
  "code": "ErrNotFound",
  "msg": "resource not found",
  "data": null
}
```

### 常见 HTTP 错误

```{list-table}
:header-rows: 1
:widths: 12 22 32 34

* - HTTP 状态码
  - 错误代码
  - 常见原因
  - 建议操作
* - `400`
  - `ErrParamInvalid`
  - 路径 ID 或分段版本基线无效。
  - 重新读取文档后使用当前基线。
* - `401`
  - `ErrUnauthorized`
  - API Key 无效或已失效。
  - 检查 API Key。
* - `403`
  - `ErrForbidden`
  - 调用者没有更新来源的权限。
  - 检查工作区和对象授权。
* - `404`
  - `ErrNotFound`
  - 知识库、来源或分段版本不存在，或当前调用者不可见。
  - 重新确认路径 ID。
* - `409`
  - `ErrConflict`
  - 当前分段版本已变化。
  - 读取最新文档后重试。
* - `500`
  - `ErrServer`
  - 服务未能切换当前版本。
  - 保留脱敏后的响应信息后重试。
```

## 后续操作

[查询文档详情](get-document.md)确认当前分段版本已切换。
