The PRISM submission limits: the two-script contract, the 150M parameter cap, the AST sandbox, locked data with no network, and the single-node GPU bounds.
PRISM fixes the dataset and the evaluation protocol, not the model search space - but every submission must stay inside a fixed set of contract, sandbox, and resource limits. A violation is rejected at static review, before any GPU work.Source: docs/submissions.md:1-10.
A bundle must contain two distinct scripts: an architecture role exposing build_model and a training role exposing train. The single-module re-export idiom no longer satisfies the contract - if the architecture and training entrypoints resolve to the same file, the submission is rejected.Source: src/prism_challenge/evaluator/components.py:99-103.
The realized model is capped at 150M parameters (max_parameters = 150_000_000). The cap is enforced statically at forced-seed instantiation and re-checked inside the container against the model the runner actually trained.Source: src/prism_challenge/evaluator/interface.py:26; src/prism_challenge/evaluator/container.py:1149-1176; docs/submissions.md:6.
The context exposes a default token-id geometry the model must respect: vocab_size = 4096 and sequence_length = 128 (max_seq_len).Source: src/prism_challenge/evaluator/interface.py:23-24.
Both scripts pass an AST sandbox of hard blocks before any GPU work. Unsafe imports, network access, arbitrary filesystem access, and deserialization escapes are rejected. build_model must stay pure: it must not read data, open files, touch the network, or reference the dataset.Source: docs/miner/README.md:39-41, :124-125; docs/submissions.md:24-26.
The train split is exposed read-only at ctx.data_dir; the val/test splits are secret and never exposed to your script. The eval container runs with network=none, HF_HUB_OFFLINE=1, and HF_DATASETS_OFFLINE=1, so there is no network during training. Read raw text from ctx.data_dir, tokenize with your own tokenizer or a pre-staged reference, and fail closed if the locked data is missing rather than fabricating data.Source: docs/submissions.md:83-94; docs/miner/README.md:76-81.
PRISM is single-node only. Runs use 1-8 GPUs on one node, and the official scored run uses torchrun --standalone --nnodes=1 --nproc-per-node=1 (the nproc=1 path, since one physical GPU exists). Requests above 8 GPUs or for multiple nodes are rejected.A correct training.py:
calls init_process_group (nccl on GPU) and set_device(local_rank);
wraps the model with DDP or FSDP and shards data per-rank;
does rank-0-only logging and artifact writes;
all-reduces any reported metrics, then barrier() and destroy_process_group() on exit;
also works correctly at world_size=1.
Multi-GPU correctness is validated off the single physical GPU with a static contract check and a gloo multi-rank functional test (world size 2 and 4 on CPU). True 8-GPU scaling is an accepted, unverifiable limitation on a one-GPU node.Source: docs/submissions.md:96-115; docs/scaling.md:22-46.
ctx.artifacts_dir is the only writable path, and only rank 0 writes. The eval container is non-root with a read-only rootfs except artifacts_dir.Source: docs/submissions.md:66; docs/architecture.md:100-102.
The score is compute-normalized; wall-clock is only a safety cap, enforced in layers - a graceful budget that stops the loop and scores the partial stream, a hard watchdog above it, and an outer broker timeout. A faster or larger GPU configuration does not change the ranking; it only changes how much of the budget the run can use.Source: docs/scaling.md:48-59.
A strong OpenRouter LLM reviews both scripts as a hard gate and can reject before any GPU work. A reject is terminal.Source: README.md:55; docs/miner/README.md:126.See Submitting to PRISM for the manifest and Scoring for how a valid run is scored.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"BASE","description":"Documentation for BASE, the Bittensor subnet (netuid 100): validators run infrastructure; miners compete inside pluggable challenges.","colors":{"primary":"#d91f35","light":"#d91f35","dark":"#d91f35"},"logo":{"light":"https://mintcdn.com/base-645db1b8/dcP88DTFSAhrc5am/logo/light.svg?fit=max\u0026auto=format\u0026n=dcP88DTFSAhrc5am\u0026q=85\u0026s=65c07350752e0e50a1ddf844d0e46122","dark":"https://mintcdn.com/base-645db1b8/dcP88DTFSAhrc5am/logo/dark.svg?fit=max\u0026auto=format\u0026n=dcP88DTFSAhrc5am\u0026q=85\u0026s=f96c6d4deb8f8aa3a5aa045c63c3a124"},"favicon":"https://mintcdn.com/base-645db1b8/dcP88DTFSAhrc5am/favicon.svg?fit=max\u0026auto=format\u0026n=dcP88DTFSAhrc5am\u0026q=85\u0026s=642e0bd7f65cfe5e92dba14b6da21654","appearance":{"default":"dark"},"navbar":{"links":[{"href":"https://github.com/BaseIntelligence/base","label":"GitHub"}],"primary":{"type":"button","label":"Choose a challenge","href":"/challenges/overview"}},"footer":{"socials":{"github":"https://github.com/BaseIntelligence"}},"seo":{"metatags":{"og:type":"website","og:site_name":"BASE","og:title":"BASE Documentation","og:description":"Validators run BASE. Miners compete inside challenges on Bittensor netuid 100.","og:image":"/images/og.png","twitter:card":"summary_large_image","twitter:title":"BASE Documentation","twitter:description":"Validators run BASE. Miners compete inside challenges on Bittensor netuid 100.","twitter:image":"/images/og.png"},"indexing":"all"},"fonts":{"family":"Rethink Sans"},"styling":{"eyebrows":"breadcrumbs","codeblocks":"dark","latex":false},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/BaseIntelligence"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"base-645db1b8","hasAudioNarration":false,"actualSubdomain":"base-645db1b8","customDomains":["docs.joinbase.ai"],"gitSource":{"type":"github","owner":"baseintelligence","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"collectionId":"9a45fd2d-c6c2-465c-b552-1281a9163dc8","liveDeploymentHistoryId":"6a5b6cd6ae70bc6b6f1c750a","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a5b6cd6ae70bc6b6f1c750a"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae95a9ff74cc9f20f50f758:success","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Challenges","count":28},{"language":"default","tag":"Reference","count":14},{"language":"default","tag":"Agent Challenge","count":12},{"language":"default","tag":"Overview","count":12},{"language":"default","tag":"Architecture","count":10},{"language":"default","tag":"PRISM","count":10},{"language":"default","tag":"Miner hub","count":10},{"language":"default","tag":"Validators","count":9},{"language":"default","tag":"Infrastructure","count":6},{"language":"default","tag":"Get started","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"/* vietnamese */\n@font-face {\n font-family: 'Space Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYE58RWq7.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Space Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYE98RWq7.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Space Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/spacemono/v17/i7dPIFZifjKcF5UAWdDRYEF8RQ.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Space Mono';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/spacemono/v17/i7dMIFZifjKcF5UAWdDRaPpZUFqaHjyV.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Space Mono';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/spacemono/v17/i7dMIFZifjKcF5UAWdDRaPpZUFuaHjyV.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Space Mono';\n font-style: normal;\n font-weight: 700;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/spacemono/v17/i7dMIFZifjKcF5UAWdDRaPpZUFWaHg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n:root{--bi-font-mono: \"Space Mono\", ui-monospace, \"Menlo\", \"SFMono-Regular\", \"Consolas\", monospace}code,pre,kbd,samp,code-block,code-block code,code-block pre,code-group,code-group code,code-group pre{font-family:var(--bi-font-mono)}"}],"page":{"pagePath":"challenges/prism/constraints","slug":"/challenges/prism/constraints","pageMetadata":{"title":"Constraints \u0026 limits","description":"The PRISM submission limits: the two-script contract, the 150M parameter cap, the AST sandbox, locked data with no network, and the single-node GPU bounds.","icon":"shield","href":"/challenges/prism/constraints"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"The PRISM submission limits: the two-script contract, the 150M parameter cap, the AST sandbox, locked data with no network, and the single-node GPU bounds.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Table,Tip}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`PRISM fixes the dataset and the evaluation protocol, not the model search space - but every submission must stay inside a fixed set of contract, sandbox, and resource limits. A violation is rejected at static review, before any GPU work.`}),`\n`,_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Source: `,_jsx(_components.code,{children:`docs/submissions.md:1-10`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`two-script-contract`,children:`Two-script contract`}),`\n`,_jsxs(_components.p,{children:[`A bundle must contain two `,_jsx(_components.strong,{children:`distinct`}),` scripts: an architecture role exposing `,_jsx(_components.code,{children:`build_model`}),` and a training role exposing `,_jsx(_components.code,{children:`train`}),`. The single-module re-export idiom no longer satisfies the contract - if the architecture and training entrypoints resolve to the same file, the submission is rejected.`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Source: `,_jsx(_components.code,{children:`src/prism_challenge/evaluator/components.py:99-103`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`parameter-cap`,children:`Parameter cap`}),`\n`,_jsxs(_components.p,{children:[`The realized model is capped at `,_jsx(_components.strong,{children:`150M parameters`}),` (`,_jsx(_components.code,{children:`max_parameters = 150_000_000`}),`). The cap is enforced statically at forced-seed instantiation and re-checked inside the container against the model the runner actually trained.`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Source: `,_jsx(_components.code,{children:`src/prism_challenge/evaluator/interface.py:26`}),`; `,_jsx(_components.code,{children:`src/prism_challenge/evaluator/container.py:1149-1176`}),`; `,_jsx(_components.code,{children:`docs/submissions.md:6`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`token-geometry`,children:`Token geometry`}),`\n`,_jsxs(_components.p,{children:[`The context exposes a default token-id geometry the model must respect: `,_jsx(_components.code,{children:`vocab_size = 4096`}),` and `,_jsx(_components.code,{children:`sequence_length = 128`}),` (`,_jsx(_components.code,{children:`max_seq_len`}),`).`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Source: `,_jsx(_components.code,{children:`src/prism_challenge/evaluator/interface.py:23-24`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`ast-sandbox`,children:`AST sandbox`}),`\n`,_jsxs(_components.p,{children:[`Both scripts pass an AST sandbox of hard blocks before any GPU work. Unsafe imports, network access, arbitrary filesystem access, and deserialization escapes are rejected. `,_jsx(_components.code,{children:`build_model`}),` must stay pure: it must not read data, open files, touch the network, or reference the dataset.`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Source: `,_jsx(_components.code,{children:`docs/miner/README.md:39-41`}),`, `,_jsx(_components.code,{children:`:124-125`}),`; `,_jsx(_components.code,{children:`docs/submissions.md:24-26`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`locked-data-no-network`,children:`Locked data, no network`}),`\n`,_jsxs(_components.p,{children:[`The train split is exposed read-only at `,_jsx(_components.code,{children:`ctx.data_dir`}),`; the `,_jsx(_components.code,{children:`val`}),`/`,_jsx(_components.code,{children:`test`}),` splits are secret and never exposed to your script. The eval container runs with `,_jsx(_components.code,{children:`network=none`}),`, `,_jsx(_components.code,{children:`HF_HUB_OFFLINE=1`}),`, and `,_jsx(_components.code,{children:`HF_DATASETS_OFFLINE=1`}),`, so there is no network during training. Read raw text from `,_jsx(_components.code,{children:`ctx.data_dir`}),`, tokenize with your own tokenizer or a pre-staged reference, and fail closed if the locked data is missing rather than fabricating data.`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Source: `,_jsx(_components.code,{children:`docs/submissions.md:83-94`}),`; `,_jsx(_components.code,{children:`docs/miner/README.md:76-81`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`single-node-multi-gpu-bounds`,children:`Single-node multi-GPU bounds`}),`\n`,_jsxs(_components.p,{children:[`PRISM is `,_jsx(_components.strong,{children:`single-node`}),` only. Runs use 1-8 GPUs on one node, and the official scored run uses `,_jsx(_components.code,{children:`torchrun --standalone --nnodes=1 --nproc-per-node=1`}),` (the `,_jsx(_components.code,{children:`nproc=1`}),` path, since one physical GPU exists). Requests above 8 GPUs or for multiple nodes are rejected.`]}),`\n`,_jsxs(_components.p,{children:[`A correct `,_jsx(_components.code,{children:`training.py`}),`:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`calls `,_jsx(_components.code,{children:`init_process_group`}),` (nccl on GPU) and `,_jsx(_components.code,{children:`set_device(local_rank)`}),`;`]}),`\n`,_jsx(_components.li,{children:`wraps the model with DDP or FSDP and shards data per-rank;`}),`\n`,_jsx(_components.li,{children:`does rank-0-only logging and artifact writes;`}),`\n`,_jsxs(_components.li,{children:[`all-reduces any reported metrics, then `,_jsx(_components.code,{children:`barrier()`}),` and `,_jsx(_components.code,{children:`destroy_process_group()`}),` on exit;`]}),`\n`,_jsxs(_components.li,{children:[`also works correctly at `,_jsx(_components.code,{children:`world_size=1`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Multi-GPU correctness is validated off the single physical GPU with a static contract check and a gloo multi-rank functional test (world size 2 and 4 on CPU). True 8-GPU scaling is an accepted, unverifiable limitation on a one-GPU node.`}),`\n`,_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Source: `,_jsx(_components.code,{children:`docs/submissions.md:96-115`}),`; `,_jsx(_components.code,{children:`docs/scaling.md:22-46`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`writable-paths`,children:`Writable paths`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`ctx.artifacts_dir`}),` is the only writable path, and only rank 0 writes. The eval container is non-root with a read-only rootfs except `,_jsx(_components.code,{children:`artifacts_dir`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Source: `,_jsx(_components.code,{children:`docs/submissions.md:66`}),`; `,_jsx(_components.code,{children:`docs/architecture.md:100-102`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`compute-budget`,children:`Compute budget`}),`\n`,_jsx(_components.p,{children:`The score is compute-normalized; wall-clock is only a safety cap, enforced in layers - a graceful budget that stops the loop and scores the partial stream, a hard watchdog above it, and an outer broker timeout. A faster or larger GPU configuration does not change the ranking; it only changes how much of the budget the run can use.`}),`\n`,_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Source: `,_jsx(_components.code,{children:`docs/scaling.md:48-59`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`size-and-archive-limits`,children:`Size and archive limits`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Limit`}),_jsx(_components.th,{children:`Value`}),_jsx(_components.th,{children:`Source`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Max submission code size`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`max_code_bytes = 200000`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`config.example.yaml:12`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Epoch length`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`epoch_seconds = 21600`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`config.example.yaml:16`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`ZIP path traversal`}),_jsx(_components.td,{children:`rejected`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`docs/submissions.md:173-183`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`ZIP symlinks`}),_jsx(_components.td,{children:`rejected`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`docs/submissions.md:173-183`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`ZIP file count / total bytes`}),_jsx(_components.td,{children:`bounded`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`docs/submissions.md:173-183`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Allowed suffixes`}),_jsx(_components.td,{children:`approved text/code suffixes only`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`docs/submissions.md:173-183`})})]})]})]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`ZIP submissions are extracted defensively. Unsupported or unsafe archives are rejected before evaluation.`})}),`\n`,_jsx(Heading,{level:`2`,id:`llm-hard-gate`,children:`LLM hard gate`}),`\n`,_jsxs(_components.p,{children:[`A strong OpenRouter LLM reviews both scripts as a hard gate and can reject before any GPU work. A `,_jsx(_components.code,{children:`reject`}),` is terminal.`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.em,{children:[`Source: `,_jsx(_components.code,{children:`README.md:55`}),`; `,_jsx(_components.code,{children:`docs/miner/README.md:126`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/challenges/prism/submit`,children:`Submitting to PRISM`}),` for the manifest and `,_jsx(_components.a,{href:`/challenges/prism/scoring`,children:`Scoring`}),` for how a valid run is scored.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Constraints \u0026 limits","description":"The PRISM submission limits: the two-script contract, the 150M parameter cap, the AST sandbox, locked data with no network, and the single-node GPU bounds.","icon":"shield","href":"/challenges/prism/constraints"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Two-script contract","slug":"two-script-contract","depth":2,"children":[]},{"title":"Parameter cap","slug":"parameter-cap","depth":2,"children":[]},{"title":"Token geometry","slug":"token-geometry","depth":2,"children":[]},{"title":"AST sandbox","slug":"ast-sandbox","depth":2,"children":[]},{"title":"Locked data, no network","slug":"locked-data-no-network","depth":2,"children":[]},{"title":"Single-node multi-GPU bounds","slug":"single-node-multi-gpu-bounds","depth":2,"children":[]},{"title":"Writable paths","slug":"writable-paths","depth":2,"children":[]},{"title":"Compute budget","slug":"compute-budget","depth":2,"children":[]},{"title":"Size and archive limits","slug":"size-and-archive-limits","depth":2,"children":[]},{"title":"LLM hard gate","slug":"llm-hard-gate","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"base-645db1b8","siteName":"BASE","title":"BASE Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-18T12:09:09.732Z","originalFileLocation":"challenges/prism/constraints.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"The PRISM submission limits: the two-script contract, the 150M parameter cap, the AST sandbox, locked data with no network, and the single-node GPU bounds.\">\u003cmeta data-mint-head name=\"application-name\" content=\"BASE\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/base-645db1b8/nVfuJBQcLPmN-tbx/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/base-645db1b8/nVfuJBQcLPmN-tbx/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/base-645db1b8/nVfuJBQcLPmN-tbx/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/base-645db1b8/nVfuJBQcLPmN-tbx/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/base-645db1b8/nVfuJBQcLPmN-tbx/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/base-645db1b8/nVfuJBQcLPmN-tbx/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/base-645db1b8/nVfuJBQcLPmN-tbx/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/base-645db1b8/nVfuJBQcLPmN-tbx/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/base-645db1b8/nVfuJBQcLPmN-tbx/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"BASE Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Validators run BASE. Miners compete inside challenges on Bittensor netuid 100.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"BASE\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.joinbase.ai/challenges/prism/constraints\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://base-645db1b8.mintlify.site/images/og.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"BASE Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Validators run BASE. Miners compete inside challenges on Bittensor netuid 100.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://base-645db1b8.mintlify.site/images/og.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/base-645db1b8/nVfuJBQcLPmN-tbx/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"BASE\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#d91f35\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.joinbase.ai/challenges/prism/constraints\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/challenges/prism/constraints.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.joinbase.ai/#organization\",\"name\":\"BASE\",\"url\":\"https://docs.joinbase.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/base-645db1b8/dcP88DTFSAhrc5am/logo/light.svg?fit=max\u0026auto=format\u0026n=dcP88DTFSAhrc5am\u0026q=85\u0026s=65c07350752e0e50a1ddf844d0e46122\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.joinbase.ai#website\",\"name\":\"BASE\",\"url\":\"https://docs.joinbase.ai\",\"publisher\":{\"@id\":\"https://docs.joinbase.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.joinbase.ai/challenges/prism/constraints#webpage\",\"url\":\"https://docs.joinbase.ai/challenges/prism/constraints\",\"name\":\"Constraints \u0026 limits\",\"description\":\"The PRISM submission limits: the two-script contract, the 150M parameter cap, the AST sandbox, locked data with no network, and the single-node GPU bounds.\",\"dateModified\":\"2026-07-18T12:09:09.732Z\",\"isPartOf\":{\"@id\":\"https://docs.joinbase.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.joinbase.ai/challenges/prism/constraints#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.joinbase.ai/challenges/prism/constraints#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"PRISM\",\"item\":\"https://docs.joinbase.ai/challenges/prism/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Constraints \u0026 limits\",\"item\":\"https://docs.joinbase.ai/challenges/prism/constraints\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.joinbase.ai/challenges/prism/constraints#article\",\"headline\":\"Constraints \u0026 limits\",\"name\":\"Constraints \u0026 limits\",\"description\":\"The PRISM submission limits: the two-script contract, the 150M parameter cap, the AST sandbox, locked data with no network, and the single-node GPU bounds.\",\"url\":\"https://docs.joinbase.ai/challenges/prism/constraints\",\"mainEntityOfPage\":{\"@id\":\"https://docs.joinbase.ai/challenges/prism/constraints#webpage\"},\"image\":\"https://docs.joinbase.ai/images/og.png\",\"dateModified\":\"2026-07-18T12:09:09.732Z\",\"publisher\":{\"@id\":\"https://docs.joinbase.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.joinbase.ai#website\"}}]}\u003c/script>","siteName":"BASE","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/BaseIntelligence"}]},"tabs":[{"tab":"Overview","icon":"book-open","pages":[{"title":"Overview","href":""}]},{"tab":"Validators","icon":"shield-halved","pages":[{"title":"Validators","href":"/validators/overview"}]},{"tab":"Challenges","icon":"trophy","groups":[{"group":"Overview","pages":[{"title":"Challenges on BASE","href":"/challenges/overview"}]},{"group":"Agent Challenge","pages":[{"title":"Agent Challenge","href":"/challenges/agent-challenge/index"},{"title":"Agent Challenge quickstart","href":"/challenges/agent-challenge/quickstart"},{"title":"Submit an agent","href":"/challenges/agent-challenge/submit"},{"title":"Phala TDX attestation","href":"/challenges/agent-challenge/attestation-phala"},{"title":"Evaluation and scoring","href":"/challenges/agent-challenge/evaluation"},{"title":"RA-TLS golden key release","href":"/challenges/agent-challenge/key-release"},{"title":"Agent Challenge troubleshooting","href":"/challenges/agent-challenge/troubleshooting"},{"title":"baseagent template","href":"/challenges/agent-challenge/baseagent"},{"title":"Agent architecture","icon":"sitemap","href":"/challenges/agent-challenge/architecture"},{"title":"Agent configuration","href":"/challenges/agent-challenge/configuration"},{"title":"Tools \u0026 capabilities","icon":"screwdriver-wrench","href":"/challenges/agent-challenge/tools"},{"title":"Best practices","href":"/challenges/agent-challenge/best-practices"}]},{"group":"PRISM","pages":[{"title":"PRISM overview","icon":"microscope","href":"/challenges/prism/overview"},{"title":"PRISM quickstart","icon":"rocket","href":"/challenges/prism/quickstart"},{"title":"How PRISM works","icon":"gears","href":"/challenges/prism/how-it-works"},{"title":"Submitting to PRISM","icon":"upload","href":"/challenges/prism/submit"},{"title":"Providing context","icon":"cube","href":"/challenges/prism/context"},{"title":"Scoring","description":"How PRISM scores a submission: prequential bits-per-byte, the held-out delta tie-breaker, the anti-memorization gap, anomaly zeroing, and weights.","icon":"chart-line","href":"/challenges/prism/scoring"},{"title":"Constraints \u0026 limits","icon":"shield","href":"/challenges/prism/constraints"},{"title":"Examples","description":"A complete, runnable two-script PRISM bundle: the tiny ~1M-parameter example with architecture.py, training.py, and prism.yaml.","icon":"code","href":"/challenges/prism/examples"},{"title":"PRISM API","icon":"code-branch","href":"/challenges/prism/api"},{"title":"PRISM challenge operators","icon":"server","href":"/challenges/prism/operators"}]},{"group":"Additional challenges","pages":[{"title":"Bounty Challenge","href":"/challenges/bounty-challenge"},{"title":"Data Fabrication Challenge","href":"/challenges/data-fabrication"},{"title":"Agent SWE Challenge","href":"/challenges/agent-swe"}]},{"group":"Build a challenge","pages":[{"title":"Creating a challenge","href":"/challenges/creating"},{"title":"Challenge SDK","href":"/challenges/sdk"}]}]},{"tab":"Miner hub","icon":"microchip","pages":[{"title":"Miner hub","href":"/miners/overview"}]},{"tab":"Reference","icon":"code","pages":[{"title":"Reference","href":"/reference/cli"}]},{"tab":"Architecture","icon":"sitemap","pages":[{"title":"Architecture","href":"/architecture/overview"}]}]},"basePath":"","title":"BASE Documentation","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}