Instructions to use yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator", dtype="auto", device_map="auto") - llama-cpp-python
How to use yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator", filename="smollm2_1_7b_instruct_merged-q8_0.gguf", )
llm.create_chat_completion( messages = [ { "role": "user", "content": "What is the capital of France?" } ] ) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0 # Run inference directly in the terminal: llama cli -hf yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0 # Run inference directly in the terminal: llama cli -hf yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0 # Run inference directly in the terminal: ./llama-cli -hf yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0 # Run inference directly in the terminal: ./build/bin/llama-cli -hf yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0
Use Docker
docker model run hf.co/yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0
- LM Studio
- Jan
- vLLM
How to use yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0
- SGLang
How to use yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Ollama
How to use yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator with Ollama:
ollama run hf.co/yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0
- Unsloth Studio
How to use yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator to start chatting
- Atomic Chat new
- Docker Model Runner
How to use yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator with Docker Model Runner:
docker model run hf.co/yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0
- Lemonade
How to use yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator:Q8_0
Run and chat with the model
lemonade run user.SmolLM2-1.7B-Instruct-DocstringGenerator-Q8_0
List all available models
lemonade list
SmolLM2-1.7B-Instruct · DocstringGenerator
A fine-tuned SmolLM2-1.7B-Instruct specialised in writing concise, high-level Python docstrings for functions, methods and classes. This model is the backbone of the PyDoctor CLI — a fully local, LLM-powered tool that automatically writes and manages docstrings in your Python codebase.
Intended Use
The model generates summary-style docstrings — single-paragraph, plain-English descriptions of a Python code block's purpose and architectural role. It does not produce Args:, Returns:, or Raises: sections by design.
Suitable for:
- Automated docstring generation in CI/CD pipelines
- Interactive IDE plugins
- Local, privacy-preserving documentation workflows via llama.cpp / GGUF
Not suitable for:
- General-purpose code generation
- Generating full NumPy/Google-style docstrings with parameter tables (explicitly omitted)
- Non-Python languages
Quick Start
With llama.cpp (GGUF · recommended for local use)
# Download the Q8_0 GGUF
huggingface-cli download \
yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator \
smollm2_1_7b_instruct_merged-q8_0.gguf \
--local-dir ./models
# Run inference
llama-cli \
-m ./models/smollm2_1_7b_instruct_merged-q8_0.gguf \
--chat-template chatml \
-p "..."
Tip: The PyDoctor CLI handles prompt construction, parsing, and atomic file rewrites out of the box.
Prompt Format (ChatML)
The model uses the ChatML template native to SmolLM2-Instruct:
<|im_start|>system
{SYSTEM_PROMPT}<|im_end|>
<|im_start|>user
CONTEXT
{context_code}
TARGET CODE
{target_code}<|im_end|>
<|im_start|>assistant
The model then generates only the raw docstring text, terminated by <|im_end|>.
Context definition:
- function target -> context = "Independent code block"
- method target → context =
__init__signature of its enclosing class - class target → context = signatures of its methods
Training Pipeline
Stage 1 — Code Extraction
Raw Python source files were streamed from codeparrot/codeparrot-clean (~200 k samples). Each file passed a quality filter that rejected:
| Filter | Threshold |
|---|---|
| Too few lines | < 3 non-empty lines |
| Minified code | avg line length > 150 chars |
| Low alphabetic ratio | < 15 % (binary / machine-generated) |
| Repetitive boilerplate | unique line ratio < 10 % |
| Oversized files | > 50 000 characters |
Surviving files were parsed with LibCST producing (target, context) pairs.
Stage 2 — Synthetic Docstring Generation
(target, context) pairs were labelled in parallel using DeepSeek V4 Flash (via OpenRouter):
The teacher-model system prompt enforced:
- Describe semantic purpose and architectural role, not implementation details
- Use context to disambiguate class membership
Stage 3 — Instruct Data Preparation & Tokenisation
Synthetic batches were assembled into ChatML prompt/completion pairs:
prompt = (
f"<|im_start|>system\n{SYSTEM_PROMPT}<|im_end|>\n"
f"<|im_start|>user\nCONTEXT\n{context}\n\nTARGET CODE\n{target}<|im_end|>\n"
f"<|im_start|>assistant\n"
)
completion = f"{docstring}<|im_end|>"
Labels were constructed so that only completion tokens are trained on — prompt tokens are masked from cross-entropy loss.
Stage 4 — QLoRA Fine-tuning
Fine-tuning was performed on Kaggle kernels (instruct_finetune.py):
| Hyperparameter | Value |
|---|---|
| Quantisation | 4-bit NF4, double quant, fp16 compute |
LoRA rank r |
32 |
LoRA alpha α |
64 |
| LoRA dropout | 0.2 |
| LoRA bias | none |
| Target modules | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj |
| Optimizer | AdamW 8-bit (bitsandbytes) |
| Learning rate | 2e-4 |
| LR schedule | Cosine with 5 % warmup |
| Weight decay | 0.01 |
| Batch size | 8 per device |
| Gradient accumulation | 8 steps → effective batch 64 |
| Epochs | 1 |
| Max sequence length | 1 024 tokens (95th-pct filter) |
| Validation split | 1 % held-out, evaluated each epoch |
| Seed | 1337 |
Loss = next-token cross-entropy, prompt tokens ignored via label mask.
Stage 5 — LoRA Merge & GGUF Export
After training, LoRA adapters were merged back into the base model weights and converted to Q8_0 GGUF using llama.cpp:
LoRA adapter (epoch 1, safetensors)
│
▼ merge_and_unload()
│
merged fp16 safetensors
│
▼ llama.cpp convert_hf_to_gguf.py --outtype q8_0
▼
smollm2_1_7b_instruct_merged-q8_0.gguf
Files
| File | Description |
|---|---|
smollm2_1_7b_instruct_merged-q8_0.gguf |
Q8_0 GGUF for llama.cpp — recommended for local use |
safetensors/model.safetensors |
Merged fp16 weights |
safetensors/config.json |
HuggingFace model configuration |
safetensors/tokenizer.json / safetensors/tokenizer_config.json |
SmolLM2-1.7B-Instruct tokenizer |
Limitations & Bias
- Summary-only style: the model is trained to output a single-paragraph summary. It will not produce
Args:/Returns:sections. - Python only: trained exclusively on Python source code from codeparrot-clean.
- Context dependency: quality improves when the correct context string is provided. Passing an empty context for class methods may reduce coherence.
- Teacher model bias: docstring style reflects DeepSeek V4 Flash's preferences filtered through the strict prompt rules. Unusual code idioms may yield generic descriptions.
- Not a general assistant: the model is heavily specialised and will likely perform poorly on tasks other than docstring generation.
Citation
@misc{pydoctor2026,
author = {yezdata},
title = {PyDoctor: Local LLM-powered Python Docstring Generator},
year = {2026},
howpublished = {\url{https://github.com/yezdata/pydoctor}},
note = {Fine-tuned SmolLM2-1.7B-Instruct model available at
\url{https://huggingface.co/yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator}}
}
License
This model is released under the Apache 2.0 license, matching the base SmolLM2-1.7B-Instruct model.
Training data originates from codeparrot/codeparrot-clean (MIT)
- Downloads last month
- 67
8-bit
Model tree for yezdata/SmolLM2-1.7B-Instruct-DocstringGenerator
Base model
HuggingFaceTB/SmolLM2-1.7B