돌아가기 4단계 - 작업 설정
태스크 할당, 반려 설정 및 어노테이터 유형별 추가 옵션을 구성하는 단계입니다.

## 기본 설정

| 항목 | 설명 | 기본값 |
|------|------|--------|
| **태스크당 최대 할당 수** | 하나의 태스크에 할당할 수 있는 최대 작업자 수 | 1 |
| **반려 가능 여부** | 라벨링 작업자가 태스크를 반려할 수 있는지 설정 | 비활성 |

## 어노테이터 유형별 추가 옵션

선택한 어노테이터 유형에 따라 추가 옵션이 표시됩니다.

### 비디오 어노테이터

| 항목 | 설명 |
|------|------|
| **프레임 간격** | 어노테이션 대상 프레임의 간격 설정 |

### 프롬프트 어노테이터

| 항목 | 설명 |
|------|------|
| **프롬프트 편집 허용** | 작업자가 프롬프트를 수정할 수 있는지 설정 |
| **답변 편집 허용** | 작업자가 LLM 답변을 수정할 수 있는지 설정 |

:::note[유형별 옵션]
이미지, 오디오, PCD, 텍스트 어노테이터에서는 추가 옵션이 표시되지 않습니다.
:::

## 스마트 도구(플러그인)

프로젝트에서 사용할 스마트 도구(플러그인)를 설정할 수 있습니다. 스마트 도구는 라벨링 작업을 보조하는 자동화 도구입니다.

| 항목 | 설명 |
|------|------|
| **플러그인** | 사용할 플러그인 선택 |
| **에이전트** | 플러그인에서 사용할 에이전트 설정 |
| **파라미터** | 플러그인 실행에 필요한 파라미터 설정 |

:::tip[스마트 도구]
스마트 도구는 사전에 등록된 플러그인이 있어야 설정할 수 있습니다. 등록된 플러그인이 없으면 이 섹션을 건너뛸 수 있습니다.
:::

## API 흐름

"다음 단계" 클릭 시 현재 Draft에서 3단계의 `configuration`을 가져와 4단계 데이터와 병합한 뒤 서버에 전송합니다.

### 1. Draft 조회 — `GET /drafts/CREATE/`

4단계 제출 전에 Draft를 조회하여 3단계에서 저장한 `configuration` 데이터를 가져옵니다.

**Request**

```
GET /drafts/CREATE/
```

**Response (200 OK)**

```json
{
  "target": "CREATE",
  "data": {
    "phase": 3,
    "category": "image",
    "title": "자동차 객체 검출 프로젝트",
    "access_level": "public",
    "data_collection": 1,
    "configuration": {
      "schema_type": "dm_schema",
      "classification": { ... }
    }
  }
}
```

### 2. 단계별 데이터 검증 — `POST /projects/`

기본 작업 설정과 3단계 `configuration`을 병합하여 `phase: 4`와 함께 전송합니다.

**Request (기본)**

```json
POST /projects/

{
  "phase": 4,
  "can_discard": false,
  "count_max_assignments_per_task": 3,
  "configuration": {
    "schema_type": "dm_schema",
    "classification": { ... }
  },
  "project_plugins": []
}
```

| 필드 | 타입 | 필수 | 설명 |
|------|------|------|------|
| `phase` | `integer` | 필수 | 현재 단계 번호 (`4`) |
| `can_discard` | `boolean` | 필수 | 반려(불량) 허용 여부 |
| `count_max_assignments_per_task` | `integer` | 필수 | 태스크당 최대 할당 수. `0`이면 무제한 |
| `configuration` | `object` | 필수 | 3단계 configuration에 4단계 옵션을 병합한 객체 |
| `project_plugins` | `array` | 선택 | 스마트 도구(플러그인) 설정 목록 |

#### 비디오 어노테이터 추가 필드

비디오 카테고리의 경우 `configuration`에 프레임 간격이 추가됩니다.

```json
{
  "phase": 4,
  "can_discard": false,
  "count_max_assignments_per_task": 1,
  "configuration": {
    "schema_type": "dm_schema",
    "classification": { ... },
    "annotation_target_frame_interval": 5
  },
  "project_plugins": []
}
```

| 필드 | 타입 | 범위 | 설명 |
|------|------|------|------|
| `configuration.annotation_target_frame_interval` | `integer` | 1~120 | 어노테이션 대상 프레임 간격 |

#### 프롬프트 어노테이터 추가 필드

프롬프트 카테고리의 경우 `configuration.gptOptions`에 편집 허용 옵션이 추가됩니다.

```json
{
  "phase": 4,
  "can_discard": false,
  "count_max_assignments_per_task": 1,
  "configuration": {
    "schema_type": "dm_schema",
    "classification": { ... },
    "gptOptions": ["useYn", "allowEditingOfPrompt", "allowEditingOfAnswers"]
  },
  "project_plugins": []
}
```

| gptOptions 값 | 설명 |
|----------------|------|
| `"useYn"` | LLM API 사용 활성화 |
| `"useTopicYn"` | 토픽 사용 활성화 |
| `"allowEditingOfPrompt"` | 질문 수정 허용 |
| `"allowEditingOfAnswers"` | 답변 수정 허용 |
| `"usePriorContextYn"` | 사전 맥락 프롬프트 사용 |

#### project_plugins 항목 구조

스마트 도구를 설정한 경우 `project_plugins` 배열에 포함됩니다.

```json
{
  "project_plugins": [
    {
      "plugin": 1,
      "agent": 5,
      "params": {
        "model": 3,
        "plugin": "auto-labeling",
        "version": "1.0.0"
      }
    }
  ]
}
```

| 필드 | 타입 | 설명 |
|------|------|------|
| `plugin` | `integer` | 플러그인 ID |
| `agent` | `integer` | 에이전트 ID |
| `params.model` | `integer` | 모델 ID |
| `params.plugin` | `string` | 플러그인 코드 |
| `params.version` | `string` | 플러그인 버전 |

**Response (201 Created)**

검증 성공 시 작업 설정 데이터가 반환됩니다.

**Error Response (400 Bad Request)**

```json
{
  "count_max_assignments_per_task": ["이 값이 0보다 크거나 같은지 확인하십시오."]
}
```

### 3. 임시 저장 — `POST /drafts/`

검증 성공 후 이전 단계 데이터와 병합하여 저장합니다.

**Request**

```json
POST /drafts/

{
  "target": "CREATE",
  "data": {
    "phase": 4,
    "category": "image",
    "title": "자동차 객체 검출 프로젝트",
    "access_level": "public",
    "data_collection": 1,
    "configuration": { ... },
    "can_discard": false,
    "count_max_assignments_per_task": 3,
    "project_plugins": [...]
  }
}
```

:::note[configuration 병합]
4단계에서는 3단계에서 저장한 `configuration`(classification, schema_type)에 4단계 옵션(프레임 간격, gptOptions 등)을 병합하여 전송합니다. 기존 3단계 데이터를 덮어쓰지 않습니다.
:::

## 다음 단계로 이동

작업 설정을 완료한 후 **"다음 단계"** 버튼을 클릭하면 위 API 흐름을 거쳐 [사용자 및 역할 단계](./members-roles)로 이동합니다.