> ## Documentation Index
> Fetch the complete documentation index at: https://avala.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 실패 수집

> 롤아웃과 실패를 Avala로 보내는 방법, 그리고 Avala가 이를 실패 분류 체계와 갭 리포트로 바꾸는 방법

루프는 로봇이 실제로 하는 일에서 시작합니다. 실패와 개입을 포함한 롤아웃을 보내세요. Avala는 이를 읽고, 패턴을 찾고, 어떤 데이터가 빠졌는지 알려 드립니다.

## 형식

| 형식 | 전달 방법 |
| - | - |
| MCAP | 플릿 녹화 업로드 또는 `avala import folder --data-type mcap` |
| ROS bag (`.bag`, `.db3`) | `avala import rosbag`, 또는 MCAP으로 변환하여 플릿 녹화로 업로드 |
| LeRobot 데이터셋 | Hugging Face Hub 또는 로컬 디렉터리에서 `avala import lerobot` |
| 로그가 있는 비디오 | 비디오는 `avala import folder --data-type video`로 보냅니다. Avala가 프로그램의 일부로 로그를 비디오에 맞춰 정렬합니다. |
| Inspect Robots 평가 로그 | `avala import inspect-robots`. 아래 평가 로그 가져오기 섹션을 참조하세요. |

MCAP은 모든 토픽을 보존하므로 가장 완전한 그림을 제공합니다. ROS bag 임포터는 카메라 토픽(`sensor_msgs/Image`와 `sensor_msgs/CompressedImage`)을 변환하고, 관절 상태와 기타 숫자 또는 텍스트 토픽도 보존합니다. 포인트 클라우드 등 바이너리 페이로드는 건너뜁니다. 모든 토픽을 보존해야 할 때는 MCAP을 보내세요.

## 롤아웃을 플릿 녹화로 보내기

각 업로드는 기존 플릿 녹화로 들어갑니다. Avala는 프로그램이 시작될 때 등록된 기기에 대한 녹화를 준비합니다. 녹화 UID를 찾으려면 녹화 목록을 조회하세요.

```python Python theme={null}
from avala import Client

client = Client()  # reads AVALA_API_KEY

page = client.fleet.recordings.list(device_id="<device-uid>", limit=20)
for recording in page:
    print(recording.uid, recording.status, recording.started_at)

# Upload a local directory of rollout files into one recording.
session = client.fleet.uploads.upload_recording(
    "<recording-uid>",
    "./rollouts/2026-09-29",
)
print(session.uid, session.status)
```

```bash CLI theme={null}
# Preview what will be uploaded
avala fleet recordings upload \
  --source ./rollouts/2026-09-29 \
  --recording <recording-uid> \
  --dry-run

# Upload and wait for server-side processing
avala fleet recordings upload \
  --source ./rollouts/2026-09-29 \
  --recording <recording-uid> \
  --wait
```

`upload_recording`은 같은 소스의 중단된 업로드를 이어서 진행합니다. 호출이 완료되면 처리가 대기열에 들어간 것입니다. `client.fleet.recordings.get(uid).status`가 `ready`가 될 때까지 확인하세요.

## 실패와 개입을 이벤트로 표시하기

플릿 이벤트는 녹화의 특정 순간에 라벨을 붙입니다. Avala가 빠르게 찾을 수 있도록 각 실패와 각 개입을 표시하세요. 이벤트 분류에는 `type`을, 모델 버전과 작업처럼 스택이 기록하는 정보에는 `metadata`를 사용하세요.

```python Python theme={null}
from avala import Client

client = Client()

event = client.fleet.events.create(
    recording="<recording-uid>",
    device="<device-uid>",
    type="anomaly",
    label="Plate slipped during placement",
    timestamp="2026-09-29T14:03:12Z",
    severity="warning",
    duration_ms=1800,
    tags=["failure", "regrasp"],
    metadata={"model_version": "your-policy@2026-09-20", "task": "load_dishwasher"},
)
print(event.uid)

# Many events at once
created = client.fleet.events.create_batch(
    events=[
        {
            "recording": "<recording-uid>",
            "device": "<device-uid>",
            "type": "state_change",
            "label": "Operator took over",
            "timestamp": "2026-09-29T14:03:15Z",
            "tags": ["intervention"],
        },
    ]
)
print(created)
```

```typescript TypeScript theme={null}
import Avala from "@avala-ai/sdk";

const avala = new Avala(); // reads AVALA_API_KEY

const event = await avala.fleet.events.create({
  recording: "<recording-uid>",
  device: "<device-uid>",
  type: "anomaly",
  label: "Plate slipped during placement",
  timestamp: "2026-09-29T14:03:12Z",
  severity: "warning",
  durationMs: 1800,
  tags: ["failure", "regrasp"],
  metadata: { model_version: "your-policy@2026-09-20", task: "load_dishwasher" },
});
console.log(event.uid);
```

```bash CLI theme={null}
avala fleet events create \
  --recording <recording-uid> \
  --device <device-uid> \
  --type anomaly \
  --label "Plate slipped during placement" \
  --timestamp 2026-09-29T14:03:12Z \
  --severity warning
```

이벤트 `type`은 `error`, `warning`, `info`, `state_change`, `anomaly`, `custom` 중 하나입니다. `severity`는 `info`, `warning`, `error`, `critical` 중 하나입니다. [녹화 규칙](/docs/visualization/fleet/recording-rules.md)으로 이벤트를 자동으로 생성할 수도 있습니다.

## ROS bag과 LeRobot 데이터셋 가져오기

