File size: 2,051 Bytes
506e3fd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env python3
"""
Safely sync or upload files/folders to Hugging Face Hub (aelgendy/QModel).
Automatically excludes sensitive or local folders (.claude, .vscode, .env, .venv, scratch, data).
"""

import argparse
import sys
import os

# Auto-fallback to Homebrew hf Python if huggingface_hub is not in current environment
try:
    from huggingface_hub import HfApi
except ImportError:
    brew_python = "/opt/homebrew/Cellar/hf/2.2.0/libexec/bin/python"
    if os.path.exists(brew_python) and sys.executable != brew_python:
        os.execv(brew_python, [brew_python] + sys.argv)
    raise

DEFAULT_IGNORE = [
    ".claude/**",
    ".vscode/**",
    ".env*",
    ".venv/**",
    "scratch/**",
    "data/**",
    "__pycache__/**",
    "*.pyc",
    ".DS_Store",
]

def main():
    parser = argparse.ArgumentParser(description="Upload to Hugging Face with safety exclusions.")
    parser.add_argument("--repo-id", default="aelgendy/QModel", help="HF Repo ID (default: aelgendy/QModel)")
    parser.add_argument("--repo-type", default="model", choices=["model", "dataset", "space"], help="Repository type")
    parser.add_argument("--folder", default=".", help="Local folder to upload (default: current directory)")
    parser.add_argument("--message", default="Sync repository to Hugging Face", help="Commit message")
    parser.add_argument("--include-models", action="store_true", help="Include models/ directory in upload")
    args = parser.parse_args()

    ignore = list(DEFAULT_IGNORE)
    if not args.include_models:
        ignore.append("models/**")
        ignore.append("*.gguf")

    print(f"Uploading '{args.folder}' to '{args.repo_id}' (repo_type={args.repo_type})...")
    print(f"Ignored patterns: {ignore}")

    api = HfApi()
    commit = api.upload_folder(
        repo_id=args.repo_id,
        folder_path=args.folder,
        repo_type=args.repo_type,
        commit_message=args.message,
        ignore_patterns=ignore,
    )
    print(f"Successfully uploaded! Commit URL: {commit}")

if __name__ == "__main__":
    main()