{
  "version": 3,
  "status": "frozen",
  "experiment": "uirl",
  "question": "Can visual and executable rewards improve a small model's responsive UI generation beyond supervised fine-tuning?",
  "generator": {
    "id": "microsoft/AesCode-8B",
    "revision": "fd63cd69a43700f06b0fcefee6fd40cc047ad1eb",
    "precision": "bfloat16",
    "generation": {
      "temperature": 0.8,
      "top_p": 0.95,
      "max_tokens": 4096
    },
    "inputModality": "text only; no screenshot feedback to the student in this run",
    "contextLength": 6144
  },
  "judge": {
    "id": "gpt-6.1-sol",
    "effort": "high",
    "training": "independent criterion scores",
    "evaluation": "blind pairwise, shuffled ordering, ties allowed",
    "humanCalibration": false
  },
  "renderer": {
    "output": "standalone semantic HTML and inline CSS",
    "viewports": [
      {
        "width": 1280,
        "height": 900
      },
      {
        "width": 390,
        "height": 844
      }
    ],
    "network": "blocked",
    "javascript": "disabled",
    "assets": "system fonts and inline SVG only",
    "mobile": true,
    "chromium": "153.0.8010.12"
  },
  "training": {
    "sftExamples": 64,
    "sftEpochs": 4,
    "loraRank": 32,
    "loraAlpha": 64,
    "rlSteps": 64,
    "numGenerations": 4,
    "algorithm": "GDPO multi-reward normalization with DAPO token-normalized loss",
    "trl": "1.15.0",
    "learningRate": 0.000005,
    "seed": 3407,
    "teacher": "gpt-6.1-sol",
    "teacherEffort": "high",
    "sftLearningRate": 0.0001,
    "sftEffectiveBatch": 8,
    "sftCompletionOnly": true,
    "trainPromptPool": 96,
    "teacherFilters": {
      "execution": 1,
      "coverage": 0.9,
      "geometry": 0.7,
      "maxTotalTokens": 6144,
      "maxCompletionTokens": 4096,
      "minimumAccepted": 40
    },
    "rewardChannels": [
      "execution",
      "coverage",
      "geometry",
      "visual",
      "responsive",
      "fulfilment"
    ],
    "rewardWeights": [
      0.1,
      0.2,
      0.15,
      0.3,
      0.15,
      0.1
    ],
    "klCoefficient": 0,
    "clip": [
      0.2,
      0.28
    ],
    "maskTruncation": true,
    "vllmImportanceSampling": "token_truncate",
    "teacherPreprocessing": "Whitespace and CSS compaction, with renderer regression checks",
    "sftWarmupSteps": 2
  },
  "evaluation": {
    "cases": 24,
    "seeds": [
      1701,
      2718
    ],
    "methods": [
      "base",
      "sft",
      "rl",
      "base-best-of-four"
    ],
    "fixedFinalCheckpoint": true,
    "metric": "independent judge preference plus executable checks",
    "testFamiliesHeldOut": true,
    "primaryComparison": "RL vs SFT",
    "selector": "Highest weighted multi-criterion reward of four base outputs; ties use first candidate",
    "bootstrap": "10000 resamples clustered by brief, holding both seeds together",
    "ties": 0.5,
    "inferenceTiming": "Loaded batch times only, not isolated per-UI latency"
  },
  "phases": [
    "renderer preflight",
    "teacher data",
    "base outputs",
    "supervised warm start",
    "online visual RL",
    "held-out comparison",
    "artifact and write-up"
  ],
  "frozenAt": "2026-10-14T15:59:49.079Z",
  "hardware": {
    "gpu": "NVIDIA B200",
    "memoryMiB": 183359,
    "driver": "595.91.07",
    "image": "vllm/vllm-openai:v0.31.0",
    "imageDigest": "sha256:a4a4c0437bf7240089da5f08aa370c4aee17ae5290f7a3b468825ee26c4c3a6b",
    "torch": "2.13.0+cu130",
    "transformers": "5.17.0",
    "peft": "0.21.2",
    "vllm": "0.31.0"
  },
  "artifact": "RubricLabs/uirl-aescode-8b-beta",
  "amendments": [
    {
      "beforeAnyTraining": true,
      "reason": "Teacher tokenization preflight: 35/64 examples fit 3072 output tokens; all 64 fit 4096 (maximum 3943). Raised the same output cap for every generation method before training or held-out evaluation."
    },
    {
      "beforeHeldOutEvaluation": true,
      "reason": "Operational RL preflight: sequence-level importance correction nearly erased the gradient; use token-level truncated correction. Three of four samples hit the output cap, so compact equivalent teacher HTML/CSS and repeat the supervised warm start for four epochs. Discard the first supervised/preflight adapters from final comparisons."
    }
  ],
  "preflight": {
    "rendererFixturesPassed": true,
    "teacherCompactionScreenshotsIdentical": true,
    "gradientNorm": 0.14714796841144562,
    "firstLoraBMaxUpdate": 0.000004999747034162283,
    "clippedCompletions": 0,
    "completeCandidates": 4
  }
}