롤아웃이 플릿 밖에 있으면 데이터셋으로 가져오세요. 먼저 해당 형식의 추가 패키지를 설치합니다.

```bash theme={null}
pip install "avala[rosbag]"
avala import rosbag ./rollout_0412.bag --name "Rollouts 0412" --slug rollouts-0412 --wait

pip install "avala[lerobot]"
avala import lerobot --repo-id your-hf-user/your-rollouts --name "Rollouts" --slug rollouts --wait
```

LeRobot 임포터에 대한 자세한 설명은 [내보내기](/docs/ko/fleet-learning/exports.md)에 있습니다.

## 평가 로그 가져오기

오픈 소스 평가 도구인 [Inspect Robots](https://github.com/robocurve/inspect-robots)로 정책을 평가한다면 그 JSON 평가 로그를 가져오세요. 각 시행(한 에포크의 장면 하나)은 시퀀스 하나에 [결과 라벨](/docs/ko/fleet-learning/sequence-metadata.md)을 붙입니다. 실패한 시행은 필터링하고, 검토하고, 수집 작업으로 바꿀 수 있는 시퀀스가 됩니다.

```bash theme={null}
pip install "avala[inspect]"

# Preview the trial-to-outcome mapping. Reads the log only.
avala import inspect-robots logs/load-dishwasher_1a2b3c4d.json --dataset your-org/dishwasher-eval --dry-run

# Label the sequences that already exist in the dataset, one per trial
avala import inspect-robots logs/load-dishwasher_1a2b3c4d.json --dataset your-org/dishwasher-eval

# Or create the dataset from each trial's recorded actions, plus camera frames if the run stored them
avala import inspect-robots logs/load-dishwasher_1a2b3c4d.json --dataset your-org/dishwasher-eval --create
```

| Inspect Robots 시행 | 결과 |
| - | - |
| 성공 점수가 `--success-threshold` 이상이고, 채점 점수가 `--expert-threshold` 이상 | `expert_success` |
| 성공 점수가 `--success-threshold` 이상이고, 채점 점수가 `--expert-threshold` 미만 | `partial_success` |
| 성공 점수가 `--success-threshold` 미만 | `failure` |
| 시행에서 오류가 발생했거나 취소됨 | `aborted` |
| 성공 채점기가 값을 내지 않음 | 라벨 없음 |

가져온 모든 라벨은 `source`가 `imported`, `evaluation_membership`이 `held_out_eval`, `autonomy_level`이 `autonomous`로 설정됩니다. `model_version`은 실행의 정책입니다. 실행의 작업은 시행 전체에 걸친 하위 작업 하나가 됩니다. 사람이나 모델이 쓴 라벨은 `--overwrite`를 전달하지 않으면 유지됩니다. 전체 옵션 목록은 [CLI 레퍼런스](/docs/sdks/cli.md#inspect-robots-evaluation-logs)에 있습니다.

## MCP 서버로 녹화와 이벤트 검사하기

MCP 서버는 플릿 데이터를 읽습니다. 어시스턴트에게 최근 실패에 대해 물어보거나 도구를 직접 호출하세요:

* 녹화에는 `fleet_list_recordings`와 `fleet_get_recording`
* `recording`, `device`, `type` 또는 `severity`로 필터링한 `fleet_list_events`
* 플릿 전체 요약에는 `get_fleet_health`

업로드와 이벤트 생성은 SDK 또는 CLI로 진행합니다. 연결하려면 [AI와 함께 Avala 사용하기](/docs/ko/getting-started/mcp.md)를 참조하세요.

## Avala가 롤아웃으로 하는 일

아래 단계는 Avala가 프로그램의 일부로 수행하는 서비스입니다. 이 단계를 위해 호출할 API는 없습니다.

1. **분할.** Avala는 각 롤아웃을 상태 변화 지점에서 시퀀스와 하위 작업으로 나눕니다. 고객의 이벤트가 실패 순간의 기준점이 됩니다.
2. **라벨링.** 각 시퀀스는 [시퀀스 메타데이터](/docs/ko/fleet-learning/sequence-metadata.md)의 두 축, 즉 기술적 유효성 검사와 결과 라벨을 모두 받습니다.
3. **클러스터링.** Avala는 무엇이 잘못되었는지, 어떤 조건에서 일어났는지에 따라 실패를 묶습니다. 클러스터는 프로그램의 버전이 관리되는 실패 분류 체계에 대응합니다. 새 클러스터는 분류 체계를 확장합니다.
4. **갭 분석.** Avala는 실패 클러스터를 기존 학습 데이터의 커버리지 및 평가 코호트와 비교합니다.

## 갭 리포트

Avala는 롤아웃 배치마다 갭 리포트를 제공합니다.

| 섹션 | 내용 |
| - | - |
| 범위 | 녹화, 기간, 모델 버전, 분류 체계 버전. |
| 실패 분류 체계 | 각 실패 모드, 그 정의, 예시 시퀀스. |
| 분포 | 실패 모드별, 모델 버전별, 커버리지 셀별 실패 횟수와 비율. |
| 부족한 커버리지 | 각 실패 모드의 원인이 되는 [커버리지 셀](/docs/ko/fleet-learning/coverage.md) 중 학습 데이터에 없거나 너무 적은 셀. |
| 제안 실험 | 우선순위 실패 조건마다 하나씩 작성한 [역량 실험](/docs/ko/fleet-learning/capability-experiments.md) 초안. 가설과 목표 셀을 포함합니다. |

고객은 갭 리포트를 검토하고 우선순위를 정합니다. 승인된 실험이 다음 수집 브리프가 됩니다.
