Your corpus.
Model-specific adapters.
Train on your own JSONL corpus with validated, model-specific LoRA paths, exact token budgets and resumable optimizer checkpoints. Experimental multi-family release.
Starting…
Load a supported GGUF model
No model loaded
Registered architecture contracts only; unsupported variants fail before loading.
Standard F32 / F16 / BF16, Q8_0, Q4_0/Q4_1, Q5_0/Q5_1, Q4_K, Q5_K and Q6_K tensors are admitted by dense handlers. Base matrices use the selected FP16 or FP32 storage; this is not memory-efficient QLoRA. LittleBit/NHSC1 containers are not supported in this version.
Choose a supported graph, not just a .gguf extension
GGUF stores many different architectures. This build checks architecture metadata, tokenizer, every tensor shape and supported weight encoding before loading. Unknown graph features fail explicitly.
- SmolLM / SmolLM2 and plain Llama-style models: transformer and/or output-head LoRA. Bias-free RMSNorm, full unscaled adjacent-pair RoPE, SwiGLU, causal MHA/GQA. SmolLM 1 and 2 have their own exact chat templates. Verified base-completion workflows support the allowlisted GPT-2, Smol, Llama-3 BPE and SentencePiece BPE contracts. Every file must pass the complete graph contract.
- Gemma3 text decoder: transformer and/or output-head LoRA, per-head Q/K norms, local/global attention, post-norms, GELU and NeoX RoPE. Exact verified Gemma3 text templates only. Gemma1/2/3n/4, vision, projector, image inputs and shared-KV variants are not implemented.
- Qwen2.5-VL-7B-Instruct text decoder: transformer and/or output-head LoRA for the exact validated 339-tensor text profile and tokenizer. Frozen Q/K/V biases and text M-RoPE are included. No image/video/projector training, multimodal corpus or blanket Qwen-family support.
- GPT-oss-20B: output-head LoRA only, on a frozen streamed MoE forward graph with Harmony final-answer formatting. FP32 route; expert/router/transformer adapters are unavailable. Speed on the current GPU is unmeasured.
- GPT-oss-120B: future-hardware route only, blocked by default. The current 20 GiB GPU / 32 GiB RAM machine is not admitted. No claim of a successful 120B hardware run.
- Mistral-7B-v0.3 base: exact SentencePiece profile, transformer and/or output-head LoRA, explicit raw completion. No invented instruction template.
- Mistral-Small-3.2-24B-Instruct and Ministral-3-14B-Reasoning: exact text-only profiles and Tekken templates, transformer and/or output-head LoRA. The Ministral route includes its declared YaRN and position-dependent query scaling with transpose-correct gradients. No images, vision/projector training or older sliding-window Mistral variants. A dense 14B model expands to roughly 28 GB in FP16 before activations/optimizer, so this route is not a claim that it fits the current 20 GiB GPU.
Dense-family weights are expanded to FP16 or FP32. Quantized input does not imply QLoRA memory use. Supported types vary by handler; IQ/TQ, LittleBit/NHSC1, split files, arbitrary chat-template execution and unimplemented architectures are rejected. The application budget is a user limit, not a VRAM measurement. Large admitted models can still fail device buffer or memory limits.
Verification: synthetic forward/gradient/learning and checkpoint tests plus retained reference tokenizer fixtures. Software-WebGPU tests use CPU SwiftShader, not the user's Radeon. A one-token finite-logit smoke test runs on the selected model before the app says it is ready; this is not full-checkpoint numerical parity or a quality benchmark.
Keep the GPU supplied with work
The loaded-model test uses the comparison prompt below, identical tokens, one warm-up and three measured passes per mode. It changes no model or adapter weights. Queue-overhead testing uses a separate tiny synthetic model. Benchmarks do not measure hardware utilization directly. The matrix comparison includes non-aligned dimensions and checks output error. Validation checks independent-example gradients and mixed-precision learning on your device.
No benchmark run on this device yet.
No GPU submissions yet.
Batched mode queues four layers per submission group, removes intermediate backward-pass waits, and reads gradient-norm statistics together. Generation reads only the final row of logits. The default is 64 target tokens across 4 independent examples, with shared-memory GEMM and fused operations. Compare 16, 32 and 64 target tokens per microbatch and compare real tokens/sec at the same model and sequence length. More accumulation changes effective batch size; it does not itself run microbatches simultaneously. A higher GPU utilization percentage is not a guarantee of higher speed.Earlier synthetic-engine measurement (not multi-family throughput)
{
"queue": {
"scope": "Synthetic 2-layer transformer; GPU workload and optimizer identical between modes",
"results": [
{
"mode": "reference",
"medianStepMs": 110.46385450000002,
"steps": 8,
"targetsPerStep": 3,
"lastLoss": 2.11680805683136,
"counters": {
"submissions": 544,
"syncs": 56,
"readbacks": 248,
"readbackBytes": 1088
}
},
{
"mode": "batched",
"medianStepMs": 117.46003999999994,
"steps": 8,
"targetsPerStep": 3,
"lastLoss": 2.11680805683136,
"counters": {
"submissions": 64,
"syncs": 16,
"readbacks": 16,
"readbackBytes": 1088
}
}
],
"ratio": 0.9404377395069854,
"note": "Host-observed median latency, including submission, synchronization and UI yielding; not an estimate of full-model Radeon speed.",
"hardware": "Dawn / SwiftShader software Vulkan, not Radeon"
},
"matrix_kernels": {
"scope": "64\u00d7257 by 259\u00d7257 forward GEMM, non-tile-aligned bounds; 1 warmup + 5 measured runs",
"results": [
{
"mode": "Scalar FP32",
"medianMs": 12.621147999999948,
"maxAbsoluteError": 0
},
{
"mode": "Tiled FP32",
"medianMs": 29.64636399999995,
"maxAbsoluteError": 0
}
],
"note": "Includes queue synchronization. Small synthetic kernel benchmark; measure training tokens/sec on your own model. No GPU utilization estimate.",
"hardware": "SwiftShader software Vulkan (not Radeon)"
}
}Import your own corpus
No corpus prepared. Import your own JSONL file to train.
No training examples are loaded automatically. You may explicitly choose the Nexus demonstration corpus, or load a supported GGUF model and tokenize your own UTF-8 JSONL corpus.
Raw completion adds no role labels, separators, default system message or extra newline. Supply any delimiter in your prompt. Changing format clears prepared tokens.
At least five independent prompt families are required. Only the supervised answer and its terminator contribute to the training token budget. Held-out records never enter training.How to make a compatible JSONL corpus
- Write one JSON object per physical line in a UTF-8 .jsonl file. Do not wrap the file in an array or insert blank lines. Use escaped \n inside strings for line breaks.
- Choose one formatting mode for the whole file. Verified chat accepts prompt and answer strings with optional context, or a messages array. Messages allow an optional initial system message, followed by alternating user and assistant messages ending in assistant. The loaded model must supply a supported verified text-chat template; tool calls, images and separate reasoning-content fields are not accepted.
- Raw completion accepts prompt plus completion (or answer), without messages or context. It inserts no role labels, separator or extra newline. Put any delimiter in your prompt. The prompt and continuation are tokenized together; a token crossing their boundary is supervised as part of the answer. A verified EOS token is required.
- Include at least five independent prompt families. Give related prompts or paraphrases the same optional family_id. If absent, split_component_id is used; otherwise preceding chat messages or the raw prompt define the family.
- Choose 5–30% held-out families (default 10%). Sorted family identifiers determine the split: the first fraction, rounded down with at least one family, is held out. The split field is ignored. Changing formatting clears prepared tokens; re-tokenize before training.
- Start with a short session and evaluate on held-out data. Exact resume requires the same model, corpus, formatting mode and holdout setting.
Schema examples only, never loaded automatically. Chat mode:
{"prompt":"Your input question","answer":"Your desired response","family_id":"topic-01"}
{"messages":[{"role":"user","content":"Your input question"},{"role":"assistant","content":"Your desired response"}],"family_id":"topic-02"}Raw-completion mode (use a separate raw-format corpus):
{"prompt":"Question: Your input question\nAnswer: ","completion":"Your desired response","family_id":"topic-03"}These lines illustrate formats; they are not a complete corpus. Use your own examples across at least five families. Only supervised answer tokens and their terminator contribute to the budget. The importer accepts at most 100,000 records and files below 50,000,000 bytes, with additional text/token limits. Long records use bounded sliding windows.Choose where the model learns
Define the learning budget
Tokens are shared across examples. Attention and rotary positions reset for each example; padding is excluded from loss and the token budget. Increase to 8 only if measured tokens/sec improves.
Prepare a corpus to calculate passes.
0 / 0 trained answer tokens · stops exactly at the budget
Save the full adapter training state
Compare against the frozen base
No held-out evaluation yet.Teacher-forced answer-token cross-entropy and perplexity on identical windows. This is a bounded development check, not an independent final benchmark or proof of safe OS decisions.
Frozen base
Transformer / head adapter
Measured capability, clear boundaries
The receipt below is historical evidence from the original engine build. The custom-corpus packaging update does not establish new hardware performance or full-model validation.
Run GPU validation to check your own WebGPU device.
Original engine test receipt (excerpt)
{
"numerical_webgpu": {
"passed": true,
"scope": "Synthetic two-layer transformer, GQA, all seven projection adapters plus head",
"forwardMaxAbsoluteError": 1.3888656269500643e-07,
"gradientTensors": 30,
"maxGradientAbsoluteError": 5.3425629970682564e-05,
"before": 2.1903289556503296,
"after": 0.40764403343200684,
"checkpointLossDifference": 0,
"baseFrozen": true,
"hardware": "Dawn WebGPU / SwiftShader software Vulkan (not Radeon)",
"note": "Does not establish full SmolLM2 model quality or Radeon throughput"
},
"accelerated": {
"hardware": "Dawn WebGPU / SwiftShader software Vulkan (not Radeon)",
"passed": true,
"fusedTiledGradientError": 1.1920928955078125e-07,
"batchGradientError": 1.1920928955078125e-07,
"batchLossError": 0,
"batchLogitError": 0,
"fp16": "SKIPPED: shader-f16 unavailable",
"matrixEdges": {
"shape": [
19,
21,
23
],
"forwardDxDwMaxError": 0
}
},
"mixed_precision_emulation": {
"hardware": "SwiftShader WebGPU with packed FP16 storage; FP16 arithmetic emulated using pack2x16float/unpack2x16float. Native f16 compiled separately on Dawn null backend; no native FP16 hardware execution.",
"passed": true,
"fusedTiledGradientError": 1.1920928955078125e-07,
"batchGradientError": 1.1920928955078125e-07,
"batchLossError": 0,
"batchLogitError": 0,
"fp16GradientMaxAbsoluteError": 0.0016841888427734375,
"fp16LossError": 2.7489662170587792e-05,
"fp16Before": 2.273624897003174,
"fp16After": 0.887896728515625,
"fp16CheckpointLossDifference": 0,
"matrixEdges": {
"shape": [
19,
21,
23
],
"forwardDxDwMaxError": 0
}
},
"application_workflow": {
"passed": true,
"checks": [
"Real WebGPU exact 9-token session: one full 7-token pass + 2 targets",
"Pause commits one accumulated optimizer update, 3 targets (short final microbatch)",
"Resume reaches exact goal without duplicated exposures",
"Complete checkpoint restores optimizer and matching corpus cursor",
"Corrupt checkpoint rejected",
"Held-out base/adapter comparison executed on real WebGPU",
"Sliding-window planner exhaustive boundary coverage",
"Standalone UI: unique controls, no embedded application/iframe",
"Loaded-model queue A/B logits agree; final-row generation readbacks preserve output",
"Independent-example scheduler: 2/4/8 examples, 1/3/16/64 targets, exact pass coverage and serialized cursors",
"Actual multi-example GPU training pauses, checkpoint-restores, and resumes to exact 11-token budget",
"Invalid settings, adapter OOM, forward OOM and malformed session checkpoint preserve adapter and release allocations",
"Start/export/local restore UI handlers, IndexedDB checkpoint persistence, and control wiring",
"Malformed model import preserves loaded model, adapter and session",
"Synthetic GGUF parsed, byte-BPE tokenized, loaded, forwarded, backpropagated and updated"
],
"environment": "JSDOM UI + actual Dawn WebGPU / SwiftShader (software Vulkan)",
"limitations": "No Radeon or full-size SmolLM2 run; no browser layout screenshot"
}
}What this build implements
The Llama path has full adapter backpropagation through causal grouped-query attention, rotary positions, residuals, RMSNorm and SwiGLU. Additional dense handlers implement their own differentiable operations. GPT-oss exposes output-head backpropagation only. Low-rank A/B adapters on all selected attention and feed-forward projections; optional output head. Token-normalized accumulation, global gradient clipping, AdamW, warmup/cosine scheduling, deterministic shuffling, family-separated validation, exact token budgets, and checkpointed optimizer state.
16×16 shared-memory matrix kernels in forward and backward passes; FP16 matrix operands with FP32 accumulation, gradients and Adam state; fused LoRA epilogues, rotary-gradient accumulation and parallel cross-entropy. Norms and attention remain FP32. Frozen base matrices; no quantized backward kernels, activation checkpoint recomputation, distributed training, fused FlashAttention, or full-weight updates. The maximum training window is 512 tokens. FP16 uses a fixed loss scale of 128; non-finite results stop the session before an optimizer update. Select FP32 and reload if mixed precision is unstable. Large models/ranks/windows can exceed VRAM or be slow. Begin with a short session and measure on your hardware.
Provenance and model compatibility
The GGUF quantization decoders, tokenizer, metadata reader and streaming SHA-256 code are reused from your supplied NexusAI Repository. New standalone WebGPU/autodiff code provides the training forward/backward graph. There is no embedded Nexus chat app, facial-expression runtime, Python backend, PyTorch or llama.cpp dependency. The Expression Starter was inspected; vision assets do not participate in language-model training.
SmolLM2 is by Hugging Face / HuggingFaceTB. Its admitted Llama-family graph uses GGUF-converted Q/K weights with adjacent rotary pairs. Gemma3 and Qwen use their separately implemented NeoX layouts; GPT-oss uses its frozen YaRN/MoE route. Original Hugging Face safetensors with unconverted half-split Q/K are not accepted as GGUF. A full-size SmolLM2 numerical equivalence benchmark and Radeon performance benchmark have not been completed for this build.
Opening this standalone file
Open this HTML in a WebGPU-capable desktop browser. If file access policies disable WebGPU or local checkpoints, serve its folder on localhost and open it there. Inference and training stay local; no remote model service is needed. Browser storage can be cleared, so export .nxadapter files for durable backups. Resume can differ slightly across GPU implementations despite using the same data order.