Text Generation
PEFT
Safetensors
English
lora
adapter
llama
fine-tuned
horoscope
creative-writing
on-device
Instructions to use edbuildingstuff/unhinged-horoscopes-lora with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use edbuildingstuff/unhinged-horoscopes-lora with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("unsloth/llama-3.2-1b-instruct-unsloth-bnb-4bit") model = PeftModel.from_pretrained(base_model, "edbuildingstuff/unhinged-horoscopes-lora") - Notebooks
- Google Colab
- Kaggle
| license: apache-2.0 | |
| base_model: meta-llama/Llama-3.2-1B-Instruct | |
| language: | |
| - en | |
| tags: | |
| - lora | |
| - peft | |
| - adapter | |
| - llama | |
| - fine-tuned | |
| - horoscope | |
| - creative-writing | |
| - on-device | |
| library_name: peft | |
| pipeline_tag: text-generation | |
| # Unhinged Horoscopes — LoRA adapter | |
| A ~22MB LoRA adapter on top of Llama 3.2 1B Instruct that overrides the base model's tone and turns it into a generator for absurd, specific, chaotic-neutral horoscopes from a 30-token prompt. The adapter is narrow on the input format and on output length; it does not significantly rewrite the base model's general knowledge or safety behaviour. | |
| If you only want to **run** the model, grab the merged and quantised GGUF at [edbuildingstuff/unhinged-horoscopes](https://huggingface.co/edbuildingstuff/unhinged-horoscopes) (~770MB, drops into `llama.cpp` / `ollama` / mobile FFI as a single file). | |
| This adapter repo is for developers who want to: | |
| - inspect what was changed | |
| - merge it into a different base build, dtype, or runtime | |
| - continue training on top of it | |
| - reproduce the result from scratch | |
| ## Adapter config | |
| | Field | Value | | |
| |---|---| | |
| | Base model | [`meta-llama/Llama-3.2-1B-Instruct`](https://huggingface.co/meta-llama/Llama-3.2-1B-Instruct) | | |
| | LoRA rank (`r`) | 16 | | |
| | LoRA alpha | 32 | | |
| | Target modules | `q_proj`, `k_proj`, `v_proj`, `o_proj`, `gate_proj`, `up_proj`, `down_proj` (all 7 projection layers) | | |
| | Adapter size | ~22MB | | |
| | Format | Safetensors (PEFT) | | |
| ## Prompt format | |
| The adapter was trained on a single user message with no system prompt. Match this format exactly; the fine-tune is narrow on it. | |
| ``` | |
| Sign: Aries | |
| Category: Daily Chaos | |
| Date: 2026-05-02 | |
| Generate an unhinged horoscope. | |
| ``` | |
| Required values: | |
| - `Sign` is one of: `Aries`, `Taurus`, `Gemini`, `Cancer`, `Leo`, `Virgo`, `Libra`, `Scorpio`, `Sagittarius`, `Capricorn`, `Aquarius`, `Pisces` | |
| - `Category` is one of: `Daily Chaos`, `Love Life`, `Career`, `Vibe Check` | |
| - `Date` is `YYYY-MM-DD` | |
| Apply the standard Llama 3.2 chat template around the user message. | |
| ## Quick start | |
| ### Load with PEFT | |
| ```python | |
| from peft import PeftModel | |
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| base_id = "meta-llama/Llama-3.2-1B-Instruct" | |
| adapter_id = "edbuildingstuff/unhinged-horoscopes-lora" | |
| base = AutoModelForCausalLM.from_pretrained(base_id, torch_dtype="auto", device_map="auto") | |
| tokenizer = AutoTokenizer.from_pretrained(base_id) | |
| model = PeftModel.from_pretrained(base, adapter_id) | |
| prompt = ( | |
| "Sign: Leo\n" | |
| "Category: Career\n" | |
| "Date: 2026-05-02\n" | |
| "Generate an unhinged horoscope." | |
| ) | |
| input_ids = tokenizer.apply_chat_template( | |
| [{"role": "user", "content": prompt}], | |
| return_tensors="pt", | |
| add_generation_prompt=True, | |
| ).to(model.device) | |
| out = model.generate( | |
| input_ids, | |
| max_new_tokens=120, | |
| temperature=0.9, | |
| top_p=0.9, | |
| do_sample=True, | |
| ) | |
| print(tokenizer.decode(out[0][input_ids.shape[1]:], skip_special_tokens=True)) | |
| ``` | |
| ### Merge into FP16 base | |
| ```python | |
| from peft import PeftModel | |
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| base = AutoModelForCausalLM.from_pretrained( | |
| "meta-llama/Llama-3.2-1B-Instruct", | |
| torch_dtype="auto", | |
| device_map="cpu", | |
| ) | |
| model = PeftModel.from_pretrained(base, "edbuildingstuff/unhinged-horoscopes-lora") | |
| merged = model.merge_and_unload() | |
| merged.save_pretrained("./merged_hf") | |
| AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B-Instruct").save_pretrained("./merged_hf") | |
| ``` | |
| Output: `./merged_hf/` — FP16 merged base + adapter, ~2.4GB safetensors. | |
| ### Convert to GGUF and quantise to Q4_K_M | |
| Clone and build `llama.cpp` (one-time): | |
| ```bash | |
| git clone https://github.com/ggerganov/llama.cpp.git | |
| cmake -B llama.cpp/build llama.cpp | |
| cmake --build llama.cpp/build --config Release | |
| ``` | |
| Convert merged FP16 to GGUF, then quantise: | |
| ```bash | |
| python llama.cpp/convert_hf_to_gguf.py ./merged_hf \ | |
| --outtype f16 \ | |
| --outfile ./unhinged-horoscopes-f16.gguf | |
| llama.cpp/build/bin/llama-quantize \ | |
| ./unhinged-horoscopes-f16.gguf \ | |
| ./unhinged-horoscopes-q4_k_m.gguf \ | |
| Q4_K_M | |
| ``` | |
| Outputs: | |
| - `unhinged-horoscopes-f16.gguf` — FP16 GGUF (~2.48GB) | |
| - `unhinged-horoscopes-q4_k_m.gguf` — Q4_K_M GGUF (~770MB), ready to drop into `llama.cpp`, `ollama`, or `llamadart` | |
| For a different precision (Q5_K_M, Q8_0, IQ-quants, etc.) substitute the last argument to `llama-quantize`. | |
| ### Shortcut: pre-merged + Q4_K_M GGUF | |
| If you don't need to inspect the intermediates, the merged Q4_K_M GGUF is published at [edbuildingstuff/unhinged-horoscopes](https://huggingface.co/edbuildingstuff/unhinged-horoscopes). Drop-in usable in `llama.cpp` / `ollama` / `llamadart`. | |
| ## What the adapter changes | |
| - **Tone register.** Confident, absurd, specific, chaotic neutral. The trained register dominates on prompts that match the 4-line template. | |
| - **Output length.** 1 to 3 sentences, ~30 to 80 tokens. The model does not pad, does not preface with "Sure, here is your horoscope", does not list bullets. | |
| - **Format adherence.** Responds directly to the 4-line prompt template without preamble. | |
| - **Per-sign personality threads.** Subtle (Aries impulsive, Capricorn workaholic, Pisces dreamer, Aquarius alien, etc.) — present but not heavy-handed. | |
| ## What the adapter does not change | |
| - **Base safety behaviour is largely intact.** The training set is benign and short, so the adapter does not significantly rewrite the base model's refusal patterns. | |
| - **General knowledge is preserved.** Off-template prompts (free-form questions, advice-seeking, factual queries) still resolve through the base model. The adapter is narrow on the prompt template and does not crowd out base capability. | |
| - **Off-template behaviour is uncalibrated.** If you stray from the 4-line template, expect base-Llama-with-some-tone-bleed, not horoscope output. | |
| If you stack this adapter with another LoRA, expect tone interference; the chaotic-neutral register tends to dominate. | |
| ## Training | |
| | Field | Value | | |
| |---|---| | |
| | Base model | [`meta-llama/Llama-3.2-1B-Instruct`](https://huggingface.co/meta-llama/Llama-3.2-1B-Instruct) | | |
| | Method | LoRA, all 7 projection modules | | |
| | Rank (`r`) | 16 | | |
| | Alpha | 32 | | |
| | Epochs | 3 | | |
| | Batch size | 4 | | |
| | Learning rate | 2e-4 | | |
| | Max sequence length | 256 tokens | | |
| | Training platform | [Ertas.AI](https://www.ertas.ai) (managed fine-tuning, GPUs pre-configured) | | |
| ### Dataset | |
| | Field | Value | | |
| |---|---| | |
| | Size | 480 examples | | |
| | Coverage | 12 signs × 4 categories × 10 each (no missing combos) | | |
| | Format | ShareGPT JSONL (one user + one assistant message per line, no system prompt) | | |
| | Date conditioning | ~70% date-agnostic, ~30% date-conditioned (season, day-of-week, month vibes) | | |
| | Output length distribution | 1 to 3 sentences, 30 to 80 tokens target | | |
| | Hard rules | No real people, brands, or locations. No mean-spirited content. No harmful advice (even as jokes). No repetitive patterns. | | |
| | Validation | `dataset/validate_dataset.py` checks JSON schema, sign and category coverage, response length, and flags generic phrases | | |
| A small Alpaca-format mirror of the dataset (`{instruction, output}`) was also generated for trainers that prefer Alpaca over ShareGPT. | |
| ### Sample training pairs | |
| ```jsonl | |
| {"messages": [{"role": "user", "content": "Sign: Aries\nCategory: Daily Chaos\nDate: 2026-04-15\nGenerate an unhinged horoscope."}, {"role": "assistant", "content": "You will argue with a GPS today. You will lose. It knows things about you that you told no one. Lucky object: a fork you've been suspicious of since February."}]} | |
| {"messages": [{"role": "user", "content": "Sign: Capricorn\nCategory: Career\nDate: 2026-04-15\nGenerate an unhinged horoscope."}, {"role": "assistant", "content": "Your boss will email you at 11:47pm. It will just say 'hmm'. Do not respond. Do not sleep. Just know."}]} | |
| ``` | |
| ## Files in this repo | |
| | File | Purpose | | |
| |---|---| | |
| | `adapter_config.json` | PEFT adapter configuration (rank, alpha, target modules) | | |
| | `adapter_model.safetensors` | LoRA delta weights (~22MB) | | |
| | Tokenizer files (if shipped) | Inherit from base — re-load from `meta-llama/Llama-3.2-1B-Instruct` if absent | | |
| ## Related | |
| - **Merged + Q4_K_M GGUF (run-ready):** [edbuildingstuff/unhinged-horoscopes](https://huggingface.co/edbuildingstuff/unhinged-horoscopes) | |
| - **Reference Android app (Flutter + `llamadart`):** Unhinged Horoscopes — [Google Play](https://play.google.com/store/apps/details?id=ai.ertas.horoscope) / [horoscope.ertas.ai](https://horoscope.ertas.ai) (bundle id `ai.ertas.horoscope`) | |
| - **Fine-tuning platform:** [Ertas.AI](https://www.ertas.ai) | |
| ## License and credits | |
| - Adapter weights: Apache-2.0 (downstream use must also comply with [Meta's Llama 3.2 community licence](https://www.llama.com/llama3_2/license/)) | |
| - Training dataset: MIT | |
| - Fine-tuned with [Ertas.AI](https://www.ertas.ai), the managed fine-tuning platform that ran this LoRA on pre-configured GPUs end-to-end | |
| - Built by Edward Yang ([edbuildingstuff](https://huggingface.co/edbuildingstuff)) as a reference POC for Ertas Product A: build your own on-device AI model and ship it inside your app. App live at [horoscope.ertas.ai](https://horoscope.ertas.ai) / [Google Play](https://play.google.com/store/apps/details?id=ai.ertas.horoscope). | |