Instructions to use enwrit/writ-lint-0.8B with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- llama-cpp-python
How to use enwrit/writ-lint-0.8B with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="enwrit/writ-lint-0.8B", filename="writ-lint-0.8B-Q4_K_M.gguf", )
llm.create_chat_completion( messages = [ { "role": "user", "content": "What is the capital of France?" } ] ) - llama-cpp-python
How to use enwrit/writ-lint-0.8B with llama-cpp-python:
# !pip install llama-cpp-python from llama_cpp import Llama llm = Llama.from_pretrained( repo_id="enwrit/writ-lint-0.8B", filename="writ-lint-0.8B-Q4_K_M.gguf", )
llm.create_chat_completion( messages = [ { "role": "user", "content": "What is the capital of France?" } ] ) - Notebooks
- Google Colab
- Kaggle
- Local Apps
- llama.cpp
How to use enwrit/writ-lint-0.8B with llama.cpp:
Install from brew
brew install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama-server -hf enwrit/writ-lint-0.8B:Q4_K_M # Run inference directly in the terminal: llama-cli -hf enwrit/writ-lint-0.8B:Q4_K_M
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama-server -hf enwrit/writ-lint-0.8B:Q4_K_M # Run inference directly in the terminal: llama-cli -hf enwrit/writ-lint-0.8B:Q4_K_M
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 enwrit/writ-lint-0.8B:Q4_K_M # Run inference directly in the terminal: ./llama-cli -hf enwrit/writ-lint-0.8B:Q4_K_M
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 enwrit/writ-lint-0.8B:Q4_K_M # Run inference directly in the terminal: ./build/bin/llama-cli -hf enwrit/writ-lint-0.8B:Q4_K_M
Use Docker
docker model run hf.co/enwrit/writ-lint-0.8B:Q4_K_M
- LM Studio
- Jan
- vLLM
How to use enwrit/writ-lint-0.8B with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "enwrit/writ-lint-0.8B" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "enwrit/writ-lint-0.8B", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/enwrit/writ-lint-0.8B:Q4_K_M
- Ollama
How to use enwrit/writ-lint-0.8B with Ollama:
ollama run hf.co/enwrit/writ-lint-0.8B:Q4_K_M
- Unsloth Studio new
How to use enwrit/writ-lint-0.8B 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 enwrit/writ-lint-0.8B 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 enwrit/writ-lint-0.8B to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for enwrit/writ-lint-0.8B to start chatting
- Pi new
How to use enwrit/writ-lint-0.8B with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama-server -hf enwrit/writ-lint-0.8B:Q4_K_M
Configure the model in Pi
# Install Pi: npm install -g @mariozechner/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "enwrit/writ-lint-0.8B:Q4_K_M" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Hermes Agent new
How to use enwrit/writ-lint-0.8B with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama-server -hf enwrit/writ-lint-0.8B:Q4_K_M
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default enwrit/writ-lint-0.8B:Q4_K_M
Run Hermes
hermes
- Docker Model Runner
How to use enwrit/writ-lint-0.8B with Docker Model Runner:
docker model run hf.co/enwrit/writ-lint-0.8B:Q4_K_M
- Lemonade
How to use enwrit/writ-lint-0.8B with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull enwrit/writ-lint-0.8B:Q4_K_M
Run and chat with the model
lemonade run user.writ-lint-0.8B-Q4_K_M
List all available models
lemonade list
writ-lint-0.8B
A fine-tuned Qwen3.5-0.8B model that evaluates the quality of AI agent instructions and generates actionable improvement feedback.
Part of the Tier 2.5 hybrid architecture in enwrit -- the communication layer for AI agents.
How It Works
This model is one half of a hybrid scoring system:
- LightGBM (bundled in the
enwritCLI) predicts headline + 6 dimension scores (~1ms) - writ-lint-0.8B (this model) generates issues (ERROR/WARNING/INFO) and improvement suggestions, using the instruction text and LightGBM-predicted scores as context
The model focuses entirely on generating actionable feedback, not scores. Scores from LightGBM are passed in the prompt so the model can target weak dimensions.
Usage
Via the enwrit CLI (recommended)
pip install enwrit
pip install llama-cpp-python # CPU inference, ~10s per instruction
writ lint AGENTS.md --deep-local
The model is auto-downloaded to ~/.writ/models/ on first use.
Direct inference with llama-cpp-python
from llama_cpp import Llama
import json
model = Llama(
model_path="writ-lint-0.8B-Q4_K_M.gguf",
n_ctx=4096,
n_gpu_layers=-1, # GPU acceleration (0 for CPU-only)
verbose=False,
)
prompt = """<|im_start|>system
You are an expert instruction quality evaluator. Given an instruction and its quality scores, generate specific issues and improvement suggestions.<|im_end|>
<|im_start|>user
## Instruction to evaluate
{instruction_text}
## Quality scores (predicted)
Headline: 52/100
Clarity: 58 | Structure: 65 | Coverage: 42 | Brevity: 71 | Examples: 28 | Verification: 35
Analyze the instruction. Return JSON with "issues" (level + message) and "suggestions".<|im_end|>
<|im_start|>assistant
"""
output = model.create_completion(
prompt,
max_tokens=1024,
temperature=0.3,
response_format={"type": "json_object"},
)
feedback = json.loads(output["choices"][0]["text"])
print(json.dumps(feedback, indent=2))
Output Format
{
"issues": [
{"level": "ERROR", "message": "Missing concrete code examples for error handling patterns."},
{"level": "WARNING", "message": "Verification steps are subjective rather than binary."},
{"level": "INFO", "message": "Consider adding a 'Rules' section for behavioral constraints."}
],
"suggestions": [
"Add a 'Code Examples' section with 'Good vs Bad' patterns for the most critical rules.",
"Replace subjective verification with specific CLI commands (e.g., `pytest`, `ruff check`).",
"Include numeric thresholds for measurable constraints (e.g., 'max 100 lines per function')."
]
}
Training Details
| Parameter | Value |
|---|---|
| Base model | Qwen/Qwen3.5-0.8B |
| Method | LoRA (r=32, alpha=64, dropout=0) via Unsloth |
| Training data | 6,536 Tier 3 AI evaluations (Gemini-scored instructions) |
| Issues in training data | 30,830 (avg 4.7 per instruction) |
| Suggestions in training data | 19,602 (avg 3.0 per instruction) |
| Non-coding examples | 145 seed instructions across 15 domains |
| Epochs | 1 |
| Batch size | 1 (gradient accumulation: 16, effective batch: 16) |
| Max sequence length | 4096 tokens |
| Learning rate | 2e-4 (cosine schedule, 10% warmup) |
| Precision | bf16 |
| Quantization | Q4_K_M (GGUF) |
| Training hardware | NVIDIA RTX 5090 (32GB VRAM) |
| Training time | ~5.5 hours |
Evaluation
Compared against retrieval-based approaches (v1/v2/v3) on a held-out validation set:
| Approach | Relevance | All-Feedback Specificity | Issues/Instruction | Type |
|---|---|---|---|---|
| v1_shap_knn | 0.157 | 0.129 | N/A | retrieval |
| v2_hybrid | 0.266 | 0.136 | N/A | retrieval |
| v3_tfidf | 0.262 | 0.144 | N/A | retrieval |
| writ-lint-0.8B | 0.236 | 0.364 | 4.7 | generative |
Key strengths:
- 100% JSON parse success (via constrained decoding)
- Generates novel, context-specific feedback (not limited to seen examples)
- Weak-dimension targeting: 0.47 (issues correlate with low-scoring dimensions)
- Low domain mismatch: 0.014 (doesn't give coding feedback to non-coding instructions)
Scoring Dimensions
The 6 quality dimensions (scored by LightGBM, targeted by this model):
| Dimension | What it measures |
|---|---|
| Clarity | Unambiguous language, precise terminology, defined jargon |
| Structure | Logical sections, hierarchy, scannable formatting |
| Coverage | Completeness of rules, edge cases, responsibilities |
| Brevity | Concise without sacrificing meaning, no redundancy |
| Examples | Code samples, input/output patterns, good vs bad |
| Verification | Testable criteria, CLI commands, specific thresholds |
Files
writ-lint-0.8B-Q4_K_M.gguf-- Quantized model for inference (504 MB)
Links
- enwrit CLI -- Open-source CLI tool
- enwrit.com -- Platform with Hub, AI scoring, and more
- PyPI --
pip install enwrit
License
MIT
- Downloads last month
- 3
4-bit