AgentSkillsCN

dacon-uploaddata

解压 Dacon 竞赛数据并上传至 Hugging Face Hub。可用于响应“/dacon-uploaddata”、“데이콘 数据上传”或“upload dacon data”等指令。

SKILL.md
--- frontmatter
name: dacon-uploaddata
description: Dacon 공모전 데이터를 압축 해제하고 Hugging Face Hub에 업로드. "/dacon-uploaddata", "데이콘 데이터 업로드", "upload dacon data" 요청에 사용.
version: 1.0.0

dacon-data Skill

Dacon 공모전 데이터를 압축 해제하고 Hugging Face Hub에 업로드하는 스킬입니다.

Trigger

  • /dacon-uploaddata
  • "upload dacon data"
  • "데이콘 데이터 업로드"
  • "dacon data to huggingface"

Prerequisites

1. 의존성 설치

bash
uv pip install -r ~/.claude/skills/dacon-data/requirements.txt

2. Hugging Face 토큰 설정 (최초 1회)

bash
uv run python ~/.claude/skills/dacon-data/scripts/setup_auth.py

Workflow

이 스킬이 트리거되면 다음 단계를 수행합니다:

Step 1: 아카이브 파일 확인

프로젝트 루트에서 open.zip 파일을 찾습니다.

bash
ls -la open.zip 2>/dev/null || ls -la *.zip 2>/dev/null || echo "No archive found"
  • 파일이 있으면 → 계속
  • 파일이 없으면 → AskUserQuestion으로 경로 입력 요청

Step 2: HF 토큰 확인

토큰이 설정되어 있는지 확인합니다:

  • ~/.claude/skills/dacon-data/config/.hf_token
  • 환경변수 HF_TOKEN
  • ~/.cache/huggingface/token

토큰이 없으면 setup_auth.py 실행을 안내합니다.

Step 3: 레포지토리 정보 수집

AskUserQuestion을 사용하여 다음 정보를 수집합니다:

code
질문 1: "HF 레포지토리 ID를 입력하세요"
- header: "Repo ID"
- 형식: username/dataset-name
- 기본 네임스페이스: gamma4638
- 예시: gamma4638/dacon-competition-2024, gamma4638/challenge-hai

질문 2: "레포지토리 공개 설정"
- header: "Visibility"
- options:
  - Private (Recommended): 비공개 - 본인만 접근 가능
  - Public: 공개 - 누구나 접근 가능

참고: 레포지토리는 자동으로 생성됩니다. HF 웹사이트에서 미리 만들 필요가 없습니다.

Step 4: 데이터 업로드 실행

수집한 정보로 업로드 스크립트를 실행합니다:

bash
uv run python ~/.claude/skills/dacon-data/scripts/upload_data.py \
  --archive ./open.zip \
  --dest ./data \
  --repo-id {repo_id} \
  {--private 또는 --public}

Step 5: 결과 보고

업로드 완료 후 다음 정보를 사용자에게 알립니다:

  • ✅ 압축 해제 완료: ./data/ 폴더
  • ✅ 업로드 완료: HF Hub URL
  • 🗑️ open.zip 삭제 완료

CLI 직접 사용

스킬 대신 CLI로 직접 실행할 수도 있습니다:

bash
# 기본 사용
uv run python ~/.claude/skills/dacon-data/scripts/upload_data.py \
  --archive ./open.zip \
  --dest ./data \
  --repo-id gamma4638/my-dataset

# 공개 레포지토리로 업로드
uv run python ~/.claude/skills/dacon-data/scripts/upload_data.py \
  --archive ./open.zip \
  --dest ./data \
  --repo-id gamma4638/my-dataset \
  --public

# 아카이브 유지 (삭제하지 않음)
uv run python ~/.claude/skills/dacon-data/scripts/upload_data.py \
  --archive ./open.zip \
  --dest ./data \
  --repo-id gamma4638/my-dataset \
  --keep-archive

# 이미 압축 해제된 데이터 업로드
uv run python ~/.claude/skills/dacon-data/scripts/upload_data.py \
  --skip-extract \
  --dest ./data \
  --repo-id gamma4638/my-dataset

CLI 옵션

옵션설명기본값
--archive아카이브 파일 경로open.zip
--dest압축 해제 대상 디렉토리./data
--repo-idHF 레포지토리 ID (필수)-
--private비공개 레포지토리True
--public공개 레포지토리False
--keep-archive업로드 후 아카이브 유지False
--skip-extract압축 해제 건너뛰기False
--commit-message커밋 메시지"Upload Dacon competition dataset"

지원 아카이브 포맷

  • .zip
  • .tar, .tar.gz, .tgz, .tar.bz2
  • .7z
  • .rar

포맷은 Magic bytes로 자동 감지됩니다 (확장자에 의존하지 않음).

문제 해결

토큰 오류

bash
# 토큰 재설정
uv run python ~/.claude/skills/dacon-data/scripts/setup_auth.py

압축 해제 오류 (7z/rar)

bash
# 추가 의존성 설치
uv pip install py7zr rarfile

업로드 실패 (대용량 파일)

  • upload_folder() API가 자동으로 멀티파트 업로드를 처리합니다
  • 네트워크 오류 시 재시도하면 이어서 업로드됩니다 (이미 업로드된 파일은 건너뜀)

네임스페이스 권한 오류 (403 Forbidden)

code
You don't have the rights to create a dataset under the namespace "xxx"
  • 원인: HF 토큰의 사용자명과 레포지토리 네임스페이스가 불일치
  • 해결: 토큰 사용자명(gamma4638)과 일치하는 네임스페이스 사용
  • 확인 방법: huggingface-cli whoami 또는 스크립트 실행 시 "✅ 인증됨: {username}" 메시지 확인

타임아웃 오류

  • 대용량 파일 업로드 시 네트워크 타임아웃이 발생할 수 있음
  • 재시도하면 이미 업로드된 파일은 건너뛰고 나머지만 업로드됨

주요 특징

레포지토리 자동 생성

  • HF 웹사이트에서 미리 레포지토리를 만들 필요가 없습니다
  • create_repo(exist_ok=True) API가 자동으로 생성하거나 기존 레포지토리를 사용합니다

재시도 안전성

  • HF Hub API는 파일 해시를 비교하여 이미 업로드된 파일을 건너뜁니다
  • 네트워크 오류 시 안전하게 재시도할 수 있습니다
  • "No files have been modified since last commit" 메시지는 정상입니다

API 호환성

  • upload_folder()upload_large_folder()보다 더 안정적인 인터페이스를 제공합니다
  • HfApi(token=token) 생성자에서 토큰을 전달하면 이후 모든 API 호출에 자동 적용됩니다