Skip to main content
모든 시퀀스에는 서로 분리된 두 종류의 메타데이터가 있습니다:
  • 기술적 유효성. 녹화를 사용할 수 있습니까? Avala는 승인 기준과 품질 목표를 바탕으로 이를 보고합니다. 아래 기술적 유효성 섹션을 참조하세요.
  • 행동 결과. 사람 또는 로봇이 무엇을 했고, 작업이 성공했습니까? Avala는 이를 시퀀스의 결과 라벨로 저장합니다.
시퀀스는 기술적으로 유효하면서도 실패를 보여줄 수 있습니다. 실패한 시퀀스가 가장 유용한 경우가 많습니다. 두 축이 분리되어 있으므로 깨끗한 데이터를 고르는 필터가 유용한 실패를 버리지 않고, 성공을 고르는 필터가 고장 난 센서를 숨기지 않습니다.

결과 라벨

각 시퀀스에는 현재 결과 라벨이 최대 하나 있습니다. 쓰기를 할 때마다 새 버전이 기록됩니다. 이전 버전은 라벨 이력에서 계속 읽을 수 있습니다.

예시

다음은 미끄러짐과 복구가 있는 사람 시연의 라벨로, GET .../sequences/<sequence-uid>/outcome/이 반환하는 형태입니다:
위 값은 라벨의 형태를 보여주기 위한 것입니다. 실제 납품을 설명하지 않습니다.

필드

모든 타임스탬프는 시퀀스 시작부터의 초 단위입니다. mistake_type, recovery_type, failure_stage는 자유 텍스트입니다. 시퀀스가 깔끔하게 묶이도록 프로그램의 실패 분류 체계에 있는 태그를 사용하세요.

결과 값

각 하위 작업은 같은 목록에서 고른 자체 결과를 가질 수 있습니다.

자율성 수준

하위 작업

각 하위 작업은 {label, start_ts, end_ts, outcome}입니다. 라벨 하나에는 하위 작업이 최대 256개까지 들어갑니다. 목록은 start_ts 순서로 정렬되어야 합니다. 두 하위 작업은 서로 겹치지 않거나, 단계와 그 세부 단계처럼 하나가 다른 하나를 완전히 포함해야 합니다. 끝이 맞닿는 경우는 겹치지 않는 것으로 봅니다. 일부만 겹치면 거부됩니다. 두 하위 작업이 같은 시각에 시작하면 감싸는 쪽을 먼저 나열하세요.

손 동작

hand_actions는 서로 독립된 두 스트림, left와 right를 담습니다. 각 항목은 한 손이 어떤 시간 범위 동안 하는 일을 설명합니다.
  • 한 손 안에서 항목은 start_ts 순서로 정렬되며 서로 겹치면 안 됩니다. 각 항목은 이전 항목이 끝난 시각 또는 그 이후에 시작합니다. 맞닿는 것은 괜찮습니다.
  • 두 손은 자유롭게 겹칠 수 있습니다.
  • 각 손에는 항목이 최대 3,600개까지 들어갑니다. 초당 라벨 하나로 한 시간 분량입니다.
  • 키는 left와 right만 허용됩니다. 둘 중 하나는 생략할 수 있습니다. 생략한 손은 빈 목록으로 저장됩니다.
  • 빈 object 또는 verb는 null로 저장됩니다. 저장된 모든 항목에는 여섯 필드가 모두 있습니다.

시퀀스 길이

Avala가 시퀀스의 길이를 알면, 모든 하위 작업의 end_ts와 모든 손 동작의 end_ts는 그 길이에 1초를 더한 값 이하여야 합니다. 추가 1초는 초당 하나씩 쓴 라벨을 허용하기 위한 것입니다. 시퀀스에 길이가 기록된 추출 MCAP 파일이 정확히 하나 있으면 Avala가 길이를 압니다. 다른 시퀀스에서는 이 검사를 건너뜁니다.

평가 소속

evaluation_membership은 시퀀스를 분할에 배치합니다: Avala는 모든 평가 코호트의 시퀀스에 held_out_eval을 설정합니다. 이 시퀀스는 학습 릴리스에 절대 나타나지 않습니다. 평가를 참조하세요.

누출 그룹

누출 그룹은 거의 중복된 데이터가 학습 분할과 평가 분할 양쪽에 들어가는 것을 막습니다. leakage_groups는 다음 키를 받으며, 각 키의 값은 최대 255자의 그룹 ID입니다: 다른 키는 거부됩니다. 각 키는 선택 사항입니다. Avala는 코호트의 어떤 그룹 값도 학습 릴리스에 나타나지 않도록 평가 코호트를 구성합니다. 고객도 자체 데이터를 같은 방식으로 분할할 수 있습니다: 그룹 단위로 홀드아웃하고, 무작위 시퀀스 단위로는 절대 분할하지 마세요. Avala의 그룹 ID는 가명이므로 누구인지, 어디인지 알지 않고도 묶고 분할할 수 있습니다.

출처 메타데이터

source_metadata는 가져온 라벨이 어디서 왔는지 기록합니다. 예: {"importer": "...", "run_id": "...", "task": "...", "log_path": "..."}.
  • 키가 최대 20개인 평면 객체입니다.
  • 각 키는 1~64자입니다.
  • 각 값은 최대 512자의 문자열, 유한한 수 또는 불리언입니다.
  • 중첩 객체, 목록, null 값은 거부됩니다.

