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
14
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
(2005)
this model