Generators propose candidate sequences during optimization. Where constraints define the requirements and optimizers orchestrate the search, generators determine where new candidate sequences come from.Every optimization step begins with generators proposing candidates. A generator takes the current sequences in a Segment, applies its strategy (random mutation, protein language model, structure-conditioned design), and fills the proposal_sequences pool for the optimizer to evaluate.
result_sequencesGeneratorproposal_sequencesOptimizerConstraintsinputsamplescoreselect best
result_sequencesGeneratorproposal_sequencesOptimizerConstraintsinputsamplescoreselect best
Proto organizes generators by how they produce sequences. The three most common categories are below; a fourth, gradient-based generation (PositionWeightGenerator), produces differentiable position weights for the Gradient optimizer. Each category makes different trade-offs between speed, biological realism, and required prior knowledge.
Mutation
Autoregressive
Inverse Folding
Refine existing sequences by modifying selected positions.Mutation generators start from an existing sequence and introduce changes, either uniformly random or guided by a protein language model’s uncertainty estimates. Most require a starting sequence (ESM2Generator, for example, raises if the segment has none); the random generators (RandomProteinGenerator, RandomNucleotideGenerator) are the exception and initialize one automatically when none is provided.
MKTAYLLIGL…MKTAYVLIGL…mutate positions
MKTAYLLIGL…MKTAYVLIGL…mutate positions
When to use: A starting sequence is available and the goal is to refine it. This is the most common category for iterative optimization.
See the Generator Reference for all available mutation generators and their configuration options.
Generate sequences from scratch, token by token (left-to-right).Autoregressive generators use large language models trained on biological sequences to generate entirely new sequences. They don’t need a starting sequence; they create one from a prompt or from nothing.
ATGATGCCTGAA…2000bpgenerate
ATGATGCCTGAA…2000bpgenerate
When to use: Novel sequences are needed (especially long DNA), or the goal is to sample from the model’s learned distribution over natural sequences.
Autoregressive generators overwrite any existing sequences in the segment. If the segment already has input sequences, they will be replaced.
See the Generator Reference for all available autoregressive generators and their configuration options.
Design sequences that fold into a target 3D structure.Inverse folding generators solve the inverse protein design problem: given a desired backbone structure (as a PDB file), predict the amino acid sequence most likely to fold into that shape. They don’t need a starting sequence; unknown positions are initialized as X.
target.pdb(3D structure)MKTAYLLIGL…inverse fold
target.pdb(3D structure)MKTAYLLIGL…inverse fold
When to use: A target protein structure (from experiment or computational design) is available, and the goal is to find sequences that fold into it.
In multi-segment constructs, different generators can be assigned to different segments. Each generator independently proposes candidates for its assigned segment:
python
from proto_language.core import Segment, Constructfrom proto_language.optimizer import MCMCOptimizer, MCMCOptimizerConfig# Two segments with different generation strategiespromoter = Segment(length=200, sequence_type="dna", label="promoter")coding_seq = Segment(length=300, sequence_type="dna", label="cds")construct = Construct([promoter, coding_seq])# Assign different generators to each segmentgen_promoter = RandomNucleotideGenerator( RandomNucleotideGeneratorConfig(masking_strategy=MaskingStrategy(num_mutations=20)))gen_cds = RandomNucleotideGenerator( RandomNucleotideGeneratorConfig(masking_strategy=MaskingStrategy(num_mutations=6)))gen_promoter.assign(promoter)gen_cds.assign(coding_seq)optimizer = MCMCOptimizer( constructs=[construct], generators=[gen_promoter, gen_cds], constraints=[...], config=MCMCOptimizerConfig(num_steps=500, num_results=5, proposals_per_result=10),)
Use different mutation counts for different segments. Conserved regions (like coding sequences) benefit from fewer mutations per step, while exploratory regions (like promoters) can tolerate more.
GPU generators process multiple proposal sequences per forward pass. The batch_size config parameter controls how many sequences are sent to the GPU at once. All generators default to batch_size=1 (sequential processing); increase it to enable batching.The framework splits the full set of proposals into chunks of batch_size and processes each chunk on the GPU. For example, if the optimizer requests 50 proposals and batch_size=16, the generator runs 4 forward passes (16 + 16 + 16 + 2).
If GPU out-of-memory (OOM) errors occur, reduce the generator’s batch_size in its config. This is especially common with long sequences or large models. See the Generator Reference for per-generator configuration details and available parameters.
{"docsConfig":{"theme":"almond","$schema":"https://mintlify.com/docs.json","name":"Proto","description":"Programmable biology: a constraint-based optimization language with 120+ bioinformatics tools","colors":{"primary":"#046e7a","light":"#8EBEC3","dark":"#344649"},"logo":{"light":"https://mintcdn.com/bio-pro/KVh0EKV-IKblvXR8/assets/logo/evo-logo-light.svg?fit=max\u0026auto=format\u0026n=KVh0EKV-IKblvXR8\u0026q=85\u0026s=0cb66034ba45618505501aee6ea5f5c1","dark":"https://mintcdn.com/bio-pro/KVh0EKV-IKblvXR8/assets/logo/evo-logo-dark.svg?fit=max\u0026auto=format\u0026n=KVh0EKV-IKblvXR8\u0026q=85\u0026s=2c9e23a14635e60384a434e220788f54","href":"/introduction"},"favicon":"https://mintcdn.com/bio-pro/cMLt8hAqaP9M3LKy/favicon.svg?fit=max\u0026auto=format\u0026n=cMLt8hAqaP9M3LKy\u0026q=85\u0026s=ab2e630ea42234d29fd363192175b50b","appearance":{},"navbar":{"links":[{"icon":"github","href":"https://github.com/evo-design","label":"GitHub"}],"primary":{"type":"button","label":"Design with Proto","href":"https://proto.evodesign.org"}},"footer":{"socials":{"github":"https://github.com/evo-design"}},"search":{"prompt":"Search docs"},"seo":{"metatags":{"og:image":"https://proto-bio.github.io/proto-assets/covers/open-wings-code/social.png","twitter:image":"https://proto-bio.github.io/proto-assets/covers/open-wings-code/social.png","twitter:card":"summary_large_image"}},"fonts":{"family":"Geist"},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"bio-pro","hasAudioNarration":false,"actualSubdomain":"bio-pro","customDomains":["proto.evodesign.org"],"gitSource":{"type":"github","owner":"proto-bio","repo":"proto-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae7910dee23c3f33b1e0f53","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Tools","count":161},{"language":"default","tag":"Language","count":139},{"language":"default","tag":"Tool Catalog","count":87},{"language":"default","tag":"Constraints","count":85},{"language":"default","tag":"Organizations","count":57},{"language":"default","tag":"Protein Structure","count":33},{"language":"default","tag":"Sequence Scoring","count":17},{"language":"default","tag":"Generators","count":17},{"language":"default","tag":"Sequence Annotation","count":16},{"language":"default","tag":"Language Guides","count":16}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"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":"editor-metadata","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":"custom.css","href":"/docs/_mintlify/custom/bio-pro/0fa97d7e2a69076e/custom.css"}],"page":{"pagePath":"language/concepts/generators","slug":"/language/concepts/generators","pageMetadata":{"title":"Generators","description":"Components that propose candidate sequences during optimization","icon":"cpu","href":"/language/concepts/generators"},"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: \"Components that propose candidate sequences during optimization\"\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`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,Tab,Tabs,Tip,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(`div`,{class:`card-strip-wrapper`,children:_jsxs(`div`,{class:`card-strip`,\"data-duration\":`102`,children:[_jsx(_components.a,{href:`/language/generators/freebindcraft`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/freebindcraft/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/evo1`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/evo1/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/progen2`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/progen2/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/random-nucleotide`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/random-nucleotide/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/fampnn`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/fampnn/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/esm3`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/esm3/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/mpnn-mutation`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/mpnn-mutation/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/random-protein`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/random-protein/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/ligandmpnn`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/ligandmpnn/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/msa`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/msa/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/esm2`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/esm2/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/proteinmpnn`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/proteinmpnn/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/evo2`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/evo2/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/position-weight`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/position-weight/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/rfdiffusion-mpnn-binder`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/rfdiffusion-mpnn-binder/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/codonfm`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/codonfm/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/semigreedy-mutation`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/semigreedy-mutation/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/freebindcraft`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/freebindcraft/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/evo1`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/evo1/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/progen2`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/progen2/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/random-nucleotide`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/random-nucleotide/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/fampnn`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/fampnn/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/esm3`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/esm3/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/mpnn-mutation`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/mpnn-mutation/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/random-protein`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/random-protein/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/ligandmpnn`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/ligandmpnn/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/msa`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/msa/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/esm2`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/esm2/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/proteinmpnn`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/proteinmpnn/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/evo2`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/evo2/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/position-weight`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/position-weight/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/rfdiffusion-mpnn-binder`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/rfdiffusion-mpnn-binder/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/codonfm`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/codonfm/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/semigreedy-mutation`,class:`card-strip-item`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/semigreedy-mutation/carousel.png`,alt:``,loading:`lazy`})})]})}),`\n`,_jsx(Heading,{level:`1`,id:`generators`,children:`Generators`}),`\n`,_jsxs(_components.p,{children:[`Generators propose candidate sequences during optimization. Where `,_jsx(_components.a,{href:`/language/concepts/constraints`,children:`constraints`}),` define the requirements and `,_jsx(_components.a,{href:`/language/concepts/optimizers`,children:`optimizers`}),` orchestrate the search, generators determine where new candidate sequences come from.`]}),`\n`,_jsxs(_components.p,{children:[`Every optimization step begins with generators proposing candidates. A generator takes the current sequences in a `,_jsx(_components.a,{href:`/language/concepts/segments`,children:`Segment`}),`, applies its strategy (random mutation, protein language model, structure-conditioned design), and fills the `,_jsx(_components.code,{children:`proposal_sequences`}),` pool for the optimizer to evaluate.`]}),`\n`,_jsx(`div`,{className:`mint-block dark:mint-hidden`,children:_jsxs(`svg`,{viewBox:`0 0 860 300`,xmlns:`http://www.w3.org/2000/svg`,role:`img`,\"aria-label\":`Generator optimization loop`,style:{width:`100%`,height:`auto`,display:`block`},children:[_jsxs(`defs`,{children:[_jsx(`pattern`,{id:`gridgenerators1L`,width:`22`,height:`22`,patternUnits:`userSpaceOnUse`,children:_jsx(`circle`,{cx:`2`,cy:`2`,r:`1.2`,fill:`#344649`,fillOpacity:`0.10`})}),_jsx(`marker`,{id:`arrgenerators1L`,viewBox:`0 0 10 10`,refX:`8.5`,refY:`5`,markerWidth:`6.5`,markerHeight:`6.5`,orient:`auto-start-reverse`,children:_jsx(`path`,{d:`M0,0 L10,5 L0,10 L3,5 z`,fill:`#768b8e`})})]}),_jsx(`rect`,{x:`12`,y:`12`,width:`836`,height:`276`,rx:`16`,fill:`#f9fcfc`,stroke:`#dee9e8`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`12`,y:`12`,width:`836`,height:`276`,rx:`16`,fill:`url(#gridgenerators1L)`}),_jsx(`path`,{d:`M234,98 L333,98`,fill:`none`,stroke:`#9eb4b2`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators1L)`}),_jsx(`path`,{d:`M525,98 L624,98`,fill:`none`,stroke:`#9eb4b2`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators1L)`}),_jsx(`path`,{d:`M721,130 L721,198`,fill:`none`,stroke:`#9eb4b2`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators1L)`}),_jsx(`path`,{d:`M626,232 L236,232`,fill:`none`,stroke:`#9eb4b2`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators1L)`}),_jsx(`path`,{d:`M139,200 L139,132`,fill:`none`,stroke:`#9eb4b2`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators1L)`}),_jsx(`rect`,{x:`44`,y:`66`,width:`190`,height:`64`,rx:`10`,fill:`#f4f9f9`,stroke:`#dbe6e4`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`54`,y:`78`,width:`4`,height:`40`,rx:`2`,fill:`#2f8f6b`}),_jsx(`text`,{x:`139`,y:`104`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#1d2c2f`,textAnchor:`middle`,children:`result_sequences`}),_jsx(`rect`,{x:`335`,y:`66`,width:`190`,height:`64`,rx:`10`,fill:`#046e7a`}),_jsx(`rect`,{x:`345`,y:`78`,width:`4`,height:`40`,rx:`2`,fill:`#bfe2e7`}),_jsx(`text`,{x:`430`,y:`104`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`14`,fontWeight:`600`,fill:`#ffffff`,textAnchor:`middle`,children:`Generator`}),_jsx(`rect`,{x:`626`,y:`66`,width:`190`,height:`64`,rx:`10`,fill:`#f4f9f9`,stroke:`#dbe6e4`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`636`,y:`78`,width:`4`,height:`40`,rx:`2`,fill:`#046e7a`}),_jsx(`text`,{x:`721`,y:`104`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#1d2c2f`,textAnchor:`middle`,children:`proposal_sequences`}),_jsx(`rect`,{x:`44`,y:`200`,width:`190`,height:`64`,rx:`10`,fill:`#eef2f4`,stroke:`#dbe3e6`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`54`,y:`212`,width:`4`,height:`40`,rx:`2`,fill:`#768b8e`}),_jsx(`text`,{x:`139`,y:`238`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`14`,fontWeight:`600`,fill:`#344649`,textAnchor:`middle`,children:`Optimizer`}),_jsx(`rect`,{x:`626`,y:`200`,width:`190`,height:`64`,rx:`10`,fill:`#eef2f4`,stroke:`#dbe3e6`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`636`,y:`212`,width:`4`,height:`40`,rx:`2`,fill:`#768b8e`}),_jsx(`text`,{x:`721`,y:`238`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`14`,fontWeight:`600`,fill:`#344649`,textAnchor:`middle`,children:`Constraints`}),_jsxs(`g`,{fill:`#ffffff`,stroke:`#9eb4b2`,strokeWidth:`1.4`,children:[_jsx(`circle`,{cx:`234`,cy:`98`,r:`3.2`}),_jsx(`circle`,{cx:`335`,cy:`98`,r:`3.2`}),_jsx(`circle`,{cx:`525`,cy:`98`,r:`3.2`}),_jsx(`circle`,{cx:`626`,cy:`98`,r:`3.2`}),_jsx(`circle`,{cx:`721`,cy:`130`,r:`3.2`}),_jsx(`circle`,{cx:`721`,cy:`200`,r:`3.2`}),_jsx(`circle`,{cx:`626`,cy:`232`,r:`3.2`}),_jsx(`circle`,{cx:`234`,cy:`232`,r:`3.2`}),_jsx(`circle`,{cx:`139`,cy:`200`,r:`3.2`}),_jsx(`circle`,{cx:`139`,cy:`130`,r:`3.2`})]}),_jsx(`rect`,{x:`260`,y:`87.25`,width:`50`,height:`21.5`,rx:`6`,fill:`#f9fcfc`,stroke:`#e2e9ea`,strokeWidth:`1`}),_jsx(`text`,{x:`285`,y:`102`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#506467`,textAnchor:`middle`,children:`input`}),_jsx(`rect`,{x:`547`,y:`87.25`,width:`56`,height:`21.5`,rx:`6`,fill:`#f9fcfc`,stroke:`#e2e9ea`,strokeWidth:`1`}),_jsx(`text`,{x:`575`,y:`102`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#506467`,textAnchor:`middle`,children:`sample`}),_jsx(`rect`,{x:`405`,y:`221.25`,width:`50`,height:`21.5`,rx:`6`,fill:`#f9fcfc`,stroke:`#e2e9ea`,strokeWidth:`1`}),_jsx(`text`,{x:`430`,y:`236`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#506467`,textAnchor:`middle`,children:`score`}),_jsx(`rect`,{x:`96`,y:`155.25`,width:`86`,height:`21.5`,rx:`6`,fill:`#f9fcfc`,stroke:`#e2e9ea`,strokeWidth:`1`}),_jsx(`text`,{x:`139`,y:`170`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#506467`,textAnchor:`middle`,children:`select best`})]})}),`\n`,_jsx(`div`,{className:`mint-hidden dark:mint-block`,children:_jsxs(`svg`,{viewBox:`0 0 860 300`,xmlns:`http://www.w3.org/2000/svg`,role:`img`,\"aria-label\":`Generator optimization loop`,style:{width:`100%`,height:`auto`,display:`block`},children:[_jsxs(`defs`,{children:[_jsx(`pattern`,{id:`gridgenerators1D`,width:`22`,height:`22`,patternUnits:`userSpaceOnUse`,children:_jsx(`circle`,{cx:`2`,cy:`2`,r:`1.2`,fill:`#9eb4b2`,fillOpacity:`0.10`})}),_jsx(`marker`,{id:`arrgenerators1D`,viewBox:`0 0 10 10`,refX:`8.5`,refY:`5`,markerWidth:`6.5`,markerHeight:`6.5`,orient:`auto-start-reverse`,children:_jsx(`path`,{d:`M0,0 L10,5 L0,10 L3,5 z`,fill:`#7e9498`})})]}),_jsx(`rect`,{x:`12`,y:`12`,width:`836`,height:`276`,rx:`16`,fill:`#0e1718`,stroke:`#2b3c3e`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`12`,y:`12`,width:`836`,height:`276`,rx:`16`,fill:`url(#gridgenerators1D)`}),_jsx(`path`,{d:`M234,98 L333,98`,fill:`none`,stroke:`#566b6e`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators1D)`}),_jsx(`path`,{d:`M525,98 L624,98`,fill:`none`,stroke:`#566b6e`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators1D)`}),_jsx(`path`,{d:`M721,130 L721,198`,fill:`none`,stroke:`#566b6e`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators1D)`}),_jsx(`path`,{d:`M626,232 L236,232`,fill:`none`,stroke:`#566b6e`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators1D)`}),_jsx(`path`,{d:`M139,200 L139,132`,fill:`none`,stroke:`#566b6e`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators1D)`}),_jsx(`rect`,{x:`44`,y:`66`,width:`190`,height:`64`,rx:`10`,fill:`#1a2a2b`,stroke:`#33474a`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`54`,y:`78`,width:`4`,height:`40`,rx:`2`,fill:`#37a07c`}),_jsx(`text`,{x:`139`,y:`104`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#eef5f4`,textAnchor:`middle`,children:`result_sequences`}),_jsx(`rect`,{x:`335`,y:`66`,width:`190`,height:`64`,rx:`10`,fill:`#0a7e8c`}),_jsx(`rect`,{x:`345`,y:`78`,width:`4`,height:`40`,rx:`2`,fill:`#c0e6ea`}),_jsx(`text`,{x:`430`,y:`104`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`14`,fontWeight:`600`,fill:`#ffffff`,textAnchor:`middle`,children:`Generator`}),_jsx(`rect`,{x:`626`,y:`66`,width:`190`,height:`64`,rx:`10`,fill:`#1a2a2b`,stroke:`#33474a`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`636`,y:`78`,width:`4`,height:`40`,rx:`2`,fill:`#0a7e8c`}),_jsx(`text`,{x:`721`,y:`104`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#eef5f4`,textAnchor:`middle`,children:`proposal_sequences`}),_jsx(`rect`,{x:`44`,y:`200`,width:`190`,height:`64`,rx:`10`,fill:`#1b2829`,stroke:`#33474a`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`54`,y:`212`,width:`4`,height:`40`,rx:`2`,fill:`#7e9498`}),_jsx(`text`,{x:`139`,y:`238`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`14`,fontWeight:`600`,fill:`#d6e1df`,textAnchor:`middle`,children:`Optimizer`}),_jsx(`rect`,{x:`626`,y:`200`,width:`190`,height:`64`,rx:`10`,fill:`#1b2829`,stroke:`#33474a`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`636`,y:`212`,width:`4`,height:`40`,rx:`2`,fill:`#7e9498`}),_jsx(`text`,{x:`721`,y:`238`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`14`,fontWeight:`600`,fill:`#d6e1df`,textAnchor:`middle`,children:`Constraints`}),_jsxs(`g`,{fill:`#13201f`,stroke:`#566b6e`,strokeWidth:`1.4`,children:[_jsx(`circle`,{cx:`234`,cy:`98`,r:`3.2`}),_jsx(`circle`,{cx:`335`,cy:`98`,r:`3.2`}),_jsx(`circle`,{cx:`525`,cy:`98`,r:`3.2`}),_jsx(`circle`,{cx:`626`,cy:`98`,r:`3.2`}),_jsx(`circle`,{cx:`721`,cy:`130`,r:`3.2`}),_jsx(`circle`,{cx:`721`,cy:`200`,r:`3.2`}),_jsx(`circle`,{cx:`626`,cy:`232`,r:`3.2`}),_jsx(`circle`,{cx:`234`,cy:`232`,r:`3.2`}),_jsx(`circle`,{cx:`139`,cy:`200`,r:`3.2`}),_jsx(`circle`,{cx:`139`,cy:`130`,r:`3.2`})]}),_jsx(`rect`,{x:`260`,y:`87.25`,width:`50`,height:`21.5`,rx:`6`,fill:`#13201f`,stroke:`#33474a`,strokeWidth:`1`}),_jsx(`text`,{x:`285`,y:`102`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#9eb4b2`,textAnchor:`middle`,children:`input`}),_jsx(`rect`,{x:`547`,y:`87.25`,width:`56`,height:`21.5`,rx:`6`,fill:`#13201f`,stroke:`#33474a`,strokeWidth:`1`}),_jsx(`text`,{x:`575`,y:`102`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#9eb4b2`,textAnchor:`middle`,children:`sample`}),_jsx(`rect`,{x:`405`,y:`221.25`,width:`50`,height:`21.5`,rx:`6`,fill:`#13201f`,stroke:`#33474a`,strokeWidth:`1`}),_jsx(`text`,{x:`430`,y:`236`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#9eb4b2`,textAnchor:`middle`,children:`score`}),_jsx(`rect`,{x:`96`,y:`155.25`,width:`86`,height:`21.5`,rx:`6`,fill:`#13201f`,stroke:`#33474a`,strokeWidth:`1`}),_jsx(`text`,{x:`139`,y:`170`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#9eb4b2`,textAnchor:`middle`,children:`select best`})]})}),`\n`,_jsx(Heading,{level:`2`,id:`generator-categories`,children:`Generator Categories`}),`\n`,_jsxs(_components.p,{children:[`Proto organizes generators by `,_jsx(_components.em,{children:`how`}),` they produce sequences. The three most common categories are below; a fourth, gradient-based generation (`,_jsx(_components.code,{children:`PositionWeightGenerator`}),`), produces differentiable position weights for the `,_jsx(_components.a,{href:`/language/optimizers/gradient`,children:`Gradient optimizer`}),`. Each category makes different trade-offs between speed, biological realism, and required prior knowledge.`]}),`\n`,_jsxs(Tabs,{children:[_jsxs(Tab,{title:`Mutation`,id:`mutation`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Refine existing sequences by modifying selected positions.`})}),_jsxs(_components.p,{children:[`Mutation generators start from an existing sequence and introduce changes, either uniformly random or guided by a protein language model’s uncertainty estimates. Most require a starting sequence (`,_jsx(_components.code,{children:`ESM2Generator`}),`, for example, raises if the segment has none); the random generators (`,_jsx(_components.code,{children:`RandomProteinGenerator`}),`, `,_jsx(_components.code,{children:`RandomNucleotideGenerator`}),`) are the exception and initialize one automatically when none is provided.`]}),_jsx(`div`,{className:`mint-block dark:mint-hidden`,children:_jsxs(`svg`,{viewBox:`0 0 760 210`,xmlns:`http://www.w3.org/2000/svg`,role:`img`,\"aria-label\":`Mutation generator transforms a sequence`,style:{width:`100%`,height:`auto`,display:`block`},children:[_jsxs(`defs`,{children:[_jsx(`pattern`,{id:`gridgenerators2L`,width:`22`,height:`22`,patternUnits:`userSpaceOnUse`,children:_jsx(`circle`,{cx:`2`,cy:`2`,r:`1.2`,fill:`#344649`,fillOpacity:`0.10`})}),_jsx(`marker`,{id:`arrgenerators2L`,viewBox:`0 0 10 10`,refX:`8.5`,refY:`5`,markerWidth:`6.5`,markerHeight:`6.5`,orient:`auto-start-reverse`,children:_jsx(`path`,{d:`M0,0 L10,5 L0,10 L3,5 z`,fill:`#768b8e`})})]}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`#f9fcfc`,stroke:`#dee9e8`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`url(#gridgenerators2L)`}),_jsx(`path`,{d:`M284,105 L474,105`,fill:`none`,stroke:`#9eb4b2`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators2L)`}),_jsx(`rect`,{x:`64`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#eef2f4`,stroke:`#dbe3e6`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`160`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#768b8e`}),_jsxs(`text`,{x:`174`,y:`110`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#344649`,textAnchor:`middle`,children:[`MKTAY`,_jsx(`tspan`,{fontWeight:`800`,fill:`#046e7a`,children:`L`}),`LIGL…`]}),_jsx(`rect`,{x:`476`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#046e7a`}),_jsx(`rect`,{x:`572`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#bfe2e7`}),_jsxs(`text`,{x:`586`,y:`110`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#ffffff`,textAnchor:`middle`,children:[`MKTAY`,_jsx(`tspan`,{fontWeight:`800`,fill:`#bfe2e7`,children:`V`}),`LIGL…`]}),_jsxs(`g`,{fill:`#ffffff`,stroke:`#9eb4b2`,strokeWidth:`1.4`,children:[_jsx(`circle`,{cx:`284`,cy:`105`,r:`3.2`}),_jsx(`circle`,{cx:`476`,cy:`105`,r:`3.2`})]}),_jsx(`rect`,{x:`322`,y:`94.25`,width:`116`,height:`21.5`,rx:`6`,fill:`#f9fcfc`,stroke:`#e2e9ea`,strokeWidth:`1`}),_jsx(`text`,{x:`380`,y:`109`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#506467`,textAnchor:`middle`,children:`mutate positions`})]})}),_jsx(`div`,{className:`mint-hidden dark:mint-block`,children:_jsxs(`svg`,{viewBox:`0 0 760 210`,xmlns:`http://www.w3.org/2000/svg`,role:`img`,\"aria-label\":`Mutation generator transforms a sequence`,style:{width:`100%`,height:`auto`,display:`block`},children:[_jsxs(`defs`,{children:[_jsx(`pattern`,{id:`gridgenerators2D`,width:`22`,height:`22`,patternUnits:`userSpaceOnUse`,children:_jsx(`circle`,{cx:`2`,cy:`2`,r:`1.2`,fill:`#9eb4b2`,fillOpacity:`0.10`})}),_jsx(`marker`,{id:`arrgenerators2D`,viewBox:`0 0 10 10`,refX:`8.5`,refY:`5`,markerWidth:`6.5`,markerHeight:`6.5`,orient:`auto-start-reverse`,children:_jsx(`path`,{d:`M0,0 L10,5 L0,10 L3,5 z`,fill:`#7e9498`})})]}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`#0e1718`,stroke:`#2b3c3e`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`url(#gridgenerators2D)`}),_jsx(`path`,{d:`M284,105 L474,105`,fill:`none`,stroke:`#566b6e`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators2D)`}),_jsx(`rect`,{x:`64`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#1b2829`,stroke:`#33474a`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`160`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#7e9498`}),_jsxs(`text`,{x:`174`,y:`110`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#d6e1df`,textAnchor:`middle`,children:[`MKTAY`,_jsx(`tspan`,{fontWeight:`800`,fill:`#0a7e8c`,children:`L`}),`LIGL…`]}),_jsx(`rect`,{x:`476`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#0a7e8c`}),_jsx(`rect`,{x:`572`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#c0e6ea`}),_jsxs(`text`,{x:`586`,y:`110`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#ffffff`,textAnchor:`middle`,children:[`MKTAY`,_jsx(`tspan`,{fontWeight:`800`,fill:`#c0e6ea`,children:`V`}),`LIGL…`]}),_jsxs(`g`,{fill:`#13201f`,stroke:`#566b6e`,strokeWidth:`1.4`,children:[_jsx(`circle`,{cx:`284`,cy:`105`,r:`3.2`}),_jsx(`circle`,{cx:`476`,cy:`105`,r:`3.2`})]}),_jsx(`rect`,{x:`322`,y:`94.25`,width:`116`,height:`21.5`,rx:`6`,fill:`#13201f`,stroke:`#33474a`,strokeWidth:`1`}),_jsx(`text`,{x:`380`,y:`109`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#9eb4b2`,textAnchor:`middle`,children:`mutate positions`})]})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When to use:`}),` A starting sequence is available and the goal is to refine it. This is the most common category for iterative optimization.`]}),_jsx(CodeBlock,{filename:`python`,icon:`python`,numberOfLines:`8`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proto_language.generator `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RandomNucleotideGenerator, RandomNucleotideGeneratorConfig`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proto_tools.transforms.masking `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` MaskingStrategy`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`generator `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RandomNucleotideGenerator(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RandomNucleotideGeneratorConfig(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`masking_strategy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MaskingStrategy(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`num_mutations`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/language/generators/random-nucleotide`,children:`Generator Reference`}),` for all available mutation generators and their configuration options.`]})]}),_jsxs(Tab,{title:`Autoregressive`,id:`autoregressive`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Generate sequences from scratch, token by token (left-to-right).`})}),_jsx(_components.p,{children:`Autoregressive generators use large language models trained on biological sequences to generate entirely new sequences. They don’t need a starting sequence; they create one from a prompt or from nothing.`}),_jsx(`div`,{className:`mint-block dark:mint-hidden`,children:_jsxs(`svg`,{viewBox:`0 0 760 210`,xmlns:`http://www.w3.org/2000/svg`,role:`img`,\"aria-label\":`Autoregressive generator extends a sequence`,style:{width:`100%`,height:`auto`,display:`block`},children:[_jsxs(`defs`,{children:[_jsx(`pattern`,{id:`gridgenerators3L`,width:`22`,height:`22`,patternUnits:`userSpaceOnUse`,children:_jsx(`circle`,{cx:`2`,cy:`2`,r:`1.2`,fill:`#344649`,fillOpacity:`0.10`})}),_jsx(`marker`,{id:`arrgenerators3L`,viewBox:`0 0 10 10`,refX:`8.5`,refY:`5`,markerWidth:`6.5`,markerHeight:`6.5`,orient:`auto-start-reverse`,children:_jsx(`path`,{d:`M0,0 L10,5 L0,10 L3,5 z`,fill:`#768b8e`})})]}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`#f9fcfc`,stroke:`#dee9e8`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`url(#gridgenerators3L)`}),_jsx(`path`,{d:`M284,105 L474,105`,fill:`none`,stroke:`#9eb4b2`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators3L)`}),_jsx(`rect`,{x:`64`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#eef2f4`,stroke:`#dbe3e6`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`160`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#768b8e`}),_jsx(`text`,{x:`174`,y:`110`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#344649`,textAnchor:`middle`,children:`ATG`}),_jsx(`rect`,{x:`476`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#046e7a`}),_jsx(`rect`,{x:`572`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#bfe2e7`}),_jsx(`text`,{x:`586`,y:`110`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#ffffff`,textAnchor:`middle`,children:`ATGCCTGAA…2000bp`}),_jsxs(`g`,{fill:`#ffffff`,stroke:`#9eb4b2`,strokeWidth:`1.4`,children:[_jsx(`circle`,{cx:`284`,cy:`105`,r:`3.2`}),_jsx(`circle`,{cx:`476`,cy:`105`,r:`3.2`})]}),_jsx(`rect`,{x:`346`,y:`94.25`,width:`68`,height:`21.5`,rx:`6`,fill:`#f9fcfc`,stroke:`#e2e9ea`,strokeWidth:`1`}),_jsx(`text`,{x:`380`,y:`109`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#506467`,textAnchor:`middle`,children:`generate`})]})}),_jsx(`div`,{className:`mint-hidden dark:mint-block`,children:_jsxs(`svg`,{viewBox:`0 0 760 210`,xmlns:`http://www.w3.org/2000/svg`,role:`img`,\"aria-label\":`Autoregressive generator extends a sequence`,style:{width:`100%`,height:`auto`,display:`block`},children:[_jsxs(`defs`,{children:[_jsx(`pattern`,{id:`gridgenerators3D`,width:`22`,height:`22`,patternUnits:`userSpaceOnUse`,children:_jsx(`circle`,{cx:`2`,cy:`2`,r:`1.2`,fill:`#9eb4b2`,fillOpacity:`0.10`})}),_jsx(`marker`,{id:`arrgenerators3D`,viewBox:`0 0 10 10`,refX:`8.5`,refY:`5`,markerWidth:`6.5`,markerHeight:`6.5`,orient:`auto-start-reverse`,children:_jsx(`path`,{d:`M0,0 L10,5 L0,10 L3,5 z`,fill:`#7e9498`})})]}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`#0e1718`,stroke:`#2b3c3e`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`url(#gridgenerators3D)`}),_jsx(`path`,{d:`M284,105 L474,105`,fill:`none`,stroke:`#566b6e`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators3D)`}),_jsx(`rect`,{x:`64`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#1b2829`,stroke:`#33474a`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`160`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#7e9498`}),_jsx(`text`,{x:`174`,y:`110`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#d6e1df`,textAnchor:`middle`,children:`ATG`}),_jsx(`rect`,{x:`476`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#0a7e8c`}),_jsx(`rect`,{x:`572`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#c0e6ea`}),_jsx(`text`,{x:`586`,y:`110`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#ffffff`,textAnchor:`middle`,children:`ATGCCTGAA…2000bp`}),_jsxs(`g`,{fill:`#13201f`,stroke:`#566b6e`,strokeWidth:`1.4`,children:[_jsx(`circle`,{cx:`284`,cy:`105`,r:`3.2`}),_jsx(`circle`,{cx:`476`,cy:`105`,r:`3.2`})]}),_jsx(`rect`,{x:`346`,y:`94.25`,width:`68`,height:`21.5`,rx:`6`,fill:`#13201f`,stroke:`#33474a`,strokeWidth:`1`}),_jsx(`text`,{x:`380`,y:`109`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#9eb4b2`,textAnchor:`middle`,children:`generate`})]})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When to use:`}),` Novel sequences are needed (especially long DNA), or the goal is to sample from the model’s learned distribution over natural sequences.`]}),_jsx(Warning,{children:_jsx(_components.p,{children:`Autoregressive generators overwrite any existing sequences in the segment. If the segment already has input sequences, they will be replaced.`})}),_jsx(CodeBlock,{filename:`python`,icon:`python`,numberOfLines:`11`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`11`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proto_language.generator `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Evo2Generator, Evo2GeneratorConfig`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`generator `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Evo2Generator(`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Evo2GeneratorConfig(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` prompts`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ACGT\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` model_checkpoint`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"evo2_7b\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` temperature`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1.0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/language/generators/evo2`,children:`Generator Reference`}),` for all available autoregressive generators and their configuration options.`]})]}),_jsxs(Tab,{title:`Inverse Folding`,id:`inverse-folding`,children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`Design sequences that fold into a target 3D structure.`})}),_jsxs(_components.p,{children:[`Inverse folding generators solve the inverse protein design problem: given a desired backbone structure (as a PDB file), predict the amino acid sequence most likely to fold into that shape. They don’t need a starting sequence; unknown positions are initialized as `,_jsx(_components.code,{children:`X`}),`.`]}),_jsx(`div`,{className:`mint-block dark:mint-hidden`,children:_jsxs(`svg`,{viewBox:`0 0 760 210`,xmlns:`http://www.w3.org/2000/svg`,role:`img`,\"aria-label\":`Inverse folding generator designs a sequence from a structure`,style:{width:`100%`,height:`auto`,display:`block`},children:[_jsxs(`defs`,{children:[_jsx(`pattern`,{id:`gridgenerators4L`,width:`22`,height:`22`,patternUnits:`userSpaceOnUse`,children:_jsx(`circle`,{cx:`2`,cy:`2`,r:`1.2`,fill:`#344649`,fillOpacity:`0.10`})}),_jsx(`marker`,{id:`arrgenerators4L`,viewBox:`0 0 10 10`,refX:`8.5`,refY:`5`,markerWidth:`6.5`,markerHeight:`6.5`,orient:`auto-start-reverse`,children:_jsx(`path`,{d:`M0,0 L10,5 L0,10 L3,5 z`,fill:`#768b8e`})})]}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`#f9fcfc`,stroke:`#dee9e8`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`url(#gridgenerators4L)`}),_jsx(`path`,{d:`M284,105 L474,105`,fill:`none`,stroke:`#9eb4b2`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators4L)`}),_jsx(`rect`,{x:`64`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#eef2f4`,stroke:`#dbe3e6`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`160`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#768b8e`}),_jsx(`text`,{x:`174`,y:`101`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#344649`,textAnchor:`middle`,children:`target.pdb`}),_jsx(`text`,{x:`174`,y:`120`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11.5`,fontWeight:`400`,fill:`#768b8e`,textAnchor:`middle`,children:`(3D structure)`}),_jsx(`rect`,{x:`476`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#046e7a`}),_jsx(`rect`,{x:`572`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#bfe2e7`}),_jsx(`text`,{x:`586`,y:`110`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#ffffff`,textAnchor:`middle`,children:`MKTAYLLIGL…`}),_jsxs(`g`,{fill:`#ffffff`,stroke:`#9eb4b2`,strokeWidth:`1.4`,children:[_jsx(`circle`,{cx:`284`,cy:`105`,r:`3.2`}),_jsx(`circle`,{cx:`476`,cy:`105`,r:`3.2`})]}),_jsx(`rect`,{x:`334`,y:`94.25`,width:`92`,height:`21.5`,rx:`6`,fill:`#f9fcfc`,stroke:`#e2e9ea`,strokeWidth:`1`}),_jsx(`text`,{x:`380`,y:`109`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#506467`,textAnchor:`middle`,children:`inverse fold`})]})}),_jsx(`div`,{className:`mint-hidden dark:mint-block`,children:_jsxs(`svg`,{viewBox:`0 0 760 210`,xmlns:`http://www.w3.org/2000/svg`,role:`img`,\"aria-label\":`Inverse folding generator designs a sequence from a structure`,style:{width:`100%`,height:`auto`,display:`block`},children:[_jsxs(`defs`,{children:[_jsx(`pattern`,{id:`gridgenerators4D`,width:`22`,height:`22`,patternUnits:`userSpaceOnUse`,children:_jsx(`circle`,{cx:`2`,cy:`2`,r:`1.2`,fill:`#9eb4b2`,fillOpacity:`0.10`})}),_jsx(`marker`,{id:`arrgenerators4D`,viewBox:`0 0 10 10`,refX:`8.5`,refY:`5`,markerWidth:`6.5`,markerHeight:`6.5`,orient:`auto-start-reverse`,children:_jsx(`path`,{d:`M0,0 L10,5 L0,10 L3,5 z`,fill:`#7e9498`})})]}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`#0e1718`,stroke:`#2b3c3e`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`12`,y:`12`,width:`736`,height:`186`,rx:`16`,fill:`url(#gridgenerators4D)`}),_jsx(`path`,{d:`M284,105 L474,105`,fill:`none`,stroke:`#566b6e`,strokeWidth:`1.6`,markerEnd:`url(#arrgenerators4D)`}),_jsx(`rect`,{x:`64`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#1b2829`,stroke:`#33474a`,strokeWidth:`1.2`}),_jsx(`rect`,{x:`160`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#7e9498`}),_jsx(`text`,{x:`174`,y:`101`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#d6e1df`,textAnchor:`middle`,children:`target.pdb`}),_jsx(`text`,{x:`174`,y:`120`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11.5`,fontWeight:`400`,fill:`#9eb4b2`,textAnchor:`middle`,children:`(3D structure)`}),_jsx(`rect`,{x:`476`,y:`63`,width:`220`,height:`84`,rx:`10`,fill:`#0a7e8c`}),_jsx(`rect`,{x:`572`,y:`75`,width:`28`,height:`3.5`,rx:`2`,fill:`#c0e6ea`}),_jsx(`text`,{x:`586`,y:`110`,fontFamily:`'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace`,fontSize:`14`,fontWeight:`600`,fill:`#ffffff`,textAnchor:`middle`,children:`MKTAYLLIGL…`}),_jsxs(`g`,{fill:`#13201f`,stroke:`#566b6e`,strokeWidth:`1.4`,children:[_jsx(`circle`,{cx:`284`,cy:`105`,r:`3.2`}),_jsx(`circle`,{cx:`476`,cy:`105`,r:`3.2`})]}),_jsx(`rect`,{x:`334`,y:`94.25`,width:`92`,height:`21.5`,rx:`6`,fill:`#13201f`,stroke:`#33474a`,strokeWidth:`1`}),_jsx(`text`,{x:`380`,y:`109`,fontFamily:`Geist, ui-sans-serif, system-ui, -apple-system, sans-serif`,fontSize:`11`,fontWeight:`400`,fill:`#9eb4b2`,textAnchor:`middle`,children:`inverse fold`})]})}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`When to use:`}),` A target protein structure (from experiment or computational design) is available, and the goal is to find sequences that fold into it.`]}),_jsx(CodeBlock,{filename:`python`,icon:`python`,numberOfLines:`10`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proto_language.generator `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ProteinMPNNGenerator, ProteinMPNNGeneratorConfig`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`generator `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ProteinMPNNGenerator(`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ProteinMPNNGeneratorConfig(`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` structure_inputs`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"target.pdb\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` temperature`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0.1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` )`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),_jsxs(_components.p,{children:[`See the `,_jsx(_components.a,{href:`/language/generators/proteinmpnn`,children:`Generator Reference`}),` for all available inverse folding generators and their configuration options.`]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`assigning-generators-to-segments`,children:`Assigning Generators to Segments`}),`\n`,_jsxs(_components.p,{children:[`Before an optimizer can use a generator, it must be assigned to a specific Segment. This tells the generator `,_jsx(_components.em,{children:`which`}),` part of the construct to modify.`]}),`\n`,_jsx(CodeBlock,{filename:`python`,icon:`python`,numberOfLines:`14`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`14`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proto_language.core `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Segment`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proto_language.generator `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RandomNucleotideGenerator, RandomNucleotideGeneratorConfig`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proto_tools.transforms.masking `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` MaskingStrategy`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Create a segment`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`segment `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Segment(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`length`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`100`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`sequence_type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"dna\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Create and assign the generator`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`generator `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RandomNucleotideGenerator(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RandomNucleotideGeneratorConfig(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`masking_strategy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MaskingStrategy(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`num_mutations`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`generator.assign(segment)`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`assign()`}),` method validates compatibility:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`The segment’s `,_jsx(_components.code,{children:`sequence_type`}),` must be supported by the generator`]}),`\n`,_jsx(_components.li,{children:`Ligand segments cannot have generators assigned (they’re fixed)`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:`python`,icon:`python`,numberOfLines:`8`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# This works: ESM2 supports protein`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`protein_segment `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Segment(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`length`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`100`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`sequence_type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"protein\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`esm2_gen `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ESM2Generator(ESM2GeneratorConfig())`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`esm2_gen.assign(protein_segment)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# This raises ValueError: ESM2 doesn't support DNA`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`dna_segment `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Segment(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`length`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`100`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`sequence_type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"dna\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`esm2_gen.assign(dna_segment)`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`multiple-generators`,children:`Multiple Generators`}),`\n`,_jsx(_components.p,{children:`In multi-segment constructs, different generators can be assigned to different segments. Each generator independently proposes candidates for its assigned segment:`}),`\n`,_jsx(CodeBlock,{filename:`python`,icon:`python`,numberOfLines:`26`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`26`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proto_language.core `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Segment, Construct`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` proto_language.optimizer `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` MCMCOptimizer, MCMCOptimizerConfig`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Two segments with different generation strategies`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`promoter `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Segment(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`length`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`200`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`sequence_type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"dna\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`label`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"promoter\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`coding_seq `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Segment(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`length`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`300`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`sequence_type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"dna\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`label`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cds\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`construct `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Construct([promoter, coding_seq])`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# Assign different generators to each segment`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`gen_promoter `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RandomNucleotideGenerator(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RandomNucleotideGeneratorConfig(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`masking_strategy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MaskingStrategy(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`num_mutations`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`20`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`gen_cds `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RandomNucleotideGenerator(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` RandomNucleotideGeneratorConfig(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`masking_strategy`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MaskingStrategy(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`num_mutations`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`6`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`gen_promoter.assign(promoter)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`gen_cds.assign(coding_seq)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`optimizer `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` MCMCOptimizer(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` constructs`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[construct],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` generators`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[gen_promoter, gen_cds],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` constraints`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`[`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`...`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` config`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`MCMCOptimizerConfig(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`num_steps`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`500`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`num_results`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`proposals_per_result`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`Use different mutation counts for different segments. Conserved regions (like coding sequences) benefit from fewer mutations per step, while exploratory regions (like promoters) can tolerate more.`})}),`\n`,_jsx(Heading,{level:`2`,id:`gpu-memory-\u0026-batch-size`,children:`GPU Memory \u0026 Batch Size`}),`\n`,_jsxs(_components.p,{children:[`GPU generators process multiple proposal sequences per forward pass. The `,_jsx(_components.code,{children:`batch_size`}),` config parameter controls how many sequences are sent to the GPU at once. All generators default to `,_jsx(_components.code,{children:`batch_size=1`}),` (sequential processing); increase it to enable batching.`]}),`\n`,_jsxs(_components.p,{children:[`The framework splits the full set of proposals into chunks of `,_jsx(_components.code,{children:`batch_size`}),` and processes each chunk on the GPU. For example, if the optimizer requests 50 proposals and `,_jsx(_components.code,{children:`batch_size=16`}),`, the generator runs 4 forward passes (16 + 16 + 16 + 2).`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`If GPU out-of-memory (OOM) errors occur, reduce the generator’s `,_jsx(_components.code,{children:`batch_size`}),` in its config. This is especially common with long sequences or large models. See the `,_jsx(_components.a,{href:`/language/generators/esm2`,children:`Generator Reference`}),` for per-generator configuration details and available parameters.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next Steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Constraints`,icon:`square-function`,href:`/language/concepts/constraints`,children:_jsx(_components.p,{children:`Quality requirements that sequences must satisfy`})}),_jsx(Card,{title:`Optimizers`,icon:`chart-line`,href:`/language/concepts/optimizers`,children:_jsx(_components.p,{children:`Learn how optimizers coordinate generators and constraints`})}),_jsx(Card,{title:`Tools`,icon:`wrench`,href:`/language/concepts/tools`,children:_jsx(_components.p,{children:`Explore the bioinformatics tools that power generators`})}),_jsx(Card,{title:`Generator Reference`,icon:`code`,href:`/language/generators/random-nucleotide`,children:_jsx(_components.p,{children:`Full API reference for each generator`})})]}),`\n`,_jsx(Heading,{level:`2`,id:`generator-catalog`,children:`Generator Catalog`}),`\n`,_jsxs(`div`,{class:`tool-catalog-grid`,children:[_jsx(_components.a,{href:`/language/generators/codonfm`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/codonfm/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/esm2`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/esm2/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/esm3`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/esm3/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/evo1`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/evo1/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/evo2`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/evo2/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/fampnn`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/fampnn/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/freebindcraft`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/freebindcraft/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/ligandmpnn`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/ligandmpnn/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/mpnn-mutation`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/mpnn-mutation/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/msa`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/msa/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/position-weight`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/position-weight/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/progen2`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/progen2/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/proteinmpnn`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/proteinmpnn/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/random-nucleotide`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/random-nucleotide/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/random-protein`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/random-protein/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/rfdiffusion-mpnn-binder`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/rfdiffusion-mpnn-binder/carousel.png`,alt:``,loading:`lazy`})}),_jsx(_components.a,{href:`/language/generators/semigreedy-mutation`,class:`tool-catalog-card`,children:_jsx(`img`,{noZoom:true,class:`card-art`,src:`https://proto-bio.github.io/proto-assets/images/generator/semigreedy-mutation/carousel.png`,alt:``,loading:`lazy`})})]})]})}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":{"config":{},"pageMetadata":{"title":"Generators","description":"Components that propose candidate sequences during optimization","icon":"cpu","href":"/language/concepts/generators"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Generators","slug":"generators","depth":1,"children":[]},{"title":"Generator Categories","slug":"generator-categories","depth":2,"children":[]},{"title":"Assigning Generators to Segments","slug":"assigning-generators-to-segments","depth":2,"children":[]},{"title":"Multiple Generators","slug":"multiple-generators","depth":2,"children":[]},{"title":"GPU Memory \u0026 Batch Size","slug":"gpu-memory-\u0026-batch-size","depth":2,"children":[]},{"title":"Next Steps","slug":"next-steps","depth":2,"children":[]},{"title":"Generator Catalog","slug":"generator-catalog","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/bio-pro/420d53823a9563b5/scripts/cite-copy.js","/docs/_mintlify/custom/bio-pro/7c30bf16d661e756/scripts/link-preview.js","/docs/_mintlify/custom/bio-pro/65e61933f80793e4/scripts/card-strip-drag.js","/docs/_mintlify/custom/bio-pro/60ecfd903d434bb7/scripts/contributors-data.js","/docs/_mintlify/custom/bio-pro/0deb81e5f89a3d76/scripts/contributors-footer.js","/docs/_mintlify/custom/bio-pro/4f7773393d2920b2/scripts/scroll-reveal.js","/docs/_mintlify/custom/bio-pro/43c593cef8fda0c2/scripts/docs-link-basepath.js","/docs/_mintlify/custom/bio-pro/b1b75cb70c65ff5b/scripts/asset-image-fallback.js","/docs/_mintlify/custom/bio-pro/bf412a547d7eecdd/scripts/changelog-chart.js","/docs/_mintlify/custom/bio-pro/4f46cab29ae2001a/scripts/changelog-commits.js","/docs/_mintlify/custom/bio-pro/96db303e87b9d434/scripts/changelog-data.js","/docs/_mintlify/custom/bio-pro/d7c81f1123d50588/scripts/updates-data.js","/docs/_mintlify/custom/bio-pro/82a3e9924cbcce1d/scripts/updates.js"],"dynamicCss":".mint-block {\n display: block\n}\n.mint-hidden {\n display: none\n}\n.dark\\:mint-block:is(.dark *) {\n display: block\n}\n.dark\\:mint-hidden:is(.dark *) {\n display: none\n}","subdomain":"bio-pro","siteName":"Proto","title":"Generators - Proto","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-24T05:25:40.360Z","originalFileLocation":"language/concepts/generators.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=\"system\"}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=\"Components that propose candidate sequences during optimization\">\u003cmeta data-mint-head name=\"application-name\" content=\"Proto\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/bio-pro/Ue3c0S123S1nJHyk/_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=\"/docs/mintlify-assets/_mintlify/favicons/bio-pro/Ue3c0S123S1nJHyk/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/bio-pro/Ue3c0S123S1nJHyk/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/bio-pro/Ue3c0S123S1nJHyk/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/bio-pro/Ue3c0S123S1nJHyk/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/bio-pro/Ue3c0S123S1nJHyk/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/bio-pro/Ue3c0S123S1nJHyk/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/bio-pro/Ue3c0S123S1nJHyk/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/bio-pro/Ue3c0S123S1nJHyk/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Generators - Proto\">\u003cmeta data-mint-head property=\"og:description\" content=\"Components that propose candidate sequences during optimization\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Proto\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://proto.evodesign.org/docs/language/concepts/generators\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://proto-bio.github.io/proto-assets/covers/open-wings-code/social.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=\"Generators - Proto\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Components that propose candidate sequences during optimization\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://proto-bio.github.io/proto-assets/covers/open-wings-code/social.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=\"/docs/mintlify-assets/_mintlify/favicons/bio-pro/Ue3c0S123S1nJHyk/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Proto\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#046e7a\">\u003clink data-mint-head rel=\"canonical\" href=\"https://proto.evodesign.org/docs/language/concepts/generators\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/language/concepts/generators.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://proto.evodesign.org/#organization\",\"name\":\"Proto\",\"url\":\"https://proto.evodesign.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/bio-pro/KVh0EKV-IKblvXR8/assets/logo/evo-logo-light.svg?fit=max\u0026auto=format\u0026n=KVh0EKV-IKblvXR8\u0026q=85\u0026s=0cb66034ba45618505501aee6ea5f5c1\"}},{\"@type\":\"WebSite\",\"@id\":\"https://proto.evodesign.org/docs#website\",\"name\":\"Proto\",\"url\":\"https://proto.evodesign.org/docs\",\"publisher\":{\"@id\":\"https://proto.evodesign.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://proto.evodesign.org/docs/language/concepts/generators#webpage\",\"url\":\"https://proto.evodesign.org/docs/language/concepts/generators\",\"name\":\"Generators\",\"description\":\"Components that propose candidate sequences during optimization\",\"dateModified\":\"2026-10-24T05:25:40.360Z\",\"isPartOf\":{\"@id\":\"https://proto.evodesign.org/docs#website\"},\"breadcrumb\":{\"@id\":\"https://proto.evodesign.org/docs/language/concepts/generators#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://proto.evodesign.org/docs/language/concepts/generators#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Language Concepts\",\"item\":\"https://proto.evodesign.org/docs/language/concepts/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Generators\",\"item\":\"https://proto.evodesign.org/docs/language/concepts/generators\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://proto.evodesign.org/docs/language/concepts/generators#article\",\"headline\":\"Generators\",\"name\":\"Generators\",\"description\":\"Components that propose candidate sequences during optimization\",\"url\":\"https://proto.evodesign.org/docs/language/concepts/generators\",\"mainEntityOfPage\":{\"@id\":\"https://proto.evodesign.org/docs/language/concepts/generators#webpage\"},\"image\":\"https://proto-bio.github.io/proto-assets/covers/open-wings-code/social.png\",\"dateModified\":\"2026-10-24T05:25:40.360Z\",\"publisher\":{\"@id\":\"https://proto.evodesign.org/#organization\"},\"isPartOf\":{\"@id\":\"https://proto.evodesign.org/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Proto\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Proto","nav":{"global":null,"tabs":[{"tab":"Overview","pages":[{"title":"Overview","href":"/introduction"}]},{"tab":"Language","groups":[{"group":"Language","pages":[{"title":"Introduction","href":"/language/introduction"},{"title":"Installation","icon":"download","href":"/language/installation"},{"title":"Quickstart","icon":"play","href":"/language/quickstart"}]},{"group":"Language Concepts","pages":[{"title":"Architecture Overview","icon":"book-open","href":"/language/concepts/overview"},{"title":"Sequences","icon":"dna","href":"/language/concepts/sequences"},{"title":"Segments","icon":"rectangle-horizontal","href":"/language/concepts/segments"},{"title":"Constructs","description":"Combining segments into complete biological designs","icon":"layers","href":"/language/concepts/constructs"},{"title":"Generators","icon":"cpu","href":"/language/concepts/generators"},{"title":"Constraints","description":"Scoring functions that encode design requirements as values the optimizer minimizes","icon":"square-function","href":"/language/concepts/constraints"},{"title":"Optimizers","icon":"chart-line","href":"/language/concepts/optimizers"},{"title":"Programs","icon":"list-tree","href":"/language/concepts/programs"},{"title":"Tools","icon":"wrench","href":"/language/concepts/tools"}]},{"group":"Language Guides","pages":[{"title":"Using Constraints","icon":"ruler","href":"/language/guides/using-constraints"},{"title":"Using Generators","icon":"shuffle","href":"/language/guides/using-generators"},{"title":"Using Optimizers","icon":"circle-play","href":"/language/guides/using-optimizers"},{"group":"Example Programs","icon":"play","pages":[{"title":"DNA Sequence Optimization","icon":"dna","href":"/language/guides/examples/dna-optimization"},{"title":"Multi-Stage DNA Optimization","icon":"layers","href":"/language/guides/examples/multi-stage-optimization"},{"title":"Gradient Protein Hallucination","icon":"sparkles","href":"/language/guides/examples/gradient-protein-hallucination"},{"title":"Symmetric Protein Design","icon":"hexagon","href":"/language/guides/examples/symmetric-proteins"},{"title":"Protein Hunter","icon":"crosshair","href":"/language/guides/examples/protein-hunter"},{"title":"Intron Design","icon":"scissors","href":"/language/guides/examples/intron-design"},{"title":"Intron Design with AlphaGenome","icon":"waypoints","href":"/language/guides/examples/intron-design-alphagenome"},{"title":"Binder Design","icon":"magnet","href":"/language/guides/examples/binder-design"},{"title":"ProteinMPNN Ensemble Baseline","icon":"boxes","href":"/language/guides/examples/proteinmpnn-ensemble"},{"title":"Cell-Type-Specific Regulatory DNA","icon":"target","href":"/language/guides/examples/k562-specificity"},{"title":"Epigenomic Morse Code","icon":"radio","href":"/language/guides/examples/epigenomic-morse"},{"title":"Cas9 Generation","icon":"filter","href":"/language/guides/examples/cas9-rejection-sampling"},{"title":"PD-L1 Antibody Design","icon":"shield","href":"/language/guides/examples/germinal-pdl1"}]}]},{"group":"Constraints","icon":"square-function","pages":[{"group":"Protein Quality","icon":"shield-check","root":{"title":"Protein Quality","icon":"shield-check","href":"/language/constraints/protein_quality/overview"},"pages":[{"title":"Balanced Amino Acid Representation","href":"/language/constraints/balanced-aa"},{"title":"Overall Protein Quality","href":"/language/constraints/overall-protein-quality"},{"title":"Protein Complexity","href":"/language/constraints/protein-complexity"},{"title":"Protein Diversity","href":"/language/constraints/protein-diversity"},{"title":"Protein Domain Match","href":"/language/constraints/protein-domain"},{"title":"Protein Length","href":"/language/constraints/protein-length"},{"title":"Protein Max Identity","href":"/language/constraints/protein-max-identity"},{"title":"Protein Nearest-Neighbor Gap Gini","href":"/language/constraints/protein-nearest-neighbor-gap-gini"},{"title":"Protein Profile HMM","href":"/language/constraints/protein-profile-hmm"},{"title":"Protein Repetitiveness","href":"/language/constraints/protein-repetitiveness"}]},{"group":"Protein Structure","icon":"box","root":{"title":"Protein Structure","icon":"box","href":"/language/constraints/protein_structure/overview"},"pages":[{"title":"AF3 Chain-Pair Protein-DNA ipTM","href":"/language/constraints/af3-chain-pair-prot-dna-iptm"},{"title":"AF3 Off-target ipTM Specificity","href":"/language/constraints/af3-offtarget-iptm-specificity"},{"title":"Boltz2 Binding Strength","href":"/language/constraints/boltz2-binding-strength"},{"title":"Consensus Operator Specificity","href":"/language/constraints/consensus-operator-specificity"},{"title":"DBP Design Metrics","href":"/language/constraints/dbp-design-metrics"},{"title":"DeepPBS Motif Specificity","href":"/language/constraints/deeppbs-motif-specificity"},{"title":"DNA Base Contact Quality","href":"/language/constraints/dna-base-contact-quality"},{"title":"DNA Motif Contact Count","href":"/language/constraints/dna-motif-contact-count"},{"title":"DNA Phosphate Contact","href":"/language/constraints/dna-phosphate-contact"},{"title":"Gyration Radius","href":"/language/constraints/gyration-radius"},{"title":"Metal3D Probability","href":"/language/constraints/metal3d-probability"},{"title":"NA-MPNN Motif Specificity","href":"/language/constraints/na-mpnn-motif-specificity"},{"title":"Protein-DNA ipSAE","href":"/language/constraints/protein-dna-ipsae"},{"title":"Protein Globularity","href":"/language/constraints/protein-globularity"},{"title":"Protein Symmetry Ring Structure","href":"/language/constraints/protein-symmetry-ring"},{"title":"PyRosetta Interface","href":"/language/constraints/pyrosetta-interface"},{"title":"Structure Beta Strand","href":"/language/constraints/structure-beta-strand"},{"title":"Structure Composite Confidence","href":"/language/constraints/structure-composite"},{"title":"Structure Contact Loss","href":"/language/constraints/structure-contact"},{"title":"Structure Distogram CCE","href":"/language/constraints/structure-distogram-cce"},{"title":"Structure Ensemble RMSD","href":"/language/constraints/structure-ensemble-rmsd"},{"title":"Structure Helix Loss","href":"/language/constraints/structure-helix"},{"title":"Structure Interface Contact","href":"/language/constraints/structure-interface-contact"},{"title":"Structure Interface pAE","href":"/language/constraints/structure-ipae"},{"title":"Structure Interface pLDDT","href":"/language/constraints/structure-iplddt"},{"title":"Structure ipTM Score","href":"/language/constraints/structure-iptm"},{"title":"Structure pAE Score","href":"/language/constraints/structure-pae"},{"title":"Structure pLDDT Score","href":"/language/constraints/structure-plddt"},{"title":"Structure pTM Score","href":"/language/constraints/structure-ptm"},{"title":"Structure Radius Gyration","href":"/language/constraints/structure-radius-gyration"},{"title":"Structural RMSD Similarity","href":"/language/constraints/structure-rmsd"},{"title":"Structure Termini Distance","href":"/language/constraints/structure-termini-distance"},{"title":"Structural TM-score Similarity","href":"/language/constraints/structure-tmscore"}]},{"group":"RNA Expression","icon":"folder","root":{"title":"RNA Expression","icon":"folder","href":"/language/constraints/rna_expression/overview"},"pages":[{"title":"PARADE UTR activity","href":"/language/constraints/parade-utr-activity"},{"title":"PARADE UTR cell-type specificity","href":"/language/constraints/parade-utr-specificity"},{"title":"PARADE 3' UTR stability","href":"/language/constraints/parade-utr-stability"}]},{"group":"RNA Secondary Structure","icon":"spline","root":{"title":"RNA Secondary Structure","icon":"spline","href":"/language/constraints/rna_secondary_structure/overview"},"pages":[{"title":"Minimum Free Energy","href":"/language/constraints/mfe"},{"title":"RNA Base Pair Similarity","href":"/language/constraints/rna-basepair-similarity"},{"title":"RNA Feature Vector Similarity","href":"/language/constraints/rna-feature-similarity"},{"title":"RNA Structural Motif Similarity","href":"/language/constraints/rna-motif-similarity"},{"title":"RNA Structural Property Similarity","href":"/language/constraints/rna-property-similarity"}]},{"group":"RNA Splicing","icon":"scissors","root":{"title":"RNA Splicing","icon":"scissors","href":"/language/constraints/rna_splicing/overview"},"pages":[{"title":"AlphaGenome splice junction score","href":"/language/constraints/alphagenome-splice-junction"},{"title":"AlphaGenome splice site usage score","href":"/language/constraints/alphagenome-splice-site-usage"},{"title":"SpliceTransformer intron boundary score","href":"/language/constraints/splice-transformer-intron-boundary"},{"title":"SpliceTransformer tissue specificity score","href":"/language/constraints/splice-transformer-specificity"}]},{"group":"Sequence Alignment","icon":"align-left","root":{"title":"Sequence Alignment","icon":"align-left","href":"/language/constraints/sequence_alignment/overview"},"pages":[{"title":"Alignment Gap Gini","href":"/language/constraints/gap-gini"}]},{"group":"Sequence Annotation","icon":"tags","root":{"title":"Sequence Annotation","icon":"tags","href":"/language/constraints/sequence_annotation/overview"},"pages":[{"title":"AlphaGenome Interval Track","href":"/language/constraints/alphagenome-interval-track"},{"title":"Borzoi Chromatin Accessibility MORSE","href":"/language/constraints/borzoi-chromatin-accessibility-morse"},{"title":"Borzoi Track Activity","href":"/language/constraints/borzoi-track-activity"},{"title":"CRISPR Array","href":"/language/constraints/crispr-array"},{"title":"CRISPR tracrRNA","href":"/language/constraints/crispr-tracr-rna"},{"title":"Enformer Chromatin Accessibility MORSE","href":"/language/constraints/enformer-chromatin-accessibility-morse"},{"title":"Longest ORF Length","href":"/language/constraints/longest-orf-length"},{"title":"Malinois Activity","href":"/language/constraints/malinois-activity"},{"title":"miRNA Specificity","href":"/language/constraints/mirna-specificity"},{"title":"Gene/Protein Similarity","href":"/language/constraints/mmseqs-gene-similarity"},{"title":"Operator Site Occlusion","href":"/language/constraints/operator-site"},{"title":"Promoter Strength","href":"/language/constraints/promoter-strength"},{"title":"Puffin Promoter Activity","href":"/language/constraints/puffin-promoter-activity"},{"title":"Sequence Motif Match","href":"/language/constraints/seq-motif"},{"title":"Sigma70 Promoter Strength","href":"/language/constraints/sigma70-promoter"},{"title":"TargetScan Seed Site","href":"/language/constraints/targetscan-site"}]},{"group":"Sequence Composition","icon":"sliders-horizontal","root":{"title":"Sequence Composition","icon":"sliders-horizontal","href":"/language/constraints/sequence_composition/overview"},"pages":[{"title":"Codon Adaptation Index","href":"/language/constraints/codon-adaptation-index"},{"title":"Dinucleotide Composition","href":"/language/constraints/dinucleotide-composition"},{"title":"GC Content","href":"/language/constraints/gc-content"},{"title":"K-mer Frequency","href":"/language/constraints/kmer-frequency"},{"title":"Homopolymer Length","href":"/language/constraints/max-homopolymer"},{"title":"Sequence Length","href":"/language/constraints/sequence-length"},{"title":"Specific K-mer Frequency","href":"/language/constraints/specific-kmer-frequency"},{"title":"Uracil Content","href":"/language/constraints/uracil-content"}]},{"group":"Sequence Scoring","icon":"gauge","root":{"title":"Sequence Scoring","icon":"gauge","href":"/language/constraints/sequence_scoring/overview"},"pages":[{"title":"AbLang Perplexity","href":"/language/constraints/ablang-perplexity"},{"title":"CodonFM Fitness","href":"/language/constraints/codonfm-fitness"},{"title":"ESM2 Perplexity","href":"/language/constraints/esm2-perplexity"},{"title":"MPNN Perplexity","href":"/language/constraints/mpnn-perplexity"},{"title":"MPNN Sequence Probability","href":"/language/constraints/mpnn-sequence-probability"}]}]},{"group":"Generators","icon":"cpu","pages":[{"group":"Mutation","icon":"shuffle","root":{"title":"Mutation","icon":"shuffle","href":"/language/generators/mutation/overview"},"pages":[{"title":"CodonFM Codon Language Model","href":"/language/generators/codonfm"},{"title":"ESM2 Protein Language Model","href":"/language/generators/esm2"},{"title":"ESM3 Protein Language Model","href":"/language/generators/esm3"},{"title":"FreeBindCraft Binder Design","href":"/language/generators/freebindcraft"},{"title":"MPNN Structure-Conditioned Mutation","href":"/language/generators/mpnn-mutation"},{"title":"MSA Generator","href":"/language/generators/msa"},{"title":"Random Nucleotide Mutation","href":"/language/generators/random-nucleotide"},{"title":"Random Protein Mutation","href":"/language/generators/random-protein"},{"title":"RFdiffusion3 + MPNN Binder Design","href":"/language/generators/rfdiffusion-mpnn-binder"},{"title":"Semigreedy Mutation Generator","href":"/language/generators/semigreedy-mutation"}]},{"group":"Autoregressive","icon":"arrow-right","root":{"title":"Autoregressive","icon":"arrow-right","href":"/language/generators/autoregressive/overview"},"pages":[{"title":"Evo1 DNA Language Model","href":"/language/generators/evo1"},{"title":"Evo2 DNA Language Model","href":"/language/generators/evo2"},{"title":"ProGen2 Protein Language Model","href":"/language/generators/progen2"}]},{"group":"Inverse Folding","icon":"rotate-ccw","root":{"title":"Inverse Folding","icon":"rotate-ccw","href":"/language/generators/inverse_folding/overview"},"pages":[{"title":"FAMPNN Inverse Folding","href":"/language/generators/fampnn"},{"title":"LigandMPNN Inverse Folding","href":"/language/generators/ligandmpnn"},{"title":"ProteinMPNN Inverse Folding","href":"/language/generators/proteinmpnn"}]},{"group":"Gradient","icon":"trending-down","root":{"title":"Gradient","icon":"trending-down","href":"/language/generators/gradient/overview"},"pages":[{"title":"Position Weight Generator","href":"/language/generators/position-weight"}]}]},{"group":"Optimizers","icon":"chart-line","pages":[{"title":"Beam Search Optimizer","href":"/language/optimizers/beam-search"},{"title":"Cycling Optimizer","href":"/language/optimizers/cycling"},{"title":"Genetic Algorithm Optimizer","href":"/language/optimizers/genetic-algorithm"},{"title":"Gradient Optimizer","href":"/language/optimizers/gradient"},{"title":"MCMC Optimizer","href":"/language/optimizers/mcmc"},{"title":"Rejection Sampling Optimizer","href":"/language/optimizers/rejection-sampling"}]}]},{"tab":"Tools","pages":[{"title":"Tools","href":"/tools/introduction"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp/introduction"}]}]},"basePath":"","title":"Generators - Proto","buildId":"dpl_6dVqRXFR2Go5vF5RLvAdHuv189oT","deploymentId":"dpl_6dVqRXFR2Go5vF5RLvAdHuv189oT","dynamics":[],"chunks":[]}