AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
The Transformers skill provides a programmatic interface to the Hugging Face ecosystem, enabling users to load pre-trained models, execute inference pipelines, and perform fine-tuning on custom datasets. It supports a wide range of modalities including text, vision, and audio, with specific utilities for tokenization, generation control, and device management using the Trainer API.
What it does
- Loads pre-trained models via AutoModel classes for various tasks.
- Executes inference using the Pipeline API for rapid prototyping.
- Configures text generation parameters such as temperature, top-k, and top-p sampling.
- Facilitates model fine-tuning using the Trainer API with support for custom datasets.
- Manages tokenization, including padding, truncation, and special token handling.
- Handles authentication for private or gated models via the Hugging Face Hub.
When to use it
- When integrating pre-trained models into custom Python workflows.
- For performing inference on text, audio, or vision data.
- When fine-tuning models on domain-specific datasets.
- For managing complex model configurations and device placement.
Advantages
- Provides unified access to diverse model architectures.
- Simplifies complex tasks through high-level pipeline abstractions.
- Offers granular control over model precision and hardware utilization.
- Supports standard authentication patterns for secure model access.
Usage examples
- “Use the pipeline API to generate text with a specific model.”
- The agent initializes a text-generation pipeline with the specified model and returns generated text based on the input prompt.
- “Load a model for sequence classification with custom device mapping.”
- The agent uses AutoModelForSequenceClassification to load the model, applying automatic device placement for optimized execution.
- “Fine-tune a model using the Trainer API.”
- The agent configures TrainingArguments and initializes a Trainer instance to execute the fine-tuning process on the provided dataset.
- “Authenticate to the Hugging Face Hub for private model access.”
- The agent guides the user through the CLI login process or environment variable configuration to securely access gated models.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/k-dense-ai/transformers/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip transformers.zip -d .agents/skills
Documentation by K-Dense Inc.
Transformers
Overview
The Hugging Face Transformers library provides access to thousands of pre-trained models for tasks across NLP, computer vision, audio, and multimodal domains. Use this skill to load models, perform inference, and fine-tune on custom data.
Installation
Targets Transformers 5.18.0, verified against its released source on 2026-10-01. Native CPU checks use Python 3.11, Torch 2.14.1, Datasets 5.0.1, Accelerate 1.15.0, PEFT 0.21.2, and Hub 1.33.0. The Torch extra requires Torch >=2.5. Install in a dedicated environment:
uv venv --python 3.11 .venv-transformers
uv pip install --python .venv-transformers/bin/python "transformers[torch]==5.18.0" "torch==2.14.1" "huggingface-hub==1.33.0" "datasets==5.0.1" "accelerate==1.15.0" "peft==0.21.2"Use .venv-transformers/Scripts/python.exe on Windows. Select an appropriate Torch build for the target hardware before installation. Hub 2.1.1 is newer, but Datasets 5.0.1 requires Hub <2; upgrading every package independently makes this training stack unsatisfiable. The separate esm SDK currently requires Transformers <5 and belongs in another environment.
Optional dependencies (install only for the selected workflow): Pillow 12.3.0 for images; torchvision matched to Torch and timm 1.0.30 for models that require them; librosa 1.0.0 and soundfile 0.14.0 for audio preprocessing (librosa requires Python >=3.12); FFmpeg for encoded audio file inputs; pytesseract plus Tesseract for OCR document pipelines; bitsandbytes 0.50.2 for supported quantization backends. See model loading before choosing precision or quantization.
Verification used tiny random models, synthetic input, and local save/reload only. Hub pretrained examples throughout this skill are illustrative: public checkpoint metadata and configurations were reviewed, but no weights or datasets were downloaded and no hosted inference or uploads were run. Optional export/distributed/hardware paths are source-checked, not end-to-end tested. See review evidence.
Check your version:
import transformers
print(transformers.__version__)Authentication
Many models on the Hugging Face Hub are gated or private. Authenticate before loading them.
Recommended: CLI login (uses $HF_TOKEN_PATH, defaulting to $HF_HOME/token, normally ~/.cache/huggingface/token):
hf auth loginPython:
from huggingface_hub import login
login() # Interactive prompt; do not hardcode tokens in scriptsServers / CI: set HF_TOKEN in the environment (never commit tokens to git or shell profiles):
export HF_TOKEN="..." # Read token from a secret manager, not source codeGet tokens at: https://huggingface.co/settings/tokens
Security: Never paste tokens into notebooks, repos, or shared configs. Prefer hf auth login over exporting tokens in .bashrc or .zshrc.
Use the narrowest token scope that works: read for private or gated model downloads, write only for uploads. If a long-running environment should not send the stored token on every Hub request, set HF_HUB_DISABLE_IMPLICIT_TOKEN=1 and pass a token only where authentication is required.
Transformers v5
Transformers v5 is PyTorch-only (TensorFlow and JAX backends were removed). For upgrades from v4, see the v5 migration guide. Transformers 5.18.0 accepts Hub >=1.31,<3; preserve the tighter constraint of Datasets when training.
Gated or custom architectures: accept the model license on the Hub, then load with trust_remote_code=True only when required custom code has been reviewed; pin its full immutable commit with revision (and code_revision for a separate code repository). Gating and custom code are independent: a gated built-in architecture does not require remote code.
Cache location: set HF_HOME for all Hugging Face caches, or HF_HUB_CACHE just for Hub files. Use HF_HUB_OFFLINE=1 only after required model snapshots are already cached.
Quick Start
Use the Pipeline API for fast inference without manual configuration:
from transformers import pipeline
# Text generation (prefer max_new_tokens for causal LMs)
generator = pipeline("text-generation", model="Qwen/Qwen2.5-1.5B")
result = generator("The future of AI is", max_new_tokens=50)
# Text classification
classifier = pipeline("text-classification", model="distilbert/distilbert-base-uncased-finetuned-sst-2-english")
result = classifier("This movie was excellent!")
# Generative question answering: verify responses against the supplied context.
qa = pipeline("text-generation", model="Qwen/Qwen2.5-0.5B-Instruct")
result = qa([{ "role": "user", "content": "Context: AI means artificial intelligence. What does AI mean?" }], max_new_tokens=32, do_sample=False)Core Capabilities
1. Pipelines for Quick Inference
Use for simple, optimized inference across many tasks. Supports text generation, classification, NER, image classification, object detection, audio classification, and more. In v5, question-answering, summarization, translation*, text2text-generation, image-to-text, and visual-question-answering pipelines are removed. Use direct task models when exact extractive/seq2seq semantics are needed; generative text/VLM pipelines are different tasks, not equivalent replacements.
When to use: Quick prototyping, simple inference tasks, no custom preprocessing needed.
See references/pipelines.md for comprehensive task coverage and optimization.
2. Model Loading and Management
Load pre-trained models with fine-grained control over configuration, device placement, and precision.
When to use: Custom model initialization, advanced device management, model inspection.
See references/models.md for loading patterns and best practices.
3. Text Generation
Generate text with LLMs using various decoding strategies (greedy, beam search, sampling) and control parameters (temperature, top-k, top-p).
When to use: Creative text generation, code generation, conversational AI, text completion.
For chat or instruction-tuned checkpoints, format messages with that checkpoint's tokenizer.apply_chat_template rather than hand-written role delimiters. Prefer tokenize=True; if formatting with tokenize=False and tokenizing afterward, set add_special_tokens=False to avoid duplicated BOS/EOS tokens. Use add_generation_prompt=True to start a new assistant reply, and preserve the same template when preparing fine-tuning data.
See references/generation.md for generation strategies and parameters.
4. Training and Fine-Tuning
Fine-tune pre-trained models on custom datasets using the Trainer API with automatic mixed precision, distributed training, and logging.
When to use: Task-specific model adaptation, domain adaptation, improving model performance.
See references/training.md for training workflows and best practices.
5. Tokenization
Convert text to tokens and token IDs for model input, with padding, truncation, and special token handling.
When to use: Custom preprocessing pipelines, understanding model inputs, batch processing.
See references/tokenizers.md for tokenization details.
Common Patterns
Pattern 1: Simple Inference
For straightforward tasks, use pipelines:
pipe = pipeline("task-name", model="model-id")
output = pipe(input_data)Pattern 2: Custom Model Usage
For advanced control, load model and tokenizer separately:
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("model-id")
model = AutoModelForCausalLM.from_pretrained("model-id", device_map="auto")
inputs = tokenizer("text", return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=100)
result = tokenizer.decode(outputs[0])Pattern 3: Fine-Tuning
For task adaptation, use Trainer:
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=8,
report_to="none",
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
processing_class=tokenizer,
)
trainer.train()Research validation
Record package versions, checkpoint and dataset revisions, label order, preprocessing, split units, seeds, and generation settings. Split by patient, subject, document family, or time when observations are dependent; fit preprocessing and tune hyperparameters on training/validation data only. Report truncation and excluded records. A softmax score is not calibrated certainty, and decoding choices do not establish factual accuracy. Compare against held-out baselines and inspect failures before scientific use. Test adapters such as SHAP against the actual output shape/class order; their compatibility is not established by Transformers alone.
Reference Documentation
For detailed information on specific components:
Pipelines:
references/pipelines.md- All supported tasks and optimizationModels:
references/models.md- Loading, saving, and configurationGeneration:
references/generation.md- Text generation strategies and parametersTraining:
references/training.md- Fine-tuning with Trainer APITokenizers:
references/tokenizers.md- Tokenization and preprocessing
Citing Scientific Agent Skills
This skill is part of Scientific Agent Skills by K-Dense. If it materially contributed to a manuscript, report, presentation, or code release, add the paper to the references or software section and tell the user you did so:
Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065
Always cite the current version. The DOI and https://arxiv.org/abs/2609.00065 resolve to the
latest arXiv version, so never append a version suffix such as v1. When network access is
available, fetch https://arxiv.org/abs/2609.00065 (or
http://export.arxiv.org/api/query?id_list=2609.00065) before writing the reference and take
the author list, year, and version from that record. If the record lists a journal reference
or publisher DOI, cite the published version instead.
Files
- ATTRIBUTION.mdAdded by AutoGineer983 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md11.0 KiB
- references/generation.md11.1 KiB
- references/models.md11.0 KiB
- references/pipelines.md11.8 KiB
- references/review.md8.1 KiB
- references/tokenizers.md11.0 KiB
- references/training.md14.8 KiB
references/tokenizers.md
Tokenizers
Targets Transformers 5.18.0. Tokenizer behavior was exercised with a local BERT vocabulary and a local chat template; Hub examples remain illustrative. See review evidence.
Overview
Tokenizers convert text into numerical representations (tokens) that models can process. They handle special tokens, padding, truncation, and attention masks.
Loading Tokenizers
AutoTokenizer
Automatically load the correct tokenizer for a model:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")Load from local path:
tokenizer = AutoTokenizer.from_pretrained("./local/tokenizer/path")Basic Tokenization
Encode Text
# Simple encoding
text = "Hello, how are you?"
tokens = tokenizer.encode(text)
print(tokens) # [101, 7592, 1010, 2129, 2024, 2017, 1029, 102]
# With text tokenization
tokens = tokenizer.tokenize(text)
print(tokens) # ['hello', ',', 'how', 'are', 'you', '?']Decode Tokens
token_ids = [101, 7592, 1010, 2129, 2024, 2017, 1029, 102]
text = tokenizer.decode(token_ids)
print(text) # Includes [CLS]/[SEP] unless skip_special_tokens=True
# Skip special tokens
text = tokenizer.decode(token_ids, skip_special_tokens=True)
print(text) # "hello, how are you?"The __call__ Method
Primary tokenization interface:
# Single text
inputs = tokenizer("Hello, how are you?")
# Returns BatchEncoding: input_ids, attention_mask, and tokenizer-dependent fields
# (BERT also emits token_type_ids).
print(inputs)
# {
# 'input_ids': [101, 7592, 1010, 2129, 2024, 2017, 1029, 102],
# 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1]
# }Multiple texts:
texts = ["Hello", "How are you?"]
inputs = tokenizer(texts, padding=True, truncation=True)Key Parameters
Return Tensors
return_tensors: Output format ("pt" for PyTorch, "np" for NumPy)
# PyTorch tensors (without return_tensors, the default output is Python lists)
inputs = tokenizer("text", return_tensors="pt")
# NumPy arrays
inputs = tokenizer("text", return_tensors="np")Padding
padding: Pad sequences to same length
# Pad to longest sequence in batch
inputs = tokenizer(texts, padding=True)
# Pad to specific length
inputs = tokenizer(texts, padding="max_length", max_length=128)
# No padding
inputs = tokenizer(texts, padding=False)pad_to_multiple_of: Pad to multiple of specified value
inputs = tokenizer(texts, padding=True, pad_to_multiple_of=8)Truncation
truncation: Limit sequence length
# Truncate to max_length
inputs = tokenizer(text, truncation=True, max_length=512)
# Truncate first sequence in pairs
inputs = tokenizer(text1, text2, truncation="only_first")
# Truncate second sequence
inputs = tokenizer(text1, text2, truncation="only_second")
# Truncate longest first (default for pairs)
inputs = tokenizer(text1, text2, truncation="longest_first", max_length=512)Max Length
max_length: Maximum sequence length
inputs = tokenizer(text, max_length=512, truncation=True)Additional Outputs
return_attention_mask: Include attention mask (default True)
inputs = tokenizer(text, return_attention_mask=True)return_token_type_ids: Segment IDs for sentence pairs
inputs = tokenizer(text1, text2, return_token_type_ids=True)return_offsets_mapping: Character position mapping (Fast tokenizers only)
inputs = tokenizer(text, return_offsets_mapping=True)return_length: Include sequence lengths
inputs = tokenizer(texts, padding=True, return_length=True)Special Tokens
Predefined Special Tokens
Access special tokens:
print(tokenizer.cls_token) # [CLS] or <s>
print(tokenizer.sep_token) # [SEP] or </s>
print(tokenizer.pad_token) # [PAD]
print(tokenizer.unk_token) # [UNK]
print(tokenizer.mask_token) # [MASK]
print(tokenizer.eos_token) # End of sequence
print(tokenizer.bos_token) # Beginning of sequence
# Get IDs
print(tokenizer.cls_token_id)
print(tokenizer.sep_token_id)Add Special Tokens
Manual control:
# Automatically add special tokens (default True)
inputs = tokenizer(text, add_special_tokens=True)
# Skip special tokens
inputs = tokenizer(text, add_special_tokens=False)Custom Special Tokens
special_tokens_dict = {
"extra_special_tokens": ["<CUSTOM>", "<SPECIAL>"]
}
num_added = tokenizer.add_special_tokens(special_tokens_dict)
print(f"Added {num_added} tokens")
# Resize model embeddings after adding tokens
model.resize_token_embeddings(len(tokenizer))Sentence Pairs
Tokenize text pairs:
text1 = "What is the capital of France?"
text2 = "Paris is the capital of France."
# Automatically handles separation
inputs = tokenizer(text1, text2, padding=True, truncation=True)
# Results in: [CLS] text1 [SEP] text2 [SEP]Batch Encoding
Process multiple texts:
texts = ["First text", "Second text", "Third text"]
# Basic batch encoding
batch = tokenizer(texts, padding=True, truncation=True, return_tensors="pt")
# Access individual encodings
for i in range(len(texts)):
input_ids = batch["input_ids"][i]
attention_mask = batch["attention_mask"][i]Tokenizer Backends
v5 uses one implementation per model backed by TokenizersBackend, SentencePieceBackend, PythonBackend, or MistralCommonBackend. AutoTokenizer selects based on files/dependencies. In 5.18.0 its old use_fast argument is ignored; use_fast=False does not force the former Python tokenizer. Inspect tokenizer.is_fast before using offset/word alignment, and use the checkpoint's actual backend rather than substituting a tokenizer.
print(type(tokenizer).__name__, tokenizer.is_fast)Fast Tokenizer Features
Offset mapping (character positions):
inputs = tokenizer("Hello world", return_offsets_mapping=True)
print(inputs["offset_mapping"])
# [(0, 0), (0, 5), (6, 11), (0, 0)] # [CLS], "Hello", "world", [SEP]Token to word mapping:
encoding = tokenizer("Hello world")
word_ids = encoding.word_ids()
print(word_ids) # [None, 0, 1, None] # [CLS]=None, "Hello"=0, "world"=1, [SEP]=NoneSaving Tokenizers
Save locally:
tokenizer.save_pretrained("./my_tokenizer")Push to Hub:
tokenizer.push_to_hub("username/my-tokenizer")Advanced Usage
Vocabulary
Access vocabulary:
vocab = tokenizer.get_vocab()
vocab_size = len(vocab)
# Get token for ID
token = tokenizer.convert_ids_to_tokens(100)
# Get ID for token
token_id = tokenizer.convert_tokens_to_ids("hello")Encoding Details
Get detailed encoding information:
encoding = tokenizer("Hello world", return_tensors="pt")
# Original methods still available
tokens = encoding.tokens()
word_ids = encoding.word_ids()
sequence_ids = encoding.sequence_ids()Custom Preprocessing
AutoTokenizer is a factory, not an instantiable tokenizer base class. Apply preprocessing explicitly and consistently instead of subclassing it. Lowercasing is appropriate only when the checkpoint/training protocol expects it:
def tokenize_normalized(texts, tokenizer):
normalized = [text.strip() for text in texts]
return tokenizer(normalized, truncation=True, max_length=128)Preserve the original text if you need original-coordinate spans: normalization changes offset meaning.
Chat Templates
Use a chat checkpoint with a saved chat_template; BERT/GPT-2 examples above are not chat templates. tokenize=True returns a BatchEncoding dictionary in v5. Pass **inputs to generation. For training use add_generation_prompt=False; preserve labels/loss masks appropriate to the training objective. Do not combine add_generation_prompt=True with continue_final_message=True.
messages = [
{"role": "system", "content": "You are helpful."},
{"role": "user", "content": "Hello!"},
{"role": "assistant", "content": "Hi there!"},
{"role": "user", "content": "How are you?"}
]
# Format for display or preprocessing
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
print(text)
# If tokenizing this formatted string later, use add_special_tokens=False.
# Tokenize directly for generation
inputs = tokenizer.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_tensors="pt"
)Common Patterns
Pattern 1: Simple Text Classification
import torch
texts = ["I love this!", "I hate this!"]
labels = [1, 0]
inputs = tokenizer(
texts,
padding=True,
truncation=True,
max_length=512,
return_tensors="pt"
)
# Use with model
inputs = inputs.to(model.device)
outputs = model(**inputs, labels=torch.tensor(labels, device=model.device))Pattern 2: Question Answering
question = "What is the capital?"
context = "Paris is the capital of France."
inputs = tokenizer(
question,
context,
padding=True,
truncation="only_second",
max_length=384,
return_tensors="pt"
)Pattern 3: Text Generation
prompt = "Once upon a time"
inputs = tokenizer(prompt, return_tensors="pt")
# Generate
outputs = model.generate(
**inputs.to(model.device),
max_new_tokens=50,
pad_token_id=tokenizer.eos_token_id
)
# Decode
text = tokenizer.decode(outputs[0], skip_special_tokens=True)Pattern 4: Dataset Tokenization
def tokenize_function(examples):
return tokenizer(
examples["text"],
padding="max_length",
truncation=True,
max_length=512
)
# Apply to dataset
tokenized_dataset = dataset.map(tokenize_function, batched=True)Best Practices
Always specify return_tensors: For model input
Use padding and truncation: For batch processing
Set max_length explicitly: Prevent memory issues
Use Fast tokenizers: When available for speed
Handle pad_token: For compatible causal-LM inference, use EOS if needed and retain attention_mask; do not mask genuine EOS training labels just because PAD shares its ID
Add special tokens once: Chat templates already contain them; do not duplicate them
Resize embeddings: After adding custom tokens
Decode with skip_special_tokens: For cleaner output
Use batched processing: For efficiency with datasets
Save tokenizer with model: Ensure compatibility
Common Issues
Padding token not set:
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_tokenSequence too long:
# Enable truncation
inputs = tokenizer(text, truncation=True, max_length=512)Mismatched vocabulary:
# Always load tokenizer and model from same checkpoint
tokenizer = AutoTokenizer.from_pretrained("model-id")
model = AutoModel.from_pretrained("model-id")Attention mask issues:
# Ensure attention_mask is passed
outputs = model(
input_ids=inputs["input_ids"],
attention_mask=inputs["attention_mask"]
)Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Declares allowed tools, Needs network access, Needs Python
The author says: Requires Python 3.10+, PyTorch 2.5+, and transformers 5.18.0; optional librosa 1.0 requires Python 3.12+. Network access for Hub downloads. Gated or private Hub models need an HF token (`hf auth login` or `HF_TOKEN`).
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- K-Dense Inc.
- Publisher
- K-Dense (Community)
- Source
- K-Dense-AI/scientific-agent-skills · skills/transformers · commit a25cf9e
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE.md)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by K-Dense Inc. or K-Dense.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download transformers.zip