Triage recruiter outreach with a small (<1B) language model. Built for the HuggingFace Build Small Hackathon.
Project description
recruitertriage
Triage recruiter outreach with a small (<1B) language model. Built for the HuggingFace Build Small Hackathon.
The default backend is
SmolLM2-360M-Instruct.
It fits on a free HF Space CPU and still gets useful triage signal.
You can swap in any callable LM (a fine-tune, Qwen-0.5B, a
heuristic, anything that maps prompt -> string).
Install
pip install recruitertriage # core only (zero heavy deps)
pip install "recruitertriage[smollm]" # + SmolLM2 / transformers
pip install "recruitertriage[space]" # + Gradio for the Space UI
Python 3.10+.
What it does
Each piece of recruiter outreach gets bucketed into one of five labels:
| label | meaning |
|---|---|
interview |
looks like a real fit, schedule a call |
needs_info |
interesting but missing role/comp/level |
reject |
clearly off (wrong stack, wrong level) |
spam |
not a real role (vendor sales, lead-gen, scam) |
unsure |
low confidence — falls through to a human |
Each Decision carries a label, a confidence (0..1), a one-line
reason, an optional suggested reply, and the raw signals the model
saw.
Usage
from recruitertriage import triage, HeuristicLLM
# Zero-dep fallback (good for tests/CI):
d = triage(
subject="Staff ML Engineer @ AcmeAI",
body="Hi - we're hiring a Staff ML Engineer. Comp 250-320k...",
llm=HeuristicLLM(),
)
print(d.label, d.confidence, d.suggested_reply)
# Real small-model backend (requires the `smollm` extra):
from recruitertriage.smollm import make_smollm
llm = make_smollm("HuggingFaceTB/SmolLM2-360M-Instruct")
d = triage(subject="...", body="...", llm=llm)
triage() only cares that llm is Callable[[str], str], so any
small instruction-tuned LM works. The core parser is tolerant of
small-model JSON quirks (code fences, prose around the object, etc.).
HuggingFace Space
The space/ directory is the deployable Gradio app:
pip install "recruitertriage[space]"
python space/app.py
To publish:
hf login- Create a new Gradio Space (CPU basic is enough)
- Push the contents of
space/as the Space root
Demo
python examples/demo.py # uses HeuristicLLM
python examples/demo.py --smollm # uses SmolLM2-360M-Instruct
Companion libraries
recruitertriage slots into the @mukundakatta agent-stack:
- agentleash — USD/call budget cap + tool-arg gate
- birddog — audited Bright Data egress for scraping agents
- agentvet — tool-arg validation with retry hints
- agentsnap — snapshot tests for agent traces
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file recruitertriage-0.1.0.tar.gz.
File metadata
- Download URL: recruitertriage-0.1.0.tar.gz
- Upload date:
- Size: 10.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6c8af82400eb09a6b21d013320fe29179ff627ba24503130c3937f75a54c9f1a
|
|
| MD5 |
c2dde3fe33d8adfea0a17d06e8e9d6dc
|
|
| BLAKE2b-256 |
f8b7b7b864e2383a57a6a0d3e9d16fe68919d4de397d478d1c4070f3ec1a8307
|
File details
Details for the file recruitertriage-0.1.0-py3-none-any.whl.
File metadata
- Download URL: recruitertriage-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
583e33b7a6283bf2a42ad5f6bec2a1e802935547a06b1a400055e2ab6bf0da81
|
|
| MD5 |
f74f5c8a54a2b76c8f40d3bd07c582bc
|
|
| BLAKE2b-256 |
005d2c8ce080225bb7c6044570610708e1bda6c29bda4ea0c86462c997cf6778
|