Install
$ agentstack add skill-furkangonel-cowrangler-huggingface-hub ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Hugging Face Hub SOP
Discover, load, run, and publish models and datasets on the Hugging Face Hub. Covers CLI auth, transformers pipelines, the Inference API, push_to_hub, and dataset loading.
When to Use
- User wants to find the right pre-trained model for a task
- User wants to load and run a HF model locally
- User wants to call the HF Inference API without loading weights locally
- User wants to push a fine-tuned model or dataset to the Hub
- User wants to work with HF datasets library
Part 1 — Auth Setup
1. Get a Token
- Go to https://huggingface.co/settings/tokens
- Click New token → name it → select Write role (needed for
push_to_hub) or Read (for private model downloads) - Copy the token (starts with
hf_)
2. Login via CLI
pip install huggingface_hub
huggingface-cli login
# Paste your token when prompted; it is saved to ~/.cache/huggingface/token
Or set as environment variable (CI/CD):
export HUGGINGFACE_TOKEN="hf_..."
Or in ~/.cowrangler/credentials.env:
HUGGINGFACE_TOKEN=hf_...
3. Programmatic Auth
from huggingface_hub import login
import os
login(token=os.environ.get("HUGGINGFACE_TOKEN"))
Part 2 — Model Discovery
Search by Task
from huggingface_hub import HfApi
api = HfApi()
# Search models by task tag
models = api.list_models(
task="text-classification",
sort="downloads",
direction=-1,
limit=10,
)
for m in models:
print(f"{m.modelId:50s} downloads={m.downloads:>10,} likes={m.likes}")
Common task tags: text-classification, token-classification, question-answering, text-generation, summarization, translation, fill-mask, sentence-similarity, image-classification, object-detection, automatic-speech-recognition, text-to-speech, image-to-text
Filter by Language and Library
models = api.list_models(
task="text-classification",
language="tr", # ISO 639-1 language code
library="transformers",
sort="downloads",
direction=-1,
limit=5,
)
for m in models:
print(m.modelId, m.downloads)
Search by Keyword (via Hub search UI equivalent)
models = list(api.list_models(search="bert sentiment", limit=10))
for m in models:
print(m.modelId)
Part 3 — Loading and Running Models
Pipeline (fastest path)
from transformers import pipeline
# Text classification
clf = pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english")
print(clf("This movie was absolutely fantastic!"))
# [{'label': 'POSITIVE', 'score': 0.9998}]
# Named entity recognition
ner = pipeline("ner", model="dslim/bert-base-NER", aggregation_strategy="simple")
print(ner("My name is Wolfgang and I live in Berlin."))
# Summarization
summarizer = pipeline("summarization", model="facebook/bart-large-cnn", max_length=130, min_length=30)
print(summarizer("Article text here...")[0]["summary_text"])
# Text generation
gen = pipeline("text-generation", model="gpt2")
print(gen("The future of AI is", max_new_tokens=50, num_return_sequences=1))
# Zero-shot classification
zs = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")
print(zs("I love playing football", candidate_labels=["sports", "cooking", "technology"]))
Explicit Model + Tokenizer
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
model_name = "cardiffnlp/twitter-roberta-base-sentiment-latest"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
inputs = tokenizer("Great product!", return_tensors="pt", truncation=True, max_length=512)
with torch.no_grad():
logits = model(**inputs).logits
probs = torch.softmax(logits, dim=-1)[0]
labels = model.config.id2label
prediction = {labels[i]: round(probs[i].item(), 4) for i in range(len(labels))}
print(prediction)
Run on GPU (if available)
import torch
device = 0 if torch.cuda.is_available() else -1 # 0 = first GPU, -1 = CPU
pipe = pipeline("text-generation", model="gpt2", device=device)
Quantized / Efficient Loading (large models)
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dtype=torch.float16)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3-8b-hf",
quantization_config=bnb_config,
device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8b-hf")
Part 4 — Inference API (no local GPU required)
import os, requests
HUGGINGFACE_TOKEN = os.environ["HUGGINGFACE_TOKEN"]
MODEL_ID = "distilbert-base-uncased-finetuned-sst-2-english"
def hf_infer(model_id: str, inputs, wait_for_model=True):
url = f"https://api-inference.huggingface.co/models/{model_id}"
headers = {"Authorization": f"Bearer {HUGGINGFACE_TOKEN}"}
payload = {"inputs": inputs, "options": {"wait_for_model": wait_for_model}}
r = requests.post(url, headers=headers, json=payload)
r.raise_for_status()
return r.json()
# Text classification
result = hf_infer(MODEL_ID, "I love this product!")
print(result)
# Sentence similarity
sim = hf_infer(
"sentence-transformers/all-MiniLM-L6-v2",
{"source_sentence": "How to cook pasta?", "sentences": ["Pasta recipe guide", "Football match results"]}
)
print(sim)
Batch Inference API
texts = ["Great!", "Terrible experience.", "It was okay."]
results = hf_infer(MODEL_ID, texts)
for text, r in zip(texts, results):
label = r[0]["label"]
score = r[0]["score"]
print(f"{text:30s} {label} {score:.3f}")
Part 5 — Push to Hub
Push a Fine-Tuned Model
from transformers import Trainer, TrainingArguments, AutoModelForSequenceClassification, AutoTokenizer
# ... (after fine-tuning)
model_name_on_hub = "your-username/my-sentiment-model"
model.push_to_hub(model_name_on_hub, private=False)
tokenizer.push_to_hub(model_name_on_hub)
print(f"Published: https://huggingface.co/{model_name_on_hub}")
Push with Model Card
Create README.md before pushing:
---
language: en
license: apache-2.0
tags:
- text-classification
- sentiment
datasets:
- sst2
metrics:
- accuracy
model-index:
- name: my-sentiment-model
results:
- task:
type: text-classification
dataset:
name: SST-2
type: sst2
metrics:
- type: accuracy
value: 0.934
---
# My Sentiment Model
Fine-tuned DistilBERT on SST-2 for binary sentiment classification.
## Usage
```python
from transformers import pipeline
pipe = pipeline("text-classification", model="your-username/my-sentiment-model")
print(pipe("I love this!"))
```python
from huggingface_hub import HfApi
api = HfApi()
api.upload_file(
path_or_fileobj="README.md",
path_in_repo="README.md",
repo_id=model_name_on_hub,
repo_type="model",
)
Part 6 — Datasets Library
Load a Dataset
from datasets import load_dataset
# Load a full dataset
ds = load_dataset("imdb")
print(ds)
# DatasetDict({'train': Dataset(features={...}, num_rows=25000), 'test': ...})
# Load a specific split
train = load_dataset("imdb", split="train")
print(train[0]) # {'text': '...', 'label': 0}
# Load only a fraction (useful for quick testing)
tiny = load_dataset("imdb", split="train[:1%]")
Filter and Map
# Filter
positive = train.filter(lambda x: x["label"] == 1)
print(f"Positive examples: {len(positive)}")
# Map (tokenize)
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
def tokenize(batch):
return tokenizer(batch["text"], truncation=True, padding="max_length", max_length=128)
tokenized = train.map(tokenize, batched=True, batch_size=256)
tokenized.set_format("torch", columns=["input_ids", "attention_mask", "label"])
Push a Dataset to Hub
from datasets import Dataset
import pandas as pd
df = pd.read_csv("my_data.csv")
ds = Dataset.from_pandas(df)
ds.push_to_hub("your-username/my-dataset", private=False)
Model Card Essentials
Every model pushed to the Hub should have a README.md with these YAML frontmatter fields:
| Field | Example | |-------|---------| | language | en or [en, fr] | | license | apache-2.0, mit, cc-by-4.0 | | tags | [text-classification, sentiment] | | datasets | [sst2, imdb] | | metrics | [accuracy, f1] | | base_model | distilbert-base-uncased |
Checklist
- [ ] Logged in via
huggingface-cli loginorHUGGINGFACE_TOKENset - [ ] Model selected by task, language, and download count — not just by name recognition
- [ ] For local inference: GPU memory checked before loading large models (
nvidia-smi) - [ ] For large models: 4-bit quantization or
device_map="auto"used - [ ] For Inference API:
wait_for_model=Trueset to handle cold starts - [ ] Model card README.md written before pushing to Hub
- [ ] Dataset pushed alongside model when applicable
- [ ] License field set in model card frontmatter
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: furkangonel
- Source: furkangonel/cowrangler
- License: MIT
- Homepage: https://cowrangler.com
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.