DuogDuog AI — Twitch Chat QLoRA

DuogDuog AI is a QLoRA adapter for Qwen3-8B. It takes a stream transcript as input and generates multiple short Twitch-chat reactions, one message per line.

This repository contains the adapter, not a standalone 8B model. Load it together with Qwen/Qwen3-8B using PEFT.

Intended behavior

Input:

Stream transcript:
I am so good at 2D platformers, chat.

Example output:

YOU ARE BAD AT 2D PLATFORMERS
SKILL ISSUE
JUST JUMP
OMEGALUL

The adapter also learned several stream-specific conditional chat jokes:

  • Claims about being good at 2D platformers can trigger “bad at 2D platformers” reactions.
  • Predictions, bets, or voting can trigger “RIGGED” reactions.
  • Hair, hairline, hats, or denying baldness can trigger “BALD” reactions.

These reactions are intended to be topic-dependent rather than inserted into every response.

Training summary

  • Base model: Qwen/Qwen3-8B
  • Method: 4-bit NF4 QLoRA with BF16 compute
  • LoRA rank: 32
  • LoRA alpha: 64
  • LoRA dropout: 0.05
  • Target modules: all linear layers
  • Trainable adapter parameters: 87,293,952
  • Formatted transcript/chat pairs: 40,010
  • Source captures: 27 live/VOD captures, including more than 20 historical streams
  • Raw chat collected: approximately 1.7 million messages
  • Main training split: 3,000 training examples and 500 validation examples
  • Additional reinforcement: normal Twitch-chat examples mixed with conditional platformer, prediction, and hairline examples
  • Maximum sequence length: 512 tokens

The source audio was automatically transcribed and was not fully speaker-diarized. Transcript text can therefore occasionally contain speech from someone other than the streamer.

Loading the adapter

import torch
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

base_id = "Qwen/Qwen3-8B"
adapter_id = "bob24uda/DuogDuog-AI-Uncensored"

quantization = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=torch.bfloat16,
)

tokenizer = AutoTokenizer.from_pretrained(adapter_id)
base = AutoModelForCausalLM.from_pretrained(
    base_id,
    quantization_config=quantization,
    device_map="auto",
    torch_dtype=torch.bfloat16,
)
model = PeftModel.from_pretrained(base, adapter_id)

messages = [
    {
        "role": "system",
        "content": (
            "You are Twitch chat. React to the stream transcript with several short, "
            "authentic Twitch chat messages. Output only the messages, one per line, "
            "without usernames."
        ),
    },
    {
        "role": "user",
        "content": "Stream transcript:\nChat, I am definitely not bald.",
    },
]

inputs = tokenizer.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    enable_thinking=False,
    return_tensors="pt",
).to(model.device)

with torch.inference_mode():
    output = model.generate(
        inputs,
        max_new_tokens=120,
        do_sample=True,
        temperature=1.0,
        top_p=0.95,
        top_k=60,
        repetition_penalty=1.1,
    )

print(tokenizer.decode(output[0, inputs.shape[-1]:], skip_special_tokens=True))

Sampling is intentional: identical transcripts can produce different chat reactions.

Run the included Python program

git clone https://huggingface.co/bob24uda/DuogDuog-AI-Uncensored
cd DuogDuog-AI-Uncensored
pip install -r requirements.txt
python run_model.py

Or provide one transcript directly:

python run_model.py "I am so good at 2D platformers, chat."

Limitations and risks

  • Twitch chat can contain profanity, harassment, sexual language, spam, emotes, and references that are offensive or difficult to interpret outside their original context.
  • The model can reproduce biases and mistakes from Qwen3-8B, Twitch chat, and automatic transcription.
  • It may hallucinate usernames even though the recommended prompt requests messages without usernames. Applications should strip username-like prefixes if this matters.
  • It is not a factual assistant and should not be used for medical, legal, financial, or safety-critical advice.
  • The model name includes “Uncensored,” but this is not a formal safety evaluation or a guarantee that every prompt will receive an unrestricted response.
  • This project is an unofficial fan-made experiment and is not affiliated with or endorsed by Twitch, DougDoug, Qwen, or Resemble AI.

License

The adapter is distributed under Apache-2.0, consistent with the Qwen3-8B base model. Users are responsible for following the base model license, Twitch’s terms, applicable privacy rules, and any rights associated with source content.

Downloads last month
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for bob24uda/DuogDuog-AI-Uncensored

Finetuned
Qwen/Qwen3-8B
Adapter
(2004)
this model