How to use from the
Use from the
llama-cpp-python library
# !pip install llama-cpp-python

from llama_cpp import Llama

llm = Llama.from_pretrained(
	repo_id="guruswami-ai/ocker-bogan-nano",
	filename="",
)
llm.create_chat_completion(
	messages = [
		{
			"role": "user",
			"content": "What is the capital of France?"
		}
	]
)

ocker-bogan-nano ๐Ÿ‡ฆ๐Ÿ‡บ

A ~1.5B model that rephrases boring agent/dev status messages into broad Australian ocker โ€” across a dial from mildly professional (1) to full-noise foul-mouthed (11). It's the bundled "voice brain" for Not-Happy-Jan, a multi-sensory coding-agent feedback system where a stroppy receptionist named Jan tells you how your build went.

โš ๏ธ Content & language warning. This model is built on real Australian slang and, at high ockerism, swears โ€” enthusiastically and creatively. That's the point: it turns out Australians swear a lot, and a model that can't is no true ocker. If you want it clean, the consuming app bleeps at runtime; the raw model holds nothing back.

Where the ocker comes from ๐Ÿบ

The training pairs are synthetic โ€” ~6,000 status-line โ†’ ocker-line examples generated by an abliterated 32B teacher in the app's own persona prompt, across every character ร— ockerism level ร— intent. But the teacher is grounded in authentic Australian source material so the slang rings true rather than sounding like a tourist doing an impression:

  • Reddit threads โ€” Australian subreddits, for naturalistic cadence and the way complaints and celebrations are actually phrased.
  • One-star complaints to Maccas โ€” drunken 1am reviews of Australian Macca's (McDonald's) and the like: a goldmine of unfiltered, emotional, peak-ocker register and profanity.

That raw corpus shapes the slang glossary / "ocker source material" used during generation. It is not redistributed (it lives in gitignored finetune/data/ / ocker-dataset/) โ€” only the pipeline and the resulting model are published here. If you reuse such sources, mind each site's terms and any personal data in scraped text.

The irony

To build an Australian-slang model we had to abliterate (uncensor) both the teacher and the student base โ€” because every off-the-shelf instruct model politely refuses to swear like a tradie who's just dropped a brick on his foot. So: an uncensored model, to teach a small model, to talk like an Australian. We see no problem here.

What it does

Given a status update it relays it in character as a short spoken line. The system prompt sets the character (Jan / Bazza / Karren), the ockerism level (1โ€“11), competence, and whether swearing is on (level 11). It was trained on that exact prompt format, so feed it the same.

ockerism "the payment handler crashed in prod" โ†’
2 "Payment handler kicked the bucket in prod, mate. Gotta bring it back up."
7 "Bloody payment handler's carked it in prod."
11 "Bugger all, the payment handler's fucked in prod."

About Not-Happy-Jan

Not-Happy-Jan turns Claude Code into a 1990s Australian call centre. When you kick off a long inference you're put on hold โ€” with up to 4 hours of custom hold music โ€” and the moment it finishes the line clicks, a handset is picked up, and one of a cast of customisable Australian characters delivers the result in real Australian slang:

  • Jan โ€” the stroppy receptionist (ok / progress / celebrate)
  • Bazza โ€” the anxious offsider (warnings)
  • Karren โ€” the escalation manager (errors / "I need to speak to your manager")

It runs entirely locally: a local TTS model gives each character their voice, and this local LLM (ocker-bogan-nano) writes what they say โ€” reacting in real time to a session's alerts and actions (errors, warnings, milestones), each in-character and at a tunable ockerism level. No cloud, no API key, no per-notification cost; your build status never leaves your laptop.

Why a specialist fine-tune?

Why bother fine-tuning a tiny model instead of just prompting a big one?

  • Authentic language choice. Trained on thousands of in-character pairs, a 1.5B specialist produces consistent, idiomatic ocker โ€” the right slang, the right swear, the right rhythm โ€” where a general model drifts, sanitises, or breaks character.
  • Local, bundled, free. ~940 MB, sub-second on Apple Silicon. It ships with the app and runs on-device โ€” no key, no network, no per-call cost for something that fires dozens of times a day.
  • The persona is baked in. Trained on NHJ's exact inference prompt, so the whole dial (character, ockerism 1โ€“11, competence, swearing) works out of the box from one short system prompt.
  • Distillation banks a big teacher cheaply. It matches a 32B abliterated teacher on this narrow task at ~1/20th the size โ€” the point of a specialist model: do one expressive thing extremely well, locally.

Run it

llama-server -m ocker-bogan-nano-Q4_K_M.gguf --alias ocker-bogan-nano --host 127.0.0.1 --port 8030 -c 2048

OpenAI-compatible at http://127.0.0.1:8030/v1. ~940 MB at Q4_K_M, sub-second on Apple Silicon. Feed it the persona system prompt + a Status update: โ€ฆ user message.

Run it with Ollama

Ollama pulls the GGUF straight from this repo โ€” nothing to download by hand:

ollama run hf.co/guruswami-ai/ocker-bogan-nano:Q4_K_M

For the in-character behaviour, bake the persona into a Modelfile:

FROM hf.co/guruswami-ai/ocker-bogan-nano:Q4_K_M
PARAMETER temperature 0.9
PARAMETER stop "Status update:"
SYSTEM """You are Jan, a broad-Australian receptionist relaying a coding agent's status.
Ockerism level: 7/11. Competence: 8/10. Reply in ONE short spoken line, in character."""
ollama create ocker-bogan-nano -f Modelfile
ollama run ocker-bogan-nano "Status update: the tests passed and the build is green"
# โ†’ "Yeah nice one โ€” all tests green, she's built clean as, mate."

Example prompts

The model is steered by the system prompt (character + ockerism 1โ€“11 + competence) and a Status update: โ€ฆ user line. Replies are illustrative โ€” it's deliberately varied:

System (persona) User: Status update: โ€ฆ Typical reply
Jan, ockerism 2, competence 9 deploy finished cleanly "Deploy's done and dusted."
Jan, ockerism 7 deploy finished cleanly "Beauty, deploy's gone through โ€” ripper."
Bazza (warnings), ockerism 6 disk is 85% full "Yeah, might wanna sort that disk soon, eh."
Karren (errors), ockerism 8 the database migration failed "Right, the migration's carked it. Not good enough."
Karren, ockerism 11 (swears; bleep at runtime if needed) prod is down "Prod's completely rooted โ€” fix the bloody thing now."

Lower the temperature for terser/steadier output; raise it for more colourful slang. Swap Jan for Bazza/Karren and change the ockerism number to move along the dial.

Recipe

  • Base: huihui-ai/Qwen2.5-1.5B-Instruct-abliterated (Apache-2.0)
  • Teacher: Qwen2.5-32B-Instruct-abliterated (AWQ, served via vLLM)
  • Method: LoRA SFT (r=32, ฮฑ=64, all attn+MLP projections), 3 epochs โ†’ merge fp16 โ†’ GGUF Q4_K_M
  • Both teacher and base are abliterated โ€” a censored model produces timid ockerism-11 (it won't swear); capability past ~32B buys nothing for this terse rephrasing task.

Licence & lineage

Apache-2.0, inheriting the Qwen2.5 base. "Abliterated" = a refusal-direction ablation of the base weights (by huihui-ai). No training data beyond the synthetic set described above.

Use responsibly. It will swear at you. That's a feature, not a bug.

Downloads last month
61
GGUF
Model size
2B params
Architecture
qwen2
Hardware compatibility
Log In to add your hardware

4-bit

16-bit

Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for guruswami-ai/ocker-bogan-nano

Quantized
(5)
this model