쓰기 동작 방식

  • 쓰기는 현재 라벨 전체를 교체하고 새 버전을 기록합니다. 생략한 선택 필드는 설정되지 않은 상태로 저장됩니다. 이전 버전에서 복사되지 않습니다.
  • 쓰기에는 데이터셋 편집 권한이 필요합니다. 읽기에는 공개 데이터셋을 포함해 시퀀스를 읽는 것과 같은 권한이 필요합니다.
  • source가 model이 아니면 confidence는 거부됩니다.
  • 라벨이 없는 시퀀스를 읽으면 404가 반환됩니다.

기술적 유효성

기술적 유효성은 결과 라벨에 포함되지 않습니다. Avala는 승인 엔진과 품질 목표를 바탕으로 이를 보고하며, 별도의 JSON 스키마는 없습니다. 승인 기준. 캡처 캠페인의 모든 캡처는 기계 판정을 받습니다: accept, quarantine 또는 reject. 판정은 다음 기준에서 나옵니다: 각 기준은 pass, fail, insufficient_evidence 또는 skipped를 보고합니다. 실패한 기준은 acceptance_frame_rate_drop이나 hands_not_visible 같은 사유 코드를 기록합니다. 이후 리뷰어가 판정을 확인하거나 변경합니다. 사유 코드는 승인된 시간에 나와 있습니다. 승인 결과는 MCP 도구로 읽습니다. 캡처 하나는 get_result_acceptance, 캠페인은 get_campaign_acceptance_summary를 사용하세요. list_capture_submissions에는 각 캡처의 기계 승인 요약이 포함됩니다. 품질 목표. 프로젝트는 승인률, 거부율, 이슈율 같은 품질 지표에 임계값을 정할 수 있습니다. 지표가 임계값을 넘으면 Avala가 알림을 보냅니다. MCP 도구 list_quality_targets로 읽습니다. 캘리브레이션, 동의, 타임스탬프 동기화처럼 기계 기준이 아닌 프로그램 검사는 커버리지 리포트에 거부 사유로 보고됩니다. 승인된 시간을 참조하세요.

결과 라벨 읽기와 쓰기

REST 엔드포인트는 https://api.avala.ai/api/v1 아래에 있습니다: 데이터셋 목록은 outcome, evaluation_membership, source, autonomy_level 필터를 받습니다. 각 필터는 값 하나 또는 쉼표로 구분한 목록을 받으며, 시퀀스는 목록의 값 중 하나와 일치하면 해당됩니다. model_version은 정확히 한 버전과 일치합니다. 알 수 없는 필터 값은 400을 반환합니다. 시퀀스 목록 GET /datasets/{owner}/{slug}/sequences/는 같은 형식으로 outcome과 evaluation_membership을 받습니다. 현재 라벨이 일치하는 시퀀스를 반환합니다.

라벨 쓰기

TypeScript SDK는 camelCase 옵션 이름을 받아 API의 snake_case 필드로 보냅니다. sourceMetadata 안의 키는 작성한 그대로 전송됩니다. CLI에서 --hand-actions-file은 {"left": [...], "right": [...]} 형식의 JSON 파일을 받고, --leakage-group KEY=ID는 여러 번 지정할 수 있습니다.

라벨 읽기

데이터셋 목록은 페이지당 최대 100개의 라벨을 반환합니다. 계속하려면 이전 페이지의 cursor를 전달하세요.

MCP 서버로 라벨 읽기

MCP 서버는 결과 라벨을 읽습니다. 쓰지는 않습니다.
  • get_sequence_outcome은 owner, slug, sequenceUid를 받습니다. 현재 라벨을 반환합니다.
  • list_sequence_outcomes는 owner와 slug, 그리고 outcome, evaluationMembership, source, autonomyLevel, modelVersion 필터와 limit, cursor를 받습니다.
두 도구 모두 기본적으로 짧은 형식을 반환합니다. 하위 작업, 손 동작, 실수 및 복구 태그, 누출 그룹, 출처 메타데이터, 라벨 작성자를 포함하려면 detail: "full"을 전달하세요. 연결하려면 AI와 함께 Avala 사용하기를 참조하세요.

LeRobot으로 결과 라벨 내보내기

LeRobot 익스포터는 각 시퀀스의 현재 결과 라벨을 데이터셋 옆에 쓸 수 있습니다. Avala 시퀀스 하나가 LeRobot 에피소드 하나가 됩니다.
라벨은 meta/avala_sequence_outcomes.jsonl에 기록됩니다. 한 줄에 JSON 객체 하나, 저장된 LeRobot 에피소드 하나당 한 줄입니다. LeRobot 자체의 에피소드 테이블에는 이 메타데이터를 넣을 자리가 없으므로 별도 파일로 둡니다. 각 줄에는 다음 키가 있습니다: 라벨이 없는 시퀀스는 episode_index, avala_sequence_uid, "outcome": null만 있는 줄을 받습니다.

실패 및 복구 레인

복구 가능한 실패는 별도 레인으로 제공됩니다: 결과가 mistake_and_recovery 또는 intervention인 시퀀스입니다. 각 시퀀스의 하위 작업과 손 동작이 실패와 복구가 일어난 지점을 표시합니다. 이 레인은 릴리스에서 별도의 슬라이스로 제공됩니다. 이 레인으로 학습하거나, 가중치를 주거나, 제외할 수 있습니다. ?outcome=mistake_and_recovery,intervention으로 같은 세트를 직접 만들 수도 있습니다. 안전하지 않은 시퀀스는 이 레인에 포함되지 않습니다.