you-are-a-bug / README.md
jnalv's picture
Added art attribution
751b538 verified
|
Raw
History Blame Contribute Delete
4.71 kB

A newer version of the Gradio SDK is available: 6.22.0

Upgrade
metadata
title: You Are A Bug
emoji: 🐞
colorFrom: green
colorTo: yellow
sdk: gradio
sdk_version: 6.17.3
python_version: '3.13'
app_file: app.py
pinned: true
short_description: An entomological TTRPG powered by a small fine-tuned LLM.
tags:
  - track:wood
  - sponsor:modal
  - achievement:offgrid
  - achievement:welltuned
  - achievement:offbrand
  - achievement:llama
  - achievement:sharing
  - achievement:fieldnotes

You Are a Bug

A submission for the June 2026 Hugging Face x Gradio Build Small Hackathon, Thousand Token Wood track. Read my full diary post here!

The underlying model was built from Qwen3-8B with a QLora trained on Modal.com, made from a purpose-curated dataset of 777 player turns and JSON outputs. See the merged GGUF model, the LoRA/adapater, and an example model trace here! You can also export your own game's trace at the bottom of the game area :)

🎬 Check out the demo video here! 📱 Social post here!

Qualifying for:

🎨 Off-Brand · 🎯 Well-Tuned · 🦙 Llama Champion · 🔌 Off the Grid · 📡 Sharing is Caring · 📓 Field Notes

🛠️ Built with Modal.com 📍 Running local, no cloud APIs used

Quotes From Friends

it did feel very epic, magic buggy... the vibe was fun and weird - M

very fun - A

update - i have convinced the mouse to move to san francisco as my cofounder - Z

lol - C

The Inputs & Outputs I Trained For

The model was trained to produce only two shapes, and decide when to use them: either a JSON response with a simple say that narrates something, or a roll that tests a stat (might|speed|smarts|mystique) with a difficulty (easy|medium|hard). What comes in as input is a simple card in a set format to provide context, with a standard shape to give structure to our inputs for fine-tuning:

Input: The player, world, previous turns, and most recent user input

PLAYER
Luna Moth, Level 1 — HP 4/4 · Moxie 5/5
Might 1 · Speed 1 · Smarts 6 · Mystique 2
A wise wizard type. Worldly and mysterious.

THE WORLD
Night, high summer. Warm dark thick with pollen. Restless and electric — the night shift coming awake.

WHAT JUST HAPPENED
[dm] The night is warm and buzzing. Creatures of the night start to hum and chitter as they join the forest's festivities, replacing day-timers.
[player] i fly up to the tree canopy and try to find blooms to drink from
[dm] A pulse of sound brushes your wings, then another, faster. Out of the warm dark a bat banks toward you, painting you with clicks. You are the loudest thing in its black sky, and it is hungry.

PLAYER'S TURN
[player] I fold my wings and drop like a leaf.

Output: A JSON roll response, testing a skill

{
  "action": "roll",
  "stat": "speed",
  "difficulty": "medium",
  "on_success": "You tumble out of the sound-beam, falling all wrong on purpose, and the bat's swoop slices the air where a sensible moth would have been.",
  "on_fail": "You drop a half-beat late. Wing membrane brushes you, claws comb your tails, and you spin earthward, listening to the bat already turning back around."
}

For skill rolls, the LLM narrates what both the success and the failure would look like in a single response. Then the code takes the player's stat, rolls a random number against it, resolves which happens, and displays the winner!

Big Thanks

Thanks to Gradio and Hugging Face for putting together an incredibly fun hackathon, with exactly the sort of prompt that I dream about. Huge thanks to Modal.com for the awesome credits, which I had a blast using. Fine-tuning is fun, and I think I caught the bug, pun intended. Also a huge thanks to all the HF and Gradio staff answering questions in the Discord, as well as all the other brilliant participants!

Background Art (Creative Commons Zero/CC0)

Created by Josh Nalven / @JNalv