File size: 3,370 Bytes
d4a00b2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/env python3
"""
Script para fazer upload do dataset de treinamento para o HuggingFace Hub.

Autenticação: defina HF_TOKEN ou use credenciais do `huggingface-cli login`.
"""

import os
import sys
from pathlib import Path

from huggingface_hub import HfApi, login

HF_USER = os.environ.get("HF_USER", "beAnalytic")
DATASET_REPO = os.environ.get("DATASET_REPO", f"{HF_USER}/eda-training-dataset")


def print_step(message: str, status: str = "info"):
    """Print formatado para diferentes tipos de mensagens"""
    colors = {
        "info": "\033[0;34m",
        "success": "\033[0;32m",
        "warning": "\033[1;33m",
        "error": "\033[0;31m",
    }
    symbols = {
        "info": "i",
        "success": "ok",
        "warning": "!",
        "error": "x",
    }
    reset = "\033[0m"
    print(f"{colors.get(status, colors['info'])}[{symbols.get(status, 'i')}] {message}{reset}")


def main():
    if len(sys.argv) < 2:
        print_step("Uso: python upload_dataset.py <caminho_para_dataset>", "error")
        print()
        print("Exemplo:")
        print("  python upload_dataset.py ../eda_training_dataset.jsonl")
        print("  python upload_dataset.py ../dataset_folder/")
        print()
        print("Requer HF_TOKEN no ambiente ou `huggingface-cli login`.")
        sys.exit(1)

    dataset_path = Path(sys.argv[1])

    if not dataset_path.exists():
        print_step(f"Erro: Caminho nao encontrado: {dataset_path}", "error")
        print(
            "Use o caminho real do ficheiro .jsonl ou pasta do dataset.",
            "Ex.: exporte o JSONL pelo pipeline EDA do projeto ou aponte para o ficheiro local.",
            sep="\n",
            file=sys.stderr,
        )
        sys.exit(1)

    hf_token = os.environ.get("HF_TOKEN")
    if not hf_token:
        print_step(
            "HF_TOKEN nao definido. Exporte HF_TOKEN ou execute: huggingface-cli login",
            "error",
        )
        sys.exit(1)

    print_step("Upload de Dataset para HuggingFace", "info")
    print()

    print_step("Autenticando no HuggingFace...", "info")
    try:
        login(token=hf_token, add_to_git_credential=False)
        print_step("Autenticado com sucesso", "success")
    except Exception as e:
        print_step(f"Erro ao autenticar: {e}", "error")
        sys.exit(1)

    api = HfApi(token=hf_token)

    print()
    print_step(f"Fazendo upload para: {DATASET_REPO}", "info")
    print_step(f"Origem: {dataset_path.absolute()}", "info")
    print()

    try:
        if dataset_path.is_file():
            print_step("Upload de arquivo unico...", "info")
            api.upload_file(
                path_or_fileobj=str(dataset_path),
                path_in_repo=dataset_path.name,
                repo_id=DATASET_REPO,
                repo_type="dataset",
            )
        else:
            print_step("Upload de pasta...", "info")
            api.upload_folder(
                folder_path=str(dataset_path),
                repo_id=DATASET_REPO,
                repo_type="dataset",
            )

        print()
        print_step("Upload concluido com sucesso.", "success")
        print()
        print(f"Dataset: https://huggingface.co/datasets/{DATASET_REPO}")

    except Exception as e:
        print_step(f"Erro durante upload: {e}", "error")
        sys.exit(1)


if __name__ == "__main__":
    main()