[{"data":1,"prerenderedAt":4940},["ShallowReactive",2],{"doc-\u002Fdocs\u002Ffigures\u002FREADME":3,"docs-index":4},null,[5,165,367,551,1053,1276,1586,1786,2063,2108,2907,3159,3417,3991,4072,4559,4787],{"id":6,"title":7,"body":8,"description":151,"extension":158,"meta":159,"navigation":160,"path":161,"seo":162,"stem":163,"__hash__":164},"content\u002Fdocs\u002FREADME.md","Linnaeus documentation",{"type":9,"value":10,"toc":150},"minimark",[11,15,20,53,57,94,98,128,137],[12,13,7],"h1",{"id":14},"linnaeus-documentation",[16,17,19],"h2",{"id":18},"use-linnaeus","Use Linnaeus",[21,22,23,32,39,46],"ul",{},[24,25,26,31],"li",{},[27,28,30],"a",{"href":29},"inference","Installation and inference",": load a checkpoint and make text or image decisions.",[24,33,34,38],{},[27,35,37],{"href":36},"bub-agent","Agent integration",": expose decisions through the Bub SDK.",[24,40,41,45],{},[27,42,44],{"href":43},"run-experiment","Training and evaluation",": run the complete workflow or resume training.",[24,47,48,52],{},[27,49,51],{"href":50},"openbayes","OpenBayes deployment",": NVIDIA cloud layout, China-network mirrors, and resume semantics.",[16,54,56],{"id":55},"understand-the-model","Understand the model",[21,58,59,66,73,80,87],{},[24,60,61,65],{},[27,62,64],{"href":63},"..\u002FMODEL_CARD","Model card",": capabilities, training, measured results, and limitations.",[24,67,68,72],{},[27,69,71],{"href":70},"figures\u002FREADME","Benchmark comparisons",": Jev, Laya multilingual, and Laya Vision results.",[24,74,75,79],{},[27,76,78],{"href":77},"design","Architecture",": candidate scoring, shared computation, and model adapters.",[24,81,82,86],{},[27,83,85],{"href":84},"rlcd","RLCD",": objective, sampling, and calibration.",[24,88,89,93],{},[27,90,92],{"href":91},"compute-efficiency","Compute efficiency",": fused execution and the shared training\u002Finference path.",[16,95,97],{"id":96},"reproduce-the-measurements","Reproduce the measurements",[21,99,100,107,114,121],{},[24,101,102,106],{},[27,103,105],{"href":104},"data-and-evaluation","Data and evaluation",": datasets, partitions, and quality metrics.",[24,108,109,113],{},[27,110,112],{"href":111},"upstream-alignment","Reference protocols",": Laya and Laya Vision checkpoints and comparison scope.",[24,115,116,120],{},[27,117,119],{"href":118},"local-benchmarks","Benchmarking",": latency, resource measurements, JevBench, and figure generation.",[24,122,123,127],{},[27,124,126],{"href":125},"jevbench-submission","JevBench submission",": preregistered endpoint conditions, cost basis, and overlap statement.",[129,130,131,132,136],"p",{},"The ",[27,133,135],{"href":134},"design#behavior-and-regression-tests","behavior and regression tests","\ncover the prediction interface and known failure cases.",[129,138,139,140,144,145,149],{},"For contributors, see ",[27,141,143],{"href":142},"development","Development"," and ",[27,146,148],{"href":147},"website","Build the website",".",{"title":151,"searchDepth":152,"depth":153,"links":154},"",2,3,[155,156,157],{"id":18,"depth":152,"text":19},{"id":55,"depth":152,"text":56},{"id":96,"depth":152,"text":97},"md",{},true,"\u002Fdocs\u002Freadme",{"title":7,"description":151},"docs\u002FREADME","Rm7Grllboo45BDgRmVuUEDfLvcZWhBqccgA0VhzvSuA",{"id":166,"title":167,"body":168,"description":361,"extension":158,"meta":362,"navigation":160,"path":363,"seo":364,"stem":365,"__hash__":366},"content\u002Fdocs\u002Fbub-agent.md","Agent integration with Bub main",{"type":9,"value":169,"toc":359},[170,173,192,199,227,330,345,352,355],[12,171,167],{"id":172},"agent-integration-with-bub-main",[129,174,175,176,180,181,184,185,191],{},"Linnaeus provides one decision tool through Bub. The ",[177,178,179],"code",{},"agent"," extra pins Bub main at\n",[177,182,183],{},"9bf70488e22a44eeb875a9d55d9a7d352b82e381",". Integration uses its\n",[27,186,190],{"href":187,"rel":188},"https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub\u002Fblob\u002F9bf70488e22a44eeb875a9d55d9a7d352b82e381\u002Fwebsite\u002Fsrc\u002Fcontent\u002Fdocs\u002Fdocs\u002Fbuild\u002Fsdk.md",[189],"nofollow","Python SDK","\nto provide one batch decision tool and persistent session tapes.",[129,193,194,195,198],{},"Follow the ",[27,196,197],{"href":29},"runtime and checkpoint setup"," first.",[200,201,205],"pre",{"className":202,"code":203,"language":204,"meta":151,"style":151},"language-bash shiki shiki-themes github-light github-dark","uv sync --extra agent\n","bash",[177,206,207],{"__ignoreMap":151},[208,209,212,216,220,224],"span",{"class":210,"line":211},"line",1,[208,213,215],{"class":214},"sScJk","uv",[208,217,219],{"class":218},"sZZnC"," sync",[208,221,223],{"class":222},"sj4cs"," --extra",[208,225,226],{"class":218}," agent\n",[200,228,232],{"className":229,"code":230,"language":231,"meta":151,"style":151},"language-python shiki shiki-themes github-light github-dark","from pathlib import Path\n\nfrom linnaeus.bub_agent import create_agent\nfrom linnaeus.predictor import Predictor\n\npredictor = Predictor.from_checkpoint(\"pi-dal\u002FLinnaeus-0.1.0-2B\")\nframework, agent = create_agent(\n    predictor, workspace=Path.cwd(), tape_directory=Path(\"runs\u002Fagent-tapes\")\n)\n\n\nasync def decide():\n    command = ',linnaeus.decide state=\\'{\"message\":\"Please refund this invoice.\"}\\' '\n    command += 'questions=\\'{\"refund\":{\"type\":\"noul\",\"instructions\":\"Is a refund requested?\"}}\\''\n    async with framework.running():\n        stream = await agent.run_stream(session_id=\"billing\", prompt=command)\n        return [event async for event in stream]\n","python",[177,233,234,239,244,249,255,260,266,272,278,284,289,294,300,306,312,318,324],{"__ignoreMap":151},[208,235,236],{"class":210,"line":211},[208,237,238],{},"from pathlib import Path\n",[208,240,241],{"class":210,"line":152},[208,242,243],{"emptyLinePlaceholder":160},"\n",[208,245,246],{"class":210,"line":153},[208,247,248],{},"from linnaeus.bub_agent import create_agent\n",[208,250,252],{"class":210,"line":251},4,[208,253,254],{},"from linnaeus.predictor import Predictor\n",[208,256,258],{"class":210,"line":257},5,[208,259,243],{"emptyLinePlaceholder":160},[208,261,263],{"class":210,"line":262},6,[208,264,265],{},"predictor = Predictor.from_checkpoint(\"pi-dal\u002FLinnaeus-0.1.0-2B\")\n",[208,267,269],{"class":210,"line":268},7,[208,270,271],{},"framework, agent = create_agent(\n",[208,273,275],{"class":210,"line":274},8,[208,276,277],{},"    predictor, workspace=Path.cwd(), tape_directory=Path(\"runs\u002Fagent-tapes\")\n",[208,279,281],{"class":210,"line":280},9,[208,282,283],{},")\n",[208,285,287],{"class":210,"line":286},10,[208,288,243],{"emptyLinePlaceholder":160},[208,290,292],{"class":210,"line":291},11,[208,293,243],{"emptyLinePlaceholder":160},[208,295,297],{"class":210,"line":296},12,[208,298,299],{},"async def decide():\n",[208,301,303],{"class":210,"line":302},13,[208,304,305],{},"    command = ',linnaeus.decide state=\\'{\"message\":\"Please refund this invoice.\"}\\' '\n",[208,307,309],{"class":210,"line":308},14,[208,310,311],{},"    command += 'questions=\\'{\"refund\":{\"type\":\"noul\",\"instructions\":\"Is a refund requested?\"}}\\''\n",[208,313,315],{"class":210,"line":314},15,[208,316,317],{},"    async with framework.running():\n",[208,319,321],{"class":210,"line":320},16,[208,322,323],{},"        stream = await agent.run_stream(session_id=\"billing\", prompt=command)\n",[208,325,327],{"class":210,"line":326},17,[208,328,329],{},"        return [event async for event in stream]\n",[129,331,332,333,336,337,340,341,344],{},"The tool is named ",[177,334,335],{},"linnaeus.decide","; its model-facing alias is ",[177,338,339],{},"linnaeus_decide",". Supply\nindependent questions together against one state. Its optional ",[177,342,343],{},"image_path","\nargument names an image within the application's workspace. The returned\nprobabilities retain the predictor's meanings. Calls are serialized per predictor\ninstance, while each call batches its questions.",[129,346,347,348,351],{},"An application may configure Bub's planner\u002Fprovider and call ",[177,349,350],{},"run_stream"," with a\nnatural-language prompt. The application owns the framework lifetime and decides\nhow to act on the returned distributions.",[129,353,354],{},"The explicit comma-command calls the decision tool without an external planner.\nPlanner quality and provider cost depend on the application's provider settings.",[356,357,358],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":151,"searchDepth":152,"depth":153,"links":360},[],"Linnaeus provides one decision tool through Bub. The agent extra pins Bub main at\n9bf70488e22a44eeb875a9d55d9a7d352b82e381. Integration uses its\nPython SDK\nto provide one batch decision tool and persistent session tapes.",{},"\u002Fdocs\u002Fbub-agent",{"title":167,"description":361},"docs\u002Fbub-agent","eWXbb_WC6i5n78JxEJTWoaUCKDFO9P-QrfhIYy6_ibA",{"id":368,"title":369,"body":370,"description":377,"extension":158,"meta":546,"navigation":160,"path":547,"seo":548,"stem":549,"__hash__":550},"content\u002Fdocs\u002Fcompute-efficiency.md","Shared training and inference execution",{"type":9,"value":371,"toc":540},[372,375,378,382,385,388,399,402,405,408,412,423,426,430,433,440,455,474,482,485,488,491,495,528,535,538],[12,373,369],{"id":374},"shared-training-and-inference-execution",[129,376,377],{},"Linnaeus has one execution policy: differentiable FLA fusion, shared causal prefixes,\na bounded frozen-image cache, and asynchronous input\u002Foutput transfer. These are\nthe implemented defaults, with no public backend, stream-count, or cache switches.",[16,379,381],{"id":380},"runtime","Runtime",[129,383,384],{},"Qwen uses fused RMSNorm, RMSNorm with output gating, and SwiGLU in both training\nand inference. LoRA projection modules remain in the autograd graph; deployment\nmerges them into the frozen base. Vision patch projection uses a linear map and\ncausal convolution uses the installed Triton kernel. These kernels preserve the\nmathematical operations, but BF16 rounding need not match an unfused execution.\nTrain, development selection, calibration and test all use this runtime.",[129,386,387],{},"When questions share a sufficiently long causal prefix, the model computes that\nprefix once and forks both attention KV and delta-rule convolution\u002Frecurrent\nstates into independent question branches. All candidate positions remain in\nthe suffix. The split is aligned to 64 tokens. A request uses one batched model\ninvocation: internally the language backbone processes a shared prefix and\nthen parallel suffixes. It never generates an autoregressive token stream.\nRequests without a reusable prefix use a single batched language pass.",[129,389,390,391,394,395,398],{},"For B questions of length L sharing P tokens, dense projection work is\nproportional to ",[177,392,393],{},"P + B × (L − P)"," rather than ",[177,396,397],{},"B × L",". Attention, recurrent state\nforking and launch overhead must still be measured; the token ratio is not an\nend-to-end speedup guarantee.",[129,400,401],{},"The prefix cache belongs to the current request and weight snapshot. Tensor\nreplacement preserves the autograd history. Training recomputes the complete\nshared request during activation checkpointing, constructing fresh cache state.\nGradients from all branches accumulate into the shared prefix. No language state\nsurvives an optimizer update or another request.",[129,403,404],{},"Frozen image features use a model-local 128 MiB LRU keyed by decoded RGB content\nand image dimensions under the adapter's fixed preprocessing policy. Batch\nmisses are encoded together, duplicate images once, and the same features serve\ntraining and prediction. They remain valid across LoRA updates because neither\nvision weights nor preprocessing changes. Loading a model creates a fresh cache.",[129,406,407],{},"CPU workers prepare pinned batches. One transfer stream prefetches the next\nbatch while the compute stream executes the current batch. Events preserve\nbatch order and memory lifetime. Evaluation overlaps result transfer and JSON\nserialization with the following forward. The optimizer sees four microbatches\nat the same parameter snapshot, averages their loss, clips once and updates once.",[16,409,411],{"id":410},"training-lifecycle","Training lifecycle",[129,413,414,415,418,419,422],{},"The training mixture and trainer serve base initialization and checkpoint\ninitialization. ",[177,416,417],{},"--initialize-from"," supplies verified unmerged LoRA\u002Fhead weights;\nthe data, RLCD objective, schedule, selection and evaluation stages are identical.\n",[177,420,421],{},"--resume"," restores the current run's optimizer, random state and update count.\nThe development baseline at step zero is an eligible selected checkpoint.",[129,424,425],{},"RLCD optimizes the policy produced by the fused runtime. It does not replace\ncorrect dependency handling or held-out quality measurement. Calibration follows\nLoRA merge on an independent partition. Test and benchmark scores never select\nweights or tune temperatures.",[16,427,429],{"id":428},"hardware-bounds","Hardware bounds",[129,431,432],{},"The upstream analysis uses the RX 7900 XTX; the recorded Linnaeus-0.1.0-2B\nrun trained 3,600 updates in 205.7 minutes on a single RTX 4090 24GB\n(OpenBayes), peaking at 23.9 GiB VRAM with fused kernels and shared-prefix\nbatching. The bounds below remain upstream's reference analysis.",[129,434,435,436,439],{},"The RX 7900 XTX has 96 compute units, a reference boost frequency of 2.5 GHz,\n24 GB GDDR6 and 960 GB\u002Fs external memory bandwidth. AMD documents 512 BF16\nmatrix FLOPs per clock per compute unit. The dense BF16 matrix ceiling is\ntherefore ",[177,437,438],{},"96 × 2.5e9 × 512 = 122.88e12 FLOP\u002Fs",", counting a multiply-add as\ntwo operations. Its 80% target is 98.304 TFLOP\u002Fs. The corresponding bandwidth\ntarget is 768 GB\u002Fs. These are different constraints, not two simultaneously\nrequired utilization readings.",[129,441,442,443,448,449,454],{},"Sources: ",[27,444,447],{"href":445,"rel":446},"https:\u002F\u002Fwww.amd.com\u002Fen\u002Fproducts\u002Fgraphics\u002Fdesktops\u002Fradeon\u002F7000-series\u002Famd-radeon-rx-7900xtx.html",[189],"AMD device specifications","\nand ",[27,450,453],{"href":451,"rel":452},"https:\u002F\u002Fgpuopen.com\u002Flearn\u002Fwmma_on_rdna3\u002F",[189],"AMD WMMA architecture",".\nThe advertised cache-adjusted graphics bandwidth is not the GDDR bandwidth\navailable for streaming arbitrary model tensors. Sustained clocks and kernel\nshape efficiency must be measured on the actual machine.",[129,456,457,458,461,462,465,466,469,470,473],{},"For useful arithmetic ",[177,459,460],{},"F",", necessary memory traffic ",[177,463,464],{},"Q",", compute ceiling ",[177,467,468],{},"P","\nand bandwidth ",[177,471,472],{},"W",", an optimistic device lower bound is:",[200,475,480],{"className":476,"code":478,"language":479,"meta":151},[477],"language-text","T_lower = max(F \u002F P, Q \u002F W)\nthroughput_ceiling = decisions \u002F T_lower\nefficiency = measured_throughput \u002F throughput_ceiling = T_lower \u002F T_measured\n80% throughput target: T_measured \u003C= T_lower \u002F 0.8\n","text",[177,481,478],{"__ignoreMap":151},[129,483,484],{},"A mixed graph needs separate BF16 matrix, FP32\u002Fvector, recurrent and transfer\nbounds, with dependencies between stages. Summing every device\u002Ftransfer bound\nassumes no overlap; taking just one global maximum assumes ideal overlap. A\ncritical-path model sits between these extremes. CPU preparation, queueing,\nserialization and cold compilation also belong in end-to-end measurements.",[129,486,487],{},"The arithmetic count must exclude unused vocabulary projections: Linnaeus gathers\ncandidate hidden states into a scalar head and never computes token-generation\nlogits. Embedding storage is not a dense matrix multiplication per token. Image\nencoding is counted only when an image is present. Reused prefixes or frozen\nimage features reduce useful work and require a new bound. Padding and repeated\nwork must be reported separately; increasing them cannot improve the useful-work\nefficiency claim.",[129,489,490],{},"Projection-only bounds omit attention, delta-rule recurrence, activations,\nnormalization and vision. They cannot establish whole-model efficiency or an\nexact training ETA. Hardware microbenchmark throughput is not API throughput.",[16,492,494],{"id":493},"measurement","Measurement",[200,496,498],{"className":202,"code":497,"language":204,"meta":151,"style":151},"uv run python scripts\u002Fbenchmark.py linnaeus --checkpoint runs\u002Fv1\u002Fcheckpoint --output runs\u002Fv1\u002Fbenchmarks\u002Flinnaeus.jsonl\n",[177,499,500],{"__ignoreMap":151},[208,501,502,504,507,510,513,516,519,522,525],{"class":210,"line":211},[208,503,215],{"class":214},[208,505,506],{"class":218}," run",[208,508,509],{"class":218}," python",[208,511,512],{"class":218}," scripts\u002Fbenchmark.py",[208,514,515],{"class":218}," linnaeus",[208,517,518],{"class":222}," --checkpoint",[208,520,521],{"class":218}," runs\u002Fv1\u002Fcheckpoint",[208,523,524],{"class":222}," --output",[208,526,527],{"class":218}," runs\u002Fv1\u002Fbenchmarks\u002Flinnaeus.jsonl\n",[129,529,530,531,534],{},"The benchmark measures complete prediction calls over text and image workloads,\nincluding preprocessing and transfers. It records raw timings, throughput,\nmemory and board telemetry. See the ",[27,532,533],{"href":118},"measurement protocol","\nfor warmup, precision, batch sizes and cache conditions.",[129,536,537],{},"Training records loss, development quality and resource samples. Held-out\nevaluation establishes model quality. Eighty percent of the full workload\nroofline remains an engineering target that requires measurement.",[356,539,358],{},{"title":151,"searchDepth":152,"depth":153,"links":541},[542,543,544,545],{"id":380,"depth":152,"text":381},{"id":410,"depth":152,"text":411},{"id":428,"depth":152,"text":429},{"id":493,"depth":152,"text":494},{},"\u002Fdocs\u002Fcompute-efficiency",{"title":369,"description":377},"docs\u002Fcompute-efficiency","zPEgSDhAHWZzGuCCEJH3hBfRopxqRth3WX8YQY3cjok",{"id":552,"title":105,"body":553,"description":559,"extension":158,"meta":1048,"navigation":160,"path":1049,"seo":1050,"stem":1051,"__hash__":1052},"content\u002Fdocs\u002Fdata-and-evaluation.md",{"type":9,"value":554,"toc":1038},[555,557,560,564,729,732,737,740,743,755,758,761,765,782,785,789,792,812,815,819,822,829,833,973,976,980,994,997,1017,1020],[12,556,105],{"id":104},[129,558,559],{},"Use public labels and programmatic scoring. The training mixture includes\npublic teacher-derived soft labels from typed-decisions; no new teacher calls\nor LLM judges are required. Deterministic conversion means reproducible examples\nand scores, not infallible annotations or known per-example true probabilities.",[16,561,563],{"id":562},"training-sources","Training sources",[565,566,567,583],"table",{},[568,569,570],"thead",{},[571,572,573,577,580],"tr",{},[574,575,576],"th",{},"Source",[574,578,579],{},"Decision tasks",[574,581,582],{},"Protocol",[584,585,586,605,623,646,669,681,693,706,718],"tbody",{},[571,587,588,596,602],{},[589,590,591],"td",{},[27,592,595],{"href":593,"rel":594},"https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002FAmazonScience\u002Fmassive",[189],"MASSIVE 1.1",[589,597,598,599],{},"English\u002FChinese ",[177,600,601],{},"choice",[589,603,604],{},"All 60 intents; fixed human-readable label mapping",[571,606,607,614,620],{},[589,608,609],{},[27,610,613],{"href":611,"rel":612},"https:\u002F\u002Fgithub.com\u002Fgoogle-research-datasets\u002Fboolean-questions",[189],"BoolQ",[589,615,616,617],{},"Text ",[177,618,619],{},"noul",[589,621,622],{},"Original passage, question, and Boolean answer",[571,624,625,632,643],{},[589,626,627],{},[27,628,631],{"href":629,"rel":630},"https:\u002F\u002Fcs.stanford.edu\u002Fpeople\u002Fjcjohns\u002Fclevr\u002F",[189],"CLEVR",[589,633,634,635,637,638,637,640],{},"Visual ",[177,636,601],{},", ",[177,639,619],{},[177,641,642],{},"score",[589,644,645],{},"Attributes, existence, and ordered counts",[571,647,648,655,663],{},[589,649,650],{},[27,651,654],{"href":652,"rel":653},"https:\u002F\u002Fgithub.com\u002Fgoogle-research-datasets\u002Fscreen_qa",[189],"ScreenQA",[589,656,657,658,660,661],{},"Screenshot ",[177,659,601],{}," and candidate-level ",[177,662,619],{},[589,664,665,666],{},"Original human annotations in ",[177,667,668],{},"answers_and_bboxes",[571,670,671,674,678],{},[589,672,673],{},"AG News \u002F emotion \u002F BANKING77",[589,675,616,676],{},[177,677,601],{},[589,679,680],{},"Full label vocabularies and official labeled test sets",[571,682,683,686,690],{},[589,684,685],{},"XNLI",[589,687,598,688],{},[177,689,601],{},[589,691,692],{},"Three labels; aligned translations and duplicate premises stay grouped",[571,694,695,698,703],{},[589,696,697],{},"A-OKVQA \u002F ScienceQA",[589,699,700,701],{},"Image ",[177,702,601],{},[589,704,705],{},"Four-choice A-OKVQA; image-only ScienceQA subset with official test retained",[571,707,708,711,715],{},[589,709,710],{},"VQAv2 yes\u002Fno",[589,712,700,713],{},[177,714,619],{},[589,716,717],{},"Soft answer votes; image-grouped split of labeled official validation",[571,719,720,723,726],{},[589,721,722],{},"typed-decisions",[589,724,725],{},"All three decision types",[589,727,728],{},"Public soft teacher distributions; state-grouped partitions",[129,730,731],{},"CLEVR scene graphs and programs verify labels but never enter model inputs.\nUse complete answer domains per question family rather than answer-dependent\ncandidate sampling. Count performance does not establish subjective scoring\nability. English visual benchmarks do not establish Chinese visual competence.",[733,734,736],"h3",{"id":735},"screenqa-conversion","ScreenQA conversion",[129,738,739],{},"Build candidate regions from the screenshot's Rico View Hierarchy using a fixed,\nanswer-independent rule. Present region IDs and geometry consistently; do not\nfeed annotator descriptions or ground-truth answers into the input.",[129,741,742],{},"Retain questions whose annotations agree on one answer element that maps\nunambiguously to a candidate. Record exclusion counts for multi-element answers,\ndisagreement, missing assets, and unmapped regions. Do not inject a target region\nto rescue an otherwise invalid example.",[21,744,745,750],{},[24,746,747,749],{},[177,748,601],{},": select the matching region from the candidate set.",[24,751,752,754],{},[177,753,619],{},": determine whether a specified candidate is the answer region.",[129,756,757],{},"A negative candidate is not evidence that the answer is absent from the screen.\nPublish the negative-sampling rule and class balance; calibration is specific to\nthat distribution. Report these as derived decision tasks, not official ScreenQA\nquestion-answering scores. The inference contract requires candidate regions;\nautomatic UI detection is outside scope.",[129,759,760],{},"ScreenQA Short and ComplexQA are excluded from the data mix. The former\ncontains model-produced answers, and the latter uses model-generated questions\nand answers with human validation.",[16,762,764],{"id":763},"splits-and-reproducibility","Splits and reproducibility",[21,766,767,770,773,776,779],{},[24,768,769],{},"MASSIVE and ScreenQA retain official train\u002Fdev\u002Ftest partitions. Reserve a\ngroup-based calibration subset from train.",[24,771,772],{},"BoolQ and CLEVR use public labeled dev\u002Fval as frozen final evaluation sets,\nnot as official test results. Split train into fitting, development, and\ncalibration partitions.",[24,774,775],{},"Keep all questions from one image, all language variants of one source\nutterance, and questions sharing a passage in the same partition. Audit\nofficial splits for overlap and document any exclusions.",[24,777,778],{},"Store source revisions and hashes, sample IDs, split assignments, templates,\nfilters, candidate permutations, sampling weights, and seeds in manifests.",[24,780,781],{},"Pin preprocessing and metric implementations. Report cross-split duplicates\nand possible backbone pretraining contamination.",[129,783,784],{},"Select checkpoints and hyperparameters using development data only. Fit\ntemperatures on calibration data only. Freeze the recipe before final evaluation.\nSeeded runs improve repeatability but do not guarantee bitwise equivalence across\nGPU kernels or software versions.",[16,786,788],{"id":787},"evaluation","Evaluation",[129,790,791],{},"Report results by dataset, language, decision type, and candidate count:",[21,793,794,797,800,803,806,809],{},[24,795,796],{},"Accuracy and macro-F1 for decision quality.",[24,798,799],{},"NLL and explicitly normalized Brier score for distributions.",[24,801,802],{},"Ranked probability score and MAE for ordered counts.",[24,804,805],{},"Fixed-bin ECE and reliability diagrams for calibration.",[24,807,808],{},"Candidate-order sensitivity and correct-image\u002Fmissing-image\u002Fmismatched-image\nchecks for vision dependence; these are quality checks, not competing trainers.",[24,810,811],{},"End-to-end p50\u002Fp95 latency, throughput, and peak VRAM on the local GPU, including\npreprocessing and with image, sequence, candidate, and batch sizes disclosed.",[129,813,814],{},"Complete calibration, held-out evaluation, and benchmarks for seed 42 before\nreplication. Report variation only when multiple seeds have completed evaluation;\nfor one seed, leave sample standard deviation unmeasured. All probabilities\nmust be finite, in range, and normalized where appropriate. Report filtered\ncoverage alongside accuracy. Do not equate a hard target with a known conditional\nprobability, or a concentrated distribution with justified confidence.",[16,816,818],{"id":817},"release-assets-and-terms","Release assets and terms",[129,820,821],{},"Release the recipe, manifests, inference configuration, calibration parameters,\nmetrics, and model card alongside any weights. Keep raw data and checkpoints out\nof Git. Retain source attribution and audit data and image terms before release.",[129,823,824,825,828],{},"MASSIVE and CLEVR identify CC BY 4.0 terms; BoolQ identifies CC BY-SA 3.0 terms.\nScreenQA annotations identify CC BY 4.0, but Rico screenshot terms must also be\nchecked. Do not infer a weight license solely from an annotation or code license.\nScienceQA is included in the research mixture. Existing Laya Vision\nweights remain benchmark references. See ",[27,826,827],{"href":111},"upstream alignment","\nfor source protocols and comparison limits.",[16,830,832],{"id":831},"business-decision-sources","Business decision sources",[565,834,835,847],{},[568,836,837],{},[571,838,839,841,844],{},[574,840,576],{},[574,842,843],{},"Decision supervision",[574,845,846],{},"Evidence and limits",[584,848,849,867,884,902,920,938,956],{},[571,850,851,858,864],{},[589,852,853],{},[27,854,857],{"href":855,"rel":856},"https:\u002F\u002Fgithub.com\u002Famazon-science\u002Fesci-data",[189],"Amazon ESCI",[589,859,860,861,863],{},"Query\u002Fproduct ",[177,862,601],{},": exact, substitute, complement, irrelevant; English, Spanish and Japanese",[589,865,866],{},"Actual customer search queries with manual relevance judgments. Use explicit E\u002FS\u002FC\u002FI labels. The categories are not assumed to be an ordinal scale. Apache-2.0 project release.",[571,868,869,876,881],{},[589,870,871],{},[27,872,875],{"href":873,"rel":874},"https:\u002F\u002Fwww.microsoft.com\u002Fen-us\u002Fresearch\u002Fpublication\u002Fwikiqa-a-challenge-dataset-for-open-domain-question-answering\u002F",[189],"WikiQA",[589,877,878,879],{},"Query\u002Fpassage answerability ",[177,880,619],{},[589,882,883],{},"Real Bing queries, Wikipedia sentences and crowdsourced binary judgments. Explicit negative labels; never equate missing judgments with negatives. Microsoft Research Data License: research\u002Ftechnology development restrictions apply.",[571,885,886,893,899],{},[589,887,888],{},[27,889,892],{"href":890,"rel":891},"https:\u002F\u002Fsharc-data.github.io\u002Fdata.html",[189],"ShARC",[589,894,895,896,898],{},"Agent ",[177,897,601],{},": yes, no, irrelevant, ask for missing information",[589,900,901],{},"Public rule documents with crowdsourced scenarios\u002Fconversations. Real policy tasks, not a log of actual customer interactions. Evidence annotations and the target follow-up wording never enter model state. CC BY-SA 3.0.",[571,903,904,911,917],{},[589,905,906],{},[27,907,910],{"href":908,"rel":909},"https:\u002F\u002Fstanfordnlp.github.io\u002Fcontract-nli\u002F",[189],"ContractNLI",[589,912,913,914,916],{},"Full-contract ",[177,915,601],{},": entailment, contradiction, not mentioned",[589,918,919],{},"Human annotations on real contracts. Keep the entire document; exclude over-budget documents instead of selecting gold evidence spans. CC BY 4.0.",[571,921,922,929,935],{},[589,923,924],{},[27,925,928],{"href":926,"rel":927},"https:\u002F\u002Fspamassassin.apache.org\u002Fold\u002Fpubliccorpus\u002Freadme.html",[189],"SpamAssassin",[589,930,931,932,934],{},"Email spam ",[177,933,619],{},"; known ham supplies negative phishing examples",[589,936,937],{},"Public collected messages. Includes hard ham. Sender copyright remains with senders; the software's Apache license is not a blanket data license. This is a research corpus.",[571,939,940,947,953],{},[589,941,942],{},[27,943,946],{"href":944,"rel":945},"https:\u002F\u002Fmonkey.org\u002F~jose\u002Fphishing\u002FREADME.txt",[189],"Nazario phishing corpus",[589,948,949,950,952],{},"Positive phishing ",[177,951,619],{},", paired with separately identified ham",[589,954,955],{},"Hand-classified personal-inbox messages; 2023 for training\u002Fcalibration, 2024 development, 2025 test. CC BY 4.0. Positive\u002Fnegative source and age differ; report cross-corpus and temporal limitations.",[571,957,958,965,970],{},[589,959,960],{},[27,961,964],{"href":962,"rel":963},"https:\u002F\u002Farchive.ics.uci.edu\u002Fdataset\u002F228\u002Fsms+spam+collection",[189],"UCI SMS Spam Collection",[589,966,967,968],{},"Message spam ",[177,969,619],{},[589,971,972],{},"Public collected SMS with spam\u002Fham labels. Adds a short-message domain; it does not substitute for email evaluation. UCI release is CC BY 4.0.",[129,974,975],{},"The mixture includes research-use sources, including ScienceQA. Dataset annotations, raw documents and mixed trained\nweights have distinct rights; this document does not certify a commercial\ncheckpoint license.",[16,977,979],{"id":978},"conversion-and-isolation","Conversion and isolation",[129,981,982,985,986,989,990,993],{},[177,983,984],{},"scripts\u002Fprepare_data.py"," verifies every raw-file SHA-256 against\n",[177,987,988],{},"data\u002Fmanifests\u002Fenrichment-downloads.json"," before conversion. It creates the\nexisting ",[177,991,992],{},"{state, question, target}"," schema. One-hot targets come from source\nlabels. No model generates pseudo-labels, confidence scores or explanations.",[129,995,996],{},"Source rules are fixed in the converter:",[21,998,999,1002,1005,1008,1011,1014],{},[24,1000,1001],{},"ESCI uses the official challenging-query subset. Select 450 training queries\nand at most 60 queries per held-out partition per locale using stable hashes.\nKeep whole queries, with official test priority. Products may occur under\nmultiple queries: this is unseen-query evaluation, not unseen-product evidence.",[24,1003,1004],{},"ShARC groups by source page and snippet. ContractNLI groups by full contract.\nWikiQA joins query and source-document aliases before resolving split conflicts.",[24,1006,1007],{},"Mail uses decoded bodies with the same plain-text\u002FHTML conversion for both\nclasses; labels, corpus names, spam-filter headers and acquisition timestamps\nare absent from state. URL\u002Fnumber-normalized body signatures group simple\ncampaign variants. Attachments and links are never executed or fetched.",[24,1009,1010],{},"Independent calibration comes from training groups. Original dev\u002Ftest labels\nare never moved into training. Conflicting group partitions keep the higher\npriority partition and exclude the others.",[24,1012,1013],{},"Frozen Laya\u002FJevBench inputs, the sampled training inputs, and its\nheld-out states are checked with punctuation-insensitive text hashes.\nChecks include Laya's 3,000-character body prefixes. Matching source groups are\nexcluded. This does not prove absence of semantic or paraphrase duplicates.",[24,1015,1016],{},"The fixed 2,048-token training budget is unchanged. Exclusions are counted.\nServing still accepts 4,096 tokens. Results on the eligible ContractNLI subset\nmust not be presented as scores on its complete official test set.",[129,1018,1019],{},"The training mixture combines 17 text\u002Fimage groups and nine business task\u002Flanguage\ngroups. Original dev\u002Fcalibration\u002Ftest rows retain their partitions. The existing uniform group\nsampler therefore allocates an expected 9\u002F26 of updates to business tasks and 17\u002F26\nto the other text\u002Fimage tasks. Its fixed 6,000-row training cap per group remains in effect.\nNo class rebalancing is hidden in calibration or evaluation. Phishing positives\nand WikiQA positives are minorities; report recall, macro-F1, PR-AUC and class\ncounts alongside accuracy, NLL, Brier and ECE.",[129,1021,1022,1023,1026,1027,1030,1031,1034,1035,1037],{},"The fixed 26-group mixture lives in ",[177,1024,1025],{},"data\u002Fprocessed\u002Fv1",". Its prepared partitions\ncontain 185,857 training, 64,843 development, 86,897 calibration and 180,031 test\nrows. The per-group training cap yields 143,238 eligible training rows.\n",[177,1028,1029],{},"manifest.json"," records counts, exclusions and hashes. The frozen benchmark text\nfingerprints in ",[177,1032,1033],{},"data\u002Fmanifests\u002Fevaluation-text-sha256.json"," are exclusion inputs,\nnever training examples. ",[177,1036,984],{}," builds this mixture without\nrequiring a trained checkpoint or a previous training run.",{"title":151,"searchDepth":152,"depth":153,"links":1039},[1040,1043,1044,1045,1046,1047],{"id":562,"depth":152,"text":563,"children":1041},[1042],{"id":735,"depth":153,"text":736},{"id":763,"depth":152,"text":764},{"id":787,"depth":152,"text":788},{"id":817,"depth":152,"text":818},{"id":831,"depth":152,"text":832},{"id":978,"depth":152,"text":979},{},"\u002Fdocs\u002Fdata-and-evaluation",{"title":105,"description":559},"docs\u002Fdata-and-evaluation","WgB8znm6CmAcQYsDj-z2Z7q8oMho5QS7anM0bKDwRu4",{"id":1054,"title":1055,"body":1056,"description":1063,"extension":158,"meta":1271,"navigation":160,"path":1272,"seo":1273,"stem":1274,"__hash__":1275},"content\u002Fdocs\u002Fdesign.md","Model architecture",{"type":9,"value":1057,"toc":1266},[1058,1061,1064,1067,1071,1078,1096,1099,1103,1127,1215,1218,1228,1232,1238,1245,1260,1263],[12,1059,1055],{"id":1060},"model-architecture",[129,1062,1063],{},"Linnaeus accepts a state and independent questions and returns temperature-scaled\nprobabilities over supplied candidates. The training and serving templates are\nshared. A request reuses its causal prefix and computes question suffixes in\nparallel. Frozen image features are encoded on a cache miss and shared. More\nquestions still require more suffix compute.",[129,1065,1066],{},"Each sequence contains the state, question, candidate descriptions, and a\nreserved marker after each candidate. A shared scalar head scores the marker's\nhidden state. A per-question softmax gives the decision distribution. Nominal\ncandidate order is shuffled during training; binary and ordinal order are fixed.\nCandidate-order sensitivity is measured on held-out data.",[16,1068,1070],{"id":1069},"fixed-recipe","Fixed recipe",[129,1072,1073,1074,1077],{},"The Qwen3.5 adapter freezes the base and vision encoder and trains rank-8\nlanguage LoRA plus the scorer. The training recipe fixes precision, image and\nsequence budgets, optimizer, learning rates, sampling, checkpoint\nselection, and calibration. ",[177,1075,1076],{},"recipe.py"," is the executable specification.\nRun metadata records all values and data hashes, including values that callers\ncannot change.",[129,1079,1080,1083,1084,1087,1088,1091,1092,1095],{},[177,1081,1082],{},"RLCDConfig(sigma=0.3, ce_weight=1.0)"," is the complete RLCD configuration surface.\n",[177,1085,1086],{},"sigma"," controls exploration in logit space; ",[177,1089,1090],{},"ce_weight"," controls the joint\ncross-entropy term. Four samples, the proper-scoring reward, ordinal distance\npenalty, baseline estimator, and numerical safeguards are fixed. ",[177,1093,1094],{},"--steps","\ncontrols the total update budget.",[129,1097,1098],{},"The release path merges LoRA before calibration and final evaluation. Loading\nthe compact checkpoint reconstructs that same merged model from the pinned\nbase. The caller does not choose merge state, precision, attention backend,\nLoRA rank, or calibration mode.",[16,1100,1102],{"id":1101},"model-adapters","Model adapters",[129,1104,1105,1108,1109,637,1112,637,1115,1118,1119,1122,1123,1126],{},[177,1106,1107],{},"Qwen35Adapter"," contains the backbone-specific code. Another backbone supplies\nan adapter object to ",[177,1110,1111],{},"DecisionModel",[177,1113,1114],{},"DecisionCollator",[177,1116,1117],{},"train",", and\n",[177,1120,1121],{},"final_evaluation","; ",[177,1124,1125],{},"Predictor.from_checkpoint(..., adapter=adapter)"," validates\nits identity against the saved artifact.",[565,1128,1129,1139],{},[568,1130,1131],{},[571,1132,1133,1136],{},[574,1134,1135],{},"Adapter responsibility",[574,1137,1138],{},"Contract",[584,1140,1141,1160,1176,1192,1205],{},[571,1142,1143,1157],{},[589,1144,1145,637,1148,637,1151,637,1154],{},[177,1146,1147],{},"name",[177,1149,1150],{},"base_model",[177,1152,1153],{},"marker",[177,1155,1156],{},"image_prefix",[589,1158,1159],{},"Stable identity, one reserved candidate token, image prompt syntax",[571,1161,1162,1173],{},[589,1163,1164,637,1167,637,1170],{},[177,1165,1166],{},"processor",[177,1168,1169],{},"load",[177,1171,1172],{},"hidden_size",[589,1174,1175],{},"Load the pinned processor\u002Fbackbone and size the shared scorer",[571,1177,1178,1189],{},[589,1179,1180,637,1183,637,1186],{},[177,1181,1182],{},"adapt_language",[177,1184,1185],{},"merge",[177,1187,1188],{},"freeze_vision",[589,1190,1191],{},"Apply the training and deployment lifecycle",[571,1193,1194,1202],{},[589,1195,1196,637,1199],{},[177,1197,1198],{},"batch_inputs",[177,1200,1201],{},"shared_image_inputs",[589,1203,1204],{},"Preserve all candidates and process shared images once",[571,1206,1207,1212],{},[589,1208,1209],{},[177,1210,1211],{},"forward",[589,1213,1214],{},"Return candidate-addressable hidden states and the shared-prefix position offset",[129,1216,1217],{},"There is one supplied adapter. Supporting a different backbone requires its\nimplementation and the same checkpoint\u002Fquality acceptance; an arbitrary model\npath alone does not establish compatibility. Model-specific tokenization and\nkernels belong here, without branching the RLCD objective or public decision API.",[129,1219,131,1220,1223,1224,1227],{},[27,1221,1222],{"href":29},"inference reference"," describes question types, response fields,\nand input limits. ",[27,1225,1226],{"href":36},"Bub integration"," exposes the same decision API to agents.",[16,1229,1231],{"id":1230},"behavior-and-regression-tests","Behavior and regression tests",[129,1233,1234,1237],{},[177,1235,1236],{},"tests\u002Facceptance.py"," loads the exported checkpoint and exercises the real\nprediction and Bub interfaces. It checks text and image decisions, candidate\nprobabilities, independent requests, reload, and input limits. The training\nworkflow runs this acceptance on its exported weights.",[129,1239,1240,1241,1244],{},"The CPU tests in ",[177,1242,1243],{},"tests\u002Ftest_*.py"," cover reported metric meanings, temperature\ncalibration, the pinned RLCD objective and gradients, and the regression where\nidentical screenshots crossed splits under different source IDs. Run them when\nchanging the corresponding behavior:",[200,1246,1248],{"className":202,"code":1247,"language":204,"meta":151,"style":151},"mise run test\n",[177,1249,1250],{"__ignoreMap":151},[208,1251,1252,1255,1257],{"class":210,"line":211},[208,1253,1254],{"class":214},"mise",[208,1256,506],{"class":218},[208,1258,1259],{"class":218}," test\n",[129,1261,1262],{},"Tests assert observable behavior or a known failure case. Internal allocation,\nhelper structure, log keys, file counts and exact error wording are not contracts.\nQuality evaluation separately measures held-out accuracy, calibration,\ncandidate-order sensitivity and image dependence.",[356,1264,1265],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":151,"searchDepth":152,"depth":153,"links":1267},[1268,1269,1270],{"id":1069,"depth":152,"text":1070},{"id":1101,"depth":152,"text":1102},{"id":1230,"depth":152,"text":1231},{},"\u002Fdocs\u002Fdesign",{"title":1055,"description":1063},"docs\u002Fdesign","pocNQdGiempJ_tKpOc3mk8BrI3_EE8KSu3d-QtC_8AE",{"id":1277,"title":143,"body":1278,"description":1580,"extension":158,"meta":1581,"navigation":160,"path":1582,"seo":1583,"stem":1584,"__hash__":1585},"content\u002Fdocs\u002Fdevelopment.md",{"type":9,"value":1279,"toc":1576},[1280,1282,1309,1355,1373,1377,1399,1481,1492,1496,1517,1523,1540,1543,1560,1574],[12,1281,143],{"id":142},[129,1283,1284,1288,1289,1292,1293,1296,1297,1300,1301,1304,1305,1308],{},[27,1285,1254],{"href":1286,"rel":1287},"https:\u002F\u002Fmise.jdx.dev\u002F",[189]," provisions the toolchain (",[177,1290,1291],{},"mise.toml",": Python\n3.12 + uv) and runs every project command (",[177,1294,1295],{},"mise run \u003Ctask>","). The runtime\ntargets the Linux\u002FCUDA environment documented in the\n",[27,1298,1299],{"href":29},"inference guide","; the lock is restricted to\n",[177,1302,1303],{},"sys_platform == 'linux'"," via ",[177,1306,1307],{},"required-environments",". The quality and\ndocumentation groups can be installed without model dependencies on a Linux\nhost.",[200,1310,1312],{"className":202,"code":1311,"language":204,"meta":151,"style":151},"mise install\nmise run install\nmise run check\nmise run test\nmise run build\n",[177,1313,1314,1321,1329,1338,1346],{"__ignoreMap":151},[208,1315,1316,1318],{"class":210,"line":211},[208,1317,1254],{"class":214},[208,1319,1320],{"class":218}," install\n",[208,1322,1323,1325,1327],{"class":210,"line":152},[208,1324,1254],{"class":214},[208,1326,506],{"class":218},[208,1328,1320],{"class":218},[208,1330,1331,1333,1335],{"class":210,"line":153},[208,1332,1254],{"class":214},[208,1334,506],{"class":218},[208,1336,1337],{"class":218}," check\n",[208,1339,1340,1342,1344],{"class":210,"line":251},[208,1341,1254],{"class":214},[208,1343,506],{"class":218},[208,1345,1259],{"class":218},[208,1347,1348,1350,1352],{"class":210,"line":257},[208,1349,1254],{"class":214},[208,1351,506],{"class":218},[208,1353,1354],{"class":218}," build\n",[129,1356,1357,1360,1361,1364,1365,1368,1369,1372],{},[177,1358,1359],{},"mise run install"," installs the runtime, training, agent and telemetry extras,\nand quality tools. The site lives in ",[177,1362,1363],{},"site\u002F"," (Nuxt + UnoCSS): ",[177,1366,1367],{},"mise run site-preview",".\nRun ",[177,1370,1371],{},"mise tasks"," to see the available commands.",[16,1374,1376],{"id":1375},"dependencies","Dependencies",[129,1378,1379,1382,1383,1386,1387,1390,1391,1394,1395,1398],{},[177,1380,1381],{},"pyproject.toml"," owns the package metadata, dependencies, tool settings, and uv\nconfiguration. ",[177,1384,1385],{},"uv.lock"," records the resolution for Python 3.12 on Linux,\nincluding the pinned Bub Git revision and the ",[177,1388,1389],{},"+cu128"," PyTorch artifacts bound\nthrough ",[177,1392,1393],{},"tool.uv.sources"," and the explicit ",[177,1396,1397],{},"pytorch-cu128"," index. The published\nexperiment's environment snapshot remains historical evidence, not an\ninstallation input.",[565,1400,1401,1411],{},[568,1402,1403],{},[571,1404,1405,1408],{},[574,1406,1407],{},"Selection",[574,1409,1410],{},"Purpose",[584,1412,1413,1421,1431,1441,1450,1461,1471],{},[571,1414,1415,1418],{},[589,1416,1417],{},"Default dependencies",[589,1419,1420],{},"Model runtime",[571,1422,1423,1428],{},[589,1424,1425,1427],{},[177,1426,1117],{}," extra",[589,1429,1430],{},"Training, evaluation, and the unit tests' data dependencies",[571,1432,1433,1438],{},[589,1434,1435,1427],{},[177,1436,1437],{},"telemetry",[589,1439,1440],{},"NVML board metrics via nvidia-ml-py",[571,1442,1443,1447],{},[589,1444,1445,1427],{},[177,1446,179],{},[589,1448,1449],{},"The pinned Bub SDK integration",[571,1451,1452,1458],{},[589,1453,1454,1457],{},[177,1455,1456],{},"quality"," group",[589,1459,1460],{},"Ruff, ty, prek, and pytest",[571,1462,1463,1468],{},[589,1464,1465,1457],{},[177,1466,1467],{},"docs",[589,1469,1470],{},"Sphinx, Furo, and MyST",[571,1472,1473,1478],{},[589,1474,1475,1457],{},[177,1476,1477],{},"plot",[589,1479,1480],{},"Rendering saved evaluation results",[129,1482,1483,1484,1487,1488,1491],{},"After changing dependencies, run ",[177,1485,1486],{},"mise run lock",", review the lock diff, and sync\nthe relevant selections with ",[177,1489,1490],{},"uv sync",". CI refuses a missing or stale\nlock rather than resolving different versions. Avoid replacing a trained run's\nenvironment while it is active.",[16,1493,1495],{"id":1494},"checks-and-builds","Checks and builds",[129,1497,1498,1501,1502,1505,1506,1509,1510,1512,1513,1516],{},[177,1499,1500],{},"mise run check"," verifies the lock, repository hygiene, Ruff lint and formatting,\nand ty checks for ",[177,1503,1504],{},"src"," against the installed dependencies. ",[177,1507,1508],{},"mise run lint"," runs the\nchecks that only need the ",[177,1511,1456],{}," group. ",[177,1514,1515],{},"uv run --group quality prek install","\noptionally installs the same hygiene hooks locally; installing hooks is not\nrequired to run the checks.",[129,1518,1519,1522],{},[177,1520,1521],{},"mise run test"," runs pytest, including the pinned RLCD loss and\ngradient values, prefix-cache updates and gradients, calibration metrics, and\ndata-split isolation. It does not load\nmodel weights, download data, or prove GPU training\u002Finference acceptance. CI runs\nthese tests with Hugging Face access disabled. GPU acceptance remains a separate\nstep for changes to execution or training.",[129,1524,1525,1526,1529,1530,1533,1534,1537,1538,149],{},"Run an individual file or case with ",[177,1527,1528],{},"uv run pytest tests\u002Ftest_rlcd.py"," or\n",[177,1531,1532],{},"uv run pytest -k gradients",". Test discovery is limited to ",[177,1535,1536],{},"tests\u002F"," in\n",[177,1539,1381],{},[129,1541,1542],{},"The test job installs the same locked CUDA wheels, checks types, and runs the\ntests on CPU. Quality and website jobs\ndo not install the model runtime.",[129,1544,1545,1548,1549,1552,1553,1556,1557,149],{},[177,1546,1547],{},"mise run build"," uses ",[177,1550,1551],{},"uv_build"," to produce a wheel and source distribution in\n",[177,1554,1555],{},"dist\u002F",". Local model weights, datasets, caches, and experiment runs are excluded.\nThe CI build does not publish packages. Website validation and deployment use\nthe separate ",[27,1558,1559],{"href":147},"website workflow",[129,1561,1562,1563,1568,1569,149],{},"The mise tasks and separated quality\u002Ftest jobs adapt the relevant parts of\n",[27,1564,1567],{"href":1565,"rel":1566},"https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub\u002Fblob\u002Fmain\u002FMakefile",[189],"Bub's CI layout"," and\n",[27,1570,1573],{"href":1571,"rel":1572},"https:\u002F\u002Fgithub.com\u002Fbubbuild\u002Fbub\u002Fblob\u002Fmain\u002F.github\u002Fworkflows\u002Fmain.yml",[189],"CI",[356,1575,1265],{},{"title":151,"searchDepth":152,"depth":153,"links":1577},[1578,1579],{"id":1375,"depth":152,"text":1376},{"id":1494,"depth":152,"text":1495},"mise provisions the toolchain (mise.toml: Python\n3.12 + uv) and runs every project command (mise run \u003Ctask>). The runtime\ntargets the Linux\u002FCUDA environment documented in the\ninference guide; the lock is restricted to\nsys_platform == 'linux' via required-environments. The quality and\ndocumentation groups can be installed without model dependencies on a Linux\nhost.",{},"\u002Fdocs\u002Fdevelopment",{"title":143,"description":1580},"docs\u002Fdevelopment","zuEuZ827dms1bqt_aKupA4i5jxJg2VQ2gc44wqRtR9g",{"id":1587,"title":1588,"body":1589,"description":1596,"extension":158,"meta":1781,"navigation":160,"path":1782,"seo":1783,"stem":1784,"__hash__":1785},"content\u002Fdocs\u002Ffigures\u002FREADME.md","Dohnuts-0.1.0-0.8B comparisons",{"type":9,"value":1590,"toc":1772},[1591,1594,1597,1611,1614,1618,1624,1635,1639,1644,1655,1659,1664,1675,1679,1684,1695,1699,1704,1715,1719,1724,1732,1736,1743,1767,1770],[12,1592,1588],{"id":1593},"dohnuts-010-08b-comparisons",[129,1595,1596],{},"Seed 42, update 3,600. Figures use saved evaluation results with fixed Laya multilingual and Laya Vision references.",[129,1598,1599,1603,1604,1603,1608],{},[27,1600,1602],{"href":1601},"overview.svg","Model overview"," · ",[27,1605,1607],{"href":1606},"chart-data.csv","Chart data",[27,1609,1610],{"href":1029},"Model identity and checksums",[129,1612,1613],{},"The figures are available as SVG. Captions document each evaluation protocol. One seed does not provide confidence intervals across seeds.",[16,1615,1617],{"id":1616},"jevbench-decision-types-and-difficulty","JevBench: decision types and difficulty",[129,1619,1620],{},[1621,1622],"img",{"alt":1617,"src":1623},"01_jevbench.svg",[21,1625,1626,1629,1632],{},[24,1627,1628],{},"Jev: published per-task outcomes, v1.2.2. Dohnuts and both Laya checkpoints: local measurements. All 231 local outputs are valid.",[24,1630,1631],{},"Dohnuts context limit: 4,096 tokens. Laya defaults: 1,024 tokens with native truncation. Vision is tested on text here.",[24,1633,1634],{},"303 official tasks are unavailable, including the judge tier. This is not the 534-task leaderboard score. One Dohnuts seed.",[16,1636,1638],{"id":1637},"laya-multilingual-application-tasks","Laya multilingual: application tasks",[129,1640,1641],{},[1621,1642],{"alt":1638,"src":1643},"02_applications.svg",[21,1645,1646,1649,1652],{},[24,1647,1648],{},"Counts beside tasks are decisions, not training examples. Original upstream question builders, seed 13 and candidate order.",[24,1650,1651],{},"The published application\u002Fchart reference is used consistently, including typed decisions (2,000 decisions).",[24,1653,1654],{},"Historical Laya dataset revisions and per-example hashes are unavailable; byte-identical historical inputs cannot be verified.",[16,1656,1658],{"id":1657},"laya-multilingual-language-coverage-and-accuracy","Laya multilingual: language coverage and accuracy",[129,1660,1661],{},[1621,1662],{"alt":1658,"src":1663},"03_multilingual.svg",[21,1665,1666,1669,1672],{},[24,1667,1668],{},"MASSIVE intent uses 20 candidates; XNLI uses 3. The 51-language and 14-language suites are distinct evaluations.",[24,1670,1671],{},"On the 51-language suite, accuracy exceeds 15% (3× random) in 51\u002F51 languages for Dohnuts and 45\u002F51 for multilingual.",[24,1673,1674],{},"Dohnuts: measured. Laya multilingual: published reference. Historical byte identity cannot be independently verified.",[16,1676,1678],{"id":1677},"laya-vision-accuracy-and-calibration","Laya Vision: accuracy and calibration",[129,1680,1681],{},[1621,1682],{"alt":1678,"src":1683},"04_vision.svg",[21,1685,1686,1689,1692],{},[24,1687,1688],{},"ScienceQA: official test image subset. VQAv2: independent split of the validation pool. These are not the model-card splits.",[24,1690,1691],{},"Laya Vision has possible VQAv2 training exposure and A-OKVQA checkpoint-selection exposure; this is not a blind comparison.",[24,1693,1694],{},"Laya: FP32 CPU, 2,048-token total\u002Fhead budgets. Dohnuts: BF16. ECE: 15 bins, deployed temperatures, no per-task refit.",[16,1696,1698],{"id":1697},"same-hardware-inference-latency","Same-hardware inference latency",[129,1700,1701],{},[1621,1702],{"alt":1698,"src":1703},"05_latency.svg",[21,1705,1706,1709,1712],{},[24,1707,1708],{},"3 warmups and 20 synchronized repetitions. Includes preprocessing and transfers; excludes loading, network and queueing.",[24,1710,1711],{},"Uses each native API, tokenizer and cache behavior. Image timings are warm, not uncached image-encoder timings.",[24,1713,1714],{},"Laya uses the fixed same-hardware baseline; Dohnuts uses Dohnuts-0.1.0-0.8B. Jev API latency is not mixed into this chart.",[16,1716,1718],{"id":1717},"jevbench-paired-correctness-and-answer-agreement","JevBench: paired correctness and answer agreement",[129,1720,1721],{},[1621,1722],{"alt":1718,"src":1723},"06_agreement.svg",[21,1725,1726,1729],{},[24,1727,1728],{},"Jev publishes correctness, not predicted labels: its exact answer-agreement count is unavailable.",[24,1730,1731],{},"148 shared correct answers confirm the same label. The 27 shared errors may have different labels; 175 is correctness agreement.",[16,1733,1735],{"id":1734},"reproduce-the-figures","Reproduce the figures",[129,1737,194,1738,1742],{},[27,1739,1741],{"href":1740},"..\u002Flocal-benchmarks#model-card-figures","plotting setup",", then run from the repository root:",[200,1744,1748],{"className":1745,"code":1746,"language":1747,"meta":151,"style":151},"language-sh shiki shiki-themes github-light github-dark","uv run python scripts\u002Fplot_model_card.py --run runs\u002Fv1\n","sh",[177,1749,1750],{"__ignoreMap":151},[208,1751,1752,1754,1756,1758,1761,1764],{"class":210,"line":211},[208,1753,215],{"class":214},[208,1755,506],{"class":218},[208,1757,509],{"class":218},[208,1759,1760],{"class":218}," scripts\u002Fplot_model_card.py",[208,1762,1763],{"class":222}," --run",[208,1765,1766],{"class":218}," runs\u002Fv1\n",[129,1768,1769],{},"The command writes PNG, SVG, and PDF figures to the experiment output directory.\nThe published manifest identifies the model and checksums the figures and chart values.",[356,1771,358],{},{"title":151,"searchDepth":152,"depth":153,"links":1773},[1774,1775,1776,1777,1778,1779,1780],{"id":1616,"depth":152,"text":1617},{"id":1637,"depth":152,"text":1638},{"id":1657,"depth":152,"text":1658},{"id":1677,"depth":152,"text":1678},{"id":1697,"depth":152,"text":1698},{"id":1717,"depth":152,"text":1718},{"id":1734,"depth":152,"text":1735},{},"\u002Fdocs\u002Ffigures\u002Freadme",{"title":1588,"description":1596},"docs\u002Ffigures\u002FREADME","It3zmA0thvyp0jhApBVm4BTCEWv7XdrrPVxQdNrNB4c",{"id":1787,"title":1788,"body":1789,"description":3,"extension":2057,"meta":2058,"navigation":160,"path":2059,"seo":2060,"stem":2061,"__hash__":2062},"content\u002Fdocs\u002Ffigures\u002Fchart-data.csv","Chart Data",[1790,1798,1801,1804,1807,1810,1812,1814,1816,1819,1821,1823,1825,1828,1830,1832,1833,1837,1838,1840,1841,1844,1846,1848,1850,1854,1856,1858,1860,1866,1868,1871,1873,1876,1878,1881,1883,1886,1887,1890,1892,1895,1897,1900,1902,1905,1907,1911,1913,1917,1919,1926,1928,1932,1934,1937,1939,1943,1945,1951,1955,1959,1961,1963,1965,1968,1970,1972,1974,1976,1978,1985,1988,1991,1994,1996,1998,2000,2002,2004,2006,2008,2010,2013,2016,2018,2020,2025,2028,2031,2034,2037,2039,2041,2043,2046,2048,2050,2052,2055],{"figure":1791,"task":1792,"system":1793,"metric":1794,"value":1795,"n":1796,"scope":1797},"01_jevbench","overall","dohnuts","accuracy","0.658008658008658","231","identical_public_ids",{"figure":1791,"task":1792,"system":1799,"metric":1794,"value":1800,"n":1796,"scope":1797},"jev","0.8658008658008658",{"figure":1791,"task":1792,"system":1802,"metric":1794,"value":1803,"n":1796,"scope":1797},"laya-multilingual","0.47619047619047616",{"figure":1791,"task":1792,"system":1805,"metric":1794,"value":1806,"n":1796,"scope":1797},"laya-vision","0.4805194805194805",{"figure":1791,"task":601,"system":1793,"metric":1794,"value":1808,"n":1809,"scope":1797},"0.6834532374100719","139",{"figure":1791,"task":601,"system":1799,"metric":1794,"value":1811,"n":1809,"scope":1797},"0.8848920863309353",{"figure":1791,"task":601,"system":1802,"metric":1794,"value":1813,"n":1809,"scope":1797},"0.5035971223021583",{"figure":1791,"task":601,"system":1805,"metric":1794,"value":1815,"n":1809,"scope":1797},"0.4676258992805755",{"figure":1791,"task":619,"system":1793,"metric":1794,"value":1817,"n":1818,"scope":1797},"0.6216216216216216","74",{"figure":1791,"task":619,"system":1799,"metric":1794,"value":1820,"n":1818,"scope":1797},"0.8513513513513513",{"figure":1791,"task":619,"system":1802,"metric":1794,"value":1822,"n":1818,"scope":1797},"0.4864864864864865",{"figure":1791,"task":619,"system":1805,"metric":1794,"value":1824,"n":1818,"scope":1797},"0.5",{"figure":1791,"task":642,"system":1793,"metric":1794,"value":1826,"n":1827,"scope":1797},"0.6111111111111112","18",{"figure":1791,"task":642,"system":1799,"metric":1794,"value":1829,"n":1827,"scope":1797},"0.7777777777777778",{"figure":1791,"task":642,"system":1802,"metric":1794,"value":1831,"n":1827,"scope":1797},"0.2222222222222222",{"figure":1791,"task":642,"system":1805,"metric":1794,"value":1824,"n":1827,"scope":1797},{"figure":1791,"task":1834,"system":1793,"metric":1794,"value":1835,"n":1836,"scope":1797},"easy","1.0","48",{"figure":1791,"task":1834,"system":1799,"metric":1794,"value":1835,"n":1836,"scope":1797},{"figure":1791,"task":1834,"system":1802,"metric":1794,"value":1839,"n":1836,"scope":1797},"0.8958333333333334",{"figure":1791,"task":1834,"system":1805,"metric":1794,"value":1839,"n":1836,"scope":1797},{"figure":1791,"task":1842,"system":1793,"metric":1794,"value":1829,"n":1843,"scope":1797},"standard","72",{"figure":1791,"task":1842,"system":1799,"metric":1794,"value":1845,"n":1843,"scope":1797},"0.9861111111111112",{"figure":1791,"task":1842,"system":1802,"metric":1794,"value":1847,"n":1843,"scope":1797},"0.4166666666666667",{"figure":1791,"task":1842,"system":1805,"metric":1794,"value":1849,"n":1843,"scope":1797},"0.4722222222222222",{"figure":1791,"task":1851,"system":1793,"metric":1794,"value":1852,"n":1853,"scope":1797},"hard","0.43243243243243246","111",{"figure":1791,"task":1851,"system":1799,"metric":1794,"value":1855,"n":1853,"scope":1797},"0.7297297297297297",{"figure":1791,"task":1851,"system":1802,"metric":1794,"value":1857,"n":1853,"scope":1797},"0.3333333333333333",{"figure":1791,"task":1851,"system":1805,"metric":1794,"value":1859,"n":1853,"scope":1797},"0.3063063063063063",{"figure":1861,"task":1862,"system":1793,"metric":1794,"value":1863,"n":1864,"scope":1865},"02_applications","apps\u002Fjev.ag_news","0.89","400","published_application_protocol",{"figure":1861,"task":1862,"system":1802,"metric":1794,"value":1867,"n":1864,"scope":1865},"0.93",{"figure":1861,"task":1869,"system":1793,"metric":1794,"value":1870,"n":1864,"scope":1865},"apps\u002Fjev.emotion","0.7825",{"figure":1861,"task":1869,"system":1802,"metric":1794,"value":1872,"n":1864,"scope":1865},"0.53",{"figure":1861,"task":1874,"system":1793,"metric":1794,"value":1875,"n":1864,"scope":1865},"apps\u002Fjev.banking77_full","0.705",{"figure":1861,"task":1874,"system":1802,"metric":1794,"value":1877,"n":1864,"scope":1865},"0.425",{"figure":1861,"task":1879,"system":1793,"metric":1794,"value":1880,"n":1864,"scope":1865},"apps\u002Fapp.email_spam","0.7875",{"figure":1861,"task":1879,"system":1802,"metric":1794,"value":1882,"n":1864,"scope":1865},"0.993",{"figure":1861,"task":1884,"system":1793,"metric":1794,"value":1885,"n":1864,"scope":1865},"apps\u002Fapp.phishing","0.7575",{"figure":1861,"task":1884,"system":1802,"metric":1794,"value":1882,"n":1864,"scope":1865},{"figure":1861,"task":1888,"system":1793,"metric":1794,"value":1889,"n":1864,"scope":1865},"apps\u002Fapp.guardrails_jailbreak","0.905",{"figure":1861,"task":1888,"system":1802,"metric":1794,"value":1891,"n":1864,"scope":1865},"0.755",{"figure":1861,"task":1893,"system":1793,"metric":1794,"value":1894,"n":1864,"scope":1865},"apps\u002Fapp.moderation_toxicity","0.6825",{"figure":1861,"task":1893,"system":1802,"metric":1794,"value":1896,"n":1864,"scope":1865},"0.525",{"figure":1861,"task":1898,"system":1793,"metric":1794,"value":1899,"n":1864,"scope":1865},"apps\u002Fapp.rag_relevance","0.665",{"figure":1861,"task":1898,"system":1802,"metric":1794,"value":1901,"n":1864,"scope":1865},"0.657",{"figure":1861,"task":1903,"system":1793,"metric":1794,"value":1904,"n":1864,"scope":1865},"apps\u002Fapp.support_triage","0.355",{"figure":1861,"task":1903,"system":1802,"metric":1794,"value":1906,"n":1864,"scope":1865},"0.522",{"figure":1861,"task":1908,"system":1793,"metric":1794,"value":1909,"n":1910,"scope":1865},"apps\u002Fapp.model_routing_domain","0.7669172932330827","399",{"figure":1861,"task":1908,"system":1802,"metric":1794,"value":1912,"n":1910,"scope":1865},"0.12300000000000001",{"figure":1861,"task":1914,"system":1793,"metric":1794,"value":1915,"n":1916,"scope":1865},"colab\u002Ftyped_decisions","0.723","2000",{"figure":1861,"task":1914,"system":1802,"metric":1794,"value":1918,"n":1916,"scope":1865},"0.342",{"figure":1920,"task":1921,"system":1793,"metric":1922,"value":1923,"n":1924,"scope":1925},"03_multilingual","MASSIVE intent; 51 languages × 100","language_macro_accuracy","0.6013725490196078","5100","published_multilingual_protocol",{"figure":1920,"task":1921,"system":1802,"metric":1922,"value":1927,"n":1924,"scope":1925},"0.3661",{"figure":1920,"task":1929,"system":1793,"metric":1922,"value":1930,"n":1931,"scope":1925},"MASSIVE intent; 14 languages × 300","0.7326190476190477","4200",{"figure":1920,"task":1929,"system":1802,"metric":1922,"value":1933,"n":1931,"scope":1925},"0.46595238095238095",{"figure":1920,"task":1935,"system":1793,"metric":1922,"value":1936,"n":1931,"scope":1925},"MASSIVE scenario; 14 languages × 300","0.5259523809523811",{"figure":1920,"task":1935,"system":1802,"metric":1922,"value":1938,"n":1931,"scope":1925},"0.4473809523809523",{"figure":1920,"task":1940,"system":1793,"metric":1922,"value":1941,"n":1942,"scope":1925},"XNLI; 15 languages × 300","0.7091111111111111","4500",{"figure":1920,"task":1940,"system":1802,"metric":1922,"value":1944,"n":1942,"scope":1925},"0.7384444444444445",{"figure":1946,"task":1947,"system":1793,"metric":1794,"value":1948,"n":1949,"scope":1950},"04_vision","aokvqa","0.781195079086116","1138","local_same_ids",{"figure":1946,"task":1952,"system":1793,"metric":1794,"value":1953,"n":1954,"scope":1950},"scienceqa","0.8458106098165592","2017",{"figure":1946,"task":1956,"system":1793,"metric":1794,"value":1957,"n":1958,"scope":1950},"vqav2_yesno","0.8081955072821525","8102",{"figure":1946,"task":1947,"system":1805,"metric":1794,"value":1960,"n":1949,"scope":1950},"0.6239015817223199",{"figure":1946,"task":1952,"system":1805,"metric":1794,"value":1962,"n":1954,"scope":1950},"0.8879524045612296",{"figure":1946,"task":1956,"system":1805,"metric":1794,"value":1964,"n":1958,"scope":1950},"0.7696864971611947",{"figure":1946,"task":1947,"system":1793,"metric":1966,"value":1967,"n":1949,"scope":1950},"ece_15","0.06937503030383939",{"figure":1946,"task":1952,"system":1793,"metric":1966,"value":1969,"n":1954,"scope":1950},"0.04454757311174103",{"figure":1946,"task":1956,"system":1793,"metric":1966,"value":1971,"n":1958,"scope":1950},"0.16743869993616028",{"figure":1946,"task":1947,"system":1805,"metric":1966,"value":1973,"n":1949,"scope":1950},"0.10161188133686672",{"figure":1946,"task":1952,"system":1805,"metric":1966,"value":1975,"n":1954,"scope":1950},"0.02849080270990953",{"figure":1946,"task":1956,"system":1805,"metric":1966,"value":1977,"n":1958,"scope":1950},"0.031318949363764295",{"figure":1979,"task":1980,"system":1793,"metric":1981,"value":1982,"n":1983,"scope":1984},"05_latency","text_1q","p50_ms","15.068571490701288","20","warm_same_gpu_native_api",{"figure":1979,"task":1986,"system":1793,"metric":1981,"value":1987,"n":1983,"scope":1984},"text_5q","33.290366001892835",{"figure":1979,"task":1989,"system":1793,"metric":1981,"value":1990,"n":1983,"scope":1984},"text_10q","41.57443650183268",{"figure":1979,"task":1992,"system":1793,"metric":1981,"value":1993,"n":1983,"scope":1984},"text_50q","112.51106898998842",{"figure":1979,"task":1980,"system":1802,"metric":1981,"value":1995,"n":1983,"scope":1984},"9.77273549506208",{"figure":1979,"task":1986,"system":1802,"metric":1981,"value":1997,"n":1983,"scope":1984},"14.757040997210424",{"figure":1979,"task":1989,"system":1802,"metric":1981,"value":1999,"n":1983,"scope":1984},"15.505847499298397",{"figure":1979,"task":1992,"system":1802,"metric":1981,"value":2001,"n":1983,"scope":1984},"47.18665350083029",{"figure":1979,"task":1980,"system":1805,"metric":1981,"value":2003,"n":1983,"scope":1984},"11.004746505932417",{"figure":1979,"task":1986,"system":1805,"metric":1981,"value":2005,"n":1983,"scope":1984},"15.885435503150802",{"figure":1979,"task":1989,"system":1805,"metric":1981,"value":2007,"n":1983,"scope":1984},"30.90040550159756",{"figure":1979,"task":1992,"system":1805,"metric":1981,"value":2009,"n":1983,"scope":1984},"125.62829850503476",{"figure":1979,"task":2011,"system":1793,"metric":1981,"value":2012,"n":1983,"scope":1984},"image_1q","24.430210003629327",{"figure":1979,"task":2014,"system":1793,"metric":1981,"value":2015,"n":1983,"scope":1984},"image_3q","35.844956495566294",{"figure":1979,"task":2011,"system":1805,"metric":1981,"value":2017,"n":1983,"scope":1984},"75.40706799773034",{"figure":1979,"task":2014,"system":1805,"metric":1981,"value":2019,"n":1983,"scope":1984},"77.888197505672",{"figure":2021,"task":1799,"system":2022,"metric":2023,"value":2024,"n":1796,"scope":1797},"06_agreement","Dohnuts vs jev","both_correct","148",{"figure":2021,"task":1799,"system":2022,"metric":2026,"value":2027,"n":1796,"scope":1797},"dohnuts_only_correct","4",{"figure":2021,"task":1799,"system":2022,"metric":2029,"value":2030,"n":1796,"scope":1797},"reference_only_correct","52",{"figure":2021,"task":1799,"system":2022,"metric":2032,"value":2033,"n":1796,"scope":1797},"both_wrong","27",{"figure":2021,"task":1802,"system":2035,"metric":2023,"value":2036,"n":1796,"scope":1797},"Dohnuts vs laya-multilingual","95",{"figure":2021,"task":1802,"system":2035,"metric":2026,"value":2038,"n":1796,"scope":1797},"57",{"figure":2021,"task":1802,"system":2035,"metric":2029,"value":2040,"n":1796,"scope":1797},"15",{"figure":2021,"task":1802,"system":2035,"metric":2032,"value":2042,"n":1796,"scope":1797},"64",{"figure":2021,"task":1805,"system":2044,"metric":2023,"value":2045,"n":1796,"scope":1797},"Dohnuts vs laya-vision","101",{"figure":2021,"task":1805,"system":2044,"metric":2026,"value":2047,"n":1796,"scope":1797},"51",{"figure":2021,"task":1805,"system":2044,"metric":2029,"value":2049,"n":1796,"scope":1797},"10",{"figure":2021,"task":1805,"system":2044,"metric":2032,"value":2051,"n":1796,"scope":1797},"69",{"figure":2021,"task":1802,"system":2035,"metric":2053,"value":2054,"n":1796,"scope":1797},"exact_answer_agreement","142",{"figure":2021,"task":1805,"system":2044,"metric":2053,"value":2056,"n":1796,"scope":1797},"147","csv",{},"\u002Fdocs\u002Ffigures\u002Fchart-data",{},"docs\u002Ffigures\u002Fchart-data","wLGyYpJp2Jq25wXQvo6XGfUB7CcnnuNCoXVYmBrFWeA",{"id":2064,"title":2065,"body":3,"description":3,"extension":2066,"meta":2067,"navigation":160,"path":2104,"seo":2105,"stem":2106,"__hash__":2107},"content\u002Fdocs\u002Ffigures\u002Fmanifest.json","Manifest","json",{"version":2068,"model_id":2069,"checkpoint_sha256":2070,"seed":2071,"step":2072,"matplotlib":2073,"numpy":2074,"figures":2075,"files":2095},"0.1.0","Dohnuts-0.1.0-0.8B","196be33a0282537bcd821e2115643b352d0ad2a0bbaf7b242a1b7fe5bd96cfdf",42,3600,"3.11.2","2.5.3",[2076,2083,2085,2087,2089,2091,2093],{"name":2077,"title":2078,"notes":2079},"overview","Model overview and benchmarks",[2080,2081,2082],"Dohnuts-0.1.0-0.8B, seed 42, update 3600; one RX 7900 XTX.","Benchmark values come from chart-data.csv; held-out macro accuracy comes from results\u002Fquality.csv.","Panel captions identify evaluation coverage, reference exposure, precision and warm-cache conditions.",{"name":1791,"title":1617,"notes":2084},[1628,1631,1634],{"name":1861,"title":1638,"notes":2086},[1648,1651,1654],{"name":1920,"title":1658,"notes":2088},[1668,1671,1674],{"name":1946,"title":1678,"notes":2090},[1688,1691,1694],{"name":1979,"title":1698,"notes":2092},[1708,1711,1714],{"name":2021,"title":1718,"notes":2094},[1728,1731],{"01_jevbench.svg":2096,"02_applications.svg":2097,"03_multilingual.svg":2098,"04_vision.svg":2099,"05_latency.svg":2100,"06_agreement.svg":2101,"chart-data.csv":2102,"overview.svg":2103},"b9ef1fd65c44bd3b216f2b583bcf00e3ae4b78e6d0bdf1a3dd19342e8dbfdfde","3f4e072de001da5c29af6895caaf59a86399e2dfc6d78bed23eb34cdc1d75034","efb052e46f2f0f1b050ab82ea0c2a5d22e12d6a83a8418d95ab1df0a6d9bcccd","4001f6d79b66283939deb0fdca09e39d899055187fd25495b5d2f2beefb883f7","4b515d7e439c6a87e069d088a86faf15746d8591d950116f4e9c7ede4154b7e1","a4cfa64f1b211bf15f3326f8e82a5ff656409b191a0cc96e7b0b363765ce7822","3e912fc30bc4ae0a39c55c2191c79459629582f720ca9410b44ec88df50c0b54","91dcae40936da68953638c6ffcdfca750f718b6883fed0affba376cad8da8349","\u002Fdocs\u002Ffigures\u002Fmanifest",{},"docs\u002Ffigures\u002Fmanifest","NiPVmPvOV1-Kuviyv02kzss-SxntMHv8gby8KXedPB4",{"id":2109,"title":30,"body":2110,"description":2901,"extension":158,"meta":2902,"navigation":160,"path":2903,"seo":2904,"stem":2905,"__hash__":2906},"content\u002Fdocs\u002Finference.md",{"type":9,"value":2111,"toc":2895},[2112,2115,2125,2173,2188,2192,2195,2202,2220,2223,2241,2245,2248,2358,2361,2432,2458,2472,2476,2483,2522,2525,2529,2556,2662,2695,2698,2722,2725,2865,2892],[12,2113,30],{"id":2114},"installation-and-inference",[129,2116,2117,2118,2121,2122,2124],{},"The Linnaeus runtime uses Python 3.12 and PyTorch 2.9.1 with CUDA 12.8 on an\nNVIDIA GPU (Ampere or newer for BF16). Upstream measured ROCm 6.4 on an\nAMD Radeon RX 7900 XTX; this release was trained on a single RTX 4090 24GB (OpenBayes). Install ",[27,2119,1254],{"href":1286,"rel":2120},[189]," (it provisions\nPython 3.12 and uv from ",[177,2123,1291],{},"), then install from source:",[200,2126,2128],{"className":202,"code":2127,"language":204,"meta":151,"style":151},"git clone \u003Clinnaeus-remote>\ncd Linnaeus\nmise install\nuv sync\n",[177,2129,2130,2152,2160,2166],{"__ignoreMap":151},[208,2131,2132,2135,2138,2142,2145,2149],{"class":210,"line":211},[208,2133,2134],{"class":214},"git",[208,2136,2137],{"class":218}," clone",[208,2139,2141],{"class":2140},"szBVR"," \u003C",[208,2143,2144],{"class":218},"linnaeus-remot",[208,2146,2148],{"class":2147},"sVt8B","e",[208,2150,2151],{"class":2140},">\n",[208,2153,2154,2157],{"class":210,"line":152},[208,2155,2156],{"class":222},"cd",[208,2158,2159],{"class":218}," Linnaeus\n",[208,2161,2162,2164],{"class":210,"line":153},[208,2163,1254],{"class":214},[208,2165,1320],{"class":218},[208,2167,2168,2170],{"class":210,"line":251},[208,2169,215],{"class":214},[208,2171,2172],{"class":218}," sync\n",[129,2174,2175,2176,2178,2179,2181,2182,2184,2185,2187],{},"The lock file targets Python 3.12 on Linux (",[177,2177,1307],{},"). The\n",[177,2180,1393],{}," entries in ",[177,2183,1381],{}," bind PyTorch and torchvision to\nthe explicit CUDA 12.8 index; Triton resolves from PyPI.\nSee ",[27,2186,142],{"href":142}," for dependency groups, checks, and updating\nthe lock.",[16,2189,2191],{"id":2190},"load-a-checkpoint","Load a checkpoint",[129,2193,2194],{},"Load the model by its Hugging Face repository ID. The loader downloads the\ndecision weights and the exact Qwen3.5-2B revision recorded in the checkpoint.\nDownloads use the Hugging Face cache and are reused by later calls. Both\nrepositories are public; downloading them does not require a Hugging Face login.",[129,2196,2197,2198,2201],{},"Run Python examples with ",[177,2199,2200],{},"uv run python"," from the repository root:",[200,2203,2205],{"className":229,"code":2204,"language":231,"meta":151,"style":151},"from linnaeus.predictor import Predictor\n\nmodel = Predictor.from_checkpoint(\"pi-dal\u002FLinnaeus-0.1.0-2B\")\n",[177,2206,2207,2211,2215],{"__ignoreMap":151},[208,2208,2209],{"class":210,"line":211},[208,2210,254],{},[208,2212,2213],{"class":210,"line":152},[208,2214,243],{"emptyLinePlaceholder":160},[208,2216,2217],{"class":210,"line":153},[208,2218,2219],{},"model = Predictor.from_checkpoint(\"pi-dal\u002FLinnaeus-0.1.0-2B\")\n",[129,2221,2222],{},"The loader verifies the checkpoint's weight checksum and base revision, merges\nLoRA, and applies its saved calibration temperatures. The checkpoint contains\nthe decision head as well as LoRA; load it through Linnaeus. It is not a standalone\nTransformers language model or a standard PEFT adapter export.",[129,2224,2225,2226,2229,2230,2232,2233,2236,2237,2240],{},"The same method accepts a local checkpoint directory. An optional ",[177,2227,2228],{},"revision","\npins a Hub commit, and ",[177,2231,1150],{}," supplies an existing local base with its\nrecorded ",[177,2234,2235],{},"revision.txt",". ",[177,2238,2239],{},"model.metadata"," exposes the loaded model identity,\nweight checksum, and calibration. Weights are not bundled with the Python package.",[16,2242,2244],{"id":2243},"ask-questions","Ask questions",[129,2246,2247],{},"Pass a shared state and a mapping of question names to question definitions:",[200,2249,2251],{"className":229,"code":2250,"language":231,"meta":151,"style":151},"result = model.predict(\n    {\"message\": \"The replacement arrived, but it is broken too.\"},\n    {\n        \"route\": {\n            \"type\": \"choice\",\n            \"instructions\": \"Which team should handle this?\",\n            \"criteria\": {\"support\": \"Product issues\", \"billing\": \"Payment issues\"},\n        },\n        \"repeat_issue\": {\n            \"type\": \"noul\",\n            \"instructions\": \"Has the customer experienced this problem before?\",\n        },\n        \"urgency\": {\n            \"type\": \"score\",\n            \"instructions\": \"How urgently does this request need attention?\",\n            \"criteria\": [\"routine\", \"soon\", \"immediate\"],\n        },\n    },\n)\n\nanswers = result[\"answers\"]\n",[177,2252,2253,2258,2263,2268,2273,2278,2283,2288,2293,2298,2303,2308,2312,2317,2322,2327,2332,2336,2342,2347,2352],{"__ignoreMap":151},[208,2254,2255],{"class":210,"line":211},[208,2256,2257],{},"result = model.predict(\n",[208,2259,2260],{"class":210,"line":152},[208,2261,2262],{},"    {\"message\": \"The replacement arrived, but it is broken too.\"},\n",[208,2264,2265],{"class":210,"line":153},[208,2266,2267],{},"    {\n",[208,2269,2270],{"class":210,"line":251},[208,2271,2272],{},"        \"route\": {\n",[208,2274,2275],{"class":210,"line":257},[208,2276,2277],{},"            \"type\": \"choice\",\n",[208,2279,2280],{"class":210,"line":262},[208,2281,2282],{},"            \"instructions\": \"Which team should handle this?\",\n",[208,2284,2285],{"class":210,"line":268},[208,2286,2287],{},"            \"criteria\": {\"support\": \"Product issues\", \"billing\": \"Payment issues\"},\n",[208,2289,2290],{"class":210,"line":274},[208,2291,2292],{},"        },\n",[208,2294,2295],{"class":210,"line":280},[208,2296,2297],{},"        \"repeat_issue\": {\n",[208,2299,2300],{"class":210,"line":286},[208,2301,2302],{},"            \"type\": \"noul\",\n",[208,2304,2305],{"class":210,"line":291},[208,2306,2307],{},"            \"instructions\": \"Has the customer experienced this problem before?\",\n",[208,2309,2310],{"class":210,"line":296},[208,2311,2292],{},[208,2313,2314],{"class":210,"line":302},[208,2315,2316],{},"        \"urgency\": {\n",[208,2318,2319],{"class":210,"line":308},[208,2320,2321],{},"            \"type\": \"score\",\n",[208,2323,2324],{"class":210,"line":314},[208,2325,2326],{},"            \"instructions\": \"How urgently does this request need attention?\",\n",[208,2328,2329],{"class":210,"line":320},[208,2330,2331],{},"            \"criteria\": [\"routine\", \"soon\", \"immediate\"],\n",[208,2333,2334],{"class":210,"line":326},[208,2335,2292],{},[208,2337,2339],{"class":210,"line":2338},18,[208,2340,2341],{},"    },\n",[208,2343,2345],{"class":210,"line":2344},19,[208,2346,283],{},[208,2348,2350],{"class":210,"line":2349},20,[208,2351,243],{"emptyLinePlaceholder":160},[208,2353,2355],{"class":210,"line":2354},21,[208,2356,2357],{},"answers = result[\"answers\"]\n",[129,2359,2360],{},"Questions are independent: each sees the state and its own instructions and\ncandidates. A question cannot refer to another question's answer in the same call.",[565,2362,2363,2376],{},[568,2364,2365],{},[571,2366,2367,2370,2373],{},[574,2368,2369],{},"Type",[574,2371,2372],{},"Criteria",[574,2374,2375],{},"Answer fields",[584,2377,2378,2395,2415],{},[571,2379,2380,2384,2387],{},[589,2381,2382],{},[177,2383,601],{},[589,2385,2386],{},"Candidate list, or label-to-description mapping",[589,2388,2389,144,2391,2394],{},[177,2390,601],{},[177,2392,2393],{},"probabilities",", keyed by candidate label",[571,2396,2397,2401,2410],{},[589,2398,2399],{},[177,2400,619],{},[589,2402,2403,2404,144,2407],{},"Optional descriptions under ",[177,2405,2406],{},"false",[177,2408,2409],{},"true",[589,2411,2412,2414],{},[177,2413,619],{},", the estimated probability that the statement is true",[571,2416,2417,2421,2424],{},[589,2418,2419],{},[177,2420,642],{},[589,2422,2423],{},"Level descriptions in ascending order",[589,2425,2426,2428,2429,2431],{},[177,2427,642],{},", the expected zero-based level, and ",[177,2430,2393],{},", keyed by level index",[129,2433,2434,2435,144,2438,2441,2442,144,2444,2446,2447,2450,2451,2453,2454,2457],{},"Each answer also includes ",[177,2436,2437],{},"type",[177,2439,2440],{},"confidence",". For ",[177,2443,601],{},[177,2445,642],{},",\nconfidence is normalized inverse entropy, ",[177,2448,2449],{},"1 - H(p) \u002F log(K)","; for ",[177,2452,619],{},", it is\n",[177,2455,2456],{},"max(p, 1 - p)",". This describes how concentrated the distribution is. It is not\nan empirical probability that the decision is correct.",[129,2459,2460,2461,144,2464,2467,2468,2471],{},"The response includes ",[177,2462,2463],{},"model",[177,2465,2466],{},"usage"," alongside ",[177,2469,2470],{},"answers",". Usage records\ninput tokens and image count.",[16,2473,2475],{"id":2474},"include-an-image","Include an image",[129,2477,2478,2479,2482],{},"Supply one decoded PIL image under the state's ",[177,2480,2481],{},"image"," key:",[200,2484,2486],{"className":229,"code":2485,"language":231,"meta":151,"style":151},"from PIL import Image\n\nwith Image.open(\"parcel.jpg\") as image:\n    result = model.predict(\n        {\"image\": image.convert(\"RGB\")},\n        {\"damage\": {\"type\": \"noul\", \"instructions\": \"Is the packaging damaged?\"}},\n    )\n",[177,2487,2488,2493,2497,2502,2507,2512,2517],{"__ignoreMap":151},[208,2489,2490],{"class":210,"line":211},[208,2491,2492],{},"from PIL import Image\n",[208,2494,2495],{"class":210,"line":152},[208,2496,243],{"emptyLinePlaceholder":160},[208,2498,2499],{"class":210,"line":153},[208,2500,2501],{},"with Image.open(\"parcel.jpg\") as image:\n",[208,2503,2504],{"class":210,"line":251},[208,2505,2506],{},"    result = model.predict(\n",[208,2508,2509],{"class":210,"line":257},[208,2510,2511],{},"        {\"image\": image.convert(\"RGB\")},\n",[208,2513,2514],{"class":210,"line":262},[208,2515,2516],{},"        {\"damage\": {\"type\": \"noul\", \"instructions\": \"Is the packaging damaged?\"}},\n",[208,2518,2519],{"class":210,"line":268},[208,2520,2521],{},"    )\n",[129,2523,2524],{},"Each question supports 2–128 candidates and a 4,096-token input budget,\nincluding state, instructions, candidates, and image tokens. Inputs that exceed\nthe budget are rejected; shorten the state or candidate descriptions and retry.\nImage features and the shared input prefix are reused where possible. More\nquestions still require more computation.",[16,2526,2528],{"id":2527},"apple-silicon-mlx-on-device","Apple Silicon (MLX \u002F on-device)",[129,2530,2531,2532,2537,2538,2543,2544,2547,2548,2551,2552,2555],{},"The published MLX builds run the model natively on macOS and iOS via\n",[27,2533,2536],{"href":2534,"rel":2535},"https:\u002F\u002Fgithub.com\u002Fml-explore\u002Fmlx-lm",[189],"mlx-lm"," \u002F\n",[27,2539,2542],{"href":2540,"rel":2541},"https:\u002F\u002Fgithub.com\u002Fml-explore\u002Fmlx-swift-lm",[189],"mlx-swift-lm",".\nThe ",[177,2545,2546],{},"-MLX-*"," builds are text-only; the ",[177,2549,2550],{},"-MLX-VLM-*"," builds (converted via\nmlx-vlm) also keep the vision tower for ",[177,2553,2554],{},"state['image']"," decisions:",[565,2557,2558,2574],{},[568,2559,2560],{},[571,2561,2562,2565,2568,2571],{},[574,2563,2564],{},"Artifact",[574,2566,2567],{},"Size",[574,2569,2570],{},"JevBench v1.2.2 (231 tasks)",[574,2572,2573],{},"Use",[584,2575,2576,2592,2608,2624,2644],{},[571,2577,2578,2583,2586,2589],{},[589,2579,2580],{},[177,2581,2582],{},"pi-dal\u002FLinnaeus-0.1.0-2B-merged",[589,2584,2585],{},"4.3 GB",[589,2587,2588],{},"71.0% (torch MPS)",[589,2590,2591],{},"Mac dev, conversion source",[571,2593,2594,2599,2602,2605],{},[589,2595,2596],{},[177,2597,2598],{},"pi-dal\u002FLinnaeus-0.1.0-2B-MLX-8bit",[589,2600,2601],{},"1.9 GB",[589,2603,2604],{},"70.56%",[589,2606,2607],{},"Mac \u002F iPhone, text quality pick",[571,2609,2610,2615,2618,2621],{},[589,2611,2612],{},[177,2613,2614],{},"pi-dal\u002FLinnaeus-0.1.0-2B-MLX-4bit",[589,2616,2617],{},"1.0 GB",[589,2619,2620],{},"67.53%",[589,2622,2623],{},"iPhone, text size pick",[571,2625,2626,2631,2634,2641],{},[589,2627,2628],{},[177,2629,2630],{},"pi-dal\u002FLinnaeus-0.1.0-2B-MLX-VLM-8bit",[589,2632,2633],{},"2.5 GB",[589,2635,2636,2637],{},"70.56% text + ",[2638,2639,2640],"strong",{},"images",[589,2642,2643],{},"Mac \u002F iPhone multimodal",[571,2645,2646,2651,2654,2659],{},[589,2647,2648],{},[177,2649,2650],{},"pi-dal\u002FLinnaeus-0.1.0-2B-MLX-VLM-4bit",[589,2652,2653],{},"1.6 GB",[589,2655,2656,2657],{},"~67% text + ",[2638,2658,2640],{},[589,2660,2661],{},"iPhone multimodal, size pick",[129,2663,2664,2665,2668,2669,2672,2673,144,2676,2679,2680,2683,2684,2687,2688,2690,2691,2694],{},"The VLM builds are converted with ",[177,2666,2667],{},"mlx-vlm convert"," (vision tower stays\nbf16; only the language stack is quantized). A post-conversion step must\nwrite ",[2638,2670,2671],{},"both"," ",[177,2674,2675],{},"quantization",[177,2677,2678],{},"quantization_config"," into ",[177,2681,2682],{},"config.json","\n({\"group_size\": 64, \"bits\": N, \"mode\": \"affine\"}) — mlx-vlm 0.7.1 omits\nthem, ",[177,2685,2686],{},"load_weights"," then rejects the quantized tensors, and Hugging Face\nmisclassifies the repo as a finetune instead of a quantization. Pass a\ndecoded PIL image via ",[177,2689,2554],{}," to the same ",[177,2692,2693],{},"MlxPredictor.predict()","\ncontract.",[129,2696,2697],{},"CUDA reference on the same tasks is 73.16%; the residual gap is the fla\nchunked delta-rule kernel vs. reference implementations, concentrated on\nhard-tier borderline tasks (easy\u002Fstandard are identical). Upstream's\npublished result on the same benchmark is 65.80%.",[200,2699,2701],{"className":229,"code":2700,"language":231,"meta":151,"style":151},"from linnaeus.mlx_predictor import MlxPredictor\n\npredictor = MlxPredictor(\"runs\u002F2b\u002Fexports\u002Flinnaeus-2b-8bit\")\nresult = predictor.predict(state, questions)  # same contract as Predictor\n",[177,2702,2703,2708,2712,2717],{"__ignoreMap":151},[208,2704,2705],{"class":210,"line":211},[208,2706,2707],{},"from linnaeus.mlx_predictor import MlxPredictor\n",[208,2709,2710],{"class":210,"line":152},[208,2711,243],{"emptyLinePlaceholder":160},[208,2713,2714],{"class":210,"line":153},[208,2715,2716],{},"predictor = MlxPredictor(\"runs\u002F2b\u002Fexports\u002Flinnaeus-2b-8bit\")\n",[208,2718,2719],{"class":210,"line":251},[208,2720,2721],{},"result = predictor.predict(state, questions)  # same contract as Predictor\n",[129,2723,2724],{},"To reproduce the exports:",[200,2726,2728],{"className":202,"code":2727,"language":204,"meta":151,"style":151},"python scripts\u002Fexport_merged_hf.py --base \u003CQwen3.5-2B snapshot> \\\n    --adapter runs\u002F2b\u002Fcheckpoint --out runs\u002F2b\u002Fexports\u002Fmerged-hf\n# text-only build\nuvx --from mlx-lm python -m mlx_lm convert \\\n    --hf-path runs\u002F2b\u002Fexports\u002Fmerged-hf \\\n    --mlx-path runs\u002F2b\u002Fexports\u002Flinnaeus-2b-8bit -q --q-bits 8\n# multimodal build (keeps vision tower)\npython -m mlx_vlm convert --hf-path runs\u002F2b\u002Fexports\u002Fmerged-hf \\\n    --mlx-path runs\u002F2b\u002Fexports\u002Flinnaeus-2b-vlm-8bit --quantize --q-bits 8\n",[177,2729,2730,2757,2771,2777,2801,2811,2828,2833,2851],{"__ignoreMap":151},[208,2731,2732,2734,2737,2740,2742,2745,2748,2751,2754],{"class":210,"line":211},[208,2733,231],{"class":214},[208,2735,2736],{"class":218}," scripts\u002Fexport_merged_hf.py",[208,2738,2739],{"class":222}," --base",[208,2741,2141],{"class":2140},[208,2743,2744],{"class":218},"Qwen3.5-2B",[208,2746,2747],{"class":218}," snapsho",[208,2749,2750],{"class":2147},"t",[208,2752,2753],{"class":2140},">",[208,2755,2756],{"class":222}," \\\n",[208,2758,2759,2762,2765,2768],{"class":210,"line":152},[208,2760,2761],{"class":222},"    --adapter",[208,2763,2764],{"class":218}," runs\u002F2b\u002Fcheckpoint",[208,2766,2767],{"class":222}," --out",[208,2769,2770],{"class":218}," runs\u002F2b\u002Fexports\u002Fmerged-hf\n",[208,2772,2773],{"class":210,"line":153},[208,2774,2776],{"class":2775},"sJ8bj","# text-only build\n",[208,2778,2779,2782,2785,2788,2790,2793,2796,2799],{"class":210,"line":251},[208,2780,2781],{"class":214},"uvx",[208,2783,2784],{"class":222}," --from",[208,2786,2787],{"class":218}," mlx-lm",[208,2789,509],{"class":218},[208,2791,2792],{"class":222}," -m",[208,2794,2795],{"class":218}," mlx_lm",[208,2797,2798],{"class":218}," convert",[208,2800,2756],{"class":222},[208,2802,2803,2806,2809],{"class":210,"line":257},[208,2804,2805],{"class":222},"    --hf-path",[208,2807,2808],{"class":218}," runs\u002F2b\u002Fexports\u002Fmerged-hf",[208,2810,2756],{"class":222},[208,2812,2813,2816,2819,2822,2825],{"class":210,"line":262},[208,2814,2815],{"class":222},"    --mlx-path",[208,2817,2818],{"class":218}," runs\u002F2b\u002Fexports\u002Flinnaeus-2b-8bit",[208,2820,2821],{"class":222}," -q",[208,2823,2824],{"class":222}," --q-bits",[208,2826,2827],{"class":222}," 8\n",[208,2829,2830],{"class":210,"line":268},[208,2831,2832],{"class":2775},"# multimodal build (keeps vision tower)\n",[208,2834,2835,2837,2839,2842,2844,2847,2849],{"class":210,"line":274},[208,2836,231],{"class":214},[208,2838,2792],{"class":222},[208,2840,2841],{"class":218}," mlx_vlm",[208,2843,2798],{"class":218},[208,2845,2846],{"class":222}," --hf-path",[208,2848,2808],{"class":218},[208,2850,2756],{"class":222},[208,2852,2853,2855,2858,2861,2863],{"class":210,"line":280},[208,2854,2815],{"class":222},[208,2856,2857],{"class":218}," runs\u002F2b\u002Fexports\u002Flinnaeus-2b-vlm-8bit",[208,2859,2860],{"class":222}," --quantize",[208,2862,2824],{"class":222},[208,2864,2827],{"class":222},[129,2866,2867,2868,2871,2872,2875,2876,2879,2880,2883,2884,2887,2888,2891],{},"The merged checkpoint embeds the scalar decision head as an extra\n",[177,2869,2870],{},"embed_tokens","\u002F",[177,2873,2874],{},"lm_head"," row (",[177,2877,2878],{},"score_row_id","), so a stock LM forward is all a\nruntime needs: read ",[177,2881,2882],{},"logits[marker_pos, score_row_id]"," at each\n",[177,2885,2886],{},"\u003C|fim_suffix|>"," marker, apply the per-type temperature, softmax across a\nquestion's candidates. ",[177,2889,2890],{},"linnaeus-runtime.json"," carries that contract to\nnon-Python runtimes (e.g. a ~100-line Swift shim for iOS).",[356,2893,2894],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":151,"searchDepth":152,"depth":153,"links":2896},[2897,2898,2899,2900],{"id":2190,"depth":152,"text":2191},{"id":2243,"depth":152,"text":2244},{"id":2474,"depth":152,"text":2475},{"id":2527,"depth":152,"text":2528},"The Linnaeus runtime uses Python 3.12 and PyTorch 2.9.1 with CUDA 12.8 on an\nNVIDIA GPU (Ampere or newer for BF16). Upstream measured ROCm 6.4 on an\nAMD Radeon RX 7900 XTX; this release was trained on a single RTX 4090 24GB (OpenBayes). Install mise (it provisions\nPython 3.12 and uv from mise.toml), then install from source:",{},"\u002Fdocs\u002Finference",{"title":30,"description":2901},"docs\u002Finference","Q90SqgxlntRfDW4iquz51ASITbTymXTu-WBfsAQUDjM",{"id":2908,"title":2909,"body":2910,"description":3153,"extension":158,"meta":3154,"navigation":160,"path":3155,"seo":3156,"stem":3157,"__hash__":3158},"content\u002Fdocs\u002Fjevbench-submission.md","JevBench submission preregistration — Linnaeus-0.1.0-2B",{"type":9,"value":2911,"toc":3145},[2912,2915,2922,2926,2995,2999,3012,3047,3053,3057,3090,3094,3104,3108,3122,3126],[12,2913,2909],{"id":2914},"jevbench-submission-preregistration-linnaeus-010-2b",[129,2916,2917,2918,2921],{},"Everything in this document is committed before the benchmark run, matching\nthe operator's preregistration convention (",[177,2919,2920],{},"docs\u002Fv1.2-additions-*.md"," in\nfstandhartinger\u002Fjevbench).",[16,2923,2925],{"id":2924},"system","System",[21,2927,2928,2934,2955,2968,2986],{},[24,2929,2930,2933],{},[2638,2931,2932],{},"Name for the board:"," Linnaeus-0.1.0-2B",[24,2935,2936,2672,2939,2946,2947,2950,2951,2954],{},[2638,2937,2938],{},"Weights:",[27,2940,2943],{"href":2941,"rel":2942},"https:\u002F\u002Fhuggingface.co\u002Fpi-dal\u002FLinnaeus-0.1.0-2B",[189],[177,2944,2945],{},"pi-dal\u002FLinnaeus-0.1.0-2B"," —\nApache-2.0, rank-8 LoRA adapter + shared candidate-scorer head\n(",[177,2948,2949],{},"adapter.safetensors"," + ",[177,2952,2953],{},"linnaeus.json",")",[24,2956,2957,2672,2960,2963,2964,2967],{},[2638,2958,2959],{},"Base:",[177,2961,2962],{},"Qwen\u002FQwen3.5-2B"," revision ",[177,2965,2966],{},"15852e8c16360a2fea060d615a32b45270f8a8fc"," (Apache-2.0)",[24,2969,2970,2973,2974,2977,2978,2981,2982,2985],{},[2638,2971,2972],{},"Server:"," this repository, ",[177,2975,2976],{},"linnaeus-serve"," (",[177,2979,2980],{},"src\u002Flinnaeus\u002Fserver.py",") —\na thin FastAPI wrapper over ",[177,2983,2984],{},"linnaeus.predictor.Predictor",", the same\nclass used for our published measurements",[24,2987,2988,2991,2992,2954],{},[2638,2989,2990],{},"Code licence:"," Apache-2.0 (",[177,2993,2994],{},"pi-dal\u002FLinnaeus",[16,2996,2998],{"id":2997},"requestresponse-contract","Request\u002Fresponse contract",[129,3000,3001,3004,3005,3008,3009,149],{},[177,3002,3003],{},"POST \u002Fv1\u002Fsystemone"," with ",[177,3006,3007],{},"{\"state\", \"model\", \"questions\": {\"decision\": {...}}}","\nreturns ",[177,3010,3011],{},"{\"answers\": {\"decision\": {...}}, \"usage\": {\"input_tokens\": n, \"images\": 0}, \"model\": \"Linnaeus-0.1.0-2B\"}",[21,3013,3014,3025,3037],{},[24,3015,3016,3018,3019,3022,3023,2954],{},[177,3017,601],{}," → ",[177,3020,3021],{},"answers.decision.probabilities"," keyed by option label (+ ",[177,3024,601],{},[24,3026,3027,3018,3029,3032,3033,3036],{},[177,3028,619],{},[177,3030,3031],{},"answers.decision.noul"," = P(yes); probabilities ",[177,3034,3035],{},"{\"yes\",\"no\"}"," also present",[24,3038,3039,3018,3041,3043,3044,3046],{},[177,3040,642],{},[177,3042,3021],{}," keyed by level index (+ ",[177,3045,642],{}," expected value)",[129,3048,3049,3050,3052],{},"State, instructions and criteria pass through unchanged. One calibrated\ntemperature per question type (choice 1.6947, noul 2.9416, score 4.8547 —\nfitted on an independent calibration partition, recorded in ",[177,3051,2953],{},").",[16,3054,3056],{"id":3055},"endpoint-conditions-what-we-ask-the-operator-to-run","Endpoint conditions (what we ask the operator to run)",[21,3058,3059,3068,3071,3074,3083],{},[24,3060,3061,3062,3064,3065],{},"The author's server (",[177,3063,2976],{},", commit noted at run time) on the\noperator's GPU; ",[2638,3066,3067],{},"batch size 1, serial requests, maximum input 4,096 tokens",[24,3069,3070],{},"Inputs exceeding 4,096 tokens return HTTP 422 — a refusal counted as wrong,\nconsistent with the standing rule; nothing is truncated",[24,3072,3073],{},"Requests with images are not part of the frozen set; the endpoint rejects\nthem with 422 rather than guessing",[24,3075,3076,3077,3079,3080,3082],{},"LoRA merged at load (score head is a fused vocabulary row — logits index\n",[177,3078,2878],{}," at each ",[177,3081,2886],{}," marker position)",[24,3084,3085,3086,3089],{},"Prefix caching across requests: ",[2638,3087,3088],{},"off"," (each decision is a fresh forward;\nour shared-prefix path only deduplicates within a multi-question request)",[16,3091,3093],{"id":3092},"cost-basis","Cost basis",[129,3095,3096,3097,3100,3101,3103],{},"Self-hosted open weights: no per-token tariff exists. Like other\nlocal-weight rows we suggest ",[177,3098,3099],{},"cost = null"," (unmetered; not free) or, if a\nhosted-reference estimate is preferred, the OpenRouter ",[177,3102,2744],{},"-class\ninput tariff (the 9B-class tariff used for Open-Jev-2B is the conservative\nfallback). The model emits no output tokens.",[16,3105,3107],{"id":3106},"training-data-overlap-statement","Training-data overlap statement",[129,3109,3110,3111,3113,3114,3117,3118,3121],{},"Linnaeus-0.1.0-2B trains exclusively on the upstream Dohnuts recipe's frozen\ntrain split (",[177,3112,1025],{},", source hashes recorded in\n",[177,3115,3116],{},"runs\u002F2b\u002Frecipe.json"," and the checkpoint manifest): MultiXI\u002FBespoke-style\ntyped-decision rows, VQAv2, typed-decisions — ",[2638,3119,3120],{},"no JevBench items are in the\ntraining or calibration partitions",". The checkpoint predates any contact\nwith the benchmark's sealed items: we ran only the 231-item public set.\nWe welcome the operator's normalized exact-match audit against our published\ndata projection.",[16,3123,3125],{"id":3124},"published-self-measurement-public-items-only","Published self-measurement (public items only)",[21,3127,3128,3139,3142],{},[24,3129,3130,3131,3134,3135,3138],{},"JevBench v1.2.2 public set (231 tasks): ",[2638,3132,3133],{},"73.16%"," overall —\neasy 100%, standard ~82%, hard 49.6% (per-family record in\n",[177,3136,3137],{},"runs\u002F2b\u002Fjevbench\u002Fresults.jsonl",", versioned in this repo)",[24,3140,3141],{},"Held-out development selection: seed 42, update 2,800 of 3,600\n(max dev macro accuracy; test labels never selected)",[24,3143,3144],{},"Serial, no retries, native distributions — identical to the recorded run",{"title":151,"searchDepth":152,"depth":153,"links":3146},[3147,3148,3149,3150,3151,3152],{"id":2924,"depth":152,"text":2925},{"id":2997,"depth":152,"text":2998},{"id":3055,"depth":152,"text":3056},{"id":3092,"depth":152,"text":3093},{"id":3106,"depth":152,"text":3107},{"id":3124,"depth":152,"text":3125},"Everything in this document is committed before the benchmark run, matching\nthe operator's preregistration convention (docs\u002Fv1.2-additions-*.md in\nfstandhartinger\u002Fjevbench).",{},"\u002Fdocs\u002Fjevbench-submission",{"title":2909,"description":3153},"docs\u002Fjevbench-submission","q0QO4jdlYi0BEKZjlx6d3meH0simHfierfGWVElvxmI",{"id":3160,"title":3161,"body":3162,"description":3169,"extension":158,"meta":3412,"navigation":160,"path":3413,"seo":3414,"stem":3415,"__hash__":3416},"content\u002Fdocs\u002Flocal-benchmarks.md","Latency and resource measurement",{"type":9,"value":3163,"toc":3407},[3164,3167,3170,3173,3179,3182,3193,3197,3210,3226,3233,3243,3247,3254,3329,3332,3339,3342,3345,3349,3355,3358,3361,3398,3404],[12,3165,3161],{"id":3166},"latency-and-resource-measurement",[129,3168,3169],{},"The benchmark runs the actual exported, merged checkpoint and the pinned Laya multilingual\nand Laya Vision checkpoints on one RX 7900 XTX (upstream) or the recorded\nRTX 4090 run (Linnaeus). Each engine receives\nthe same state and questions. Tokenizers, model sizes, and internal templates\ndiffer; this is an API workload comparison.",[129,3171,3172],{},"The local protocol uses BF16, eight CPU threads, three warm-up calls, and\n20 synchronized repetitions. End-to-end timing includes preprocessing, transfers,\nGPU execution, and response assembly. It excludes network and request queues.\nReport median, linearly interpolated p95, raw durations, decisions per second,\nand amortized latency per decision.",[129,3174,3175,3178],{},[177,3176,3177],{},"scripts\u002Fbenchmark.py"," uses one fixed suite: Laya Vision's one\u002Fthree-question\ntext and image cases, plus 1, 5, 10 and 50 distinct questions over a shared\nsupport state. Each reference uses its checkpoint's published preprocessing.",[129,3180,3181],{},"PyTorch allocated, reserved, and peak memory are recorded separately from board\nVRAM. Board VRAM includes the runtime and desktop. Power, utilization, temperature,\nand process RSS accompany timing samples. Shared-prefix execution does not imply\nconstant latency as batch size grows or predict performance under queued load.",[129,3183,3184,3185,3188,3189,3192],{},"The release workflow writes timing samples to ",[177,3186,3187],{},"runs\u002Fv1\u002Fbenchmarks\u002F"," and\nplotting data to ",[177,3190,3191],{},"runs\u002Fv1\u002Fmetrics\u002Flatency-samples.csv",". Quality, resource use,\nand latency are reported separately. Weight-preserving changes still require\nheld-out quality checks because BF16 arithmetic need not be bitwise identical.",[16,3194,3196],{"id":3195},"jevbench","JevBench",[129,3198,3199,3200,3205,3206,3209],{},"The release workflow also evaluates the exported checkpoint with the official\n",[27,3201,3204],{"href":3202,"rel":3203},"https:\u002F\u002Fgithub.com\u002Ffstandhartinger\u002Fjevbench\u002Ftree\u002Fv1.2.2",[189],"JevBench v1.2.2 harness",",\npinned at ",[177,3207,3208],{},"e105a48f8cdb7f3babb3594424f73e5d7bdc97b9",". Its public tasks contain\n48 easy, 72 standard, and 111 hard decisions. The other 303 decisions in the\n534-item leaderboard are not distributed, including the entire judge tier.",[200,3211,3213],{"className":202,"code":3212,"language":204,"meta":151,"style":151},"uv run python scripts\u002Frun_jevbench.py\n",[177,3214,3215],{"__ignoreMap":151},[208,3216,3217,3219,3221,3223],{"class":210,"line":211},[208,3218,215],{"class":214},[208,3220,506],{"class":218},[208,3222,509],{"class":218},[208,3224,3225],{"class":218}," scripts\u002Frun_jevbench.py\n",[129,3227,3228,3229,3232],{},"Each task receives one serial ",[177,3230,3231],{},"Predictor.predict"," call with its original state,\ninstructions, criteria, and candidate order. Returned probabilities are native\nmodel distributions. The official runner stores requests, responses, failures,\nlatencies, and scores. Model loading is timed separately; the first decision is\nretained and reported. The adapter's 4,096-token inference limit applies: rejected inputs\ncount as wrong and are not silently truncated or removed from the denominator.\nThe benchmark never changes weights, temperatures, or the training recipe.",[129,3234,3235,3238,3239,3242],{},[177,3236,3237],{},"runs\u002Fv1\u002Fjevbench\u002F"," contains raw evidence, a JSON summary, a Markdown report,\nand ",[177,3240,3241],{},"same-public-ids.csv",". Reference accuracy is recomputed from upstream's\npublished outcomes on the same 231 IDs. The report distinguishes this partial\nevaluation from the full leaderboard. It records raw local latency and the\nupstream assumed latency adjustment separately. Local execution has no provider\ntariff, so cost and the four-axis composite remain unmeasured.",[16,3244,3246],{"id":3245},"laya-comparison-chart-protocols","Laya comparison-chart protocols",[129,3248,3249,3250,3253],{},"The official Laya research branch at ",[177,3251,3252],{},"28d43add7e47ce502489c9433310d55276c64e0f","\ncontains the builders for the application, multilingual, calibration, and latency\nmeasurements in its comparison chart. Run them on the exported Linnaeus checkpoint:",[200,3255,3257],{"className":202,"code":3256,"language":204,"meta":151,"style":151},"git clone --branch research https:\u002F\u002Fgithub.com\u002FNandhaKishorM\u002Flaya.git .cache\u002Fupstream\u002Flaya-research\ngit -C .cache\u002Fupstream\u002Flaya-research checkout --detach 28d43add7e47ce502489c9433310d55276c64e0f\nuv sync --extra train\nuv run python scripts\u002Fprepare_laya_benchmark.py\nuv run python scripts\u002Frun_laya_benchmark.py\n",[177,3258,3259,3277,3296,3307,3318],{"__ignoreMap":151},[208,3260,3261,3263,3265,3268,3271,3274],{"class":210,"line":211},[208,3262,2134],{"class":214},[208,3264,2137],{"class":218},[208,3266,3267],{"class":222}," --branch",[208,3269,3270],{"class":218}," research",[208,3272,3273],{"class":218}," https:\u002F\u002Fgithub.com\u002FNandhaKishorM\u002Flaya.git",[208,3275,3276],{"class":218}," .cache\u002Fupstream\u002Flaya-research\n",[208,3278,3279,3281,3284,3287,3290,3293],{"class":210,"line":152},[208,3280,2134],{"class":214},[208,3282,3283],{"class":222}," -C",[208,3285,3286],{"class":218}," .cache\u002Fupstream\u002Flaya-research",[208,3288,3289],{"class":218}," checkout",[208,3291,3292],{"class":222}," --detach",[208,3294,3295],{"class":218}," 28d43add7e47ce502489c9433310d55276c64e0f\n",[208,3297,3298,3300,3302,3304],{"class":210,"line":153},[208,3299,215],{"class":214},[208,3301,219],{"class":218},[208,3303,223],{"class":222},[208,3305,3306],{"class":218}," train\n",[208,3308,3309,3311,3313,3315],{"class":210,"line":251},[208,3310,215],{"class":214},[208,3312,506],{"class":218},[208,3314,509],{"class":218},[208,3316,3317],{"class":218}," scripts\u002Fprepare_laya_benchmark.py\n",[208,3319,3320,3322,3324,3326],{"class":210,"line":257},[208,3321,215],{"class":214},[208,3323,506],{"class":218},[208,3325,509],{"class":218},[208,3327,3328],{"class":218}," scripts\u002Frun_laya_benchmark.py\n",[129,3330,3331],{},"Preparation preserves the upstream builders, seed 13, candidate order, and\ndocument shortening, and records dataset revisions and file hashes. It requires\nall ten application suites, all fifty Colab suites, and all 51 MASSIVE languages\nto load successfully. The fixed questions are stored before model evaluation.",[129,3333,3334,3335,3338],{},"Results live in ",[177,3336,3337],{},"runs\u002Fv1\u002Flaya-chart\u002F",": raw logits and probabilities,\nper-suite CSV, all language scores, calibration diagnostics, option permutations,\nand end-to-end timing samples. Temperature refitting follows the upstream\nper-suite first-half\u002Fsecond-half protocol and never updates deployment temperatures.\nThe 51-language sweep uses 100 cases per language and 20 candidates; the Colab\nlanguage suites use 300 cases per language. These differ from the main mixture's\nfull-label-space evaluation.",[129,3340,3341],{},"Published Laya reference columns are historical measurements, not newly run\ncheckpoints. Their original dataset revisions and per-example hashes are absent,\nso reproducing the builders does not independently establish historical byte\nidentity. Calibration comparisons use the shared 49 suites because the upstream\nresult omits BANKING77. Typed-decisions soft accuracy is the inner product of\npredicted and teacher distributions, following this benchmark's definition.",[129,3343,3344],{},"Local latency used the RX 7900 XTX upstream; Linnaeus measurements ran on the RTX 4090. Mixed-language measurements\nuse the upstream English\u002FHindi request stream and one resident Linnaeus model; no\ncheckpoint routing or swapping is added. Local inference has a compute cost even\nwhen no API fee is paid.",[16,3346,3348],{"id":3347},"model-card-figures","Model card figures",[129,3350,131,3351,3354],{},[27,3352,3353],{"href":70},"comparison gallery"," contains the selected model's figures\nand chart values. To regenerate them, use the saved evaluation results below.",[129,3356,3357],{},"Use the saved results to render six comparisons: JevBench accuracy, application\naccuracy, multilingual accuracy, vision accuracy and calibration, local latency,\nand paired JevBench outcomes. The reference checkpoints are Laya multilingual\nand Laya Vision. The English Laya entry in JevBench's published results is a\ndifferent checkpoint and must not be relabeled as Laya multilingual.",[129,3359,3360],{},"Install the locked plotting group, then render the completed run. This group\ndoes not require model dependencies:",[200,3362,3364],{"className":202,"code":3363,"language":204,"meta":151,"style":151},"uv sync --no-default-groups --group plot --no-install-project\nuv run python scripts\u002Fplot_model_card.py --run runs\u002Fv1\n",[177,3365,3366,3384],{"__ignoreMap":151},[208,3367,3368,3370,3372,3375,3378,3381],{"class":210,"line":211},[208,3369,215],{"class":214},[208,3371,219],{"class":218},[208,3373,3374],{"class":222}," --no-default-groups",[208,3376,3377],{"class":222}," --group",[208,3379,3380],{"class":218}," plot",[208,3382,3383],{"class":222}," --no-install-project\n",[208,3385,3386,3388,3390,3392,3394,3396],{"class":210,"line":152},[208,3387,215],{"class":214},[208,3389,506],{"class":218},[208,3391,509],{"class":218},[208,3393,1760],{"class":218},[208,3395,1763],{"class":222},[208,3397,1766],{"class":218},[129,3399,3400,3403],{},[177,3401,3402],{},"runs\u002Fv1\u002Ffigures\u002FREADME.md"," indexes the PNG, SVG and PDF figures. The directory\nalso contains a combined PDF, chart values in CSV, and a manifest of source\nchecksums. Captions identify the selected checkpoint, dataset coverage,\nmeasurement conditions, and whether references were measured locally or taken\nfrom published results. Model identity and the shared project version come from the\nselected checkpoint metadata.",[356,3405,3406],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":151,"searchDepth":152,"depth":153,"links":3408},[3409,3410,3411],{"id":3195,"depth":152,"text":3196},{"id":3245,"depth":152,"text":3246},{"id":3347,"depth":152,"text":3348},{},"\u002Fdocs\u002Flocal-benchmarks",{"title":3161,"description":3169},"docs\u002Flocal-benchmarks","5TFHeqceSWGgJoOIt3YAGu-b_ce4HQPBqNErxOcWG3c",{"id":3418,"title":3419,"body":3420,"description":3427,"extension":158,"meta":3986,"navigation":160,"path":3987,"seo":3988,"stem":3989,"__hash__":3990},"content\u002Fdocs\u002Fopenbayes.md","Deploy on OpenBayes (NVIDIA)",{"type":9,"value":3421,"toc":3979},[3422,3425,3428,3432,3524,3555,3559,3565,3679,3699,3709,3713,3837,3853,3857,3870,3928,3932,3976],[12,3423,3419],{"id":3424},"deploy-on-openbayes-nvidia",[129,3426,3427],{},"Field notes from the Linnaeus-0.1.0-2B run on an OpenBayes RTX 4090 workspace.\nEvery trap below cost real GPU hours.",[16,3429,3431],{"id":3430},"storage-model","Storage model",[565,3433,3434,3449],{},[568,3435,3436],{},[571,3437,3438,3441,3443,3446],{},[574,3439,3440],{},"Path",[574,3442,2369],{},[574,3444,3445],{},"Survives restart",[574,3447,3448],{},"Notes",[584,3450,3451,3469,3488,3510],{},[571,3452,3453,3458,3461,3466],{},[589,3454,3455,3457],{},[177,3456,2871],{}," (overlay)",[589,3459,3460],{},"local NVMe, ~100 GB",[589,3462,3463],{},[2638,3464,3465],{},"no",[589,3467,3468],{},"fast; use for data + caches",[571,3470,3471,3479,3482,3485],{},[589,3472,3473,3018,3476],{},[177,3474,3475],{},"\u002Fopenbayes\u002Fhome",[177,3477,3478],{},"\u002Foutput",[589,3480,3481],{},"CephFS",[589,3483,3484],{},"yes",[589,3486,3487],{},"counts against the 50 GB account quota",[571,3489,3490,3495,3498,3500],{},[589,3491,3492],{},[177,3493,3494],{},"\u002Fopenbayes\u002Finput\u002FinputN",[589,3496,3497],{},"dataset mount",[589,3499,3484],{},[589,3501,3502,3505,3506,3509],{},[177,3503,3504],{},"-d"," CLI bindings are ",[2638,3507,3508],{},"read-only","; rw is console-only",[571,3511,3512,3517,3519,3521],{},[589,3513,3514],{},[177,3515,3516],{},"HF_HOME=\u002Foutput\u002Fhuggingface",[589,3518,3481],{},[589,3520,3484],{},[589,3522,3523],{},"image default; HF downloads persist across restarts",[129,3525,3526,3527,637,3530,637,3533,3536,3537,3540,3541,2950,3544,3547,3548,3550,3551,3554],{},"Recommended layout: ",[177,3528,3529],{},"data\u002Fraw",[177,3531,3532],{},"data\u002Fprocessed",[177,3534,3535],{},".cache"," are symlinks to\n",[177,3538,3539],{},"\u002Froot\u002Fdh\u002F*"," on scratch; repo + ",[177,3542,3543],{},".venv",[177,3545,3546],{},"runs\u002F"," live on ",[177,3549,3475],{},".\nPeak scratch usage during ",[177,3552,3553],{},"prepare-data"," was ~68 GB.",[16,3556,3558],{"id":3557},"china-network-mirrors","China-network mirrors",[129,3560,3561,3564],{},[177,3562,3563],{},"huggingface.co"," is unreachable; several CDNs are throttled. Working matrix:",[565,3566,3567,3582],{},[568,3568,3569],{},[571,3570,3571,3573,3576,3579],{},[574,3572,576],{},[574,3574,3575],{},"Works",[574,3577,3578],{},"Speed",[574,3580,3581],{},"Fallback",[584,3583,3584,3597,3617,3636,3650,3664],{},[571,3585,3586,3589,3591,3594],{},[589,3587,3588],{},"hf-mirror datasets resolve",[589,3590,3484],{},[589,3592,3593],{},"~18 MB\u002Fs",[589,3595,3596],{},"—",[571,3598,3599,3602,3605,3608],{},[589,3600,3601],{},"hf-mirror model resolve",[589,3603,3604],{},"flaky",[589,3606,3607],{},"27 MB\u002Fs or stalls",[589,3609,3610,2672,3613,3616],{},[2638,3611,3612],{},"ModelScope",[177,3614,3615],{},"modelscope.cn\u002Fmodels\u002F{org}\u002F{name}\u002Fresolve\u002Fmaster\u002F{file}"," ~10–44 MB\u002Fs",[571,3618,3619,3625,3629,3631],{},[589,3620,3621,3622,2954],{},"xet CAS (",[177,3623,3624],{},"cas-server.xethub.hf.co",[589,3626,3627],{},[2638,3628,3465],{},[589,3630,3596],{},[589,3632,3633],{},[177,3634,3635],{},"HF_HUB_DISABLE_XET=1",[571,3637,3638,3641,3644,3647],{},[589,3639,3640],{},"storage.googleapis.com, media.githubusercontent.com",[589,3642,3643],{},"throttled",[589,3645,3646],{},"~18 KB\u002Fs",[589,3648,3649],{},"download via local proxy, rsync up",[571,3651,3652,3655,3659,3661],{},[589,3653,3654],{},"github.com",[589,3656,3657],{},[2638,3658,3465],{},[589,3660,3596],{},[589,3662,3663],{},"clone locally, tar over ssh",[571,3665,3666,3669,3671,3674],{},[589,3667,3668],{},"pypi",[589,3670,3484],{},[589,3672,3673],{},"ok",[589,3675,3676],{},[177,3677,3678],{},"UV_INDEX_URL=https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[129,3680,3681,3684,3685,3688,3689,3691,3692,3694,3695,3698],{},[177,3682,3683],{},"HF_ENDPOINT"," only affects the huggingface_hub SDK. ",[177,3686,3687],{},"prepare_data.py"," downloads\nmanifest URLs with curl — it rewrites ",[177,3690,3563],{}," hosts via\n",[177,3693,3683],{}," itself (",[177,3696,3697],{},"download_url","); sha256 provenance is unchanged.",[129,3700,3701,3704,3705,3708],{},[177,3702,3703],{},"download_file"," passes ",[177,3706,3707],{},"--speed-limit 10240 --speed-time 30"," to curl so a\ntrickling-but-alive connection aborts and retries instead of hanging for hours.",[16,3710,3712],{"id":3711},"environment","Environment",[200,3714,3716],{"className":202,"code":3715,"language":204,"meta":151,"style":151},"curl -fsSL https:\u002F\u002Fmise.run | sh            # ~\u002F.local\u002Fbin is scratch; MISE_DATA_DIR persists tools\nexport MISE_DATA_DIR=\u002Fopenbayes\u002Fhome\u002F.mise\nexport PATH=\"$HOME\u002F.local\u002Fbin:$MISE_DATA_DIR\u002Fshims:$PATH\"\nexport HF_ENDPOINT=https:\u002F\u002Fhf-mirror.com HF_HUB_DISABLE_XET=1\nexport LINNAEUS_VRAM_FRACTION=0.95\nuv sync --extra train --extra agent --extra telemetry --group quality\n",[177,3717,3718,3738,3752,3782,3799,3811],{"__ignoreMap":151},[208,3719,3720,3723,3726,3729,3732,3735],{"class":210,"line":211},[208,3721,3722],{"class":214},"curl",[208,3724,3725],{"class":222}," -fsSL",[208,3727,3728],{"class":218}," https:\u002F\u002Fmise.run",[208,3730,3731],{"class":2140}," |",[208,3733,3734],{"class":214}," sh",[208,3736,3737],{"class":2775},"            # ~\u002F.local\u002Fbin is scratch; MISE_DATA_DIR persists tools\n",[208,3739,3740,3743,3746,3749],{"class":210,"line":152},[208,3741,3742],{"class":2140},"export",[208,3744,3745],{"class":2147}," MISE_DATA_DIR",[208,3747,3748],{"class":2140},"=",[208,3750,3751],{"class":2147},"\u002Fopenbayes\u002Fhome\u002F.mise\n",[208,3753,3754,3756,3759,3761,3764,3767,3770,3773,3776,3779],{"class":210,"line":153},[208,3755,3742],{"class":2140},[208,3757,3758],{"class":2147}," PATH",[208,3760,3748],{"class":2140},[208,3762,3763],{"class":218},"\"",[208,3765,3766],{"class":2147},"$HOME",[208,3768,3769],{"class":218},"\u002F.local\u002Fbin:",[208,3771,3772],{"class":2147},"$MISE_DATA_DIR",[208,3774,3775],{"class":218},"\u002Fshims:",[208,3777,3778],{"class":2147},"$PATH",[208,3780,3781],{"class":218},"\"\n",[208,3783,3784,3786,3789,3791,3794,3796],{"class":210,"line":251},[208,3785,3742],{"class":2140},[208,3787,3788],{"class":2147}," HF_ENDPOINT",[208,3790,3748],{"class":2140},[208,3792,3793],{"class":2147},"https:\u002F\u002Fhf-mirror.com HF_HUB_DISABLE_XET",[208,3795,3748],{"class":2140},[208,3797,3798],{"class":222},"1\n",[208,3800,3801,3803,3806,3808],{"class":210,"line":257},[208,3802,3742],{"class":2140},[208,3804,3805],{"class":2147}," LINNAEUS_VRAM_FRACTION",[208,3807,3748],{"class":2140},[208,3809,3810],{"class":222},"0.95\n",[208,3812,3813,3815,3817,3819,3822,3824,3827,3829,3832,3834],{"class":210,"line":262},[208,3814,215],{"class":214},[208,3816,219],{"class":218},[208,3818,223],{"class":222},[208,3820,3821],{"class":218}," train",[208,3823,223],{"class":222},[208,3825,3826],{"class":218}," agent",[208,3828,223],{"class":222},[208,3830,3831],{"class":218}," telemetry",[208,3833,3377],{"class":222},[208,3835,3836],{"class":218}," quality\n",[129,3838,3839,3840,3842,3843,3846,3847,3849,3850,149],{},"The plain ",[177,3841,1490],{}," has no extras — ",[177,3844,3845],{},"sklearn",", agent extras, NVML telemetry\nall come from the extras list above. If ",[177,3848,1254],{}," shims lose their version pin\nafter a restart, call the tool directly:\n",[177,3851,3852],{},".mise\u002Finstalls\u002Fuv\u002F0.11\u002F.mise-bins\u002Fuv",[16,3854,3856],{"id":3855},"stage-resume-semantics-read-before-restarting","Stage resume semantics (read before restarting)",[129,3858,3859,3862,3863,2672,3866,3869],{},[177,3860,3861],{},"completed.json"," skips a stage only when ",[177,3864,3865],{},"done[name] == command",[2638,3867,3868],{},"exactly",".\nConsequences:",[21,3871,3872,3889,3903,3912,3917],{},[24,3873,3874,3875,3018,3877,3880,3881,3884,3885,3888],{},"Changing the package name (",[177,3876,1793],{},[177,3878,3879],{},"linnaeus",") invalidated every recorded\n",[177,3882,3883],{},"-m dohnuts.train"," command → ",[177,3886,3887],{},"evaluate-42"," re-ran its full 180k-row eval.\nAfter any rename, either migrate completed.json or accept re-runs.",[24,3890,3891,3894,3895,3898,3899,3902],{},[177,3892,3893],{},"train-*"," resumes from ",[177,3896,3897],{},"last.pt"," (saved every ",[177,3900,3901],{},"save_every"," steps); a\n\"re-run\" at the final step is a no-op.",[24,3904,3905,3908,3909,149],{},[177,3906,3907],{},"run_laya_benchmark"," resumes per-case from ",[177,3910,3911],{},"predictions.jsonl",[24,3913,3914,3916],{},[177,3915,3553],{}," is forced to re-check whenever processed splits are missing;\nverified manifest files are hash-skipped, so re-runs only fetch what is gone.",[24,3918,3919,3920,3923,3924,3927],{},"Evaluation is ",[2638,3921,3922],{},"dataloader-bound",", not GPU-bound (0–30% GPU util on image\ngroups). ",[177,3925,3926],{},"--workers 16"," cut the 26-group dev eval from ~45 min to ~11 min.",[16,3929,3931],{"id":3930},"bayes-cli-operations","bayes CLI operations",[21,3933,3934,3944,3950,3960,3963,3969],{},[24,3935,3936,3939,3940,3943],{},[177,3937,3938],{},"bayes gear run workspace -d \"\u003Cuser>\u002Fjobs\u002F\u003CjobId>\u002Foutput:\u002Foutput\""," mounts a\nprevious job's persistent output into a new container — the way to keep\nworking after quota loss on the original resource or to fetch files from a\ncheap ",[177,3941,3942],{},"cpu"," container.",[24,3945,3946,3949],{},[177,3947,3948],{},"bayes data upload \u003Cdataset> -v \u003Cver> -p \u003Cpath>"," works reliably from a local\nmachine; the same CLI hung mid-upload from inside a container. For many\nsmall files, tar first.",[24,3951,3952,3953,3956,3957,149],{},"SSH port changes on every restart → ",[177,3954,3955],{},"ssh-keygen -R \"[host]:port\""," then\n",[177,3958,3959],{},"StrictHostKeyChecking=accept-new",[24,3961,3962],{},"Workspace jobs were observed being cancelled after ~13 h of runtime; keep\nvaluable output on persistent paths continuously, not at the end.",[24,3964,3965,3966,3968],{},"GPU free quota is per-resource and depletes; all single-GPU types can show\n无算力额度 simultaneously while ",[177,3967,3942],{}," still works.",[24,3970,3971,3972,3975],{},"rsync over the job SSH link can drop mid-stream on larger trees; a\n",[177,3973,3974],{},"tar czf | ssh 'tar xzf -'"," pipe was more reliable.",[356,3977,3978],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":151,"searchDepth":152,"depth":153,"links":3980},[3981,3982,3983,3984,3985],{"id":3430,"depth":152,"text":3431},{"id":3557,"depth":152,"text":3558},{"id":3711,"depth":152,"text":3712},{"id":3855,"depth":152,"text":3856},{"id":3930,"depth":152,"text":3931},{},"\u002Fdocs\u002Fopenbayes",{"title":3419,"description":3427},"docs\u002Fopenbayes","z1U8KmnqFnDuliNh9Sr8LSYdnB1LPzxBfKuFvlKHAe0",{"id":3992,"title":3993,"body":3994,"description":4066,"extension":158,"meta":4067,"navigation":160,"path":4068,"seo":4069,"stem":4070,"__hash__":4071},"content\u002Fdocs\u002Frlcd.md","RLCD implementation",{"type":9,"value":3995,"toc":4064},[3996,3999,4012,4028,4031,4034,4040,4047,4050,4053],[12,3997,3993],{"id":3998},"rlcd-implementation",[129,4000,4001,4002,4004,4005,4007,4008,4011],{},"The Linnaeus training recipe keeps the Qwen3.5-2B vision encoder frozen and trains language LoRA adapters\n(rank 8, alpha 16) plus a shared candidate scorer.\nThe pinned base is ",[177,4003,2962],{}," revision\n",[177,4006,2966],{},". (Upstream pinned\n",[177,4009,4010],{},"Qwen\u002FQwen3.5-0.8B","; the only deliberate recipe change in this fork is the backbone.)",[129,4013,4014,4015,448,4023,149],{},"The numerical reference is ",[27,4016,4019,4020],{"href":4017,"rel":4018},"https:\u002F\u002Fgithub.com\u002Fr33drichards\u002Flaya-vision\u002Fblob\u002F86ccec115ef3d72d1851168fc9b7194e8dbed35a\u002Flaya\u002Fvlm_train.py",[189],"Laya Vision ",[177,4021,4022],{},"vlm_loss",[27,4024,4027],{"href":4025,"rel":4026},"https:\u002F\u002Fgithub.com\u002FNandhaKishorM\u002Flaya\u002Fblob\u002Fd113dca2512fb3eaca313534bc54c7162d87c1d4\u002Fnotebooks\u002Flaya_finetune_typed_decisions_2xT4_kaggle.ipynb",[189],"Laya's typed-decisions training notebook",[129,4029,4030],{},"Shared prefixes and parallel question suffixes produce candidate logits without\nautoregressive generation. Draw four\nGaussian perturbations with sigma 0.3, center each over valid candidates, and\nscore their softmax distributions. The reward adds log score (floor −9.21) and\n0.75 times spherical score; ordinal questions also subtract RPS divided by K−1.\nSubtract the group mean reward for each question, then divide all advantages by\none sample standard deviation across groups and questions, plus 1e−6. Both the\nsampled logits and rewards are detached in the policy-gradient calculation.",[129,4032,4033],{},"The training loss is this policy-gradient loss plus soft cross-entropy with\nweight 1. This is one joint training path, following Laya; there is no separate\nSFT warm-up, reward model, critic, or autoregressive rollout. Policy loss can be\nnegative and noisy, so cross-entropy, reward, and held-out accuracy are logged\nseparately. Clipping and this gradient estimator do not prove calibration.",[129,4035,4036,4037,4039],{},"Candidate-selection (",[177,4038,601],{},") candidates are shuffled during training with their targets. Binary\nfalse\u002Ftrue order and ordinal level order stay fixed. Soft labels are normalized\nwithin tolerance; VQAv2 yes\u002Fno votes and typed-decisions distributions retain\nuncertainty rather than being converted to hard labels.",[129,4041,4042,4043,4046],{},"The training recipe is defined in ",[177,4044,4045],{},"src\u002Flinnaeus\u002Frecipe.py",": equal probability per\nsource\u002Flanguage\u002Ftask group, deterministic sampling with replacement, at most\n6,000 eligible source rows in each group's training pool, batch 8 with four\naccumulation steps, a default budget of 3,600 updates, LoRA LR 1e−4 and head LR 5e−4,\n72 warm-up updates, cosine decay to 10% through update 2,400, then a fixed\n10% floor through update 3,600; weight decay 0.01 and gradient clip 1.\nThe default run processes 115,200 sampled examples. Each run freezes the eligible\nIDs and source hashes; sampling with replacement can revisit an example.",[129,4048,4049],{},"Every 400 updates, evaluate the same deterministic development subset of up to\n256 examples per group. Select by unweighted group macro top-1 accuracy; test\nlabels never select a checkpoint. Save trainable parameters, optimizer, step,\nRNG state, recipe, and selected score. Sampling depends on seed and absolute\nmicrobatch index, so restarting does not restart the data stream.\nExtending the total budget retains the original decay horizon and uses its final\nlearning-rate floor for the additional updates; optimizer moments are preserved.",[129,4051,4052],{},"Merge LoRA, then fit three temperatures, one per decision type, on the independent calibration\npartition using LBFGS (100 iterations, LR 0.1, temperature range 0.1–10). Final\nreports retain both raw and calibrated metrics. Raw predictions include IDs,\ntarget distributions and logits so plots and metrics can be regenerated.",[129,4054,4055,4056,144,4058,4060,4061,4063],{},"Only ",[177,4057,1086],{},[177,4059,1090],{}," configure RLCD; ",[177,4062,1094],{}," controls the training budget.\nThe default values above match\nthe pinned upstream objective; the remaining estimator and reward settings are fixed.",{"title":151,"searchDepth":152,"depth":153,"links":4065},[],"The Linnaeus training recipe keeps the Qwen3.5-2B vision encoder frozen and trains language LoRA adapters\n(rank 8, alpha 16) plus a shared candidate scorer.\nThe pinned base is Qwen\u002FQwen3.5-2B revision\n15852e8c16360a2fea060d615a32b45270f8a8fc. (Upstream pinned\nQwen\u002FQwen3.5-0.8B; the only deliberate recipe change in this fork is the backbone.)",{},"\u002Fdocs\u002Frlcd",{"title":3993,"description":4066},"docs\u002Frlcd","niiPcgAE_9c99DUnLk7UIdzbI9f6gfzInc6PraDs0R4",{"id":4073,"title":4074,"body":4075,"description":4553,"extension":158,"meta":4554,"navigation":160,"path":4555,"seo":4556,"stem":4557,"__hash__":4558},"content\u002Fdocs\u002Frun-experiment.md","Train and evaluate Linnaeus",{"type":9,"value":4076,"toc":4550},[4077,4080,4094,4125,4131,4143,4146,4149,4152,4157,4181,4184,4321,4327,4330,4356,4359,4363,4373,4516,4534,4541,4548],[12,4078,4074],{"id":4079},"train-and-evaluate-linnaeus",[129,4081,4082,4083,4086,4087,4090,4091,4093],{},"Use Python 3.12 and a working PyTorch installation on a CUDA GPU\n(Linnaeus targets NVIDIA; the recorded run used an RTX 4090 24GB on OpenBayes — upstream recorded ROCm on an RX 7900 XTX).\nThe recorded upstream training environment is preserved in\n",[177,4084,4085],{},"data\u002Fmanifests\u002Fenvironment-freeze.txt",". Follow the ",[27,4088,4089],{"href":29},"setup","\nfirst; the package sources and lock file select the ",[177,4092,1389],{}," wheels.",[200,4095,4097],{"className":202,"code":4096,"language":204,"meta":151,"style":151},"uv sync --extra train --extra telemetry\nuv run python scripts\u002Frun_experiment.py\n",[177,4098,4099,4114],{"__ignoreMap":151},[208,4100,4101,4103,4105,4107,4109,4111],{"class":210,"line":211},[208,4102,215],{"class":214},[208,4104,219],{"class":218},[208,4106,223],{"class":222},[208,4108,3821],{"class":218},[208,4110,223],{"class":222},[208,4112,4113],{"class":218}," telemetry\n",[208,4115,4116,4118,4120,4122],{"class":210,"line":152},[208,4117,215],{"class":214},[208,4119,506],{"class":218},[208,4121,509],{"class":218},[208,4123,4124],{"class":218}," scripts\u002Frun_experiment.py\n",[129,4126,4127,4128,149],{},"The Qwen3.5 adapter limits PyTorch's caching allocator to 80% of visible VRAM\nby default. On a headless server, raise it with ",[177,4129,4130],{},"LINNAEUS_VRAM_FRACTION=0.95",[129,4132,4133,4134,144,4137,4139,4140,4142],{},"On hosts without direct Hugging Face or GitHub access (e.g. mainland China\nservers) set ",[177,4135,4136],{},"HF_ENDPOINT=https:\u002F\u002Fhf-mirror.com",[177,4138,3635],{},";\nsee ",[27,4141,51],{"href":50}," for the full mirror matrix and\nfallback sources.",[129,4144,4145],{},"The script downloads the pinned base and public datasets when absent, converts\nthe complete mixture, isolates related examples and identical images across\nsplits, and freezes token eligibility. It trains seed 42 for 3,600 optimizer updates,\nresuming saved optimizer and sampling state after interruption.",[129,4147,4148],{},"Development accuracy selects the checkpoint within this run. LoRA is merged,\nthree temperatures are fitted on the calibration partition, and the complete\nheld-out partition is evaluated. Test scores never choose a model. The workflow\nexports the selected checkpoint directly after calibration and evaluation, then\ncompletes acceptance, quality diagnostics and benchmarks. Variation across seeds\nis unmeasured.",[129,4150,4151],{},"The script then runs checkpoint\u002FBub acceptance, quality diagnostics, local\nLaya\u002FLaya Vision references, JevBench's frozen public tasks, and the complete\nfrozen Laya chart protocol. API benchmarks measure latency and resource use.\nEvery failed stage stops execution.\nCompleted stages are recorded; rerunning the command resumes the same recipe.\nA different recipe or dataset requires a separate experiment directory. The\ncurrent method warms up for 72 updates, follows cosine decay through update\n2,400, and uses the 10% learning-rate floor through update 3,600. This is the\nschedule used by the selected Linnaeus 0.1.0 export.",[129,4153,4154,4156],{},[177,4155,1094],{}," changes an experiment's total budget. Extending a completed run retains\noptimizer and random state, sampling position, and the decay horizon. Development\nselection includes its existing best checkpoint, followed by calibration,\nevaluation, and acceptance. Checkpoint steps are experiment coordinates, not\nadditional product versions.",[129,4158,4159,4160,144,4163,4166,4167,4169,4170,637,4173,4176,4177,4180],{},"The RLCD controls are ",[177,4161,4162],{},"--sigma",[177,4164,4165],{},"--ce-weight",", defaulting to 0.3 and\n1.0; ",[177,4168,1094],{}," sets the total update budget. ",[177,4171,4172],{},"--data",[177,4174,4175],{},"--model",", and ",[177,4178,4179],{},"--output"," identify local assets and output locations.",[129,4182,4183],{},"Linnaeus adds backbone and execution controls:",[565,4185,4186,4199],{},[568,4187,4188],{},[571,4189,4190,4193,4196],{},[574,4191,4192],{},"Flag",[574,4194,4195],{},"Default",[574,4197,4198],{},"Effect",[584,4200,4201,4232,4247,4260,4273,4285],{},[571,4202,4203,4212,4220],{},[589,4204,4205,4208,4209],{},[177,4206,4207],{},"--base-repo"," \u002F ",[177,4210,4211],{},"--base-revision",[589,4213,4214,4216,4217],{},[177,4215,2962],{}," + pinned commit ",[177,4218,4219],{},"15852e8c",[589,4221,4222,4223,4225,4226,4228,4229],{},"Backbone downloaded when ",[177,4224,4175],{}," lacks ",[177,4227,2235],{},"; recorded as ",[177,4230,4231],{},"base_model_id",[571,4233,4234,4239,4242],{},[589,4235,4236],{},[177,4237,4238],{},"--lora-rank",[589,4240,4241],{},"8",[589,4243,4244,4245],{},"LoRA rank (alpha = 2×rank); changes trainable shapes — use a fresh ",[177,4246,4179],{},[571,4248,4249,4254,4257],{},[589,4250,4251],{},[177,4252,4253],{},"--workers",[589,4255,4256],{},"2",[589,4258,4259],{},"DataLoader workers for train and evaluation collation",[571,4261,4262,4267,4270],{},[589,4263,4264],{},[177,4265,4266],{},"--eval-batch-size",[589,4268,4269],{},"16",[589,4271,4272],{},"Questions per evaluation forward; larger is faster on idle VRAM",[571,4274,4275,4280,4282],{},[589,4276,4277],{},[177,4278,4279],{},"--cpu-threads",[589,4281,4241],{},[589,4283,4284],{},"Torch CPU threads",[571,4286,4287,4292,4294],{},[589,4288,4289],{},[177,4290,4291],{},"--skip",[589,4293,3596],{},[589,4295,4296,4297,637,4300,637,4303,637,4306,637,4309,637,4311,637,4314,4317,4318,4320],{},"Comma-separated stage groups: ",[177,4298,4299],{},"acceptance",[177,4301,4302],{},"audit",[177,4304,4305],{},"references",[177,4307,4308],{},"benchmarks",[177,4310,3195],{},[177,4312,4313],{},"laya-chart",[177,4315,4316],{},"report",". Skipping upstream references saves hours on iteration runs; ",[177,4319,4316],{}," tolerates missing sections",[129,4322,4323,4324,149],{},"Different backbone support uses the ",[27,4325,4326],{"href":77},"adapter interface",[129,4328,4329],{},"Base initialization and checkpoint initialization use the same 26-group mixture\nand training workflow. To initialize from an exported checkpoint:",[200,4331,4333],{"className":202,"code":4332,"language":204,"meta":151,"style":151},"uv run python scripts\u002Frun_experiment.py --initialize-from runs\u002Fv1\u002Fcheckpoint --output runs\u002Fdomain\n",[177,4334,4335],{"__ignoreMap":151},[208,4336,4337,4339,4341,4343,4346,4349,4351,4353],{"class":210,"line":211},[208,4338,215],{"class":214},[208,4340,506],{"class":218},[208,4342,509],{"class":218},[208,4344,4345],{"class":218}," scripts\u002Frun_experiment.py",[208,4347,4348],{"class":222}," --initialize-from",[208,4350,521],{"class":218},[208,4352,524],{"class":222},[208,4354,4355],{"class":218}," runs\u002Fdomain\n",[129,4357,4358],{},"The checkpoint supplies the starting parameters and a fresh optimizer\u002Fschedule.\nThe runner automatically resumes a saved update in its output directory, restoring\noptimizer and sampling state. Both modes use the same fused kernels, differentiable\nprefix sharing, frozen-image cache, RLCD objective, development selection and\ncalibration. There is no separate incremental training program.",[16,4360,4362],{"id":4361},"outputs","Outputs",[129,4364,4365,4366,4368,4369,4372],{},"The default data directory is ",[177,4367,1025],{},"; outputs go to ",[177,4370,4371],{},"runs\u002Fv1",":",[565,4374,4375,4384],{},[568,4376,4377],{},[571,4378,4379,4381],{},[574,4380,2564],{},[574,4382,4383],{},"Contents",[584,4385,4386,4396,4406,4416,4426,4436,4446,4456,4466,4476,4486,4496,4506],{},[571,4387,4388,4393],{},[589,4389,4390],{},[177,4391,4392],{},"checkpoint\u002F",[589,4394,4395],{},"Selected LoRA\u002Fhead weights, base revision, temperatures, selection metadata, checksum",[571,4397,4398,4403],{},[589,4399,4400],{},[177,4401,4402],{},"seed-42\u002Fresources.jsonl",[589,4404,4405],{},"Timestamped GPU memory, power, utilization, temperature and process RSS",[571,4407,4408,4413],{},[589,4409,4410],{},[177,4411,4412],{},"seed-42\u002Fmetrics.jsonl",[589,4414,4415],{},"Loss, reward, development accuracy, learning rate, and GPU memory",[571,4417,4418,4423],{},[589,4419,4420],{},[177,4421,4422],{},"seed-42\u002Ftest-predictions.jsonl",[589,4424,4425],{},"Stable example IDs, targets, raw logits",[571,4427,4428,4433],{},[589,4429,4430],{},[177,4431,4432],{},"seed-42\u002Fevaluation.json",[589,4434,4435],{},"Raw\u002Fcalibrated per-task, decision-type and candidate-count metrics",[571,4437,4438,4443],{},[589,4439,4440],{},[177,4441,4442],{},"acceptance\u002Freport.json",[589,4444,4445],{},"Actual checkpoint reload, decision interface, and Bub SDK acceptance",[571,4447,4448,4453],{},[589,4449,4450],{},[177,4451,4452],{},"quality-audit\u002F",[589,4454,4455],{},"Candidate rotations, image ablations, and batch-size sensitivity",[571,4457,4458,4463],{},[589,4459,4460],{},[177,4461,4462],{},"benchmarks\u002F",[589,4464,4465],{},"End-to-end timing samples and resource measurements",[571,4467,4468,4473],{},[589,4469,4470],{},[177,4471,4472],{},"laya-chart\u002F",[589,4474,4475],{},"Frozen application\u002Flanguage suites, calibration diagnostics and parallel decision timing",[571,4477,4478,4483],{},[589,4479,4480],{},[177,4481,4482],{},"jevbench\u002F",[589,4484,4485],{},"JevBench public-task predictions, raw evidence, and same-ID reference comparisons",[571,4487,4488,4493],{},[589,4489,4490],{},[177,4491,4492],{},"metrics\u002F",[589,4494,4495],{},"CSV tables, comparison JSON, and a self-contained results report",[571,4497,4498,4503],{},[589,4499,4500],{},[177,4501,4502],{},"figures\u002F",[589,4504,4505],{},"Separately rendered comparison figures, chart data, and source checksums",[571,4507,4508,4513],{},[589,4509,4510],{},[177,4511,4512],{},"recipe.json",[589,4514,4515],{},"Fixed settings, exposed RLCD values, and source hashes",[200,4517,4519],{"className":229,"code":4518,"language":231,"meta":151,"style":151},"from linnaeus.predictor import Predictor\n\nmodel = Predictor.from_checkpoint(\"runs\u002Fv1\u002Fcheckpoint\")\n",[177,4520,4521,4525,4529],{"__ignoreMap":151},[208,4522,4523],{"class":210,"line":211},[208,4524,254],{},[208,4526,4527],{"class":210,"line":152},[208,4528,243],{"emptyLinePlaceholder":160},[208,4530,4531],{"class":210,"line":153},[208,4532,4533],{},"model = Predictor.from_checkpoint(\"runs\u002Fv1\u002Fcheckpoint\")\n",[129,4535,4536,4537,149],{},"Render comparison figures from the saved results using the\n",[27,4538,4540],{"href":4539},"local-benchmarks#model-card-figures","plotting instructions",[129,4542,4543,4544,4547],{},"The compact checkpoint requires its pinned base model, which defaults to\n",[177,4545,4546],{},".cache\u002Fmodels\u002FQwen3.5-2B",". Raw data, cached base weights, and generated results\nare local artifacts rather than package contents.",[356,4549,358],{},{"title":151,"searchDepth":152,"depth":153,"links":4551},[4552],{"id":4361,"depth":152,"text":4362},"Use Python 3.12 and a working PyTorch installation on a CUDA GPU\n(Linnaeus targets NVIDIA; the recorded run used an RTX 4090 24GB on OpenBayes — upstream recorded ROCm on an RX 7900 XTX).\nThe recorded upstream training environment is preserved in\ndata\u002Fmanifests\u002Fenvironment-freeze.txt. Follow the setup\nfirst; the package sources and lock file select the +cu128 wheels.",{},"\u002Fdocs\u002Frun-experiment",{"title":4074,"description":4553},"docs\u002Frun-experiment","57bfoeswFEoEigbwtsXPrQFGDPd8a-YG4RNPzLLiHoM",{"id":4560,"title":4561,"body":4562,"description":4781,"extension":158,"meta":4782,"navigation":160,"path":4783,"seo":4784,"stem":4785,"__hash__":4786},"content\u002Fdocs\u002Fupstream-alignment.md","Upstream protocols and the mixed experiment",{"type":9,"value":4563,"toc":4777},[4564,4567,4581,4585,4612,4619,4622,4625,4629,4751,4758,4761,4764,4767,4774],[12,4565,4561],{"id":4566},"upstream-protocols-and-the-mixed-experiment",[129,4568,4569,4570,4573,4574,4577,4578,4580],{},"References are pinned to Laya ",[177,4571,4572],{},"d113dca2512fb3eaca313534bc54c7162d87c1d4",",\nLaya Vision ",[177,4575,4576],{},"86ccec115ef3d72d1851168fc9b7194e8dbed35a",", and Bub main\n",[177,4579,183],{},". The training mixture includes upstream public tasks and soft teacher\nlabels. Existing Laya weights are benchmark references, not training targets.",[16,4582,4584],{"id":4583},"publicly-documented-training-coverage","Publicly documented training coverage",[129,4586,4587,4588,4591,4592,637,4595,637,4598,4601,4602,637,4605,1118,4608,4611],{},"Laya's pinned README and ",[177,4589,4590],{},"BENCHMARKS.md"," identify AG News, BoolQ, email spam,\nphishing, RAG relevance and support triage as in its training mixture. Its\napplication builders identify the corresponding public sources as\n",[177,4593,4594],{},"fancyzhx\u002Fag_news",[177,4596,4597],{},"google\u002Fboolq",[177,4599,4600],{},"SetFit\u002Fenron_spam",",\n",[177,4603,4604],{},"zefang-liu\u002Fphishing-email-dataset",[177,4606,4607],{},"microsoft\u002Fms_marco",[177,4609,4610],{},"Tobi-Bueck\u002Fcustomer-support-tickets",". This is evidence of declared source\u002Ftask\ncoverage, not a complete per-checkpoint training manifest, split audit or proof\nof identical training records for the English and multilingual checkpoints.",[129,4613,4614,4615,4618],{},"The typed-decisions fine-tuning notebook explicitly loads\n",[177,4616,4617],{},"LocalLLaMA\u002Ftyped-decisions\u002Fall\u002Ftrain",": 1,200 cases, 6,000 original decisions.\nThe published test is 400 cases and 2,000 decisions. Teacher-derived distributions\nmeasure agreement with those teachers rather than independently verified\nbusiness outcomes.",[129,4620,4621],{},"MASSIVE and XNLI appearing in the multilingual evaluation does not establish\nthat Laya trained on them. DAIR Emotion, SST-5, prompt-injections, toxic-chat\nand domain-based model routing are described as held-out evaluation tasks.\nThe public sources inspected do not provide a complete base-training ID list.",[129,4623,4624],{},"The support dataset's current card does not substantiate verified real enterprise\nticket provenance and advertises a synthetic ticket generator. Its CC BY-NC 4.0\nterms also differ from the Laya model license. Using a task in an upstream\nbenchmark does not certify its annotation quality or commercial training rights.",[16,4626,4628],{"id":4627},"evaluation-alignment","Evaluation alignment",[565,4630,4631,4644],{},[568,4632,4633],{},[571,4634,4635,4638,4641],{},[574,4636,4637],{},"Reference",[574,4639,4640],{},"Actual evaluation\u002Ftraining practice",[574,4642,4643],{},"Linnaeus treatment",[584,4645,4646,4661,4675,4690,4701,4712,4726,4737],{},[571,4647,4648,4655,4658],{},[589,4649,4650],{},[27,4651,4654],{"href":4652,"rel":4653},"https:\u002F\u002Fgithub.com\u002FNandhaKishorM\u002Flaya\u002Fblob\u002Fd113dca2512fb3eaca313534bc54c7162d87c1d4\u002FBENCHMARKS.md",[189],"Laya benchmarks",[589,4656,4657],{},"MASSIVE uses 20 candidate intents across languages; XNLI uses three entailment labels; public classifiers include AG News, emotion and BANKING77",[589,4659,4660],{},"Train\u002Fevaluate MASSIVE en-US and zh-CN with all 60 intents; XNLI en\u002Fzh; AG News 4, emotion 6, BANKING77 77. These are not the published 51-language\u002F20-candidate MASSIVE setting.",[571,4662,4663,4669,4672],{},[589,4664,4665],{},[27,4666,722],{"href":4667,"rel":4668},"https:\u002F\u002Fhuggingface.co\u002Fdatasets\u002FLocalLLaMA\u002Ftyped-decisions",[189],[589,4670,4671],{},"1,200 training cases \u002F 6,000 decisions and 400 test cases \u002F 2,000 decisions; labels average three teacher samples",[589,4673,4674],{},"Keep state-level groups and soft distributions. Results measure teacher agreement, not independent real-world correctness. Reserve train groups for development and calibration.",[571,4676,4677,4684,4687],{},[589,4678,4679],{},[27,4680,4683],{"href":4681,"rel":4682},"https:\u002F\u002Fgithub.com\u002Fr33drichards\u002Flaya-vision\u002Fblob\u002F86ccec115ef3d72d1851168fc9b7194e8dbed35a\u002Fhf_model_card.md",[189],"Laya Vision model card",[589,4685,4686],{},"A-OKVQA four-choice, ScienceQA image subset, VQAv2 yes\u002Fno soft targets; equal source sampling",[589,4688,4689],{},"Add all three to the mix. Use frozen vision plus LoRA instead of updating the entire language backbone.",[571,4691,4692,4695,4698],{},[589,4693,4694],{},"Laya Vision VQAv2",[589,4696,4697],{},"Published run re-splits official validation by image; 50k training \u002F 5k evaluation examples",[589,4699,4700],{},"Download that labeled validation source, split by image hash and audit COCO overlap with A-OKVQA. Our ID list and counts differ; do not present as an exact published-result reproduction or official VQA score.",[571,4702,4703,4706,4709],{},[589,4704,4705],{},"Laya Vision calibration",[589,4707,4708],{},"Per-type temperature, top-label accuracy, NLL, 15-bin ECE; training-tail calibration rows",[589,4710,4711],{},"Use an independent grouped calibration partition. ECE uses maximum probability, not entropy-based API confidence.",[571,4713,4714,4717,4723],{},[589,4715,4716],{},"Laya Vision quality checks",[589,4718,4719,4720,4722],{},"Four cyclic candidate rotations and image-dependence tests; published ",[177,4721,642],{}," head untrained",[589,4724,4725],{},"Preserve these audits; add supervised CLEVR count\u002Fattribute\u002Fexistence and ScreenQA region decisions. Counting alone does not validate subjective ordinal judgments.",[571,4727,4728,4731,4734],{},[589,4729,4730],{},"Laya latency",[589,4732,4733],{},"Batch sizes 1, 5, 10, 50; published T4 numbers",[589,4735,4736],{},"Measure the local RX 7900 XTX, with model-specific token counts and all timing samples. Published Jev figures are third-party references, not a local Jev benchmark.",[571,4738,4739,4745,4748],{},[589,4740,4741],{},[27,4742,4744],{"href":3202,"rel":4743},[189],"JevBench v1.2.2",[589,4746,4747],{},"534 decisions; intelligence, calibration, speed, and cost carry equal weights",[589,4749,4750],{},"Run all 231 public tasks with the frozen checkpoint and official harness. Compare reference accuracy on identical IDs. The other 303 tasks and a local provider tariff are unavailable, so no official rank or full composite is reported.",[129,4752,4753,4754,4757],{},"Dataset revisions, file sizes, URLs and SHA-256 hashes are stored in\n",[177,4755,4756],{},"data\u002Fmanifests\u002Fupstream-downloads*.json",". Source conversion uses raw annotations\nand Parquet, not downloaded executable dataset scripts. The official A-OKVQA\nannotation release supplies COCO IDs missing from its HF Parquet conversion.",[129,4759,4760],{},"Train, development, calibration and final evaluation groups are disjoint after\njoining source IDs, normalized text, pixel hashes, and COCO IDs. If official or\nindependently derived partitions conflict, retain the higher-priority partition\n(test > development > calibration > train) and exclude lower-priority examples.\nReport these exclusions rather than silently moving rows into the test set.",[129,4762,4763],{},"All 77 BANKING77 labels fit the API's 128-candidate limit. A separate\n2,048-token training budget determines dataset eligibility. The Qwen3.5 adapter\nsupports 4,096-token inference. Eligibility is frozen before training; no\ncandidate or question is truncated to manufacture a passing result. Screening\ncounts and excluded IDs accompany accuracy.",[129,4765,4766],{},"ScienceQA adds noncommercial\u002Fshare-alike source terms to the research mix.\nThe typed-decisions source explicitly warns that a better model can disagree\nwith its small teacher. Model quality claims must therefore separate human,\nprogrammatic, and teacher-derived targets. Annotation terms alone do not settle\nthe license of a released mixed checkpoint.",[129,4768,4769,4770,4773],{},"ScienceQA uses the official ",[2638,4771,4772],{},"test"," image subset (2,017 rows) for our final\nevaluation. Laya Vision's reported 2,097-row set corresponds to official\nvalidation. Our development partition starts from that validation split, with\ncross-partition image overlap removed; the published accuracy is not a directly\nmatched final-test baseline.",[129,4775,4776],{},"Local upstream checkpoint references also have a training-exposure limitation:\nour A-OKVQA development rows come from the official training set used by the\npublished Vision model, and our VQAv2 split is independently derived from the\nsame validation pool that upstream re-split for training. These scores are useful\nimplementation checks, but they do not establish an uncontaminated head-to-head\ncomparison. Official held-out partitions and any verifiable upstream training\nID exclusions must be identified before making a competitive quality claim.\nReference CPU evaluation uses the published FP32 weights and temperatures, with\n2048-token total\u002Fhead budgets to retain all candidates; upstream still applies\nits 48-token per-option cap. Linnaeus uses BF16 with its own full-candidate template.",{"title":151,"searchDepth":152,"depth":153,"links":4778},[4779,4780],{"id":4583,"depth":152,"text":4584},{"id":4627,"depth":152,"text":4628},"References are pinned to Laya d113dca2512fb3eaca313534bc54c7162d87c1d4,\nLaya Vision 86ccec115ef3d72d1851168fc9b7194e8dbed35a, and Bub main\n9bf70488e22a44eeb875a9d55d9a7d352b82e381. The training mixture includes upstream public tasks and soft teacher\nlabels. Existing Laya weights are benchmark references, not training targets.",{},"\u002Fdocs\u002Fupstream-alignment",{"title":4561,"description":4781},"docs\u002Fupstream-alignment","6gyc8l1idnl6ZlTj7WyhQuJPH4r9lE-UjAPtWTvsBZw",{"id":4788,"title":148,"body":4789,"description":4934,"extension":158,"meta":4935,"navigation":160,"path":4936,"seo":4937,"stem":4938,"__hash__":4939},"content\u002Fdocs\u002Fwebsite.md",{"type":9,"value":4790,"toc":4930},[4791,4794,4811,4816,4855,4859,4902,4906,4927],[12,4792,148],{"id":4793},"build-the-website",[129,4795,4796,4797,4799,4800,4803,4804,4807,4808,4810],{},"The site is a Nuxt 4 + UnoCSS app in ",[177,4798,1363],{}," (SSG, deployed to GitHub Pages).\nIt renders the Markdown in ",[177,4801,4802],{},"docs\u002F"," directly via ",[177,4805,4806],{},"@nuxt\u002Fcontent"," — the ",[177,4809,4802],{},"\nMarkdown stays the single source of truth; never maintain copies.",[129,4812,4813,4814,3052],{},"Toolchain: mise provisions Node 24 + pnpm 12 (",[177,4815,1291],{},[200,4817,4819],{"className":202,"code":4818,"language":204,"meta":151,"style":151},"mise install          # node + pnpm (plus python\u002Fuv for the rest)\nmise run site         # pnpm install + nuxi generate → site\u002F.output\u002Fpublic\nmise run site-preview # serve on http:\u002F\u002Flocalhost:8000\n",[177,4820,4821,4831,4843],{"__ignoreMap":151},[208,4822,4823,4825,4828],{"class":210,"line":211},[208,4824,1254],{"class":214},[208,4826,4827],{"class":218}," install",[208,4829,4830],{"class":2775},"          # node + pnpm (plus python\u002Fuv for the rest)\n",[208,4832,4833,4835,4837,4840],{"class":210,"line":152},[208,4834,1254],{"class":214},[208,4836,506],{"class":218},[208,4838,4839],{"class":218}," site",[208,4841,4842],{"class":2775},"         # pnpm install + nuxi generate → site\u002F.output\u002Fpublic\n",[208,4844,4845,4847,4849,4852],{"class":210,"line":153},[208,4846,1254],{"class":214},[208,4848,506],{"class":218},[208,4850,4851],{"class":218}," site-preview",[208,4853,4854],{"class":2775}," # serve on http:\u002F\u002Flocalhost:8000\n",[16,4856,4858],{"id":4857},"conventions","Conventions",[21,4860,4861,4868,4882,4895],{},[24,4862,4863,4864,4867],{},"Visual system: ",[177,4865,4866],{},"DESIGN.md"," (Linnaean botanical specimen world — paper,\nink green, Fraunces serif, specimen-plate tables).",[24,4869,4870,4871,4874,4875,4878,4879,149],{},"Landing + genus table live in ",[177,4872,4873],{},"site\u002Fapp\u002Fpages\u002Findex.vue","; doc pages render\n",[177,4876,4877],{},"docs\u002F*.md"," through ",[177,4880,4881],{},"app\u002Fpages\u002Fdocs\u002F[...slug].vue",[24,4883,4884,4885,4601,4888,637,4891,4894],{},"Keep plain-Markdown docs — no Sphinx\u002FMyST directives (",[177,4886,4887],{},"{toctree}",[177,4889,4890],{},"{include}",[177,4892,4893],{},"{eval-rst}","); Nuxt Content renders standard Markdown + tables.",[24,4896,4897,4898,4901],{},"Figures stay in ",[177,4899,4900],{},"docs\u002Ffigures\u002F"," and are referenced by relative path.",[16,4903,4905],{"id":4904},"github-pages","GitHub Pages",[129,4907,4908,4911,4912,4915,4916,4919,4920,4923,4924,4926],{},[177,4909,4910],{},".github\u002Fworkflows\u002Fwebsite.yml"," builds pull requests without publishing and\ndeploys ",[177,4913,4914],{},".output\u002Fpublic"," on ",[177,4917,4918],{},"main",". Set Pages source to ",[2638,4921,4922],{},"GitHub Actions","\nbefore the first deploy; it uses the ",[177,4925,4904],{}," environment and needs no\nsecrets or external hosting.",[356,4928,4929],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":151,"searchDepth":152,"depth":153,"links":4931},[4932,4933],{"id":4857,"depth":152,"text":4858},{"id":4904,"depth":152,"text":4905},"The site is a Nuxt 4 + UnoCSS app in site\u002F (SSG, deployed to GitHub Pages).\nIt renders the Markdown in docs\u002F directly via @nuxt\u002Fcontent — the docs\u002F\nMarkdown stays the single source of truth; never maintain copies.",{},"\u002Fdocs\u002Fwebsite",{"title":148,"description":4934},"docs\u002Fwebsite","hUfmT-Lz0wcZv9vb4ahpwo0WOSPSUwyk2mXSKlzYjfg",1790560642133]