Lamplight Computing Club

image

A cozy Roblox computing club where visitors walk up to four CRT terminals and talk to SmolLM2-135M-Instruct running entirely in Luau on the Roblox server. The complete model is bundled in the place. There is no inference API, localhost bridge, Python process, or external model download at runtime.

The model weights and tokenizer are converted for a custom Luau runtime in Roblox. This is a quantized port of the existing model, with no additional training. The Apache 2.0 model license applies to the upstream weights and tokenizer and their converted forms; see credits.

GitHub source · Download the complete Roblox place

The files here use Roblox .rbxl and .rbxmx formats. Run them in Roblox Studio or Roblox using the included Luau runtime; they are not a Transformers from_pretrained checkpoint or a hosted Hugging Face inference endpoint.

Play

Open Lamplight Computing Club on Roblox — the game is public.

For a local Studio session, download Lamplight.rbxl from this repository, or build it from this repository using the instructions below.

Open Lamplight.rbxl in Roblox Studio and press Play. Allow several seconds for the model to warm up. Sit on a computer chair or approach it and press E. The camera moves toward the physical CRT. Click its input field, type a short message, and press Return or SEND. Each prompt appears in the scrollable conversation; pulsing thinking... text underneath is replaced by the reply. Scroll directly over the screen to review earlier messages. STOP, NEW, and STAND are on the monitor; jumping also releases the chair and clears the conversation.

What is included

  • Original furnished club: four detailed computers, keyboards, chairs, task lamps, server gallery, lounge, plants, entrance signs, and model-port wall plaques.
  • Editable Blender scene: assets/Lamplight.blend; matching Roblox-native geometry, with no asset uploads required.
  • Scrollable physical terminal screens, inline thinking animation, chair ownership, cancellation, timeout handling, and release on departure/disconnect.
  • One shared model with two active generation jobs scheduled alternately. Four independent terminal conversations can exist; extra jobs wait in a queue. Two jobs do not double the server's compute capacity.
  • Exact byte-level BPE tokenizer; grouped-query attention; RoPE; RMSNorm; SwiGLU; tied embeddings; independent KV caches; top-k temperature sampling.
  • Reproducible conversion, build scripts, reference fixtures, and Studio test harnesses.

Performance and limits

The selected model is small and its answers can be repetitive or wrong. The bundled conversion uses symmetric INT4 in groups of 64, with float32 scales and norms. Quantization changes the upstream model's outputs. It is an interactive technical exhibit, not a replacement for a large hosted assistant.

The shipped defaults allow 320 prompt characters, a 256-token total context, and up to 64 generated tokens per response. Older whole conversation turns are dropped when the context fills. Prompts with too many tokens are rejected with a message. Generation is CPU-bound and short responses take tens of seconds on the tested machine; Roblox production servers may be slower. Inline thinking dots pulse while the model works; completed responses replace them after filtering.

Recorded Studio timings

Test Output tokens Elapsed time Effective output rate
Latest recorded single-user response 48 51.80 s 0.93 tokens/s
Two simultaneous conversations: first response 37 100.57 s 0.37 tokens/s
Two simultaneous conversations: second response 64 116.88 s 0.55 tokens/s

These rates divide generated output tokens by the server's elapsed response timer. That timer includes queueing, prompt processing (prefill), shared scheduling, generation, and final response filtering; it starts after the input has been filtered and tokenized. These are not generation-only decoding rates. The concurrent results are saved in tests/chat-multiplayer-results.json; the single-user measurement came from the Studio server log.

Generation-only speed and published Roblox server performance have not been benchmarked separately. Prompt length, conversation history, server hardware, and concurrent jobs affect latency. Allow roughly a minute for a short response in the measured single-user case, and longer under contention.

Native Luau code generation is requested on the inference module. Weights stay in ServerStorage and are decoded once per server. Each active job gets its own KV buffers. No conversation is written to a DataStore or external service. Local benchmarks and their limits are documented in docs/verification.md.

Text visibility

Conversations are shared on the physical CRT, subject to Roblox chat permissions. Prompts must complete TextChatService submission before inference. The server filters prompts and complete replies; filtered replies are presented through TextChatService on the CRT. Redacted content and filtering failures are withheld and replaced with a short message. There is no unfiltered Studio mode.

Generated text is untrusted plain text; it never executes commands or changes the game.

Edit and rebuild

For ordinary game or UI changes, edit src/ and run the build with Python 3 and NumPy installed. The included converted model files avoid any model download.

python3 tools/build.py --rojo /path/to/rojo

This project was built with Rojo 7.7.0. The builder validates the resulting place size. Open the newly built Lamplight.rbxl in Studio. Close an older loaded copy without saving it over a newly rebuilt file.

To regenerate the original art with Blender 5.1:

blender -b --python tools/build_art.py
python3 tools/build.py

To reproduce the quantization and reference fixtures (offline tools only, several GB of working memory/disk recommended):

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python tools/download_model.py
.venv/bin/python tools/export_model.py --model-dir model-source
.venv/bin/python tools/build.py

The public download is pinned to revision 12fd25f77366fa6b3b4b768ec3050bf629380bac. No Hugging Face account is required. Set HF_HOME to a directory of your choice if you want to relocate its download cache.

Verification

Build a dedicated inference test place, then use the Studio command-line interface:

rojo build test.project.json -o inference-test.rbxl
"/Applications/RobloxStudio.app/Contents/MacOS/RobloxStudio" \
  --task RunScript --localPlaceFile "$PWD/inference-test.rbxl" \
  --runScriptFile "$PWD/tests/studio_verify.luau" \
  --outputFile "$PWD/inference-results.log" --quitAfterExecution

tests/studio_multiplayer.luau injects test-only scripts into the loaded editor copy and launches two simulated clients using StudioTestService. It checks room geometry and signs, fixed chair geometry, actual seating, physical SurfaceGuis, inline pulsing thinking, overlapping jobs, stop/new/retry, generated replies, camera restoration, and stable chairs after release. It does not save those test scripts into the delivered game. Search the server's Studio log for [Lamplight QA RESULT]; Studio can discard the original command-bar coroutine when the multiplayer session closes.

tests/studio_chairs.luau checks every chair through 24 exit cycles (12 Stand requests and 12 jump/stand exits), verifies fixed geometry on both client and server, and checks that the expanded CRT footer fits. Recorded results are in tests/chair-results.json.

After editing the multiplayer test sources, regenerate the combined runner with python3 tools/build_test_runner.py. The multiplayer test files are QA only. Do not place them in the production source tree.

Credits

RoLLM by rustyspottedcatt is acknowledged as a previous implementation of language models in Roblox/Luau.

SmolLM2's pretrained weights and tokenizer are Hugging Face's work, licensed under Apache 2.0. Their license, pinned model card, and conversion notice are included. See CREDITS.md.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for maddiedreese/lamplight

Quantized
(143)
this model