> ## Documentation Index
> Fetch the complete documentation index at: https://proto.evodesign.org/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ProGen2 Protein Language Model

> ProGen2 autoregressive protein language model for protein sequence generation

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/generator/progen2/hero.png" alt="ProGen2 Protein Language Model" />
</div>

<Note>
  **License:** ProGen2 is open source and free for academic and commercial use under a BSD-3-Clause license. Please refer to [the license](https://github.com/enijkamp/progen2/blob/main/LICENSE.txt) for full terms.
</Note>

<p class="entity-disclaimer">This generator is open source. Any third-party models, product names, or trademarks referenced are the property of their respective owners, and Proto is not affiliated with them.</p>

<hr class="entity-rule" />

<input type="radio" name="tab-generator-progen2" id="none-generator-progen2" class="tab-radio-input" />

<input type="radio" name="tab-generator-progen2" id="tools-generator-progen2" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-generator-progen2" id="source-generator-progen2" class="tab-radio-input" />

<input type="radio" name="tab-generator-progen2" id="cite-generator-progen2" class="tab-radio-input" />

<div class="tool-tab-bar"><span class="tool-tab-wrap"><label for="tools-generator-progen2" class="tool-tab tab-open badge-tools"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="7" height="7" x="3" y="3" rx="1" /><rect width="7" height="7" x="14" y="3" rx="1" /><rect width="7" height="7" x="14" y="14" rx="1" /><rect width="7" height="7" x="3" y="14" rx="1" /></svg> Tools Used</label><label for="none-generator-progen2" class="tool-tab tab-close badge-tools"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="7" height="7" x="3" y="3" rx="1" /><rect width="7" height="7" x="14" y="3" rx="1" /><rect width="7" height="7" x="14" y="14" rx="1" /><rect width="7" height="7" x="3" y="14" rx="1" /></svg> Tools Used</label></span> <span class="tool-tab-wrap"><label for="source-generator-progen2" class="tool-tab tab-open badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</label><label for="none-generator-progen2" class="tool-tab tab-close badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</label></span> <span class="tool-tab-wrap"><label for="cite-generator-progen2" class="tool-tab tab-open badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label><label for="none-generator-progen2" class="tool-tab tab-close badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label></span></div>

<a href="/docs/tools/causal-models/progen2" class="tab-panel tools-panel tools-panel-single" data-tab="tools-generator-progen2">
  <div class="tools-single-card">
    <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/progen2/social.png" alt="" loading="lazy" />
  </div>

  <span class="panel-goto-btn tools-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14" /><path d="m12 5 7 7-7 7" /></svg> Go to Tool Page</span></span>
</a>

<a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/generator/progen2_generator.py#L190" target="_blank" class="tab-panel source-panel" data-tab="source-generator-progen2">
  <div class="source-info">
    <img noZoom src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-language<span class="source-subpath">/proto\_language/generator/progen2\_generator.py</span></span>
  </div>

  <span class="panel-goto-btn source-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> View source</span></span>
</a>

<div class="tab-panel cite-panel" data-tab="cite-generator-progen2">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{nijkamp2023progen2,
      title={ProGen2: Exploring the boundaries of protein language models},
      author={Nijkamp, Erik and Ruffolo, Jeffrey A and Weinstein, Eli N and Naik, Nikhil and Madani, Ali},
      journal={Cell Systems},
      volume={14},
      number={11},
      pages={968--978},
      year={2023},
      publisher={Elsevier},
      doi={10.1016/j.cels.2023.10.002}
    }
    ```
  </div>

  <span class="panel-goto-btn cite-copy-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Copy citation</span></span>
</div>

<div class="entity-contributors"><span class="entity-contributors-label">Generator contributors</span><span class="entity-contributors-people"><a class="entity-contributor" href="https://github.com/dguo8412" target="_blank" rel="noopener" title="dguo8412: 3 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/46211285?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">dguo8412</span></a></span></div>
Protein sequence generator using ProGen2 autoregressive language model.

## API Reference

<div class="api-model-section api-model-static api-config-section">
  <div class="api-model-header"><span class="api-model-badge api-config-badge">Config</span><span class="api-model-name">ProGen2GeneratorConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/generator/progen2_generator.py#L20" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  Configuration object for ProGen2Generator.

  This class defines configuration parameters for the ProGen2 generator, which uses
  the ProGen2 protein language model to autoregressively generate protein sequences
  from prompt sequences.

  Models are loaded from HuggingFace: [https://huggingface.co/hugohrban/](https://huggingface.co/hugohrban/)

  <Note>
    For detailed information on ProGen2, see:

    * HuggingFace: [https://huggingface.co/hugohrban/](https://huggingface.co/hugohrban/)
    * GitHub: [https://github.com/hugohrban/ProGen2-finetuning](https://github.com/hugohrban/ProGen2-finetuning)
    * Original GitHub: [https://github.com/enijkamp/progen2](https://github.com/enijkamp/progen2)
    * Original paper: [https://www.cell.com/cell-systems/fulltext/S2405-4712(23)00272-7](https://www.cell.com/cell-systems/fulltext/S2405-4712\(23\)00272-7)
  </Note>

  <ParamField path="prompts" type="List[string]" required>
    Prompt sequences for protein sequence generation
  </ParamField>

  <ParamField path="model_checkpoint" type="enum" default="progen2-large">
    ProGen2 model variant to load (e.g. progen2-large).

    Options: `progen2-small`, `progen2-medium`, `progen2-base`, `progen2-oas`, `progen2-large`, `progen2-BFD90`, `progen2-xlarge`
  </ParamField>

  <ParamField path="local_path" type="string">
    Path to local model weights
  </ParamField>

  <ParamField path="device" type="string" default="cuda">
    GPU device to run ProGen2 on (e.g. 'cuda' or 'cuda:0').
  </ParamField>

  <ParamField path="temperature" type="number" default="0.2">
    Sharpness of sampling. Below 1 favors high-probability tokens; above 1 increases diversity.
  </ParamField>

  <ParamField path="top_p" type="number" default="0.95">
    Nucleus sampling cumulative probability cutoff. 1.0 disables nucleus sampling.
  </ParamField>

  <ParamField path="top_k" type="integer" default="0">
    At each step, restrict sampling to the k most probable tokens. Set to 0 to disable top-k truncation.
  </ParamField>

  <ParamField path="truncate_at_stop" type="boolean" default="True">
    Whether to truncate sequences at stop tokens
  </ParamField>

  <ParamField path="strip_special_tokens" type="boolean" default="True">
    Whether to strip start and stop tokens from final output
  </ParamField>

  <ParamField path="prepend_prompt" type="boolean" default="True">
    Whether to prepend prompt to generation
  </ParamField>

  <ParamField path="batch_size" type="integer" default="1">
    Number of sequences to process simultaneously on GPU
  </ParamField>

  <ParamField path="verbose" type="boolean" default="False">
    Whether to print verbose output
  </ParamField>
</div>

## Usage

```python python icon="python" theme={null}
from proto_language.generator import ProGen2Generator, ProGen2GeneratorConfig
from proto_language.core import Segment

config = ProGen2GeneratorConfig(
    # Configure parameters here
)

generator = ProGen2Generator(config)

segment = Segment(length=100, sequence_type="protein")
generator.assign(segment)
generator.sample()
```

## Metadata

| Property                 | Value              |
| ------------------------ | ------------------ |
| Key                      | `progen2`          |
| Class                    | `ProGen2Generator` |
| Category                 | `autoregressive`   |
| Input Type               | `prompt`           |
| Uses GPU                 | `True`             |
| Supported Sequence Types | `protein`          |
| Allows Empty Start       | `False`            |
