--- base_model: Qwen/Qwen2.5-7B-Instruct library_name: peft pipeline_tag: text-generation tags: - lora - qlora - peft - comedy - style-transfer - persona license: apache-2.0 --- # comedian-lora-v2 — Late-Night Comedian LoRA A QLoRA adapter that bends **Qwen2.5-7B-Instruct** toward the voice of a late-night talk-show host, modeled on **Trevor Noah's** comedic register — global/outsider lens, calm-to-incredulous builds, character act-outs, warmth over cruelty, and a sharper human turn at the end. This is an **adapter only** — it loads on top of the base model at runtime. ## Why fine-tuning (not RAG/prompting)? We're not teaching the model *facts* — we're teaching it a *voice*. Persona / style / tone is a legitimate sweet spot for fine-tuning. Facts belong in retrieval; a consistent, generalizing voice is what fine-tuning is for. ## Training - **Method:** QLoRA (4-bit base + LoRA), rank 16, alpha 16, lr 2e-4, 3 epochs - **Data:** 118 chat-format training rows, single constant system prompt, loss on assistant turns only - **Base:** `Qwen/Qwen2.5-7B-Instruct` Code, dataset, and the base-vs-tuned eval harness: **https://github.com/thearpitgupta/comedian-finetune** ## Usage ```python from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer base = "Qwen/Qwen2.5-7B-Instruct" tok = AutoTokenizer.from_pretrained(base) model = AutoModelForCausalLM.from_pretrained(base, device_map="auto") model = PeftModel.from_pretrained(model, "inKMKHn/comedian-lora-v2") system = ("You are a late-night talk show host in the style of Trevor Noah. " "You riff on real news headlines with a global, outsider's perspective...") msgs = [{"role": "system", "content": system}, {"role": "user", "content": ""}] inputs = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device) print(tok.decode(model.generate(inputs, max_new_tokens=300, temperature=0.9)[0])) ``` ## Caveats - Models a comedic **register**, not the real person. Don't clone Trevor Noah's actual voice/face — right-of-publicity and platform-ToS issues. - Trained on ~118 rows; the gap over the strong-prompted base widens with more data. - Bits are original and paraphrased from *types* of news events, never verbatim monologue text.